@nlabs/reaktor 1.7.0 → 1.9.0
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 +75 -0
- 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/conversations.js +1 -1
- package/lib/actions/crm.d.ts +7 -1
- package/lib/actions/crm.js +224 -17
- package/lib/actions/crud.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/groups.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/payments.js +1 -1
- package/lib/actions/personas.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 +14 -9
- package/lib/actions/s3.js +1 -1
- 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.d.ts +4 -1
- package/lib/actions/users.js +28 -7
- 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/imageAdapter.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/config.js +1 -1
- package/lib/constants/collections.d.ts +12 -0
- package/lib/constants/collections.js +13 -1
- package/lib/durableChat/conversations.d.ts +62 -0
- package/lib/durableChat/conversations.js +729 -0
- package/lib/durableChat/errors.d.ts +6 -0
- package/lib/durableChat/errors.js +11 -0
- package/lib/durableChat/events.d.ts +22 -0
- package/lib/durableChat/events.js +50 -0
- package/lib/durableChat/index.d.ts +8 -0
- package/lib/durableChat/index.js +10 -0
- package/lib/durableChat/membership.d.ts +24 -0
- package/lib/durableChat/membership.js +85 -0
- package/lib/durableChat/messageTypes.d.ts +76 -0
- package/lib/durableChat/messageTypes.js +3 -0
- package/lib/durableChat/messages.d.ts +16 -0
- package/lib/durableChat/messages.js +257 -0
- package/lib/durableChat/transaction.d.ts +10 -0
- package/lib/durableChat/transaction.js +53 -0
- package/lib/durableChat/types.d.ts +81 -0
- package/lib/durableChat/types.js +3 -0
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +4 -1
- package/lib/index.js +4 -2
- 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 +43 -11
- 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/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/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/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +5 -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 +5 -2
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.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 +9 -1
- package/lib/objectTypes/video.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 +41 -13
- 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/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.d.ts +1 -1
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.d.ts +1 -0
- 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.d.ts +20 -1
- package/lib/types/crm.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.d.ts +1 -0
- 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.d.ts +2 -0
- package/lib/utils/appContext.js +10 -0
- 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/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/googleTranslate.js +1 -1
- package/lib/utils/graphqlUtils.d.ts +1 -0
- 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/middlewareUtils.js +1 -1
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.d.ts +4 -0
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.js +2 -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 +19 -19
package/lib/actions/messages.js
CHANGED
|
@@ -258,4 +258,4 @@ export const cleanMessages = (databaseName)=>{
|
|
|
258
258
|
});
|
|
259
259
|
};
|
|
260
260
|
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvbWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge3BhcnNlTWVzc2FnZX0gZnJvbSAnLi4vYWRhcHRlcnMvbWVzc2FnZUFkYXB0ZXIuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9uQnlDb252ZXJzYXRpb259IGZyb20gJy4uL2xhbWJkYXMvYWN0aW9ucy93ZWJzb2NrZXRzLmpzJztcbmltcG9ydCB7d3NDbGllbnR9IGZyb20gJy4uL2xhbWJkYXMvdXRpbHMvd2Vic29ja2V0LmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7ZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCwgZ2V0Q29udmVyc2F0aW9uQnlJZH0gZnJvbSAnLi9jb252ZXJzYXRpb25zLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZ2V0TGlzdEJ5fSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hQnlJZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2dldFVzZXJEaXNwbGF5TmFtZX0gZnJvbSAnLi91c2Vycy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29udmVyc2F0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7TWVzc2FnZUlucHV0VHlwZSwgTWVzc2FnZVR5cGV9IGZyb20gJy4uL3R5cGVzL21lc3NhZ2VzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ21lc3NhZ2VzJztcblxuY29uc3QgZW5yaWNoTWVzc2FnZVVzZXIgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG1lc3NhZ2U6IE1lc3NhZ2VUeXBlLFxuICBiYXNlVXNlcj86IFVzZXJUeXBlIHwgbnVsbFxuKTogUHJvbWlzZTxVc2VyVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IG1lc3NhZ2VVc2VySWQgPSBwYXJzZUlkKFN0cmluZyhtZXNzYWdlPy51c2VySWQgfHwgYmFzZVVzZXI/LnVzZXJJZCB8fCBiYXNlVXNlcj8uX2tleSB8fCAnJykpO1xuXG4gIGlmKCFtZXNzYWdlVXNlcklkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB1c2VyID0gYmFzZVVzZXIgfHwgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuX2tleSA9PSAke21lc3NhZ2VVc2VySWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgY29uc3QgcmVzb2x2ZWRQZXJzb25hSWQgPSBwYXJzZUlkKFxuICAgIFN0cmluZyhcbiAgICAgIG1lc3NhZ2U/LnBlcnNvbmFJZFxuICAgICAgfHwgKG1lc3NhZ2VVc2VySWQgPT09IHNlc3Npb25Vc2VySWQgPyBzZXNzaW9uUGVyc29uYUlkIDogJycpXG4gICAgICB8fCB1c2VyPy5wZXJzb25hSWRcbiAgICAgIHx8ICcnXG4gICAgKVxuICApO1xuICBjb25zdCBwZXJzb25hID0gcmVzb2x2ZWRQZXJzb25hSWRcbiAgICA/IGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHJlc29sdmVkUGVyc29uYUlkKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnVzZXIsXG4gICAgaW1hZ2VVcmw6IFN0cmluZyh1c2VyPy5pbWFnZVVybCB8fCBwZXJzb25hPy5pbWFnZVVybCB8fCAnJyksXG4gICAgbmFtZTogU3RyaW5nKHBlcnNvbmE/Lm5hbWUgfHwgdXNlcj8ubmFtZSB8fCBnZXRVc2VyRGlzcGxheU5hbWUodXNlciB8fCB7fSBhcyBVc2VyVHlwZSkpLFxuICAgIHBlcnNvbmFJZDogU3RyaW5nKHJlc29sdmVkUGVyc29uYUlkIHx8IHVzZXI/LnBlcnNvbmFJZCB8fCAnJyksXG4gICAgdGh1bWJVcmw6IFN0cmluZyh1c2VyPy50aHVtYlVybCB8fCB1c2VyPy50aHVtYklkIHx8IHBlcnNvbmE/LnRodW1iVXJsIHx8ICcnKSxcbiAgICB1c2VySWQ6IG1lc3NhZ2VVc2VySWQsXG4gICAgdXNlcm5hbWU6IFN0cmluZyh1c2VyPy51c2VybmFtZSB8fCAnJylcbiAgfTtcbn07XG5cbmNvbnN0IHdpdGhNZXNzYWdlVXNlciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbWVzc2FnZTogTWVzc2FnZVR5cGUsXG4gIGJhc2VVc2VyPzogVXNlclR5cGUgfCBudWxsXG4pOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiAoe1xuICAuLi5tZXNzYWdlLFxuICB1c2VyOiBhd2FpdCBlbnJpY2hNZXNzYWdlVXNlcihjb250ZXh0LCBtZXNzYWdlLCBiYXNlVXNlcilcbn0pO1xuXG5jb25zdCB1cGRhdGVDb252ZXJzYXRpb25TdW1tYXJ5ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBtZXNzYWdlOiBNZXNzYWdlVHlwZVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBjb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoU3RyaW5nKG1lc3NhZ2U/LmNvbnZlcnNhdGlvbklkIHx8ICcnKSk7XG5cbiAgaWYoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gcGFyc2VTdHJpbmcoU3RyaW5nKG1lc3NhZ2U/LmNvbnRlbnQgfHwgJycpLCA2NDApO1xuICBjb25zdCBtb2RpZmllZCA9IE51bWJlcihtZXNzYWdlPy5tb2RpZmllZCB8fCBtZXNzYWdlPy5hZGRlZCB8fCBEYXRlLm5vdygpKTtcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICBjb250ZW50LFxuICAgIG1vZGlmaWVkXG4gIH07XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBVUERBVEUgJHtjb252ZXJzYXRpb25JZH1cbiAgICBXSVRIICR7c3VtbWFyeX1cbiAgICBJTiBjb252ZXJzYXRpb25zXG4gIGApO1xuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGdldENvbnZlcnNhdGlvbkJ5SWQoY29udGV4dCwgY29udmVyc2F0aW9uSWQpO1xuXG4gIGlmKCFjb252ZXJzYXRpb24pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uY29udmVyc2F0aW9uLFxuICAgIGNvbnRlbnQsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgbW9kaWZpZWRcbiAgfSBhcyBDb252ZXJzYXRpb25UeXBlO1xufTtcblxuY29uc3QgZW1pdFJlYWx0aW1lTWVzc2FnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlOiBNZXNzYWdlVHlwZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZighbWVzc2FnZT8uY29udmVyc2F0aW9uSWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCB1cGRhdGVDb252ZXJzYXRpb25TdW1tYXJ5KGNvbnRleHQsIG1lc3NhZ2UpO1xuXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgYWN0aW9uOiAnbWVzc2FnZS5jcmVhdGVkJyxcbiAgICBkYXRhOiB7XG4gICAgICAuLi4oY29udmVyc2F0aW9uID8ge2NvbnZlcnNhdGlvbn0gOiB7fSksXG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIC4uLihhd2FpdCB3aXRoTWVzc2FnZVVzZXIoY29udGV4dCwgbWVzc2FnZSkpXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBjb25uZWN0aW9uR3JvdXBzID0gYXdhaXQgZ2V0Q29ubmVjdGlvbkJ5Q29udmVyc2F0aW9uKGNvbnRleHQsIG1lc3NhZ2UuY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBjb25uZWN0aW9uSWRzID0gY29ubmVjdGlvbkdyb3Vwc1xuICAgIC5mbGF0TWFwKChncm91cCkgPT4gQXJyYXkuaXNBcnJheShncm91cCkgPyBncm91cCA6IFtdKVxuICAgIC5tYXAoKGNvbm5lY3Rpb25JZCkgPT4gcGFyc2VTdHJpbmcoY29ubmVjdGlvbklkLCAzMikpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGNvbm5lY3Rpb25JZCwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihjb25uZWN0aW9uSWQpID09PSBpbmRleCk7XG5cbiAgaWYoY29ubmVjdGlvbklkcy5sZW5ndGgpIHtcbiAgICBhd2FpdCB3c0NsaWVudC5zZW5kKGNvbm5lY3Rpb25JZHMsIHBheWxvYWQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZXMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywge2Zyb20sIHRvfSk6IFByb21pc2U8TWVzc2FnZVR5cGVbXT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgY29udmVyc2F0aW9uUXJ5ID0gYXFsYEZPUiBlIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBlLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfSAmJiBlLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gZWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoY29udmVyc2F0aW9uUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9ucykgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICAgIEZJTFRFUiBtLmNvbnZlcnNhdGlvbklkID09ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9XG4gICAgICAgICAgU09SVCBtLmFkZGVkIERFU0NcbiAgICAgICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgICAgICBTT1JUIG0uYWRkZWQgQVNDXG4gICAgICAgICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gbS51c2VySWRcbiAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICBSRVRVUk4gdVxuICAgICAgICAgIClcbiAgICAgICAgICBSRVRVUk4gTUVSR0UobSwge3VzZXJ9KVxuICAgICAgYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlcykgPT4gUHJvbWlzZS5hbGwobWVzc2FnZXMubWFwKChtZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4gd2l0aE1lc3NhZ2VVc2VyKGNvbnRleHQsIG1lc3NhZ2UsIG1lc3NhZ2U/LnVzZXIgYXMgVXNlclR5cGUgfCBudWxsKSkpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2U6IE1lc3NhZ2VJbnB1dFR5cGUpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgZmlsZXMsXG4gICAgaW1hZ2VzLFxuICAgIG1lc3NhZ2VJZCA9IGNyZWF0ZUhhc2goYG1lc3NhZ2UtJHtwZXJzb25hSWR9LSR7RGF0ZS5ub3coKX1gKSxcbiAgfSA9IG1lc3NhZ2U7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG5cbiAgaWYoZm9ybWF0Q29udmVyc2F0aW9uSWQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jb252ZXJzYXRpb25JZCcpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0TXNnSWQgPSBwYXJzZUlkKG1lc3NhZ2VJZCk7XG4gIGNvbnN0IHVwZGF0ZTogTWVzc2FnZVR5cGUgPSB7XG4gICAgY29udGVudDogcGFyc2VTdHJpbmcobWVzc2FnZS5jb250ZW50LCA2NDApLFxuICAgIGZpbGVzOiBmaWxlcyB8fCBbXSxcbiAgICBpbWFnZXM6IGltYWdlcyB8fCBbXVxuICB9O1xuXG4gIGNvbnN0IGluc2VydDogTWVzc2FnZVR5cGUgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0TXNnSWQsXG4gICAgY29udmVyc2F0aW9uSWQ6IGZvcm1hdENvbnZlcnNhdGlvbklkLFxuICAgIHBlcnNvbmFJZCxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRNc2dJZH0sIGNvbnZlcnNhdGlvbklkOiAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSwgcGVyc29uYUlkOiAke3BlcnNvbmFJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX0gSU4gbWVzc2FnZXNcbiAgICBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZChjb250ZXh0LCBmb3JtYXRDb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbihhc3luYyAoc2F2ZWRNZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4ge1xuICAgICAgY29uc3QgZW5yaWNoZWRNZXNzYWdlID0gYXdhaXQgd2l0aE1lc3NhZ2VVc2VyKGNvbnRleHQsIHNhdmVkTWVzc2FnZSk7XG4gICAgICBhd2FpdCBlbWl0UmVhbHRpbWVNZXNzYWdlKGNvbnRleHQsIGVucmljaGVkTWVzc2FnZSk7XG4gICAgICByZXR1cm4gZW5yaWNoZWRNZXNzYWdlO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZE1lc3NhZ2UgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbWVzc2FnZTogTWVzc2FnZUlucHV0VHlwZSk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZVR5cGUgPSBwYXJzZU1lc3NhZ2UobWVzc2FnZSk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gcGFyc2VJZChTdHJpbmcobmV3TWVzc2FnZT8uY29udmVyc2F0aW9uSWQgfHwgJycpKTtcblxuICByZXR1cm4gZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZChjb250ZXh0LCBjb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoKSA9PiBhZGRJdGVtPE1lc3NhZ2VUeXBlPihjb250ZXh0LCAnbWVzc2FnZXMnLCBuZXdNZXNzYWdlKSlcbiAgICAudGhlbihhc3luYyAoc2F2ZWRNZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4ge1xuICAgICAgY29uc3QgZW5yaWNoZWRNZXNzYWdlID0gYXdhaXQgd2l0aE1lc3NhZ2VVc2VyKGNvbnRleHQsIHNhdmVkTWVzc2FnZSk7XG4gICAgICBhd2FpdCBlbWl0UmVhbHRpbWVNZXNzYWdlKGNvbnRleHQsIGVucmljaGVkTWVzc2FnZSk7XG4gICAgICByZXR1cm4gZW5yaWNoZWRNZXNzYWdlO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbjogJ2FkZE1lc3NhZ2UnLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2FkZE1lc3NhZ2UnXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZywgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZCA9IHBhcnNlSWQobWVzc2FnZUlkKTtcblxuICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uQnlJZChjb250ZXh0LCBjb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgIFVQREFURSBtIFdJVEgge3NhdmVkOiBBUFBFTkQobS5zYXZlZCwgJHtzZXNzaW9uSWR9LCB0cnVlKX0gSU4gbWVzc2FnZXNcbiAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlKSA9PiB7XG4gICAgICAgICAgaWYobWVzc2FnZSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLnRvSWQpLmVtaXQoJ21lc3NhZ2Vfc2F2ZScsIG1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1bnNhdmVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2VJZDogc3RyaW5nLCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgbS50byA9PSAke2NvbnZlcnNhdGlvbktleX1cbiAgICAgICAgICBVUERBVEUgbSBXSVRIIHtzYXZlZDogUkVNT1ZFX1ZBTFVFKG0uc2F2ZWQsICR7c2Vzc2lvbklkfSl9IElOIG1lc3NhZ2VzXG4gICAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlKSA9PiB7XG4gICAgICAgICAgaWYobWVzc2FnZSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLmlkKS5lbWl0KCdtZXNzYWdlX3Vuc2F2ZScsIG1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2VJZDogc3RyaW5nLCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgbS50byA9PSAke2NvbnZlcnNhdGlvbktleX0gJiYgbS5mcm9tID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBSRU1PVkUgbSBJTiBtZXNzYWdlc1xuICAgICAgICBSRVRVUk4gT0xEYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigobWVzc2FnZTogTWVzc2FnZVR5cGUpID0+IHtcbiAgICAgICAgICBpZihtZXNzYWdlKSB7XG4gICAgICAgICAgICAvLyBCcm9hZGNhc3QgdG8gbWVzc2FnZSBib3hcbiAgICAgICAgICAgIC8vIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UudG9JZCkuZW1pdCgnbWVzc2FnZV9kZWxldGUnLCBtZXNzYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0SWQgPSBwYXJzZUlkKG1lc3NhZ2VJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxNZXNzYWdlVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAnbWVzc2FnZXMnLFxuICAgIHtfa2V5OiBmb3JtYXRJZH0sXG4gICAge2xpbWl0OiB7ZnJvbTogMCwgdG86IDF9fVxuICApXG4gICAgLnRoZW4oKG1lc3NhZ2VzKSA9PiBtZXNzYWdlc1swXSB8fCBudWxsKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhbk1lc3NhZ2VzID0gKGRhdGFiYXNlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgLy8gUmVtb3ZlIGFsbCBtZXNzYWdlcyB0aGF0IGFyZSBvdmVyIDYwIGRheXMgYW5kIG5vdCBzYXZlZFxuICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgIEZJTFRFUiBtLmFkZGVkIDwgREFURV9USU1FU1RBTVAoREFURV9TVUJUUkFDVChEQVRFX05PVygpLCA2MCwgJ2RheScpKSAmJiBMRU5HVEgobS5zYXZlZCkgPiAwXG4gICAgICBSRU1PVkUgbSBJTiBtZXNzYWdlc1xuICAgICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdDogTWVzc2FnZVR5cGVbXSkgPT4gbGlzdC5sZW5ndGgpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsInBhcnNlTWVzc2FnZSIsImdldENvbm5lY3Rpb25CeUNvbnZlcnNhdGlvbiIsIndzQ2xpZW50IiwibG9nRXJyb3IiLCJnZXRMaW1pdCIsInVzZURiIiwiZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCIsImdldENvbnZlcnNhdGlvbkJ5SWQiLCJhZGRJdGVtIiwiZ2V0TGlzdEJ5IiwiZ2V0UGVyc29uYUJ5SWQiLCJnZXRVc2VyRGlzcGxheU5hbWUiLCJldmVudENhdGVnb3J5IiwiZW5yaWNoTWVzc2FnZVVzZXIiLCJjb250ZXh0IiwibWVzc2FnZSIsImJhc2VVc2VyIiwic2Vzc2lvblVzZXJJZCIsIlN0cmluZyIsInNlc3Npb24iLCJ1c2VySWQiLCJzZXNzaW9uUGVyc29uYUlkIiwicGVyc29uYUlkIiwibWVzc2FnZVVzZXJJZCIsIl9rZXkiLCJ1c2VyIiwiZGF0YWJhc2VOYW1lIiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsInJlc29sdmVkUGVyc29uYUlkIiwicGVyc29uYSIsImNhdGNoIiwiaW1hZ2VVcmwiLCJuYW1lIiwidGh1bWJVcmwiLCJ0aHVtYklkIiwidXNlcm5hbWUiLCJ3aXRoTWVzc2FnZVVzZXIiLCJ1cGRhdGVDb252ZXJzYXRpb25TdW1tYXJ5IiwiY29udmVyc2F0aW9uSWQiLCJjb250ZW50IiwibW9kaWZpZWQiLCJOdW1iZXIiLCJhZGRlZCIsIkRhdGUiLCJub3ciLCJzdW1tYXJ5IiwiY29udmVyc2F0aW9uIiwiZW1pdFJlYWx0aW1lTWVzc2FnZSIsInBheWxvYWQiLCJhY3Rpb24iLCJkYXRhIiwiY29ubmVjdGlvbkdyb3VwcyIsImNvbm5lY3Rpb25JZHMiLCJmbGF0TWFwIiwiZ3JvdXAiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJjb25uZWN0aW9uSWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiaW5kZXgiLCJsaXN0IiwiaW5kZXhPZiIsImxlbmd0aCIsInNlbmQiLCJnZXRNZXNzYWdlcyIsImZyb20iLCJ0byIsInNlc3Npb25JZCIsImZvcm1hdENvbnZlcnNhdGlvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJjb252ZXJzYXRpb25RcnkiLCJhbGwiLCJjb252ZXJzYXRpb25zIiwibGltaXQiLCJhcWxRcnkiLCJtZXNzYWdlcyIsIlByb21pc2UiLCJlcnJvciIsInVwZGF0ZU1lc3NhZ2UiLCJmaWxlcyIsImltYWdlcyIsIm1lc3NhZ2VJZCIsIkVycm9yIiwiZm9ybWF0TXNnSWQiLCJ1cGRhdGUiLCJpbnNlcnQiLCJzYXZlZE1lc3NhZ2UiLCJlbnJpY2hlZE1lc3NhZ2UiLCJhZGRNZXNzYWdlIiwibmV3TWVzc2FnZSIsImNhdGVnb3J5IiwibGFiZWwiLCJzYXZlTWVzc2FnZSIsImZvcm1hdElkIiwiY29udmVyc2F0aW9uS2V5IiwidW5zYXZlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2UiLCJnZXRNZXNzYWdlIiwiY2xlYW5NZXNzYWdlcyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFRQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUM5RSxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsWUFBWSxRQUFPLGdDQUFnQztBQUMzRCxTQUFRQywyQkFBMkIsUUFBTyxtQ0FBbUM7QUFDN0UsU0FBUUMsUUFBUSxRQUFPLGdDQUFnQztBQUN2RCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLFFBQVEsRUFBRUMsS0FBSyxR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
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvbWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge3BhcnNlTWVzc2FnZX0gZnJvbSAnLi4vYWRhcHRlcnMvbWVzc2FnZUFkYXB0ZXIuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9uQnlDb252ZXJzYXRpb259IGZyb20gJy4uL2xhbWJkYXMvYWN0aW9ucy93ZWJzb2NrZXRzLmpzJztcbmltcG9ydCB7d3NDbGllbnR9IGZyb20gJy4uL2xhbWJkYXMvdXRpbHMvd2Vic29ja2V0LmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7ZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCwgZ2V0Q29udmVyc2F0aW9uQnlJZH0gZnJvbSAnLi9jb252ZXJzYXRpb25zLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZ2V0TGlzdEJ5fSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hQnlJZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2dldFVzZXJEaXNwbGF5TmFtZX0gZnJvbSAnLi91c2Vycy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29udmVyc2F0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7TWVzc2FnZUlucHV0VHlwZSwgTWVzc2FnZVR5cGV9IGZyb20gJy4uL3R5cGVzL21lc3NhZ2VzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ21lc3NhZ2VzJztcblxuY29uc3QgZW5yaWNoTWVzc2FnZVVzZXIgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG1lc3NhZ2U6IE1lc3NhZ2VUeXBlLFxuICBiYXNlVXNlcj86IFVzZXJUeXBlIHwgbnVsbFxuKTogUHJvbWlzZTxVc2VyVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IG1lc3NhZ2VVc2VySWQgPSBwYXJzZUlkKFN0cmluZyhtZXNzYWdlPy51c2VySWQgfHwgYmFzZVVzZXI/LnVzZXJJZCB8fCBiYXNlVXNlcj8uX2tleSB8fCAnJykpO1xuXG4gIGlmKCFtZXNzYWdlVXNlcklkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB1c2VyID0gYmFzZVVzZXIgfHwgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuX2tleSA9PSAke21lc3NhZ2VVc2VySWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgY29uc3QgcmVzb2x2ZWRQZXJzb25hSWQgPSBwYXJzZUlkKFxuICAgIFN0cmluZyhcbiAgICAgIG1lc3NhZ2U/LnBlcnNvbmFJZFxuICAgICAgfHwgKG1lc3NhZ2VVc2VySWQgPT09IHNlc3Npb25Vc2VySWQgPyBzZXNzaW9uUGVyc29uYUlkIDogJycpXG4gICAgICB8fCB1c2VyPy5wZXJzb25hSWRcbiAgICAgIHx8ICcnXG4gICAgKVxuICApO1xuICBjb25zdCBwZXJzb25hID0gcmVzb2x2ZWRQZXJzb25hSWRcbiAgICA/IGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHJlc29sdmVkUGVyc29uYUlkKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnVzZXIsXG4gICAgaW1hZ2VVcmw6IFN0cmluZyh1c2VyPy5pbWFnZVVybCB8fCBwZXJzb25hPy5pbWFnZVVybCB8fCAnJyksXG4gICAgbmFtZTogU3RyaW5nKHBlcnNvbmE/Lm5hbWUgfHwgdXNlcj8ubmFtZSB8fCBnZXRVc2VyRGlzcGxheU5hbWUodXNlciB8fCB7fSBhcyBVc2VyVHlwZSkpLFxuICAgIHBlcnNvbmFJZDogU3RyaW5nKHJlc29sdmVkUGVyc29uYUlkIHx8IHVzZXI/LnBlcnNvbmFJZCB8fCAnJyksXG4gICAgdGh1bWJVcmw6IFN0cmluZyh1c2VyPy50aHVtYlVybCB8fCB1c2VyPy50aHVtYklkIHx8IHBlcnNvbmE/LnRodW1iVXJsIHx8ICcnKSxcbiAgICB1c2VySWQ6IG1lc3NhZ2VVc2VySWQsXG4gICAgdXNlcm5hbWU6IFN0cmluZyh1c2VyPy51c2VybmFtZSB8fCAnJylcbiAgfTtcbn07XG5cbmNvbnN0IHdpdGhNZXNzYWdlVXNlciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbWVzc2FnZTogTWVzc2FnZVR5cGUsXG4gIGJhc2VVc2VyPzogVXNlclR5cGUgfCBudWxsXG4pOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiAoe1xuICAuLi5tZXNzYWdlLFxuICB1c2VyOiBhd2FpdCBlbnJpY2hNZXNzYWdlVXNlcihjb250ZXh0LCBtZXNzYWdlLCBiYXNlVXNlcilcbn0pO1xuXG5jb25zdCB1cGRhdGVDb252ZXJzYXRpb25TdW1tYXJ5ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBtZXNzYWdlOiBNZXNzYWdlVHlwZVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBjb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoU3RyaW5nKG1lc3NhZ2U/LmNvbnZlcnNhdGlvbklkIHx8ICcnKSk7XG5cbiAgaWYoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gcGFyc2VTdHJpbmcoU3RyaW5nKG1lc3NhZ2U/LmNvbnRlbnQgfHwgJycpLCA2NDApO1xuICBjb25zdCBtb2RpZmllZCA9IE51bWJlcihtZXNzYWdlPy5tb2RpZmllZCB8fCBtZXNzYWdlPy5hZGRlZCB8fCBEYXRlLm5vdygpKTtcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICBjb250ZW50LFxuICAgIG1vZGlmaWVkXG4gIH07XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBVUERBVEUgJHtjb252ZXJzYXRpb25JZH1cbiAgICBXSVRIICR7c3VtbWFyeX1cbiAgICBJTiBjb252ZXJzYXRpb25zXG4gIGApO1xuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGdldENvbnZlcnNhdGlvbkJ5SWQoY29udGV4dCwgY29udmVyc2F0aW9uSWQpO1xuXG4gIGlmKCFjb252ZXJzYXRpb24pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uY29udmVyc2F0aW9uLFxuICAgIGNvbnRlbnQsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgbW9kaWZpZWRcbiAgfSBhcyBDb252ZXJzYXRpb25UeXBlO1xufTtcblxuY29uc3QgZW1pdFJlYWx0aW1lTWVzc2FnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlOiBNZXNzYWdlVHlwZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZighbWVzc2FnZT8uY29udmVyc2F0aW9uSWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCB1cGRhdGVDb252ZXJzYXRpb25TdW1tYXJ5KGNvbnRleHQsIG1lc3NhZ2UpO1xuXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgYWN0aW9uOiAnbWVzc2FnZS5jcmVhdGVkJyxcbiAgICBkYXRhOiB7XG4gICAgICAuLi4oY29udmVyc2F0aW9uID8ge2NvbnZlcnNhdGlvbn0gOiB7fSksXG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIC4uLihhd2FpdCB3aXRoTWVzc2FnZVVzZXIoY29udGV4dCwgbWVzc2FnZSkpXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBjb25uZWN0aW9uR3JvdXBzID0gYXdhaXQgZ2V0Q29ubmVjdGlvbkJ5Q29udmVyc2F0aW9uKGNvbnRleHQsIG1lc3NhZ2UuY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBjb25uZWN0aW9uSWRzID0gY29ubmVjdGlvbkdyb3Vwc1xuICAgIC5mbGF0TWFwKChncm91cCkgPT4gQXJyYXkuaXNBcnJheShncm91cCkgPyBncm91cCA6IFtdKVxuICAgIC5tYXAoKGNvbm5lY3Rpb25JZCkgPT4gcGFyc2VTdHJpbmcoY29ubmVjdGlvbklkLCAzMikpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGNvbm5lY3Rpb25JZCwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihjb25uZWN0aW9uSWQpID09PSBpbmRleCk7XG5cbiAgaWYoY29ubmVjdGlvbklkcy5sZW5ndGgpIHtcbiAgICBhd2FpdCB3c0NsaWVudC5zZW5kKGNvbm5lY3Rpb25JZHMsIHBheWxvYWQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZXMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywge2Zyb20sIHRvfSk6IFByb21pc2U8TWVzc2FnZVR5cGVbXT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgY29udmVyc2F0aW9uUXJ5ID0gYXFsYEZPUiBlIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBlLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfSAmJiBlLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gZWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoY29udmVyc2F0aW9uUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9ucykgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICAgIEZJTFRFUiBtLmNvbnZlcnNhdGlvbklkID09ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9XG4gICAgICAgICAgU09SVCBtLmFkZGVkIERFU0NcbiAgICAgICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgICAgICBTT1JUIG0uYWRkZWQgQVNDXG4gICAgICAgICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gbS51c2VySWRcbiAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICBSRVRVUk4gdVxuICAgICAgICAgIClcbiAgICAgICAgICBSRVRVUk4gTUVSR0UobSwge3VzZXJ9KVxuICAgICAgYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlcykgPT4gUHJvbWlzZS5hbGwobWVzc2FnZXMubWFwKChtZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4gd2l0aE1lc3NhZ2VVc2VyKGNvbnRleHQsIG1lc3NhZ2UsIG1lc3NhZ2U/LnVzZXIgYXMgVXNlclR5cGUgfCBudWxsKSkpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2U6IE1lc3NhZ2VJbnB1dFR5cGUpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgZmlsZXMsXG4gICAgaW1hZ2VzLFxuICAgIG1lc3NhZ2VJZCA9IGNyZWF0ZUhhc2goYG1lc3NhZ2UtJHtwZXJzb25hSWR9LSR7RGF0ZS5ub3coKX1gKSxcbiAgfSA9IG1lc3NhZ2U7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG5cbiAgaWYoZm9ybWF0Q29udmVyc2F0aW9uSWQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jb252ZXJzYXRpb25JZCcpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0TXNnSWQgPSBwYXJzZUlkKG1lc3NhZ2VJZCk7XG4gIGNvbnN0IHVwZGF0ZTogTWVzc2FnZVR5cGUgPSB7XG4gICAgY29udGVudDogcGFyc2VTdHJpbmcobWVzc2FnZS5jb250ZW50LCA2NDApLFxuICAgIGZpbGVzOiBmaWxlcyB8fCBbXSxcbiAgICBpbWFnZXM6IGltYWdlcyB8fCBbXVxuICB9O1xuXG4gIGNvbnN0IGluc2VydDogTWVzc2FnZVR5cGUgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0TXNnSWQsXG4gICAgY29udmVyc2F0aW9uSWQ6IGZvcm1hdENvbnZlcnNhdGlvbklkLFxuICAgIHBlcnNvbmFJZCxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRNc2dJZH0sIGNvbnZlcnNhdGlvbklkOiAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSwgcGVyc29uYUlkOiAke3BlcnNvbmFJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX0gSU4gbWVzc2FnZXNcbiAgICBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZChjb250ZXh0LCBmb3JtYXRDb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbihhc3luYyAoc2F2ZWRNZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4ge1xuICAgICAgY29uc3QgZW5yaWNoZWRNZXNzYWdlID0gYXdhaXQgd2l0aE1lc3NhZ2VVc2VyKGNvbnRleHQsIHNhdmVkTWVzc2FnZSk7XG4gICAgICBhd2FpdCBlbWl0UmVhbHRpbWVNZXNzYWdlKGNvbnRleHQsIGVucmljaGVkTWVzc2FnZSk7XG4gICAgICByZXR1cm4gZW5yaWNoZWRNZXNzYWdlO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZE1lc3NhZ2UgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbWVzc2FnZTogTWVzc2FnZUlucHV0VHlwZSk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZVR5cGUgPSBwYXJzZU1lc3NhZ2UobWVzc2FnZSk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gcGFyc2VJZChTdHJpbmcobmV3TWVzc2FnZT8uY29udmVyc2F0aW9uSWQgfHwgJycpKTtcblxuICByZXR1cm4gZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZChjb250ZXh0LCBjb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoKSA9PiBhZGRJdGVtPE1lc3NhZ2VUeXBlPihjb250ZXh0LCAnbWVzc2FnZXMnLCBuZXdNZXNzYWdlKSlcbiAgICAudGhlbihhc3luYyAoc2F2ZWRNZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4ge1xuICAgICAgY29uc3QgZW5yaWNoZWRNZXNzYWdlID0gYXdhaXQgd2l0aE1lc3NhZ2VVc2VyKGNvbnRleHQsIHNhdmVkTWVzc2FnZSk7XG4gICAgICBhd2FpdCBlbWl0UmVhbHRpbWVNZXNzYWdlKGNvbnRleHQsIGVucmljaGVkTWVzc2FnZSk7XG4gICAgICByZXR1cm4gZW5yaWNoZWRNZXNzYWdlO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbjogJ2FkZE1lc3NhZ2UnLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2FkZE1lc3NhZ2UnXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZywgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZCA9IHBhcnNlSWQobWVzc2FnZUlkKTtcblxuICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uQnlJZChjb250ZXh0LCBjb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgIFVQREFURSBtIFdJVEgge3NhdmVkOiBBUFBFTkQobS5zYXZlZCwgJHtzZXNzaW9uSWR9LCB0cnVlKX0gSU4gbWVzc2FnZXNcbiAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlKSA9PiB7XG4gICAgICAgICAgaWYobWVzc2FnZSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLnRvSWQpLmVtaXQoJ21lc3NhZ2Vfc2F2ZScsIG1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1bnNhdmVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2VJZDogc3RyaW5nLCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgbS50byA9PSAke2NvbnZlcnNhdGlvbktleX1cbiAgICAgICAgICBVUERBVEUgbSBXSVRIIHtzYXZlZDogUkVNT1ZFX1ZBTFVFKG0uc2F2ZWQsICR7c2Vzc2lvbklkfSl9IElOIG1lc3NhZ2VzXG4gICAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlKSA9PiB7XG4gICAgICAgICAgaWYobWVzc2FnZSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLmlkKS5lbWl0KCdtZXNzYWdlX3Vuc2F2ZScsIG1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2VJZDogc3RyaW5nLCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgbS50byA9PSAke2NvbnZlcnNhdGlvbktleX0gJiYgbS5mcm9tID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBSRU1PVkUgbSBJTiBtZXNzYWdlc1xuICAgICAgICBSRVRVUk4gT0xEYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigobWVzc2FnZTogTWVzc2FnZVR5cGUpID0+IHtcbiAgICAgICAgICBpZihtZXNzYWdlKSB7XG4gICAgICAgICAgICAvLyBCcm9hZGNhc3QgdG8gbWVzc2FnZSBib3hcbiAgICAgICAgICAgIC8vIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UudG9JZCkuZW1pdCgnbWVzc2FnZV9kZWxldGUnLCBtZXNzYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0SWQgPSBwYXJzZUlkKG1lc3NhZ2VJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxNZXNzYWdlVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAnbWVzc2FnZXMnLFxuICAgIHtfa2V5OiBmb3JtYXRJZH0sXG4gICAge2xpbWl0OiB7ZnJvbTogMCwgdG86IDF9fVxuICApXG4gICAgLnRoZW4oKG1lc3NhZ2VzKSA9PiBtZXNzYWdlc1swXSB8fCBudWxsKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhbk1lc3NhZ2VzID0gKGRhdGFiYXNlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgLy8gUmVtb3ZlIGFsbCBtZXNzYWdlcyB0aGF0IGFyZSBvdmVyIDYwIGRheXMgYW5kIG5vdCBzYXZlZFxuICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgIEZJTFRFUiBtLmFkZGVkIDwgREFURV9USU1FU1RBTVAoREFURV9TVUJUUkFDVChEQVRFX05PVygpLCA2MCwgJ2RheScpKSAmJiBMRU5HVEgobS5zYXZlZCkgPiAwXG4gICAgICBSRU1PVkUgbSBJTiBtZXNzYWdlc1xuICAgICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdDogTWVzc2FnZVR5cGVbXSkgPT4gbGlzdC5sZW5ndGgpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsInBhcnNlTWVzc2FnZSIsImdldENvbm5lY3Rpb25CeUNvbnZlcnNhdGlvbiIsIndzQ2xpZW50IiwibG9nRXJyb3IiLCJnZXRMaW1pdCIsInVzZURiIiwiZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCIsImdldENvbnZlcnNhdGlvbkJ5SWQiLCJhZGRJdGVtIiwiZ2V0TGlzdEJ5IiwiZ2V0UGVyc29uYUJ5SWQiLCJnZXRVc2VyRGlzcGxheU5hbWUiLCJldmVudENhdGVnb3J5IiwiZW5yaWNoTWVzc2FnZVVzZXIiLCJjb250ZXh0IiwibWVzc2FnZSIsImJhc2VVc2VyIiwic2Vzc2lvblVzZXJJZCIsIlN0cmluZyIsInNlc3Npb24iLCJ1c2VySWQiLCJzZXNzaW9uUGVyc29uYUlkIiwicGVyc29uYUlkIiwibWVzc2FnZVVzZXJJZCIsIl9rZXkiLCJ1c2VyIiwiZGF0YWJhc2VOYW1lIiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsInJlc29sdmVkUGVyc29uYUlkIiwicGVyc29uYSIsImNhdGNoIiwiaW1hZ2VVcmwiLCJuYW1lIiwidGh1bWJVcmwiLCJ0aHVtYklkIiwidXNlcm5hbWUiLCJ3aXRoTWVzc2FnZVVzZXIiLCJ1cGRhdGVDb252ZXJzYXRpb25TdW1tYXJ5IiwiY29udmVyc2F0aW9uSWQiLCJjb250ZW50IiwibW9kaWZpZWQiLCJOdW1iZXIiLCJhZGRlZCIsIkRhdGUiLCJub3ciLCJzdW1tYXJ5IiwiY29udmVyc2F0aW9uIiwiZW1pdFJlYWx0aW1lTWVzc2FnZSIsInBheWxvYWQiLCJhY3Rpb24iLCJkYXRhIiwiY29ubmVjdGlvbkdyb3VwcyIsImNvbm5lY3Rpb25JZHMiLCJmbGF0TWFwIiwiZ3JvdXAiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJjb25uZWN0aW9uSWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiaW5kZXgiLCJsaXN0IiwiaW5kZXhPZiIsImxlbmd0aCIsInNlbmQiLCJnZXRNZXNzYWdlcyIsImZyb20iLCJ0byIsInNlc3Npb25JZCIsImZvcm1hdENvbnZlcnNhdGlvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJjb252ZXJzYXRpb25RcnkiLCJhbGwiLCJjb252ZXJzYXRpb25zIiwibGltaXQiLCJhcWxRcnkiLCJtZXNzYWdlcyIsIlByb21pc2UiLCJlcnJvciIsInVwZGF0ZU1lc3NhZ2UiLCJmaWxlcyIsImltYWdlcyIsIm1lc3NhZ2VJZCIsIkVycm9yIiwiZm9ybWF0TXNnSWQiLCJ1cGRhdGUiLCJpbnNlcnQiLCJzYXZlZE1lc3NhZ2UiLCJlbnJpY2hlZE1lc3NhZ2UiLCJhZGRNZXNzYWdlIiwibmV3TWVzc2FnZSIsImNhdGVnb3J5IiwibGFiZWwiLCJzYXZlTWVzc2FnZSIsImZvcm1hdElkIiwiY29udmVyc2F0aW9uS2V5IiwidW5zYXZlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2UiLCJnZXRNZXNzYWdlIiwiY2xlYW5NZXNzYWdlcyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFRQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUM5RSxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsWUFBWSxRQUFPLGdDQUFnQztBQUMzRCxTQUFRQywyQkFBMkIsUUFBTyxtQ0FBbUM7QUFDN0UsU0FBUUMsUUFBUSxRQUFPLGdDQUFnQztBQUN2RCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLFFB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
|
|
@@ -34,4 +34,4 @@ export const clearNotificationBadges = (deviceTokens)=>{
|
|
|
34
34
|
return provider.send(notification, deviceTokens);
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvbm90aWZpY2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuLy8gY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdub3RpZmljYXRpb25zJztcbi8vIFB1c2ggTm90aWZpY2F0aW9uc1xuaW1wb3J0IHtOb3RpZmljYXRpb24gYXMgQVBOTm90aWZpY2F0aW9uLCBQcm92aWRlciwgUmVzcG9uc2VGYWlsdXJlLCBSZXNwb25zZXMsIFJlc3BvbnNlU2VudH0gZnJvbSAnYXBuJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtOb3RpZmljYXRpb25UeXBlfSBmcm9tICcuLi90eXBlcy9ub3RpZmljYXRpb25zLnR5cGVzLmpzJztcblxuZXhwb3J0IGNvbnN0IGdldE5vdGlmaWNhdGlvblByb3ZpZGVyID0gKCkgPT4gbmV3IFByb3ZpZGVyKHtcbiAgY2E6IENvbmZpZy5nZXQoJ2FwcC5hcG4uY2EnKSxcbiAgY2VydDogQ29uZmlnLmdldCgnYXBwLmFwbi5jZXJ0JyksXG4gIGtleTogQ29uZmlnLmdldCgnYXBwLmFwbi5rZXknKSxcbiAgcHJvZHVjdGlvbjogQ29uZmlnLmdldCgnZW52aXJvbm1lbnQnKSA9PT0gJ3Byb2QnXG59KTtcblxudHlwZSBOb3RpZmljYXRpb25SZXNwb25zZXMgPSBSZXNwb25zZXM8UmVzcG9uc2VTZW50LCBSZXNwb25zZUZhaWx1cmU+O1xuXG5leHBvcnQgY29uc3QgcHVzaE5vdGlmaWNhdGlvbiA9IChkZXZpY2VUb2tlbnM6IHN0cmluZ1tdLCBub3RlOiBOb3RpZmljYXRpb25UeXBlKTogUHJvbWlzZTxOb3RpZmljYXRpb25SZXNwb25zZXM+ID0+IHtcbiAgLy8gUHVzaCBub3RpZmljYXRpb24gdG8gZGV2aWNlXG4gIGNvbnN0IHByb3ZpZGVyOiBQcm92aWRlciA9IGdldE5vdGlmaWNhdGlvblByb3ZpZGVyKCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbjogQVBOTm90aWZpY2F0aW9uID0gbmV3IEFQTk5vdGlmaWNhdGlvbigpO1xuICBub3RpZmljYXRpb24udG9waWMgPSBDb25maWcuZ2V0KCdhcHAuYXBuLmlkJyk7XG4gIG5vdGlmaWNhdGlvbi5hbGVydCA9IG5vdGUubWVzc2FnZTtcblxuICBpZihub3RlLmRhdGEpIHtcbiAgICBub3RpZmljYXRpb24ubXV0YWJsZUNvbnRlbnQgPSB0cnVlO1xuICAgIG5vdGlmaWNhdGlvbi5wYXlsb2FkID0gbm90ZS5kYXRhO1xuICB9XG5cbiAgaWYobm90ZS5iYWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbm90aWZpY2F0aW9uLmJhZGdlID0gbm90ZS5iYWRnZTtcbiAgfVxuXG4gIHJldHVybiBwcm92aWRlci5zZW5kKG5vdGlmaWNhdGlvbiwgZGV2aWNlVG9rZW5zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhck5vdGlmaWNhdGlvbkJhZGdlcyA9IChkZXZpY2VUb2tlbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxOb3RpZmljYXRpb25SZXNwb25zZXM+ID0+IHtcbiAgLy8gUHVzaCBub3RpZmljYXRpb24gdG8gZGV2aWNlXG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0Tm90aWZpY2F0aW9uUHJvdmlkZXIoKTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0gbmV3IEFQTk5vdGlmaWNhdGlvbigpO1xuICBub3RpZmljYXRpb24uYmFkZ2UgPSAwO1xuXG4gIHJldHVybiBwcm92aWRlci5zZW5kKG5vdGlmaWNhdGlvbiwgZGV2aWNlVG9rZW5zKTtcbn07XG4iXSwibmFtZXMiOlsiTm90aWZpY2F0aW9uIiwiQVBOTm90aWZpY2F0aW9uIiwiUHJvdmlkZXIiLCJDb25maWciLCJnZXROb3RpZmljYXRpb25Qcm92aWRlciIsImNhIiwiZ2V0IiwiY2VydCIsImtleSIsInByb2R1Y3Rpb24iLCJwdXNoTm90aWZpY2F0aW9uIiwiZGV2aWNlVG9rZW5zIiwibm90ZSIsInByb3ZpZGVyIiwibm90aWZpY2F0aW9uIiwidG9waWMiLCJhbGVydCIsIm1lc3NhZ2UiLCJkYXRhIiwibXV0YWJsZUNvbnRlbnQiLCJwYXlsb2FkIiwiYmFkZ2UiLCJ1bmRlZmluZWQiLCJzZW5kIiwiY2xlYXJOb3RpZmljYXRpb25CYWRnZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsU0FBUUEsZ0JBQWdCQyxlQUFlLEVBQUVDLFFBQVEsUUFBaUQsTUFBTTtBQUV4RyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUlwQyxPQUFPLE1BQU1DLDBCQUEwQixJQUFNLElBQUlGLFNBQVM7UUFDeERHLElBQUlGLE9BQU9HLEdBQUcsQ0FBQztRQUNmQyxNQUFNSixPQUFPRyxHQUFHLENBQUM7UUFDakJFLEtBQUtMLE9BQU9HLEdBQUcsQ0FBQztRQUNoQkcsWUFBWU4sT0FBT0csR0FBRyxDQUFDLG1CQUFtQjtJQUM1QyxHQUFHO0FBSUgsT0FBTyxNQUFNSSxtQkFBbUIsQ0FBQ0MsY0FBd0JDO0lBQ3ZELDhCQUE4QjtJQUM5QixNQUFNQyxXQUFxQlQ7SUFDM0IsTUFBTVUsZUFBZ0MsSUFBSWI7SUFDMUNhLGFBQWFDLEtBQUssR0FBR1osT0FBT0csR0FBRyxDQUFDO0lBQ2hDUSxhQUFhRSxLQUFLLEdBQUdKLEtBQUtLLE9BQU87SUFFakMsSUFBR0wsS0FBS00sSUFBSSxFQUFFO1FBQ1pKLGFBQWFLLGNBQWMsR0FBRztRQUM5QkwsYUFBYU0sT0FBTyxHQUFHUixLQUFLTSxJQUFJO0lBQ2xDO0lBRUEsSUFBR04sS0FBS1MsS0FBSyxLQUFLQyxXQUFXO1FBQzNCUixhQUFhTyxLQUFLLEdBQUdULEtBQUtTLEtBQUs7SUFDakM7SUFFQSxPQUFPUixTQUFTVSxJQUFJLENBQUNULGNBQWNIO0FBQ3JDLEVBQUU7QUFFRixPQUFPLE1BQU1hLDBCQUEwQixDQUFDYjtJQUN0Qyw4QkFBOEI7SUFDOUIsTUFBTUUsV0FBV1Q7SUFDakIsTUFBTVUsZUFBZSxJQUFJYjtJQUN6QmEsYUFBYU8sS0FBSyxHQUFHO0lBRXJCLE9BQU9SLFNBQVNVLElBQUksQ0FBQ1QsY0FBY0g7QUFDckMsRUFBRSJ9
|
package/lib/actions/payments.js
CHANGED
|
@@ -603,4 +603,4 @@ export const deleteUserBillingCard = async (context)=>{
|
|
|
603
603
|
}
|
|
604
604
|
};
|
|
605
605
|
|
|
606
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgc3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7QmlsbGluZ1NldHVwU2Vzc2lvbk9wdGlvbnMsIFBheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXJ9IGZyb20gJy4uL3R5cGVzL3BheW1lbnRzLnR5cGVzLmpzJztcbmltcG9ydCB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2hhc0FjY2Vzc0xldmVsfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRTdHJpcGVDbGllbnR9IGZyb20gJy4uL3V0aWxzL3N0cmlwZVV0aWxzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5SWR9IGZyb20gJy4vdXNlcnMuanMnO1xuXG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncGF5bWVudHMnO1xuY29uc3QgUExVU19QTEFOX0lEID0gJ3BoYW50YXplLXBsdXMtbW9udGhseSc7XG5jb25zdCBQTFVTX1BMQU5fQU1PVU5UID0gMTAwMDtcbmNvbnN0IFBMVVNfUExBTl9BQ0NFU1MgPSAxO1xuXG5leHBvcnQgY29uc3QgYWRkQ3VzdG9tZXJBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEN1c3RvbWVyQWNjb3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9ID0ge319ID0gY29udGV4dDtcblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSBhcyBhbnkpXG4gICAgLnRoZW4oKGN1c3RvbWVyKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHN0cmlwZUN1c3RvbWVySWQ6IGN1c3RvbWVyLmlkXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiAhIXVwZGF0ZWRVc2VyKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0FjY291bnQ6IFBheW1lbnRCYW5rQWNjb3VudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUGF5bWVudEFjY291bnRCYW5rJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgLy8gUGFyYW1zXG4gIGNvbnN0IHtcbiAgICBhY2NvdW50TnVtYmVyLFxuICAgIGZ1bGxOYW1lLFxuICAgIHJvdXRpbmdcbiAgfSA9IGJhbmtBY2NvdW50O1xuXG4gIGNvbnN0IGZvcm1hdEFjY291bnQgPSBwYXJzZVN0cmluZyhhY2NvdW50TnVtYmVyLCAzMik7XG5cbiAgaWYoZm9ybWF0QWNjb3VudCA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9hY2NvdW50X251bWJlcicpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0RnVsbE5hbWUgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nID0gcGFyc2VTdHJpbmcocm91dGluZywgMzIpO1xuXG4gIGlmKGZvcm1hdFJvdXRpbmcgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfcm91dGluZ19udW1iZXInKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIHRva2VuIGZpcnN0LCB0aGVuIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHNvdXJjZVxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC50b2tlbnMuY3JlYXRlKHtcbiAgICAgICAgYmFua19hY2NvdW50OiB7XG4gICAgICAgICAgYWNjb3VudF9ob2xkZXJfbmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgYWNjb3VudF9ob2xkZXJfdHlwZTogJ2luZGl2aWR1YWwnLFxuICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBmb3JtYXRBY2NvdW50LFxuICAgICAgICAgIGNvdW50cnk6ICdVUycsXG4gICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICAgIHJvdXRpbmdfbnVtYmVyOiBmb3JtYXRSb3V0aW5nXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKCh0b2tlbikgPT4gc3RyaXBlQ2xpZW50LmN1c3RvbWVycy5jcmVhdGVTb3VyY2UoXG4gICAgICAgICAgc3RyaXBlQWNjb3VudElkLFxuICAgICAgICAgIHtzb3VyY2U6IHRva2VuLmlkfVxuICAgICAgICApKVxuICAgICAgICAudGhlbigoYWNjb3VudCkgPT4ge1xuICAgICAgICAgIC8vIFVzZSB0eXBlIGFzc2VydGlvbiBmb3IgY2FyZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgLy8gY29uc3QgY2FyZFNvdXJjZSA9IGFjY291bnQgYXMgdW5rbm93biBhcyBDYXJkO1xuICAgICAgICAgIC8vIGNvbnN0IGJyYW5kID0gY2FyZFNvdXJjZS5icmFuZCB8fCAnJztcbiAgICAgICAgICAvLyBjb25zdCBjdmNDaGVjayA9IGNhcmRTb3VyY2UuY3ZjX2NoZWNrIHx8ICcnO1xuICAgICAgICAgIC8vIGNvbnN0IGxhc3Q0ID0gY2FyZFNvdXJjZS5sYXN0NCB8fCAnJztcblxuICAgICAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudCxcbiAgICAgICAgICAgIGJhbmtGdWxsTmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgICBiYW5rSWQ6IGFjY291bnQuaWQsXG4gICAgICAgICAgICBiYW5rUm91dGluZzogZm9ybWF0Um91dGluZyxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3dcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyVHlwZSkgPT4gdXBkYXRlZFVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgICBpZihtc2cgPT09ICdBIGJhbmsgYWNjb3VudCB3aXRoIHRoYXQgcm91dGluZyBudW1iZXIgYW5kIGFjY291bnQgbnVtYmVyICcgK1xuICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzIGZvciB0aGlzIGN1c3RvbWVyLicpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAnYmFua19hY2NvdW50X2V4aXN0cydcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZDogUGF5bWVudENhcmRUeXBlKTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgZXhwTW9udGgsXG4gICAgZXhwWWVhcixcbiAgICBmdWxsTmFtZSxcbiAgICBpZCxcbiAgICBzdHJlZXQxLFxuICAgIHN0YXRlLFxuICAgIHppcFxuICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChpZCk7XG5cbiAgaWYoZm9ybWF0SWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9pZCcpO1xuICB9XG5cbiAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9O1xuICBjb25zdCBmb3JtYXRFeHBNb250aCA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcbiAgY29uc3QgZm9ybWF0RXhwWWVhciA9IHBhcnNlTnVtKGV4cFllYXIsIDIpO1xuICBjb25zdCBmb3JtYXRDaXR5ID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcbiAgY29uc3QgZm9ybWF0Q291bnRyeSA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcbiAgY29uc3QgZm9ybWF0RnVsbE5hbWUgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RyZWV0MSA9IHBhcnNlU3RyaW5nKHN0cmVldDEsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RhdGUgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuICBjb25zdCBmb3JtYXRaaXAgPSBwYXJzZVZhckNoYXIoemlwLCAxMCk7XG5cbiAgaWYoZm9ybWF0RXhwTW9udGgpIHtcbiAgICBwYXltZW50Q2FyZC5leHBNb250aCA9IGZvcm1hdEV4cE1vbnRoO1xuICB9XG5cbiAgaWYoZm9ybWF0RXhwWWVhcikge1xuICAgIHBheW1lbnRDYXJkLmV4cFllYXIgPSBmb3JtYXRFeHBZZWFyO1xuICB9XG5cbiAgaWYoZm9ybWF0Q2l0eSkge1xuICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICB9XG5cbiAgaWYoZm9ybWF0Q291bnRyeSkge1xuICAgIHBheW1lbnRDYXJkLmNvdW50cnkgPSBmb3JtYXRDb3VudHJ5O1xuICB9XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICBwYXltZW50Q2FyZC5mdWxsTmFtZSA9IGZvcm1hdEZ1bGxOYW1lO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgIHBheW1lbnRDYXJkLnN0cmVldDEgPSBmb3JtYXRTdHJlZXQxO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RhdGUpIHtcbiAgICBwYXltZW50Q2FyZC5zdGF0ZSA9IGZvcm1hdFN0YXRlO1xuICB9XG5cbiAgaWYoZm9ybWF0WmlwKSB7XG4gICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlID0gcGF5bWVudENhcmQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBMRVQgdXBkYXRlZENhcmQgPSBGSVJTVChcbiAgICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgVVBEQVRFIGMgV0lUSCAke3VwZGF0ZX0gSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gTkVXXG4gICAgICApXG4gICAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1XG4gICAgICApXG4gICAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IHVwZGF0ZWRDYXJkfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdHMgPSB7Y2FyZDoge30sIHVzZXI6IHt9fSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHJlc3VsdHMuY2FyZDtcbiAgICAgIGNvbnN0IHt1c2VyfSA9IHJlc3VsdHM7XG5cbiAgICAgIGlmKCF1cGRhdGVkQ2FyZCkge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdub3RfZm91bmQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge3N0cmlwZUN1c3RvbWVySWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHtzdHJpcGVJZH0gPSBjYXJkO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG4gICAgICBjb25zdCB1cGRhdGU6IHN0cmlwZS5DdXN0b21lclVwZGF0ZVNvdXJjZVBhcmFtcyA9IHtcbiAgICAgICAgYWRkcmVzc19jaXR5OiBmb3JtYXRDaXR5LFxuICAgICAgICBhZGRyZXNzX2NvdW50cnk6IGZvcm1hdENvdW50cnksXG4gICAgICAgIGFkZHJlc3NfbGluZTE6IGZvcm1hdFN0cmVldDEsXG4gICAgICAgIGFkZHJlc3Nfc3RhdGU6IGZvcm1hdFN0YXRlLFxuICAgICAgICBhZGRyZXNzX3ppcDogZm9ybWF0WmlwLFxuICAgICAgICBleHBfbW9udGg6IGZvcm1hdEV4cE1vbnRoLnRvU3RyaW5nKCksXG4gICAgICAgIGV4cF95ZWFyOiBmb3JtYXRFeHBZZWFyLnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGZvcm1hdEZ1bGxOYW1lXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAudXBkYXRlU291cmNlKHN0cmlwZUN1c3RvbWVySWQsIHN0cmlwZUlkLCB1cGRhdGUpXG4gICAgICAgIC50aGVuKCgpID0+IGNhcmQpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjp1cGRhdGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENyZWRpdENhcmRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDcmVkaXRDYXJkcyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgIEZJTFRFUiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdDogUGF5bWVudENhcmRUeXBlW10gPSBbXSkgPT4gbGlzdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVDcmVkaXRDYXJkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNhcmRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q2FyZElkID0gcGFyc2VJZChjYXJkSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCBjYXJkID0gRklSU1QoXG4gICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdENhcmRJZH0gJiYgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgUkVUVVJOIE9MRFxuICAgIClcbiAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IGNhcmR9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0ID0ge2NhcmQ6IHt9LCB1c2VyOiB7fX0pID0+IHtcbiAgICAgIGlmKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7Y2FyZCwgdXNlcn0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7X2tleTogY2FyZEtleX0gPSBjYXJkO1xuXG4gICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzUGF5bWVudCcpO1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24ub3V0RWRnZXMoY2FyZEtleSwge30pXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIC8vIEV4dHJhY3QgZWRnZXMgZnJvbSB0aGUgcmVzcG9uc2VcbiAgICAgICAgICBjb25zdCBlZGdlcyA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2UpID8gcmVzcG9uc2UgOiBbXTtcblxuICAgICAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtfa2V5OiBlZGdlS2V5fSA9IGVkZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaGFzUGF5bWVudGA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocmVtb3ZlQXFsUXJ5KTtcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcGVcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlU291cmNlKHVzZXIuc3RyaXBlQ3VzdG9tZXJJZCwgY2FyZC5zdHJpcGVJZClcbiAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmRlbGV0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIC8vIENsZWFuIGRiXG4gIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgYmFua0FjY291bnQ6ICcnLFxuICAgIGJhbmtGdWxsTmFtZTogJycsXG4gICAgYmFua0lkOiAnJyxcbiAgICBiYW5rUm91dGluZzogJycsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLmRlbGV0ZVNvdXJjZShzdHJpcGVBY2NvdW50SWQsIGJhbmtJZClcbiAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKCgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRUcmFuc2ZlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0cmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKTogUHJvbWlzZTxQYXltZW50VHJhbnNmZXI+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeX0gPSB0cmFuc2ZlcjtcbiAgY29uc3QgZm9ybWF0QW1vdW50ID0gcGFyc2VOdW0oYW1vdW50KTtcbiAgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSBwYXJzZUNoYXIoY3VycmVuY3ksIDMsICdVU0QnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIHJldHVybiBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudHJhbnNmZXJzXG4gICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaXBlQWNjb3VudElkXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChzdHJpcGVUcmFuc2ZlcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmlwZVRyYW5zZmVyKTtcbiAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudFRyYW5zZmVyID0ge1xuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gdHJhbnNmZXJzIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdUcmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKSA9PiBuZXdUcmFuc2Zlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRIb2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBheW1lbnQ6IFBheW1lbnRDaGFyZ2UpOiBQcm9taXNlPFBheW1lbnRDaGFyZ2U+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiBzdHJpcGVDbGllbnQuY2hhcmdlc1xuICAgIC5jcmVhdGUoe1xuICAgICAgYW1vdW50LFxuICAgICAgY2FwdHVyZSxcbiAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc291cmNlOiBjYXJkSWRcbiAgICB9KVxuICAgIC50aGVuKChzdHJpcGVDaGFyZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRDaGFyZ2UgPSB7XG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY2FwdHVyZSxcbiAgICAgICAgY2FyZElkLFxuICAgICAgICBjaGFyZ2VGYWlsQ29kZTogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfY29kZSxcbiAgICAgICAgY2hhcmdlRmFpbE1zZzogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfbWVzc2FnZSxcbiAgICAgICAgY2hhcmdlSWQ6IHN0cmlwZUNoYXJnZS5pZCxcbiAgICAgICAgY2hhcmdlU3RhdHVzOiBzdHJpcGVDaGFyZ2Uuc3RhdHVzLFxuICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwYXltZW50cyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigobmV3UGF5bWVudDogUGF5bWVudENoYXJnZSkgPT4gbmV3UGF5bWVudCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjpjcmVhdGVIb2xkOjplcnJvcicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGVuc3VyZVN0cmlwZUN1c3RvbWVySWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25JZCA9IFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpO1xuICBsZXQgdXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuXG4gIGlmKCF1c2VyPy5zdHJpcGVDdXN0b21lcklkKSB7XG4gICAgYXdhaXQgYWRkQ3VzdG9tZXJBY2NvdW50KGNvbnRleHQpO1xuICAgIHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KTtcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcodXNlcj8uc3RyaXBlQ3VzdG9tZXJJZCB8fCAnJyk7XG59O1xuXG5jb25zdCBnZXRDb25maWd1cmVkQmlsbGluZ09yaWdpbnMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFNldDxzdHJpbmc+ID0+IHtcbiAgY29uc3QgY29uZmlndXJlZE9yaWdpbnMgPSBTdHJpbmcocHJvY2Vzcy5lbnYuU1RSSVBFX1JFVFVSTl9VUkxfT1JJR0lOUyB8fCAnJylcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKG9yaWdpbikgPT4gb3JpZ2luLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBhcHBVcmwgPSBTdHJpbmcoY29udGV4dC5jb25maWc/LmRldGFpbHM/LnVybCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKGFwcFVybCkge1xuICAgIGNvbmZpZ3VyZWRPcmlnaW5zLnB1c2goYXBwVXJsLmluY2x1ZGVzKCc6Ly8nKSA/IGFwcFVybCA6IGBodHRwczovLyR7YXBwVXJsfWApO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZXQoY29uZmlndXJlZE9yaWdpbnMubWFwKChvcmlnaW4pID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwob3JpZ2luKS5vcmlnaW47XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9KS5maWx0ZXIoQm9vbGVhbikpO1xufTtcblxuY29uc3QgcGFyc2VCaWxsaW5nUmV0dXJuVXJsID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHJldHVyblVybDogc3RyaW5nKTogVVJMID0+IHtcbiAgbGV0IHBhcnNlZFVybDogVVJMO1xuXG4gIHRyeSB7XG4gICAgcGFyc2VkVXJsID0gbmV3IFVSTChTdHJpbmcocmV0dXJuVXJsIHx8ICcnKS50cmltKCkpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX2JpbGxpbmdfcmV0dXJuX3VybCcpO1xuICB9XG5cbiAgY29uc3QgaXNMb2NhbERldmVsb3BtZW50VXJsID0gcGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cDonXG4gICAgJiYgWycxMjcuMC4wLjEnLCAnbG9jYWxob3N0J10uaW5jbHVkZXMocGFyc2VkVXJsLmhvc3RuYW1lKTtcbiAgY29uc3QgaXNTZWN1cmVVcmwgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICBjb25zdCBhbGxvd2VkT3JpZ2lucyA9IGdldENvbmZpZ3VyZWRCaWxsaW5nT3JpZ2lucyhjb250ZXh0KTtcblxuICBpZigoIWlzU2VjdXJlVXJsICYmICFpc0xvY2FsRGV2ZWxvcG1lbnRVcmwpIHx8ICghaXNMb2NhbERldmVsb3BtZW50VXJsICYmICFhbGxvd2VkT3JpZ2lucy5oYXMocGFyc2VkVXJsLm9yaWdpbikpKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9iaWxsaW5nX3JldHVybl91cmwnKTtcbiAgfVxuXG4gIHBhcnNlZFVybC5oYXNoID0gJyc7XG4gIHJldHVybiBwYXJzZWRVcmw7XG59O1xuXG5jb25zdCBnZXRDaGVja291dFJldHVyblVybCA9IChyZXR1cm5Vcmw6IFVSTCwgc3RhdHVzOiAnY2FuY2VsZWQnIHwgJ3N1Y2Nlc3MnKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmV4dFVybCA9IG5ldyBVUkwocmV0dXJuVXJsLnRvU3RyaW5nKCkpO1xuXG4gIG5leHRVcmwuc2VhcmNoUGFyYW1zLnNldCgnYmlsbGluZycsIHN0YXR1cyk7XG4gIGlmKHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgbmV4dFVybC5zZWFyY2hQYXJhbXMuc2V0KCdzZXNzaW9uX2lkJywgJ3tDSEVDS09VVF9TRVNTSU9OX0lEfScpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRVcmwudG9TdHJpbmcoKS5yZXBsYWNlKCclN0JDSEVDS09VVF9TRVNTSU9OX0lEJTdEJywgJ3tDSEVDS09VVF9TRVNTSU9OX0lEfScpO1xufTtcblxuY29uc3QgdXBkYXRlVXNlckJpbGxpbmdQYXltZW50TWV0aG9kID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1cGRhdGU6IFBhcnRpYWw8VXNlclR5cGU+XG4pOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25JZCA9IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCB1c2VyVXBkYXRlOiBQYXJ0aWFsPFVzZXJUeXBlPiA9IHttb2RpZmllZDogRGF0ZS5ub3coKSwgLi4udXBkYXRlfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1c2VyVXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB1c2VyKTtcbn07XG5cbmNvbnN0IGVuc3VyZVBsdXNTdHJpcGVQbGFuID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgc3RyaXBlQ2xpZW50LnBsYW5zLnJldHJpZXZlKFBMVVNfUExBTl9JRCk7XG4gICAgcmV0dXJuIFBMVVNfUExBTl9JRDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGF3YWl0IHN0cmlwZUNsaWVudC5wbGFucy5jcmVhdGUoe1xuICAgICAgYW1vdW50OiBQTFVTX1BMQU5fQU1PVU5ULFxuICAgICAgY3VycmVuY3k6ICd1c2QnLFxuICAgICAgaWQ6IFBMVVNfUExBTl9JRCxcbiAgICAgIGludGVydmFsOiAnbW9udGgnLFxuICAgICAgaW50ZXJ2YWxfY291bnQ6IDEsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBwbGFuSWQ6ICdwbHVzJyxcbiAgICAgICAgdHlwZTogJ2FjY291bnQnXG4gICAgICB9LFxuICAgICAgcHJvZHVjdDoge1xuICAgICAgICBuYW1lOiAnUGhhbnRhemUgUGx1cydcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBQTFVTX1BMQU5fSUQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGdyYWRlVXNlclRvUGx1cyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBncmFkZVVzZXJUb1BsdXMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9zZXNzaW9uJyk7XG4gIH1cblxuICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuXG4gIGlmKGhhc0FjY2Vzc0xldmVsKGN1cnJlbnRVc2VyLCBQTFVTX1BMQU5fQUNDRVNTKSAmJiBjdXJyZW50VXNlcj8ucGxhblN1YnNjcmlwdGlvbklkKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyO1xuICB9XG5cbiAgaWYoIWN1cnJlbnRVc2VyPy5zdHJpcGVDYXJkSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9iaWxsaW5nX2NhcmQnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RyaXBlQ3VzdG9tZXJJZCA9IGF3YWl0IGVuc3VyZVN0cmlwZUN1c3RvbWVySWQoY29udGV4dCk7XG5cbiAgICBpZighc3RyaXBlQ3VzdG9tZXJJZCkge1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmlwZVBsYW5JZCA9IGF3YWl0IGVuc3VyZVBsdXNTdHJpcGVQbGFuKCk7XG4gICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG4gICAgY29uc3Qgc3RyaXBlU3Vic2NyaXB0aW9uID0gYXdhaXQgc3RyaXBlQ2xpZW50LnN1YnNjcmlwdGlvbnMuY3JlYXRlKHtcbiAgICAgIGN1c3RvbWVyOiBzdHJpcGVDdXN0b21lcklkLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBsYW46IHN0cmlwZVBsYW5JZFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgcGxhbklkOiAncGx1cycsXG4gICAgICAgIHR5cGU6ICdhY2NvdW50JyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzdHJpcGVQZXJpb2RFbmQgPSBOdW1iZXIoKHN0cmlwZVN1YnNjcmlwdGlvbiBhcyBhbnkpPy5jdXJyZW50X3BlcmlvZF9lbmQgfHwgMCk7XG4gICAgY29uc3QgdXBkYXRlOiBQYXJ0aWFsPFVzZXJUeXBlPiA9IHtcbiAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgcGxhbkV4cGlyZXM6IHN0cmlwZVBlcmlvZEVuZCA/IHN0cmlwZVBlcmlvZEVuZCAqIDEwMDAgOiAwLFxuICAgICAgcGxhbklkOiAncGx1cycsXG4gICAgICBwbGFuU3RhdHVzOiBTdHJpbmcoc3RyaXBlU3Vic2NyaXB0aW9uLnN0YXR1cyB8fCAnYWN0aXZlJyksXG4gICAgICBwbGFuU3Vic2NyaXB0aW9uSWQ6IHN0cmlwZVN1YnNjcmlwdGlvbi5pZCxcbiAgICAgIHVzZXJBY2Nlc3M6IFBMVVNfUExBTl9BQ0NFU1NcbiAgICB9O1xuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4gdXNlcik7XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCaWxsaW5nU2V0dXBTZXNzaW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7cmV0dXJuVXJsfTogQmlsbGluZ1NldHVwU2Vzc2lvbk9wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25JZCA9IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGNvbnN0IHN0cmlwZUN1c3RvbWVySWQgPSBhd2FpdCBlbnN1cmVTdHJpcGVDdXN0b21lcklkKGNvbnRleHQpO1xuXG4gIGlmKCFzdHJpcGVDdXN0b21lcklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkUmV0dXJuVXJsID0gcGFyc2VCaWxsaW5nUmV0dXJuVXJsKGNvbnRleHQsIHJldHVyblVybCk7XG4gIGNvbnN0IGNoZWNrb3V0U2Vzc2lvbiA9IGF3YWl0IGdldFN0cmlwZUNsaWVudCgpLmNoZWNrb3V0LnNlc3Npb25zLmNyZWF0ZSh7XG4gICAgY2FuY2VsX3VybDogZ2V0Q2hlY2tvdXRSZXR1cm5VcmwocGFyc2VkUmV0dXJuVXJsLCAnY2FuY2VsZWQnKSxcbiAgICBjdXN0b21lcjogc3RyaXBlQ3VzdG9tZXJJZCxcbiAgICBtZXRhZGF0YToge1xuICAgICAgdHlwZTogJ2JpbGxpbmctcGF5bWVudC1tZXRob2QnLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9LFxuICAgIG1vZGU6ICdzZXR1cCcsXG4gICAgcGF5bWVudF9tZXRob2RfdHlwZXM6IFsnY2FyZCddLFxuICAgIHNldHVwX2ludGVudF9kYXRhOiB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICB0eXBlOiAnYmlsbGluZy1wYXltZW50LW1ldGhvZCcsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9XG4gICAgfSxcbiAgICBzdWNjZXNzX3VybDogZ2V0Q2hlY2tvdXRSZXR1cm5VcmwocGFyc2VkUmV0dXJuVXJsLCAnc3VjY2VzcycpXG4gIH0pO1xuICBjb25zdCBjaGVja291dFVybCA9IFN0cmluZyhjaGVja291dFNlc3Npb24udXJsIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIWNoZWNrb3V0VXJsKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrb3V0VXJsO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlQmlsbGluZ1NldHVwU2Vzc2lvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY2hlY2tvdXRTZXNzaW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBzZXNzaW9uSWQgPSBTdHJpbmcoY29udGV4dC5zZXNzaW9uPy51c2VySWQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qgbm9ybWFsaXplZENoZWNrb3V0U2Vzc2lvbklkID0gU3RyaW5nKGNoZWNrb3V0U2Vzc2lvbklkIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpO1xuICB9XG5cbiAgaWYoIW5vcm1hbGl6ZWRDaGVja291dFNlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfYmlsbGluZ19zZXR1cF9zZXNzaW9uJyk7XG4gIH1cblxuICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuICBjb25zdCBzdHJpcGVDdXN0b21lcklkID0gU3RyaW5nKGN1cnJlbnRVc2VyPy5zdHJpcGVDdXN0b21lcklkIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXN0cmlwZUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gIH1cblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcbiAgY29uc3QgY2hlY2tvdXRTZXNzaW9uID0gYXdhaXQgc3RyaXBlQ2xpZW50LmNoZWNrb3V0LnNlc3Npb25zLnJldHJpZXZlKFxuICAgIG5vcm1hbGl6ZWRDaGVja291dFNlc3Npb25JZCxcbiAgICB7ZXhwYW5kOiBbJ3NldHVwX2ludGVudC5wYXltZW50X21ldGhvZCddfVxuICApO1xuICBjb25zdCBjaGVja291dEN1c3RvbWVySWQgPSB0eXBlb2YgY2hlY2tvdXRTZXNzaW9uLmN1c3RvbWVyID09PSAnc3RyaW5nJ1xuICAgID8gY2hlY2tvdXRTZXNzaW9uLmN1c3RvbWVyXG4gICAgOiBjaGVja291dFNlc3Npb24uY3VzdG9tZXI/LmlkO1xuXG4gIGlmKFxuICAgIGNoZWNrb3V0U2Vzc2lvbi5tb2RlICE9PSAnc2V0dXAnXG4gICAgfHwgY2hlY2tvdXRTZXNzaW9uLnN0YXR1cyAhPT0gJ2NvbXBsZXRlJ1xuICAgIHx8IGNoZWNrb3V0Q3VzdG9tZXJJZCAhPT0gc3RyaXBlQ3VzdG9tZXJJZFxuICAgIHx8IGNoZWNrb3V0U2Vzc2lvbi5tZXRhZGF0YT8udXNlcklkICE9PSBzZXNzaW9uSWRcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9iaWxsaW5nX3NldHVwX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGNvbnN0IHNldHVwSW50ZW50ID0gdHlwZW9mIGNoZWNrb3V0U2Vzc2lvbi5zZXR1cF9pbnRlbnQgPT09ICdzdHJpbmcnXG4gICAgPyBhd2FpdCBzdHJpcGVDbGllbnQuc2V0dXBJbnRlbnRzLnJldHJpZXZlKGNoZWNrb3V0U2Vzc2lvbi5zZXR1cF9pbnRlbnQsIHtleHBhbmQ6IFsncGF5bWVudF9tZXRob2QnXX0pXG4gICAgOiBjaGVja291dFNlc3Npb24uc2V0dXBfaW50ZW50O1xuXG4gIGlmKCFzZXR1cEludGVudCB8fCBzZXR1cEludGVudC5zdGF0dXMgIT09ICdzdWNjZWVkZWQnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignYmlsbGluZ19zZXR1cF9pbmNvbXBsZXRlJyk7XG4gIH1cblxuICBjb25zdCBwYXltZW50TWV0aG9kID0gdHlwZW9mIHNldHVwSW50ZW50LnBheW1lbnRfbWV0aG9kID09PSAnc3RyaW5nJ1xuICAgID8gYXdhaXQgc3RyaXBlQ2xpZW50LnBheW1lbnRNZXRob2RzLnJldHJpZXZlKHNldHVwSW50ZW50LnBheW1lbnRfbWV0aG9kKVxuICAgIDogc2V0dXBJbnRlbnQucGF5bWVudF9tZXRob2Q7XG4gIGNvbnN0IHBheW1lbnRNZXRob2RDdXN0b21lcklkID0gdHlwZW9mIHBheW1lbnRNZXRob2Q/LmN1c3RvbWVyID09PSAnc3RyaW5nJ1xuICAgID8gcGF5bWVudE1ldGhvZC5jdXN0b21lclxuICAgIDogcGF5bWVudE1ldGhvZD8uY3VzdG9tZXI/LmlkO1xuXG4gIGlmKCFwYXltZW50TWV0aG9kIHx8IHBheW1lbnRNZXRob2QudHlwZSAhPT0gJ2NhcmQnIHx8ICFwYXltZW50TWV0aG9kLmNhcmQgfHwgcGF5bWVudE1ldGhvZEN1c3RvbWVySWQgIT09IHN0cmlwZUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX2JpbGxpbmdfcGF5bWVudF9tZXRob2QnKTtcbiAgfVxuXG4gIGF3YWl0IHN0cmlwZUNsaWVudC5jdXN0b21lcnMudXBkYXRlKHN0cmlwZUN1c3RvbWVySWQsIHtcbiAgICBpbnZvaWNlX3NldHRpbmdzOiB7ZGVmYXVsdF9wYXltZW50X21ldGhvZDogcGF5bWVudE1ldGhvZC5pZH1cbiAgfSk7XG5cbiAgY29uc3QgY3VycmVudFN0cmlwZUNhcmRJZCA9IFN0cmluZyhjdXJyZW50VXNlcj8uc3RyaXBlQ2FyZElkIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoY3VycmVudFN0cmlwZUNhcmRJZC5zdGFydHNXaXRoKCdwbV8nKSAmJiBjdXJyZW50U3RyaXBlQ2FyZElkICE9PSBwYXltZW50TWV0aG9kLmlkKSB7XG4gICAgYXdhaXQgc3RyaXBlQ2xpZW50LnBheW1lbnRNZXRob2RzLmRldGFjaChjdXJyZW50U3RyaXBlQ2FyZElkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVVc2VyQmlsbGluZ1BheW1lbnRNZXRob2QoY29udGV4dCwge1xuICAgIHN0cmlwZUNhcmRCcmFuZDogU3RyaW5nKHBheW1lbnRNZXRob2QuY2FyZC5icmFuZCB8fCAnJykudHJpbSgpLFxuICAgIHN0cmlwZUNhcmRJZDogcGF5bWVudE1ldGhvZC5pZCxcbiAgICBzdHJpcGVDYXJkTGFzdDQ6IFN0cmluZyhwYXltZW50TWV0aG9kLmNhcmQubGFzdDQgfHwgJycpLnRyaW0oKVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyQmlsbGluZ0NhcmQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVVzZXJCaWxsaW5nQ2FyZCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgY3VycmVudFVzZXIgPSBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KTtcbiAgY29uc3Qgc3RyaXBlQ3VzdG9tZXJJZCA9IFN0cmluZyhjdXJyZW50VXNlcj8uc3RyaXBlQ3VzdG9tZXJJZCB8fCAnJyk7XG4gIGNvbnN0IHN0cmlwZUNhcmRJZCA9IFN0cmluZyhjdXJyZW50VXNlcj8uc3RyaXBlQ2FyZElkIHx8ICcnKTtcbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgdHJ5IHtcbiAgICBpZihzdHJpcGVDdXN0b21lcklkICYmIHN0cmlwZUNhcmRJZCkge1xuICAgICAgaWYoc3RyaXBlQ2FyZElkLnN0YXJ0c1dpdGgoJ3BtXycpKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbWVyID0gYXdhaXQgc3RyaXBlQ2xpZW50LmN1c3RvbWVycy5yZXRyaWV2ZShzdHJpcGVDdXN0b21lcklkKTtcblxuICAgICAgICBpZighKCdkZWxldGVkJyBpbiBjdXN0b21lcikgJiYgY3VzdG9tZXIuaW52b2ljZV9zZXR0aW5ncy5kZWZhdWx0X3BheW1lbnRfbWV0aG9kID09PSBzdHJpcGVDYXJkSWQpIHtcbiAgICAgICAgICBhd2FpdCBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLnVwZGF0ZShzdHJpcGVDdXN0b21lcklkLCB7XG4gICAgICAgICAgICBpbnZvaWNlX3NldHRpbmdzOiB7ZGVmYXVsdF9wYXltZW50X21ldGhvZDogbnVsbH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHN0cmlwZUNsaWVudC5wYXltZW50TWV0aG9kcy5kZXRhY2goc3RyaXBlQ2FyZElkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHN0cmlwZUNsaWVudC5jdXN0b21lcnMuZGVsZXRlU291cmNlKHN0cmlwZUN1c3RvbWVySWQsIHN0cmlwZUNhcmRJZCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVVzZXJCaWxsaW5nUGF5bWVudE1ldGhvZChjb250ZXh0LCB7XG4gICAgICBzdHJpcGVDYXJkQnJhbmQ6ICcnLFxuICAgICAgc3RyaXBlQ2FyZElkOiAnJyxcbiAgICAgIHN0cmlwZUNhcmRMYXN0NDogJydcbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsImFxbCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsIlVzZXJFcnJvciIsInVzZURiIiwiaGFzQWNjZXNzTGV2ZWwiLCJnZXRTdHJpcGVDbGllbnQiLCJnZXRVc2VyQnlJZCIsImV2ZW50Q2F0ZWdvcnkiLCJQTFVTX1BMQU5fSUQiLCJQTFVTX1BMQU5fQU1PVU5UIiwiUExVU19QTEFOX0FDQ0VTUyIsImFkZEN1c3RvbWVyQWNjb3VudCIsImNvbnRleHQiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwidXNlcm5hbWUiLCJzdHJpcGVDbGllbnQiLCJjdXN0b21lcnMiLCJjcmVhdGUiLCJtZXRhZGF0YSIsInRoZW4iLCJjdXN0b21lciIsIm5vdyIsIkRhdGUiLCJ1cGRhdGUiLCJtb2RpZmllZCIsInN0cmlwZUN1c3RvbWVySWQiLCJpZCIsImFxbFFyeSIsInF1ZXJ5IiwiY3Vyc29yIiwibmV4dCIsInVwZGF0ZWRVc2VyIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImFkZEJhbmtBY2NvdW50IiwiYmFua0FjY291bnQiLCJhY2NvdW50TnVtYmVyIiwiZnVsbE5hbWUiLCJyb3V0aW5nIiwiZm9ybWF0QWNjb3VudCIsImZvcm1hdEZ1bGxOYW1lIiwiZm9ybWF0Um91dGluZyIsInVzZXIiLCJzdHJpcGVBY2NvdW50SWQiLCJ0b2tlbnMiLCJiYW5rX2FjY291bnQiLCJhY2NvdW50X2hvbGRlcl9uYW1lIiwiYWNjb3VudF9ob2xkZXJfdHlwZSIsImFjY291bnRfbnVtYmVyIiwiY291bnRyeSIsImN1cnJlbmN5Iiwicm91dGluZ19udW1iZXIiLCJ0b2tlbiIsImNyZWF0ZVNvdXJjZSIsInNvdXJjZSIsImFjY291bnQiLCJiYW5rRnVsbE5hbWUiLCJiYW5rSWQiLCJiYW5rUm91dGluZyIsIm1zZyIsIm1lc3NhZ2UiLCJ1cGRhdGVDcmVkaXRDYXJkIiwiY2FyZCIsImNpdHkiLCJleHBNb250aCIsImV4cFllYXIiLCJzdHJlZXQxIiwic3RhdGUiLCJ6aXAiLCJmb3JtYXRJZCIsInBheW1lbnRDYXJkIiwiZm9ybWF0RXhwTW9udGgiLCJmb3JtYXRFeHBZZWFyIiwiZm9ybWF0Q2l0eSIsImZvcm1hdENvdW50cnkiLCJmb3JtYXRTdHJlZXQxIiwiZm9ybWF0U3RhdGUiLCJmb3JtYXRaaXAiLCJyZXN1bHRzIiwidXBkYXRlZENhcmQiLCJzdHJpcGVJZCIsImFkZHJlc3NfY2l0eSIsImFkZHJlc3NfY291bnRyeSIsImFkZHJlc3NfbGluZTEiLCJhZGRyZXNzX3N0YXRlIiwiYWRkcmVzc196aXAiLCJleHBfbW9udGgiLCJ0b1N0cmluZyIsImV4cF95ZWFyIiwibmFtZSIsInVwZGF0ZVNvdXJjZSIsImNvbnNvbGUiLCJsb2ciLCJnZXRDcmVkaXRDYXJkcyIsImFsbCIsImxpc3QiLCJkZWxldGVDcmVkaXRDYXJkIiwiY2FyZElkIiwiZm9ybWF0Q2FyZElkIiwicmVzdWx0IiwiX2tleSIsImNhcmRLZXkiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJvdXRFZGdlcyIsInJlc3BvbnNlIiwiZWRnZXMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJQcm9taXNlIiwibWFwIiwiZWRnZSIsImVkZ2VLZXkiLCJyZW1vdmVBcWxRcnkiLCJkZWxldGVTb3VyY2UiLCJkZWxldGVCYW5rQWNjb3VudCIsInJlc29sdmUiLCJjcmVhdGVQYXltZW50VHJhbnNmZXIiLCJ0cmFuc2ZlciIsImFtb3VudCIsImZvcm1hdEFtb3VudCIsImZvcm1hdEN1cnJlbmN5IiwidG9VcHBlckNhc2UiLCJ0cmFuc2ZlcnMiLCJkZXN0aW5hdGlvbiIsInN0cmlwZVRyYW5zZmVyIiwiaW5zZXJ0IiwiYWRkZWQiLCJuZXdUcmFuc2ZlciIsImNyZWF0ZVBheW1lbnRIb2xkIiwicGF5bWVudCIsImNhcHR1cmUiLCJkZXNjcmlwdGlvbiIsImNoYXJnZXMiLCJzdHJpcGVDaGFyZ2UiLCJjaGFyZ2VGYWlsQ29kZSIsImZhaWx1cmVfY29kZSIsImNoYXJnZUZhaWxNc2ciLCJmYWlsdXJlX21lc3NhZ2UiLCJjaGFyZ2VJZCIsImNoYXJnZVN0YXR1cyIsInN0YXR1cyIsIm5ld1BheW1lbnQiLCJlbnN1cmVTdHJpcGVDdXN0b21lcklkIiwiU3RyaW5nIiwiZ2V0Q29uZmlndXJlZEJpbGxpbmdPcmlnaW5zIiwiY29uZmlndXJlZE9yaWdpbnMiLCJwcm9jZXNzIiwiZW52IiwiU1RSSVBFX1JFVFVSTl9VUkxfT1JJR0lOUyIsInNwbGl0Iiwib3JpZ2luIiwidHJpbSIsImZpbHRlciIsIkJvb2xlYW4iLCJhcHBVcmwiLCJjb25maWciLCJkZXRhaWxzIiwidXJsIiwicHVzaCIsImluY2x1ZGVzIiwiU2V0IiwiVVJMIiwicGFyc2VCaWxsaW5nUmV0dXJuVXJsIiwicmV0dXJuVXJsIiwicGFyc2VkVXJsIiwiaXNMb2NhbERldmVsb3BtZW50VXJsIiwicHJvdG9jb2wiLCJob3N0bmFtZSIsImlzU2VjdXJlVXJsIiwiYWxsb3dlZE9yaWdpbnMiLCJoYXMiLCJoYXNoIiwiZ2V0Q2hlY2tvdXRSZXR1cm5VcmwiLCJuZXh0VXJsIiwic2VhcmNoUGFyYW1zIiwic2V0IiwicmVwbGFjZSIsInVwZGF0ZVVzZXJCaWxsaW5nUGF5bWVudE1ldGhvZCIsInVzZXJVcGRhdGUiLCJlbnN1cmVQbHVzU3RyaXBlUGxhbiIsInBsYW5zIiwicmV0cmlldmUiLCJpbnRlcnZhbCIsImludGVydmFsX2NvdW50IiwicGxhbklkIiwidHlwZSIsInByb2R1Y3QiLCJ1cGdyYWRlVXNlclRvUGx1cyIsImN1cnJlbnRVc2VyIiwicGxhblN1YnNjcmlwdGlvbklkIiwic3RyaXBlQ2FyZElkIiwic3RyaXBlUGxhbklkIiwic3RyaXBlU3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9ucyIsIml0ZW1zIiwicGxhbiIsInN0cmlwZVBlcmlvZEVuZCIsIk51bWJlciIsImN1cnJlbnRfcGVyaW9kX2VuZCIsInBsYW5FeHBpcmVzIiwicGxhblN0YXR1cyIsInVzZXJBY2Nlc3MiLCJjcmVhdGVCaWxsaW5nU2V0dXBTZXNzaW9uIiwicGFyc2VkUmV0dXJuVXJsIiwiY2hlY2tvdXRTZXNzaW9uIiwiY2hlY2tvdXQiLCJzZXNzaW9ucyIsImNhbmNlbF91cmwiLCJtb2RlIiwicGF5bWVudF9tZXRob2RfdHlwZXMiLCJzZXR1cF9pbnRlbnRfZGF0YSIsInN1Y2Nlc3NfdXJsIiwiY2hlY2tvdXRVcmwiLCJjb21wbGV0ZUJpbGxpbmdTZXR1cFNlc3Npb24iLCJjaGVja291dFNlc3Npb25JZCIsIm5vcm1hbGl6ZWRDaGVja291dFNlc3Npb25JZCIsImV4cGFuZCIsImNoZWNrb3V0Q3VzdG9tZXJJZCIsInNldHVwSW50ZW50Iiwic2V0dXBfaW50ZW50Iiwic2V0dXBJbnRlbnRzIiwicGF5bWVudE1ldGhvZCIsInBheW1lbnRfbWV0aG9kIiwicGF5bWVudE1ldGhvZHMiLCJwYXltZW50TWV0aG9kQ3VzdG9tZXJJZCIsImludm9pY2Vfc2V0dGluZ3MiLCJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIiwiY3VycmVudFN0cmlwZUNhcmRJZCIsInN0YXJ0c1dpdGgiLCJkZXRhY2giLCJzdHJpcGVDYXJkQnJhbmQiLCJicmFuZCIsInN0cmlwZUNhcmRMYXN0NCIsImxhc3Q0IiwiZGVsZXRlVXNlckJpbGxpbmdDYXJkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQVFDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksUUFBTywrQkFBK0I7QUFDM0YsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFLN0IsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUduRCxTQUFRQyxRQUFRLEVBQUVDLFNBQVMsUUFBTyw2QkFBNkI7QUFDL0QsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxjQUFjLFFBQU8sMkJBQTJCO0FBQ3hELFNBQVFDLGVBQWUsUUFBTywwQkFBMEI7QUFDeEQsU0FBUUMsV0FBVyxRQUFPLGFBQWE7QUFHdkMsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGVBQWU7QUFDckIsTUFBTUMsbUJBQW1CO0FBQ3pCLE1BQU1DLG1CQUFtQjtBQUV6QixPQUFPLE1BQU1DLHFCQUFxQixDQUFDQztJQUNqQyxNQUFNQyxTQUFTO0lBQ2YsTUFBTSxFQUFDQyxZQUFZLEVBQUVDLFNBQVMsRUFBQ0MsUUFBUUMsU0FBUyxFQUFFQyxRQUFR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
|
|
606
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgc3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7QmlsbGluZ1NldHVwU2Vzc2lvbk9wdGlvbnMsIFBheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXJ9IGZyb20gJy4uL3R5cGVzL3BheW1lbnRzLnR5cGVzLmpzJztcbmltcG9ydCB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2hhc0FjY2Vzc0xldmVsfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRTdHJpcGVDbGllbnR9IGZyb20gJy4uL3V0aWxzL3N0cmlwZVV0aWxzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5SWR9IGZyb20gJy4vdXNlcnMuanMnO1xuXG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncGF5bWVudHMnO1xuY29uc3QgUExVU19QTEFOX0lEID0gJ3BoYW50YXplLXBsdXMtbW9udGhseSc7XG5jb25zdCBQTFVTX1BMQU5fQU1PVU5UID0gMTAwMDtcbmNvbnN0IFBMVVNfUExBTl9BQ0NFU1MgPSAxO1xuXG5leHBvcnQgY29uc3QgYWRkQ3VzdG9tZXJBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEN1c3RvbWVyQWNjb3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9ID0ge319ID0gY29udGV4dDtcblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSBhcyBhbnkpXG4gICAgLnRoZW4oKGN1c3RvbWVyKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHN0cmlwZUN1c3RvbWVySWQ6IGN1c3RvbWVyLmlkXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiAhIXVwZGF0ZWRVc2VyKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0FjY291bnQ6IFBheW1lbnRCYW5rQWNjb3VudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUGF5bWVudEFjY291bnRCYW5rJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgLy8gUGFyYW1zXG4gIGNvbnN0IHtcbiAgICBhY2NvdW50TnVtYmVyLFxuICAgIGZ1bGxOYW1lLFxuICAgIHJvdXRpbmdcbiAgfSA9IGJhbmtBY2NvdW50O1xuXG4gIGNvbnN0IGZvcm1hdEFjY291bnQgPSBwYXJzZVN0cmluZyhhY2NvdW50TnVtYmVyLCAzMik7XG5cbiAgaWYoZm9ybWF0QWNjb3VudCA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9hY2NvdW50X251bWJlcicpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0RnVsbE5hbWUgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nID0gcGFyc2VTdHJpbmcocm91dGluZywgMzIpO1xuXG4gIGlmKGZvcm1hdFJvdXRpbmcgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfcm91dGluZ19udW1iZXInKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIHRva2VuIGZpcnN0LCB0aGVuIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHNvdXJjZVxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC50b2tlbnMuY3JlYXRlKHtcbiAgICAgICAgYmFua19hY2NvdW50OiB7XG4gICAgICAgICAgYWNjb3VudF9ob2xkZXJfbmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgYWNjb3VudF9ob2xkZXJfdHlwZTogJ2luZGl2aWR1YWwnLFxuICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBmb3JtYXRBY2NvdW50LFxuICAgICAgICAgIGNvdW50cnk6ICdVUycsXG4gICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICAgIHJvdXRpbmdfbnVtYmVyOiBmb3JtYXRSb3V0aW5nXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKCh0b2tlbikgPT4gc3RyaXBlQ2xpZW50LmN1c3RvbWVycy5jcmVhdGVTb3VyY2UoXG4gICAgICAgICAgc3RyaXBlQWNjb3VudElkLFxuICAgICAgICAgIHtzb3VyY2U6IHRva2VuLmlkfVxuICAgICAgICApKVxuICAgICAgICAudGhlbigoYWNjb3VudCkgPT4ge1xuICAgICAgICAgIC8vIFVzZSB0eXBlIGFzc2VydGlvbiBmb3IgY2FyZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgLy8gY29uc3QgY2FyZFNvdXJjZSA9IGFjY291bnQgYXMgdW5rbm93biBhcyBDYXJkO1xuICAgICAgICAgIC8vIGNvbnN0IGJyYW5kID0gY2FyZFNvdXJjZS5icmFuZCB8fCAnJztcbiAgICAgICAgICAvLyBjb25zdCBjdmNDaGVjayA9IGNhcmRTb3VyY2UuY3ZjX2NoZWNrIHx8ICcnO1xuICAgICAgICAgIC8vIGNvbnN0IGxhc3Q0ID0gY2FyZFNvdXJjZS5sYXN0NCB8fCAnJztcblxuICAgICAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudCxcbiAgICAgICAgICAgIGJhbmtGdWxsTmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgICBiYW5rSWQ6IGFjY291bnQuaWQsXG4gICAgICAgICAgICBiYW5rUm91dGluZzogZm9ybWF0Um91dGluZyxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3dcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyVHlwZSkgPT4gdXBkYXRlZFVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgICBpZihtc2cgPT09ICdBIGJhbmsgYWNjb3VudCB3aXRoIHRoYXQgcm91dGluZyBudW1iZXIgYW5kIGFjY291bnQgbnVtYmVyICcgK1xuICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzIGZvciB0aGlzIGN1c3RvbWVyLicpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAnYmFua19hY2NvdW50X2V4aXN0cydcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZDogUGF5bWVudENhcmRUeXBlKTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgZXhwTW9udGgsXG4gICAgZXhwWWVhcixcbiAgICBmdWxsTmFtZSxcbiAgICBpZCxcbiAgICBzdHJlZXQxLFxuICAgIHN0YXRlLFxuICAgIHppcFxuICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChpZCk7XG5cbiAgaWYoZm9ybWF0SWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9pZCcpO1xuICB9XG5cbiAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9O1xuICBjb25zdCBmb3JtYXRFeHBNb250aCA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcbiAgY29uc3QgZm9ybWF0RXhwWWVhciA9IHBhcnNlTnVtKGV4cFllYXIsIDIpO1xuICBjb25zdCBmb3JtYXRDaXR5ID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcbiAgY29uc3QgZm9ybWF0Q291bnRyeSA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcbiAgY29uc3QgZm9ybWF0RnVsbE5hbWUgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RyZWV0MSA9IHBhcnNlU3RyaW5nKHN0cmVldDEsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RhdGUgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuICBjb25zdCBmb3JtYXRaaXAgPSBwYXJzZVZhckNoYXIoemlwLCAxMCk7XG5cbiAgaWYoZm9ybWF0RXhwTW9udGgpIHtcbiAgICBwYXltZW50Q2FyZC5leHBNb250aCA9IGZvcm1hdEV4cE1vbnRoO1xuICB9XG5cbiAgaWYoZm9ybWF0RXhwWWVhcikge1xuICAgIHBheW1lbnRDYXJkLmV4cFllYXIgPSBmb3JtYXRFeHBZZWFyO1xuICB9XG5cbiAgaWYoZm9ybWF0Q2l0eSkge1xuICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICB9XG5cbiAgaWYoZm9ybWF0Q291bnRyeSkge1xuICAgIHBheW1lbnRDYXJkLmNvdW50cnkgPSBmb3JtYXRDb3VudHJ5O1xuICB9XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICBwYXltZW50Q2FyZC5mdWxsTmFtZSA9IGZvcm1hdEZ1bGxOYW1lO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgIHBheW1lbnRDYXJkLnN0cmVldDEgPSBmb3JtYXRTdHJlZXQxO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RhdGUpIHtcbiAgICBwYXltZW50Q2FyZC5zdGF0ZSA9IGZvcm1hdFN0YXRlO1xuICB9XG5cbiAgaWYoZm9ybWF0WmlwKSB7XG4gICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlID0gcGF5bWVudENhcmQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBMRVQgdXBkYXRlZENhcmQgPSBGSVJTVChcbiAgICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgVVBEQVRFIGMgV0lUSCAke3VwZGF0ZX0gSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gTkVXXG4gICAgICApXG4gICAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1XG4gICAgICApXG4gICAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IHVwZGF0ZWRDYXJkfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdHMgPSB7Y2FyZDoge30sIHVzZXI6IHt9fSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHJlc3VsdHMuY2FyZDtcbiAgICAgIGNvbnN0IHt1c2VyfSA9IHJlc3VsdHM7XG5cbiAgICAgIGlmKCF1cGRhdGVkQ2FyZCkge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdub3RfZm91bmQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge3N0cmlwZUN1c3RvbWVySWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHtzdHJpcGVJZH0gPSBjYXJkO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG4gICAgICBjb25zdCB1cGRhdGU6IHN0cmlwZS5DdXN0b21lclVwZGF0ZVNvdXJjZVBhcmFtcyA9IHtcbiAgICAgICAgYWRkcmVzc19jaXR5OiBmb3JtYXRDaXR5LFxuICAgICAgICBhZGRyZXNzX2NvdW50cnk6IGZvcm1hdENvdW50cnksXG4gICAgICAgIGFkZHJlc3NfbGluZTE6IGZvcm1hdFN0cmVldDEsXG4gICAgICAgIGFkZHJlc3Nfc3RhdGU6IGZvcm1hdFN0YXRlLFxuICAgICAgICBhZGRyZXNzX3ppcDogZm9ybWF0WmlwLFxuICAgICAgICBleHBfbW9udGg6IGZvcm1hdEV4cE1vbnRoLnRvU3RyaW5nKCksXG4gICAgICAgIGV4cF95ZWFyOiBmb3JtYXRFeHBZZWFyLnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGZvcm1hdEZ1bGxOYW1lXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAudXBkYXRlU291cmNlKHN0cmlwZUN1c3RvbWVySWQsIHN0cmlwZUlkLCB1cGRhdGUpXG4gICAgICAgIC50aGVuKCgpID0+IGNhcmQpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjp1cGRhdGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENyZWRpdENhcmRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDcmVkaXRDYXJkcyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgIEZJTFRFUiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdDogUGF5bWVudENhcmRUeXBlW10gPSBbXSkgPT4gbGlzdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVDcmVkaXRDYXJkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNhcmRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q2FyZElkID0gcGFyc2VJZChjYXJkSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCBjYXJkID0gRklSU1QoXG4gICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdENhcmRJZH0gJiYgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgUkVUVVJOIE9MRFxuICAgIClcbiAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IGNhcmR9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0ID0ge2NhcmQ6IHt9LCB1c2VyOiB7fX0pID0+IHtcbiAgICAgIGlmKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7Y2FyZCwgdXNlcn0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7X2tleTogY2FyZEtleX0gPSBjYXJkO1xuXG4gICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzUGF5bWVudCcpO1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24ub3V0RWRnZXMoY2FyZEtleSwge30pXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIC8vIEV4dHJhY3QgZWRnZXMgZnJvbSB0aGUgcmVzcG9uc2VcbiAgICAgICAgICBjb25zdCBlZGdlcyA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2UpID8gcmVzcG9uc2UgOiBbXTtcblxuICAgICAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtfa2V5OiBlZGdlS2V5fSA9IGVkZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaGFzUGF5bWVudGA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocmVtb3ZlQXFsUXJ5KTtcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcGVcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlU291cmNlKHVzZXIuc3RyaXBlQ3VzdG9tZXJJZCwgY2FyZC5zdHJpcGVJZClcbiAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmRlbGV0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIC8vIENsZWFuIGRiXG4gIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgYmFua0FjY291bnQ6ICcnLFxuICAgIGJhbmtGdWxsTmFtZTogJycsXG4gICAgYmFua0lkOiAnJyxcbiAgICBiYW5rUm91dGluZzogJycsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLmRlbGV0ZVNvdXJjZShzdHJpcGVBY2NvdW50SWQsIGJhbmtJZClcbiAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKCgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRUcmFuc2ZlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0cmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKTogUHJvbWlzZTxQYXltZW50VHJhbnNmZXI+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeX0gPSB0cmFuc2ZlcjtcbiAgY29uc3QgZm9ybWF0QW1vdW50ID0gcGFyc2VOdW0oYW1vdW50KTtcbiAgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSBwYXJzZUNoYXIoY3VycmVuY3ksIDMsICdVU0QnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIHJldHVybiBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudHJhbnNmZXJzXG4gICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaXBlQWNjb3VudElkXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChzdHJpcGVUcmFuc2ZlcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmlwZVRyYW5zZmVyKTtcbiAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudFRyYW5zZmVyID0ge1xuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gdHJhbnNmZXJzIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdUcmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKSA9PiBuZXdUcmFuc2Zlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRIb2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBheW1lbnQ6IFBheW1lbnRDaGFyZ2UpOiBQcm9taXNlPFBheW1lbnRDaGFyZ2U+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiBzdHJpcGVDbGllbnQuY2hhcmdlc1xuICAgIC5jcmVhdGUoe1xuICAgICAgYW1vdW50LFxuICAgICAgY2FwdHVyZSxcbiAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc291cmNlOiBjYXJkSWRcbiAgICB9KVxuICAgIC50aGVuKChzdHJpcGVDaGFyZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRDaGFyZ2UgPSB7XG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY2FwdHVyZSxcbiAgICAgICAgY2FyZElkLFxuICAgICAgICBjaGFyZ2VGYWlsQ29kZTogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfY29kZSxcbiAgICAgICAgY2hhcmdlRmFpbE1zZzogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfbWVzc2FnZSxcbiAgICAgICAgY2hhcmdlSWQ6IHN0cmlwZUNoYXJnZS5pZCxcbiAgICAgICAgY2hhcmdlU3RhdHVzOiBzdHJpcGVDaGFyZ2Uuc3RhdHVzLFxuICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwYXltZW50cyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigobmV3UGF5bWVudDogUGF5bWVudENoYXJnZSkgPT4gbmV3UGF5bWVudCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjpjcmVhdGVIb2xkOjplcnJvcicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGVuc3VyZVN0cmlwZUN1c3RvbWVySWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25JZCA9IFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpO1xuICBsZXQgdXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuXG4gIGlmKCF1c2VyPy5zdHJpcGVDdXN0b21lcklkKSB7XG4gICAgYXdhaXQgYWRkQ3VzdG9tZXJBY2NvdW50KGNvbnRleHQpO1xuICAgIHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KTtcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcodXNlcj8uc3RyaXBlQ3VzdG9tZXJJZCB8fCAnJyk7XG59O1xuXG5jb25zdCBnZXRDb25maWd1cmVkQmlsbGluZ09yaWdpbnMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFNldDxzdHJpbmc+ID0+IHtcbiAgY29uc3QgY29uZmlndXJlZE9yaWdpbnMgPSBTdHJpbmcocHJvY2Vzcy5lbnYuU1RSSVBFX1JFVFVSTl9VUkxfT1JJR0lOUyB8fCAnJylcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKG9yaWdpbikgPT4gb3JpZ2luLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBhcHBVcmwgPSBTdHJpbmcoY29udGV4dC5jb25maWc/LmRldGFpbHM/LnVybCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKGFwcFVybCkge1xuICAgIGNvbmZpZ3VyZWRPcmlnaW5zLnB1c2goYXBwVXJsLmluY2x1ZGVzKCc6Ly8nKSA/IGFwcFVybCA6IGBodHRwczovLyR7YXBwVXJsfWApO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZXQoY29uZmlndXJlZE9yaWdpbnMubWFwKChvcmlnaW4pID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwob3JpZ2luKS5vcmlnaW47XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9KS5maWx0ZXIoQm9vbGVhbikpO1xufTtcblxuY29uc3QgcGFyc2VCaWxsaW5nUmV0dXJuVXJsID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHJldHVyblVybDogc3RyaW5nKTogVVJMID0+IHtcbiAgbGV0IHBhcnNlZFVybDogVVJMO1xuXG4gIHRyeSB7XG4gICAgcGFyc2VkVXJsID0gbmV3IFVSTChTdHJpbmcocmV0dXJuVXJsIHx8ICcnKS50cmltKCkpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX2JpbGxpbmdfcmV0dXJuX3VybCcpO1xuICB9XG5cbiAgY29uc3QgaXNMb2NhbERldmVsb3BtZW50VXJsID0gcGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cDonXG4gICAgJiYgWycxMjcuMC4wLjEnLCAnbG9jYWxob3N0J10uaW5jbHVkZXMocGFyc2VkVXJsLmhvc3RuYW1lKTtcbiAgY29uc3QgaXNTZWN1cmVVcmwgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICBjb25zdCBhbGxvd2VkT3JpZ2lucyA9IGdldENvbmZpZ3VyZWRCaWxsaW5nT3JpZ2lucyhjb250ZXh0KTtcblxuICBpZigoIWlzU2VjdXJlVXJsICYmICFpc0xvY2FsRGV2ZWxvcG1lbnRVcmwpIHx8ICghaXNMb2NhbERldmVsb3BtZW50VXJsICYmICFhbGxvd2VkT3JpZ2lucy5oYXMocGFyc2VkVXJsLm9yaWdpbikpKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9iaWxsaW5nX3JldHVybl91cmwnKTtcbiAgfVxuXG4gIHBhcnNlZFVybC5oYXNoID0gJyc7XG4gIHJldHVybiBwYXJzZWRVcmw7XG59O1xuXG5jb25zdCBnZXRDaGVja291dFJldHVyblVybCA9IChyZXR1cm5Vcmw6IFVSTCwgc3RhdHVzOiAnY2FuY2VsZWQnIHwgJ3N1Y2Nlc3MnKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmV4dFVybCA9IG5ldyBVUkwocmV0dXJuVXJsLnRvU3RyaW5nKCkpO1xuXG4gIG5leHRVcmwuc2VhcmNoUGFyYW1zLnNldCgnYmlsbGluZycsIHN0YXR1cyk7XG4gIGlmKHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgbmV4dFVybC5zZWFyY2hQYXJhbXMuc2V0KCdzZXNzaW9uX2lkJywgJ3tDSEVDS09VVF9TRVNTSU9OX0lEfScpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRVcmwudG9TdHJpbmcoKS5yZXBsYWNlKCclN0JDSEVDS09VVF9TRVNTSU9OX0lEJTdEJywgJ3tDSEVDS09VVF9TRVNTSU9OX0lEfScpO1xufTtcblxuY29uc3QgdXBkYXRlVXNlckJpbGxpbmdQYXltZW50TWV0aG9kID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1cGRhdGU6IFBhcnRpYWw8VXNlclR5cGU+XG4pOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25JZCA9IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCB1c2VyVXBkYXRlOiBQYXJ0aWFsPFVzZXJUeXBlPiA9IHttb2RpZmllZDogRGF0ZS5ub3coKSwgLi4udXBkYXRlfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1c2VyVXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB1c2VyKTtcbn07XG5cbmNvbnN0IGVuc3VyZVBsdXNTdHJpcGVQbGFuID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgc3RyaXBlQ2xpZW50LnBsYW5zLnJldHJpZXZlKFBMVVNfUExBTl9JRCk7XG4gICAgcmV0dXJuIFBMVVNfUExBTl9JRDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGF3YWl0IHN0cmlwZUNsaWVudC5wbGFucy5jcmVhdGUoe1xuICAgICAgYW1vdW50OiBQTFVTX1BMQU5fQU1PVU5ULFxuICAgICAgY3VycmVuY3k6ICd1c2QnLFxuICAgICAgaWQ6IFBMVVNfUExBTl9JRCxcbiAgICAgIGludGVydmFsOiAnbW9udGgnLFxuICAgICAgaW50ZXJ2YWxfY291bnQ6IDEsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBwbGFuSWQ6ICdwbHVzJyxcbiAgICAgICAgdHlwZTogJ2FjY291bnQnXG4gICAgICB9LFxuICAgICAgcHJvZHVjdDoge1xuICAgICAgICBuYW1lOiAnUGhhbnRhemUgUGx1cydcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBQTFVTX1BMQU5fSUQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGdyYWRlVXNlclRvUGx1cyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBncmFkZVVzZXJUb1BsdXMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9zZXNzaW9uJyk7XG4gIH1cblxuICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuXG4gIGlmKGhhc0FjY2Vzc0xldmVsKGN1cnJlbnRVc2VyLCBQTFVTX1BMQU5fQUNDRVNTKSAmJiBjdXJyZW50VXNlcj8ucGxhblN1YnNjcmlwdGlvbklkKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyO1xuICB9XG5cbiAgaWYoIWN1cnJlbnRVc2VyPy5zdHJpcGVDYXJkSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9iaWxsaW5nX2NhcmQnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RyaXBlQ3VzdG9tZXJJZCA9IGF3YWl0IGVuc3VyZVN0cmlwZUN1c3RvbWVySWQoY29udGV4dCk7XG5cbiAgICBpZighc3RyaXBlQ3VzdG9tZXJJZCkge1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmlwZVBsYW5JZCA9IGF3YWl0IGVuc3VyZVBsdXNTdHJpcGVQbGFuKCk7XG4gICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG4gICAgY29uc3Qgc3RyaXBlU3Vic2NyaXB0aW9uID0gYXdhaXQgc3RyaXBlQ2xpZW50LnN1YnNjcmlwdGlvbnMuY3JlYXRlKHtcbiAgICAgIGN1c3RvbWVyOiBzdHJpcGVDdXN0b21lcklkLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBsYW46IHN0cmlwZVBsYW5JZFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgcGxhbklkOiAncGx1cycsXG4gICAgICAgIHR5cGU6ICdhY2NvdW50JyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzdHJpcGVQZXJpb2RFbmQgPSBOdW1iZXIoKHN0cmlwZVN1YnNjcmlwdGlvbiBhcyBhbnkpPy5jdXJyZW50X3BlcmlvZF9lbmQgfHwgMCk7XG4gICAgY29uc3QgdXBkYXRlOiBQYXJ0aWFsPFVzZXJUeXBlPiA9IHtcbiAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgcGxhbkV4cGlyZXM6IHN0cmlwZVBlcmlvZEVuZCA/IHN0cmlwZVBlcmlvZEVuZCAqIDEwMDAgOiAwLFxuICAgICAgcGxhbklkOiAncGx1cycsXG4gICAgICBwbGFuU3RhdHVzOiBTdHJpbmcoc3RyaXBlU3Vic2NyaXB0aW9uLnN0YXR1cyB8fCAnYWN0aXZlJyksXG4gICAgICBwbGFuU3Vic2NyaXB0aW9uSWQ6IHN0cmlwZVN1YnNjcmlwdGlvbi5pZCxcbiAgICAgIHVzZXJBY2Nlc3M6IFBMVVNfUExBTl9BQ0NFU1NcbiAgICB9O1xuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4gdXNlcik7XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCaWxsaW5nU2V0dXBTZXNzaW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7cmV0dXJuVXJsfTogQmlsbGluZ1NldHVwU2Vzc2lvbk9wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25JZCA9IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGNvbnN0IHN0cmlwZUN1c3RvbWVySWQgPSBhd2FpdCBlbnN1cmVTdHJpcGVDdXN0b21lcklkKGNvbnRleHQpO1xuXG4gIGlmKCFzdHJpcGVDdXN0b21lcklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkUmV0dXJuVXJsID0gcGFyc2VCaWxsaW5nUmV0dXJuVXJsKGNvbnRleHQsIHJldHVyblVybCk7XG4gIGNvbnN0IGNoZWNrb3V0U2Vzc2lvbiA9IGF3YWl0IGdldFN0cmlwZUNsaWVudCgpLmNoZWNrb3V0LnNlc3Npb25zLmNyZWF0ZSh7XG4gICAgY2FuY2VsX3VybDogZ2V0Q2hlY2tvdXRSZXR1cm5VcmwocGFyc2VkUmV0dXJuVXJsLCAnY2FuY2VsZWQnKSxcbiAgICBjdXN0b21lcjogc3RyaXBlQ3VzdG9tZXJJZCxcbiAgICBtZXRhZGF0YToge1xuICAgICAgdHlwZTogJ2JpbGxpbmctcGF5bWVudC1tZXRob2QnLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9LFxuICAgIG1vZGU6ICdzZXR1cCcsXG4gICAgcGF5bWVudF9tZXRob2RfdHlwZXM6IFsnY2FyZCddLFxuICAgIHNldHVwX2ludGVudF9kYXRhOiB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICB0eXBlOiAnYmlsbGluZy1wYXltZW50LW1ldGhvZCcsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9XG4gICAgfSxcbiAgICBzdWNjZXNzX3VybDogZ2V0Q2hlY2tvdXRSZXR1cm5VcmwocGFyc2VkUmV0dXJuVXJsLCAnc3VjY2VzcycpXG4gIH0pO1xuICBjb25zdCBjaGVja291dFVybCA9IFN0cmluZyhjaGVja291dFNlc3Npb24udXJsIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIWNoZWNrb3V0VXJsKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrb3V0VXJsO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlQmlsbGluZ1NldHVwU2Vzc2lvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY2hlY2tvdXRTZXNzaW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBzZXNzaW9uSWQgPSBTdHJpbmcoY29udGV4dC5zZXNzaW9uPy51c2VySWQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qgbm9ybWFsaXplZENoZWNrb3V0U2Vzc2lvbklkID0gU3RyaW5nKGNoZWNrb3V0U2Vzc2lvbklkIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpO1xuICB9XG5cbiAgaWYoIW5vcm1hbGl6ZWRDaGVja291dFNlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfYmlsbGluZ19zZXR1cF9zZXNzaW9uJyk7XG4gIH1cblxuICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pO1xuICBjb25zdCBzdHJpcGVDdXN0b21lcklkID0gU3RyaW5nKGN1cnJlbnRVc2VyPy5zdHJpcGVDdXN0b21lcklkIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXN0cmlwZUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gIH1cblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcbiAgY29uc3QgY2hlY2tvdXRTZXNzaW9uID0gYXdhaXQgc3RyaXBlQ2xpZW50LmNoZWNrb3V0LnNlc3Npb25zLnJldHJpZXZlKFxuICAgIG5vcm1hbGl6ZWRDaGVja291dFNlc3Npb25JZCxcbiAgICB7ZXhwYW5kOiBbJ3NldHVwX2ludGVudC5wYXltZW50X21ldGhvZCddfVxuICApO1xuICBjb25zdCBjaGVja291dEN1c3RvbWVySWQgPSB0eXBlb2YgY2hlY2tvdXRTZXNzaW9uLmN1c3RvbWVyID09PSAnc3RyaW5nJ1xuICAgID8gY2hlY2tvdXRTZXNzaW9uLmN1c3RvbWVyXG4gICAgOiBjaGVja291dFNlc3Npb24uY3VzdG9tZXI/LmlkO1xuXG4gIGlmKFxuICAgIGNoZWNrb3V0U2Vzc2lvbi5tb2RlICE9PSAnc2V0dXAnXG4gICAgfHwgY2hlY2tvdXRTZXNzaW9uLnN0YXR1cyAhPT0gJ2NvbXBsZXRlJ1xuICAgIHx8IGNoZWNrb3V0Q3VzdG9tZXJJZCAhPT0gc3RyaXBlQ3VzdG9tZXJJZFxuICAgIHx8IGNoZWNrb3V0U2Vzc2lvbi5tZXRhZGF0YT8udXNlcklkICE9PSBzZXNzaW9uSWRcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9iaWxsaW5nX3NldHVwX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGNvbnN0IHNldHVwSW50ZW50ID0gdHlwZW9mIGNoZWNrb3V0U2Vzc2lvbi5zZXR1cF9pbnRlbnQgPT09ICdzdHJpbmcnXG4gICAgPyBhd2FpdCBzdHJpcGVDbGllbnQuc2V0dXBJbnRlbnRzLnJldHJpZXZlKGNoZWNrb3V0U2Vzc2lvbi5zZXR1cF9pbnRlbnQsIHtleHBhbmQ6IFsncGF5bWVudF9tZXRob2QnXX0pXG4gICAgOiBjaGVja291dFNlc3Npb24uc2V0dXBfaW50ZW50O1xuXG4gIGlmKCFzZXR1cEludGVudCB8fCBzZXR1cEludGVudC5zdGF0dXMgIT09ICdzdWNjZWVkZWQnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignYmlsbGluZ19zZXR1cF9pbmNvbXBsZXRlJyk7XG4gIH1cblxuICBjb25zdCBwYXltZW50TWV0aG9kID0gdHlwZW9mIHNldHVwSW50ZW50LnBheW1lbnRfbWV0aG9kID09PSAnc3RyaW5nJ1xuICAgID8gYXdhaXQgc3RyaXBlQ2xpZW50LnBheW1lbnRNZXRob2RzLnJldHJpZXZlKHNldHVwSW50ZW50LnBheW1lbnRfbWV0aG9kKVxuICAgIDogc2V0dXBJbnRlbnQucGF5bWVudF9tZXRob2Q7XG4gIGNvbnN0IHBheW1lbnRNZXRob2RDdXN0b21lcklkID0gdHlwZW9mIHBheW1lbnRNZXRob2Q/LmN1c3RvbWVyID09PSAnc3RyaW5nJ1xuICAgID8gcGF5bWVudE1ldGhvZC5jdXN0b21lclxuICAgIDogcGF5bWVudE1ldGhvZD8uY3VzdG9tZXI/LmlkO1xuXG4gIGlmKCFwYXltZW50TWV0aG9kIHx8IHBheW1lbnRNZXRob2QudHlwZSAhPT0gJ2NhcmQnIHx8ICFwYXltZW50TWV0aG9kLmNhcmQgfHwgcGF5bWVudE1ldGhvZEN1c3RvbWVySWQgIT09IHN0cmlwZUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX2JpbGxpbmdfcGF5bWVudF9tZXRob2QnKTtcbiAgfVxuXG4gIGF3YWl0IHN0cmlwZUNsaWVudC5jdXN0b21lcnMudXBkYXRlKHN0cmlwZUN1c3RvbWVySWQsIHtcbiAgICBpbnZvaWNlX3NldHRpbmdzOiB7ZGVmYXVsdF9wYXltZW50X21ldGhvZDogcGF5bWVudE1ldGhvZC5pZH1cbiAgfSk7XG5cbiAgY29uc3QgY3VycmVudFN0cmlwZUNhcmRJZCA9IFN0cmluZyhjdXJyZW50VXNlcj8uc3RyaXBlQ2FyZElkIHx8ICcnKS50cmltKCk7XG5cbiAgaWYoY3VycmVudFN0cmlwZUNhcmRJZC5zdGFydHNXaXRoKCdwbV8nKSAmJiBjdXJyZW50U3RyaXBlQ2FyZElkICE9PSBwYXltZW50TWV0aG9kLmlkKSB7XG4gICAgYXdhaXQgc3RyaXBlQ2xpZW50LnBheW1lbnRNZXRob2RzLmRldGFjaChjdXJyZW50U3RyaXBlQ2FyZElkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVVc2VyQmlsbGluZ1BheW1lbnRNZXRob2QoY29udGV4dCwge1xuICAgIHN0cmlwZUNhcmRCcmFuZDogU3RyaW5nKHBheW1lbnRNZXRob2QuY2FyZC5icmFuZCB8fCAnJykudHJpbSgpLFxuICAgIHN0cmlwZUNhcmRJZDogcGF5bWVudE1ldGhvZC5pZCxcbiAgICBzdHJpcGVDYXJkTGFzdDQ6IFN0cmluZyhwYXltZW50TWV0aG9kLmNhcmQubGFzdDQgfHwgJycpLnRyaW0oKVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyQmlsbGluZ0NhcmQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVVzZXJCaWxsaW5nQ2FyZCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgY3VycmVudFVzZXIgPSBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KTtcbiAgY29uc3Qgc3RyaXBlQ3VzdG9tZXJJZCA9IFN0cmluZyhjdXJyZW50VXNlcj8uc3RyaXBlQ3VzdG9tZXJJZCB8fCAnJyk7XG4gIGNvbnN0IHN0cmlwZUNhcmRJZCA9IFN0cmluZyhjdXJyZW50VXNlcj8uc3RyaXBlQ2FyZElkIHx8ICcnKTtcbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgdHJ5IHtcbiAgICBpZihzdHJpcGVDdXN0b21lcklkICYmIHN0cmlwZUNhcmRJZCkge1xuICAgICAgaWYoc3RyaXBlQ2FyZElkLnN0YXJ0c1dpdGgoJ3BtXycpKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbWVyID0gYXdhaXQgc3RyaXBlQ2xpZW50LmN1c3RvbWVycy5yZXRyaWV2ZShzdHJpcGVDdXN0b21lcklkKTtcblxuICAgICAgICBpZighKCdkZWxldGVkJyBpbiBjdXN0b21lcikgJiYgY3VzdG9tZXIuaW52b2ljZV9zZXR0aW5ncy5kZWZhdWx0X3BheW1lbnRfbWV0aG9kID09PSBzdHJpcGVDYXJkSWQpIHtcbiAgICAgICAgICBhd2FpdCBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLnVwZGF0ZShzdHJpcGVDdXN0b21lcklkLCB7XG4gICAgICAgICAgICBpbnZvaWNlX3NldHRpbmdzOiB7ZGVmYXVsdF9wYXltZW50X21ldGhvZDogbnVsbH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHN0cmlwZUNsaWVudC5wYXltZW50TWV0aG9kcy5kZXRhY2goc3RyaXBlQ2FyZElkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHN0cmlwZUNsaWVudC5jdXN0b21lcnMuZGVsZXRlU291cmNlKHN0cmlwZUN1c3RvbWVySWQsIHN0cmlwZUNhcmRJZCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVVzZXJCaWxsaW5nUGF5bWVudE1ldGhvZChjb250ZXh0LCB7XG4gICAgICBzdHJpcGVDYXJkQnJhbmQ6ICcnLFxuICAgICAgc3RyaXBlQ2FyZElkOiAnJyxcbiAgICAgIHN0cmlwZUNhcmRMYXN0NDogJydcbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsImFxbCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsIlVzZXJFcnJvciIsInVzZURiIiwiaGFzQWNjZXNzTGV2ZWwiLCJnZXRTdHJpcGVDbGllbnQiLCJnZXRVc2VyQnlJZCIsImV2ZW50Q2F0ZWdvcnkiLCJQTFVTX1BMQU5fSUQiLCJQTFVTX1BMQU5fQU1PVU5UIiwiUExVU19QTEFOX0FDQ0VTUyIsImFkZEN1c3RvbWVyQWNjb3VudCIsImNvbnRleHQiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwidXNlcm5hbWUiLCJzdHJpcGVDbGllbnQiLCJjdXN0b21lcnMiLCJjcmVhdGUiLCJtZXRhZGF0YSIsInRoZW4iLCJjdXN0b21lciIsIm5vdyIsIkRhdGUiLCJ1cGRhdGUiLCJtb2RpZmllZCIsInN0cmlwZUN1c3RvbWVySWQiLCJpZCIsImFxbFFyeSIsInF1ZXJ5IiwiY3Vyc29yIiwibmV4dCIsInVwZGF0ZWRVc2VyIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImFkZEJhbmtBY2NvdW50IiwiYmFua0FjY291bnQiLCJhY2NvdW50TnVtYmVyIiwiZnVsbE5hbWUiLCJyb3V0aW5nIiwiZm9ybWF0QWNjb3VudCIsImZvcm1hdEZ1bGxOYW1lIiwiZm9ybWF0Um91dGluZyIsInVzZXIiLCJzdHJpcGVBY2NvdW50SWQiLCJ0b2tlbnMiLCJiYW5rX2FjY291bnQiLCJhY2NvdW50X2hvbGRlcl9uYW1lIiwiYWNjb3VudF9ob2xkZXJfdHlwZSIsImFjY291bnRfbnVtYmVyIiwiY291bnRyeSIsImN1cnJlbmN5Iiwicm91dGluZ19udW1iZXIiLCJ0b2tlbiIsImNyZWF0ZVNvdXJjZSIsInNvdXJjZSIsImFjY291bnQiLCJiYW5rRnVsbE5hbWUiLCJiYW5rSWQiLCJiYW5rUm91dGluZyIsIm1zZyIsIm1lc3NhZ2UiLCJ1cGRhdGVDcmVkaXRDYXJkIiwiY2FyZCIsImNpdHkiLCJleHBNb250aCIsImV4cFllYXIiLCJzdHJlZXQxIiwic3RhdGUiLCJ6aXAiLCJmb3JtYXRJZCIsInBheW1lbnRDYXJkIiwiZm9ybWF0RXhwTW9udGgiLCJmb3JtYXRFeHBZZWFyIiwiZm9ybWF0Q2l0eSIsImZvcm1hdENvdW50cnkiLCJmb3JtYXRTdHJlZXQxIiwiZm9ybWF0U3RhdGUiLCJmb3JtYXRaaXAiLCJyZXN1bHRzIiwidXBkYXRlZENhcmQiLCJzdHJpcGVJZCIsImFkZHJlc3NfY2l0eSIsImFkZHJlc3NfY291bnRyeSIsImFkZHJlc3NfbGluZTEiLCJhZGRyZXNzX3N0YXRlIiwiYWRkcmVzc196aXAiLCJleHBfbW9udGgiLCJ0b1N0cmluZyIsImV4cF95ZWFyIiwibmFtZSIsInVwZGF0ZVNvdXJjZSIsImNvbnNvbGUiLCJsb2ciLCJnZXRDcmVkaXRDYXJkcyIsImFsbCIsImxpc3QiLCJkZWxldGVDcmVkaXRDYXJkIiwiY2FyZElkIiwiZm9ybWF0Q2FyZElkIiwicmVzdWx0IiwiX2tleSIsImNhcmRLZXkiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJvdXRFZGdlcyIsInJlc3BvbnNlIiwiZWRnZXMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJQcm9taXNlIiwibWFwIiwiZWRnZSIsImVkZ2VLZXkiLCJyZW1vdmVBcWxRcnkiLCJkZWxldGVTb3VyY2UiLCJkZWxldGVCYW5rQWNjb3VudCIsInJlc29sdmUiLCJjcmVhdGVQYXltZW50VHJhbnNmZXIiLCJ0cmFuc2ZlciIsImFtb3VudCIsImZvcm1hdEFtb3VudCIsImZvcm1hdEN1cnJlbmN5IiwidG9VcHBlckNhc2UiLCJ0cmFuc2ZlcnMiLCJkZXN0aW5hdGlvbiIsInN0cmlwZVRyYW5zZmVyIiwiaW5zZXJ0IiwiYWRkZWQiLCJuZXdUcmFuc2ZlciIsImNyZWF0ZVBheW1lbnRIb2xkIiwicGF5bWVudCIsImNhcHR1cmUiLCJkZXNjcmlwdGlvbiIsImNoYXJnZXMiLCJzdHJpcGVDaGFyZ2UiLCJjaGFyZ2VGYWlsQ29kZSIsImZhaWx1cmVfY29kZSIsImNoYXJnZUZhaWxNc2ciLCJmYWlsdXJlX21lc3NhZ2UiLCJjaGFyZ2VJZCIsImNoYXJnZVN0YXR1cyIsInN0YXR1cyIsIm5ld1BheW1lbnQiLCJlbnN1cmVTdHJpcGVDdXN0b21lcklkIiwiU3RyaW5nIiwiZ2V0Q29uZmlndXJlZEJpbGxpbmdPcmlnaW5zIiwiY29uZmlndXJlZE9yaWdpbnMiLCJwcm9jZXNzIiwiZW52IiwiU1RSSVBFX1JFVFVSTl9VUkxfT1JJR0lOUyIsInNwbGl0Iiwib3JpZ2luIiwidHJpbSIsImZpbHRlciIsIkJvb2xlYW4iLCJhcHBVcmwiLCJjb25maWciLCJkZXRhaWxzIiwidXJsIiwicHVzaCIsImluY2x1ZGVzIiwiU2V0IiwiVVJMIiwicGFyc2VCaWxsaW5nUmV0dXJuVXJsIiwicmV0dXJuVXJsIiwicGFyc2VkVXJsIiwiaXNMb2NhbERldmVsb3BtZW50VXJsIiwicHJvdG9jb2wiLCJob3N0bmFtZSIsImlzU2VjdXJlVXJsIiwiYWxsb3dlZE9yaWdpbnMiLCJoYXMiLCJoYXNoIiwiZ2V0Q2hlY2tvdXRSZXR1cm5VcmwiLCJuZXh0VXJsIiwic2VhcmNoUGFyYW1zIiwic2V0IiwicmVwbGFjZSIsInVwZGF0ZVVzZXJCaWxsaW5nUGF5bWVudE1ldGhvZCIsInVzZXJVcGRhdGUiLCJlbnN1cmVQbHVzU3RyaXBlUGxhbiIsInBsYW5zIiwicmV0cmlldmUiLCJpbnRlcnZhbCIsImludGVydmFsX2NvdW50IiwicGxhbklkIiwidHlwZSIsInByb2R1Y3QiLCJ1cGdyYWRlVXNlclRvUGx1cyIsImN1cnJlbnRVc2VyIiwicGxhblN1YnNjcmlwdGlvbklkIiwic3RyaXBlQ2FyZElkIiwic3RyaXBlUGxhbklkIiwic3RyaXBlU3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9ucyIsIml0ZW1zIiwicGxhbiIsInN0cmlwZVBlcmlvZEVuZCIsIk51bWJlciIsImN1cnJlbnRfcGVyaW9kX2VuZCIsInBsYW5FeHBpcmVzIiwicGxhblN0YXR1cyIsInVzZXJBY2Nlc3MiLCJjcmVhdGVCaWxsaW5nU2V0dXBTZXNzaW9uIiwicGFyc2VkUmV0dXJuVXJsIiwiY2hlY2tvdXRTZXNzaW9uIiwiY2hlY2tvdXQiLCJzZXNzaW9ucyIsImNhbmNlbF91cmwiLCJtb2RlIiwicGF5bWVudF9tZXRob2RfdHlwZXMiLCJzZXR1cF9pbnRlbnRfZGF0YSIsInN1Y2Nlc3NfdXJsIiwiY2hlY2tvdXRVcmwiLCJjb21wbGV0ZUJpbGxpbmdTZXR1cFNlc3Npb24iLCJjaGVja291dFNlc3Npb25JZCIsIm5vcm1hbGl6ZWRDaGVja291dFNlc3Npb25JZCIsImV4cGFuZCIsImNoZWNrb3V0Q3VzdG9tZXJJZCIsInNldHVwSW50ZW50Iiwic2V0dXBfaW50ZW50Iiwic2V0dXBJbnRlbnRzIiwicGF5bWVudE1ldGhvZCIsInBheW1lbnRfbWV0aG9kIiwicGF5bWVudE1ldGhvZHMiLCJwYXltZW50TWV0aG9kQ3VzdG9tZXJJZCIsImludm9pY2Vfc2V0dGluZ3MiLCJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIiwiY3VycmVudFN0cmlwZUNhcmRJZCIsInN0YXJ0c1dpdGgiLCJkZXRhY2giLCJzdHJpcGVDYXJkQnJhbmQiLCJicmFuZCIsInN0cmlwZUNhcmRMYXN0NCIsImxhc3Q0IiwiZGVsZXRlVXNlckJpbGxpbmdDYXJkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQVFDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksUUFBTywrQkFBK0I7QUFDM0YsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFLN0IsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUduRCxTQUFRQyxRQUFRLEVBQUVDLFNBQVMsUUFBTyw2QkFBNkI7QUFDL0QsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxjQUFjLFFBQU8sMkJBQTJCO0FBQ3hELFNBQVFDLGVBQWUsUUFBTywwQkFBMEI7QUFDeEQsU0FBUUMsV0FBVyxRQUFPLGFBQWE7QUFHdkMsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGVBQWU7QUFDckIsTUFBTUMsbUJBQW1CO0FBQ3pCLE1BQU1DLG1CQUFtQjtBQUV6QixPQUFPLE1BQU1DLHFCQUFxQixDQUFDQztJQUNqQyxNQUFNQyxTQUFTO0lBQ2YsTUFBTSxFQUFDQyxZQUFZLEVBQUVDLFNBQVMsRUFBQ0MsUUFBUUMs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
|