@nlabs/reaktor 1.8.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -1
- package/docs/GENERATION.md +63 -0
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.d.ts +2 -2
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/contentGeneration.d.ts +40 -0
- package/lib/actions/contentGeneration.js +206 -0
- package/lib/actions/conversations.js +1 -1
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.d.ts +2 -2
- 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.d.ts +42 -4
- package/lib/actions/files.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/geminiVideo.d.ts +19 -0
- package/lib/actions/geminiVideo.js +161 -0
- package/lib/actions/groups.js +1 -1
- package/lib/actions/higgsfield.d.ts +20 -0
- package/lib/actions/higgsfield.js +148 -0
- package/lib/actions/imageGeneration.d.ts +37 -0
- package/lib/actions/imageGeneration.js +121 -0
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.d.ts +5 -0
- package/lib/actions/index.js +6 -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 +27 -26
- package/lib/actions/personas.d.ts +4 -4
- 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.d.ts +6 -6
- package/lib/actions/reactions.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.d.ts +4 -4
- package/lib/actions/s3.js +22 -6
- 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.d.ts +2 -2
- package/lib/actions/tags.js +1 -1
- package/lib/actions/users.d.ts +2 -2
- package/lib/actions/users.js +1 -1
- package/lib/actions/videoGeneration.d.ts +20 -0
- package/lib/actions/videoGeneration.js +32 -0
- package/lib/actions/videos.js +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +1 -1
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/geminiGenerationAdapter.d.ts +34 -0
- package/lib/adapters/geminiGenerationAdapter.js +41 -0
- package/lib/adapters/higgsfieldAdapter.d.ts +120 -0
- package/lib/adapters/higgsfieldAdapter.js +131 -0
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/imageGenerationAdapter.d.ts +17 -0
- package/lib/adapters/imageGenerationAdapter.js +18 -0
- package/lib/adapters/index.d.ts +3 -0
- package/lib/adapters/index.js +4 -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.d.ts +76 -1
- package/lib/adapters/userAdapter.js +1 -1
- package/lib/config.d.ts +19 -14
- package/lib/config.js +9 -1
- package/lib/constants/collections.js +1 -1
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/lambdas/actions/websockets.d.ts +5 -0
- package/lib/lambdas/actions/websockets.js +16 -1
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.d.ts +2 -2
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.d.ts +4 -4
- 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 +15 -1
- package/lib/mutations/crm/crm.js +1 -1
- package/lib/mutations/events/events.js +1 -1
- package/lib/mutations/flags/flags.js +1 -1
- package/lib/mutations/groups/groups.js +1 -1
- package/lib/mutations/higgsfield/higgsfield.d.ts +1 -0
- package/lib/mutations/higgsfield/higgsfield.js +62 -0
- package/lib/mutations/images/images.js +10 -1
- package/lib/mutations/index.d.ts +2 -1
- package/lib/mutations/index.js +11 -2
- 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 +24 -10
- package/lib/objectTypes/analytics.js +1 -1
- package/lib/objectTypes/app.js +1 -1
- package/lib/objectTypes/bankAccount.js +1 -1
- package/lib/objectTypes/connection.js +1 -1
- package/lib/objectTypes/content.js +1 -1
- package/lib/objectTypes/contentGeneration.d.ts +2 -0
- package/lib/objectTypes/contentGeneration.js +30 -0
- package/lib/objectTypes/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +1 -1
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +1 -1
- package/lib/objectTypes/event.js +1 -1
- package/lib/objectTypes/external.js +1 -1
- package/lib/objectTypes/file.js +1 -1
- package/lib/objectTypes/filter.js +1 -1
- package/lib/objectTypes/flag.js +1 -1
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/higgsfield.d.ts +5 -0
- package/lib/objectTypes/higgsfield.js +149 -0
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/imageGeneration.d.ts +2 -0
- package/lib/objectTypes/imageGeneration.js +33 -0
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -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.d.ts +37 -2
- package/lib/objectTypes/persona.js +1 -1
- package/lib/objectTypes/plan.js +1 -1
- package/lib/objectTypes/post.js +1 -1
- package/lib/objectTypes/query.js +1 -1
- package/lib/objectTypes/reaction.js +1 -1
- package/lib/objectTypes/relation.js +1 -1
- package/lib/objectTypes/rum.js +1 -1
- package/lib/objectTypes/search.js +1 -1
- package/lib/objectTypes/statistics.js +1 -1
- package/lib/objectTypes/subscription.js +1 -1
- package/lib/objectTypes/tag.js +1 -1
- package/lib/objectTypes/user.js +1 -1
- package/lib/objectTypes/video.js +1 -1
- package/lib/objectTypes/videoGeneration.d.ts +2 -0
- package/lib/objectTypes/videoGeneration.js +31 -0
- package/lib/queries/analytics/analytics.js +1 -1
- package/lib/queries/content/content.js +1 -1
- package/lib/queries/crm/crm.js +1 -1
- package/lib/queries/events/events.js +1 -1
- package/lib/queries/flags/flags.js +1 -1
- package/lib/queries/groups/groups.js +1 -1
- package/lib/queries/higgsfield/higgsfield.d.ts +1 -0
- package/lib/queries/higgsfield/higgsfield.js +22 -0
- package/lib/queries/images/images.js +1 -1
- package/lib/queries/index.d.ts +2 -1
- package/lib/queries/index.js +7 -2
- 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.d.ts +16 -16
- package/lib/types/analytics.types.js +1 -1
- package/lib/types/apps.types.d.ts +4 -4
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.d.ts +20 -20
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.d.ts +2 -2
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.d.ts +6 -6
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.d.ts +2 -2
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.d.ts +30 -30
- package/lib/types/crm.types.js +1 -1
- package/lib/types/email.types.d.ts +2 -2
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.d.ts +1 -0
- package/lib/types/error.types.js +2 -1
- package/lib/types/files.types.d.ts +2 -2
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.d.ts +8 -8
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.d.ts +2 -2
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.d.ts +2 -2
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.d.ts +2 -2
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.d.ts +2 -2
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.d.ts +14 -14
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.d.ts +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +2 -2
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.d.ts +6 -6
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +4 -4
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.d.ts +2 -2
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.d.ts +2 -2
- package/lib/types/videos.types.js +1 -1
- package/lib/types/websockets.types.d.ts +4 -4
- package/lib/types/websockets.types.js +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/adapterUtils.js +1 -1
- package/lib/utils/analyticsUtils.js +1 -1
- package/lib/utils/appContext.js +1 -1
- package/lib/utils/aqlHelpers.js +1 -1
- package/lib/utils/arangodbUtils.js +1 -1
- package/lib/utils/authUtils.js +1 -1
- package/lib/utils/awsUtils.js +1 -1
- package/lib/utils/collectionRegistry.d.ts +2 -2
- 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.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -1
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.example.js +1 -1
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/mediaAccess.d.ts +5 -0
- package/lib/utils/mediaAccess.js +57 -0
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/nodeRealtime.d.ts +14 -0
- package/lib/utils/nodeRealtime.js +84 -0
- package/lib/utils/opaqueToken.d.ts +4 -0
- package/lib/utils/opaqueToken.js +7 -0
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/stripeUtils.ts.bak +12 -0
- 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 +26 -25
package/lib/actions/personas.js
CHANGED
|
@@ -612,4 +612,4 @@ export const updatePersona = async (context, persona)=>{
|
|
|
612
612
|
}
|
|
613
613
|
};
|
|
614
614
|
|
|
615
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL3BlcnNvbmFzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZUhhc2gsXG4gIHBhcnNlQXJhbmdvSWQsXG4gIHBhcnNlQ2hhcixcbiAgcGFyc2VJZCxcbiAgcGFyc2VOdW0sXG4gIHBhcnNlU3RyaW5nLFxuICBwYXJzZVZhckNoYXJcbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge2xpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtDb25uZWN0aW9uS2luZHN9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldENvbm5lY3Rpb259IGZyb20gJy4vY29ubmVjdGlvbnMuanMnO1xuaW1wb3J0IHtnZXRUYWdMaXN0QnlJdGVtfSBmcm9tICcuL3RhZ3MuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtFZGdlVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1BlcnNvbmFUeXBlfSBmcm9tICcuLi90eXBlcy9wZXJzb25hcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdwZXJzb25hcyc7XG5jb25zdCBtaW5pbXVtQWR1bHRBZ2UgPSAxODtcbmNvbnN0IG1pbmltdW1BZHVsdEJpcnRoZGF0ZSA9IERhdGUubm93KCkgLSAobWluaW11bUFkdWx0QWdlICogMzY1LjI1ICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc29uYUFjdGlvbkV4dGVuc2lvbnMge1xuICByZWFkb25seSBtYXBDdXN0b21QZXJzb25hRmllbGRzPzogKHBlcnNvbmE6IFBlcnNvbmFUeXBlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25hTGlzdEZpbHRlcnMge1xuICByZWFkb25seSBnZW5kZXI/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgUGVyc29uYVJlbGF0aW9uRmlsdGVyID0gJ2ZvbGxvd2VycycgfCAnZm9sbG93aW5nJyB8ICdmcmllbmRzJztcblxubGV0IHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zOiBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyA9IHt9O1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBwZXJzb25hc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbmNvbnN0IHRhZ3NDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5UQUdTKTtcbmNvbnN0IGlzVGFnZ2VkQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSVNfVEFHR0VEKTtcbmNvbnN0IGhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfQ09OTkVDVElPTik7XG5cbmV4cG9ydCBjb25zdCBjb25maWd1cmVQZXJzb25hQWN0aW9ucyA9IChleHRlbnNpb25zOiBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyA9IHt9KTogdm9pZCA9PiB7XG4gIHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0gey4uLmV4dGVuc2lvbnN9O1xufTtcblxuY29uc3QgYnVpbGRQZXJzb25hTXV0YXRpb24gPSAocGVyc29uYTogUGVyc29uYVR5cGUpOiBQYXJ0aWFsPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgc3RyZWV0MSxcbiAgICBzdHJlZXQyLFxuICAgIHppcCxcbiAgICBzdGF0ZSxcbiAgICB0aW1lem9uZSxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgZ2VuZGVyLFxuICAgIGltYWdlSWQsXG4gICAgbmFtZSxcbiAgICBsYXRpdHVkZSxcbiAgICBsb2NhdGlvbixcbiAgICBsb25naXR1ZGUsXG4gICAgdXNlcklkXG4gIH0gPSBwZXJzb25hO1xuXG4gIHJldHVybiB7XG4gICAgY2l0eTogY2l0eSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGNpdHksIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5OiBjb3VudHJ5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY291bnRyeSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGZpcnN0TmFtZTogZmlyc3ROYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoZmlyc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgZ2VuZGVyOiBnZW5kZXIgIT09IHVuZGVmaW5lZCA/IHBhcnNlQ2hhcihnZW5kZXIsIDEpLnRvVXBwZXJDYXNlKCkgOiB1bmRlZmluZWQsXG4gICAgaW1hZ2VJZDogaW1hZ2VJZCAhPT0gdW5kZWZpbmVkID8gcGFyc2VJZChpbWFnZUlkKSA6IHVuZGVmaW5lZCxcbiAgICBsYXN0TmFtZTogbGFzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihsYXN0TmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGxhdGl0dWRlOiBsYXRpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0obGF0aXR1ZGUsIDEyKSA6IHVuZGVmaW5lZCxcbiAgICBsb2NhdGlvbjogbG9jYXRpb24gIT09IHVuZGVmaW5lZCA/IHBhcnNlU3RyaW5nKGxvY2F0aW9uLCAxNjApIDogdW5kZWZpbmVkLFxuICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsb25naXR1ZGUsIDEyKSA6IHVuZGVmaW5lZCxcbiAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIobmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0YXRlOiBzdGF0ZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0YXRlLCAyKSA6IHVuZGVmaW5lZCxcbiAgICBzdHJlZXQxOiBzdHJlZXQxICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RyZWV0MSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDI6IHN0cmVldDIgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQyLCAzMikgOiB1bmRlZmluZWQsXG4gICAgdGltZXpvbmU6IHRpbWV6b25lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIodGltZXpvbmUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB1c2VySWQ6IHVzZXJJZCAhPT0gdW5kZWZpbmVkID8gcGFyc2VJZCh1c2VySWQpIDogdW5kZWZpbmVkLFxuICAgIHppcDogemlwICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoemlwLCAxNikgOiB1bmRlZmluZWRcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQ3VzdG9tUGVyc29uYU11dGF0aW9uID0gKHBlcnNvbmE6IFBlcnNvbmFUeXBlKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCBmaWVsZHMgPSBwZXJzb25hQWN0aW9uRXh0ZW5zaW9ucy5tYXBDdXN0b21QZXJzb25hRmllbGRzPy4ocGVyc29uYSkgfHwge307XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZpZWxkcykucmVkdWNlKChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xufTtcblxuY29uc3QgY3JlYXRlUGVyc29uYUVkZ2UgPSAodXNlckRvY0lkOiBzdHJpbmcsIHBlcnNvbmFEb2NJZDogc3RyaW5nKTogRWRnZVR5cGUgPT4gKHtcbiAgX2Zyb206IHBhcnNlQXJhbmdvSWQodXNlckRvY0lkKSxcbiAgX2tleTogY3JlYXRlSGFzaChgcGVyc29uYS0ke3VzZXJEb2NJZH0tJHtwZXJzb25hRG9jSWR9YCksXG4gIF90bzogcGFyc2VBcmFuZ29JZChwZXJzb25hRG9jSWQpLFxuICBhZGRlZDogRGF0ZS5ub3coKVxufSk7XG5cbmNvbnN0IGdldFVzZXJCeUtleSA9IGFzeW5jIChkYXRhYmFzZU5hbWU6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPFVzZXJUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBxcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB1c2VyIElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIHVzZXIuX2tleSA9PSAke3VzZXJJZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB1c2VyXG4gIGA7XG4gIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocXJ5KTtcbiAgcmV0dXJuIGN1cnNvci5uZXh0KCk7XG59O1xuXG5jb25zdCBnZXRTZXNzaW9uUGVyc29uYUlkID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFJZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHJlcXVlc3RlZFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG5cbiAgaWYocmVxdWVzdGVkUGVyc29uYUlkKSB7XG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgICAgRk9SIHBlcnNvbmEgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBwZXJzb25hLl9rZXkgPT0gJHtyZXF1ZXN0ZWRQZXJzb25hSWR9XG4gICAgICAgIEZJTFRFUiBwZXJzb25hLnVzZXJJZCA9PSAke3Nlc3Npb25Vc2VySWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHBlcnNvbmEuX2tleVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHBhcnNlSWQoU3RyaW5nKGF3YWl0IGN1cnNvci5uZXh0KCkgfHwgJycpKTtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZihzZXNzaW9uUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIHNlc3Npb25QZXJzb25hSWQ7XG4gIH1cblxuICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIHNlc3Npb25Vc2VySWQpO1xuICByZXR1cm4gcGFyc2VJZChTdHJpbmcodXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYU93bmVyVXNlcklkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighbm9ybWFsaXplZFBlcnNvbmFJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmEgPSBhd2FpdCBnZXRQZXJzb25hQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIG5vcm1hbGl6ZWRQZXJzb25hSWQpO1xuICByZXR1cm4gcGFyc2VJZChTdHJpbmcocGVyc29uYT8udXNlcklkIHx8ICcnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFVzZXJJZDogc3RyaW5nLFxuICBzZXNzaW9uVXNlcklkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChzZXNzaW9uVXNlcklkT3ZlcnJpZGUgfHwgJycpIHx8IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBub3JtYWxpemVkVGFyZ2V0VXNlcklkID0gcGFyc2VJZCh0YXJnZXRVc2VySWQpO1xuXG4gIGlmKCFzZXNzaW9uVXNlcklkIHx8ICFub3JtYWxpemVkVGFyZ2V0VXNlcklkIHx8IHNlc3Npb25Vc2VySWQgPT09IG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbb3V0Ym91bmRCbG9jaywgaW5ib3VuZEJsb2NrXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgc2Vzc2lvblVzZXJJZCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFVzZXJJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQsXG4gICAgICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgICAgIHNlc3Npb25Vc2VySWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApXG4gIF0pO1xuXG4gIHJldHVybiAhIW91dGJvdW5kQmxvY2sgfHwgISFpbmJvdW5kQmxvY2s7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFBlcnNvbmFJZDogc3RyaW5nLFxuICBzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUgfHwgJycpIHx8IGF3YWl0IGdldFNlc3Npb25QZXJzb25hSWQoY29udGV4dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgPSBwYXJzZUlkKHRhcmdldFBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCA9PT0gbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3QgW3RhcmdldFVzZXJJZCwgb3V0Ym91bmRCbG9jaywgaW5ib3VuZEJsb2NrXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRQZXJzb25hT3duZXJVc2VySWQoY29udGV4dCwgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApLFxuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICAgKVxuICBdKTtcblxuICBpZighIW91dGJvdW5kQmxvY2sgfHwgISFpbmJvdW5kQmxvY2spIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmKHRhcmdldFVzZXJJZCAmJiBzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuIGlzVXNlclZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHRhcmdldFVzZXJJZCwgc2Vzc2lvblVzZXJJZCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0YXJnZXRQZXJzb25hSWQ6IHN0cmluZyxcbiAgc2Vzc2lvblBlcnNvbmFJZE92ZXJyaWRlPzogc3RyaW5nXG4pOiBQcm9taXNlPFBpY2s8UGVyc29uYVR5cGUsICdpc0Jsb2NrZWQnIHwgJ2lzRm9sbG93ZWRCeScgfCAnaXNGb2xsb3dpbmcnIHwgJ2lzRnJpZW5kJz4+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoc2Vzc2lvblBlcnNvbmFJZE92ZXJyaWRlIHx8ICcnKSB8fCBhd2FpdCBnZXRTZXNzaW9uUGVyc29uYUlkKGNvbnRleHQpO1xuICBjb25zdCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkID0gcGFyc2VJZCh0YXJnZXRQZXJzb25hSWQpO1xuXG4gIGlmKCFzZXNzaW9uUGVyc29uYUlkIHx8ICFub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkIHx8IHNlc3Npb25QZXJzb25hSWQgPT09IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNCbG9ja2VkOiBmYWxzZSxcbiAgICAgIGlzRm9sbG93ZWRCeTogZmFsc2UsXG4gICAgICBpc0ZvbGxvd2luZzogZmFsc2UsXG4gICAgICBpc0ZyaWVuZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb3V0Ym91bmRCbG9jayA9IGF3YWl0IGdldENvbm5lY3Rpb24oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICk7XG5cbiAgaWYoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCwgc2Vzc2lvblBlcnNvbmFJZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNCbG9ja2VkOiAhIW91dGJvdW5kQmxvY2ssXG4gICAgICBpc0ZvbGxvd2VkQnk6IGZhbHNlLFxuICAgICAgaXNGb2xsb3dpbmc6IGZhbHNlLFxuICAgICAgaXNGcmllbmQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFtvdXRib3VuZENvbm5lY3Rpb24sIGluYm91bmRDb25uZWN0aW9uXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgc2Vzc2lvblBlcnNvbmFJZCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5GT0xMT1dcbiAgICApLFxuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuICAgIClcbiAgXSk7XG4gIGNvbnN0IGlzRm9sbG93aW5nID0gISFvdXRib3VuZENvbm5lY3Rpb247XG4gIGNvbnN0IGlzRm9sbG93ZWRCeSA9ICEhaW5ib3VuZENvbm5lY3Rpb247XG5cbiAgcmV0dXJuIHtcbiAgICBpc0Jsb2NrZWQ6IGZhbHNlLFxuICAgIGlzRm9sbG93ZWRCeSxcbiAgICBpc0ZvbGxvd2luZyxcbiAgICBpc0ZyaWVuZDogaXNGb2xsb3dpbmcgJiYgaXNGb2xsb3dlZEJ5XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQnO1xuICBjb25zdCBmb3JtYXRQZXJzb25hSWQgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG5cbiAgaWYoIWZvcm1hdFBlcnNvbmFJZCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwZXJzb25hRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtmb3JtYXRQZXJzb25hSWR9YDtcbiAgICBjb25zdCBxcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgRk9SIGhjIElOIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgRklMVEVSIGhjLl90byA9PSAke3BlcnNvbmFEb2NJZH1cbiAgICAgICAgRklMVEVSIGhjLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICBSRVRVUk4gY291bnRcbiAgICBgO1xuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICAgIHJldHVybiBOdW1iZXIoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAwKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBlcnNvbmFGb2xsb3dpbmdDb3VudCc7XG4gIGNvbnN0IGZvcm1hdFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgaGMgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHtwZXJzb25hRG9jSWR9XG4gICAgICAgIEZJTFRFUiBoYy50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgUkVUVVJOIGNvdW50XG4gICAgYDtcbiAgICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXJ5KTtcbiAgICByZXR1cm4gTnVtYmVyKGF3YWl0IGN1cnNvci5uZXh0KCkgfHwgMCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmFJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZ2V0UGVyc29uYUJ5S2V5ID0gYXN5bmMgKGRhdGFiYXNlTmFtZTogc3RyaW5nLCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYVR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHBlcnNvbmEgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgcGVyc29uYS5fa2V5ID09ICR7cGVyc29uYUlkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHBlcnNvbmFcbiAgYDtcbiAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICByZXR1cm4gY3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IGZvcm1hdFBlcnNvbmFSZXN1bHQgPSAocGVyc29uYTogUGVyc29uYVR5cGUgfCBudWxsIHwgdW5kZWZpbmVkLCBmYWxsYmFja1BlcnNvbmFJZCA9ICcnKTogUGVyc29uYVR5cGUgfCBudWxsID0+IHtcbiAgaWYoIXBlcnNvbmEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ucGVyc29uYSxcbiAgICBwZXJzb25hSWQ6IChwZXJzb25hIGFzIGFueSkuX2tleSB8fCBmYWxsYmFja1BlcnNvbmFJZFxuICB9IGFzIFBlcnNvbmFUeXBlO1xufTtcblxuY29uc3Qgbm9ybWFsaXplUmVsYXRpb25GaWx0ZXIgPSAocmVsYXRpb246IHVua25vd24pOiBQZXJzb25hUmVsYXRpb25GaWx0ZXIgPT4ge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhyZWxhdGlvbiB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYodmFsdWUgPT09ICdmb2xsb3dlcnMnIHx8IHZhbHVlID09PSAnZnJpZW5kcycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJ2ZvbGxvd2luZyc7XG59O1xuXG5jb25zdCByZXNvbHZlUGVyc29uYUxpc3RGaWx0ZXJzID0gYXN5bmMgKFxuICBmaWx0ZXJzOiBQZXJzb25hTGlzdEZpbHRlcnMgPSB7fVxuKTogUHJvbWlzZTxSZXF1aXJlZDxQZXJzb25hTGlzdEZpbHRlcnM+PiA9PiB7XG4gIGNvbnN0IGdlbmRlcnMgPSBBcnJheS5pc0FycmF5KGZpbHRlcnMuZ2VuZGVyKVxuICAgID8gZmlsdGVycy5nZW5kZXIubWFwKChnZW5kZXIpID0+IHBhcnNlQ2hhcihTdHJpbmcoZ2VuZGVyIHx8ICcnKSwgMSkudG9VcHBlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcblxuICByZXR1cm4ge1xuICAgIGdlbmRlcjogZ2VuZGVyc1xuICB9O1xufTtcblxuY29uc3QgaHlkcmF0ZVBlcnNvbmFMaXN0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFzOiBQZXJzb25hVHlwZVtdID0gW10pOiBQcm9taXNlPFBlcnNvbmFUeXBlW10+ID0+IHtcbiAgY29uc3QgaHlkcmF0ZWRQZXJzb25hcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHBlcnNvbmFzLm1hcChhc3luYyAocGVyc29uYSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYT8ucGVyc29uYUlkIHx8ICcnKSk7XG4gICAgICBjb25zdCBpc0Jsb2NrZWQgPSBuZXh0UGVyc29uYUlkXG4gICAgICAgID8gYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgbmV4dFBlcnNvbmFJZClcbiAgICAgICAgOiBmYWxzZTtcblxuICAgICAgaWYoaXNCbG9ja2VkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJzb25hVGFncyA9IG5leHRQZXJzb25hSWQgPyBhd2FpdCBnZXRUYWdMaXN0QnlJdGVtKGNvbnRleHQsIGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke25leHRQZXJzb25hSWR9YCkgOiBbXTtcblxuICAgICAgcmV0dXJuIGZvcm1hdFBlcnNvbmFSZXN1bHQoe1xuICAgICAgICAuLi4ocGVyc29uYSB8fCB7fSksXG4gICAgICAgIHRhZ3M6IHBlcnNvbmFUYWdzXG4gICAgICB9IGFzIFBlcnNvbmFUeXBlLCBuZXh0UGVyc29uYUlkKTtcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiBoeWRyYXRlZFBlcnNvbmFzLmZpbHRlcihCb29sZWFuKSBhcyBQZXJzb25hVHlwZVtdO1xufTtcblxuY29uc3QgZW5zdXJlUGVyc29uYUVkZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBwZXJzb25hRG9jSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKEVER0VTLkhBU19QRVJTT05BKTtcbiAgY29uc3QgZWRnZSA9IGNyZWF0ZVBlcnNvbmFFZGdlKGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3VzZXJJZH1gLCBwZXJzb25hRG9jSWQpO1xuXG4gIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge292ZXJ3cml0ZU1vZGU6ICdpZ25vcmUnLCByZXR1cm5OZXc6IHRydWUsIHNpbGVudDogdHJ1ZX0pO1xufTtcblxuY29uc3Qgc3luY1VzZXJQZXJzb25hID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgcGVyc29uYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHBlcnNvbmFJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgdXNlclVwZGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBwZXJzb25hSWRcbiAgfTtcbiAgY29uc3QgbWFwcGVkSW1hZ2VJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/LmltYWdlSWQgfHwgJycpKTtcblxuICBpZihtYXBwZWRJbWFnZUlkKSB7XG4gICAgdXNlclVwZGF0ZS5pbWFnZUlkID0gbWFwcGVkSW1hZ2VJZDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZVVzZXJRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIFVQREFURSAke3VzZXJJZH1cbiAgICBXSVRIICR7dXNlclVwZGF0ZX1cbiAgICBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCB1c2VyQ3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHVwZGF0ZVVzZXJRcnkpO1xuICBhd2FpdCB1c2VyQ3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hT3duZXIgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPHtcbiAgcGVyc29uYUlkOiBzdHJpbmc7XG4gIHVzZXI6IFVzZXJUeXBlIHwgbnVsbDtcbiAgdXNlcklkOiBzdHJpbmc7XG59PiA9PiB7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJyk7XG4gIGNvbnN0IGV4cGxpY2l0VXNlcklkID0gcGFyc2VJZChwZXJzb25hPy51c2VySWQgfHwgJycpO1xuICBjb25zdCB1c2VySWQgPSBleHBsaWNpdFVzZXJJZCB8fCBzZXNzaW9uVXNlcklkO1xuXG4gIGlmKCF1c2VySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdmFsaWQgdXNlcklkIGlzIHJlcXVpcmVkIGZvciBwZXJzb25hIGFjdGlvbnMuJyk7XG4gIH1cblxuICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlckJ5S2V5KGNvbnRleHQuZGF0YWJhc2VOYW1lLCB1c2VySWQpO1xuICBjb25zdCBsaW5rZWRQZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwZXJzb25hPy5fa2V5IHx8IHBlcnNvbmE/LnBlcnNvbmFJZCB8fCB1c2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgY29uc3QgcGVyc29uYUlkID0gbGlua2VkUGVyc29uYUlkIHx8IGNyZWF0ZUhhc2godXNlcklkKTtcblxuICByZXR1cm4ge1xuICAgIHBlcnNvbmFJZCxcbiAgICB1c2VyLFxuICAgIHVzZXJJZFxuICB9O1xufTtcblxuY29uc3Qgc2F2ZVBlcnNvbmFEb2N1bWVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYTogUGVyc29uYVR5cGUsXG4gIHBlcnNvbmFJZDogc3RyaW5nLFxuICB1c2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxQZXJzb25hVHlwZT4gPT4ge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBiYXNlUGVyc29uYSA9IGJ1aWxkUGVyc29uYU11dGF0aW9uKHsuLi5wZXJzb25hLCB1c2VySWR9KTtcbiAgY29uc3QgY3VzdG9tUGVyc29uYSA9IGJ1aWxkQ3VzdG9tUGVyc29uYU11dGF0aW9uKHBlcnNvbmEpO1xuICBjb25zdCB1cHNlcnRQZXJzb25hUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHtwZXJzb25hSWR9fVxuICAgIElOU0VSVCAke3tcbiAgICAgIF9rZXk6IHBlcnNvbmFJZCxcbiAgICAgIC4uLmJhc2VQZXJzb25hLFxuICAgICAgLi4uY3VzdG9tUGVyc29uYSxcbiAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICB1c2VySWRcbiAgICB9fVxuICAgIFVQREFURSAke3tcbiAgICAgIC4uLmJhc2VQZXJzb25hLFxuICAgICAgLi4uY3VzdG9tUGVyc29uYSxcbiAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICB1c2VySWRcbiAgICB9fVxuICAgIElOICR7cGVyc29uYXNDb2xsZWN0aW9ufVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3QgcGVyc29uYUN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeSh1cHNlcnRQZXJzb25hUXVlcnkpO1xuICByZXR1cm4gYXdhaXQgcGVyc29uYUN1cnNvci5uZXh0KCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUJ5SWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUJ5SWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0UGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gICAgaWYoIWZvcm1hdFBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGdldFBlcnNvbmFCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgZm9ybWF0UGVyc29uYUlkKTtcblxuICAgIGlmKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZihhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBmb3JtYXRQZXJzb25hSWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBbdGFncywgcmVsYXRpb25zaGlwU3RhdGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZ2V0VGFnTGlzdEJ5SXRlbShjb250ZXh0LCBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtmb3JtYXRQZXJzb25hSWR9YCksXG4gICAgICBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgZm9ybWF0UGVyc29uYUlkKVxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGZvcm1hdFBlcnNvbmFSZXN1bHQoe1xuICAgICAgLi4ucGVyc29uYSxcbiAgICAgIC4uLnJlbGF0aW9uc2hpcFN0YXRlLFxuICAgICAgdGFnc1xuICAgIH0gYXMgUGVyc29uYVR5cGUsIGZvcm1hdFBlcnNvbmFJZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtwZXJzb25hSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hTGlzdEJ5SWRzID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFJZHM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPFBlcnNvbmFUeXBlW10+ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFBlcnNvbmFJZHMgPSBBcnJheS5pc0FycmF5KHBlcnNvbmFJZHMpXG4gICAgPyBwZXJzb25hSWRzLm1hcCgocGVyc29uYUlkKSA9PiBwYXJzZUlkKHBlcnNvbmFJZCkpLmZpbHRlcihCb29sZWFuKVxuICAgIDogW107XG5cbiAgaWYoIW5vcm1hbGl6ZWRQZXJzb25hSWRzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgUHJvbWlzZS5hbGwobm9ybWFsaXplZFBlcnNvbmFJZHMubWFwKChwZXJzb25hSWQpID0+IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpKTtcbiAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlcihCb29sZWFuKSBhcyBQZXJzb25hVHlwZVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBlcnNvbmFMaXN0QnlSZWxhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb20gPSAwLFxuICAgIHBlcnNvbmFJZCA9ICcnLFxuICAgIHJlbGF0aW9uID0gJ2ZvbGxvd2luZycsXG4gICAgdG8gPSAyNFxuICB9OiB7ZnJvbT86IG51bWJlcjsgcGVyc29uYUlkPzogc3RyaW5nOyByZWxhdGlvbj86IFBlcnNvbmFSZWxhdGlvbkZpbHRlciB8IHN0cmluZzsgdG8/OiBudW1iZXJ9ID0ge31cbik6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uJztcbiAgY29uc3QgYWN0aXZlUmVsYXRpb24gPSBub3JtYWxpemVSZWxhdGlvbkZpbHRlcihyZWxhdGlvbik7XG4gIGNvbnN0IGxpbWl0RnJvbSA9IE51bWJlcihmcm9tKSA+PSAwID8gTnVtYmVyKGZyb20pIDogMDtcbiAgY29uc3QgbGltaXRUbyA9IE51bWJlcih0bykgPiBsaW1pdEZyb20gPyBOdW1iZXIodG8pIDogbGltaXRGcm9tICsgMjQ7XG4gIGNvbnN0IGxpbWl0Q291bnQgPSBsaW1pdFRvIC0gbGltaXRGcm9tO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gYXdhaXQgZ2V0U2Vzc2lvblBlcnNvbmFJZChjb250ZXh0LCBwZXJzb25hSWQpO1xuXG4gIGlmKCFzZXNzaW9uUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzZXNzaW9uUGVyc29uYURvY0lkID0gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7c2Vzc2lvblBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IG5hbWVkUGVyc29uYUZpbHRlciA9IGxpdGVyYWwoJ0ZJTFRFUiBMRU5HVEgoVFJJTShwZXJzb25hLm5hbWUgfHwgXCJcIikpID4gMCcpO1xuICAgIGNvbnN0IHJlbGF0aW9uUXVlcnk6IEFxbFF1ZXJ5ID0gYWN0aXZlUmVsYXRpb24gPT09ICdmb2xsb3dpbmcnXG4gICAgICA/IGFxbGBcbiAgICAgICAgRk9SIGNvbm5lY3Rpb24gSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi5fZnJvbSA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGNvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGNvbm5lY3Rpb24uX3RvLCAke2Ake0NPTExFQ1RJT05TLlBFUlNPTkFTfS9gfSlcbiAgICAgICAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKGNvbm5lY3Rpb24uX3RvKVxuICAgICAgICAgIExFVCBvd25lciA9IERPQ1VNRU5UKCR7dXNlcnNDb2xsZWN0aW9ufSwgcGVyc29uYS51c2VySWQpXG4gICAgICAgICAgTEVUIHBlcnNvbmFCaXJ0aGRhdGUgPSBUT19OVU1CRVIob3duZXIuYmlydGhkYXRlIHx8IDApXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbFxuICAgICAgICAgICR7bmFtZWRQZXJzb25hRmlsdGVyfVxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlID4gMFxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlIDw9ICR7bWluaW11bUFkdWx0QmlydGhkYXRlfVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiBMRU5HVEgoXG4gICAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwuX2Zyb20gPT0gcGVyc29uYS5faWRcbiAgICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fdG8gPT0gJHtzZXNzaW9uUGVyc29uYURvY0lkfVxuICAgICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICAgICAgICBSRVRVUk4gMVxuICAgICAgICAgICAgKSA+IDAsXG4gICAgICAgICAgICBpc0ZvbGxvd2luZzogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICBgXG4gICAgICA6IGFjdGl2ZVJlbGF0aW9uID09PSAnZm9sbG93ZXJzJ1xuICAgICAgICA/IGFxbGBcbiAgICAgICAgRk9SIGNvbm5lY3Rpb24gSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi5fdG8gPT0gJHtzZXNzaW9uUGVyc29uYURvY0lkfVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgIEZJTFRFUiBTVEFSVFNfV0lUSChjb25uZWN0aW9uLl9mcm9tLCAke2Ake0NPTExFQ1RJT05TLlBFUlNPTkFTfS9gfSlcbiAgICAgICAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKGNvbm5lY3Rpb24uX2Zyb20pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgaXNGb2xsb3dpbmcgPSBMRU5HVEgoXG4gICAgICAgICAgICBGT1IgcmVjaXByb2NhbCBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fZnJvbSA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl90byA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICBSRVRVUk4gMVxuICAgICAgICAgICkgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbFxuICAgICAgICAgICR7bmFtZWRQZXJzb25hRmlsdGVyfVxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlID4gMFxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlIDw9ICR7bWluaW11bUFkdWx0QmlydGhkYXRlfVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiB0cnVlLFxuICAgICAgICAgICAgaXNGb2xsb3dpbmdcbiAgICAgICAgICB9KVxuICAgICAgYFxuICAgICAgICA6IGFxbGBcbiAgICAgICAgRk9SIGZvbGxvd0Nvbm5lY3Rpb24gSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgZm9sbG93Q29ubmVjdGlvbi5fZnJvbSA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGZvbGxvd0Nvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGZvbGxvd0Nvbm5lY3Rpb24uX3RvLCAke2Ake0NPTExFQ1RJT05TLlBFUlNPTkFTfS9gfSlcbiAgICAgICAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKGZvbGxvd0Nvbm5lY3Rpb24uX3RvKVxuICAgICAgICAgIExFVCBvd25lciA9IERPQ1VNRU5UKCR7dXNlcnNDb2xsZWN0aW9ufSwgcGVyc29uYS51c2VySWQpXG4gICAgICAgICAgTEVUIHBlcnNvbmFCaXJ0aGRhdGUgPSBUT19OVU1CRVIob3duZXIuYmlydGhkYXRlIHx8IDApXG4gICAgICAgICAgTEVUIGlzRm9sbG93ZWRCeSA9IExFTkdUSChcbiAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsQ29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbENvbm5lY3Rpb24uX2Zyb20gPT0gcGVyc29uYS5faWRcbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWxDb25uZWN0aW9uLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsQ29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICBSRVRVUk4gMVxuICAgICAgICAgICkgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbFxuICAgICAgICAgICR7bmFtZWRQZXJzb25hRmlsdGVyfVxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlID4gMFxuICAgICAgICAgIEZJTFRFUiBwZXJzb25hQmlydGhkYXRlIDw9ICR7bWluaW11bUFkdWx0QmlydGhkYXRlfVxuICAgICAgICAgIEZJTFRFUiBpc0ZvbGxvd2VkQnlcbiAgICAgICAgICBTT1JUIExPV0VSKHBlcnNvbmEubmFtZSB8fCAnJykgQVNDXG4gICAgICAgICAgTElNSVQgJHtsaW1pdEZyb219LCAke2xpbWl0Q291bnR9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHBlcnNvbmEsIHtcbiAgICAgICAgICAgIGJpcnRoZGF0ZTogcGVyc29uYUJpcnRoZGF0ZSxcbiAgICAgICAgICAgIGlzRm9sbG93ZWRCeTogdHJ1ZSxcbiAgICAgICAgICAgIGlzRm9sbG93aW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNGcmllbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgYDtcblxuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHJlbGF0aW9uUXVlcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpIGFzIFBlcnNvbmFUeXBlW107XG5cbiAgICByZXR1cm4gKGF3YWl0IGh5ZHJhdGVQZXJzb25hTGlzdChjb250ZXh0LCBwZXJzb25hcykpLm1hcCgocGVyc29uYSkgPT4gKHtcbiAgICAgIC4uLnBlcnNvbmEsXG4gICAgICBpc0ZyaWVuZDogQm9vbGVhbihwZXJzb25hLmlzRm9sbG93aW5nICYmIHBlcnNvbmEuaXNGb2xsb3dlZEJ5KVxuICAgIH0pKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZnJvbSwgcGVyc29uYUlkLCByZWxhdGlvbjogYWN0aXZlUmVsYXRpb24sIHRvfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUxpc3RCeVRhZ3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHt0YWdzID0gW10sIHVzZXJuYW1lID0gJyd9OiB7dGFncz86IHN0cmluZ1tdOyB1c2VybmFtZT86IHN0cmluZ30sXG4gIHtmaWx0ZXJzID0ge30sIGZyb20gPSAwLCB0byA9IDEwfToge2ZpbHRlcnM/OiBQZXJzb25hTGlzdEZpbHRlcnM7IGZyb20/OiBudW1iZXI7IHRvPzogbnVtYmVyfSA9IHt9XG4pOiBQcm9taXNlPFBlcnNvbmFUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBlcnNvbmFMaXN0QnlUYWdzJztcbiAgY29uc3QgZm9ybWF0VGFncyA9IEFycmF5LmlzQXJyYXkodGFncylcbiAgICA/IHRhZ3MucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgdGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBuZXh0VGFnID0gU3RyaW5nKHRhZ05hbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZihuZXh0VGFnKSB7XG4gICAgICAgIGxpc3QucHVzaChuZXh0VGFnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfSwgW10pXG4gICAgOiBbXTtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBTdHJpbmcodXNlcm5hbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsaW1pdEZyb20gPSBOdW1iZXIoZnJvbSkgPj0gMCA/IE51bWJlcihmcm9tKSA6IDA7XG4gIGNvbnN0IGxpbWl0VG8gPSBOdW1iZXIodG8pID4gbGltaXRGcm9tID8gTnVtYmVyKHRvKSA6IGxpbWl0RnJvbSArIDEwO1xuICBjb25zdCBsaW1pdENvdW50ID0gbGltaXRUbyAtIGxpbWl0RnJvbTtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKTtcbiAgY29uc3Qge2dlbmRlcjogdGFyZ2V0R2VuZGVyc30gPSBhd2FpdCByZXNvbHZlUGVyc29uYUxpc3RGaWx0ZXJzKGZpbHRlcnMpO1xuXG4gIGlmKCFmb3JtYXRUYWdzLmxlbmd0aCB8fCAhdGFyZ2V0R2VuZGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJuYW1lRmlsdGVyID0gZm9ybWF0VXNlcm5hbWVcbiAgICAgID8gbGl0ZXJhbChgRklMVEVSIENPTlRBSU5TKExPV0VSKHBlcnNvbmEubmFtZSB8fCBcIlwiKSwgXCIke2Zvcm1hdFVzZXJuYW1lfVwiKWApXG4gICAgICA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IG5hbWVkUGVyc29uYUZpbHRlciA9IGxpdGVyYWwoJ0ZJTFRFUiBMRU5HVEgoVFJJTShwZXJzb25hLm5hbWUgfHwgXCJcIikpID4gMCcpO1xuICAgIGNvbnN0IHNlc3Npb25GaWx0ZXIgPSBzZXNzaW9uVXNlcklkXG4gICAgICA/IGxpdGVyYWwoYEZJTFRFUiBwZXJzb25hLnVzZXJJZCAhPSBcIiR7c2Vzc2lvblVzZXJJZH1cImApXG4gICAgICA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IHBlcnNvbmFRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgdCBJTiAke3RhZ3NDb2xsZWN0aW9ufVxuICAgICAgICBGSUxURVIgUE9TSVRJT04oJHtmb3JtYXRUYWdzfSwgTE9XRVIodC5uYW1lKSlcbiAgICAgICAgRk9SIHBlcnNvbmEsIGVkZ2UgSU4gT1VUQk9VTkQgdCAke2lzVGFnZ2VkQ29sbGVjdGlvbn1cbiAgICAgICAgICBPUFRJT05TIHtiZnM6IHRydWUsIHVuaXF1ZVZlcnRpY2VzOiBcImdsb2JhbFwiLCB2ZXJ0ZXhDb2xsZWN0aW9uczogJHtDT0xMRUNUSU9OUy5QRVJTT05BU319XG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgcGVyc29uYUdlbmRlciA9IFVQUEVSKHBlcnNvbmEuZ2VuZGVyIHx8IFwiXCIpXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgJHt1c2VybmFtZUZpbHRlcn1cbiAgICAgICAgICAke3Nlc3Npb25GaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFHZW5kZXIgIT0gXCJcIlxuICAgICAgICAgIEZJTFRFUiBQT1NJVElPTigke3RhcmdldEdlbmRlcnN9LCBwZXJzb25hR2VuZGVyKVxuICAgICAgICAgIENPTExFQ1QgcGVyc29uYUtleSA9IHBlcnNvbmEuX2tleSBJTlRPIGdyb3VwZWQgPSB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBwZXJzb25hLFxuICAgICAgICAgICAgbWF0Y2hlZFRhZzogTE9XRVIodC5uYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgICBMRVQgbWF0Y2hlZFRhZ3MgPSBVTklRVUUoZ3JvdXBlZFsqXS5tYXRjaGVkVGFnKVxuICAgICAgICAgIExFVCBiaXJ0aGRhdGUgPSBGSVJTVChncm91cGVkWypdLmJpcnRoZGF0ZSlcbiAgICAgICAgICBMRVQgcGVyc29uYURvYyA9IEZJUlNUKGdyb3VwZWRbKl0ucGVyc29uYSlcbiAgICAgICAgICBTT1JUIExFTkdUSChtYXRjaGVkVGFncykgREVTQywgTE9XRVIocGVyc29uYURvYy5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYURvYywge2JpcnRoZGF0ZSwgbWF0Y2hlZFRhZ0NvdW50OiBMRU5HVEgobWF0Y2hlZFRhZ3MpfSlcbiAgICBgO1xuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHBlcnNvbmFRdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSkgYXMgUGVyc29uYVR5cGVbXTtcblxuICAgIHJldHVybiBoeWRyYXRlUGVyc29uYUxpc3QoY29udGV4dCwgcGVyc29uYXMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsdGVyczoge2dlbmRlcjogdGFyZ2V0R2VuZGVyc30sIGZyb20sIHRhZ3M6IGZvcm1hdFRhZ3MsIHRvLCB1c2VybmFtZTogZm9ybWF0VXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQZXJzb25hID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmE6IFBlcnNvbmFUeXBlKTogUHJvbWlzZTxQZXJzb25hVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUGVyc29uYSc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7cGVyc29uYUlkLCB1c2VySWR9ID0gYXdhaXQgcmVzb2x2ZVBlcnNvbmFPd25lcihjb250ZXh0LCBwZXJzb25hKTtcbiAgICBjb25zdCBzYXZlZFBlcnNvbmEgPSBhd2FpdCBzYXZlUGVyc29uYURvY3VtZW50KGNvbnRleHQsIHBlcnNvbmEsIHBlcnNvbmFJZCwgdXNlcklkKTtcbiAgICBjb25zdCBwZXJzb25hRG9jSWQgPSBzYXZlZFBlcnNvbmE/Ll9pZCB8fCBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzYXZlZFBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYUlkfWA7XG5cbiAgICBhd2FpdCBlbnN1cmVQZXJzb25hRWRnZShjb250ZXh0LCB1c2VySWQsIHBlcnNvbmFEb2NJZCk7XG4gICAgYXdhaXQgc3luY1VzZXJQZXJzb25hKGNvbnRleHQsIHVzZXJJZCwgc2F2ZWRQZXJzb25hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwZXJzb25hSWQpO1xuXG4gICAgcmV0dXJuIChhd2FpdCBnZXRQZXJzb25hQnlJZChjb250ZXh0LCBwZXJzb25hSWQpKSB8fCBmb3JtYXRQZXJzb25hUmVzdWx0KHNhdmVkUGVyc29uYSwgcGVyc29uYUlkKSBhcyBQZXJzb25hVHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmF9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQZXJzb25hID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmE6IFBlcnNvbmFUeXBlKTogUHJvbWlzZTxQZXJzb25hVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlUGVyc29uYSc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7cGVyc29uYUlkLCB1c2VySWR9ID0gYXdhaXQgcmVzb2x2ZVBlcnNvbmFPd25lcihjb250ZXh0LCBwZXJzb25hKTtcbiAgICBjb25zdCBzYXZlZFBlcnNvbmEgPSBhd2FpdCBzYXZlUGVyc29uYURvY3VtZW50KGNvbnRleHQsIHBlcnNvbmEsIHBlcnNvbmFJZCwgdXNlcklkKTtcbiAgICBjb25zdCBwZXJzb25hRG9jSWQgPSBzYXZlZFBlcnNvbmE/Ll9pZCB8fCBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzYXZlZFBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYUlkfWA7XG5cbiAgICBhd2FpdCBlbnN1cmVQZXJzb25hRWRnZShjb250ZXh0LCB1c2VySWQsIHBlcnNvbmFEb2NJZCk7XG4gICAgYXdhaXQgc3luY1VzZXJQZXJzb25hKGNvbnRleHQsIHVzZXJJZCwgc2F2ZWRQZXJzb25hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwZXJzb25hSWQpO1xuXG4gICAgcmV0dXJuIChhd2FpdCBnZXRQZXJzb25hQnlJZChjb250ZXh0LCBwZXJzb25hSWQpKSB8fCBmb3JtYXRQZXJzb25hUmVzdWx0KHNhdmVkUGVyc29uYSwgcGVyc29uYUlkKSBhcyBQZXJzb25hVHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmF9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VOdW0iLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsImFxbCIsImxpdGVyYWwiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiQ29ubmVjdGlvbktpbmRzIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJnZXRDb25uZWN0aW9uIiwiZ2V0VGFnTGlzdEJ5SXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJtaW5pbXVtQWR1bHRBZ2UiLCJtaW5pbXVtQWR1bHRCaXJ0aGRhdGUiLCJEYXRlIiwibm93IiwicGVyc29uYUFjdGlvbkV4dGVuc2lvbnMiLCJ1c2Vyc0NvbGxlY3Rpb24iLCJVU0VSUyIsInBlcnNvbmFzQ29sbGVjdGlvbiIsIlBFUlNPTkFTIiwidGFnc0NvbGxlY3Rpb24iLCJUQUdTIiwiaXNUYWdnZWRDb2xsZWN0aW9uIiwiSVNfVEFHR0VEIiwiaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24iLCJIQVNfQ09OTkVDVElPTiIsImNvbmZpZ3VyZVBlcnNvbmFBY3Rpb25zIiwiZXh0ZW5zaW9ucyIsImJ1aWxkUGVyc29uYU11dGF0aW9uIiwicGVyc29uYSIsImNpdHkiLCJjb3VudHJ5Iiwic3RyZWV0MSIsInN0cmVldDIiLCJ6aXAiLCJzdGF0ZSIsInRpbWV6b25lIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJnZW5kZXIiLCJpbWFnZUlkIiwibmFtZSIsImxhdGl0dWRlIiwibG9jYXRpb24iLCJsb25naXR1ZGUiLCJ1c2VySWQiLCJ1bmRlZmluZWQiLCJ0b1VwcGVyQ2FzZSIsImJ1aWxkQ3VzdG9tUGVyc29uYU11dGF0aW9uIiwiZmllbGRzIiwibWFwQ3VzdG9tUGVyc29uYUZpZWxkcyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsImNyZWF0ZVBlcnNvbmFFZGdlIiwidXNlckRvY0lkIiwicGVyc29uYURvY0lkIiwiX2Zyb20iLCJfa2V5IiwiX3RvIiwiYWRkZWQiLCJnZXRVc2VyQnlLZXkiLCJkYXRhYmFzZU5hbWUiLCJxcnkiLCJjdXJzb3IiLCJxdWVyeSIsIm5leHQiLCJnZXRTZXNzaW9uUGVyc29uYUlkIiwiY29udGV4dCIsInBlcnNvbmFJZCIsInJlcXVlc3RlZFBlcnNvbmFJZCIsIlN0cmluZyIsInNlc3Npb25Vc2VySWQiLCJzZXNzaW9uIiwic2Vzc2lvblBlcnNvbmFJZCIsInVzZXIiLCJnZXRQZXJzb25hT3duZXJVc2VySWQiLCJub3JtYWxpemVkUGVyc29uYUlkIiwiZ2V0UGVyc29uYUJ5S2V5IiwiaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQiLCJ0YXJnZXRVc2VySWQiLCJzZXNzaW9uVXNlcklkT3ZlcnJpZGUiLCJub3JtYWxpemVkVGFyZ2V0VXNlcklkIiwib3V0Ym91bmRCbG9jayIsImluYm91bmRCbG9jayIsIlByb21pc2UiLCJhbGwiLCJCTE9DSyIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwidGFyZ2V0UGVyc29uYUlkIiwic2Vzc2lvblBlcnNvbmFJZE92ZXJyaWRlIiwibm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsImlzQmxvY2tlZCIsImlzRm9sbG93ZWRCeSIsImlzRm9sbG93aW5nIiwiaXNGcmllbmQiLCJvdXRib3VuZENvbm5lY3Rpb24iLCJpbmJvdW5kQ29ubmVjdGlvbiIsIkZPTExPVyIsImdldFBlcnNvbmFGb2xsb3dlckNvdW50IiwiYWN0aW9uIiwiZm9ybWF0UGVyc29uYUlkIiwiTnVtYmVyIiwiZXJyb3IiLCJjYXRlZ29yeSIsInBhcmFtcyIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50IiwiZm9ybWF0UGVyc29uYVJlc3VsdCIsImZhbGxiYWNrUGVyc29uYUlkIiwibm9ybWFsaXplUmVsYXRpb25GaWx0ZXIiLCJyZWxhdGlvbiIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMiLCJmaWx0ZXJzIiwiZ2VuZGVycyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImZpbHRlciIsIkJvb2xlYW4iLCJoeWRyYXRlUGVyc29uYUxpc3QiLCJwZXJzb25hcyIsImh5ZHJhdGVkUGVyc29uYXMiLCJuZXh0UGVyc29uYUlkIiwicGVyc29uYVRhZ3MiLCJ0YWdzIiwiZW5zdXJlUGVyc29uYUVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJIQVNfUEVSU09OQSIsImVkZ2UiLCJzYXZlIiwib3ZlcndyaXRlTW9kZSIsInJldHVybk5ldyIsInNpbGVudCIsInN5bmNVc2VyUGVyc29uYSIsInVzZXJVcGRhdGUiLCJtb2RpZmllZCIsIm1hcHBlZEltYWdlSWQiLCJ1cGRhdGVVc2VyUXJ5IiwidXNlckN1cnNvciIsInJlc29sdmVQZXJzb25hT3duZXIiLCJleHBsaWNpdFVzZXJJZCIsIkVycm9yIiwibGlua2VkUGVyc29uYUlkIiwic2F2ZVBlcnNvbmFEb2N1bWVudCIsImJhc2VQZXJzb25hIiwiY3VzdG9tUGVyc29uYSIsInVwc2VydFBlcnNvbmFRdWVyeSIsInBlcnNvbmFDdXJzb3IiLCJnZXRQZXJzb25hQnlJZCIsInJlbGF0aW9uc2hpcFN0YXRlIiwiZ2V0UGVyc29uYUxpc3RCeUlkcyIsInBlcnNvbmFJZHMiLCJub3JtYWxpemVkUGVyc29uYUlkcyIsImxlbmd0aCIsImdldFBlcnNvbmFMaXN0QnlSZWxhdGlvbiIsImZyb20iLCJ0byIsImFjdGl2ZVJlbGF0aW9uIiwibGltaXRGcm9tIiwibGltaXRUbyIsImxpbWl0Q291bnQiLCJzZXNzaW9uUGVyc29uYURvY0lkIiwibmFtZWRQZXJzb25hRmlsdGVyIiwicmVsYXRpb25RdWVyeSIsInRoZW4iLCJnZXRQZXJzb25hTGlzdEJ5VGFncyIsInVzZXJuYW1lIiwiZm9ybWF0VGFncyIsImxpc3QiLCJ0YWdOYW1lIiwibmV4dFRhZyIsInB1c2giLCJmb3JtYXRVc2VybmFtZSIsInRhcmdldEdlbmRlcnMiLCJ1c2VybmFtZUZpbHRlciIsInNlc3Npb25GaWx0ZXIiLCJwZXJzb25hUXVlcnkiLCJhZGRQZXJzb25hIiwic2F2ZWRQZXJzb25hIiwiX2lkIiwidXBkYXRlUGVyc29uYSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLFdBQVcsRUFDWEMsWUFBWSxRQUNQLGVBQWU7QUFDdEIsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFFckMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLGVBQWUsUUFBTyxnQ0FBZ0M7QUFDOUQsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsYUFBYSxRQUFPLG1CQUFtQjtBQUMvQyxTQUFRQyxnQkFBZ0IsUUFBTyxZQUFZO0FBUzNDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxrQkFBa0I7QUFDeEIsTUFBTUMsd0JBQXdCQyxLQUFLQyxHQUFHLEtBQU1ILGtCQUFrQixTQUFT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
|
|
615
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9wZXJzb25hcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcmVhdGVIYXNoLFxuICBwYXJzZUFyYW5nb0lkLFxuICBwYXJzZUNoYXIsXG4gIHBhcnNlSWQsXG4gIHBhcnNlTnVtLFxuICBwYXJzZVN0cmluZyxcbiAgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7Q29ubmVjdGlvbktpbmRzfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9ufSBmcm9tICcuL2Nvbm5lY3Rpb25zLmpzJztcbmltcG9ydCB7Z2V0VGFnTGlzdEJ5SXRlbX0gZnJvbSAnLi90YWdzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RWRnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtQZXJzb25hVHlwZX0gZnJvbSAnLi4vdHlwZXMvcGVyc29uYXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncGVyc29uYXMnO1xuY29uc3QgbWluaW11bUFkdWx0QWdlID0gMTg7XG5jb25zdCBtaW5pbXVtQWR1bHRCaXJ0aGRhdGUgPSBEYXRlLm5vdygpIC0gKG1pbmltdW1BZHVsdEFnZSAqIDM2NS4yNSAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXG5leHBvcnQgdHlwZSBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyA9IFJlYWRvbmx5PHtcbiAgcmVhZG9ubHkgbWFwQ3VzdG9tUGVyc29uYUZpZWxkcz86IChwZXJzb25hOiBQZXJzb25hVHlwZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59PjtcblxuZXhwb3J0IHR5cGUgUGVyc29uYUxpc3RGaWx0ZXJzID0gUmVhZG9ubHk8e1xuICByZWFkb25seSBnZW5kZXI/OiBzdHJpbmdbXTtcbn0+O1xuXG5leHBvcnQgdHlwZSBQZXJzb25hUmVsYXRpb25GaWx0ZXIgPSAnZm9sbG93ZXJzJyB8ICdmb2xsb3dpbmcnIHwgJ2ZyaWVuZHMnO1xuXG5sZXQgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge307XG5jb25zdCB1c2Vyc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlVTRVJTKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuY29uc3QgdGFnc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlRBR1MpO1xuY29uc3QgaXNUYWdnZWRDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5JU19UQUdHRUQpO1xuY29uc3QgaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19DT05ORUNUSU9OKTtcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyZVBlcnNvbmFBY3Rpb25zID0gKGV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge30pOiB2b2lkID0+IHtcbiAgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnMgPSB7Li4uZXh0ZW5zaW9uc307XG59O1xuXG5jb25zdCBidWlsZFBlcnNvbmFNdXRhdGlvbiA9IChwZXJzb25hOiBQZXJzb25hVHlwZSk6IFBhcnRpYWw8UGVyc29uYVR5cGU+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgemlwLFxuICAgIHN0YXRlLFxuICAgIHRpbWV6b25lLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBnZW5kZXIsXG4gICAgaW1hZ2VJZCxcbiAgICBuYW1lLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvY2F0aW9uLFxuICAgIGxvbmdpdHVkZSxcbiAgICB1c2VySWRcbiAgfSA9IHBlcnNvbmE7XG5cbiAgcmV0dXJuIHtcbiAgICBjaXR5OiBjaXR5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY2l0eSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IGNvdW50cnkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjb3VudHJ5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgZmlyc3ROYW1lOiBmaXJzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihmaXJzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBnZW5kZXI6IGdlbmRlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VDaGFyKGdlbmRlciwgMSkudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICBpbWFnZUlkOiBpbWFnZUlkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKGltYWdlSWQpIDogdW5kZWZpbmVkLFxuICAgIGxhc3ROYW1lOiBsYXN0TmFtZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGxhc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvbiAhPT0gdW5kZWZpbmVkID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihuYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHN0YXRlICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RhdGUsIDIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDE6IHN0cmVldDEgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0Mjogc3RyZWV0MiAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB0aW1lem9uZTogdGltZXpvbmUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih0aW1lem9uZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHVzZXJJZDogdXNlcklkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKHVzZXJJZCkgOiB1bmRlZmluZWQsXG4gICAgemlwOiB6aXAgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih6aXAsIDE2KSA6IHVuZGVmaW5lZFxuICB9O1xufTtcblxuY29uc3QgYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24gPSAocGVyc29uYTogUGVyc29uYVR5cGUpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGZpZWxkcyA9IHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zLm1hcEN1c3RvbVBlcnNvbmFGaWVsZHM/LihwZXJzb25hKSB8fCB7fTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmllbGRzKS5yZWR1Y2UoKHJlc3VsdCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59O1xuXG5jb25zdCBjcmVhdGVQZXJzb25hRWRnZSA9ICh1c2VyRG9jSWQ6IHN0cmluZywgcGVyc29uYURvY0lkOiBzdHJpbmcpOiBFZGdlVHlwZSA9PiAoe1xuICBfZnJvbTogcGFyc2VBcmFuZ29JZCh1c2VyRG9jSWQpLFxuICBfa2V5OiBjcmVhdGVIYXNoKGBwZXJzb25hLSR7dXNlckRvY0lkfS0ke3BlcnNvbmFEb2NJZH1gKSxcbiAgX3RvOiBwYXJzZUFyYW5nb0lkKHBlcnNvbmFEb2NJZCksXG4gIGFkZGVkOiBEYXRlLm5vdygpXG59KTtcblxuY29uc3QgZ2V0VXNlckJ5S2V5ID0gYXN5bmMgKGRhdGFiYXNlTmFtZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8VXNlclR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHVzZXIgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgdXNlci5fa2V5ID09ICR7dXNlcklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVzZXJcbiAgYDtcbiAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICByZXR1cm4gY3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QZXJzb25hSWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmVxdWVzdGVkUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZihyZXF1ZXN0ZWRQZXJzb25hSWQpIHtcbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEuX2tleSA9PSAke3JlcXVlc3RlZFBlcnNvbmFJZH1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEudXNlcklkID09ICR7c2Vzc2lvblVzZXJJZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gcGVyc29uYS5fa2V5XG4gICAgYCk7XG5cbiAgICByZXR1cm4gcGFyc2VJZChTdHJpbmcoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAnJykpO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKHNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gc2Vzc2lvblBlcnNvbmFJZDtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXJCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgc2Vzc2lvblVzZXJJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyh1c2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hT3duZXJVc2VySWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFJZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFub3JtYWxpemVkUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGdldFBlcnNvbmFCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgbm9ybWFsaXplZFBlcnNvbmFJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyhwZXJzb25hPy51c2VySWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0VXNlcklkOiBzdHJpbmcsXG4gIHNlc3Npb25Vc2VySWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKHNlc3Npb25Vc2VySWRPdmVycmlkZSB8fCAnJykgfHwgcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgPSBwYXJzZUlkKHRhcmdldFVzZXJJZCk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgfHwgc2Vzc2lvblVzZXJJZCA9PT0gbm9ybWFsaXplZFRhcmdldFVzZXJJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IFtvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBzZXNzaW9uVXNlcklkLFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0VXNlcklkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICAgKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFVzZXJJZCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgc2Vzc2lvblVzZXJJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgIClcbiAgXSk7XG5cbiAgcmV0dXJuICEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0UGVyc29uYUlkOiBzdHJpbmcsXG4gIHNlc3Npb25QZXJzb25hSWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKHNlc3Npb25QZXJzb25hSWRPdmVycmlkZSB8fCAnJykgfHwgYXdhaXQgZ2V0U2Vzc2lvblBlcnNvbmFJZChjb250ZXh0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCA9IHBhcnNlSWQodGFyZ2V0UGVyc29uYUlkKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCB8fCBzZXNzaW9uUGVyc29uYUlkID09PSBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBbdGFyZ2V0VXNlcklkLCBvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFBlcnNvbmFPd25lclVzZXJJZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgc2Vzc2lvblBlcnNvbmFJZCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApXG4gIF0pO1xuXG4gIGlmKCEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYodGFyZ2V0VXNlcklkICYmIHNlc3Npb25Vc2VySWQpIHtcbiAgICByZXR1cm4gaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgdGFyZ2V0VXNlcklkLCBzZXNzaW9uVXNlcklkKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFBlcnNvbmFJZDogc3RyaW5nLFxuICBzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8UGljazxQZXJzb25hVHlwZSwgJ2lzQmxvY2tlZCcgfCAnaXNGb2xsb3dlZEJ5JyB8ICdpc0ZvbGxvd2luZycgfCAnaXNGcmllbmQnPj4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUgfHwgJycpIHx8IGF3YWl0IGdldFNlc3Npb25QZXJzb25hSWQoY29udGV4dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgPSBwYXJzZUlkKHRhcmdldFBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCA9PT0gbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6IGZhbHNlLFxuICAgICAgaXNGb2xsb3dlZEJ5OiBmYWxzZSxcbiAgICAgIGlzRm9sbG93aW5nOiBmYWxzZSxcbiAgICAgIGlzRnJpZW5kOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvdXRib3VuZEJsb2NrID0gYXdhaXQgZ2V0Q29ubmVjdGlvbihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgKTtcblxuICBpZihhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6ICEhb3V0Ym91bmRCbG9jayxcbiAgICAgIGlzRm9sbG93ZWRCeTogZmFsc2UsXG4gICAgICBpc0ZvbGxvd2luZzogZmFsc2UsXG4gICAgICBpc0ZyaWVuZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgW291dGJvdW5kQ29ubmVjdGlvbiwgaW5ib3VuZENvbm5lY3Rpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuRk9MTE9XXG4gICAgKVxuICBdKTtcbiAgY29uc3QgaXNGb2xsb3dpbmcgPSAhIW91dGJvdW5kQ29ubmVjdGlvbjtcbiAgY29uc3QgaXNGb2xsb3dlZEJ5ID0gISFpbmJvdW5kQ29ubmVjdGlvbjtcblxuICByZXR1cm4ge1xuICAgIGlzQmxvY2tlZDogZmFsc2UsXG4gICAgaXNGb2xsb3dlZEJ5LFxuICAgIGlzRm9sbG93aW5nLFxuICAgIGlzRnJpZW5kOiBpc0ZvbGxvd2luZyAmJiBpc0ZvbGxvd2VkQnlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93ZXJDb3VudCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hRm9sbG93ZXJDb3VudCc7XG4gIGNvbnN0IGZvcm1hdFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgaGMgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgICBGSUxURVIgaGMuX3RvID09ICR7cGVyc29uYURvY0lkfVxuICAgICAgICBGSUxURVIgaGMudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgIFJFVFVSTiBjb3VudFxuICAgIGA7XG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gICAgcmV0dXJuIE51bWJlcihhd2FpdCBjdXJzb3IubmV4dCgpIHx8IDApO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtwZXJzb25hSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93aW5nQ291bnQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50JztcbiAgY29uc3QgZm9ybWF0UGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFmb3JtYXRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcGVyc29uYURvY0lkID0gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7Zm9ybWF0UGVyc29uYUlkfWA7XG4gICAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiBoYyBJTiBoYXNDb25uZWN0aW9uXG4gICAgICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3BlcnNvbmFEb2NJZH1cbiAgICAgICAgRklMVEVSIGhjLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICBSRVRVUk4gY291bnRcbiAgICBgO1xuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICAgIHJldHVybiBOdW1iZXIoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAwKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBnZXRQZXJzb25hQnlLZXkgPSBhc3luYyAoZGF0YWJhc2VOYW1lOiBzdHJpbmcsIHBlcnNvbmFJZDogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBwZXJzb25hLl9rZXkgPT0gJHtwZXJzb25hSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gcGVyc29uYVxuICBgO1xuICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gIHJldHVybiBjdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgZm9ybWF0UGVyc29uYVJlc3VsdCA9IChwZXJzb25hOiBQZXJzb25hVHlwZSB8IG51bGwgfCB1bmRlZmluZWQsIGZhbGxiYWNrUGVyc29uYUlkID0gJycpOiBQZXJzb25hVHlwZSB8IG51bGwgPT4ge1xuICBpZighcGVyc29uYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wZXJzb25hLFxuICAgIHBlcnNvbmFJZDogKHBlcnNvbmEgYXMgYW55KS5fa2V5IHx8IGZhbGxiYWNrUGVyc29uYUlkXG4gIH0gYXMgUGVyc29uYVR5cGU7XG59O1xuXG5jb25zdCBub3JtYWxpemVSZWxhdGlvbkZpbHRlciA9IChyZWxhdGlvbjogdW5rbm93bik6IFBlcnNvbmFSZWxhdGlvbkZpbHRlciA9PiB7XG4gIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJlbGF0aW9uIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICBpZih2YWx1ZSA9PT0gJ2ZvbGxvd2VycycgfHwgdmFsdWUgPT09ICdmcmllbmRzJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiAnZm9sbG93aW5nJztcbn07XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMgPSBhc3luYyAoXG4gIGZpbHRlcnM6IFBlcnNvbmFMaXN0RmlsdGVycyA9IHt9XG4pOiBQcm9taXNlPFJlcXVpcmVkPFBlcnNvbmFMaXN0RmlsdGVycz4+ID0+IHtcbiAgY29uc3QgZ2VuZGVycyA9IEFycmF5LmlzQXJyYXkoZmlsdGVycy5nZW5kZXIpXG4gICAgPyBmaWx0ZXJzLmdlbmRlci5tYXAoKGdlbmRlcikgPT4gcGFyc2VDaGFyKFN0cmluZyhnZW5kZXIgfHwgJycpLCAxKS50b1VwcGVyQ2FzZSgpKS5maWx0ZXIoQm9vbGVhbilcbiAgICA6IFtdO1xuXG4gIHJldHVybiB7XG4gICAgZ2VuZGVyOiBnZW5kZXJzXG4gIH07XG59O1xuXG5jb25zdCBoeWRyYXRlUGVyc29uYUxpc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYXM6IFBlcnNvbmFUeXBlW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBoeWRyYXRlZFBlcnNvbmFzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcGVyc29uYXMubWFwKGFzeW5jIChwZXJzb25hKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uX2tleSB8fCBwZXJzb25hPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgICAgIGNvbnN0IGlzQmxvY2tlZCA9IG5leHRQZXJzb25hSWRcbiAgICAgICAgPyBhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBuZXh0UGVyc29uYUlkKVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBpZihpc0Jsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcnNvbmFUYWdzID0gbmV4dFBlcnNvbmFJZCA/IGF3YWl0IGdldFRhZ0xpc3RCeUl0ZW0oY29udGV4dCwgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7bmV4dFBlcnNvbmFJZH1gKSA6IFtdO1xuXG4gICAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAgIC4uLihwZXJzb25hIHx8IHt9KSxcbiAgICAgICAgdGFnczogcGVyc29uYVRhZ3NcbiAgICAgIH0gYXMgUGVyc29uYVR5cGUsIG5leHRQZXJzb25hSWQpO1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGh5ZHJhdGVkUGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5jb25zdCBlbnN1cmVQZXJzb25hRWRnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHBlcnNvbmFEb2NJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX1BFUlNPTkEpO1xuICBjb25zdCBlZGdlID0gY3JlYXRlUGVyc29uYUVkZ2UoYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7dXNlcklkfWAsIHBlcnNvbmFEb2NJZCk7XG5cbiAgYXdhaXQgZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7b3ZlcndyaXRlTW9kZTogJ2lnbm9yZScsIHJldHVybk5ldzogdHJ1ZSwgc2lsZW50OiB0cnVlfSk7XG59O1xuXG5jb25zdCBzeW5jVXNlclBlcnNvbmEgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBwZXJzb25hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcGVyc29uYUlkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1c2VyVXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBlcnNvbmFJZFxuICB9O1xuICBjb25zdCBtYXBwZWRJbWFnZUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uaW1hZ2VJZCB8fCAnJykpO1xuXG4gIGlmKG1hcHBlZEltYWdlSWQpIHtcbiAgICB1c2VyVXBkYXRlLmltYWdlSWQgPSBtYXBwZWRJbWFnZUlkO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlVXNlclFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7dXNlcklkfVxuICAgIFdJVEggJHt1c2VyVXBkYXRlfVxuICAgIElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHVzZXJDdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkodXBkYXRlVXNlclFyeSk7XG4gIGF3YWl0IHVzZXJDdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFPd25lciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hOiBQZXJzb25hVHlwZSk6IFByb21pc2U8e1xuICBwZXJzb25hSWQ6IHN0cmluZztcbiAgdXNlcjogVXNlclR5cGUgfCBudWxsO1xuICB1c2VySWQ6IHN0cmluZztcbn0+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgZXhwbGljaXRVc2VySWQgPSBwYXJzZUlkKHBlcnNvbmE/LnVzZXJJZCB8fCAnJyk7XG4gIGNvbnN0IHVzZXJJZCA9IGV4cGxpY2l0VXNlcklkIHx8IHNlc3Npb25Vc2VySWQ7XG5cbiAgaWYoIXVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSB2YWxpZCB1c2VySWQgaXMgcmVxdWlyZWQgZm9yIHBlcnNvbmEgYWN0aW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIHVzZXJJZCk7XG4gIGNvbnN0IGxpbmtlZFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYT8ucGVyc29uYUlkIHx8IHVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCBwZXJzb25hSWQgPSBsaW5rZWRQZXJzb25hSWQgfHwgY3JlYXRlSGFzaCh1c2VySWQpO1xuXG4gIHJldHVybiB7XG4gICAgcGVyc29uYUlkLFxuICAgIHVzZXIsXG4gICAgdXNlcklkXG4gIH07XG59O1xuXG5jb25zdCBzYXZlUGVyc29uYURvY3VtZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hOiBQZXJzb25hVHlwZSxcbiAgcGVyc29uYUlkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGJhc2VQZXJzb25hID0gYnVpbGRQZXJzb25hTXV0YXRpb24oey4uLnBlcnNvbmEsIHVzZXJJZH0pO1xuICBjb25zdCBjdXN0b21QZXJzb25hID0gYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24ocGVyc29uYSk7XG4gIGNvbnN0IHVwc2VydFBlcnNvbmFRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke3BlcnNvbmFJZH19XG4gICAgSU5TRVJUICR7e1xuICAgICAgX2tleTogcGVyc29uYUlkLFxuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgVVBEQVRFICR7e1xuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBwZXJzb25hQ3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHVwc2VydFBlcnNvbmFRdWVyeSk7XG4gIHJldHVybiBhd2FpdCBwZXJzb25hQ3Vyc29yLm5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hQnlJZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYVR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hQnlJZCc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRQZXJzb25hSWQgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG5cbiAgICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgZ2V0UGVyc29uYUJ5S2V5KGNvbnRleHQuZGF0YWJhc2VOYW1lLCBmb3JtYXRQZXJzb25hSWQpO1xuXG4gICAgaWYoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIGZvcm1hdFBlcnNvbmFJZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFt0YWdzLCByZWxhdGlvbnNoaXBTdGF0ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZXRUYWdMaXN0QnlJdGVtKGNvbnRleHQsIGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gKSxcbiAgICAgIGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBmb3JtYXRQZXJzb25hSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAuLi5wZXJzb25hLFxuICAgICAgLi4ucmVsYXRpb25zaGlwU3RhdGUsXG4gICAgICB0YWdzXG4gICAgfSBhcyBQZXJzb25hVHlwZSwgZm9ybWF0UGVyc29uYUlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmFJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBlcnNvbmFMaXN0QnlJZHMgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkcyA9IEFycmF5LmlzQXJyYXkocGVyc29uYUlkcylcbiAgICA/IHBlcnNvbmFJZHMubWFwKChwZXJzb25hSWQpID0+IHBhcnNlSWQocGVyc29uYUlkKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcblxuICBpZighbm9ybWFsaXplZFBlcnNvbmFJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCBQcm9taXNlLmFsbChub3JtYWxpemVkUGVyc29uYUlkcy5tYXAoKHBlcnNvbmFJZCkgPT4gZ2V0UGVyc29uYUJ5SWQoY29udGV4dCwgcGVyc29uYUlkKSkpO1xuICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbSA9IDAsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgcmVsYXRpb24gPSAnZm9sbG93aW5nJyxcbiAgICB0byA9IDI0XG4gIH06IHtmcm9tPzogbnVtYmVyOyBwZXJzb25hSWQ/OiBzdHJpbmc7IHJlbGF0aW9uPzogUGVyc29uYVJlbGF0aW9uRmlsdGVyIHwgc3RyaW5nOyB0bz86IG51bWJlcn0gPSB7fVxuKTogUHJvbWlzZTxQZXJzb25hVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hTGlzdEJ5UmVsYXRpb24nO1xuICBjb25zdCBhY3RpdmVSZWxhdGlvbiA9IG5vcm1hbGl6ZVJlbGF0aW9uRmlsdGVyKHJlbGF0aW9uKTtcbiAgY29uc3QgbGltaXRGcm9tID0gTnVtYmVyKGZyb20pID49IDAgPyBOdW1iZXIoZnJvbSkgOiAwO1xuICBjb25zdCBsaW1pdFRvID0gTnVtYmVyKHRvKSA+IGxpbWl0RnJvbSA/IE51bWJlcih0bykgOiBsaW1pdEZyb20gKyAyNDtcbiAgY29uc3QgbGltaXRDb3VudCA9IGxpbWl0VG8gLSBsaW1pdEZyb207XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBhd2FpdCBnZXRTZXNzaW9uUGVyc29uYUlkKGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb25QZXJzb25hRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzZXNzaW9uUGVyc29uYUlkfWA7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3QgcmVsYXRpb25RdWVyeTogQXFsUXVlcnkgPSBhY3RpdmVSZWxhdGlvbiA9PT0gJ2ZvbGxvd2luZydcbiAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoY29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IExFTkdUSChcbiAgICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWwgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgICApID4gMCxcbiAgICAgICAgICAgIGlzRm9sbG93aW5nOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgIGBcbiAgICAgIDogYWN0aXZlUmVsYXRpb24gPT09ICdmb2xsb3dlcnMnXG4gICAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGNvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGNvbm5lY3Rpb24uX2Zyb20sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fZnJvbSlcbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBpc0ZvbGxvd2luZyA9IExFTkdUSChcbiAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwuX3RvID09IHBlcnNvbmEuX2lkXG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IHRydWUsXG4gICAgICAgICAgICBpc0ZvbGxvd2luZ1xuICAgICAgICAgIH0pXG4gICAgICBgXG4gICAgICAgIDogYXFsYFxuICAgICAgICBGT1IgZm9sbG93Q29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBmb2xsb3dDb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgZm9sbG93Q29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoZm9sbG93Q29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoZm9sbG93Q29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgaXNGb2xsb3dlZEJ5ID0gTEVOR1RIKFxuICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWxDb25uZWN0aW9uIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsQ29ubmVjdGlvbi5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbENvbm5lY3Rpb24uX3RvID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWxDb25uZWN0aW9uLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgRklMVEVSIGlzRm9sbG93ZWRCeVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiB0cnVlLFxuICAgICAgICAgICAgaXNGb2xsb3dpbmc6IHRydWUsXG4gICAgICAgICAgICBpc0ZyaWVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICBgO1xuXG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocmVsYXRpb25RdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSkgYXMgUGVyc29uYVR5cGVbXTtcblxuICAgIHJldHVybiAoYXdhaXQgaHlkcmF0ZVBlcnNvbmFMaXN0KGNvbnRleHQsIHBlcnNvbmFzKSkubWFwKChwZXJzb25hKSA9PiAoe1xuICAgICAgLi4ucGVyc29uYSxcbiAgICAgIGlzRnJpZW5kOiBCb29sZWFuKHBlcnNvbmEuaXNGb2xsb3dpbmcgJiYgcGVyc29uYS5pc0ZvbGxvd2VkQnkpXG4gICAgfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmcm9tLCBwZXJzb25hSWQsIHJlbGF0aW9uOiBhY3RpdmVSZWxhdGlvbiwgdG99LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hTGlzdEJ5VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge3RhZ3MgPSBbXSwgdXNlcm5hbWUgPSAnJ306IHt0YWdzPzogc3RyaW5nW107IHVzZXJuYW1lPzogc3RyaW5nfSxcbiAge2ZpbHRlcnMgPSB7fSwgZnJvbSA9IDAsIHRvID0gMTB9OiB7ZmlsdGVycz86IFBlcnNvbmFMaXN0RmlsdGVyczsgZnJvbT86IG51bWJlcjsgdG8/OiBudW1iZXJ9ID0ge31cbik6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUxpc3RCeVRhZ3MnO1xuICBjb25zdCBmb3JtYXRUYWdzID0gQXJyYXkuaXNBcnJheSh0YWdzKVxuICAgID8gdGFncy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCB0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5leHRUYWcgPSBTdHJpbmcodGFnTmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmKG5leHRUYWcpIHtcbiAgICAgICAgbGlzdC5wdXNoKG5leHRUYWcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9LCBbXSlcbiAgICA6IFtdO1xuICBjb25zdCBmb3JtYXRVc2VybmFtZSA9IFN0cmluZyh1c2VybmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGxpbWl0RnJvbSA9IE51bWJlcihmcm9tKSA+PSAwID8gTnVtYmVyKGZyb20pIDogMDtcbiAgY29uc3QgbGltaXRUbyA9IE51bWJlcih0bykgPiBsaW1pdEZyb20gPyBOdW1iZXIodG8pIDogbGltaXRGcm9tICsgMTA7XG4gIGNvbnN0IGxpbWl0Q291bnQgPSBsaW1pdFRvIC0gbGltaXRGcm9tO1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpO1xuICBjb25zdCB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSA9IGF3YWl0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMoZmlsdGVycyk7XG5cbiAgaWYoIWZvcm1hdFRhZ3MubGVuZ3RoIHx8ICF0YXJnZXRHZW5kZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlcm5hbWVGaWx0ZXIgPSBmb3JtYXRVc2VybmFtZVxuICAgICAgPyBsaXRlcmFsKGBGSUxURVIgQ09OVEFJTlMoTE9XRVIocGVyc29uYS5uYW1lIHx8IFwiXCIpLCBcIiR7Zm9ybWF0VXNlcm5hbWV9XCIpYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3Qgc2Vzc2lvbkZpbHRlciA9IHNlc3Npb25Vc2VySWRcbiAgICAgID8gbGl0ZXJhbChgRklMVEVSIHBlcnNvbmEudXNlcklkICE9IFwiJHtzZXNzaW9uVXNlcklkfVwiYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgcGVyc29uYVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB0IElOICR7dGFnc0NvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBQT1NJVElPTigke2Zvcm1hdFRhZ3N9LCBMT1dFUih0Lm5hbWUpKVxuICAgICAgICBGT1IgcGVyc29uYSwgZWRnZSBJTiBPVVRCT1VORCB0ICR7aXNUYWdnZWRDb2xsZWN0aW9ufVxuICAgICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlBFUlNPTkFTfX1cbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBwZXJzb25hR2VuZGVyID0gVVBQRVIocGVyc29uYS5nZW5kZXIgfHwgXCJcIilcbiAgICAgICAgICAke25hbWVkUGVyc29uYUZpbHRlcn1cbiAgICAgICAgICAke3VzZXJuYW1lRmlsdGVyfVxuICAgICAgICAgICR7c2Vzc2lvbkZpbHRlcn1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA8PSAke21pbmltdW1BZHVsdEJpcnRoZGF0ZX1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUdlbmRlciAhPSBcIlwiXG4gICAgICAgICAgRklMVEVSIFBPU0lUSU9OKCR7dGFyZ2V0R2VuZGVyc30sIHBlcnNvbmFHZW5kZXIpXG4gICAgICAgICAgQ09MTEVDVCBwZXJzb25hS2V5ID0gcGVyc29uYS5fa2V5IElOVE8gZ3JvdXBlZCA9IHtcbiAgICAgICAgICAgIGJpcnRoZGF0ZTogcGVyc29uYUJpcnRoZGF0ZSxcbiAgICAgICAgICAgIHBlcnNvbmEsXG4gICAgICAgICAgICBtYXRjaGVkVGFnOiBMT1dFUih0Lm5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIExFVCBtYXRjaGVkVGFncyA9IFVOSVFVRShncm91cGVkWypdLm1hdGNoZWRUYWcpXG4gICAgICAgICAgTEVUIGJpcnRoZGF0ZSA9IEZJUlNUKGdyb3VwZWRbKl0uYmlydGhkYXRlKVxuICAgICAgICAgIExFVCBwZXJzb25hRG9jID0gRklSU1QoZ3JvdXBlZFsqXS5wZXJzb25hKVxuICAgICAgICAgIFNPUlQgTEVOR1RIKG1hdGNoZWRUYWdzKSBERVNDLCBMT1dFUihwZXJzb25hRG9jLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hRG9jLCB7YmlydGhkYXRlLCBtYXRjaGVkVGFnQ291bnQ6IExFTkdUSChtYXRjaGVkVGFncyl9KVxuICAgIGA7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocGVyc29uYVF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKSBhcyBQZXJzb25hVHlwZVtdO1xuXG4gICAgcmV0dXJuIGh5ZHJhdGVQZXJzb25hTGlzdChjb250ZXh0LCBwZXJzb25hcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWx0ZXJzOiB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSwgZnJvbSwgdGFnczogZm9ybWF0VGFncywgdG8sIHVzZXJuYW1lOiBmb3JtYXRVc2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZU51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJDb25uZWN0aW9uS2luZHMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImdldENvbm5lY3Rpb24iLCJnZXRUYWdMaXN0QnlJdGVtIiwiZXZlbnRDYXRlZ29yeSIsIm1pbmltdW1BZHVsdEFnZSIsIm1pbmltdW1BZHVsdEJpcnRoZGF0ZSIsIkRhdGUiLCJub3ciLCJwZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyIsInVzZXJzQ29sbGVjdGlvbiIsIlVTRVJTIiwicGVyc29uYXNDb2xsZWN0aW9uIiwiUEVSU09OQVMiLCJ0YWdzQ29sbGVjdGlvbiIsIlRBR1MiLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsIkhBU19DT05ORUNUSU9OIiwiY29uZmlndXJlUGVyc29uYUFjdGlvbnMiLCJleHRlbnNpb25zIiwiYnVpbGRQZXJzb25hTXV0YXRpb24iLCJwZXJzb25hIiwiY2l0eSIsImNvdW50cnkiLCJzdHJlZXQxIiwic3RyZWV0MiIsInppcCIsInN0YXRlIiwidGltZXpvbmUiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImdlbmRlciIsImltYWdlSWQiLCJuYW1lIiwibGF0aXR1ZGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsInVzZXJJZCIsInVuZGVmaW5lZCIsInRvVXBwZXJDYXNlIiwiYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24iLCJmaWVsZHMiLCJtYXBDdXN0b21QZXJzb25hRmllbGRzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInZhbHVlIiwiY3JlYXRlUGVyc29uYUVkZ2UiLCJ1c2VyRG9jSWQiLCJwZXJzb25hRG9jSWQiLCJfZnJvbSIsIl9rZXkiLCJfdG8iLCJhZGRlZCIsImdldFVzZXJCeUtleSIsImRhdGFiYXNlTmFtZSIsInFyeSIsImN1cnNvciIsInF1ZXJ5IiwibmV4dCIsImdldFNlc3Npb25QZXJzb25hSWQiLCJjb250ZXh0IiwicGVyc29uYUlkIiwicmVxdWVzdGVkUGVyc29uYUlkIiwiU3RyaW5nIiwic2Vzc2lvblVzZXJJZCIsInNlc3Npb24iLCJzZXNzaW9uUGVyc29uYUlkIiwidXNlciIsImdldFBlcnNvbmFPd25lclVzZXJJZCIsIm5vcm1hbGl6ZWRQZXJzb25hSWQiLCJnZXRQZXJzb25hQnlLZXkiLCJpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCIsInRhcmdldFVzZXJJZCIsInNlc3Npb25Vc2VySWRPdmVycmlkZSIsIm5vcm1hbGl6ZWRUYXJnZXRVc2VySWQiLCJvdXRib3VuZEJsb2NrIiwiaW5ib3VuZEJsb2NrIiwiUHJvbWlzZSIsImFsbCIsIkJMT0NLIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJ0YXJnZXRQZXJzb25hSWQiLCJzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUiLCJub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiaXNCbG9ja2VkIiwiaXNGb2xsb3dlZEJ5IiwiaXNGb2xsb3dpbmciLCJpc0ZyaWVuZCIsIm91dGJvdW5kQ29ubmVjdGlvbiIsImluYm91bmRDb25uZWN0aW9uIiwiRk9MTE9XIiwiZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQiLCJhY3Rpb24iLCJmb3JtYXRQZXJzb25hSWQiLCJOdW1iZXIiLCJlcnJvciIsImNhdGVnb3J5IiwicGFyYW1zIiwiREFUQUJBU0VfRVJST1IiLCJnZXRQZXJzb25hRm9sbG93aW5nQ291bnQiLCJmb3JtYXRQZXJzb25hUmVzdWx0IiwiZmFsbGJhY2tQZXJzb25hSWQiLCJub3JtYWxpemVSZWxhdGlvbkZpbHRlciIsInJlbGF0aW9uIiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVzb2x2ZVBlcnNvbmFMaXN0RmlsdGVycyIsImZpbHRlcnMiLCJnZW5kZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZmlsdGVyIiwiQm9vbGVhbiIsImh5ZHJhdGVQZXJzb25hTGlzdCIsInBlcnNvbmFzIiwiaHlkcmF0ZWRQZXJzb25hcyIsIm5leHRQZXJzb25hSWQiLCJwZXJzb25hVGFncyIsInRhZ3MiLCJlbnN1cmVQZXJzb25hRWRnZSIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsIkhBU19QRVJTT05BIiwiZWRnZSIsInNhdmUiLCJvdmVyd3JpdGVNb2RlIiwicmV0dXJuTmV3Iiwic2lsZW50Iiwic3luY1VzZXJQZXJzb25hIiwidXNlclVwZGF0ZSIsIm1vZGlmaWVkIiwibWFwcGVkSW1hZ2VJZCIsInVwZGF0ZVVzZXJRcnkiLCJ1c2VyQ3Vyc29yIiwicmVzb2x2ZVBlcnNvbmFPd25lciIsImV4cGxpY2l0VXNlcklkIiwiRXJyb3IiLCJsaW5rZWRQZXJzb25hSWQiLCJzYXZlUGVyc29uYURvY3VtZW50IiwiYmFzZVBlcnNvbmEiLCJjdXN0b21QZXJzb25hIiwidXBzZXJ0UGVyc29uYVF1ZXJ5IiwicGVyc29uYUN1cnNvciIsImdldFBlcnNvbmFCeUlkIiwicmVsYXRpb25zaGlwU3RhdGUiLCJnZXRQZXJzb25hTGlzdEJ5SWRzIiwicGVyc29uYUlkcyIsIm5vcm1hbGl6ZWRQZXJzb25hSWRzIiwibGVuZ3RoIiwiZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uIiwiZnJvbSIsInRvIiwiYWN0aXZlUmVsYXRpb24iLCJsaW1pdEZyb20iLCJsaW1pdFRvIiwibGltaXRDb3VudCIsInNlc3Npb25QZXJzb25hRG9jSWQiLCJuYW1lZFBlcnNvbmFGaWx0ZXIiLCJyZWxhdGlvblF1ZXJ5IiwidGhlbiIsImdldFBlcnNvbmFMaXN0QnlUYWdzIiwidXNlcm5hbWUiLCJmb3JtYXRUYWdzIiwibGlzdCIsInRhZ05hbWUiLCJuZXh0VGFnIiwicHVzaCIsImZvcm1hdFVzZXJuYW1lIiwidGFyZ2V0R2VuZGVycyIsInVzZXJuYW1lRmlsdGVyIiwic2Vzc2lvbkZpbHRlciIsInBlcnNvbmFRdWVyeSIsImFkZFBlcnNvbmEiLCJzYXZlZFBlcnNvbmEiLCJfaWQiLCJ1cGRhdGVQZXJzb25hIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxPQUFPLEVBQ1BDLFFBQVEsRUFDUkMsV0FBVyxFQUNYQyxZQUFZLFFBQ1AsZUFBZTtBQUN0QixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsZUFBZSxRQUFPLGdDQUFnQztBQUM5RCxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxhQUFhLFFBQU8sbUJBQW1CO0FBQy9DLFNBQVFDLGdCQUFnQixRQUFPLFlBQVk7QUFTM0MsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyx3QkFBd0JDLEtBQUtDLEdBQUcs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
|
package/lib/actions/posts.js
CHANGED
|
@@ -613,4 +613,4 @@ export const createPostEdge = (context, postDocId, itemDocId, edgeType = EDGES.I
|
|
|
613
613
|
});
|
|
614
614
|
};
|
|
615
615
|
|
|
616
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL3Bvc3RzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmcsIHBhcnNlVmFyQ2hhclxufSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge3BhcnNlUG9zdCwgcGFyc2VQb3N0UHJvcHN9IGZyb20gJy4uL2FkYXB0ZXJzL3Bvc3RBZGFwdGVyLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTLCBQcml2YWN5TGV2ZWwsIFJlYWN0aW9uVHlwZX0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge1xuICBidWlsZERpc3RhbmNlUXVlcnksXG4gIGJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnksXG4gIGJ1aWxkTWF0Y2hlZFRhZ3NDb3VudFF1ZXJ5LFxuICBidWlsZFJlYWN0aW9uc1F1ZXJ5LFxuICBidWlsZFRhZ3NRdWVyeSxcbiAgYnVpbGRVc2VySW5mb1F1ZXJ5LFxufSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcbmltcG9ydCB7Z2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2lzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7ZXh0cmFjdFRhZ3MsIGdldFRhZ0xpc3RCeU5hbWUsIHVwZGF0ZVRhZ3NJbkl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1Bvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcG9zdHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ1R5cGV9IGZyb20gJy4uL3R5cGVzL3RhZ3MudHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQ09OVEVOVF9MRU5HVEggPSAxMDAwMDA7XG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3Bvc3RzJztcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGV4cGxpY2l0UGVyc29uYUlkID0gJydcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHByb3ZpZGVkUGVyc29uYUlkID0gcGFyc2VJZChleHBsaWNpdFBlcnNvbmFJZCk7XG5cbiAgaWYocHJvdmlkZWRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gcHJvdmlkZWRQZXJzb25hSWQ7XG4gIH1cblxuICBjb25zdCBzZXNzaW9uVXNlcklkUGFyc2VkID0gcGFyc2VJZChzZXNzaW9uVXNlcklkIHx8ICcnKTtcbiAgaWYoIXNlc3Npb25Vc2VySWRQYXJzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldEl0ZW1CeTx7cGVyc29uYUlkPzogc3RyaW5nfT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHtfa2V5OiBzZXNzaW9uVXNlcklkUGFyc2VkfSk7XG4gIHJldHVybiBwYXJzZUlkKHVzZXI/LnBlcnNvbmFJZCB8fCAnJykgfHwgdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZFBvc3RzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0czogUG9zdFR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgdmlzaWJpbGl0eSA9IGF3YWl0IFByb21pc2UuYWxsKHBvc3RzLm1hcChhc3luYyAocG9zdCkgPT4ge1xuICAgIGNvbnN0IHBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBvc3Q/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gcG9zdHMuZmlsdGVyKChfcG9zdCwgaW5kZXgpID0+IHZpc2liaWxpdHlbaW5kZXhdKTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdE9wdGlvbnMgPSAob3B0aW9uczogUG9zdE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgbGF0aXR1ZGUgPSAwLFxuICAgIGxvbmdpdHVkZSA9IDAsXG4gICAgc3RhcnREYXRlID0gMCxcbiAgICB0byA9IDMwLFxuICAgIHR5cGUgPSAncG9zdCdcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsYXRpdHVkZTogcGFyc2VOdW0obGF0aXR1ZGUsIDMyKSxcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXQsXG4gICAgbG9uZ2l0dWRlOiBwYXJzZU51bShsb25naXR1ZGUsIDMyKSxcbiAgICBzdGFydERhdGU6IHBhcnNlTnVtKHN0YXJ0RGF0ZSwgMzIpLFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmNvbnN0IEVWRU5UX1BPU1RfVFlQRSA9ICdldmVudCc7XG5jb25zdCBQT1NUX1JFQUNUSU9OX0lURU1fVFlQRSA9IENPTExFQ1RJT05TLlBPU1RTO1xuY29uc3QgT1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFID0gYHAudHlwZSA9PSBcIiR7RVZFTlRfUE9TVF9UWVBFfVwiID8gXCIke0VWRU5UX1BPU1RfVFlQRX1cIiA6IFwiJHtQT1NUX1JFQUNUSU9OX0lURU1fVFlQRX1cImA7XG5cbmNvbnN0IGdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSA9IChyZWFjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiAoXG4gIHJlYWN0aW9uTmFtZSA9PT0gUmVhY3Rpb25UeXBlLlBJTlxuICAgID8gJ2lzU2F2ZWQnXG4gICAgOiBgaGFzJHtyZWFjdGlvbk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtyZWFjdGlvbk5hbWUuc2xpY2UoMSl9YFxuKTtcblxuLy8gTWFwIG9mIG9wdGlvbmFsIGZpZWxkIGhhbmRsZXJzXG50eXBlIEZpZWxkSGFuZGxlciA9IChhY3RvckRvY0lkOiBzdHJpbmcpID0+IHtxdWVyeTogc3RyaW5nOyBvYmplY3Q6IHN0cmluZ307XG5cbmNvbnN0IE9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZEhhbmRsZXI+ID0ge1xuICBoYXNSc3ZwOiAoYWN0b3JEb2NJZCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke2dldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZShSZWFjdGlvblR5cGUuUlNWUCl9ID0gVE9fQk9PTChGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUlNWUH1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSkgJiYgci5fZnJvbSA9PSBcIiR7YWN0b3JEb2NJZH1cIlxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgICkpYCxcbiAgICBvYmplY3Q6ICdoYXNSc3ZwOmhhc1JzdnAnXG4gIH0pLFxuICBpc1NhdmVkOiAoYWN0b3JEb2NJZCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke2dldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZShSZWFjdGlvblR5cGUuUElOKX0gPSBUT19CT09MKEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5QSU59XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pICYmIHIuX2Zyb20gPT0gXCIke2FjdG9yRG9jSWR9XCJcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApKWAsXG4gICAgb2JqZWN0OiAnaXNTYXZlZDppc1NhdmVkJ1xuICB9KSxcbiAgcmVhY3Rpb25zOiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgIClgLFxuICAgIG9iamVjdDogJ3JlYWN0aW9uczpyZWFjdGlvbnMnXG4gIH0pLFxuICByc3ZwQ291bnQ6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtSZWFjdGlvblR5cGUuUlNWUH1Db3VudCA9IEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5SU1ZQfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KVxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgIClgLFxuICAgIG9iamVjdDogJ3JzdnBDb3VudDpyc3ZwQ291bnQnXG4gIH0pLFxuICB2aWV3Q291bnQ6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtSZWFjdGlvblR5cGUuVklFV31Db3VudCA9IEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5WSUVXfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KVxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgIClgLFxuICAgIG9iamVjdDogJ3ZpZXdDb3VudDp2aWV3Q291bnQnXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdE9wdGlvbmFsRmllbGRzID0gKFxuICBmaWVsZHM6IHN0cmluZ1tdID0gW10sXG4gIHNlc3Npb25JZDogc3RyaW5nID0gJycsXG4gIHBlcnNvbmFJZDogc3RyaW5nID0gJydcbikgPT5cbiAgKGZpZWxkcyB8fCBbXSkucmVkdWNlKChzZWxlY3RzOiB7b2JqZWN0czogc3RyaW5nW10sIHF1ZXJpZXM6IHN0cmluZ1tdfSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBPUFRJT05BTF9GSUVMRF9IQU5ETEVSU1tmaWVsZF07XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IGFjdG9yRG9jSWQgPSBwZXJzb25hSWRcbiAgICAgICAgPyBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtwYXJzZUlkKHBlcnNvbmFJZCl9YFxuICAgICAgICA6IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3Nlc3Npb25JZH1gO1xuICAgICAgY29uc3Qge3F1ZXJ5LCBvYmplY3R9ID0gaGFuZGxlcihhY3RvckRvY0lkKTtcbiAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBidWlsZCBwcml2YWN5IGZpbHRlciBxdWVyeVxuY29uc3QgYnVpbGRQcml2YWN5RmlsdGVyUXVlcnkgPSAoXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBncm91cElkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHByaXZhY3k6IHN0cmluZyxcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIHNlbGVjdFF1ZXJpZXM6IHN0cmluZ1tdLFxuICBzZWxlY3RPYmplY3RzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLkdST1VQKSB7XG4gICAgcmV0dXJuIGBMRVQgcCA9IERPQ1VNRU5UKFwiJHtwb3N0RG9jSWR9XCIpXG4gICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgICBGT1IgZ3JvdXAgSU4gJHtDT0xMRUNUSU9OUy5HUk9VUFN9XG4gICAgICBGSUxURVIgZ3JvdXAuX2tleSA9PSBwLmdyb3VwSWRcbiAgICAgIEZPUiB1LCBlIElOIE9VVEJPVU5EIGdyb3VwLl9pZCAke0VER0VTLkhBU19DT05ORUNUSU9OfVxuICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgfSBlbHNlIGlmIChwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuUFVCTElDKSB7XG4gICAgcmV0dXJuIGBMRVQgcCA9IERPQ1VNRU5UKFwiJHtwb3N0RG9jSWR9XCIpXG4gICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RCeUlkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKHBvc3RJZCk7XG4gIGNvbnN0IHt0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgRklMVEVSIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgcC50eXBlID09ICR7dHlwZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcG9zdDogUG9zdFR5cGUgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG4gICAgY29uc3Qge1xuICAgICAgX2lkOiBwb3N0RG9jSWQsXG4gICAgICBwZXJzb25hSWQsXG4gICAgICB1c2VySWQsXG4gICAgICBncm91cElkLFxuICAgICAgcHJpdmFjeSA9IFByaXZhY3lMZXZlbC5ERUZBVUxUXG4gICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgaWYocGVyc29uYUlkICYmIGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyBVc2VyIG93bnMgdGhlIHBvc3QsIHJldHVybiBkaXJlY3RseVxuICAgIGlmICh1c2VySWQgPT09IHNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIHBvc3Q7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcHJpdmFjeSBhbmQgYnVpbGQgYXBwcm9wcmlhdGUgcXVlcnlcbiAgICBjb25zdCBwcml2YWN5QXFsUXJ5ID0gYnVpbGRQcml2YWN5RmlsdGVyUXVlcnkoXG4gICAgICBwb3N0RG9jSWQsXG4gICAgICBncm91cElkLFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHNlbGVjdFF1ZXJpZXMsXG4gICAgICBzZWxlY3RPYmplY3RzXG4gICAgKTtcblxuICAgIGlmIChwcml2YWN5QXFsUXJ5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgZGF0YWJhc2UucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlBcmVhID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsYXRpdHVkZTogbnVtYmVyLFxuICBsb25naXR1ZGU6IG51bWJlcixcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RzQnlBcmVhJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBwIElOICR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QT1NUUyl9XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgcC50eXBlID09ICR7dHlwZX0gJiYgcC5wcml2YWN5ID09ICR7UHJpdmFjeUxldmVsLlBVQkxJQ30gJiYgcC5wYXJlbnRJZCA9PSBudWxsXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFNPUlQgZGlzdGFuY2UsIHAuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgncCcpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRMaXN0QnlMYXRlc3QnO1xuICBjb25zdCB7ZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8UG9zdFR5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgQ09MTEVDVElPTlMuUE9TVFMsXG4gICAge3R5cGUsIHByaXZhY3k6IFByaXZhY3lMZXZlbC5QVUJMSUMsIHBhcmVudElkOiBudWxsfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdERVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tOiBsaW1pdC5zdGFydCwgdG86IGxpbWl0LnN0YXJ0ICsgbGltaXQubnVtfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gICAgfVxuICApXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVJlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0TGlzdEJ5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgc3RhcnREYXRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9ucyA9IEpTT04uc3RyaW5naWZ5KHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uKSA9PiBwYXJzZUNoYXIocmVhY3Rpb24sIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsIGBwLnByaXZhY3kgPT0gXCIke1ByaXZhY3lMZXZlbC5QVUJMSUN9XCJgXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdFN0YXJ0RGF0ZSA9IHBhcnNlTnVtKHN0YXJ0RGF0ZSk7XG5cbiAgaWYgKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIGlmIChyZWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5KHJlYWN0aW9ucykpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnbWF0Y2hlZFJlYWN0aW9uczptYXRjaGVkUmVhY3Rpb25zJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zID4gMCcpO1xuICB9XG5cbiAgaWYgKGZvcm1hdFN0YXJ0RGF0ZSkge1xuICAgIGZpbHRlcnMucHVzaChgcC5zdGFydERhdGUgPj0gJHtmb3JtYXRTdGFydERhdGV9YCk7XG4gICAgc29ydEJ5LnB1c2goJ3Auc3RhcnREYXRlIEFTQycpO1xuICB9IGVsc2Uge1xuICAgIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgfVxuXG4gIHNlbGVjdE9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAsIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRTZXNzaW9uSWR9ICR7bGl0ZXJhbChFREdFUy5IQVNfUkVBQ1RJT04pfVxuICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgRk9SIHJlYWN0aW9uLCBociBJTiAxLi4xIElOQk9VTkQgcCAke2xpdGVyYWwoRURHRVMuSVNfVEFHR0VEKX1cbiAgICAgICAgICBMRVQgbWF0Y2hlZCA9IExFTkdUSCgke2xpdGVyYWwoZm9ybWF0UmVhY3Rpb25zKX0pID4gMCAmJiBQT1NJVElPTigke2xpdGVyYWwoZm9ybWF0UmVhY3Rpb25zKX0sIHJlYWN0aW9uLm5hbWUpXG4gICAgICAgICAgU09SVCByZWFjdGlvbi5uYW1lXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHJlYWN0aW9uLCB7bWF0Y2hlZH0pXG4gICAgICApXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlcnMuam9pbignICYmICcpKX1cbiAgICAgIFNPUlQgJHtsaXRlcmFsKHNvcnRCeS5qb2luKCcsICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhZ05hbWVzOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgc3RhcnREYXRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgY29uc3QgZm9ybWF0VGFnTmFtZXM6IHN0cmluZ1tdID0gdGFnTmFtZXMubWFwKCh0YWdOYW1lKSA9PiBwYXJzZUNoYXIodGFnTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpO1xuICBjb25zdCBzb3J0Qnk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BwLnR5cGUgPT0gXCIke3R5cGV9XCJgLCBgcC5wcml2YWN5ID09IFwiJHtQcml2YWN5TGV2ZWwuUFVCTElDfVwiYF07XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGUgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCBmb3JtYXRTdGFydERhdGUgPSBwYXJzZU51bShzdGFydERhdGUpO1xuXG4gIGlmIChmb3JtYXRMYXRpdHVkZSAmJiBmb3JtYXRMb25naXR1ZGUpIHtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG4gICAgc29ydEJ5LnB1c2goJ2Rpc3RhbmNlJyk7XG4gIH1cblxuICAvLyBVc2UgYnVpbGRUYWdzUXVlcnkgaGVscGVyIHdpdGggbWF0Y2hlZCB0YWdzXG4gIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZFRhZ3NRdWVyeSgncCcsIGZvcm1hdFRhZ05hbWVzKSk7XG5cbiAgaWYgKHRhZ05hbWVzLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkVGFncyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkTWF0Y2hlZFRhZ3NDb3VudFF1ZXJ5KGZvcm1hdFRhZ05hbWVzKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkVGFnczptYXRjaGVkVGFncycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFRhZ3MgPiAwJyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RhcnREYXRlKSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnN0YXJ0RGF0ZSA+PSAke2Zvcm1hdFN0YXJ0RGF0ZX1gKTtcbiAgICBzb3J0QnkucHVzaCgncC5zdGFydERhdGUgQVNDJyk7XG4gIH0gZWxzZSB7XG4gICAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICB9XG5cbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCd0YWdzOnRhZ3MnKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBwIElOICR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QT1NUUyl9XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlcnMuam9pbignICYmICcpKX1cbiAgICAgIFNPUlQgJHtsaXRlcmFsKHNvcnRCeS5qb2luKCcsICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeVVzZXInO1xuICBjb25zdCB7ZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxQb3N0VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICB7dXNlcklkOiBmb3JtYXRVc2VySWQsIHR5cGUsIHByaXZhY3k6IFByaXZhY3lMZXZlbC5QVUJMSUMsIHBhcmVudElkOiBudWxsfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdBU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UGFyZW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3RJZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlQYXJlbnQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQocG9zdElkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfa2V5LFxuICAgICAgICBncm91cElkLFxuICAgICAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLkRFRkFVTFRcbiAgICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgICAgbGV0IHByaXZhY3lBcWxRcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLkdST1VQKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCJcbiAgICAgICAgICAke2J1aWxkVXNlckluZm9RdWVyeSgncC51c2VySWQnKX1cbiAgICAgICAgICAke2J1aWxkUmVhY3Rpb25zUXVlcnkoJ3AnKX1cbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gJHtDT0xMRUNUSU9OUy5HUk9VUFN9XG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkICR7RURHRVMuSEFTX0NPTk5FQ1RJT059XG4gICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH0gZWxzZSBpZiAocHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLlBVQkxJQykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiXG4gICAgICAgICAgJHtidWlsZFVzZXJJbmZvUXVlcnkoJ3AudXNlcklkJyl9XG4gICAgICAgICAgJHtidWlsZFJlYWN0aW9uc1F1ZXJ5KCdwJyl9XG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgICAgICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJlcGFyZSBwb3N0IGRhdGEgZm9yIGluc2VydGlvblxuY29uc3QgcHJlcGFyZVBvc3REYXRhID0gKFxuICBpbnB1dDogUG9zdElucHV0VHlwZSxcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIHBlcnNvbmFJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgbm93OiBudW1iZXJcbik6IFBvc3RUeXBlID0+ICh7XG4gIF9pZDogYCR7Q09MTEVDVElPTlMuUE9TVFN9LyR7cG9zdElkfWAsXG4gIF9rZXk6IHBvc3RJZCxcbiAgYWRkZWQ6IG5vdyxcbiAgY29udGVudDogcGFyc2VTdHJpbmcoaW5wdXQuY29udGVudCB8fCAnJywgTUFYX0NPTlRFTlRfTEVOR1RIKSB8fCAnJyxcbiAgZW5kRGF0ZTogaW5wdXQuZW5kRGF0ZSA/IHBhcnNlTnVtKGlucHV0LmVuZERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgZ3JvdXBJZDogaW5wdXQuZ3JvdXBJZCA/IHBhcnNlSWQoaW5wdXQuZ3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gIGxhdGl0dWRlOiBpbnB1dC5sYXRpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubGF0aXR1ZGUpIDogdW5kZWZpbmVkLFxuICBsb2NhdGlvbjogaW5wdXQubG9jYXRpb24gPyBwYXJzZVN0cmluZyhpbnB1dC5sb2NhdGlvbiwgMTYwKSA6IHVuZGVmaW5lZCxcbiAgbG9uZ2l0dWRlOiBpbnB1dC5sb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LmxvbmdpdHVkZSkgOiB1bmRlZmluZWQsXG4gIG1heEd1ZXN0c1BlclBlcnNvbmE6IGlucHV0Lm1heEd1ZXN0c1BlclBlcnNvbmEgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0Lm1heEd1ZXN0c1BlclBlcnNvbmEsIDMpIDogdW5kZWZpbmVkLFxuICBtb2RpZmllZDogbm93LFxuICBuYW1lOiBwYXJzZVN0cmluZyhpbnB1dC5uYW1lIHx8ICcnLCAxNjApLFxuICBwYXJlbnRJZDogaW5wdXQucGFyZW50SWQgPyBwYXJzZUlkKGlucHV0LnBhcmVudElkKSA6IHVuZGVmaW5lZCxcbiAgcHJpdmFjeTogcGFyc2VWYXJDaGFyKGlucHV0LnByaXZhY3kgfHwgUHJpdmFjeUxldmVsLlBVQkxJQywgMTYpLFxuICBwcm9wczogcGFyc2VQb3N0UHJvcHMoaW5wdXQucHJvcHMpLFxuICBwZXJzb25hSWQsXG4gIHN0YXJ0RGF0ZTogaW5wdXQuc3RhcnREYXRlID8gcGFyc2VOdW0oaW5wdXQuc3RhcnREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gIHRpY2tldENvc3RDZW50czogaW5wdXQudGlja2V0Q29zdENlbnRzICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC50aWNrZXRDb3N0Q2VudHMsIDEyKSA6IHVuZGVmaW5lZCxcbiAgdHlwZTogcGFyc2VDaGFyKGlucHV0LnR5cGUgfHwgJ2RlZmF1bHQnLCAzMiksXG4gIHVzZXJJZDogc2Vzc2lvbklkXG59KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSB0YWdzIGZvciBwb3N0c1xuY29uc3QgaGFuZGxlUG9zdFRhZ3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHRhZ3M6IFRhZ1R5cGVbXSxcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbik6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGNvbnRlbnRUYWdOYW1lcyA9IGF3YWl0IGV4dHJhY3RUYWdzKGNvbnRlbnQgfHwgJycpO1xuXG4gIGlmICh0YWdzLmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgdXNlclRhZ3MgPSAoYXdhaXQgZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdzLm1hcCgoe25hbWV9KSA9PiBuYW1lIHx8ICcnKSkpXG4gICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogc2Vzc2lvbklkfSkpO1xuICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gKGF3YWl0IGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgY29udGVudFRhZ05hbWVzIHx8IFtdKSlcbiAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiAnZXh0cmFjdCd9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdXBkYXRlVGFnc0luSXRlbShcbiAgICAgIGNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIGl0ZW1Eb2NJZDogcG9zdERvY0lkLFxuICAgICAgICB0YWdzOiBbLi4uY29udGVudFRhZ3MsIC4uLnVzZXJUYWdzXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW107XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUG9zdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnRlbnQgPSAnJyxcbiAgICBlbmREYXRlLFxuICAgIGdyb3VwSWQgPSAnJyxcbiAgICBsb2NhdGlvbixcbiAgICBsYXRpdHVkZSxcbiAgICBsb25naXR1ZGUsXG4gICAgbmFtZSA9ICcnLFxuICAgIHBhcmVudElkID0gJycsXG4gICAgcHJpdmFjeSA9IFByaXZhY3lMZXZlbC5QVUJMSUMsXG4gICAgcHJvcHMgPSB7fSxcbiAgICBtYXhHdWVzdHNQZXJQZXJzb25hLFxuICAgIHBlcnNvbmFJZCA9ICcnLFxuICAgIHRhZ3MgPSBbXSxcbiAgICBzdGFydERhdGUsXG4gICAgdGlja2V0Q29zdENlbnRzLFxuICAgIHR5cGUgPSAnZGVmYXVsdCdcbiAgfTogUG9zdElucHV0VHlwZVxuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUG9zdCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcG9zdElkID0gY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgcmVzb2x2ZWRQZXJzb25hSWQgPSBhd2FpdCByZXNvbHZlUGVyc29uYUlkRm9yUG9zdChjb250ZXh0LCBwZXJzb25hSWQpO1xuXG4gIGNvbnN0IGluc2VydDogUG9zdFR5cGUgPSBwcmVwYXJlUG9zdERhdGEoXG4gICAge2NvbnRlbnQsIGVuZERhdGUsIGdyb3VwSWQsIGxvY2F0aW9uLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBtYXhHdWVzdHNQZXJQZXJzb25hLCBuYW1lLCBwYXJlbnRJZCwgcHJpdmFjeSwgcHJvcHMsIHBlcnNvbmFJZDogcmVzb2x2ZWRQZXJzb25hSWQsIHN0YXJ0RGF0ZSwgdGFncywgdGlja2V0Q29zdENlbnRzLCB0eXBlfSxcbiAgICBzZXNzaW9uSWQsXG4gICAgcmVzb2x2ZWRQZXJzb25hSWQsXG4gICAgcG9zdElkLFxuICAgIERhdGUubm93KClcbiAgKTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBDUlVEIGFkZEl0ZW0gZnVuY3Rpb25cbiAgICBjb25zdCBzYXZlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgYWRkSXRlbTxQb3N0VHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuUE9TVFMsIGluc2VydCk7XG5cbiAgICBjb25zdCB7X2lkOiBwb3N0RG9jSWR9ID0gc2F2ZWRQb3N0O1xuICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gYXdhaXQgaGFuZGxlUG9zdFRhZ3MoY29udGV4dCwgcG9zdERvY0lkLCBpbnNlcnQuY29udGVudCB8fCAnJywgdGFncywgc2Vzc2lvbklkKTtcblxuICAgIGlmICh1cGRhdGVkVGFncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNhdmVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdmVkUG9zdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0OiBQb3N0SW5wdXRUeXBlKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlUG9zdCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcGFyc2VkUG9zdCA9IHBhcnNlUG9zdChwb3N0KTtcbiAgY29uc3Qge1xuICAgIHBvc3RJZCxcbiAgICB0YWdzID0gW11cbiAgfSA9IHBhcnNlZFBvc3Q7XG5cbiAgaWYgKCFwb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCB1cGRhdGU6IFBvc3RUeXBlID0ge1xuICAgIC4uLnBhcnNlZFBvc3RcbiAgfTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBDUlVEIHVwZGF0ZUl0ZW0gd2l0aCBvd25lcnNoaXAgY2hlY2tcbiAgICBjb25zdCB1cGRhdGVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCB1cGRhdGVJdGVtPFBvc3RUeXBlPihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICAgIHBvc3RJZCxcbiAgICAgIHVwZGF0ZSxcbiAgICAgIHtvd25lcnNoaXA6IHRydWV9XG4gICAgKTtcblxuICAgIGNvbnN0IHtfaWQ6IHVwZGF0ZWRQb3N0SWR9ID0gdXBkYXRlZFBvc3Q7XG4gICAgY29uc3QgdXBkYXRlZFRhZ3MgPSBhd2FpdCBoYW5kbGVQb3N0VGFncyhjb250ZXh0LCB1cGRhdGVkUG9zdElkLCB1cGRhdGUuY29udGVudCB8fCAnJywgdGFncywgc2Vzc2lvbklkKTtcblxuICAgIGlmICh1cGRhdGVkVGFncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZFBvc3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdERvY0lkOiBzdHJpbmcpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVQb3N0JztcbiAgaWYgKCFwb3N0RG9jSWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbiAgY29uc3QgZm9ybWF0UG9zdElkID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuXG4gIGlmICghZm9ybWF0UG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZGVsZXRlSXRlbTxQb3N0VHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuUE9TVFMsIGZvcm1hdFBvc3RJZCwge1xuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSkgfHwge19pZDogZm9ybWF0UG9zdElkfSBhcyBQb3N0VHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEVkZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgZWRnZVR5cGU6IHN0cmluZyA9IEVER0VTLklTX1BPU1RFRCxcbiAgcHJvcHMgPSB7fVxuKTogUHJvbWlzZTxGaWxlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlUG9zdEVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihlZGdlVHlwZSk7XG4gIGlmICghcG9zdERvY0lkIHx8ICFpdGVtRG9jSWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbiAgY29uc3QgZm9ybWF0UG9zdElkID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuICBjb25zdCBmb3JtYXREb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbURvY0lkKTtcblxuICBpZiAoIWZvcm1hdERvY0lkIHx8ICFmb3JtYXRQb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBwb3N0RWRnZS0ke2Zvcm1hdFBvc3RJZH0tJHtmb3JtYXREb2NJZH1gKTtcbiAgY29uc3QgZWRnZSA9IHtcbiAgICBfZnJvbTogZm9ybWF0UG9zdElkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdERvY0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIC4uLnByb3BzXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsImFxbCIsImxpdGVyYWwiLCJwYXJzZVBvc3QiLCJwYXJzZVBvc3RQcm9wcyIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJQcml2YWN5TGV2ZWwiLCJSZWFjdGlvblR5cGUiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJidWlsZERpc3RhbmNlUXVlcnkiLCJidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5IiwiYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnkiLCJidWlsZFJlYWN0aW9uc1F1ZXJ5IiwiYnVpbGRUYWdzUXVlcnkiLCJidWlsZFVzZXJJbmZvUXVlcnkiLCJnZXRMaW1pdCIsInVzZURiIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJleHRyYWN0VGFncyIsImdldFRhZ0xpc3RCeU5hbWUiLCJ1cGRhdGVUYWdzSW5JdGVtIiwiTUFYX0NPTlRFTlRfTEVOR1RIIiwiZXZlbnRDYXRlZ29yeSIsInJlc29sdmVQZXJzb25hSWRGb3JQb3N0IiwiY29udGV4dCIsImV4cGxpY2l0UGVyc29uYUlkIiwic2Vzc2lvbiIsInVzZXJJZCIsInNlc3Npb25Vc2VySWQiLCJwcm92aWRlZFBlcnNvbmFJZCIsInNlc3Npb25Vc2VySWRQYXJzZWQiLCJ1bmRlZmluZWQiLCJ1c2VyIiwiVVNFUlMiLCJfa2V5IiwicGVyc29uYUlkIiwiZmlsdGVyQmxvY2tlZFBvc3RzIiwicG9zdHMiLCJ2aXNpYmlsaXR5IiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInBvc3QiLCJTdHJpbmciLCJmaWx0ZXIiLCJfcG9zdCIsImluZGV4IiwicGFyc2VQb3N0T3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJzdGFydERhdGUiLCJ0byIsInR5cGUiLCJsaW1pdCIsIkVWRU5UX1BPU1RfVFlQRSIsIlBPU1RfUkVBQ1RJT05fSVRFTV9UWVBFIiwiUE9TVFMiLCJPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEUiLCJnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUiLCJyZWFjdGlvbk5hbWUiLCJQSU4iLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiT1BUSU9OQUxfRklFTERfSEFORExFUlMiLCJoYXNSc3ZwIiwiYWN0b3JEb2NJZCIsInF1ZXJ5IiwiUlNWUCIsIkhBU19SRUFDVElPTiIsIm9iamVjdCIsImlzU2F2ZWQiLCJyZWFjdGlvbnMiLCJyc3ZwQ291bnQiLCJ2aWV3Q291bnQiLCJWSUVXIiwiZ2V0UG9zdE9wdGlvbmFsRmllbGRzIiwiZmllbGRzIiwic2Vzc2lvbklkIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwiaGFuZGxlciIsIlBFUlNPTkFTIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwiYnVpbGRQcml2YWN5RmlsdGVyUXVlcnkiLCJwb3N0RG9jSWQiLCJncm91cElkIiwicHJpdmFjeSIsInNlbGVjdFF1ZXJpZXMiLCJzZWxlY3RPYmplY3RzIiwiR1JPVVAiLCJqb2luIiwiR1JPVVBTIiwiSEFTX0NPTk5FQ1RJT04iLCJQVUJMSUMiLCJnZXRQb3N0QnlJZCIsInBvc3RJZCIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImZvcm1hdEl0ZW1JZCIsImRhdGFiYXNlIiwiYXFsUXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJfaWQiLCJERUZBVUxUIiwicHJpdmFjeUFxbFFyeSIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRQb3N0TGlzdEJ5QXJlYSIsImZvcm1hdExhdGl0dWRlIiwiZm9ybWF0TG9uZ2l0dWRlIiwibGVuZ3RoIiwiZ2V0UG9zdExpc3RCeUxhdGVzdCIsInBhcmVudElkIiwic29ydCIsImRpcmVjdGlvbiIsInN0YXJ0IiwibnVtIiwiY3VzdG9tUXVlcmllcyIsImN1c3RvbU9iamVjdHMiLCJnZXRQb3N0TGlzdEJ5UmVhY3Rpb24iLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJKU09OIiwic3RyaW5naWZ5IiwicmVhY3Rpb24iLCJ0b0xvd2VyQ2FzZSIsInNvcnRCeSIsImZpbHRlcnMiLCJmb3JtYXRTdGFydERhdGUiLCJJU19UQUdHRUQiLCJnZXRQb3N0TGlzdEJ5VGFncyIsInRhZ05hbWVzIiwiZm9ybWF0VGFnTmFtZXMiLCJ0YWdOYW1lIiwiZ2V0UG9zdExpc3RCeVVzZXIiLCJmb3JtYXRVc2VySWQiLCJnZXRQb3N0TGlzdEJ5UGFyZW50IiwicHJlcGFyZVBvc3REYXRhIiwiaW5wdXQiLCJub3ciLCJhZGRlZCIsImNvbnRlbnQiLCJlbmREYXRlIiwibG9jYXRpb24iLCJtYXhHdWVzdHNQZXJQZXJzb25hIiwibW9kaWZpZWQiLCJuYW1lIiwicHJvcHMiLCJ0aWNrZXRDb3N0Q2VudHMiLCJoYW5kbGVQb3N0VGFncyIsInRhZ3MiLCJjb250ZW50VGFnTmFtZXMiLCJ1c2VyVGFncyIsInRhZyIsInRhZ0J5IiwiY29udGVudFRhZ3MiLCJpdGVtRG9jSWQiLCJhZGRQb3N0IiwicmVzb2x2ZWRQZXJzb25hSWQiLCJpbnNlcnQiLCJEYXRlIiwic2F2ZWRQb3N0IiwidXBkYXRlZFRhZ3MiLCJ1cGRhdGVQb3N0IiwicGFyc2VkUG9zdCIsInZhbHVlIiwiSU5WQUxJRF9JRCIsInVwZGF0ZSIsInVwZGF0ZWRQb3N0Iiwib3duZXJzaGlwIiwidXBkYXRlZFBvc3RJZCIsImRlbGV0ZVBvc3QiLCJmb3JtYXRQb3N0SWQiLCJjcmVhdGVQb3N0RWRnZSIsImVkZ2VUeXBlIiwiSVNfUE9TVEVEIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwiZm9ybWF0RG9jSWQiLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJzYXZlIiwicmV0dXJuTmV3Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQ0VDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxZQUFZLFFBQ25FLCtCQUErQjtBQUN0QyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFF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
|
|
616
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9wb3N0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge1xuICBjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJcbn0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeSwgbGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtwYXJzZVBvc3QsIHBhcnNlUG9zdFByb3BzfSBmcm9tICcuLi9hZGFwdGVycy9wb3N0QWRhcHRlci5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFUywgUHJpdmFjeUxldmVsLCBSZWFjdGlvblR5cGV9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtcbiAgYnVpbGREaXN0YW5jZVF1ZXJ5LFxuICBidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5LFxuICBidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSxcbiAgYnVpbGRSZWFjdGlvbnNRdWVyeSxcbiAgYnVpbGRUYWdzUXVlcnksXG4gIGJ1aWxkVXNlckluZm9RdWVyeSxcbn0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2V4dHJhY3RUYWdzLCBnZXRUYWdMaXN0QnlOYW1lLCB1cGRhdGVUYWdzSW5JdGVtfSBmcm9tICcuL3RhZ3MuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ZpbGVzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtQb3N0SW5wdXRUeXBlLCBQb3N0T3B0aW9ucywgUG9zdFR5cGV9IGZyb20gJy4uL3R5cGVzL3Bvc3RzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzLnR5cGVzLmpzJztcblxuY29uc3QgTUFYX0NPTlRFTlRfTEVOR1RIID0gMTAwMDAwO1xuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdwb3N0cyc7XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBleHBsaWNpdFBlcnNvbmFJZCA9ICcnXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwcm92aWRlZFBlcnNvbmFJZCA9IHBhcnNlSWQoZXhwbGljaXRQZXJzb25hSWQpO1xuXG4gIGlmKHByb3ZpZGVkUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVkUGVyc29uYUlkO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZFBhcnNlZCA9IHBhcnNlSWQoc2Vzc2lvblVzZXJJZCB8fCAnJyk7XG4gIGlmKCFzZXNzaW9uVXNlcklkUGFyc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRJdGVtQnk8e3BlcnNvbmFJZD86IHN0cmluZ30+KGNvbnRleHQsIENPTExFQ1RJT05TLlVTRVJTLCB7X2tleTogc2Vzc2lvblVzZXJJZFBhcnNlZH0pO1xuICByZXR1cm4gcGFyc2VJZCh1c2VyPy5wZXJzb25hSWQgfHwgJycpIHx8IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGZpbHRlckJsb2NrZWRQb3N0cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdHM6IFBvc3RUeXBlW10gPSBbXVxuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IHZpc2liaWxpdHkgPSBhd2FpdCBQcm9taXNlLmFsbChwb3N0cy5tYXAoYXN5bmMgKHBvc3QpID0+IHtcbiAgICBjb25zdCBwZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwb3N0Py5wZXJzb25hSWQgfHwgJycpKTtcblxuICAgIGlmKCFwZXJzb25hSWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBlcnNvbmFJZCkpO1xuICB9KSk7XG5cbiAgcmV0dXJuIHBvc3RzLmZpbHRlcigoX3Bvc3QsIGluZGV4KSA9PiB2aXNpYmlsaXR5W2luZGV4XSk7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBwYXJzZVBvc3RPcHRpb25zID0gKG9wdGlvbnM6IFBvc3RPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIGxhdGl0dWRlID0gMCxcbiAgICBsb25naXR1ZGUgPSAwLFxuICAgIHN0YXJ0RGF0ZSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ3Bvc3QnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGF0aXR1ZGU6IHBhcnNlTnVtKGxhdGl0dWRlLCAzMiksXG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIGxvbmdpdHVkZTogcGFyc2VOdW0obG9uZ2l0dWRlLCAzMiksXG4gICAgc3RhcnREYXRlOiBwYXJzZU51bShzdGFydERhdGUsIDMyKSxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5jb25zdCBFVkVOVF9QT1NUX1RZUEUgPSAnZXZlbnQnO1xuY29uc3QgUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUgPSBDT0xMRUNUSU9OUy5QT1NUUztcbmNvbnN0IE9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSA9IGBwLnR5cGUgPT0gXCIke0VWRU5UX1BPU1RfVFlQRX1cIiA/IFwiJHtFVkVOVF9QT1NUX1RZUEV9XCIgOiBcIiR7UE9TVF9SRUFDVElPTl9JVEVNX1RZUEV9XCJgO1xuXG5jb25zdCBnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUgPSAocmVhY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gKFxuICByZWFjdGlvbk5hbWUgPT09IFJlYWN0aW9uVHlwZS5QSU5cbiAgICA/ICdpc1NhdmVkJ1xuICAgIDogYGhhcyR7cmVhY3Rpb25OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7cmVhY3Rpb25OYW1lLnNsaWNlKDEpfWBcbik7XG5cbi8vIE1hcCBvZiBvcHRpb25hbCBmaWVsZCBoYW5kbGVyc1xudHlwZSBGaWVsZEhhbmRsZXIgPSAoYWN0b3JEb2NJZDogc3RyaW5nKSA9PiB7cXVlcnk6IHN0cmluZzsgb2JqZWN0OiBzdHJpbmd9O1xuXG5jb25zdCBPUFRJT05BTF9GSUVMRF9IQU5ETEVSUzogUmVjb3JkPHN0cmluZywgRmllbGRIYW5kbGVyPiA9IHtcbiAgaGFzUnN2cDogKGFjdG9yRG9jSWQpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUoUmVhY3Rpb25UeXBlLlJTVlApfSA9IFRPX0JPT0woRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlJTVlB9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pICYmIHIuX2Zyb20gPT0gXCIke2FjdG9yRG9jSWR9XCJcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApKWAsXG4gICAgb2JqZWN0OiAnaGFzUnN2cDpoYXNSc3ZwJ1xuICB9KSxcbiAgaXNTYXZlZDogKGFjdG9yRG9jSWQpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUoUmVhY3Rpb25UeXBlLlBJTil9ID0gVE9fQk9PTChGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUElOfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KSAmJiByLl9mcm9tID09IFwiJHthY3RvckRvY0lkfVwiXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKSlgLFxuICAgIG9iamVjdDogJ2lzU2F2ZWQ6aXNTYXZlZCdcbiAgfSksXG4gIHJlYWN0aW9uczogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCByZWFjdGlvbnMgPSAoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KVxuICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICApYCxcbiAgICBvYmplY3Q6ICdyZWFjdGlvbnM6cmVhY3Rpb25zJ1xuICB9KSxcbiAgcnN2cENvdW50OiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7UmVhY3Rpb25UeXBlLlJTVlB9Q291bnQgPSBGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUlNWUH1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApYCxcbiAgICBvYmplY3Q6ICdyc3ZwQ291bnQ6cnN2cENvdW50J1xuICB9KSxcbiAgdmlld0NvdW50OiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7UmVhY3Rpb25UeXBlLlZJRVd9Q291bnQgPSBGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuVklFV31cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApYCxcbiAgICBvYmplY3Q6ICd2aWV3Q291bnQ6dmlld0NvdW50J1xuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RPcHRpb25hbEZpZWxkcyA9IChcbiAgZmllbGRzOiBzdHJpbmdbXSA9IFtdLFxuICBzZXNzaW9uSWQ6IHN0cmluZyA9ICcnLFxuICBwZXJzb25hSWQ6IHN0cmluZyA9ICcnXG4pID0+XG4gIChmaWVsZHMgfHwgW10pLnJlZHVjZSgoc2VsZWN0czoge29iamVjdHM6IHN0cmluZ1tdLCBxdWVyaWVzOiBzdHJpbmdbXX0sIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gT1BUSU9OQUxfRklFTERfSEFORExFUlNbZmllbGRdO1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBjb25zdCBhY3RvckRvY0lkID0gcGVyc29uYUlkXG4gICAgICAgID8gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7cGFyc2VJZChwZXJzb25hSWQpfWBcbiAgICAgICAgOiBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgICAgIGNvbnN0IHtxdWVyeSwgb2JqZWN0fSA9IGhhbmRsZXIoYWN0b3JEb2NJZCk7XG4gICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgICBzZWxlY3RzLm9iamVjdHMucHVzaChvYmplY3QpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0cztcbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGQgcHJpdmFjeSBmaWx0ZXIgcXVlcnlcbmNvbnN0IGJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5ID0gKFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgZ3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwcml2YWN5OiBzdHJpbmcsXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBzZWxlY3RRdWVyaWVzOiBzdHJpbmdbXSxcbiAgc2VsZWN0T2JqZWN0czogc3RyaW5nW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChncm91cElkICYmIHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5HUk9VUCkge1xuICAgIHJldHVybiBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgRk9SIGdyb3VwIElOICR7Q09MTEVDVElPTlMuR1JPVVBTfVxuICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgJHtFREdFUy5IQVNfQ09OTkVDVElPTn1cbiAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gIH0gZWxzZSBpZiAocHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLlBVQkxJQykge1xuICAgIHJldHVybiBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0QnlJZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCB7dHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgIEZJTFRFUiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9ICYmIHAudHlwZSA9PSAke3R5cGV9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuICAgIGNvbnN0IHtcbiAgICAgIF9pZDogcG9zdERvY0lkLFxuICAgICAgcGVyc29uYUlkLFxuICAgICAgdXNlcklkLFxuICAgICAgZ3JvdXBJZCxcbiAgICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuREVGQVVMVFxuICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgIGlmKHBlcnNvbmFJZCAmJiBhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwZXJzb25hSWQpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gVXNlciBvd25zIHRoZSBwb3N0LCByZXR1cm4gZGlyZWN0bHlcbiAgICBpZiAodXNlcklkID09PSBzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBwb3N0O1xuICAgIH1cblxuICAgIC8vIENoZWNrIHByaXZhY3kgYW5kIGJ1aWxkIGFwcHJvcHJpYXRlIHF1ZXJ5XG4gICAgY29uc3QgcHJpdmFjeUFxbFFyeSA9IGJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5KFxuICAgICAgcG9zdERvY0lkLFxuICAgICAgZ3JvdXBJZCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBzZWxlY3RRdWVyaWVzLFxuICAgICAgc2VsZWN0T2JqZWN0c1xuICAgICk7XG5cbiAgICBpZiAocHJpdmFjeUFxbFFyeSkge1xuICAgICAgcmV0dXJuIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5QXJlYSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGF0aXR1ZGU6IG51bWJlcixcbiAgbG9uZ2l0dWRlOiBudW1iZXIsXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5QXJlYSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGUgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCBJTiAke2xpdGVyYWwoQ09MTEVDVElPTlMuUE9TVFMpfVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAucHJpdmFjeSA9PSAke1ByaXZhY3lMZXZlbC5QVUJMSUN9ICYmIHAucGFyZW50SWQgPT0gbnVsbFxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBTT1JUIGRpc3RhbmNlLCBwLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5TGF0ZXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0TGlzdEJ5TGF0ZXN0JztcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt0eXBlLCBwcml2YWN5OiBQcml2YWN5TGV2ZWwuUFVCTElDLCBwYXJlbnRJZDogbnVsbH0sXG4gICAge1xuICAgICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnREVTQyd9XSxcbiAgICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICAgIH1cbiAgKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlSZWFjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdExpc3RCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHN0YXJ0RGF0ZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnMgPSBKU09OLnN0cmluZ2lmeShyZWFjdGlvbnMubWFwKChyZWFjdGlvbikgPT4gcGFyc2VDaGFyKHJlYWN0aW9uLCAzMikudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBzb3J0Qnk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BwLnR5cGUgPT0gXCIke3R5cGV9XCJgLCBgcC5wcml2YWN5ID09IFwiJHtQcml2YWN5TGV2ZWwuUFVCTElDfVwiYF07XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGUgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCBmb3JtYXRTdGFydERhdGUgPSBwYXJzZU51bShzdGFydERhdGUpO1xuXG4gIGlmIChmb3JtYXRMYXRpdHVkZSAmJiBmb3JtYXRMb25naXR1ZGUpIHtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG4gICAgc29ydEJ5LnB1c2goJ2Rpc3RhbmNlJyk7XG4gIH1cblxuICBpZiAocmVhY3Rpb25zLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeShyZWFjdGlvbnMpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnM6bWF0Y2hlZFJlYWN0aW9ucycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyA+IDAnKTtcbiAgfVxuXG4gIGlmIChmb3JtYXRTdGFydERhdGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAuc3RhcnREYXRlID49ICR7Zm9ybWF0U3RhcnREYXRlfWApO1xuICAgIHNvcnRCeS5wdXNoKCdwLnN0YXJ0RGF0ZSBBU0MnKTtcbiAgfSBlbHNlIHtcbiAgICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIH1cblxuICBzZWxlY3RPYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBwLCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSAke2xpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKX1cbiAgICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgIEZPUiByZWFjdGlvbiwgaHIgSU4gMS4uMSBJTkJPVU5EIHAgJHtsaXRlcmFsKEVER0VTLklTX1RBR0dFRCl9XG4gICAgICAgICAgTEVUIG1hdGNoZWQgPSBMRU5HVEgoJHtsaXRlcmFsKGZvcm1hdFJlYWN0aW9ucyl9KSA+IDAgJiYgUE9TSVRJT04oJHtsaXRlcmFsKGZvcm1hdFJlYWN0aW9ucyl9LCByZWFjdGlvbi5uYW1lKVxuICAgICAgICAgIFNPUlQgcmVhY3Rpb24ubmFtZVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShyZWFjdGlvbiwge21hdGNoZWR9KVxuICAgICAgKVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJzLmpvaW4oJyAmJiAnKSl9XG4gICAgICBTT1JUICR7bGl0ZXJhbChzb3J0Qnkuam9pbignLCAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgncCcpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0YWdOYW1lczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RzQnlUYWdzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHN0YXJ0RGF0ZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGZvcm1hdFRhZ05hbWVzOiBzdHJpbmdbXSA9IHRhZ05hbWVzLm1hcCgodGFnTmFtZSkgPT4gcGFyc2VDaGFyKHRhZ05hbWUsIDMyKS50b0xvd2VyQ2FzZSgpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgYHAucHJpdmFjeSA9PSBcIiR7UHJpdmFjeUxldmVsLlBVQkxJQ31cImBdO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3QgZm9ybWF0U3RhcnREYXRlID0gcGFyc2VOdW0oc3RhcnREYXRlKTtcblxuICBpZiAoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgLy8gVXNlIGJ1aWxkVGFnc1F1ZXJ5IGhlbHBlciB3aXRoIG1hdGNoZWQgdGFnc1xuICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRUYWdzUXVlcnkoJ3AnLCBmb3JtYXRUYWdOYW1lcykpO1xuXG4gIGlmICh0YWdOYW1lcy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFRhZ3MgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeShmb3JtYXRUYWdOYW1lcykpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnbWF0Y2hlZFRhZ3M6bWF0Y2hlZFRhZ3MnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRUYWdzID4gMCcpO1xuICB9XG5cbiAgaWYgKGZvcm1hdFN0YXJ0RGF0ZSkge1xuICAgIGZpbHRlcnMucHVzaChgcC5zdGFydERhdGUgPj0gJHtmb3JtYXRTdGFydERhdGV9YCk7XG4gICAgc29ydEJ5LnB1c2goJ3Auc3RhcnREYXRlIEFTQycpO1xuICB9IGVsc2Uge1xuICAgIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgfVxuXG4gIHNlbGVjdE9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCBJTiAke2xpdGVyYWwoQ09MTEVDVElPTlMuUE9TVFMpfVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJzLmpvaW4oJyAmJiAnKSl9XG4gICAgICBTT1JUICR7bGl0ZXJhbChzb3J0Qnkuam9pbignLCAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgncCcpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlVc2VyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RzQnlVc2VyJztcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8UG9zdFR5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgQ09MTEVDVElPTlMuUE9TVFMsXG4gICAge3VzZXJJZDogZm9ybWF0VXNlcklkLCB0eXBlLCBwcml2YWN5OiBQcml2YWN5TGV2ZWwuUFVCTElDLCBwYXJlbnRJZDogbnVsbH0sXG4gICAge1xuICAgICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnQVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tOiBsaW1pdC5zdGFydCwgdG86IGxpbWl0LnN0YXJ0ICsgbGltaXQubnVtfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gICAgfVxuICApXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVBhcmVudCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0SWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0TGlzdEJ5UGFyZW50JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKHBvc3RJZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocG9zdDogUG9zdFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2tleSxcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgcHJpdmFjeSA9IFByaXZhY3lMZXZlbC5ERUZBVUxUXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChncm91cElkICYmIHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5HUk9VUCkge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiXG4gICAgICAgICAgJHtidWlsZFVzZXJJbmZvUXVlcnkoJ3AudXNlcklkJyl9XG4gICAgICAgICAgJHtidWlsZFJlYWN0aW9uc1F1ZXJ5KCdwJyl9XG4gICAgICAgICAgRk9SIGdyb3VwIElOICR7Q09MTEVDVElPTlMuR1JPVVBTfVxuICAgICAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgICAgIEZPUiB1LCBlIElOIE9VVEJPVU5EIGdyb3VwLl9pZCAke0VER0VTLkhBU19DT05ORUNUSU9OfVxuICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9IGVsc2UgaWYgKHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5QVUJMSUMpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIlxuICAgICAgICAgICR7YnVpbGRVc2VySW5mb1F1ZXJ5KCdwLnVzZXJJZCcpfVxuICAgICAgICAgICR7YnVpbGRSZWFjdGlvbnNRdWVyeSgncCcpfVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcml2YWN5QXFsUXJ5KSB7XG4gICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAgICAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdIGFzIFBvc3RUeXBlW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByZXBhcmUgcG9zdCBkYXRhIGZvciBpbnNlcnRpb25cbmNvbnN0IHByZXBhcmVQb3N0RGF0YSA9IChcbiAgaW5wdXQ6IFBvc3RJbnB1dFR5cGUsXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBwZXJzb25hSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG5vdzogbnVtYmVyXG4pOiBQb3N0VHlwZSA9PiAoe1xuICBfaWQ6IGAke0NPTExFQ1RJT05TLlBPU1RTfS8ke3Bvc3RJZH1gLFxuICBfa2V5OiBwb3N0SWQsXG4gIGFkZGVkOiBub3csXG4gIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGlucHV0LmNvbnRlbnQgfHwgJycsIE1BWF9DT05URU5UX0xFTkdUSCkgfHwgJycsXG4gIGVuZERhdGU6IGlucHV0LmVuZERhdGUgPyBwYXJzZU51bShpbnB1dC5lbmREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gIGdyb3VwSWQ6IGlucHV0Lmdyb3VwSWQgPyBwYXJzZUlkKGlucHV0Lmdyb3VwSWQpIDogdW5kZWZpbmVkLFxuICBsYXRpdHVkZTogaW5wdXQubGF0aXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LmxhdGl0dWRlKSA6IHVuZGVmaW5lZCxcbiAgbG9jYXRpb246IGlucHV0LmxvY2F0aW9uID8gcGFyc2VTdHJpbmcoaW5wdXQubG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gIGxvbmdpdHVkZTogaW5wdXQubG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5sb25naXR1ZGUpIDogdW5kZWZpbmVkLFxuICBtYXhHdWVzdHNQZXJQZXJzb25hOiBpbnB1dC5tYXhHdWVzdHNQZXJQZXJzb25hICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5tYXhHdWVzdHNQZXJQZXJzb25hLCAzKSA6IHVuZGVmaW5lZCxcbiAgbW9kaWZpZWQ6IG5vdyxcbiAgbmFtZTogcGFyc2VTdHJpbmcoaW5wdXQubmFtZSB8fCAnJywgMTYwKSxcbiAgcGFyZW50SWQ6IGlucHV0LnBhcmVudElkID8gcGFyc2VJZChpbnB1dC5wYXJlbnRJZCkgOiB1bmRlZmluZWQsXG4gIHByaXZhY3k6IHBhcnNlVmFyQ2hhcihpbnB1dC5wcml2YWN5IHx8IFByaXZhY3lMZXZlbC5QVUJMSUMsIDE2KSxcbiAgcHJvcHM6IHBhcnNlUG9zdFByb3BzKGlucHV0LnByb3BzKSxcbiAgcGVyc29uYUlkLFxuICBzdGFydERhdGU6IGlucHV0LnN0YXJ0RGF0ZSA/IHBhcnNlTnVtKGlucHV0LnN0YXJ0RGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICB0aWNrZXRDb3N0Q2VudHM6IGlucHV0LnRpY2tldENvc3RDZW50cyAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQudGlja2V0Q29zdENlbnRzLCAxMikgOiB1bmRlZmluZWQsXG4gIHR5cGU6IHBhcnNlQ2hhcihpbnB1dC50eXBlIHx8ICdkZWZhdWx0JywgMzIpLFxuICB1c2VySWQ6IHNlc3Npb25JZFxufSk7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgdGFncyBmb3IgcG9zdHNcbmNvbnN0IGhhbmRsZVBvc3RUYWdzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICB0YWdzOiBUYWdUeXBlW10sXG4gIHNlc3Npb25JZDogc3RyaW5nXG4pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBjb250ZW50VGFnTmFtZXMgPSBhd2FpdCBleHRyYWN0VGFncyhjb250ZW50IHx8ICcnKTtcblxuICBpZiAodGFncy5sZW5ndGggfHwgY29udGVudFRhZ05hbWVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHVzZXJUYWdzID0gKGF3YWl0IGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgdGFncy5tYXAoKHtuYW1lfSkgPT4gbmFtZSB8fCAnJykpKVxuICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6IHNlc3Npb25JZH0pKTtcbiAgICBjb25zdCBjb250ZW50VGFncyA9IChhd2FpdCBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIGNvbnRlbnRUYWdOYW1lcyB8fCBbXSkpXG4gICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogJ2V4dHJhY3QnfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHVwZGF0ZVRhZ3NJbkl0ZW0oXG4gICAgICBjb250ZXh0LFxuICAgICAge1xuICAgICAgICBpdGVtRG9jSWQ6IHBvc3REb2NJZCxcbiAgICAgICAgdGFnczogWy4uLmNvbnRlbnRUYWdzLCAuLi51c2VyVGFnc11cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb250ZW50ID0gJycsXG4gICAgZW5kRGF0ZSxcbiAgICBncm91cElkID0gJycsXG4gICAgbG9jYXRpb24sXG4gICAgbGF0aXR1ZGUsXG4gICAgbG9uZ2l0dWRlLFxuICAgIG5hbWUgPSAnJyxcbiAgICBwYXJlbnRJZCA9ICcnLFxuICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuUFVCTElDLFxuICAgIHByb3BzID0ge30sXG4gICAgbWF4R3Vlc3RzUGVyUGVyc29uYSxcbiAgICBwZXJzb25hSWQgPSAnJyxcbiAgICB0YWdzID0gW10sXG4gICAgc3RhcnREYXRlLFxuICAgIHRpY2tldENvc3RDZW50cyxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH06IFBvc3RJbnB1dFR5cGVcbik6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFBvc3QnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBvc3RJZCA9IGNyZWF0ZUhhc2goYHBvc3QtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IHJlc29sdmVkUGVyc29uYUlkID0gYXdhaXQgcmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QoY29udGV4dCwgcGVyc29uYUlkKTtcblxuICBjb25zdCBpbnNlcnQ6IFBvc3RUeXBlID0gcHJlcGFyZVBvc3REYXRhKFxuICAgIHtjb250ZW50LCBlbmREYXRlLCBncm91cElkLCBsb2NhdGlvbiwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgbWF4R3Vlc3RzUGVyUGVyc29uYSwgbmFtZSwgcGFyZW50SWQsIHByaXZhY3ksIHByb3BzLCBwZXJzb25hSWQ6IHJlc29sdmVkUGVyc29uYUlkLCBzdGFydERhdGUsIHRhZ3MsIHRpY2tldENvc3RDZW50cywgdHlwZX0sXG4gICAgc2Vzc2lvbklkLFxuICAgIHJlc29sdmVkUGVyc29uYUlkLFxuICAgIHBvc3RJZCxcbiAgICBEYXRlLm5vdygpXG4gICk7XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgQ1JVRCBhZGRJdGVtIGZ1bmN0aW9uXG4gICAgY29uc3Qgc2F2ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGFkZEl0ZW08UG9zdFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlBPU1RTLCBpbnNlcnQpO1xuXG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcbiAgICBjb25zdCB1cGRhdGVkVGFncyA9IGF3YWl0IGhhbmRsZVBvc3RUYWdzKGNvbnRleHQsIHBvc3REb2NJZCwgaW5zZXJ0LmNvbnRlbnQgfHwgJycsIHRhZ3MsIHNlc3Npb25JZCk7XG5cbiAgICBpZiAodXBkYXRlZFRhZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zYXZlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzYXZlZFBvc3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdDogUG9zdElucHV0VHlwZSk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVBvc3QnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZFBvc3QgPSBwYXJzZVBvc3QocG9zdCk7XG4gIGNvbnN0IHtcbiAgICBwb3N0SWQsXG4gICAgdGFncyA9IFtdXG4gIH0gPSBwYXJzZWRQb3N0O1xuXG4gIGlmICghcG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlOiBQb3N0VHlwZSA9IHtcbiAgICAuLi5wYXJzZWRQb3N0XG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgQ1JVRCB1cGRhdGVJdGVtIHdpdGggb3duZXJzaGlwIGNoZWNrXG4gICAgY29uc3QgdXBkYXRlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgdXBkYXRlSXRlbTxQb3N0VHlwZT4oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUE9TVFMsXG4gICAgICBwb3N0SWQsXG4gICAgICB1cGRhdGUsXG4gICAgICB7b3duZXJzaGlwOiB0cnVlfVxuICAgICk7XG5cbiAgICBjb25zdCB7X2lkOiB1cGRhdGVkUG9zdElkfSA9IHVwZGF0ZWRQb3N0O1xuICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gYXdhaXQgaGFuZGxlUG9zdFRhZ3MoY29udGV4dCwgdXBkYXRlZFBvc3RJZCwgdXBkYXRlLmNvbnRlbnQgfHwgJycsIHRhZ3MsIHNlc3Npb25JZCk7XG5cbiAgICBpZiAodXBkYXRlZFRhZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRQb3N0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlUG9zdCc7XG4gIGlmICghcG9zdERvY0lkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG4gIGNvbnN0IGZvcm1hdFBvc3RJZCA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcblxuICBpZiAoIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGRlbGV0ZUl0ZW08UG9zdFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlBPU1RTLCBmb3JtYXRQb3N0SWQsIHtcbiAgICAgIG93bmVyc2hpcDogdHJ1ZVxuICAgIH0pIHx8IHtfaWQ6IGZvcm1hdFBvc3RJZH0gYXMgUG9zdFR5cGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvc3RFZGdlID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgaXRlbURvY0lkOiBzdHJpbmcsXG4gIGVkZ2VUeXBlOiBzdHJpbmcgPSBFREdFUy5JU19QT1NURUQsXG4gIHByb3BzID0ge31cbik6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVBvc3RFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oZWRnZVR5cGUpO1xuICBpZiAoIXBvc3REb2NJZCB8fCAhaXRlbURvY0lkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG4gIGNvbnN0IGZvcm1hdFBvc3RJZCA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcbiAgY29uc3QgZm9ybWF0RG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1Eb2NJZCk7XG5cbiAgaWYgKCFmb3JtYXREb2NJZCB8fCAhZm9ybWF0UG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgcG9zdEVkZ2UtJHtmb3JtYXRQb3N0SWR9LSR7Zm9ybWF0RG9jSWR9YCk7XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgX2Zyb206IGZvcm1hdFBvc3RJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmb3JtYXREb2NJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICAuLi5wcm9wc1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJwYXJzZVZhckNoYXIiLCJhcWwiLCJsaXRlcmFsIiwicGFyc2VQb3N0IiwicGFyc2VQb3N0UHJvcHMiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiUHJpdmFjeUxldmVsIiwiUmVhY3Rpb25UeXBlIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiYnVpbGREaXN0YW5jZVF1ZXJ5IiwiYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeSIsImJ1aWxkTWF0Y2hlZFRhZ3NDb3VudFF1ZXJ5IiwiYnVpbGRSZWFjdGlvbnNRdWVyeSIsImJ1aWxkVGFnc1F1ZXJ5IiwiYnVpbGRVc2VySW5mb1F1ZXJ5IiwiZ2V0TGltaXQiLCJ1c2VEYiIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwiZXh0cmFjdFRhZ3MiLCJnZXRUYWdMaXN0QnlOYW1lIiwidXBkYXRlVGFnc0luSXRlbSIsIk1BWF9DT05URU5UX0xFTkdUSCIsImV2ZW50Q2F0ZWdvcnkiLCJyZXNvbHZlUGVyc29uYUlkRm9yUG9zdCIsImNvbnRleHQiLCJleHBsaWNpdFBlcnNvbmFJZCIsInNlc3Npb24iLCJ1c2VySWQiLCJzZXNzaW9uVXNlcklkIiwicHJvdmlkZWRQZXJzb25hSWQiLCJzZXNzaW9uVXNlcklkUGFyc2VkIiwidW5kZWZpbmVkIiwidXNlciIsIlVTRVJTIiwiX2tleSIsInBlcnNvbmFJZCIsImZpbHRlckJsb2NrZWRQb3N0cyIsInBvc3RzIiwidmlzaWJpbGl0eSIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwb3N0IiwiU3RyaW5nIiwiZmlsdGVyIiwiX3Bvc3QiLCJpbmRleCIsInBhcnNlUG9zdE9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic3RhcnREYXRlIiwidG8iLCJ0eXBlIiwibGltaXQiLCJFVkVOVF9QT1NUX1RZUEUiLCJQT1NUX1JFQUNUSU9OX0lURU1fVFlQRSIsIlBPU1RTIiwiT1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFIiwiZ2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlIiwicmVhY3Rpb25OYW1lIiwiUElOIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsIk9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTIiwiaGFzUnN2cCIsImFjdG9yRG9jSWQiLCJxdWVyeSIsIlJTVlAiLCJIQVNfUkVBQ1RJT04iLCJvYmplY3QiLCJpc1NhdmVkIiwicmVhY3Rpb25zIiwicnN2cENvdW50Iiwidmlld0NvdW50IiwiVklFVyIsImdldFBvc3RPcHRpb25hbEZpZWxkcyIsImZpZWxkcyIsInNlc3Npb25JZCIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImhhbmRsZXIiLCJQRVJTT05BUyIsInF1ZXJpZXMiLCJwdXNoIiwib2JqZWN0cyIsImJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5IiwicG9zdERvY0lkIiwiZ3JvdXBJZCIsInByaXZhY3kiLCJzZWxlY3RRdWVyaWVzIiwic2VsZWN0T2JqZWN0cyIsIkdST1VQIiwiam9pbiIsIkdST1VQUyIsIkhBU19DT05ORUNUSU9OIiwiUFVCTElDIiwiZ2V0UG9zdEJ5SWQiLCJwb3N0SWQiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJmb3JtYXRJdGVtSWQiLCJkYXRhYmFzZSIsImFxbFFyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiX2lkIiwiREVGQVVMVCIsInByaXZhY3lBcWxRcnkiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0UG9zdExpc3RCeUFyZWEiLCJmb3JtYXRMYXRpdHVkZSIsImZvcm1hdExvbmdpdHVkZSIsImxlbmd0aCIsImdldFBvc3RMaXN0QnlMYXRlc3QiLCJwYXJlbnRJZCIsInNvcnQiLCJkaXJlY3Rpb24iLCJzdGFydCIsIm51bSIsImN1c3RvbVF1ZXJpZXMiLCJjdXN0b21PYmplY3RzIiwiZ2V0UG9zdExpc3RCeVJlYWN0aW9uIiwiZm9ybWF0U2Vzc2lvbklkIiwiZm9ybWF0UmVhY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlYWN0aW9uIiwidG9Mb3dlckNhc2UiLCJzb3J0QnkiLCJmaWx0ZXJzIiwiZm9ybWF0U3RhcnREYXRlIiwiSVNfVEFHR0VEIiwiZ2V0UG9zdExpc3RCeVRhZ3MiLCJ0YWdOYW1lcyIsImZvcm1hdFRhZ05hbWVzIiwidGFnTmFtZSIsImdldFBvc3RMaXN0QnlVc2VyIiwiZm9ybWF0VXNlcklkIiwiZ2V0UG9zdExpc3RCeVBhcmVudCIsInByZXBhcmVQb3N0RGF0YSIsImlucHV0Iiwibm93IiwiYWRkZWQiLCJjb250ZW50IiwiZW5kRGF0ZSIsImxvY2F0aW9uIiwibWF4R3Vlc3RzUGVyUGVyc29uYSIsIm1vZGlmaWVkIiwibmFtZSIsInByb3BzIiwidGlja2V0Q29zdENlbnRzIiwiaGFuZGxlUG9zdFRhZ3MiLCJ0YWdzIiwiY29udGVudFRhZ05hbWVzIiwidXNlclRhZ3MiLCJ0YWciLCJ0YWdCeSIsImNvbnRlbnRUYWdzIiwiaXRlbURvY0lkIiwiYWRkUG9zdCIsInJlc29sdmVkUGVyc29uYUlkIiwiaW5zZXJ0IiwiRGF0ZSIsInNhdmVkUG9zdCIsInVwZGF0ZWRUYWdzIiwidXBkYXRlUG9zdCIsInBhcnNlZFBvc3QiLCJ2YWx1ZSIsIklOVkFMSURfSUQiLCJ1cGRhdGUiLCJ1cGRhdGVkUG9zdCIsIm93bmVyc2hpcCIsInVwZGF0ZWRQb3N0SWQiLCJkZWxldGVQb3N0IiwiZm9ybWF0UG9zdElkIiwiY3JlYXRlUG9zdEVkZ2UiLCJlZGdlVHlwZSIsIklTX1BPU1RFRCIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsImZvcm1hdERvY0lkIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwic2F2ZSIsInJldHVybk5ldyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUNFQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxRQUNuRSwrQkFBK0I7QUFDdEMsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBa0JDLE9BQU8sUUFBTyxlQUFlO0FB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
|