@educrib/database
Version:
Common database project for Educrib Ecosystem
936 lines (865 loc) • 260 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const {
PrismaClientKnownRequestError,
PrismaClientUnknownRequestError,
PrismaClientRustPanicError,
PrismaClientInitializationError,
PrismaClientValidationError,
NotFoundError,
getPrismaClient,
sqltag,
empty,
join,
raw,
Decimal,
Debug,
objectEnumValues,
makeStrictEnum,
Extensions,
warnOnce,
defineDmmfProperty,
Public,
} = require('./runtime/library')
const Prisma = {}
exports.Prisma = Prisma
exports.$Enums = {}
/**
* Prisma Client JS version: 5.5.2
* Query Engine version: aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a
*/
Prisma.prismaVersion = {
client: "5.5.2",
engine: "aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a"
}
Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError;
Prisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError
Prisma.PrismaClientRustPanicError = PrismaClientRustPanicError
Prisma.PrismaClientInitializationError = PrismaClientInitializationError
Prisma.PrismaClientValidationError = PrismaClientValidationError
Prisma.NotFoundError = NotFoundError
Prisma.Decimal = Decimal
/**
* Re-export of sql-template-tag
*/
Prisma.sql = sqltag
Prisma.empty = empty
Prisma.join = join
Prisma.raw = raw
Prisma.validator = Public.validator
/**
* Extensions
*/
Prisma.getExtensionContext = Extensions.getExtensionContext
Prisma.defineExtension = Extensions.defineExtension
/**
* Shorthand utilities for JSON filtering
*/
Prisma.DbNull = objectEnumValues.instances.DbNull
Prisma.JsonNull = objectEnumValues.instances.JsonNull
Prisma.AnyNull = objectEnumValues.instances.AnyNull
Prisma.NullTypes = {
DbNull: objectEnumValues.classes.DbNull,
JsonNull: objectEnumValues.classes.JsonNull,
AnyNull: objectEnumValues.classes.AnyNull
}
const path = require('path')
/**
* Enums
*/
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
ReadUncommitted: 'ReadUncommitted',
ReadCommitted: 'ReadCommitted',
RepeatableRead: 'RepeatableRead',
Serializable: 'Serializable'
});
exports.Prisma.VerticalScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
isFoundation: 'isFoundation'
};
exports.Prisma.CategoryScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
verticalId: 'verticalId'
};
exports.Prisma.TypeScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
verticalId: 'verticalId'
};
exports.Prisma.CountryScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
alias: 'alias',
code: 'code',
locale: 'locale',
currency: 'currency',
flag: 'flag'
};
exports.Prisma.LocationScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
alias: 'alias',
shortAddress: 'shortAddress',
area: 'area',
region: 'region',
state: 'state',
countryId: 'countryId',
profileId: 'profileId'
};
exports.Prisma.CurrencyScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
code: 'code',
slug: 'slug',
icon: 'icon'
};
exports.Prisma.ContactTypeScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.CurriculumScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.AccreditationScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
description: 'description',
link: 'link'
};
exports.Prisma.UniversityScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
description: 'description',
link: 'link'
};
exports.Prisma.ManagementScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
description: 'description',
link: 'link'
};
exports.Prisma.FacilityScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.DesignationScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.MediaScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.SocialScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.DurationTypeScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.FrequencyScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.IntakeScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.LevelScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail'
};
exports.Prisma.CourseScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
description: 'description',
link: 'link'
};
exports.Prisma.SpecializationScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
icon: 'icon',
thumbnail: 'thumbnail',
description: 'description',
link: 'link'
};
exports.Prisma.ProfileScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
alias: 'alias',
slug: 'slug',
avatar: 'avatar',
thumbnail: 'thumbnail',
description: 'description',
code: 'code',
establishedYear: 'establishedYear',
verticalId: 'verticalId',
managementId: 'managementId',
universityId: 'universityId',
typeId: 'typeId',
curriculumId: 'curriculumId',
profileImages: 'profileImages',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views'
};
exports.Prisma.SeoScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
description: 'description',
keywords: 'keywords',
canonical: 'canonical',
thumbnail: 'thumbnail',
profileId: 'profileId'
};
exports.Prisma.ProfileCategoryScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
profileId: 'profileId',
categoryId: 'categoryId'
};
exports.Prisma.ProfileAccreditationScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
profileId: 'profileId',
accreditationId: 'accreditationId'
};
exports.Prisma.ProfileContactScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
phone: 'phone',
email: 'email',
website: 'website',
contactTypeId: 'contactTypeId',
profileId: 'profileId'
};
exports.Prisma.ProfileStaffScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
avatar: 'avatar',
title: 'title',
designationId: 'designationId',
profileId: 'profileId'
};
exports.Prisma.ProfileStaffContactScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
phone: 'phone',
email: 'email',
website: 'website',
contactTypeId: 'contactTypeId',
profileStaffId: 'profileStaffId'
};
exports.Prisma.ProfileProgrammeScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
avatar: 'avatar',
thumbnail: 'thumbnail',
courseId: 'courseId',
specializationId: 'specializationId',
profileId: 'profileId',
intakeId: 'intakeId',
capacity: 'capacity',
levelId: 'levelId',
duration: 'duration',
durationTypeId: 'durationTypeId'
};
exports.Prisma.ProfileProgrammeFeeScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
amount: 'amount',
currencyId: 'currencyId',
frequencyId: 'frequencyId',
profileProgrammeId: 'profileProgrammeId'
};
exports.Prisma.ProfileMediaScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
link: 'link',
profileId: 'profileId',
mediaId: 'mediaId'
};
exports.Prisma.ProfileSocialScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
link: 'link',
profileId: 'profileId',
socialId: 'socialId'
};
exports.Prisma.ProfileFacilityScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
profileId: 'profileId',
facilityId: 'facilityId'
};
exports.Prisma.ProfileReportScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
description: 'description',
name: 'name',
phone: 'phone',
email: 'email',
location: 'location',
profileId: 'profileId'
};
exports.Prisma.ProfileRequestScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
description: 'description',
name: 'name',
phone: 'phone',
email: 'email',
location: 'location',
profileId: 'profileId'
};
exports.Prisma.ProfileRelationScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
description: 'description',
name: 'name',
phone: 'phone',
email: 'email',
location: 'location',
rating: 'rating',
profileId: 'profileId'
};
exports.Prisma.ProfileReviewScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
description: 'description',
rating: 'rating',
name: 'name',
phone: 'phone',
email: 'email',
location: 'location',
profileId: 'profileId'
};
exports.Prisma.ProfileEventScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
location: 'location',
startDate: 'startDate',
endDate: 'endDate',
images: 'images',
website: 'website',
profileId: 'profileId',
typeId: 'typeId',
categoryId: 'categoryId',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views'
};
exports.Prisma.ProfileEventTicketScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
amount: 'amount',
currencyId: 'currencyId',
profileEventId: 'profileEventId'
};
exports.Prisma.ProfileHostelScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
location: 'location',
typeId: 'typeId',
categoryId: 'categoryId',
currencyId: 'currencyId',
images: 'images',
website: 'website',
facilities: 'facilities',
profileId: 'profileId',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views'
};
exports.Prisma.ProfileHostelFeeScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
amount: 'amount',
currencyId: 'currencyId',
frequencyId: 'frequencyId',
profileHostelId: 'profileHostelId'
};
exports.Prisma.ProfileHostelFacilityScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
profileHostelId: 'profileHostelId',
facilityId: 'facilityId'
};
exports.Prisma.ProfileHostelContactScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
contactTypeId: 'contactTypeId',
profileHostelId: 'profileHostelId'
};
exports.Prisma.ProfileJobScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
location: 'location',
duration: 'duration',
durationTypeId: 'durationTypeId',
domain: 'domain',
remuneration: 'remuneration',
currencyId: 'currencyId',
accomodation: 'accomodation',
benefits: 'benefits',
profileId: 'profileId',
website: 'website',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views',
categoryId: 'categoryId',
typeId: 'typeId'
};
exports.Prisma.ProfileJobRequestScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
name: 'name',
phone: 'phone',
email: 'email',
location: 'location',
cv: 'cv',
profileJobId: 'profileJobId'
};
exports.Prisma.ProfileInternshipScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
location: 'location',
duration: 'duration',
durationTypeId: 'durationTypeId',
domain: 'domain',
remuneration: 'remuneration',
currencyId: 'currencyId',
accomodation: 'accomodation',
benefits: 'benefits',
profileId: 'profileId',
website: 'website',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views',
categoryId: 'categoryId',
typeId: 'typeId'
};
exports.Prisma.ProfileInternshipRequestScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
name: 'name',
phone: 'phone',
email: 'email',
location: 'location',
cv: 'cv',
profileInternshipId: 'profileInternshipId'
};
exports.Prisma.ProfileNewsScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
profileId: 'profileId',
website: 'website',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views'
};
exports.Prisma.ProfileArticleScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
profileId: 'profileId',
website: 'website',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views'
};
exports.Prisma.ProfileScholarshipScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
profileId: 'profileId',
website: 'website',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views'
};
exports.Prisma.ProfilePlacementScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
description: 'description',
avatar: 'avatar',
thumbnail: 'thumbnail',
profileId: 'profileId',
website: 'website',
featured: 'featured',
recommended: 'recommended',
verified: 'verified',
published: 'published',
views: 'views'
};
exports.Prisma.ProfileRouteScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
title: 'title',
slug: 'slug',
avatar: 'avatar',
thumbnail: 'thumbnail',
name: 'name',
phone: 'phone',
description: 'description',
code: 'code',
time: 'time',
plate: 'plate',
profileId: 'profileId'
};
exports.Prisma.SortOrder = {
asc: 'asc',
desc: 'desc'
};
exports.Prisma.QueryMode = {
default: 'default',
insensitive: 'insensitive'
};
exports.Prisma.NullsOrder = {
first: 'first',
last: 'last'
};
exports.Prisma.ModelName = {
vertical: 'vertical',
category: 'category',
type: 'type',
country: 'country',
location: 'location',
currency: 'currency',
contactType: 'contactType',
curriculum: 'curriculum',
accreditation: 'accreditation',
university: 'university',
management: 'management',
facility: 'facility',
designation: 'designation',
media: 'media',
social: 'social',
durationType: 'durationType',
frequency: 'frequency',
intake: 'intake',
level: 'level',
course: 'course',
specialization: 'specialization',
profile: 'profile',
seo: 'seo',
profileCategory: 'profileCategory',
profileAccreditation: 'profileAccreditation',
profileContact: 'profileContact',
profileStaff: 'profileStaff',
profileStaffContact: 'profileStaffContact',
profileProgramme: 'profileProgramme',
profileProgrammeFee: 'profileProgrammeFee',
profileMedia: 'profileMedia',
profileSocial: 'profileSocial',
profileFacility: 'profileFacility',
profileReport: 'profileReport',
profileRequest: 'profileRequest',
profileRelation: 'profileRelation',
profileReview: 'profileReview',
profileEvent: 'profileEvent',
profileEventTicket: 'profileEventTicket',
profileHostel: 'profileHostel',
profileHostelFee: 'profileHostelFee',
profileHostelFacility: 'profileHostelFacility',
profileHostelContact: 'profileHostelContact',
profileJob: 'profileJob',
profileJobRequest: 'profileJobRequest',
profileInternship: 'profileInternship',
profileInternshipRequest: 'profileInternshipRequest',
profileNews: 'profileNews',
profileArticle: 'profileArticle',
profileScholarship: 'profileScholarship',
profilePlacement: 'profilePlacement',
profileRoute: 'profileRoute'
};
/**
* Create the Client
*/
const config = {
"generator": {
"name": "client",
"provider": {
"fromEnvVar": null,
"value": "prisma-client-js"
},
"output": {
"value": "/Users/ajithmathew/Documents/educrib-ecosystem/educrib-database/client",
"fromEnvVar": null
},
"config": {
"engineType": "library"
},
"binaryTargets": [
{
"fromEnvVar": null,
"value": "darwin-arm64",
"native": true
}
],
"previewFeatures": [],
"isCustomOutput": true
},
"relativeEnvPaths": {
"rootEnvPath": "../.env",
"schemaEnvPath": "../.env"
},
"relativePath": "..",
"clientVersion": "5.5.2",
"engineVersion": "aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a",
"datasourceNames": [
"db"
],
"activeProvider": "postgresql",
"inlineDatasources": {
"db": {
"url": {
"fromEnvVar": "DATABASE_URL",
"value": null
}
}
},
"inlineSchema": "Z2VuZXJhdG9yIGNsaWVudCB7CiAgcHJvdmlkZXIgPSAicHJpc21hLWNsaWVudC1qcyIKICBvdXRwdXQgICA9ICIuL2NsaWVudCIKfQoKZGF0YXNvdXJjZSBkYiB7CiAgcHJvdmlkZXIgPSAicG9zdGdyZXNxbCIKICB1cmwgICAgICA9IGVudigiREFUQUJBU0VfVVJMIikKfQoKLy8gQm90aCBmb3VuZGF0aW9uIGFuZCBzcGluIG9mZiB2ZXJ0aWNhbHMgd2lsbCBiZSBhdmFpbGFibGUgYXMgYSAKLy8gc2VhcmNoIHZlcnRpY2FsIGluIEVkdWNyaWIgRGlzY292ZXIgZm9yIHRoZSBlbmQgdXNlci4gCi8vIENhdGVnb3JpZXMgYW5kIHR5cGVzIGNhbiBiZSBjcmVhdGVkIGFnYWluc3QgYWxsIDE2IHZlcnRpY2Fscy4gCgptb2RlbCB2ZXJ0aWNhbCB7CiAgaWQgICAgICAgICAgIFN0cmluZyAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgQm9vbGVhbiAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICBEYXRlVGltZSAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICBEYXRlVGltZSAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgU3RyaW5nICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgIFN0cmluZyAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgIFN0cmluZz8KICBpc0ZvdW5kYXRpb24gQm9vbGVhbiAgICBAZGVmYXVsdCh0cnVlKSAvLyBGb3VuZGF0aW9uIHZlcnRpY2FscyBhcmUgdGhlIHZlcnRpY2FscyBmb3Igd2hpY2ggYSB1c2VyIGNhbiBjcmVhdGUgYSBwcm9maWxlCiAgY2F0ZWdvcmllcyAgIGNhdGVnb3J5W10KICB0eXBlcyAgICAgICAgdHlwZVtdCiAgcHJvZmlsZXMgICAgIHByb2ZpbGVbXQp9CgovLyBFYWNoIHZlcnRpY2FsIHdpbGwgaGF2ZSBtdWx0aXBsZSBjYXRlZ29yaWVzLiAKLy8gVXNlcnMgY2FuIGNyZWF0ZSBjYXRlZ29yaWVzIGFnYWluc3QgYSB2ZXJ0aWNhbCBpbiBFZHVjcmliIFZhdWx0LiAKLy8gRm9yIGV4YW1wbGUsIGNvbGxlZ2Ugd2lsbCBoYXZlIGVuZ2luZWVyaW5nLCBtZWRpY2FsIGV0YyBhcyBjYXRlZ29yaWVzLiAKLy8gTGlrZXdpc2UsIHNjaG9vbHMgd2lsbCBoYXZlIGVsZW1lbnRhcnksIGhpZ2ggc2Nob29sIGV0YyBhcyBjYXRlZ29yaWVzCgptb2RlbCBjYXRlZ29yeSB7CiAgaWQgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgIFN0cmluZz8KICB2ZXJ0aWNhbCAgICAgICAgICAgdmVydGljYWw/ICAgICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbdmVydGljYWxJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgdmVydGljYWxJZCAgICAgICAgIFN0cmluZz8KICBwcm9maWxlQ2F0ZWdvcmllcyAgcHJvZmlsZUNhdGVnb3J5W10KICBwcm9maWxlSm9icyAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZUV2ZW50cyAgICAgIHByb2ZpbGVFdmVudFtdCiAgcHJvZmlsZUhvc3RlbHMgICAgIHByb2ZpbGVIb3N0ZWxbXQogIHByb2ZpbGVJbnRlcm5zaGlwcyBwcm9maWxlSW50ZXJuc2hpcFtdCn0KCi8vIEVhY2ggdmVydGljYWwgd2lsbCBoYXZlIG11bHRpcGxlIHR5cGVzLiAKLy8gVXNlcnMgY2FuIGNyZWF0ZSB0eXBlcyBhZ2FpbnN0IGEgdmVydGljYWwgaW4gRWR1Y3JpYiBWYXVsdC4gCi8vIEZvciBleGFtcGxlLCBjb2xsZWdlcyBhbmQgc2Nob29scyB3aWxsIGhhdmUgcHJpdmF0ZSwgZ292ZXJubWVudCBldGMgYXMgdHlwZXMuICAKCm1vZGVsIHR5cGUgewogIGlkICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgICBTdHJpbmc/CiAgdmVydGljYWwgICAgICAgICAgIHZlcnRpY2FsPyAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3ZlcnRpY2FsSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHZlcnRpY2FsSWQgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZXMgICAgICAgICAgIHByb2ZpbGVbXQogIHByb2ZpbGVIb3N0ZWxzICAgICBwcm9maWxlSG9zdGVsW10KICBwcm9maWxlSm9icyAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZUV2ZW50cyAgICAgIHByb2ZpbGVFdmVudFtdCiAgcHJvZmlsZUludGVybnNoaXBzIHByb2ZpbGVJbnRlcm5zaGlwW10KfQoKLy8gQ291bnRyaWVzIHdpbGwgYmUgYWRkZWQgYmFzZWQgb24gZ2VvZ3JhcGhpY2FsIGV4cGFuc2lvbnMuCgptb2RlbCBjb3VudHJ5IHsKICBpZCAgICAgICAgU3RyaW5nICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICBCb29sZWFuICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0IERhdGVUaW1lICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0IERhdGVUaW1lICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICBTdHJpbmcgICAgIEB1bmlxdWUKICBzbHVnICAgICAgU3RyaW5nICAgICBAdW5pcXVlCiAgYWxpYXMgICAgIFN0cmluZz8gLy8gYWx0ZXJuYXRlIG5hbWUKICBjb2RlICAgICAgU3RyaW5nPwogIGxvY2FsZSAgICBTdHJpbmc/CiAgY3VycmVuY3kgIFN0cmluZz8KICBmbGFnICAgICAgU3RyaW5nPwogIGxvY2F0aW9ucyBsb2NhdGlvbltdCn0KCi8vIExvY2F0aW9uIHdpbGwgYmUgZm91bmRhdGlvbiBmb3Igc2VhcmNoIGFuZCBsaXN0aW5nIGZvciBFZHVjcmliIGVjb3N5c3RlbS4gCi8vIEVhY2ggbG9jYXRpb24gd2lsbCBhY3QgYXMgYSBtaWNybyBsb2NhdGlvbiB3aXRoIGxpc3RpbmdzIGZyb20gYWxsIHZlcnRpY2Fscy4KCm1vZGVsIGxvY2F0aW9uIHsKICBpZCAgICAgICAgICAgU3RyaW5nICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgQm9vbGVhbiAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgRGF0ZVRpbWUgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgIERhdGVUaW1lIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgU3RyaW5nICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICBTdHJpbmcgICBAdW5pcXVlCiAgYWxpYXMgICAgICAgIFN0cmluZz8gLy8gYWx0ZXJuYXRlIG5hbWUKICBzaG9ydEFkZHJlc3MgU3RyaW5nCiAgYXJlYSAgICAgICAgIFN0cmluZz8gLy8gbGV2ZWwgMQogIHJlZ2lvbiAgICAgICBTdHJpbmc/IC8vIGxldmVsIDIKICBzdGF0ZSAgICAgICAgU3RyaW5nPyAvLyBsZXZlbCAzCiAgY291bnRyeSAgICAgIGNvdW50cnk/IEByZWxhdGlvbihmaWVsZHM6IFtjb3VudHJ5SWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIGNvdW50cnlJZCAgICBTdHJpbmc/CiAgcHJvZmlsZSAgICAgIHByb2ZpbGUgIEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCAgICBTdHJpbmcgICBAdW5pcXVlCn0KCm1vZGVsIGN1cnJlbmN5IHsKICBpZCAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgQHVuaXF1ZQogIGNvZGUgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZUhvc3RlbHMgICAgICAgcHJvZmlsZUhvc3RlbFtdCiAgcHJvZmlsZUpvYnMgICAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZUludGVybnNoaXBzICAgcHJvZmlsZUludGVybnNoaXBbXQogIHByb2ZpbGVQcm9ncmFtbWVGZWVzIHByb2ZpbGVQcm9ncmFtbWVGZWVbXQogIHByb2ZpbGVIb3N0ZWxGZWVzICAgIHByb2ZpbGVIb3N0ZWxGZWVbXQogIHByb2ZpbGVFdmVudFRpY2tldHMgIHByb2ZpbGVFdmVudFRpY2tldFtdCn0KCm1vZGVsIGNvbnRhY3RUeXBlIHsKICBpZCAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVDb250YWN0cyAgICAgICBwcm9maWxlQ29udGFjdFtdCiAgcHJvZmlsZVN0YWZmQ29udGFjdHMgIHByb2ZpbGVTdGFmZkNvbnRhY3RbXQogIHByb2ZpbGVIb3N0ZWxDb250YWN0cyBwcm9maWxlSG9zdGVsQ29udGFjdFtdCn0KCm1vZGVsIGN1cnJpY3VsdW0gewogIGlkICAgICAgICBTdHJpbmcgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgQm9vbGVhbiAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0IERhdGVUaW1lICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgU3RyaW5nICAgIEB1bmlxdWUKICBzbHVnICAgICAgU3RyaW5nICAgIEB1bmlxdWUKICBpY29uICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCBTdHJpbmc/CiAgcHJvZmlsZXMgIHByb2ZpbGVbXQp9Cgptb2RlbCBhY2NyZWRpdGF0aW9uIHsKICBpZCAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgICAgIFN0cmluZz8KICBkZXNjcmlwdGlvbiAgICAgICAgICBTdHJpbmc/CiAgbGluayAgICAgICAgICAgICAgICAgU3RyaW5nPyAvLyBsaW5rIHRvIG9mZmljaWFsIHdlYnNpdGUKICBwcm9maWxlQWNjcmVkaXRhdGlvbiBwcm9maWxlQWNjcmVkaXRhdGlvbltdCn0KCm1vZGVsIHVuaXZlcnNpdHkgewogIGlkICAgICAgICAgIFN0cmluZyAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgIEJvb2xlYW4gICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgIERhdGVUaW1lICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICBEYXRlVGltZSAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgIFN0cmluZyAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgU3RyaW5nICAgIEB1bmlxdWUKICBpY29uICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgU3RyaW5nPwogIGRlc2NyaXB0aW9uIFN0cmluZz8KICBsaW5rICAgICAgICBTdHJpbmc/IC8vIGxpbmsgdG8gb2ZmaWNpYWwgd2Vic2l0ZQogIHByb2ZpbGVzICAgIHByb2ZpbGVbXQp9Cgptb2RlbCBtYW5hZ2VtZW50IHsKICBpZCAgICAgICAgICBTdHJpbmcgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICBCb29sZWFuICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICBEYXRlVGltZSAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgRGF0ZVRpbWUgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICBTdHJpbmcgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgIFN0cmluZyAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgIFN0cmluZz8KICBkZXNjcmlwdGlvbiBTdHJpbmc/CiAgbGluayAgICAgICAgU3RyaW5nPyAvLyBsaW5rIHRvIG9mZmljaWFsIHdlYnNpdGUKICBwcm9maWxlcyAgICBwcm9maWxlW10KfQoKbW9kZWwgZmFjaWxpdHkgewogIGlkICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVGYWNpbGl0aWVzICAgICAgIHByb2ZpbGVGYWNpbGl0eVtdCiAgcHJvZmlsZUhvc3RlbEZhY2lsaXRpZXMgcHJvZmlsZUhvc3RlbEZhY2lsaXR5W10KfQoKbW9kZWwgZGVzaWduYXRpb24gewogIGlkICAgICAgICAgICAgU3RyaW5nICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgIEJvb2xlYW4gICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICBEYXRlVGltZSAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgIERhdGVUaW1lICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgIFN0cmluZyAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgIFN0cmluZyAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgIFN0cmluZz8KICBwcm9maWxlU3RhZmZzIHByb2ZpbGVTdGFmZltdCn0KCm1vZGVsIG1lZGlhIHsKICBpZCAgICAgICAgICAgU3RyaW5nICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgQm9vbGVhbiAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgRGF0ZVRpbWUgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgIERhdGVUaW1lICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgU3RyaW5nICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICBTdHJpbmcgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgU3RyaW5nPwogIHByb2ZpbGVNZWRpYSBwcm9maWxlTWVkaWFbXQp9Cgptb2RlbCBzb2NpYWwgewogIGlkICAgICAgICAgICAgU3RyaW5nICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICBCb29sZWFuICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgIERhdGVUaW1lICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgIERhdGVUaW1lICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICBTdHJpbmcgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgU3RyaW5nICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgIFN0cmluZz8KICBwcm9maWxlU29jaWFsIHByb2ZpbGVTb2NpYWxbXQp9Cgptb2RlbCBkdXJhdGlvblR5cGUgewogIGlkICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZVByb2dyYW1tZXMgIHByb2ZpbGVQcm9ncmFtbWVbXQogIHByb2ZpbGVKb2JzICAgICAgICBwcm9maWxlSm9iW10KICBwcm9maWxlSW50ZXJuc2hpcHMgcHJvZmlsZUludGVybnNoaXBbXQp9Cgptb2RlbCBmcmVxdWVuY3kgewogIGlkICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVQcm9ncmFtbWVGZWVzIHByb2ZpbGVQcm9ncmFtbWVGZWVbXQogIHByb2ZpbGVIb3N0ZWxGZWVzICAgIHByb2ZpbGVIb3N0ZWxGZWVbXQp9Cgptb2RlbCBpbnRha2UgewogIGlkICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgIERhdGVUaW1lICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVQcm9ncmFtbWVzIHByb2ZpbGVQcm9ncmFtbWVbXQp9Cgptb2RlbCBsZXZlbCB7CiAgaWQgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgIERhdGVUaW1lICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZVByb2dyYW1tZXMgcHJvZmlsZVByb2dyYW1tZVtdCn0KCm1vZGVsIGNvdXJzZSB7CiAgaWQgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgIERhdGVUaW1lICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICBTdHJpbmc/CiAgZGVzY3JpcHRpb24gICAgICAgU3RyaW5nPwogIGxpbmsgICAgICAgICAgICAgIFN0cmluZz8gLy8gbGluayB0byBvZmZpY2lhbCB3ZWJzaXRlCiAgcHJvZmlsZVByb2dyYW1tZXMgcHJvZmlsZVByb2dyYW1tZVtdCn0KCm1vZGVsIHNwZWNpYWxpemF0aW9uIHsKICBpZCAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgIFN0cmluZz8KICBkZXNjcmlwdGlvbiAgICAgICBTdHJpbmc/CiAgbGluayAgICAgICAgICAgICAgU3RyaW5nPyAvLyBsaW5rIHRvIG9mZmljaWFsIHdlYnNpdGUKICBwcm9maWxlUHJvZ3JhbW1lcyBwcm9maWxlUHJvZ3JhbW1lW10KfQoKbW9kZWwgcHJvZmlsZSB7CiAgaWQgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgYWxpYXMgICAgICAgICAgICAgICAgIFN0cmluZz8KICBzbHVnICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgYXZhdGFyICAgICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICAgICAgU3RyaW5nPwogIGRlc2NyaXB0aW9uICAgICAgICAgICBTdHJpbmc/CiAgY29kZSAgICAgICAgICAgICAgICAgIFN0cmluZz8KICBlc3RhYmxpc2hlZFllYXIgICAgICAgSW50PwogIHByb2ZpbGVTZW8gICAgICAgICAgICBzZW8/CiAgbG9jYXRpb24gICAgICAgICAgICAgIGxvY2F0aW9uPwogIHZlcnRpY2FsICAgICAgICAgICAgICB2ZXJ0aWNhbD8gICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFt2ZXJ0aWNhbElkXSwgcmVmZXJlbmNlczogW2lkXSkKICB2ZXJ0aWNhbElkICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVDYXRlZ29yaWVzICAgICBwcm9maWxlQ2F0ZWdvcnlbXQogIHByb2ZpbGVBY2NyZWRpdGF0aW9ucyBwcm9maWxlQWNjcmVkaXRhdGlvbltdCiAgbWFuYWdlbWVudCAgICAgICAgICAgIG1hbmFnZW1lbnQ/ICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW21hbmFnZW1lbnRJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgbWFuYWdlbWVudElkICAgICAgICAgIFN0cmluZz8KICB1bml2ZXJzaXR5ICAgICAgICAgICAgdW5pdmVyc2l0eT8gICAgICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbdW5pdmVyc2l0eUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICB1bml2ZXJzaXR5SWQgICAgICAgICAgU3RyaW5nPwogIHR5cGUgICAgICAgICAgICAgICAgICB0eXBlPyAgICAgICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFt0eXBlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHR5cGVJZCAgICAgICAgICAgICAgICBTdHJpbmc/CiAgY3VycmljdWx1bSAgICAgICAgICAgIGN1cnJpY3VsdW0/ICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW2N1cnJpY3VsdW1JZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgY3VycmljdWx1bUlkICAgICAgICAgIFN0cmluZz8KICBwcm9maWxlQ29udGFjdHMgICAgICAgcHJvZmlsZUNvbnRhY3RbXQogIHByb2ZpbGVTdGFmZnMgICAgICAgICBwcm9maWxlU3RhZmZbXQogIHByb2ZpbGVQcm9ncmFtbWVzICAgICBwcm9maWxlUHJvZ3JhbW1lW10KICBwcm9maWxlSW1hZ2VzICAgICAgICAgU3RyaW5nW10KICBwcm9maWxlTWVkaWEgICAgICAgICAgcHJvZmlsZU1lZGlhW10KICBwcm9maWxlU29jaWFscyAgICAgICAgcHJvZmlsZVNvY2lhbFtdCiAgcHJvZmlsZVJlcG9ydHMgICAgICAgIHByb2ZpbGVSZXBvcnRbXQogIHByb2ZpbGVSZXF1ZXN0cyAgICAgICBwcm9maWxlUmVxdWVzdFtdCiAgcHJvZmlsZVJlbGF0aW9ucyAgICAgIHByb2ZpbGVSZWxhdGlvbltdCiAgcHJvZmlsZVJldmlld3MgICAgICAgIHByb2ZpbGVSZXZpZXdbXQogIHByb2ZpbGVFdmVudHMgICAgICAgICBwcm9maWxlRXZlbnRbXQogIHByb2ZpbGVIb3N0ZWxzICAgICAgICBwcm9maWxlSG9zdGVsW10KICBwcm9maWxlSm9icyAgICAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZU5ld3MgICAgICAgICAgIHByb2ZpbGVOZXdzW10KICBwcm9maWxlQXJ0aWNsZXMgICAgICAgcHJvZmlsZUFydGljbGVbXQogIHByb2ZpbGVTY2hvbGFyc2hpcHMgICBwcm9maWxlU2Nob2xhcnNoaXBbXQogIHByb2ZpbGVQbGFjZW1lbnRzICAgICBwcm9maWxlUGxhY2VtZW50W10KICBwcm9maWxlSW50ZXJuc2hpcHMgICAgcHJvZmlsZUludGVybnNoaXBbXQogIHByb2ZpbGVGYWNpbGl0aWVzICAgICBwcm9maWxlRmFjaWxpdHlbXQogIHByb2ZpbGVSb3V0ZXMgICAgICAgICBwcm9maWxlUm91dGVbXQogIGZlYXR1cmVkICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHJlY29tbWVuZGVkICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHZlcmlmaWVkICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHB1Ymxpc2hlZCAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHZpZXdzICAgICAgICAgICAgICAgICBJbnQgICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0KDEpCn0KCm1vZGVsIHNlbyB7CiAgaWQgICAgICAgICAgU3RyaW5nICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICBCb29sZWFuICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgIERhdGVUaW1lIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgIERhdGVUaW1lIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICBTdHJpbmc/CiAgZGVzY3JpcHRpb24gU3RyaW5nPwogIGtleXdvcmRzICAgIFN0cmluZ1tdCiAgY2Fub25pY2FsICAgU3RyaW5nPwogIHRodW1ibmFpbCAgIFN0cmluZz8KICBwcm9maWxlICAgICBwcm9maWxlICBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgICBTdHJpbmcgICBAdW5pcXVlCn0KCm1vZGVsIHByb2ZpbGVDYXRlZ29yeSB7CiAgaWQgICAgICAgICBTdHJpbmcgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgIEJvb2xlYW4gICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgRGF0ZVRpbWUgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgRGF0ZVRpbWUgIEB1cGRhdGVkQXQKICBwcm9maWxlICAgIHByb2ZpbGU/ICBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgIFN0cmluZz8KICBjYXRlZ29yeSAgIGNhdGVnb3J5PyBAcmVsYXRpb24oZmllbGRzOiBbY2F0ZWdvcnlJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgY2F0ZWdvcnlJZCBTdHJpbmc/Cn0KCm1vZGVsIHByb2ZpbGVBY2NyZWRpdGF0aW9uIHsKICBpZCAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgQm9vbGVhbiAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgRGF0ZVRpbWUgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgIERhdGVUaW1lICAgICAgIEB1cGRhdGVkQXQKICBwcm9maWxlICAgICAgICAgcHJvZmlsZT8gICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICAgICAgIFN0cmluZz8KICBhY2NyZWRpdGF0aW9uICAgYWNjcmVkaXRhdGlvbj8gQHJlbGF0aW9uKGZpZWxkczogW2FjY3JlZGl0YXRpb25JZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgYWNjcmVkaXRhdGlvbklkIFN0cmluZz8KfQoKbW9kZWwgcHJvZmlsZUNvbnRhY3QgewogIGlkICAgICAgICAgICAgU3RyaW5nICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICBCb29sZWFuICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgIERhdGVUaW1lICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgIERhdGVUaW1lICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICBTdHJpbmc/IC8vIGNvbnRhY3QgcGVyc29uIGlzIG5vdCBtYW5kYXRvcnkuIENvbnRhY3QgVHlwZSBpcyBtb3JlIGltcG9ydGFudAogIHBob25lICAgICAgICAgU3RyaW5nPwogIGVtYWlsICAgICAgICAgU3RyaW5nPwogIHdlYnNpdGUgICAgICAgU3RyaW5nPwogIGNvbnRhY3RUeXBlICAgY29udGFjdFR5cGU/IEByZWxhdGlvbihmaWVsZHM6IFtjb250YWN0VHlwZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBjb250YWN0VHlwZUlkIFN0cmluZz8KICBwcm9maWxlICAgICAgIHByb2ZpbGU/ICAgICBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgICAgIFN0cmluZz8KfQoKbW9kZWwgcHJvZmlsZVN0YWZmIHsKICBpZCAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICAgIEB1cGRhdGVkQXQKICBhdmF0YXIgICAgICAgICAgICAgICBTdHJpbmc/CiAgdGl0bGUgICAgICAgICAgICAgICAgU3RyaW5nIC8vIHN0YWZmIG5hbWUgaXMgbWFuZGF0b3J5CiAgZGVzaWduYXRpb24gICAgICAgICAgZGVzaWduYXRpb24/ICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtkZXNpZ25hdGlvbklkXSwgcmVmZXJlbmNlczogW2lkXSkKICBkZXNpZ25hdGlvbklkICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZSAgICAgICAgICAgICAgcHJvZmlsZT8gICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCAgICAgICAgICAgIFN0cmluZz8KICBwcm9maWxlU3RhZmZDb250YWN0cyBwcm9maWxlU3RhZmZDb250YWN0W10KfQoKbW9kZWwgcHJvZmlsZVN0YWZmQ29udGFjdCB7CiAgaWQgICAgICAgICAgICAgU3RyaW5nICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgIEJvb2xlYW4gICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICBEYXRlVGltZSAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgIERhdGVUaW1lICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgIFN0cmluZz8gLy8gY29udGFjdCBwZXJzb24gaXMgbm90IG1hbmRhdG9yeS4gQ29udGFjdCBUeXBlIGlzIG1vcmUgaW1wb3J0YW50CiAgcGhvbmUgICAgICAgICAgU3RyaW5nPwogIGVtYWlsICAgICAgICAgIFN0cmluZz8KICB3ZWJzaXRlICAgICAgICBTdHJpbmc/CiAgY29udGFjdFR5cGUgICAgY29udGFjdFR5cGU/ICBAcmVsYXRpb24oZmllbGRzOiBbY29udGFjdFR5cGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgY29udGFjdFR5cGVJZCAgU3RyaW5nPwogIHByb2ZpbGVTdGFmZiAgIHByb2ZpbGVTdGFmZj8gQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVTdGFmZklkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlU3RhZmZJZCBTdHJpbmc/Cn0KCm1vZGVsIHByb2ZpbGVQcm9ncmFtbWUgewogIGlkICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQHVwZGF0ZWRBdAogIGF2YXRhciAgICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICAgICBTdHJpbmc/CiAgY291cnNlICAgICAgICAgICAgICAgY291cnNlPyAgICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtjb3Vyc2VJZF0sIHJlZmVyZW5jZXM6IFtpZF0pIC8vIGV4YW1wbGU6IEIuVGVjaAogIGNvdXJzZUlkICAgICAgICAgICAgIFN0cmluZz8KICBzcGVjaWFsaXphdGlvbiAgICAgICBzcGVjaWFsaXphdGlvbj8gICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3NwZWNpYWxpemF0aW9uSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBleGFtcGxlOiBDb21wdXRlciBTY2llbmNlIGFuZCBFbmdpbmVlcmluZwogIHNwZWNpYWxpemF0aW9uSWQgICAgIFN0cmluZz8KICBwcm9maWxlICAgICAgICAgICAgICBwcm9maWxlPyAgICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICAgICAgICAgICAgU3RyaW5nPwogIGludGFrZSAgICAgICAgICAgICAgIGludGFrZT8gICAgICAgICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbaW50YWtlSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBFZzogTWFyY2gKICBpbnRha2VJZCAgICAgICAgICAgICBTdHJpbmc/CiAgY2FwYWNpdHkgICAgICAgICAgICAgSW50PyAvLyBudW1iZXIgb2Ygc2VhdHMKICBsZXZlbCAgICAgICAgICAgICAgICBsZXZlbD8gICAgICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW2xldmVsSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBFeGFtcGxlOiBVbmRlciBHcmFkdWF0aW9uCiAgbGV2ZWxJZCAgICAgICAgICAgICAgU3RyaW5nPwogIGR1cmF0aW9uICAgICAgICAgICAgIEludD8gLy8gRXhhbXBsZTogNAogIGR1cmF0aW9uVHlwZSAgICAgICAgIGR1cmF0aW9uVHlwZT8gICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbZHVyYXRpb25UeXBlSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBFeGFtcGxlOiBZZWFycwogIGR1cmF0aW9uVHlwZUlkICAgICAgIFN0cmluZz8KICBwcm9maWxlUHJvZ3JhbW1lRmVlcyBwcm9maWxlUHJvZ3JhbW1lRmVlW10KfQoKbW9kZWwgcHJvZmlsZVByb2dyYW1tZUZlZSB7CiAgaWQgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgIERhdGVUaW1lICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgICBEYXRlVGltZSAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgIFN0cmluZz8gLy8gZXhhbXBsZSBjYXV0aW9uIGRlcG9zaXQsIHR1dGlvbiBmZWUsIHNwZWNpYWwgZmVlIGV0YwogIGFtb3VudCAgICAgICAgICAgICBGbG9hdD8gLy8gRXhhbXBsZTogNjAsMDAwCiAgY3VycmVuY3kgICAgICAgICAgIGN1cnJlbmN5PyAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtjdXJyZW5jeUlkXSwgcmVmZXJlbmNlczogW2lkXSkgLy8gRXhhbXBsZTogSW5kaWFuIFJ1cGVlcwogIGN1cnJlbmN5SWQgICAgICAgICBTdHJpbmc/CiAgZnJlcXVlbmN5ICAgICAgICAgIGZyZXF1ZW5jeT8gICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtmcmVxdWVuY3lJZF0sIHJlZmVyZW5jZXM6IFtpZF0pIC8vIEV4YW1wbGU6IEFubnVhbGx5IAogIGZyZXF1ZW5jeUlkICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZVByb2dyYW1tZSAgIHByb2ZpbGVQcm9ncmFtbWU/IEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlUHJvZ3JhbW1lSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVQcm9ncmFtbWVJZCBTdHJpbmc/Cn0KCi8vIEFsbCBleHRlcm5hbCBsaW5rcyBvdGhlciB0aGFuIHNvY2lhbCBtZWRpYSBsaW5rcwovLyBNZWRpYSBUeXBlIHdpbGwgYmUgdGhlIHRpdGxlCi8vIEV4YW1wbGUgb2ZmaWNpYWwgd2Vic2l0ZSwgZSBicm9jaHVyZSwgY29ycG9yYXRlIHZpZGVvLCB2aXJ0dWFsIHRvdXIsIHByb3NwZWN0dXMsIG1lZGlhIGtpdAptb2RlbCBwcm9maWxlTWVkaWEgewogIGlkICAgICAgICBTdHJpbmcgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICBCb29sZWFuICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAogIGxpbmsgICAgICBTdHJpbmc/CiAgcHJvZmlsZSAgIHByb2ZpbGU/IEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCBTdHJpbmc/CiAgbWVkaWEgICAgIG1lZGlhPyAgIEByZWxhdGlvbihmaWVsZHM6IFttZWRpYUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBtZWRpYUlkICAgU3RyaW5nPwp9CgovLyBzb2NpYWwgbWVkaWEgbGlua3MKLy8gU29jaWFsIFR5cGUgd2lsbCBiZSB0aGUgdGl0bGUKbW9kZWwgcHJvZmlsZVNvY2lhbCB7CiAgaWQgICAgICAgIFN0cmluZyAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgIEJvb2xlYW4gIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0IERhdGVUaW1lIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCBEYXRlVGltZSBAdXBkYXRlZEF0CiAgbGluayAgICAgIFN0cmluZz8KICBwcm9maWxlICAgcHJvZmlsZT8gQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkIFN0cmluZz8KICBzb2NpYWwgICAgc29jaWFsPyAgQHJlbGF0aW9uKGZpZWxkczogW3NvY2lhbElkXSwgcmVmZXJlbmNlczogW2lkXSkKICBzb2NpYWxJZCAgU3RyaW5nPwp9Cgptb2RlbCBwcm9maWxlRmFjaWxpdHkgewogIGlkICAgICAgICAgU3RyaW5nICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICBCb29sZWFuICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgIERhdGVUaW1lICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgIERhdGVUaW1lICBAdXBkYXRlZEF0CiAgcHJvZmlsZSAgICBwcm9maWxlPyAgQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICBTdHJpbmc/CiAgZmFjaWxpdHkgICBmYWNpbGl0eT8gQHJlbGF0aW9uKGZpZWxkczogW2ZhY2lsaXR5SWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIGZhY2lsaXR5SWQgU3RyaW5nPwp9Cgptb2RlbCBwcm9maWxlUmVwb3J0IHsKICBpZCAgICAgICAgICBTdHJpbmcgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgIEJvb2xlYW4gIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgRGF0ZVRpbWUgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgRGF0ZVRpbWUgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgIFN0cmluZyAvLyBzdWJqZWN0IG9yIHR5cGUgb2YgcmVwb3J0CiAgZGVzY3JpcHRpb24gU3RyaW5nIC8vIGRlc2NyaXB0aW9uIGFib3V0IHRoZSByZXBvcnQKICBuYW1lICAgICAgICBTdHJpbmc/ICBAZGVmYXVsdCgiQW5vbnltb3VzIikgLy8gcGVyc29uIHdobyBpcyByZXBvcnRpbmcuIENhbiBiZSBhbm9ueW1vdXMKICBwaG9uZSAgICAgICBTdHJpbmc/CiAgZW1haWwgICAgICAgU3RyaW5nPwogIGxvY2F0aW9uICAgIFN0cmluZz8KICBwcm9maWxlICAgICBwcm9maWxlPyBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgICBTdHJpbmc/Cn0KCm1vZGVsIHByb2ZpbGVSZXF1ZXN0IHsKICBpZCAgICAgICAgICBTdHJpbmcgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgIEJvb2xlYW4gIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgRGF0ZVRpbWUgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgRGF0ZVRpbWUgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgIFN0cmluZz8gLy8gU3ViamVjdCBvciB0eXBlIG9mIHJlcXVlc3QKICBkZXNjcmlwdGlvbiBTdHJpbmc/IC8vIGRlc2NyaXB0aW9uIGFib3V0IHRoZSByZXF1ZXN0CiAgbmFtZSAgICAgICAgU3RyaW5nPwogIHBob25lICAgICAgIFN0cmluZz8KICBlbWFpbCAgICAgICBTdHJpbmcgLy8gZW1haWwgYWRkcmVzcyBpcyBtYW5kYXRvcnkKICBsb2NhdGlvbiAgICBTdHJpbmc/CiAgcHJvZmlsZSAgICAgcHJvZmlsZT8gQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICAgU3RyaW5nPwp9Cgptb2RlbCBwcm9maWxlUmVsYXRpb24gewogIGlkICAgICAgICAgIFN0cmluZyAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgQm9vbGVhbiAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICBEYXRlVGltZSBAdXBkYXRlZEF0CiAgZGVzY3JpcHRpb24gU3RyaW5nIC8vIHNob3J0IG5vdGUgaXMgbWFuZGF0b3J5CiAgbmFtZSAgICAgICAgU3RyaW5nPyAvLyBjb250YWN0IHBlcnNvbgogIHBob25lICAgICAgIFN0cmluZz8KICBlbWFpbCAgICAgICBTdHJpbmc/CiAgbG9jYXRpb24gICAgU3RyaW5nPwogIHJhdGluZyAgICAgIEludCAgICAgIEBkZWZhdWx0KDApIC8vIG1hZGF0b3J5LiBvdXQgb2YgNQogIHByb2ZpbGUgICAgIHByb2ZpbGU/IEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCAgIFN0cmluZz8KfQoKbW9kZWwgcHJvZmlsZVJldmlldyB7CiAgaWQgICAgICAgICAgU3RyaW5nICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICBCb29sZWFuICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgIERhdGVUaW1lIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgIERhdGVUaW1lIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICBTdHJpbmc/IC8vIHN1YmplY3Qgb3IgcmV2aWV3IGNvbnRleHQKICBkZXNjcmlwdGlvbiBTdHJpbmc/IC8vIHNob3J0IG5vZGUgCiAgcmF0aW5nICAgICAgSW50ICAgICAgQGRlZmF1bHQoMCkgLy8gbWFkYXRvcnkKICBuYW1lICAgICAgICBTdHJpbmc/CiAgcGhvbmUgICAgICAgU3RyaW5nPwogIGVtYWlsICAgI