@nlabs/reaktor 1.18.0 → 1.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/docs/GENERATION.md +38 -16
- package/lib/actions/alfredFaq.js +1 -1
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/contentGeneration.d.ts +3 -0
- package/lib/actions/contentGeneration.js +62 -9
- package/lib/actions/contentGenerationErrors.js +1 -1
- package/lib/actions/conversations.js +1 -1
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.js +1 -1
- package/lib/actions/databaseAccounts.js +1 -1
- package/lib/actions/databaseProvisioningLease.js +1 -1
- package/lib/actions/dynamodb.js +1 -1
- package/lib/actions/email.js +1 -1
- package/lib/actions/files.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/geminiVideo.js +1 -1
- package/lib/actions/groups.js +1 -1
- package/lib/actions/higgsfield.js +1 -1
- package/lib/actions/imageGeneration.js +1 -1
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.js +1 -1
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +1 -1
- package/lib/actions/messages.js +1 -1
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/ollamaGeneration.js +1 -1
- package/lib/actions/openaiResponseSession.js +1 -1
- package/lib/actions/payments.js +1 -1
- package/lib/actions/personas.js +1 -1
- package/lib/actions/phoneSupport.js +1 -1
- package/lib/actions/posts.js +1 -1
- package/lib/actions/query.js +1 -1
- package/lib/actions/reactions.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.d.ts +10 -7
- package/lib/actions/s3.js +59 -14
- package/lib/actions/search.js +1 -1
- package/lib/actions/sms.js +1 -1
- package/lib/actions/statistics.js +1 -1
- package/lib/actions/subscriptions.js +1 -1
- package/lib/actions/tags.js +1 -1
- package/lib/actions/users.js +1 -1
- package/lib/actions/videoGeneration.js +1 -1
- package/lib/actions/videos.js +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +1 -1
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/geminiGenerationAdapter.js +1 -1
- package/lib/adapters/higgsfieldAdapter.js +1 -1
- package/lib/adapters/higgsfieldModelCatalog.js +1 -1
- package/lib/adapters/higgsfieldModels.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/imageGenerationAdapter.js +1 -1
- package/lib/adapters/index.js +1 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.js +1 -1
- package/lib/adapters/userAdapter.js +1 -1
- package/lib/assistant/core.js +1 -1
- package/lib/assistant/faq.js +1 -1
- package/lib/assistant/faqCore.js +1 -1
- package/lib/assistant/index.js +1 -1
- package/lib/assistant/service.js +1 -1
- package/lib/config.js +1 -1
- package/lib/constants/collections.js +1 -1
- package/lib/durableChat/conversations.js +1 -1
- package/lib/durableChat/errors.js +1 -1
- package/lib/durableChat/events.js +1 -1
- package/lib/durableChat/index.js +1 -1
- package/lib/durableChat/membership.js +1 -1
- package/lib/durableChat/messageTypes.js +1 -1
- package/lib/durableChat/messages.js +1 -1
- package/lib/durableChat/transaction.js +1 -1
- package/lib/durableChat/types.js +1 -1
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.js +1 -1
- package/lib/lambdas/actions/websockets.js +1 -1
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.js +1 -1
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.js +1 -1
- package/lib/mutations/content/content.js +1 -1
- package/lib/mutations/crm/crm.js +1 -1
- package/lib/mutations/events/events.js +1 -1
- package/lib/mutations/flags/flags.js +1 -1
- package/lib/mutations/groups/groups.js +1 -1
- package/lib/mutations/higgsfield/higgsfield.js +1 -1
- package/lib/mutations/images/images.js +1 -1
- package/lib/mutations/index.js +1 -1
- package/lib/mutations/locations/locations.js +1 -1
- package/lib/mutations/messages/messages.js +1 -1
- package/lib/mutations/personas/personas.js +1 -1
- package/lib/mutations/posts/posts.js +1 -1
- package/lib/mutations/reactions/reactions.js +1 -1
- package/lib/mutations/rum/rum.js +1 -1
- package/lib/mutations/statistics/statistics.js +1 -1
- package/lib/mutations/subscriptions/subscriptions.js +1 -1
- package/lib/mutations/tags/tags.js +1 -1
- package/lib/mutations/users/users.js +1 -1
- package/lib/mutations/videos/videos.js +1 -1
- package/lib/nativePush/graphql.js +1 -1
- package/lib/nativePush/index.js +1 -1
- package/lib/nativePush/migrations.js +1 -1
- package/lib/nativePush/nativePushContract.fixture.js +1 -1
- package/lib/nativePush/payload.js +1 -1
- package/lib/nativePush/repository.js +1 -1
- package/lib/nativePush/service.js +1 -1
- package/lib/nativePush/snsProvider.js +1 -1
- package/lib/nativePush/types.js +1 -1
- package/lib/objectTypes/analytics.js +1 -1
- package/lib/objectTypes/app.js +1 -1
- package/lib/objectTypes/bankAccount.js +1 -1
- package/lib/objectTypes/connection.js +1 -1
- package/lib/objectTypes/content.js +1 -1
- package/lib/objectTypes/contentGeneration.js +1 -1
- package/lib/objectTypes/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +1 -1
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +1 -1
- package/lib/objectTypes/event.js +1 -1
- package/lib/objectTypes/external.js +1 -1
- package/lib/objectTypes/file.js +1 -1
- package/lib/objectTypes/filter.js +1 -1
- package/lib/objectTypes/flag.js +1 -1
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/higgsfield.js +1 -1
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/imageGeneration.js +1 -1
- package/lib/objectTypes/index.js +1 -1
- package/lib/objectTypes/location.js +1 -1
- package/lib/objectTypes/message.js +1 -1
- package/lib/objectTypes/passcode.js +1 -1
- package/lib/objectTypes/persona.js +1 -1
- package/lib/objectTypes/plan.js +1 -1
- package/lib/objectTypes/post.js +1 -1
- package/lib/objectTypes/query.js +1 -1
- package/lib/objectTypes/reaction.js +1 -1
- package/lib/objectTypes/relation.js +1 -1
- package/lib/objectTypes/rum.js +1 -1
- package/lib/objectTypes/search.js +1 -1
- package/lib/objectTypes/statistics.js +1 -1
- package/lib/objectTypes/subscription.js +1 -1
- package/lib/objectTypes/tag.js +1 -1
- package/lib/objectTypes/user.js +1 -1
- package/lib/objectTypes/video.js +1 -1
- package/lib/objectTypes/videoGeneration.js +1 -1
- package/lib/organizations/accountLifecycle.js +1 -1
- package/lib/organizations/authorization.js +1 -1
- package/lib/organizations/billing.js +1 -1
- package/lib/organizations/billingProvider.js +1 -1
- package/lib/organizations/billingUpdates.js +1 -1
- package/lib/organizations/index.js +1 -1
- package/lib/organizations/mail.js +1 -1
- package/lib/organizations/memberDirectory.js +1 -1
- package/lib/organizations/membership.js +1 -1
- package/lib/organizations/passwordRecovery.js +1 -1
- package/lib/organizations/plans.js +1 -1
- package/lib/organizations/providerPagination.js +1 -1
- package/lib/organizations/reconciliation.js +1 -1
- package/lib/organizations/signup.js +1 -1
- package/lib/organizations/store.js +1 -1
- package/lib/organizations/types.js +1 -1
- package/lib/organizations/verification.js +1 -1
- package/lib/queries/analytics/analytics.js +1 -1
- package/lib/queries/content/content.js +1 -1
- package/lib/queries/crm/crm.js +1 -1
- package/lib/queries/events/events.js +1 -1
- package/lib/queries/flags/flags.js +1 -1
- package/lib/queries/groups/groups.js +1 -1
- package/lib/queries/higgsfield/higgsfield.js +1 -1
- package/lib/queries/images/images.js +1 -1
- package/lib/queries/index.js +1 -1
- package/lib/queries/locations/locations.js +1 -1
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +1 -1
- package/lib/queries/posts/posts.js +1 -1
- package/lib/queries/query/query.js +1 -1
- package/lib/queries/reactions/reactions.js +1 -1
- package/lib/queries/statistics/statistics.js +1 -1
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +1 -1
- package/lib/queries/users/users.js +1 -1
- package/lib/queries/videos/videos.js +1 -1
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.js +1 -1
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.js +1 -1
- package/lib/types/databaseCredentials.types.js +1 -1
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.js +1 -1
- package/lib/types/websockets.types.js +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/adapterUtils.js +1 -1
- package/lib/utils/analyticsUtils.js +1 -1
- package/lib/utils/appContext.js +1 -1
- package/lib/utils/aqlHelpers.js +1 -1
- package/lib/utils/arangodbUtils.js +1 -1
- package/lib/utils/authUtils.js +1 -1
- package/lib/utils/awsUtils.js +1 -1
- package/lib/utils/collectionRegistry.js +1 -1
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/databaseCredentials.js +1 -1
- package/lib/utils/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/generationCallback.js +1 -1
- package/lib/utils/googleTranslate.js +1 -1
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.js +1 -1
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.example.js +1 -1
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/mediaAccess.js +1 -1
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/nodeRealtime.js +1 -1
- package/lib/utils/opaqueToken.js +1 -1
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/secretDatabase.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.js +1 -1
- package/lib/utils/stripeUtils.ts.bak +1 -1
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +1 -1
- package/lib/utils/translationQueue.example.js +1 -1
- package/lib/utils/translationQueue.js +1 -1
- package/lib/videoProcessing.js +1 -1
- package/package.json +1 -1
package/lib/actions/videos.js
CHANGED
|
@@ -1195,4 +1195,4 @@ export const deleteVideo = async (context, videoId)=>{
|
|
|
1195
1195
|
}
|
|
1196
1196
|
};
|
|
1197
1197
|
|
|
1198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7XG4gIENyZWF0ZUpvYkNvbW1hbmQsXG4gIERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCxcbiAgTWVkaWFDb252ZXJ0Q2xpZW50XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1tZWRpYWNvbnZlcnQnO1xuaW1wb3J0IHtEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LCBQdXRPYmplY3RDb21tYW5kSW5wdXR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge2dldENvbm5lY3Rpb25zQnlVc2VyfSBmcm9tICcuLi9sYW1iZGFzL2FjdGlvbnMvd2Vic29ja2V0cy5qcyc7XG5pbXBvcnQge3dzQ2xpZW50fSBmcm9tICcuLi9sYW1iZGFzL3V0aWxzL3dlYnNvY2tldC5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRSZWFjdGlvbkNvdW50UXVlcnksIGJ1aWxkVGFnc1F1ZXJ5fSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEF3c0NyZWRlbnRpYWxzfSBmcm9tICcuLi91dGlscy9hd3NVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGV9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtcbiAgczNBYm9ydE11bHRpcGFydFVwbG9hZCxcbiAgczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCxcbiAgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzRGVsZXRlLFxuICBzM0RlbGV0ZUxpc3QsXG4gIHMzR2V0QnVja2V0LFxuICBzM0dldFNpZ25lZFVybCxcbiAgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsLFxuICBzM1B1dFxufSBmcm9tICcuL3MzLmpzJztcbmltcG9ydCB7aGFzU3Vic2NyaXB0aW9uVG9JdGVtfSBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFZpZGVvRWRnZVR5cGUsXG4gIFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZSxcbiAgVmlkZW9PcHRpb25zLFxuICBWaWRlb1R5cGUsXG4gIFZpZGVvVXBsb2FkUGFydElucHV0LFxuICBWaWRlb1VwbG9hZFBhcnRVcmwsXG4gIFZpZGVvVXJsRGF0YVxufSBmcm9tICcuLi90eXBlcy92aWRlb3MudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3ZpZGVvcyc7XG5jb25zdCBoYXNNZWRpYUNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19NRURJQSk7XG5jb25zdCBERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuY29uc3QgVklERU9fUExBWUJBQ0tfRElSID0gJ3ZpZGVvLXBsYXliYWNrJztcblxubGV0IG1lZGlhQ29udmVydEVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydENsaWVudCA9IChlbmRwb2ludD86IHN0cmluZyk6IE1lZGlhQ29udmVydENsaWVudCA9PiBuZXcgTWVkaWFDb252ZXJ0Q2xpZW50KHtcbiAgY3JlZGVudGlhbHM6IGdldEF3c0NyZWRlbnRpYWxzKCksXG4gIGVuZHBvaW50LFxuICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxufSk7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydEVuZHBvaW50ID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LmVuZHBvaW50Jyk7XG5cbiAgaWYobWVkaWFDb252ZXJ0RW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoKTtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCh7TWF4UmVzdWx0czogMX0pKTtcbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBlbmRwb2ludHMuRW5kcG9pbnRzPy5bMF0/LlVybDtcblxuICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG59O1xuXG5jb25zdCBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyA9IChpdGVtSWQ6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcGFyc2VkRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgaWYocGFyc2VkRG9jSWQpIHtcbiAgICByZXR1cm4gW3BhcnNlZERvY0lkXTtcbiAgfVxuXG4gIGNvbnN0IGl0ZW1LZXkgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgaWYoIWl0ZW1LZXkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke2l0ZW1LZXl9YCxcbiAgICBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtpdGVtS2V5fWBcbiAgXTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld1ZpZGVvID0gKFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxpc3Q6IEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+LFxuICBzZXNzaW9uVXNlcklkOiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICBjb25zdCBpc093bmVyID0gISFzZXNzaW9uVXNlcklkICYmICEhb3duZXJVc2VySWQgJiYgc2Vzc2lvblVzZXJJZCA9PT0gb3duZXJVc2VySWQ7XG5cbiAgaWYoaXNPd25lcikge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogdHJ1ZSxcbiAgICAgIGNhblZpZXdWaXA6IHRydWUsXG4gICAgICBpc093bmVyOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhblZpZXdGcmllbmRzOiBmYWxzZSxcbiAgICAgIGNhblZpZXdWaXA6IGZhbHNlLFxuICAgICAgaXNPd25lcjogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gIGxldCBjYW5WaWV3VmlwID0gZmFsc2U7XG4gIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgY29uc3QgbWVkaWFJdGVtVHlwZSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgaWYobWVkaWFJdGVtVHlwZSA9PT0gQ09MTEVDVElPTlMuUEVSU09OQVMgJiYgbWVkaWFJdGVtS2V5KSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIG1lZGlhSXRlbUtleSk7XG4gICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgY2FuVmlld1ZpcCA9IGF3YWl0IGhhc1N1YnNjcmlwdGlvblRvSXRlbShjb250ZXh0LCBtZWRpYUl0ZW1LZXksIENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FuVmlld0ZyaWVuZHMsXG4gICAgY2FuVmlld1ZpcCxcbiAgICBpc093bmVyOiBmYWxzZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmlkZW9PcHRpb25zID0gKG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtmcm9tID0gMCwgdG8gPSAzMCwgdHlwZSA9ICdkZWZhdWx0J30gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb09wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICBjb25zdCByZWFjdGlvblF1ZXJ5ID0gYnVpbGRSZWFjdGlvbkNvdW50UXVlcnkoZmllbGQucmVwbGFjZSgnQ291bnQnLCAnJyksICd2JywgJ3ZpZGVvcycpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocmVhY3Rpb25RdWVyeSk7XG4gICAgICBzZWxlY3RzLm9iamVjdHMucHVzaChgJHtmaWVsZH06JHtmaWVsZH1gKTtcbiAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChGT1IgdmlkZW8sIHIgSU4gSU5CT1VORCB2Ll9pZCByZWFjdGlvbnMgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtcyBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICd0YWdzJzoge1xuICAgICAgICBjb25zdCB0YWdzUXVlcnkgPSBidWlsZFRhZ3NRdWVyeSgndicpO1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaCh0YWdzUXVlcnkpO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdi51c2VySWQgPT0gdS5fa2V5IExJTUlUIDEgUkVUVVJOIHUpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd1c2Vyczp1c2VycycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ByaXZhY3knOiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxWaWRlb1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9zQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjdXN0b21RdWVyaWVzID0gW1xuICAgIGBMRVQgdXNlciA9IEZJUlNUKEZPUiB1IElOIHVzZXJzIEZJTFRFUiB1Ll9rZXkgPT0gZG9jLnVzZXJJZCBMSU1JVCAxIFJFVFVSTiB1KWBcbiAgXTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFZpZGVvVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAndmlkZW9zJyxcbiAgICB7dXNlcklkOiBmb3JtYXRVc2VySWR9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb20sIHRvfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBbJ3VzZXI6dXNlciddXG4gICAgfVxuICApLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9Db3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0NvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgbWVkaWEgPSAoXG4gICAgICBGT1IgdiBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHYuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgICBGSUxURVIgdi50eXBlID09IFwidmlkZW9cIlxuICAgICAgICBSRVRVUk4gMVxuICAgIClcbiAgICBSRVRVUk4ge2NvdW50OiBMRU5HVEgobWVkaWEpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9zQnlJdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogVmlkZW9PcHRpb25zID0ge31cbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGwuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgIExFVCB2ID0gRE9DVU1FTlQobC5fdG8pXG4gICAgICBGSUxURVIgTk9UIElTX05VTEwodilcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBsLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBTT1JUIHYuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodiwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd2Jyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uVXNlcklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gbm9ybWFsaXplVmlkZW9Qcml2YWN5KHZpZGVvPy5wcml2YWN5KSA9PT0gJ3B1YmxpYycpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IGNhblZpZXdWaWRlbyh2aWRlbywgc2Vzc2lvblVzZXJJZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBWaWRlb09wdGlvbnNcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICdyLnR5cGUgPT0gXCJ2aWRlb3NcIicsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYFxuICBdO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB2LCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSBoYXNSZWFjdGlvblxuICAgICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidmlkZW9zXCJ9XG4gICAgICBMRVQgbWVkaWEgPSBGSVJTVChcbiAgICAgICAgRk9SIG93bmVyLCBsIElOIElOQk9VTkQgdi5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IG1lZGlhID8gbWVkaWEuaXRlbUtleSA6IG51bGwsXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IG1lZGlhID8gbWVkaWEuaXRlbVR5cGUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uSWQpO1xuXG4gICAgaWYoYWNjZXNzLmlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25JZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlbyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW8nO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICByZXR1cm4gZ2V0SXRlbUJ5PFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHtfa2V5OiBmb3JtYXRWaWRlb0lkfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGF0aFVzZXJWaWRlb3MgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcsIGRpcjogc3RyaW5nID0gJ3ZpZGVvcycpOiBzdHJpbmcgPT4ge1xuICBsZXQgZmlsZW5hbWUgPSB2aWRlb0lkO1xuXG4gIHN3aXRjaCh2aWRlb1R5cGUpIHtcbiAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5wbmdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2Uvd2VicCc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYnBgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvanBnJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0uanBnYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3dlYm0nOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJtYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3F1aWNrdGltZSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1vdmA7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tcDRgO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvRmlsZW5hbWUgPSAodmlkZW9JZDogc3RyaW5nLCB2aWRlb1R5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVuYW1lO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWRLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgZmlsZVR5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+XG4gIGdldFBhdGhVc2VyVmlkZW9zKHVzZXJJZCwgdmlkZW9JZCwgZmlsZVR5cGUsICd2aWRlb3MnKTtcblxuY29uc3Qgc2F2ZVZpZGVvVGh1bWJuYWlsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHRodW1iQmFzZTY0OiBzdHJpbmcgPSAnJyxcbiAgdGh1bWJGaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXRodW1iQmFzZTY0IHx8ICF0aHVtYkJhc2U2NC5pbmNsdWRlcygnLCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0QmFzZTY0ID0gdGh1bWJCYXNlNjQuc3Vic3RyKHRodW1iQmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcblxuICBpZighYnVmZmVyLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGF3YWl0IHMzUHV0KHtcbiAgICBCb2R5OiBidWZmZXIsXG4gICAgQnVja2V0OiBudWxsLFxuICAgIENvbnRlbnRUeXBlOiB0aHVtYkZpbGVUeXBlLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCB0aHVtYkZpbGVUeXBlLCAndmlkZW8tdGh1bWJzJylcbiAgfSk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBnZXRWaWRlb1VwbG9hZERvYyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIHZpZGVvSWQpO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcblxuICBpZighdmlkZW8gfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpICE9PSBzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIHJldHVybiB2aWRlbztcbn07XG5cbmNvbnN0IGdldFZpZGVvUGFydFVybHMgPSBhc3luYyAoXG4gIGtleTogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW11cbik6IFByb21pc2U8VmlkZW9VcGxvYWRQYXJ0VXJsW10+ID0+IFByb21pc2UuYWxsKHBhcnROdW1iZXJzLm1hcChhc3luYyAocGFydE51bWJlcikgPT4gKHtcbiAgcGFydE51bWJlcixcbiAgdXJsOiBhd2FpdCBzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwoe1xuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBLZXk6IGtleSxcbiAgICBQYXJ0TnVtYmVyOiBwYXJ0TnVtYmVyLFxuICAgIFVwbG9hZElkOiB1cGxvYWRJZFxuICB9KVxufSkpKTtcblxuY29uc3QgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuXG4gIGlmKCFvd25lclVzZXJJZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbm5lY3Rpb25zID0gYXdhaXQgZ2V0Q29ubmVjdGlvbnNCeVVzZXIob3duZXJVc2VySWQpLmNhdGNoKCgpID0+IFtdKTtcbiAgY29uc3QgY29ubmVjdGlvbklkcyA9IGNvbm5lY3Rpb25zXG4gICAgLm1hcCgoY29ubmVjdGlvbikgPT4gcGFyc2VTdHJpbmcoY29ubmVjdGlvbj8uY29ubmVjdGlvbklkIHx8IGNvbm5lY3Rpb24/LnNvY2tldElkIHx8ICcnLCAzMikpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGNvbm5lY3Rpb25JZCwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihjb25uZWN0aW9uSWQpID09PSBpbmRleCk7XG5cbiAgaWYoIWNvbm5lY3Rpb25JZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgd3NDbGllbnQuc2VuZChjb25uZWN0aW9uSWRzLCB7XG4gICAgYWN0aW9uOiAndmlkZW8ucHJvY2Vzc2luZy5jb21wbGV0ZWQnLFxuICAgIGRhdGE6IHtcbiAgICAgIHZpZGVvXG4gICAgfVxuICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbn07XG5cbmNvbnN0IGdldFZpZGVvUGxheWJhY2tLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsICd2aWRlby9tcDQnLCBWSURFT19QTEFZQkFDS19ESVIpO1xuXG5jb25zdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlb1NvdXJjZU9iamVjdCc7XG4gIGNvbnN0IHNvdXJjZUtleSA9IFN0cmluZyh2aWRlbz8uc291cmNlS2V5IHx8IHZpZGVvPy51cGxvYWRLZXkgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgcGxheWJhY2tLZXkgPSBTdHJpbmcodmlkZW8/LnBsYXliYWNrS2V5IHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXNvdXJjZUtleSB8fCBzb3VyY2VLZXkgPT09IHBsYXliYWNrS2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzM0RlbGV0ZSh7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBLZXk6IHNvdXJjZUtleVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3NvdXJjZUtleSwgdmlkZW9JZDogdmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXl9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBzaG91bGRUcmFuc2NvZGVWaWRlbyA9ICh2aWRlbzogVmlkZW9UeXBlID0ge30pOiBib29sZWFuID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBTdHJpbmcodmlkZW8/LmZpbGVUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmKCFmaWxlVHlwZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuICFbXG4gICAgJ3ZpZGVvL21wNCcsXG4gICAgJ3ZpZGVvL3dlYm0nXG4gIF0uaW5jbHVkZXMoZmlsZVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2InO1xuICBjb25zdCByb2xlQXJuID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucm9sZUFybicpIHx8ICcnKTtcbiAgY29uc3QgYnVja2V0ID0gczNHZXRCdWNrZXQoKSB8fCBDb25maWcuZ2V0KCdhd3MuczMuQnVja2V0Jyk7XG4gIGNvbnN0IHZpZGVvSWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udmlkZW9JZCB8fCB2aWRlbz8uX2tleSB8fCAnJykpO1xuICBjb25zdCB1c2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKTtcblxuICBpZighcm9sZUFybiB8fCAhYnVja2V0IHx8ICF2aWRlb0lkIHx8ICF1c2VySWQgfHwgIXNvdXJjZUtleSkge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBbXG4gICAgICAgICAgIXJvbGVBcm4gPyAnbWlzc2luZ19tZWRpYWNvbnZlcnRfcm9sZV9hcm4nIDogJycsXG4gICAgICAgICAgIWJ1Y2tldCA/ICdtaXNzaW5nX3MzX2J1Y2tldCcgOiAnJyxcbiAgICAgICAgICAhdXNlcklkID8gJ21pc3NpbmdfdXNlcl9pZCcgOiAnJyxcbiAgICAgICAgICAhc291cmNlS2V5ID8gJ21pc3Npbmdfc291cmNlX2tleScgOiAnJ1xuICAgICAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsJyksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCgpO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldE1lZGlhQ29udmVydENsaWVudChlbmRwb2ludCk7XG4gICAgY29uc3QgcXVldWUgPSBTdHJpbmcoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5xdWV1ZUFybicpIHx8ICcnKTtcbiAgICBjb25zdCBvdXRwdXREZXN0aW5hdGlvbiA9IGBzMzovLyR7YnVja2V0fS91c2Vycy8ke3VzZXJJZH0vJHtWSURFT19QTEFZQkFDS19ESVJ9L2A7XG4gICAgY29uc3Qgam9iID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IENyZWF0ZUpvYkNvbW1hbmQoe1xuICAgICAgLi4uKHF1ZXVlID8ge1F1ZXVlOiBxdWV1ZX0gOiB7fSksXG4gICAgICBSb2xlOiByb2xlQXJuLFxuICAgICAgU2V0dGluZ3M6IHtcbiAgICAgICAgSW5wdXRzOiBbe1xuICAgICAgICAgIEF1ZGlvU2VsZWN0b3JzOiB7XG4gICAgICAgICAgICAnQXVkaW8gU2VsZWN0b3IgMSc6IHtcbiAgICAgICAgICAgICAgRGVmYXVsdFNlbGVjdGlvbjogJ0RFRkFVTFQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBGaWxlSW5wdXQ6IGBzMzovLyR7YnVja2V0fS8ke3NvdXJjZUtleX1gLFxuICAgICAgICAgIFRpbWVjb2RlU291cmNlOiAnWkVST0JBU0VEJyxcbiAgICAgICAgICBWaWRlb1NlbGVjdG9yOiB7XG4gICAgICAgICAgICBSb3RhdGU6ICdBVVRPJ1xuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIE91dHB1dEdyb3VwczogW3tcbiAgICAgICAgICBOYW1lOiAnTVA0JyxcbiAgICAgICAgICBPdXRwdXRHcm91cFNldHRpbmdzOiB7XG4gICAgICAgICAgICBGaWxlR3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgICBEZXN0aW5hdGlvbjogb3V0cHV0RGVzdGluYXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUeXBlOiAnRklMRV9HUk9VUF9TRVRUSU5HUydcbiAgICAgICAgICB9LFxuICAgICAgICAgIE91dHB1dHM6IFt7XG4gICAgICAgICAgICBBdWRpb0Rlc2NyaXB0aW9uczogW3tcbiAgICAgICAgICAgICAgQXVkaW9Tb3VyY2VOYW1lOiAnQXVkaW8gU2VsZWN0b3IgMScsXG4gICAgICAgICAgICAgIENvZGVjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBBYWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgQml0cmF0ZTogMTI4MDAwLFxuICAgICAgICAgICAgICAgICAgQ29kaW5nTW9kZTogJ0NPRElOR19NT0RFXzJfMCcsXG4gICAgICAgICAgICAgICAgICBTYW1wbGVSYXRlOiA0ODAwMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29kZWM6ICdBQUMnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgQ29udGFpbmVyU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiAnTVA0JyxcbiAgICAgICAgICAgICAgTXA0U2V0dGluZ3M6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVmlkZW9EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQ29kZWM6ICdIXzI2NCcsXG4gICAgICAgICAgICAgICAgSDI2NFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICBNYXhCaXRyYXRlOiBOdW1iZXIoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5tYXhCaXRyYXRlJywgNTAwMDAwMCkpLFxuICAgICAgICAgICAgICAgICAgUmF0ZUNvbnRyb2xNb2RlOiAnUVZCUicsXG4gICAgICAgICAgICAgICAgICBTY2VuZUNoYW5nZURldGVjdDogJ1RSQU5TSVRJT05fREVURUNUSU9OJyxcbiAgICAgICAgICAgICAgICAgIFF1YWxpdHlUdW5pbmdMZXZlbDogJ1NJTkdMRV9QQVNTJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1dXG4gICAgICB9LFxuICAgICAgVXNlck1ldGFkYXRhOiB7XG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgdmlkZW9JZFxuICAgICAgfVxuICAgIH0gYXMgYW55KSk7XG5cbiAgICBjb25zdCBqb2JJZCA9IFN0cmluZyhqb2I/LkpvYj8uSWQgfHwgJycpO1xuXG4gICAgaWYoam9iSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtZWRpYUNvbnZlcnRKb2JJZDogam9iSWQsXG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwbGF5YmFja0ZpbGVUeXBlOiAndmlkZW8vbXA0JyxcbiAgICAgICAgcGxheWJhY2tLZXk6IGdldFZpZGVvUGxheWJhY2tLZXkodXNlcklkLCB2aWRlb0lkKSxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCcsXG4gICAgICAgIHN0cmVhbVR5cGU6ICdwcm9ncmVzc2l2ZSdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYodmlkZW9JZCkge1xuICAgICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB2aWRlb0lkLCB7XG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwcm9jZXNzaW5nRXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ21lZGlhY29udmVydF9qb2JfZmFpbGVkJyxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ2ZhaWxlZCdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHVzZXJJZCwgdmlkZW9JZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB7XG4gICAgaGxzS2V5ID0gJycsXG4gICAgcGxheWJhY2tGaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIHBsYXliYWNrS2V5ID0gJycsXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyA9ICdyZWFkeScsXG4gICAgc3RyZWFtVHlwZSA9ICdwcm9ncmVzc2l2ZSdcbiAgfToge1xuICAgIGhsc0tleT86IHN0cmluZztcbiAgICBwbGF5YmFja0ZpbGVUeXBlPzogc3RyaW5nO1xuICAgIHBsYXliYWNrS2V5Pzogc3RyaW5nO1xuICAgIHByb2Nlc3NpbmdTdGF0dXM/OiBzdHJpbmc7XG4gICAgc3RyZWFtVHlwZT86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFZpZGVvID0gYXdhaXQgZ2V0VmlkZW8oY29udGV4dCwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IGZvcm1hdFBsYXliYWNrS2V5ID0gcGxheWJhY2tLZXkgfHwgZ2V0VmlkZW9QbGF5YmFja0tleShTdHJpbmcoY3VycmVudFZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkKTtcbiAgY29uc3Qgc291cmNlRGVsZXRlZCA9IHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeSdcbiAgICA/IGF3YWl0IGRlbGV0ZVZpZGVvU291cmNlT2JqZWN0KGNvbnRleHQsIHtcbiAgICAgIC4uLmN1cnJlbnRWaWRlbyxcbiAgICAgIHBsYXliYWNrS2V5OiBmb3JtYXRQbGF5YmFja0tleVxuICAgIH0gYXMgVmlkZW9UeXBlKVxuICAgIDogZmFsc2U7XG4gIGNvbnN0IHVwZGF0ZWRWaWRlbyA9IGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIC4uLihobHNLZXkgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwbGF5YmFja0ZpbGVUeXBlLFxuICAgIC4uLihmb3JtYXRQbGF5YmFja0tleSA/IHtwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXl9IDoge30pLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMsXG4gICAgLi4uKHNvdXJjZURlbGV0ZWQgPyB7c291cmNlS2V5OiAnJywgdXBsb2FkS2V5OiAnJ30gOiB7fSksXG4gICAgc3RyZWFtVHlwZVxuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuXG4gIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICBhd2FpdCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkVmlkZW87XG59O1xuXG5leHBvcnQgY29uc3QgZmFpbFZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nXG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaW1pdDogbnVtYmVyID0gMTBcbik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3F1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgc2FmZUxpbWl0ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKGxpbWl0IHx8IDEwKSwgNTApKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiBJTiB2aWRlb3NcbiAgICAgIEZJTFRFUiB2LnVwbG9hZFN0YXR1cyA9PSBcInVwbG9hZGVkXCJcbiAgICAgIEZJTFRFUiB2LnByb2Nlc3NpbmdTdGF0dXMgIT0gXCJyZWFkeVwiXG4gICAgICBGSUxURVIgdi5maWxlVHlwZSAhPSBcInZpZGVvL21wNFwiXG4gICAgICBGSUxURVIgIUhBUyh2LCBcIm1lZGlhQ29udmVydEpvYklkXCIpIHx8IHYubWVkaWFDb252ZXJ0Sm9iSWQgPT0gXCJcIlxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgIExJTUlUICR7c2FmZUxpbWl0fVxuICAgICAgUkVUVVJOIHZcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFZpZGVvVHlwZVtdKTtcbiAgICBjb25zdCBqb2JJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IoY29uc3QgdmlkZW8gb2YgbGlzdCkge1xuICAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB2aWRlbyk7XG5cbiAgICAgIGlmKGpvYklkKSB7XG4gICAgICAgIGpvYklkcy5wdXNoKGpvYklkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9iSWRzO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBWaWRlb1VybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ3ZpZGVvcycsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB2aWRlb0lkXG59OiBWaWRlb1VybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCF2aWRlb0lkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCB2aWRlb05hbWUgPSBnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3QgdmlkZW9VcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHt2aWRlb05hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9VcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGltYWdlRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvSWQsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBhbnkpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGtleURpciA9IHZpZGVvRGlyIHx8IGltYWdlRGlyIHx8ICd2aWRlb3MnO1xuICBjb25zdCB2aWRlb0tleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2tleURpcn0vJHtnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKX1gO1xuXG4gIHN3aXRjaCh1cmxUeXBlKSB7XG4gICAgY2FzZSAnc2lnbmVkJzoge1xuICAgICAgY29uc3QgZGVmYXVsdEJ1Y2tldCA9IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gICAgICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbiAgICB9XG4gICAgY2FzZSAncHVibGljJzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL2JveC4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vJHt2aWRlb0tleX1gO1xuICAgIH1cbiAgICBjYXNlICdkZXYnOiB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kZXYuJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvU2lnbmVkS2V5VXJsID0gYXN5bmMgKGtleTogc3RyaW5nID0gJycsIGJ1Y2tldD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHZpZGVvS2V5ID0gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCF2aWRlb0tleSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0JywgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHZpZGVvT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgS2V5OiBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJylcbiAgfTtcblxuICBhd2FpdCBzM1B1dCh2aWRlb09iaik7XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBmaWxlVHlwZSxcbiAgICB2aWRlb0lkXG4gIH0gYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUgJiB7ZmlsZU5hbWU/OiBzdHJpbmc7IGZpbGVTaXplPzogbnVtYmVyOyBwYXJ0Q291bnQ/OiBudW1iZXJ9LFxuICBwYXJ0Q291bnQ6IG51bWJlciA9IDFcbik6IFByb21pc2U8VmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBmaWxlU2l6ZSxcbiAgICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBwcml2YWN5LFxuICAgIHRodW1iQmFzZTY0ID0gJycsXG4gICAgdGh1bWJGaWxlVHlwZSA9ICdpbWFnZS9qcGVnJyxcbiAgICB0eXBlID0gJ3ZpZGVvJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCkgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9LSR7RGF0ZS5ub3coKX0tJHtTdHJpbmcodmlkZW8/LmZpbGVOYW1lIHx8ICcnKX1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGtleSA9IGdldFZpZGVvVXBsb2FkS2V5KHNlc3Npb25JZCwgZm9ybWF0VmlkZW9JZCwgZmlsZVR5cGUpO1xuICBjb25zdCBzYWZlUGFydENvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKHBhcnRDb3VudCB8fCB2aWRlbz8ucGFydENvdW50IHx8IDEpLCAxMDAwMCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBsb2FkID0gYXdhaXQgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCB8fCAnJyxcbiAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlIHx8ICcnLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZCxcbiAgICAgICAgdmlkZW9JZDogZm9ybWF0VmlkZW9JZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHVwbG9hZElkID0gU3RyaW5nKHVwbG9hZD8uVXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIXVwbG9hZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgdmlkZW8gdXBsb2FkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaGFzVGh1bWIgPSBhd2FpdCBzYXZlVmlkZW9UaHVtYm5haWwoY29udGV4dCwgZm9ybWF0VmlkZW9JZCwgdGh1bWJCYXNlNjQsIHRodW1iRmlsZVR5cGUpO1xuICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgX2tleTogZm9ybWF0VmlkZW9JZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGZpbGVTaXplLFxuICAgICAgZmlsZVR5cGUsXG4gICAgICBtb2RpZmllZDogbm93LFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdwZW5kaW5nX3VwbG9hZCcsXG4gICAgICBzb3VyY2VLZXk6IGtleSxcbiAgICAgIC4uLihoYXNUaHVtYiA/IHt0aHVtYkZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIHR5cGUsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHVwbG9hZEtleToga2V5LFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkaW5nJyxcbiAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgfSBhcyBWaWRlb1R5cGU7XG4gICAgY29uc3QgbmV3VmlkZW8gPSBhd2FpdCBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydCk7XG5cbiAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgIGF3YWl0IGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnROdW1iZXJzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBzYWZlUGFydENvdW50fSwgKF92YWx1ZSwgaW5kZXgpID0+IGluZGV4ICsgMSk7XG4gICAgY29uc3QgcGFydFVybHMgPSBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgdXBsb2FkSWQsIHBhcnROdW1iZXJzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWNrZXQ6IHMzR2V0QnVja2V0KCksXG4gICAgICBrZXksXG4gICAgICBwYXJ0U2l6ZTogREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFLFxuICAgICAgcGFydFVybHMsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHZpZGVvOiBuZXdWaWRlbyxcbiAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICB9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb011bHRpcGFydFVwbG9hZFR5cGU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnROdW1iZXJzOiBudW1iZXJbXSA9IFtdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHZpZGVvPy51cGxvYWRLZXkgfHwgdmlkZW8/LnNvdXJjZUtleSB8fCBnZXRWaWRlb1VwbG9hZEtleShTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJyksIHBhcnNlSWQodmlkZW9JZCksIHZpZGVvPy5maWxlVHlwZSkpO1xuICAgIGNvbnN0IGZvcm1hdFVwbG9hZElkID0gU3RyaW5nKHVwbG9hZElkIHx8IHZpZGVvPy51cGxvYWRJZCB8fCAnJyk7XG5cbiAgICBpZigha2V5IHx8ICFmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgZm9ybWF0VXBsb2FkSWQsIHBhcnROdW1iZXJzLm1hcCgocGFydE51bWJlcikgPT4gTnVtYmVyKHBhcnROdW1iZXIpKS5maWx0ZXIoQm9vbGVhbikpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb1VwbG9hZFBhcnRVcmxbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydHM6IFZpZGVvVXBsb2FkUGFydElucHV0W10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCB1cGxvYWRQYXJ0cyA9IHBhcnRzXG4gICAgICAubWFwKChwYXJ0KSA9PiAoe1xuICAgICAgICBFVGFnOiBTdHJpbmcocGFydD8uZXRhZyB8fCAnJykudHJpbSgpLFxuICAgICAgICBQYXJ0TnVtYmVyOiBOdW1iZXIocGFydD8ucGFydE51bWJlciB8fCAwKVxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LkVUYWcgJiYgcGFydC5QYXJ0TnVtYmVyID4gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLlBhcnROdW1iZXIgLSBiLlBhcnROdW1iZXIpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQgfHwgIXVwbG9hZFBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHZpZGVvIHVwbG9hZCBkYXRhLicpO1xuICAgIH1cblxuICAgIGF3YWl0IHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNdWx0aXBhcnRVcGxvYWQ6IHtcbiAgICAgICAgUGFydHM6IHVwbG9hZFBhcnRzXG4gICAgICB9LFxuICAgICAgVXBsb2FkSWQ6IGZvcm1hdFVwbG9hZElkXG4gICAgfSk7XG5cbiAgICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgLi4uKHNob3VsZFRyYW5zY29kZVZpZGVvKHZpZGVvKVxuICAgICAgICA/IHtwcm9jZXNzaW5nU3RhdHVzOiAncXVldWVkJ31cbiAgICAgICAgOiB7XG4gICAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogdmlkZW8/LmZpbGVUeXBlIHx8ICd2aWRlby9tcDQnLFxuICAgICAgICAgIHBsYXliYWNrS2V5OiBrZXksXG4gICAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3JlYWR5JyxcbiAgICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICAgIH0pLFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkZWQnXG4gICAgfSk7XG5cbiAgICBpZihzaG91bGRUcmFuc2NvZGVWaWRlbyh1cGRhdGVkVmlkZW8pKSB7XG4gICAgICB2b2lkIGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2Fib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcblxuICAgIGlmKGtleSAmJiBmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgYXdhaXQgczNBYm9ydE11bHRpcGFydFVwbG9hZCh7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgS2V5OiBrZXksXG4gICAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBwYXJzZUlkKHZpZGVvSWQpLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ2Fib3J0ZWQnXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVmlkZW8gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlLCBwcml2YWN5LCB0eXBlID0gJ3ZpZGVvJywgcHJvdmlkZXIsIGV4dGVybmFsSWQsIGV4dGVybmFsVXJsfSA9IHZpZGVvO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IHZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gc2F2ZVZpZGVvKGNvbnRleHQsIHZpZGVvSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigoc2F2ZWQ6IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICAgIC4uLnNhdmVkLFxuICAgICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHByaXZhY3ksXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVmlkZW9FZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7dmlkZW9JZCwgaXRlbUlkLCBpdGVtVHlwZX0gPSB2aWRlb0VkZ2U7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc01lZGlhLXZpZGVvLSR7dmlkZW9JZH0tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgY29uc3QgZmlsZURvY0lkID0gYHZpZGVvcy8ke2Zvcm1hdFZpZGVvSWR9YDtcblxuICBjb25zdCBlZGdlOiBWaWRlb0VkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGUsXG4gICAgdHlwZTogJ3ZpZGVvJ1xuICB9IGFzIFZpZGVvRWRnZVR5cGU7XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGJhc2U2NCA9ICcnLFxuICAgIGJ1ZmZlcjogdmlkZW9CdWZmZXIsXG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBleHRlcm5hbElkLFxuICAgIGV4dGVybmFsVXJsLFxuICAgIGZpbGVUeXBlLFxuICAgIGhsc0tleSxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICBwbGF5YmFja0tleSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIHByaXZhY3ksXG4gICAgcHJvdmlkZXIsXG4gICAgc3RyZWFtVHlwZSxcbiAgICB0eXBlLFxuICAgIHVwbG9hZFN0YXR1cyxcbiAgICB1cmwgPSAnJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcblxuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gdmlkZW9JZCB8fCBjcmVhdGVIYXNoKGB2aWRlby0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG5cbiAgaWYodHlwZSA9PT0gJ2V4dGVybmFsJyAmJiAoZXh0ZXJuYWxJZCB8fCBleHRlcm5hbFVybCkpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICBpZihiYXNlNjQgfHwgdmlkZW9CdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSB2aWRlb0J1ZmZlciBhcyBCdWZmZXI7XG4gICAgaWYoYmFzZTY0KSB7XG4gICAgICBjb25zdCBmb3JtYXRCYXNlNjQgPSBiYXNlNjQuc3Vic3RyKGJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvcm1hdEJhc2U2NCwgJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIGxldCB1cGRhdGVkRmlsZVR5cGUgPSBmaWxlVHlwZTtcbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCB2UGFyYW1zOiBWaWRlb1R5cGUgPSB7YnVmZmVyLCBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlLCB1c2VySWQ6IHNlc3Npb25JZCwgdmlkZW9JZDogZm9ybWF0VmlkZW9JZH0gYXMgVmlkZW9UeXBlO1xuICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB7Li4udlBhcmFtcywgZGVzY3JpcHRpb24sIHByaXZhY3l9LCBzM09wdGlvbnMpXG4gICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG4gICAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklNQUdFX1JFUVVFU1QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYnVmZmVyKCkpXG4gICAgICAudGhlbigoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZGVzY3JpcHRpb24sIGZpbGVUeXBlOiBjb250ZW50VHlwZSwgcHJpdmFjeSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICAgICAgcmV0dXJuIGFkZFZpZGVvKGNvbnRleHQsIHZQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYodmlkZW9JZCAhPT0gJycpIHtcbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIC4uLihobHNLZXkgIT09IHVuZGVmaW5lZCA/IHtobHNLZXl9IDoge30pLFxuICAgICAgLi4uKHBsYXliYWNrRmlsZVR5cGUgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0ZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0tleSAhPT0gdW5kZWZpbmVkID8ge3BsYXliYWNrS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwcm9jZXNzaW5nU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7cHJvY2Vzc2luZ1N0YXR1c30gOiB7fSksXG4gICAgICAuLi4ocHJpdmFjeSAhPT0gdW5kZWZpbmVkID8ge3ByaXZhY3l9IDoge30pLFxuICAgICAgLi4uKHN0cmVhbVR5cGUgIT09IHVuZGVmaW5lZCA/IHtzdHJlYW1UeXBlfSA6IHt9KSxcbiAgICAgIC4uLih1cGxvYWRTdGF0dXMgIT09IHVuZGVmaW5lZCA/IHt1cGxvYWRTdGF0dXN9IDoge30pXG4gICAgfTtcbiAgICByZXR1cm4gdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB1cGRhdGUpXG4gICAgICAudGhlbigodXBkYXRlZFZpZGVvKSA9PiB7XG4gICAgICAgIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICAgICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVZpZGVvID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHZpZGVvSWQ6IHN0cmluZyk6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBkZWxldGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIGNhc2NhZGU6IFtFREdFUy5IQVNfTUVESUEsIEVER0VTLkhBU19SRUFDVElPTl0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKHZpZGVvKSB7XG4gICAgICBjb25zdCB7X2tleTogdktleSwgZmlsZVR5cGUsIGhsc0tleSwgcGxheWJhY2tLZXksIHNvdXJjZUtleSwgdGh1bWJGaWxlVHlwZSwgdXBsb2FkS2V5fSA9IHZpZGVvO1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgc291cmNlS2V5LFxuICAgICAgICB1cGxvYWRLZXksXG4gICAgICAgIHBsYXliYWNrS2V5LFxuICAgICAgICBobHNLZXksXG4gICAgICAgIGB1c2Vycy8ke3Nlc3Npb25JZH0vdmlkZW9zLyR7dktleX0ubXA0YCxcbiAgICAgICAgZmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIGZpbGVUeXBlLCAndmlkZW9zJykgOiAnJyxcbiAgICAgICAgdGh1bWJGaWxlVHlwZSA/IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdktleSwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpIDogJydcbiAgICAgIF1cbiAgICAgICAgLm1hcCgoa2V5KSA9PiBTdHJpbmcoa2V5IHx8ICcnKS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmZpbHRlcigoa2V5LCBpbmRleCwgbGlzdCkgPT4gbGlzdC5pbmRleE9mKGtleSkgPT09IGluZGV4KTtcbiAgICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgICBEZWxldGU6IHtcbiAgICAgICAgICBPYmplY3RzOiBrZXlzLm1hcCgoS2V5KSA9PiAoe0tleX0pKSxcbiAgICAgICAgICBRdWlldDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gdmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiQ3JlYXRlSm9iQ29tbWFuZCIsIkRlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCIsIk1lZGlhQ29udmVydENsaWVudCIsImdldCIsImh0dHBHZXQiLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiZ2V0Q29ubmVjdGlvbnNCeVVzZXIiLCJ3c0NsaWVudCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5IiwiYnVpbGRUYWdzUXVlcnkiLCJnZXREb2NJZCIsImdldExpbWl0IiwidXNlRGIiLCJnZXRBd3NDcmVkZW50aWFscyIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsInMzQWJvcnRNdWx0aXBhcnRVcGxvYWQiLCJzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQiLCJzM0RlbGV0ZSIsInMzRGVsZXRlTGlzdCIsInMzR2V0QnVja2V0IiwiczNHZXRTaWduZWRVcmwiLCJzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwiLCJzM1B1dCIsImhhc1N1YnNjcmlwdGlvblRvSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNNZWRpYUNvbGxlY3Rpb24iLCJIQVNfTUVESUEiLCJERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUiLCJWSURFT19QTEFZQkFDS19ESVIiLCJtZWRpYUNvbnZlcnRFbmRwb2ludCIsImdldE1lZGlhQ29udmVydENsaWVudCIsImVuZHBvaW50IiwiY3JlZGVudGlhbHMiLCJyZWdpb24iLCJnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCIsImNsaWVudCIsImVuZHBvaW50cyIsInNlbmQiLCJNYXhSZXN1bHRzIiwiRW5kcG9pbnRzIiwiVXJsIiwiZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMiLCJpdGVtSWQiLCJwYXJzZWREb2NJZCIsIml0ZW1LZXkiLCJVU0VSUyIsIlBFUlNPTkFTIiwibm9ybWFsaXplVmlkZW9Qcml2YWN5IiwicHJpdmFjeSIsIlN0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNhblZpZXdWaWRlbyIsInZpZGVvIiwidmlld2VyVXNlcklkIiwiYWNjZXNzIiwiaXNPd25lciIsInVzZXJJZCIsImNhblZpZXdGcmllbmRzIiwiY2FuVmlld1ZpcCIsInJlc29sdmVWaWRlb1ZpZXdlckFjY2VzcyIsImNvbnRleHQiLCJsaXN0Iiwic2Vzc2lvblVzZXJJZCIsIm93bmVyVXNlcklkIiwibWVkaWFJdGVtS2V5IiwiX21lZGlhSXRlbUtleSIsIm1lZGlhSXRlbVR5cGUiLCJfbWVkaWFJdGVtVHlwZSIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwicGFyc2VWaWRlb09wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwidHlwZSIsImxpbWl0IiwiZ2V0VmlkZW9PcHRpb25hbCIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImluY2x1ZGVzIiwicmVhY3Rpb25RdWVyeSIsInJlcGxhY2UiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJ0YWdzUXVlcnkiLCJnZXRWaWRlb3NCeVVzZXIiLCJhY3Rpb24iLCJmb3JtYXRVc2VySWQiLCJjdXN0b21RdWVyaWVzIiwic29ydCIsImRpcmVjdGlvbiIsImN1c3RvbU9iamVjdHMiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJ2YWx1ZSIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0VmlkZW9Db3VudEJ5SXRlbSIsImRhdGFiYXNlTmFtZSIsIml0ZW1Eb2NJZHMiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY291bnQiLCJnZXRWaWRlb3NCeUl0ZW0iLCJzZXNzaW9uIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJqb2luIiwibGVuZ3RoIiwiYWxsIiwiZmlsdGVyIiwiZ2V0VmlkZW9MaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJzZXNzaW9uSWQiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJtYXAiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJhbXMiLCJnZXRWaWRlbyIsInZpZGVvSWQiLCJmb3JtYXRWaWRlb0lkIiwiX2tleSIsImdldFBhdGhVc2VyVmlkZW9zIiwidmlkZW9UeXBlIiwiZGlyIiwiZmlsZW5hbWUiLCJnZXRWaWRlb0ZpbGVuYW1lIiwiZ2V0VmlkZW9VcGxvYWRLZXkiLCJmaWxlVHlwZSIsInNhdmVWaWRlb1RodW1ibmFpbCIsInRodW1iQmFzZTY0IiwidGh1bWJGaWxlVHlwZSIsImZvcm1hdEJhc2U2NCIsInN1YnN0ciIsImluZGV4T2YiLCJidWZmZXIiLCJCdWZmZXIiLCJCb2R5IiwiQnVja2V0IiwiQ29udGVudFR5cGUiLCJLZXkiLCJnZXRWaWRlb1VwbG9hZERvYyIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsImdldFZpZGVvUGFydFVybHMiLCJrZXkiLCJ1cGxvYWRJZCIsInBhcnROdW1iZXJzIiwiUHJvbWlzZSIsInBhcnROdW1iZXIiLCJ1cmwiLCJQYXJ0TnVtYmVyIiwiVXBsb2FkSWQiLCJlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb25JZHMiLCJjb25uZWN0aW9uIiwiY29ubmVjdGlvbklkIiwic29ja2V0SWQiLCJCb29sZWFuIiwiaW5kZXgiLCJkYXRhIiwiZ2V0VmlkZW9QbGF5YmFja0tleSIsImRlbGV0ZVZpZGVvU291cmNlT2JqZWN0Iiwic291cmNlS2V5IiwidXBsb2FkS2V5IiwicGxheWJhY2tLZXkiLCJzaG91bGRUcmFuc2NvZGVWaWRlbyIsImNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iIiwicm9sZUFybiIsImJ1Y2tldCIsIm1vZGlmaWVkIiwiRGF0ZSIsIm5vdyIsInByb2Nlc3NpbmdFcnJvciIsInByb2Nlc3NpbmdTdGF0dXMiLCJxdWV1ZSIsIm91dHB1dERlc3RpbmF0aW9uIiwiam9iIiwiUXVldWUiLCJSb2xlIiwiU2V0dGluZ3MiLCJJbnB1dHMiLCJBdWRpb1NlbGVjdG9ycyIsIkRlZmF1bHRTZWxlY3Rpb24iLCJGaWxlSW5wdXQiLCJUaW1lY29kZVNvdXJjZSIsIlZpZGVvU2VsZWN0b3IiLCJSb3RhdGUiLCJPdXRwdXRHcm91cHMiLCJOYW1lIiwiT3V0cHV0R3JvdXBTZXR0aW5ncyIsIkZpbGVHcm91cFNldHRpbmdzIiwiRGVzdGluYXRpb24iLCJUeXBlIiwiT3V0cHV0cyIsIkF1ZGlvRGVzY3JpcHRpb25zIiwiQXVkaW9Tb3VyY2VOYW1lIiwiQ29kZWNTZXR0aW5ncyIsIkFhY1NldHRpbmdzIiwiQml0cmF0ZSIsIkNvZGluZ01vZGUiLCJTYW1wbGVSYXRlIiwiQ29kZWMiLCJDb250YWluZXJTZXR0aW5ncyIsIkNvbnRhaW5lciIsIk1wNFNldHRpbmdzIiwiVmlkZW9EZXNjcmlwdGlvbiIsIkgyNjRTZXR0aW5ncyIsIk1heEJpdHJhdGUiLCJOdW1iZXIiLCJSYXRlQ29udHJvbE1vZGUiLCJTY2VuZUNoYW5nZURldGVjdCIsIlF1YWxpdHlUdW5pbmdMZXZlbCIsIlVzZXJNZXRhZGF0YSIsImpvYklkIiwiSm9iIiwiSWQiLCJtZWRpYUNvbnZlcnRKb2JJZCIsInBsYXliYWNrRmlsZVR5cGUiLCJzdHJlYW1UeXBlIiwibWVzc2FnZSIsImNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nIiwiaGxzS2V5IiwiY3VycmVudFZpZGVvIiwiZm9ybWF0UGxheWJhY2tLZXkiLCJzb3VyY2VEZWxldGVkIiwidXBkYXRlZFZpZGVvIiwiZmFpbFZpZGVvUHJvY2Vzc2luZyIsInF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCIsInNhZmVMaW1pdCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJqb2JJZHMiLCJnZXRBcHBWaWRlb1VybCIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlSWQiLCJidWNrZXROYW1lIiwidmlkZW9OYW1lIiwidmlkZW9VcmwiLCJnZXRWaWRlb1VybCIsImltYWdlRGlyIiwidmlkZW9EaXIiLCJ1cmxUeXBlIiwia2V5RGlyIiwidmlkZW9LZXkiLCJkZWZhdWx0QnVja2V0IiwiRXhwaXJlcyIsImdldFZpZGVvU2lnbmVkS2V5VXJsIiwic2F2ZVZpZGVvIiwiczNPcHRpb25zIiwidmlkZW9PYmoiLCJmaWxlU2l6ZSIsImNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydENvdW50IiwiZGVzY3JpcHRpb24iLCJpdGVtVHlwZSIsImZpbGVOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZm9ybWF0SXRlbVR5cGUiLCJzYWZlUGFydENvdW50IiwidXBsb2FkIiwiTWV0YWRhdGEiLCJoYXNUaHVtYiIsImluc2VydCIsImFkZGVkIiwidXBsb2FkU3RhdHVzIiwibmV3VmlkZW8iLCJ2aWRlb0VkZ2UiLCJhZGRWaWRlb0VkZ2UiLCJBcnJheSIsIl92YWx1ZSIsInBhcnRVcmxzIiwicGFydFNpemUiLCJnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzIiwiZm9ybWF0VXBsb2FkSWQiLCJjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydHMiLCJ1cGxvYWRQYXJ0cyIsInBhcnQiLCJFVGFnIiwiZXRhZyIsImEiLCJiIiwiTXVsdGlwYXJ0VXBsb2FkIiwiUGFydHMiLCJhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwiYWRkVmlkZW8iLCJwcm92aWRlciIsImV4dGVybmFsSWQiLCJleHRlcm5hbFVybCIsInNhdmVkIiwiZWRnZUlkIiwiaXRlbURvY0lkIiwiZmlsZURvY0lkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiY29sbGVjdGlvbiIsInNhdmUiLCJyZXR1cm5OZXciLCJmaWxlRWRnZSIsImRvY3VtZW50IiwidXBkYXRlVmlkZW8iLCJiYXNlNjQiLCJ2aWRlb0J1ZmZlciIsInVwZGF0ZWRGaWxlVHlwZSIsImZpbGVUeXBlRnJvbUJ1ZmZlciIsIm1pbWUiLCJ2UGFyYW1zIiwiY29udGVudFR5cGUiLCJyZXMiLCJzdGF0dXMiLCJJTUFHRV9SRVFVRVNUIiwiaGVhZGVycyIsInVwZGF0ZSIsInVuZGVmaW5lZCIsImRlbGV0ZVZpZGVvIiwiY2FzY2FkZSIsIkhBU19SRUFDVElPTiIsIm93bmVyc2hpcCIsInZLZXkiLCJrZXlzIiwiRGVsZXRlIiwiT2JqZWN0cyIsIlF1aWV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUNFQSxnQkFBZ0IsRUFDaEJDLHdCQUF3QixFQUN4QkMsa0JBQWtCLFFBQ2IsK0JBQStCO0FBRXRDLFNBQVFDLE9BQU9DLE9BQU8sUUFBTyxvQkFBb0I7QUFDakQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hHLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyxX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
|
|
1198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvdmlkZW9zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge1xuICBDcmVhdGVKb2JDb21tYW5kLFxuICBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQsXG4gIE1lZGlhQ29udmVydENsaWVudFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtbWVkaWFjb252ZXJ0JztcbmltcG9ydCB7RGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCwgUHV0T2JqZWN0Q29tbWFuZElucHV0fSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9uc0J5VXNlcn0gZnJvbSAnLi4vbGFtYmRhcy9hY3Rpb25zL3dlYnNvY2tldHMuanMnO1xuaW1wb3J0IHt3c0NsaWVudH0gZnJvbSAnLi4vbGFtYmRhcy91dGlscy93ZWJzb2NrZXQuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2J1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5LCBidWlsZFRhZ3NRdWVyeX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRBd3NDcmVkZW50aWFsc30gZnJvbSAnLi4vdXRpbHMvYXdzVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7XG4gIHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkLFxuICBzM0RlbGV0ZSxcbiAgczNEZWxldGVMaXN0LFxuICBzM0dldEJ1Y2tldCxcbiAgczNHZXRTaWduZWRVcmwsXG4gIHMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCxcbiAgczNQdXRcbn0gZnJvbSAnLi9zMy5qcyc7XG5pbXBvcnQge2hhc1N1YnNjcmlwdGlvblRvSXRlbX0gZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBWaWRlb0VkZ2VUeXBlLFxuICBWaWRlb011bHRpcGFydFVwbG9hZFR5cGUsXG4gIFZpZGVvT3B0aW9ucyxcbiAgVmlkZW9UeXBlLFxuICBWaWRlb1VwbG9hZFBhcnRJbnB1dCxcbiAgVmlkZW9VcGxvYWRQYXJ0VXJsLFxuICBWaWRlb1VybERhdGFcbn0gZnJvbSAnLi4vdHlwZXMvdmlkZW9zLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICd2aWRlb3MnO1xuY29uc3QgaGFzTWVkaWFDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfTUVESUEpO1xuY29uc3QgREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDtcbmNvbnN0IFZJREVPX1BMQVlCQUNLX0RJUiA9ICd2aWRlby1wbGF5YmFjayc7XG5cbmxldCBtZWRpYUNvbnZlcnRFbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRDbGllbnQgPSAoZW5kcG9pbnQ/OiBzdHJpbmcpOiBNZWRpYUNvbnZlcnRDbGllbnQgPT4gbmV3IE1lZGlhQ29udmVydENsaWVudCh7XG4gIGNyZWRlbnRpYWxzOiBnZXRBd3NDcmVkZW50aWFscygpLFxuICBlbmRwb2ludCxcbiAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbn0pO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZihtZWRpYUNvbnZlcnRFbmRwb2ludCkge1xuICAgIHJldHVybiBtZWRpYUNvbnZlcnRFbmRwb2ludDtcbiAgfVxuXG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5lbmRwb2ludCcpO1xuXG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gZ2V0TWVkaWFDb252ZXJ0Q2xpZW50KCk7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQoe01heFJlc3VsdHM6IDF9KSk7XG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gZW5kcG9pbnRzLkVuZHBvaW50cz8uWzBdPy5Vcmw7XG5cbiAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xufTtcblxuY29uc3QgZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMgPSAoaXRlbUlkOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHBhcnNlZERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuXG4gIGlmKHBhcnNlZERvY0lkKSB7XG4gICAgcmV0dXJuIFtwYXJzZWREb2NJZF07XG4gIH1cblxuICBjb25zdCBpdGVtS2V5ID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGlmKCFpdGVtS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtpdGVtS2V5fWAsXG4gICAgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7aXRlbUtleX1gXG4gIF07XG59O1xuXG5jb25zdCBub3JtYWxpemVWaWRlb1ByaXZhY3kgPSAocHJpdmFjeTogdW5rbm93bik6ICdmcmllbmRzJyB8ICdwcml2YXRlJyB8ICdwdWJsaWMnIHwgJ3ZpcCcgPT4ge1xuICBzd2l0Y2goU3RyaW5nKHByaXZhY3kgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gJ2ZyaWVuZHMnO1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuICdwcml2YXRlJztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuICd2aXAnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3B1YmxpYyc7XG4gIH1cbn07XG5cbmNvbnN0IGNhblZpZXdWaWRlbyA9IChcbiAgdmlkZW86IFZpZGVvVHlwZSxcbiAgdmlld2VyVXNlcklkOiBzdHJpbmcsXG4gIGFjY2Vzczoge1xuICAgIHJlYWRvbmx5IGNhblZpZXdGcmllbmRzOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhblZpZXdWaXA6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXNPd25lcjogYm9vbGVhbjtcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IHByaXZhY3kgPSBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpO1xuXG4gIGlmKGFjY2Vzcy5pc093bmVyIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSA9PT0gdmlld2VyVXNlcklkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzd2l0Y2gocHJpdmFjeSkge1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3RnJpZW5kcztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3VmlwO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZVZpZGVvVmlld2VyQWNjZXNzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaXN0OiBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9PixcbiAgc2Vzc2lvblVzZXJJZDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBTdHJpbmcobGlzdFswXT8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgaXNPd25lciA9ICEhc2Vzc2lvblVzZXJJZCAmJiAhIW93bmVyVXNlcklkICYmIHNlc3Npb25Vc2VySWQgPT09IG93bmVyVXNlcklkO1xuXG4gIGlmKGlzT3duZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuVmlld0ZyaWVuZHM6IHRydWUsXG4gICAgICBjYW5WaWV3VmlwOiB0cnVlLFxuICAgICAgaXNPd25lcjogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogZmFsc2UsXG4gICAgICBjYW5WaWV3VmlwOiBmYWxzZSxcbiAgICAgIGlzT3duZXI6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGxldCBjYW5WaWV3RnJpZW5kcyA9IGZhbHNlO1xuICBsZXQgY2FuVmlld1ZpcCA9IGZhbHNlO1xuICBjb25zdCBtZWRpYUl0ZW1LZXkgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbUtleSB8fCAnJyk7XG4gIGNvbnN0IG1lZGlhSXRlbVR5cGUgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbVR5cGUgfHwgJycpO1xuXG4gIGlmKG1lZGlhSXRlbVR5cGUgPT09IENPTExFQ1RJT05TLlBFUlNPTkFTICYmIG1lZGlhSXRlbUtleSkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgIGNhblZpZXdGcmllbmRzID0gISFyZWxhdGlvbnNoaXA/LmlzRnJpZW5kO1xuICAgIGNhblZpZXdWaXAgPSBhd2FpdCBoYXNTdWJzY3JpcHRpb25Ub0l0ZW0oY29udGV4dCwgbWVkaWFJdGVtS2V5LCBDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhblZpZXdGcmllbmRzLFxuICAgIGNhblZpZXdWaXAsXG4gICAgaXNPd25lcjogZmFsc2VcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVZpZGVvT3B0aW9ucyA9IChvcHRpb25zOiBWaWRlb09wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7ZnJvbSA9IDAsIHRvID0gMzAsIHR5cGUgPSAnZGVmYXVsdCd9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9PcHRpb25hbCA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgY29uc3QgcmVhY3Rpb25RdWVyeSA9IGJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5KGZpZWxkLnJlcGxhY2UoJ0NvdW50JywgJycpLCAndicsICd2aWRlb3MnKTtcbiAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKHJlYWN0aW9uUXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goYCR7ZmllbGR9OiR7ZmllbGR9YCk7XG4gICAgICByZXR1cm4gc2VsZWN0cztcbiAgICB9XG5cbiAgICBzd2l0Y2goZmllbGQpIHtcbiAgICAgIGNhc2UgJ3JlYWN0aW9ucyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByZWFjdGlvbnMgPSAoRk9SIHZpZGVvLCByIElOIElOQk9VTkQgdi5faWQgcmVhY3Rpb25zIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXMgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX0pYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgY29uc3QgdGFnc1F1ZXJ5ID0gYnVpbGRUYWdzUXVlcnkoJ3YnKTtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2godGFnc1F1ZXJ5KTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHYudXNlcklkID09IHUuX2tleSBMSU1JVCAxIFJFVFVSTiB1KWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdwcml2YWN5Jzoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb3NCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBmcm9tOiBudW1iZXIgPSAwLFxuICB0bzogbnVtYmVyID0gMzBcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5VXNlcic7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY3VzdG9tUXVlcmllcyA9IFtcbiAgICBgTEVUIHVzZXIgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdS5fa2V5ID09IGRvYy51c2VySWQgTElNSVQgMSBSRVRVUk4gdSlgXG4gIF07XG5cbiAgcmV0dXJuIGdldExpc3RCeTxWaWRlb1R5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgJ3ZpZGVvcycsXG4gICAge3VzZXJJZDogZm9ybWF0VXNlcklkfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdERVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgICBjdXN0b21RdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICAgIH1cbiAgKS5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvQ291bnRCeUl0ZW0gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9Db3VudEJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIHYgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiB2Ll9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIHYudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb3NCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyhpdGVtSWQpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICBMRVQgdiA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKHYpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvblVzZXJJZCk7XG5cbiAgICBpZihhY2Nlc3MuaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25Vc2VySWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogVmlkZW9PcHRpb25zXG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwidmlkZW9zXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBcbiAgXTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gaGFzUmVhY3Rpb25cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInZpZGVvc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbCBJTiBJTkJPVU5EIHYuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh2LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3YnKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbWVkaWFJdGVtS2V5OiBtZWRpYSA/IG1lZGlhLml0ZW1LZXkgOiBudWxsLFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBtZWRpYSA/IG1lZGlhLml0ZW1UeXBlIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvbklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gY2FuVmlld1ZpZGVvKHZpZGVvLCBzZXNzaW9uSWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW8gPSAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvJztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB7X2tleTogZm9ybWF0VmlkZW9JZH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhdGhVc2VyVmlkZW9zID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIHZpZGVvVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICd2aWRlb3MnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gdmlkZW9JZDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0ZpbGVuYW1lID0gKHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PiB7XG4gIGxldCBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1wNGA7XG5cbiAgc3dpdGNoKHZpZGVvVHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LnBuZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS93ZWJwJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VicGA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5qcGdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vd2VibSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYm1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vcXVpY2t0aW1lJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubW92YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBmaWxlbmFtZTtcbn07XG5cbmNvbnN0IGdldFZpZGVvVXBsb2FkS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJyk7XG5cbmNvbnN0IHNhdmVWaWRlb1RodW1ibmFpbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB0aHVtYkJhc2U2NDogc3RyaW5nID0gJycsXG4gIHRodW1iRmlsZVR5cGU6IHN0cmluZyA9ICdpbWFnZS9qcGVnJ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCF0aHVtYkJhc2U2NCB8fCAhdGh1bWJCYXNlNjQuaW5jbHVkZXMoJywnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEJhc2U2NCA9IHRodW1iQmFzZTY0LnN1YnN0cih0aHVtYkJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG5cbiAgaWYoIWJ1ZmZlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhd2FpdCBzM1B1dCh7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogdGh1bWJGaWxlVHlwZSxcbiAgICBLZXk6IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdmlkZW9JZCwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpXG4gIH0pO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWREb2MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlbyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXZpZGVvIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSAhPT0gc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICByZXR1cm4gdmlkZW87XG59O1xuXG5jb25zdCBnZXRWaWRlb1BhcnRVcmxzID0gYXN5bmMgKFxuICBrZXk6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydE51bWJlcnM6IG51bWJlcltdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiBQcm9taXNlLmFsbChwYXJ0TnVtYmVycy5tYXAoYXN5bmMgKHBhcnROdW1iZXIpID0+ICh7XG4gIHBhcnROdW1iZXIsXG4gIHVybDogYXdhaXQgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsKHtcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgS2V5OiBrZXksXG4gICAgUGFydE51bWJlcjogcGFydE51bWJlcixcbiAgICBVcGxvYWRJZDogdXBsb2FkSWRcbiAgfSlcbn0pKSk7XG5cbmNvbnN0IGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IG93bmVyVXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZighb3duZXJVc2VySWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25uZWN0aW9ucyA9IGF3YWl0IGdldENvbm5lY3Rpb25zQnlVc2VyKG93bmVyVXNlcklkKS5jYXRjaCgoKSA9PiBbXSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25JZHMgPSBjb25uZWN0aW9uc1xuICAgIC5tYXAoKGNvbm5lY3Rpb24pID0+IHBhcnNlU3RyaW5nKGNvbm5lY3Rpb24/LmNvbm5lY3Rpb25JZCB8fCBjb25uZWN0aW9uPy5zb2NrZXRJZCB8fCAnJywgMzIpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZmlsdGVyKChjb25uZWN0aW9uSWQsIGluZGV4LCBsaXN0KSA9PiBsaXN0LmluZGV4T2YoY29ubmVjdGlvbklkKSA9PT0gaW5kZXgpO1xuXG4gIGlmKCFjb25uZWN0aW9uSWRzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHdzQ2xpZW50LnNlbmQoY29ubmVjdGlvbklkcywge1xuICAgIGFjdGlvbjogJ3ZpZGVvLnByb2Nlc3NpbmcuY29tcGxldGVkJyxcbiAgICBkYXRhOiB7XG4gICAgICB2aWRlb1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG59O1xuXG5jb25zdCBnZXRWaWRlb1BsYXliYWNrS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgZ2V0UGF0aFVzZXJWaWRlb3ModXNlcklkLCB2aWRlb0lkLCAndmlkZW8vbXA0JywgVklERU9fUExBWUJBQ0tfRElSKTtcblxuY29uc3QgZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGVcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QnO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHBsYXliYWNrS2V5ID0gU3RyaW5nKHZpZGVvPy5wbGF5YmFja0tleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzb3VyY2VLZXkgfHwgc291cmNlS2V5ID09PSBwbGF5YmFja0tleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgczNEZWxldGUoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBzb3VyY2VLZXlcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHZpZGVvSWQ6IHZpZGVvPy52aWRlb0lkIHx8IHZpZGVvPy5fa2V5fSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3Qgc2hvdWxkVHJhbnNjb2RlVmlkZW8gPSAodmlkZW86IFZpZGVvVHlwZSA9IHt9KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGZpbGVUeXBlID0gU3RyaW5nKHZpZGVvPy5maWxlVHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICBpZighZmlsZVR5cGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAhW1xuICAgICd2aWRlby9tcDQnLFxuICAgICd2aWRlby93ZWJtJ1xuICBdLmluY2x1ZGVzKGZpbGVUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iJztcbiAgY29uc3Qgcm9sZUFybiA9IFN0cmluZyhDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LnJvbGVBcm4nKSB8fCAnJyk7XG4gIGNvbnN0IGJ1Y2tldCA9IHMzR2V0QnVja2V0KCkgfHwgQ29uZmlnLmdldCgnYXdzLnMzLkJ1Y2tldCcpO1xuICBjb25zdCB2aWRlb0lkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXkgfHwgJycpKTtcbiAgY29uc3QgdXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3Qgc291cmNlS2V5ID0gU3RyaW5nKHZpZGVvPy5zb3VyY2VLZXkgfHwgdmlkZW8/LnVwbG9hZEtleSB8fCAnJyk7XG5cbiAgaWYoIXJvbGVBcm4gfHwgIWJ1Y2tldCB8fCAhdmlkZW9JZCB8fCAhdXNlcklkIHx8ICFzb3VyY2VLZXkpIHtcbiAgICBpZih2aWRlb0lkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHByb2Nlc3NpbmdFcnJvcjogW1xuICAgICAgICAgICFyb2xlQXJuID8gJ21pc3NpbmdfbWVkaWFjb252ZXJ0X3JvbGVfYXJuJyA6ICcnLFxuICAgICAgICAgICFidWNrZXQgPyAnbWlzc2luZ19zM19idWNrZXQnIDogJycsXG4gICAgICAgICAgIXVzZXJJZCA/ICdtaXNzaW5nX3VzZXJfaWQnIDogJycsXG4gICAgICAgICAgIXNvdXJjZUtleSA/ICdtaXNzaW5nX3NvdXJjZV9rZXknIDogJydcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLCcpLFxuICAgICAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICAgICAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQoKTtcbiAgICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoZW5kcG9pbnQpO1xuICAgIGNvbnN0IHF1ZXVlID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucXVldWVBcm4nKSB8fCAnJyk7XG4gICAgY29uc3Qgb3V0cHV0RGVzdGluYXRpb24gPSBgczM6Ly8ke2J1Y2tldH0vdXNlcnMvJHt1c2VySWR9LyR7VklERU9fUExBWUJBQ0tfRElSfS9gO1xuICAgIGNvbnN0IGpvYiA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVKb2JDb21tYW5kKHtcbiAgICAgIC4uLihxdWV1ZSA/IHtRdWV1ZTogcXVldWV9IDoge30pLFxuICAgICAgUm9sZTogcm9sZUFybixcbiAgICAgIFNldHRpbmdzOiB7XG4gICAgICAgIElucHV0czogW3tcbiAgICAgICAgICBBdWRpb1NlbGVjdG9yczoge1xuICAgICAgICAgICAgJ0F1ZGlvIFNlbGVjdG9yIDEnOiB7XG4gICAgICAgICAgICAgIERlZmF1bHRTZWxlY3Rpb246ICdERUZBVUxUJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgRmlsZUlucHV0OiBgczM6Ly8ke2J1Y2tldH0vJHtzb3VyY2VLZXl9YCxcbiAgICAgICAgICBUaW1lY29kZVNvdXJjZTogJ1pFUk9CQVNFRCcsXG4gICAgICAgICAgVmlkZW9TZWxlY3Rvcjoge1xuICAgICAgICAgICAgUm90YXRlOiAnQVVUTydcbiAgICAgICAgICB9XG4gICAgICAgIH1dLFxuICAgICAgICBPdXRwdXRHcm91cHM6IFt7XG4gICAgICAgICAgTmFtZTogJ01QNCcsXG4gICAgICAgICAgT3V0cHV0R3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgRmlsZUdyb3VwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgRGVzdGluYXRpb246IG91dHB1dERlc3RpbmF0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVHlwZTogJ0ZJTEVfR1JPVVBfU0VUVElOR1MnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBPdXRwdXRzOiBbe1xuICAgICAgICAgICAgQXVkaW9EZXNjcmlwdGlvbnM6IFt7XG4gICAgICAgICAgICAgIEF1ZGlvU291cmNlTmFtZTogJ0F1ZGlvIFNlbGVjdG9yIDEnLFxuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQWFjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgIEJpdHJhdGU6IDEyODAwMCxcbiAgICAgICAgICAgICAgICAgIENvZGluZ01vZGU6ICdDT0RJTkdfTU9ERV8yXzAnLFxuICAgICAgICAgICAgICAgICAgU2FtcGxlUmF0ZTogNDgwMDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvZGVjOiAnQUFDJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIENvbnRhaW5lclNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIENvbnRhaW5lcjogJ01QNCcsXG4gICAgICAgICAgICAgIE1wNFNldHRpbmdzOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFZpZGVvRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgQ29kZWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIENvZGVjOiAnSF8yNjQnLFxuICAgICAgICAgICAgICAgIEgyNjRTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgTWF4Qml0cmF0ZTogTnVtYmVyKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQubWF4Qml0cmF0ZScsIDUwMDAwMDApKSxcbiAgICAgICAgICAgICAgICAgIFJhdGVDb250cm9sTW9kZTogJ1FWQlInLFxuICAgICAgICAgICAgICAgICAgU2NlbmVDaGFuZ2VEZXRlY3Q6ICdUUkFOU0lUSU9OX0RFVEVDVElPTicsXG4gICAgICAgICAgICAgICAgICBRdWFsaXR5VHVuaW5nTGV2ZWw6ICdTSU5HTEVfUEFTUydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIFVzZXJNZXRhZGF0YToge1xuICAgICAgICBwbGF5YmFja0tleTogZ2V0VmlkZW9QbGF5YmFja0tleSh1c2VySWQsIHZpZGVvSWQpLFxuICAgICAgICB1c2VySWQsXG4gICAgICAgIHZpZGVvSWRcbiAgICAgIH1cbiAgICB9IGFzIGFueSkpO1xuXG4gICAgY29uc3Qgam9iSWQgPSBTdHJpbmcoam9iPy5Kb2I/LklkIHx8ICcnKTtcblxuICAgIGlmKGpvYklkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbWVkaWFDb252ZXJ0Sm9iSWQ6IGpvYklkLFxuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogJ3ZpZGVvL21wNCcsXG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2JJZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdtZWRpYWNvbnZlcnRfam9iX2ZhaWxlZCcsXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7c291cmNlS2V5LCB1c2VySWQsIHZpZGVvSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGxldGVWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAge1xuICAgIGhsc0tleSA9ICcnLFxuICAgIHBsYXliYWNrRmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBwbGF5YmFja0tleSA9ICcnLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMgPSAncmVhZHknLFxuICAgIHN0cmVhbVR5cGUgPSAncHJvZ3Jlc3NpdmUnXG4gIH06IHtcbiAgICBobHNLZXk/OiBzdHJpbmc7XG4gICAgcGxheWJhY2tGaWxlVHlwZT86IHN0cmluZztcbiAgICBwbGF5YmFja0tleT86IHN0cmluZztcbiAgICBwcm9jZXNzaW5nU3RhdHVzPzogc3RyaW5nO1xuICAgIHN0cmVhbVR5cGU/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWaWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQpO1xuICBjb25zdCBmb3JtYXRQbGF5YmFja0tleSA9IHBsYXliYWNrS2V5IHx8IGdldFZpZGVvUGxheWJhY2tLZXkoU3RyaW5nKGN1cnJlbnRWaWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IHNvdXJjZURlbGV0ZWQgPSBwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknXG4gICAgPyBhd2FpdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdChjb250ZXh0LCB7XG4gICAgICAuLi5jdXJyZW50VmlkZW8sXG4gICAgICBwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXlcbiAgICB9IGFzIFZpZGVvVHlwZSlcbiAgICA6IGZhbHNlO1xuICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAuLi4oaGxzS2V5ID8ge2hsc0tleX0gOiB7fSksXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICAuLi4oZm9ybWF0UGxheWJhY2tLZXkgPyB7cGxheWJhY2tLZXk6IGZvcm1hdFBsYXliYWNrS2V5fSA6IHt9KSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIC4uLihzb3VyY2VEZWxldGVkID8ge3NvdXJjZUtleTogJycsIHVwbG9hZEtleTogJyd9IDoge30pLFxuICAgIHN0cmVhbVR5cGVcbiAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKTtcblxuICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgYXdhaXQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFZpZGVvO1xufTtcblxuZXhwb3J0IGNvbnN0IGZhaWxWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGltaXQ6IG51bWJlciA9IDEwXG4pOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNhZmVMaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihsaW1pdCB8fCAxMCksIDUwKSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHYgSU4gdmlkZW9zXG4gICAgICBGSUxURVIgdi51cGxvYWRTdGF0dXMgPT0gXCJ1cGxvYWRlZFwiXG4gICAgICBGSUxURVIgdi5wcm9jZXNzaW5nU3RhdHVzICE9IFwicmVhZHlcIlxuICAgICAgRklMVEVSIHYuZmlsZVR5cGUgIT0gXCJ2aWRlby9tcDRcIlxuICAgICAgRklMVEVSICFIQVModiwgXCJtZWRpYUNvbnZlcnRKb2JJZFwiKSB8fCB2Lm1lZGlhQ29udmVydEpvYklkID09IFwiXCJcbiAgICAgIFNPUlQgdi5hZGRlZCBERVNDXG4gICAgICBMSU1JVCAke3NhZmVMaW1pdH1cbiAgICAgIFJFVFVSTiB2XG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBWaWRlb1R5cGVbXSk7XG4gICAgY29uc3Qgam9iSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IHZpZGVvIG9mIGxpc3QpIHtcbiAgICAgIGNvbnN0IGpvYklkID0gYXdhaXQgY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2IoY29udGV4dCwgdmlkZW8pO1xuXG4gICAgICBpZihqb2JJZCkge1xuICAgICAgICBqb2JJZHMucHVzaChqb2JJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkcztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwVmlkZW9VcmwgPSAoe1xuICBidWNrZXQsXG4gIGRpcmVjdG9yeSA9ICd2aWRlb3MnLFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdmlkZW9JZFxufTogVmlkZW9VcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgdmlkZW9OYW1lID0gZ2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSk7XG4gIGNvbnN0IHZpZGVvVXJsID0gQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YDtcblxuICBpZih0eXBlID09PSAnYXBwcycpIHtcbiAgICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG4gIH1cblxuICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHt0eXBlSWR9LyR7ZGlyZWN0b3J5fS8ke3ZpZGVvTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvVXJsID0gYXN5bmMgKHtcbiAgYnVja2V0LFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpbWFnZURpciA9ICd2aWRlb3MnLFxuICB2aWRlb0RpciA9ICd2aWRlb3MnLFxuICB2aWRlb0lkLFxuICB0eXBlLFxuICB0eXBlSWQsXG4gIHVybFR5cGUgPSAncHVibGljJ1xufTogYW55KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYoIXZpZGVvSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBrZXlEaXIgPSB2aWRlb0RpciB8fCBpbWFnZURpciB8fCAndmlkZW9zJztcbiAgY29uc3QgdmlkZW9LZXkgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtrZXlEaXJ9LyR7Z2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSl9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICAgICAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgY2FzZSAnZGV2Jzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZGV2LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS8ke3ZpZGVvS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb1NpZ25lZEtleVVybCA9IGFzeW5jIChrZXk6IHN0cmluZyA9ICcnLCBidWNrZXQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB2aWRlb0tleSA9IFN0cmluZyhrZXkgfHwgJycpLnRyaW0oKTtcblxuICBpZighdmlkZW9LZXkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZWZhdWx0QnVja2V0ID0gQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ3ZpZGVvL21wNCcsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBjb25zdCB2aWRlb09iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgIEJvZHk6IGJ1ZmZlcixcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCBmaWxlVHlwZSwgJ3ZpZGVvcycpXG4gIH07XG5cbiAgYXdhaXQgczNQdXQodmlkZW9PYmopO1xuXG4gIHJldHVybiB7XG4gICAgZmlsZVNpemU6IGJ1ZmZlci5sZW5ndGgsXG4gICAgZmlsZVR5cGUsXG4gICAgdmlkZW9JZFxuICB9IGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlICYge2ZpbGVOYW1lPzogc3RyaW5nOyBmaWxlU2l6ZT86IG51bWJlcjsgcGFydENvdW50PzogbnVtYmVyfSxcbiAgcGFydENvdW50OiBudW1iZXIgPSAxXG4pOiBQcm9taXNlPFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZmlsZVNpemUsXG4gICAgZmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcHJpdmFjeSxcbiAgICB0aHVtYkJhc2U2NCA9ICcnLFxuICAgIHRodW1iRmlsZVR5cGUgPSAnaW1hZ2UvanBlZycsXG4gICAgdHlwZSA9ICd2aWRlbycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpIHx8IGNyZWF0ZUhhc2goYHZpZGVvLSR7c2Vzc2lvbklkfS0ke0RhdGUubm93KCl9LSR7U3RyaW5nKHZpZGVvPy5maWxlTmFtZSB8fCAnJyl9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBrZXkgPSBnZXRWaWRlb1VwbG9hZEtleShzZXNzaW9uSWQsIGZvcm1hdFZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3Qgc2FmZVBhcnRDb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihwYXJ0Q291bnQgfHwgdmlkZW8/LnBhcnRDb3VudCB8fCAxKSwgMTAwMDApKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwbG9hZCA9IGF3YWl0IHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIEtleToga2V5LFxuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgaXRlbUlkOiBmb3JtYXRJdGVtSWQgfHwgJycsXG4gICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSB8fCAnJyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB1cGxvYWRJZCA9IFN0cmluZyh1cGxvYWQ/LlVwbG9hZElkIHx8ICcnKTtcblxuICAgIGlmKCF1cGxvYWRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHZpZGVvIHVwbG9hZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGhhc1RodW1iID0gYXdhaXQgc2F2ZVZpZGVvVGh1bWJuYWlsKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQsIHRodW1iQmFzZTY0LCB0aHVtYkZpbGVUeXBlKTtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBmaWxlU2l6ZSxcbiAgICAgIGZpbGVUeXBlLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncGVuZGluZ191cGxvYWQnLFxuICAgICAgc291cmNlS2V5OiBrZXksXG4gICAgICAuLi4oaGFzVGh1bWIgPyB7dGh1bWJGaWxlVHlwZX0gOiB7fSksXG4gICAgICB0eXBlLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB1cGxvYWRLZXk6IGtleSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGluZycsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuICAgIGNvbnN0IG5ld1ZpZGVvID0gYXdhaXQgYWRkSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBpbnNlcnQpO1xuXG4gICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICBhd2FpdCBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0TnVtYmVycyA9IEFycmF5LmZyb20oe2xlbmd0aDogc2FmZVBhcnRDb3VudH0sIChfdmFsdWUsIGluZGV4KSA9PiBpbmRleCArIDEpO1xuICAgIGNvbnN0IHBhcnRVcmxzID0gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIHVwbG9hZElkLCBwYXJ0TnVtYmVycyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0OiBzM0dldEJ1Y2tldCgpLFxuICAgICAga2V5LFxuICAgICAgcGFydFNpemU6IERFRkFVTFRfVklERU9fVVBMT0FEX1BBUlRfU0laRSxcbiAgICAgIHBhcnRVcmxzLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB2aWRlbzogbmV3VmlkZW8sXG4gICAgICB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkXG4gICAgfTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1VwbG9hZFBhcnRVcmxbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvVXBsb2FkRG9jKGNvbnRleHQsIHZpZGVvSWQpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIGZvcm1hdFVwbG9hZElkLCBwYXJ0TnVtYmVycy5tYXAoKHBhcnROdW1iZXIpID0+IE51bWJlcihwYXJ0TnVtYmVyKSkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9VcGxvYWRQYXJ0VXJsW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnRzOiBWaWRlb1VwbG9hZFBhcnRJbnB1dFtdID0gW11cbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCwgdmlkZW8/LmZpbGVUeXBlKSk7XG4gICAgY29uc3QgdXBsb2FkUGFydHMgPSBwYXJ0c1xuICAgICAgLm1hcCgocGFydCkgPT4gKHtcbiAgICAgICAgRVRhZzogU3RyaW5nKHBhcnQ/LmV0YWcgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgUGFydE51bWJlcjogTnVtYmVyKHBhcnQ/LnBhcnROdW1iZXIgfHwgMClcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydC5FVGFnICYmIHBhcnQuUGFydE51bWJlciA+IDApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5QYXJ0TnVtYmVyIC0gYi5QYXJ0TnVtYmVyKTtcblxuICAgIGlmKCFrZXkgfHwgIWZvcm1hdFVwbG9hZElkIHx8ICF1cGxvYWRQYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB2aWRlbyB1cGxvYWQgZGF0YS4nKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIEtleToga2V5LFxuICAgICAgTXVsdGlwYXJ0VXBsb2FkOiB7XG4gICAgICAgIFBhcnRzOiB1cGxvYWRQYXJ0c1xuICAgICAgfSxcbiAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlZFZpZGVvID0gYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIC4uLihzaG91bGRUcmFuc2NvZGVWaWRlbyh2aWRlbylcbiAgICAgICAgPyB7cHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCd9XG4gICAgICAgIDoge1xuICAgICAgICAgIHBsYXliYWNrRmlsZVR5cGU6IHZpZGVvPy5maWxlVHlwZSB8fCAndmlkZW8vbXA0JyxcbiAgICAgICAgICBwbGF5YmFja0tleToga2V5LFxuICAgICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdyZWFkeScsXG4gICAgICAgICAgc3RyZWFtVHlwZTogJ3Byb2dyZXNzaXZlJ1xuICAgICAgICB9KSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGVkJ1xuICAgIH0pO1xuXG4gICAgaWYoc2hvdWxkVHJhbnNjb2RlVmlkZW8odXBkYXRlZFZpZGVvKSkge1xuICAgICAgdm9pZCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgcGFyc2VJZCh2aWRlb0lkKSwgdmlkZW8/LmZpbGVUeXBlKSk7XG5cbiAgICBpZihrZXkgJiYgZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIGF3YWl0IHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgICBVcGxvYWRJZDogZm9ybWF0VXBsb2FkSWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgcGFyc2VJZCh2aWRlb0lkKSwge1xuICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICB1cGxvYWRTdGF0dXM6ICdhYm9ydGVkJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt2aWRlb0lkLCBkZXNjcmlwdGlvbiwgYnVmZmVyLCBmaWxlVHlwZSwgcHJpdmFjeSwgdHlwZSA9ICd2aWRlbycsIHByb3ZpZGVyLCBleHRlcm5hbElkLCBleHRlcm5hbFVybH0gPSB2aWRlbztcblxuICBpZih0eXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIHNhdmVWaWRlbyhjb250ZXh0LCB2aWRlb0lkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHNhdmVkOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgICAuLi5zYXZlZCxcbiAgICAgICAgX2tleTogdmlkZW9JZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICBwcml2YWN5LFxuICAgICAgICB0eXBlLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSBhcyBWaWRlb1R5cGU7XG5cbiAgICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRWaWRlb0VkZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlKTogUHJvbWlzZTxvYmplY3Q+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGl0ZW1JZCwgaXRlbVR5cGV9ID0gdmlkZW9FZGdlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNNZWRpYS12aWRlby0ke3ZpZGVvSWR9LSR7aXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgaXRlbURvY0lkID0gZ2V0RG9jSWQoZm9ybWF0SXRlbVR5cGUsIHtfa2V5OiBmb3JtYXRJdGVtSWR9KTtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gIGNvbnN0IGZpbGVEb2NJZCA9IGB2aWRlb3MvJHtmb3JtYXRWaWRlb0lkfWA7XG5cbiAgY29uc3QgZWRnZTogVmlkZW9FZGdlVHlwZSA9IHtcbiAgICBfZnJvbTogaXRlbURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZpbGVEb2NJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGl0ZW1UeXBlLFxuICAgIHR5cGU6ICd2aWRlbydcbiAgfSBhcyBWaWRlb0VkZ2VUeXBlO1xuXG4gIGlmKGl0ZW1Eb2NJZCkge1xuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IHZpZGVvQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZXh0ZXJuYWxJZCxcbiAgICBleHRlcm5hbFVybCxcbiAgICBmaWxlVHlwZSxcbiAgICBobHNLZXksXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIHBsYXliYWNrRmlsZVR5cGUsXG4gICAgcGxheWJhY2tLZXksXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyxcbiAgICBwcml2YWN5LFxuICAgIHByb3ZpZGVyLFxuICAgIHN0cmVhbVR5cGUsXG4gICAgdHlwZSxcbiAgICB1cGxvYWRTdGF0dXMsXG4gICAgdXJsID0gJycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG5cbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHZpZGVvSWQgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcgJiYgKGV4dGVybmFsSWQgfHwgZXh0ZXJuYWxVcmwpKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiBmb3JtYXRWaWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC50aGVuKChuZXdWaWRlbzogVmlkZW9UeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICByZXR1cm4gYWRkVmlkZW9FZGdlKGNvbnRleHQsIHZpZGVvRWRnZSkudGhlbigoKSA9PiBuZXdWaWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgaWYoYmFzZTY0IHx8IHZpZGVvQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gdmlkZW9CdWZmZXIgYXMgQnVmZmVyO1xuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZmlsZVR5cGU6IHVwZGF0ZWRGaWxlVHlwZSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICByZXR1cm4gYWRkVmlkZW8oY29udGV4dCwgey4uLnZQYXJhbXMsIGRlc2NyaXB0aW9uLCBwcml2YWN5fSwgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih1cmwgIT09ICcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTUFHRV9SRVFVRVNUKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJ1ZmZlcigpKVxuICAgICAgLnRoZW4oKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHZQYXJhbXM6IFZpZGVvVHlwZSA9IHtidWZmZXIsIGRlc2NyaXB0aW9uLCBmaWxlVHlwZTogY29udGVudFR5cGUsIHByaXZhY3ksIHVzZXJJZDogc2Vzc2lvbklkLCB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkfSBhcyBWaWRlb1R5cGU7XG4gICAgICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB2UGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHZpZGVvSWQgIT09ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAuLi4oaGxzS2V5ICE9PSB1bmRlZmluZWQgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0ZpbGVUeXBlICE9PSB1bmRlZmluZWQgPyB7cGxheWJhY2tGaWxlVHlwZX0gOiB7fSksXG4gICAgICAuLi4ocGxheWJhY2tLZXkgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0tleX0gOiB7fSksXG4gICAgICAuLi4ocHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkID8ge3Byb2Nlc3NpbmdTdGF0dXN9IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5fSA6IHt9KSxcbiAgICAgIC4uLihzdHJlYW1UeXBlICE9PSB1bmRlZmluZWQgPyB7c3RyZWFtVHlwZX0gOiB7fSksXG4gICAgICAuLi4odXBsb2FkU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7dXBsb2FkU3RhdHVzfSA6IHt9KVxuICAgIH07XG4gICAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwgdXBkYXRlKVxuICAgICAgLnRoZW4oKHVwZGF0ZWRWaWRlbykgPT4ge1xuICAgICAgICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgICAgICAgdm9pZCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVWaWRlbyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW8nO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZGVsZXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBjYXNjYWRlOiBbRURHRVMuSEFTX01FRElBLCBFREdFUy5IQVNfUkVBQ1RJT05dLFxuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZih2aWRlbykge1xuICAgICAgY29uc3Qge19rZXk6IHZLZXksIGZpbGVUeXBlLCBobHNLZXksIHBsYXliYWNrS2V5LCBzb3VyY2VLZXksIHRodW1iRmlsZVR5cGUsIHVwbG9hZEtleX0gPSB2aWRlbztcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgIHNvdXJjZUtleSxcbiAgICAgICAgdXBsb2FkS2V5LFxuICAgICAgICBwbGF5YmFja0tleSxcbiAgICAgICAgaGxzS2V5LFxuICAgICAgICBgdXNlcnMvJHtzZXNzaW9uSWR9L3ZpZGVvcy8ke3ZLZXl9Lm1wNGAsXG4gICAgICAgIGZpbGVUeXBlID8gZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2S2V5LCBmaWxlVHlwZSwgJ3ZpZGVvcycpIDogJycsXG4gICAgICAgIHRodW1iRmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIHRodW1iRmlsZVR5cGUsICd2aWRlby10aHVtYnMnKSA6ICcnXG4gICAgICBdXG4gICAgICAgIC5tYXAoKGtleSkgPT4gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5maWx0ZXIoKGtleSwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihrZXkpID09PSBpbmRleCk7XG4gICAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgT2JqZWN0czoga2V5cy5tYXAoKEtleSkgPT4gKHtLZXl9KSksXG4gICAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IHZpZGVvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIkNyZWF0ZUpvYkNvbW1hbmQiLCJEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQiLCJNZWRpYUNvbnZlcnRDbGllbnQiLCJnZXQiLCJodHRwR2V0IiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsImdldENvbm5lY3Rpb25zQnlVc2VyIiwid3NDbGllbnQiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZFJlYWN0aW9uQ291bnRRdWVyeSIsImJ1aWxkVGFnc1F1ZXJ5IiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInVzZURiIiwiZ2V0QXdzQ3JlZGVudGlhbHMiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkIiwiczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCIsInMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNEZWxldGUiLCJzM0RlbGV0ZUxpc3QiLCJzM0dldEJ1Y2tldCIsInMzR2V0U2lnbmVkVXJsIiwiczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsIiwiczNQdXQiLCJoYXNTdWJzY3JpcHRpb25Ub0l0ZW0iLCJldmVudENhdGVnb3J5IiwiaGFzTWVkaWFDb2xsZWN0aW9uIiwiSEFTX01FRElBIiwiREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFIiwiVklERU9fUExBWUJBQ0tfRElSIiwibWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJnZXRNZWRpYUNvbnZlcnRDbGllbnQiLCJlbmRwb2ludCIsImNyZWRlbnRpYWxzIiwicmVnaW9uIiwiZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJjbGllbnQiLCJlbmRwb2ludHMiLCJzZW5kIiwiTWF4UmVzdWx0cyIsIkVuZHBvaW50cyIsIlVybCIsImdldFZpZGVvTWVkaWFJdGVtRG9jSWRzIiwiaXRlbUlkIiwicGFyc2VkRG9jSWQiLCJpdGVtS2V5IiwiVVNFUlMiLCJQRVJTT05BUyIsIm5vcm1hbGl6ZVZpZGVvUHJpdmFjeSIsInByaXZhY3kiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3VmlkZW8iLCJ2aWRlbyIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJyZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MiLCJjb250ZXh0IiwibGlzdCIsInNlc3Npb25Vc2VySWQiLCJvd25lclVzZXJJZCIsIm1lZGlhSXRlbUtleSIsIl9tZWRpYUl0ZW1LZXkiLCJtZWRpYUl0ZW1UeXBlIiwiX21lZGlhSXRlbVR5cGUiLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsInBhcnNlVmlkZW9PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsInR5cGUiLCJsaW1pdCIsImdldFZpZGVvT3B0aW9uYWwiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJpbmNsdWRlcyIsInJlYWN0aW9uUXVlcnkiLCJyZXBsYWNlIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwidGFnc1F1ZXJ5IiwiZ2V0VmlkZW9zQnlVc2VyIiwiYWN0aW9uIiwiZm9ybWF0VXNlcklkIiwiY3VzdG9tUXVlcmllcyIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21PYmplY3RzIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldFZpZGVvQ291bnRCeUl0ZW0iLCJkYXRhYmFzZU5hbWUiLCJpdGVtRG9jSWRzIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsImNvdW50IiwiZ2V0VmlkZW9zQnlJdGVtIiwic2Vzc2lvbiIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiam9pbiIsImxlbmd0aCIsImFsbCIsImZpbHRlciIsImdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwic2Vzc2lvbklkIiwiZm9ybWF0U2Vzc2lvbklkIiwiZm9ybWF0UmVhY3Rpb25zIiwibWFwIiwicmVhY3Rpb25OYW1lIiwiZmlsdGVyQnkiLCJKU09OIiwic3RyaW5naWZ5IiwicGFyYW1zIiwiZ2V0VmlkZW8iLCJ2aWRlb0lkIiwiZm9ybWF0VmlkZW9JZCIsIl9rZXkiLCJnZXRQYXRoVXNlclZpZGVvcyIsInZpZGVvVHlwZSIsImRpciIsImZpbGVuYW1lIiwiZ2V0VmlkZW9GaWxlbmFtZSIsImdldFZpZGVvVXBsb2FkS2V5IiwiZmlsZVR5cGUiLCJzYXZlVmlkZW9UaHVtYm5haWwiLCJ0aHVtYkJhc2U2NCIsInRodW1iRmlsZVR5cGUiLCJmb3JtYXRCYXNlNjQiLCJzdWJzdHIiLCJpbmRleE9mIiwiYnVmZmVyIiwiQnVmZmVyIiwiQm9keSIsIkJ1Y2tldCIsIkNvbnRlbnRUeXBlIiwiS2V5IiwiZ2V0VmlkZW9VcGxvYWREb2MiLCJFcnJvciIsIklOVkFMSURfQVVUSEVOVElDQVRJT04iLCJnZXRWaWRlb1BhcnRVcmxzIiwia2V5IiwidXBsb2FkSWQiLCJwYXJ0TnVtYmVycyIsIlByb21pc2UiLCJwYXJ0TnVtYmVyIiwidXJsIiwiUGFydE51bWJlciIsIlVwbG9hZElkIiwiZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlIiwiY29ubmVjdGlvbnMiLCJjb25uZWN0aW9uSWRzIiwiY29ubmVjdGlvbiIsImNvbm5lY3Rpb25JZCIsInNvY2tldElkIiwiQm9vbGVhbiIsImluZGV4IiwiZGF0YSIsImdldFZpZGVvUGxheWJhY2tLZXkiLCJkZWxldGVWaWRlb1NvdXJjZU9iamVjdCIsInNvdXJjZUtleSIsInVwbG9hZEtleSIsInBsYXliYWNrS2V5Iiwic2hvdWxkVHJhbnNjb2RlVmlkZW8iLCJjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiIsInJvbGVBcm4iLCJidWNrZXQiLCJtb2RpZmllZCIsIkRhdGUiLCJub3ciLCJwcm9jZXNzaW5nRXJyb3IiLCJwcm9jZXNzaW5nU3RhdHVzIiwicXVldWUiLCJvdXRwdXREZXN0aW5hdGlvbiIsImpvYiIsIlF1ZXVlIiwiUm9sZSIsIlNldHRpbmdzIiwiSW5wdXRzIiwiQXVkaW9TZWxlY3RvcnMiLCJEZWZhdWx0U2VsZWN0aW9uIiwiRmlsZUlucHV0IiwiVGltZWNvZGVTb3VyY2UiLCJWaWRlb1NlbGVjdG9yIiwiUm90YXRlIiwiT3V0cHV0R3JvdXBzIiwiTmFtZSIsIk91dHB1dEdyb3VwU2V0dGluZ3MiLCJGaWxlR3JvdXBTZXR0aW5ncyIsIkRlc3RpbmF0aW9uIiwiVHlwZSIsIk91dHB1dHMiLCJBdWRpb0Rlc2NyaXB0aW9ucyIsIkF1ZGlvU291cmNlTmFtZSIsIkNvZGVjU2V0dGluZ3MiLCJBYWNTZXR0aW5ncyIsIkJpdHJhdGUiLCJDb2RpbmdNb2RlIiwiU2FtcGxlUmF0ZSIsIkNvZGVjIiwiQ29udGFpbmVyU2V0dGluZ3MiLCJDb250YWluZXIiLCJNcDRTZXR0aW5ncyIsIlZpZGVvRGVzY3JpcHRpb24iLCJIMjY0U2V0dGluZ3MiLCJNYXhCaXRyYXRlIiwiTnVtYmVyIiwiUmF0ZUNvbnRyb2xNb2RlIiwiU2NlbmVDaGFuZ2VEZXRlY3QiLCJRdWFsaXR5VHVuaW5nTGV2ZWwiLCJVc2VyTWV0YWRhdGEiLCJqb2JJZCIsIkpvYiIsIklkIiwibWVkaWFDb252ZXJ0Sm9iSWQiLCJwbGF5YmFja0ZpbGVUeXBlIiwic3RyZWFtVHlwZSIsIm1lc3NhZ2UiLCJjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyIsImhsc0tleSIsImN1cnJlbnRWaWRlbyIsImZvcm1hdFBsYXliYWNrS2V5Iiwic291cmNlRGVsZXRlZCIsInVwZGF0ZWRWaWRlbyIsImZhaWxWaWRlb1Byb2Nlc3NpbmciLCJxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwiLCJzYWZlTGltaXQiLCJNYXRoIiwibWF4IiwibWluIiwiam9iSWRzIiwiZ2V0QXBwVmlkZW9VcmwiLCJkaXJlY3RvcnkiLCJpc1RodW1iIiwidHlwZUlkIiwiYnVja2V0TmFtZSIsInZpZGVvTmFtZSIsInZpZGVvVXJsIiwiZ2V0VmlkZW9VcmwiLCJpbWFnZURpciIsInZpZGVvRGlyIiwidXJsVHlwZSIsImtleURpciIsInZpZGVvS2V5IiwiZGVmYXVsdEJ1Y2tldCIsIkV4cGlyZXMiLCJnZXRWaWRlb1NpZ25lZEtleVVybCIsInNhdmVWaWRlbyIsInMzT3B0aW9ucyIsInZpZGVvT2JqIiwiZmlsZVNpemUiLCJjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRDb3VudCIsImRlc2NyaXB0aW9uIiwiaXRlbVR5cGUiLCJmaWxlTmFtZSIsImZvcm1hdEl0ZW1JZCIsImZvcm1hdEl0ZW1UeXBlIiwic2FmZVBhcnRDb3VudCIsInVwbG9hZCIsIk1ldGFkYXRhIiwiaGFzVGh1bWIiLCJpbnNlcnQiLCJhZGRlZCIsInVwbG9hZFN0YXR1cyIsIm5ld1ZpZGVvIiwidmlkZW9FZGdlIiwiYWRkVmlkZW9FZGdlIiwiQXJyYXkiLCJfdmFsdWUiLCJwYXJ0VXJscyIsInBhcnRTaXplIiwiZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyIsImZvcm1hdFVwbG9hZElkIiwiY29tcGxldGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRzIiwidXBsb2FkUGFydHMiLCJwYXJ0IiwiRVRhZyIsImV0YWciLCJhIiwiYiIsIk11bHRpcGFydFVwbG9hZCIsIlBhcnRzIiwiYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCIsImFkZFZpZGVvIiwicHJvdmlkZXIiLCJleHRlcm5hbElkIiwiZXh0ZXJuYWxVcmwiLCJzYXZlZCIsImVkZ2VJZCIsIml0ZW1Eb2NJZCIsImZpbGVEb2NJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZmlsZUVkZ2UiLCJkb2N1bWVudCIsInVwZGF0ZVZpZGVvIiwiYmFzZTY0IiwidmlkZW9CdWZmZXIiLCJ1cGRhdGVkRmlsZVR5cGUiLCJmaWxlVHlwZUZyb21CdWZmZXIiLCJtaW1lIiwidlBhcmFtcyIsImNvbnRlbnRUeXBlIiwicmVzIiwic3RhdHVzIiwiSU1BR0VfUkVRVUVTVCIsImhlYWRlcnMiLCJ1cGRhdGUiLCJ1bmRlZmluZWQiLCJkZWxldGVWaWRlbyIsImNhc2NhZGUiLCJIQVNfUkVBQ1RJT04iLCJvd25lcnNoaXAiLCJ2S2V5Iiwia2V5cyIsIkRlbGV0ZSIsIk9iamVjdHMiLCJRdWlldCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FDRUEsZ0JBQWdCLEVBQ2hCQyx3QkFBd0IsRUFDeEJDLGtCQUFrQixRQUNiLCtCQUErQjtBQUV0QyxTQUFRQyxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsTUFBTSxR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
|
|
@@ -65,4 +65,4 @@ const performDocumentTransformation = (doc)=>{
|
|
|
65
65
|
});
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2FyYW5nb0FkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0RvY3VtZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FyYW5nb1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgRG9jdW1lbnRJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgX2Zyb206IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9rZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX29sZFJldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfcmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF90bzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhZGRlZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RpZmllZDogei5udW1iZXIoKS5vcHRpb25hbCgpXG59KS5wYXNzdGhyb3VnaCgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEb2N1bWVudElucHV0ID0gKGRvYzogdW5rbm93bik6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gRG9jdW1lbnRJbnB1dFNjaGVtYS5wYXJzZShkb2MpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgRG9jdW1lbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZEVycm9ycyA9IGVycm9yLmlzc3Vlcy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpO1xuICAgICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZmllbGRFcnJvcnN9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RG9jdW1lbnRPdXRwdXQgPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4gZG9jO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEb2N1bWVudCA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uKGRvYyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEFyYW5nb1ZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IoYERvY3VtZW50IHBhcnNpbmcgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICB9XG59O1xuXG5jb25zdCBwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbiA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfaWQsXG4gICAgX2tleSxcbiAgICBhZGRlZCxcbiAgICBpZCxcbiAgICBtb2RpZmllZFxuICB9ID0gZG9jO1xuXG4gIHJldHVybiByZW1vdmVFbXB0eUtleXMoe1xuICAgIC4uLmRvYyxcbiAgICAuLi4oX2lkICYmIHtfaWQ6IHBhcnNlQXJhbmdvSWQoX2lkKX0pLFxuICAgIC4uLihfa2V5ICYmIHtfa2V5OiBwYXJzZUlkKF9rZXkpfSksXG4gICAgLi4uKGFkZGVkICE9PSB1bmRlZmluZWQgJiYge2FkZGVkOiBwYXJzZU51bShhZGRlZCwgMTMpfSksXG4gICAgLi4uKChfaWQgfHwgaWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQpfSksXG4gICAgLi4uKG1vZGlmaWVkICE9PSB1bmRlZmluZWQgJiYge21vZGlmaWVkOiBwYXJzZU51bShtb2RpZmllZCwgMTMpfSlcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJ6IiwicmVtb3ZlRW1wdHlLZXlzIiwiQXJhbmdvVmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiRG9jdW1lbnRJbnB1dFNjaGVtYSIsIm9iamVjdCIsIl9mcm9tIiwic3RyaW5nIiwib3B0aW9uYWwiLCJfaWQiLCJfa2V5IiwiX29sZFJldiIsIl9yZXYiLCJfdG8iLCJhZGRlZCIsIm51bWJlciIsImlkIiwibW9kaWZpZWQiLCJwYXNzdGhyb3VnaCIsInZhbGlkYXRlRG9jdW1lbnRJbnB1dCIsImRvYyIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0RG9jdW1lbnRPdXRwdXQiLCJwYXJzZURvY3VtZW50IiwicGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24iLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsYUFBYSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ3BFLFNBQVFDLENBQUMsUUFBTyxNQUFNO0FBR3RCLFNBQVFDLGVBQWUsUUFBTywyQkFBMkI7QUFFekQsT0FBTyxNQUFNQyw4QkFBOEJDOztJQUN6QyxZQUFZQyxPQUFlLEVBQUUsQUFBT0MsS0FBYyxDQUFFO1FBQ2xELEtBQUssQ0FBQ0QsZUFENEJDLFFBQUFBO1FBRWxDLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLE1BQU1DLHNCQUFzQlAsRUFBRVEsTUFBTSxDQUFDO0lBQ25DQyxPQUFPVCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDMUJDLEtBQUtaLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4QkUsTUFBTWIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3pCRyxTQUFTZCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDNUJJLE1BQU1mLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN6QkssS0FBS2hCLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4Qk0sT0FBT2pCLEVBQUVrQixNQUFNLEdBQUdQLFFBQVE7SUFDMUJRLElBQUluQixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDdkJTLFVBQVVwQixFQUFFa0IsTUFBTSxHQUFHUCxRQUFRO0FBQy9CLEdBQUdVLFdBQVc7QUFFZCxPQUFPLE1BQU1DLHdCQUF3QixDQUFDQztJQUNwQyxJQUFJO1FBQ0YsTUFBTUMsWUFBWWpCLG9CQUFvQmtCLEtBQUssQ0FBQ0Y7UUFDNUMsT0FBT0M7SUFDVCxFQUFFLE9BQU1FLE9BQU87UUFDYixJQUFHQSxpQkFBaUIxQixFQUFFMkIsUUFBUSxFQUFFO1lBQzlCLE1BQU1DLGNBQWNGLE1BQU1HLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLENBQUNDLElBQU0sR0FBR0EsRUFBRUMsSUFBSSxDQUFDQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUVGLEVBQUUzQixPQUFPLEVBQUUsRUFBRTZCLElBQUksQ0FBQztZQUN0RixNQUFNLElBQUkvQixzQkFBc0IsQ0FBQyw0QkFBNEIsRUFBRTBCLGFBQWE7UUFDOUU7UUFDQSxNQUFNRjtJQUNSO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTVEsdUJBQXVCLENBQUNYLE1BQW9DQSxJQUFJO0FBRTdFLE9BQU8sTUFBTVksZ0JBQWdCLENBQUNaO0lBQzVCLElBQUk7UUFDRixPQUFPYSw4QkFBOEJiO0lBQ3ZDLEVBQUUsT0FBTUcsT0FBTztRQUNiLElBQUdBLGlCQUFpQnhCLHVCQUF1QjtZQUN6QyxNQUFNd0I7UUFDUjtRQUNBLE1BQU0sSUFBSXhCLHNCQUFzQixDQUFDLHlCQUF5QixFQUFFd0IsaUJBQWlCdkIsUUFBUXVCLE1BQU10QixPQUFPLEdBQUcsaUJBQWlCO0lBQ3hIO0FBQ0YsRUFBRTtBQUVGLE1BQU1nQyxnQ0FBZ0MsQ0FBQ2I7SUFDckMsTUFBTSxFQUNKWCxHQUFHLEVBQ0hDLElBQUksRUFDSkksS0FBSyxFQUNMRSxFQUFFLEVBQ0ZDLFFBQVEsRUFDVCxHQUFHRztJQUVKLE9BQU90QixnQkFBZ0I7UUFDckIsR0FBR3NCLEdBQUc7UUFDTixHQUFJWCxPQUFPO1lBQUNBLEtBQUtkLGNBQWNjO1FBQUksQ0FBQztRQUNwQyxHQUFJQyxRQUFRO1lBQUNBLE1BQU1kLFFBQVFjO1FBQUssQ0FBQztRQUNqQyxHQUFJSSxVQUFVb0IsYUFBYTtZQUFDcEIsT0FBT3BCLFNBQVNvQixPQUFPO1FBQUcsQ0FBQztRQUN2RCxHQUFJLEFBQUNMLENBQUFBLE9BQU9PLEVBQUMsS0FBTTtZQUFDQSxJQUFJckIsY0FBY2MsT0FBT087UUFBRyxDQUFDO1FBQ2pELEdBQUlDLGFBQWFpQixhQUFhO1lBQUNqQixVQUFVdkIsU0FBU3VCLFVBQVU7UUFBRyxDQUFDO0lBQ2xFO0FBQ0YifQ==
|
|
@@ -97,4 +97,4 @@ const performContentTransformation = (content)=>{
|
|
|
97
97
|
};
|
|
98
98
|
export const parseContentFromDb = (content)=>performContentTransformation(content);
|
|
99
99
|
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2NvbnRlbnRBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtDb250ZW50SW5wdXRUeXBlLCBDb250ZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5pbXBvcnQge3JlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vdXRpbHMvYWRhcHRlclV0aWxzLmpzJztcbmltcG9ydCB7cGFyc2VEb2N1bWVudH0gZnJvbSAnLi9hcmFuZ29BZGFwdGVyLmpzJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbnRlbnRWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMgPSBbJ2VuJywgJ2VzJywgJ2ZyJywgJ2RlJywgJ3B0JywgJ2l0J10gYXMgY29uc3Q7XG5cbmNvbnN0IGNvbnRlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMsIHtcbiAgICBtZXNzYWdlOiAnTG9jYWxlIG11c3QgYmUgb25lIG9mOiBlbiwgZXMsIGZyLCBkZSwgcHQsIGl0J1xuICB9KSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZXJJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgY29udGVudElucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5OiB6LnN0cmluZygpLm1pbigxLCAnS2V5IGlzIHJlcXVpcmVkJykubWF4KDIwMCwgJ0tleSBtdXN0IGJlIGxlc3MgdGhhbiAyMDAgY2hhcmFjdGVycycpLFxuICBsb2NhbGU6IHouZW51bShTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTLCB7XG4gICAgbWVzc2FnZTogJ0xvY2FsZSBtdXN0IGJlIG9uZSBvZjogZW4sIGVzLCBmciwgZGUsIHB0LCBpdCdcbiAgfSkub3B0aW9uYWwoKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50ID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50U2NoZW1hLnBhcnNlKGNvbnRlbnQpIGFzIENvbnRlbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50SW5wdXQgPSAoY29udGVudDogQ29udGVudElucHV0VHlwZSk6IENvbnRlbnRJbnB1dFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50SW5wdXRTY2hlbWEucGFyc2UoY29udGVudCkgYXMgQ29udGVudElucHV0VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGQgPSBlcnJvci5pc3N1ZXNbMF0/LnBhdGguam9pbignLicpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmlzc3Vlc1swXT8ubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGNvbnRlbnRJZCxcbiAgICBpZCxcbiAgICBrZXksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnRUZXh0LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGNhdGVnb3J5LFxuICAgIGlzQWN0aXZlLFxuICAgIHVzZXJJZFxuICB9ID0gY29udGVudDtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHtcbiAgICAuLi5wYXJzZURvY3VtZW50KGNvbnRlbnQpLFxuICAgIC4uLigoX2tleSB8fCBjb250ZW50SWQpICYmIHtjb250ZW50SWQ6IHBhcnNlSWQoX2tleSB8fCBjb250ZW50SWQpfSksXG4gICAgLi4uKChfaWQgfHwgaWQgfHwgX2tleSB8fCBjb250ZW50SWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYGNvbnRlbnQvJHtfa2V5IHx8IGNvbnRlbnRJZH1gKX0pLFxuICAgIGtleTogcGFyc2VTdHJpbmcoa2V5LCAyMDApLFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50VGV4dCwgMTAwMDApLFxuICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7ZGVzY3JpcHRpb246IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApfSksXG4gICAgLi4uKGNhdGVnb3J5ICYmIHtjYXRlZ29yeTogcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCl9KSxcbiAgICAuLi4oaXNBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7aXNBY3RpdmV9KSxcbiAgICAuLi4odXNlcklkICYmIHt1c2VySWQ6IHBhcnNlSWQodXNlcklkKX0pXG4gIH07XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh0cmFuc2Zvcm1lZCkgYXMgQ29udGVudFR5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50RnJvbURiID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4gcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb250ZW50KTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwieiIsInJlbW92ZUVtcHR5S2V5cyIsInBhcnNlRG9jdW1lbnQiLCJDb250ZW50VmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUyIsImNvbnRlbnRTY2hlbWEiLCJvYmplY3QiLCJjb250ZW50SWQiLCJzdHJpbmciLCJvcHRpb25hbCIsImtleSIsIm1pbiIsIm1heCIsImxvY2FsZSIsImVudW0iLCJjb250ZW50IiwiZGVzY3JpcHRpb24iLCJjYXRlZ29yeSIsImlzQWN0aXZlIiwiYm9vbGVhbiIsInVzZXJJZCIsImNvbnRlbnRJbnB1dFNjaGVtYSIsInBhcnNlQ29udGVudCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImlzc3VlcyIsInBhdGgiLCJqb2luIiwicGFyc2VDb250ZW50SW5wdXQiLCJwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uIiwiX2lkIiwiX2tleSIsImlkIiwiY29udGVudFRleHQiLCJ0cmFuc2Zvcm1lZCIsInVuZGVmaW5lZCIsInBhcnNlQ29udGVudEZyb21EYiJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsYUFBYSxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDakYsU0FBUUMsQ0FBQyxRQUFPLE1BQU07QUFHdEIsU0FBUUMsZUFBZSxRQUFPLDJCQUEyQjtBQUN6RCxTQUFRQyxhQUFhLFFBQU8scUJBQXFCO0FBRWpELE9BQU8sTUFBTUMsK0JBQStCQzs7SUFDMUMsWUFBWUMsT0FBZSxFQUFFLEFBQU9DLEtBQWMsQ0FBRTtRQUNsRCxLQUFLLENBQUNELGVBRDRCQyxRQUFBQTtRQUVsQyxJQUFJLENBQUNDLElBQUksR0FBRztJQUNkO0FBQ0Y7QUFFQSxNQUFNQyw0QkFBNEI7SUFBQztJQUFNO0lBQU07SUFBTTtJQUFNO0lBQU07Q0FBSztBQUV0RSxNQUFNQyxnQkFBZ0JULEVBQUVVLE1BQU0sQ0FBQztJQUM3QkMsV0FBV1gsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0lBQzlCQyxLQUFLZCxFQUFFWSxNQUFNLEdBQUdHLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQkMsR0FBRyxDQUFDLEtBQUs7SUFDbkRDLFFBQVFqQixFQUFFa0IsSUFBSSxDQUFDViwyQkFBMkI7UUFDeENILFNBQVM7SUFDWDtJQUNBYyxTQUFTbkIsRUFBRVksTUFBTSxHQUFHRyxHQUFHLENBQUMsR0FBRyx1QkFBdUJDLEdBQUcsQ0FBQyxPQUFPO0lBQzdESSxhQUFhcEIsRUFBRVksTUFBTSxHQUFHSSxHQUFHLENBQUMsS0FBSyxnREFBZ0RILFFBQVE7SUFDekZRLFVBQVVyQixFQUFFWSxNQUFNLEdBQUdJLEdBQUcsQ0FBQyxLQUFLLDZDQUE2Q0gsUUFBUTtJQUNuRlMsVUFBVXRCLEVBQUV1QixPQUFPLEdBQUdWLFFBQVE7SUFDOUJXLFFBQVF4QixFQUFFWSxNQUFNLEdBQUdDLFFBQVE7QUFDN0I7QUFFQSxNQUFNWSxxQkFBcUJ6QixFQUFFVSxNQUFNLENBQUM7SUFDbENDLFdBQVdYLEVBQUVZLE1BQU0sR0FBR0MsUUFBUTtJQUM5QkMsS0FBS2QsRUFBRVksTUFBTSxHQUFHRyxHQUFHLENBQUMsR0FBRyxtQkFBbUJDLEdBQUcsQ0FBQyxLQUFLO0lBQ25EQyxRQUFRakIsRUFBRWtCLElBQUksQ0FBQ1YsMkJBQTJCO1FBQ3hDSCxTQUFTO0lBQ1gsR0FBR1EsUUFBUTtJQUNYTSxTQUFTbkIsRUFBRVksTUFBTSxHQUFHRyxHQUFHLENBQUMsR0FBRyx1QkFBdUJDLEdBQUcsQ0FBQyxPQUFPO0lBQzdESSxhQUFhcEIsRUFBRVksTUFBTSxHQUFHSSxHQUFHLENBQUMsS0FBSyxnREFBZ0RILFFBQVE7SUFDekZRLFVBQVVyQixFQUFFWSxNQUFNLEdBQUdJLEdBQUcsQ0FBQyxLQUFLLDZDQUE2Q0gsUUFBUTtJQUNuRlMsVUFBVXRCLEVBQUV1QixPQUFPLEdBQUdWLFFBQVE7QUFDaEM7QUFFQSxPQUFPLE1BQU1hLGVBQWUsQ0FBQ1A7SUFDM0IsSUFBSTtRQUNGLE9BQU9WLGNBQWNrQixLQUFLLENBQUNSO0lBQzdCLEVBQUUsT0FBTVMsT0FBTztRQUNiLElBQUdBLGlCQUFpQjVCLEVBQUU2QixRQUFRLEVBQUU7WUFDOUIsTUFBTXZCLFFBQVFzQixNQUFNRSxNQUFNLENBQUMsRUFBRSxFQUFFQyxLQUFLQyxLQUFLO1lBQ3pDLE1BQU0zQixVQUFVdUIsTUFBTUUsTUFBTSxDQUFDLEVBQUUsRUFBRXpCLFdBQVc7WUFDNUMsTUFBTSxJQUFJRix1QkFBdUJFLFNBQVNDO1FBQzVDO1FBQ0EsTUFBTXNCO0lBQ1I7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNSyxvQkFBb0IsQ0FBQ2Q7SUFDaEMsSUFBSTtRQUNGLE9BQU9NLG1CQUFtQkUsS0FBSyxDQUFDUjtJQUNsQyxFQUFFLE9BQU1TLE9BQU87UUFDYixJQUFHQSxpQkFBaUI1QixFQUFFNkIsUUFBUSxFQUFFO1lBQzlCLE1BQU12QixRQUFRc0IsTUFBTUUsTUFBTSxDQUFDLEVBQUUsRUFBRUMsS0FBS0MsS0FBSztZQUN6QyxNQUFNM0IsVUFBVXVCLE1BQU1FLE1BQU0sQ0FBQyxFQUFFLEVBQUV6QixXQUFXO1lBQzVDLE1BQU0sSUFBSUYsdUJBQXVCRSxTQUFTQztRQUM1QztRQUNBLE1BQU1zQjtJQUNSO0FBQ0YsRUFBRTtBQUVGLE1BQU1NLCtCQUErQixDQUFDZjtJQUNwQyxNQUFNLEVBQ0pnQixHQUFHLEVBQ0hDLElBQUksRUFDSnpCLFNBQVMsRUFDVDBCLEVBQUUsRUFDRnZCLEdBQUcsRUFDSEcsTUFBTSxFQUNORSxTQUFTbUIsV0FBVyxFQUNwQmxCLFdBQVcsRUFDWEMsUUFBUSxFQUNSQyxRQUFRLEVBQ1JFLE1BQU0sRUFDUCxHQUFHTDtJQUVKLE1BQU1vQixjQUFjO1FBQ2xCLEdBQUdyQyxjQUFjaUIsUUFBUTtRQUN6QixHQUFJLEFBQUNpQixDQUFBQSxRQUFRekIsU0FBUSxLQUFNO1lBQUNBLFdBQVdiLFFBQVFzQyxRQUFRekI7UUFBVSxDQUFDO1FBQ2xFLEdBQUksQUFBQ3dCLENBQUFBLE9BQU9FLE1BQU1ELFFBQVF6QixTQUFRLEtBQU07WUFBQzBCLElBQUl4QyxjQUFjc0MsT0FBT0UsTUFBTSxDQUFDLFFBQVEsRUFBRUQsUUFBUXpCLFdBQVc7UUFBQyxDQUFDO1FBQ3hHRyxLQUFLZixZQUFZZSxLQUFLO1FBQ3RCRztRQUNBRSxTQUFTcEIsWUFBWXVDLGFBQWE7UUFDbEMsR0FBSWxCLGVBQWU7WUFBQ0EsYUFBYXJCLFlBQVlxQixhQUFhO1FBQUksQ0FBQztRQUMvRCxHQUFJQyxZQUFZO1lBQUNBLFVBQVV0QixZQUFZc0IsVUFBVTtRQUFJLENBQUM7UUFDdEQsR0FBSUMsYUFBYWtCLGFBQWE7WUFBQ2xCO1FBQVEsQ0FBQztRQUN4QyxHQUFJRSxVQUFVO1lBQUNBLFFBQVExQixRQUFRMEI7UUFBTyxDQUFDO0lBQ3pDO0lBRUEsT0FBT3ZCLGdCQUFnQnNDO0FBQ3pCO0FBRUEsT0FBTyxNQUFNRSxxQkFBcUIsQ0FBQ3RCLFVBQXNDZSw2QkFBNkJmLFNBQVMifQ==
|