@nlabs/reaktor 1.4.1 → 1.5.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/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/apps.d.ts +1 -2
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/connections.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/content.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/conversations.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/actions/crm.d.ts +28 -0
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/crud.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/dynamodb.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/email.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/files.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/groups.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/images.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/index.d.ts +2 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/ios.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/locations.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/messages.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/notifications.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/payments.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/personas.d.ts +1 -2
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/posts.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/query.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/reactions.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/actions/rum.d.ts +3 -0
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/s3.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/search.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/sms.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/statistics.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/subscriptions.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/tags.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/users.d.ts +2 -3
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/videos.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/websockets.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/arangoAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/contentAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/fileAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/imageAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/index.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/messageAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/postAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/reaktorAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/tagAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/userAdapter.d.ts +0 -1
- package/lib/{config.d.ts → Users/nitrog7/Development/reaktor/src/config.d.ts} +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/constants/collections.d.ts +86 -0
- package/lib/{handlers → Users/nitrog7/Development/reaktor/src/handlers}/graphqlHandler.d.ts +0 -1
- package/lib/{index.d.ts → Users/nitrog7/Development/reaktor/src/index.d.ts} +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/actions/websockets.d.ts +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/authorizer.d.ts +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/connection.d.ts +4 -5
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/utils/message.d.ts +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/utils/websocket.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/conversation.d.ts +1 -2
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/file.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/group.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/image.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/post.d.ts +1 -2
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/tag.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/user.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/video.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/content/content.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/mutations/crm/crm.d.ts +1 -0
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/events/events.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/groups/groups.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/images/images.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/index.d.ts +3 -2
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/locations/locations.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/messages/messages.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/personas/personas.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/posts/posts.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/reactions/reactions.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/mutations/rum/rum.d.ts +1 -0
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/statistics/statistics.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/subscriptions/subscriptions.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/tags/tags.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/users/users.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/videos/videos.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/app.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/bankAccount.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/connection.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/content.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/conversation.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/creditCard.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/objectTypes/crm.d.ts +12 -0
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/document.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/error.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/event.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/external.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/file.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/filter.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/group.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/iapSubscription.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/image.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/index.d.ts +2 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/location.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/message.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/passcode.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/persona.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/plan.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/post.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/query.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/reaction.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/relation.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/objectTypes/rum.d.ts +3 -0
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/search.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/statistics.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/subscription.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/tag.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/user.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/video.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/content/content.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/queries/crm/crm.d.ts +1 -0
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/events/events.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/groups/groups.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/images/images.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/index.d.ts +2 -2
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/locations/locations.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/messages/messages.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/personas/personas.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/posts/posts.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/query/query.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/reactions/reactions.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/statistics/statistics.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/subscriptions/subscriptions.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/tags/tags.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/users/users.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/videos/videos.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/layout.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordForgot.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordRecovery.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/verifyEmail.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/welcome.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordForgot.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordRecovery.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyEmail.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyPhone.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/welcome.d.ts +2 -0
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/apps.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/arangodb.types.d.ts +1 -2
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/auth.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/connections.types.d.ts +2 -3
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/content.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/conversations.types.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/types/crm.types.d.ts +89 -0
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/email.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/error.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/files.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/google.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/groups.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/images.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/index.d.ts +2 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/locations.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/messages.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/notifications.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/payments.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/personas.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/posts.types.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/types/rum.types.d.ts +23 -0
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/statistics.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/tags.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/users.types.d.ts +20 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/videos.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/websockets.types.d.ts +0 -1
- package/lib/{upload.d.ts → Users/nitrog7/Development/reaktor/src/upload.d.ts} +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/adapterUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/analyticsUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/aqlHelpers.d.ts +4 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/arangodbUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/authUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/awsUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/collectionRegistry.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/contextUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/dbI18n.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/dbI18n.example.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/googleTranslate.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/graphqlUtils.d.ts +1 -2
- package/lib/Users/nitrog7/Development/reaktor/src/utils/imageUtils.d.ts +1 -0
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/index.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/languageDetection.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/localeUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/localeUtils.example.d.ts +1 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/middlewareUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/queryBuilder.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/schemaUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/sessionUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/stripeUtils.d.ts +1 -2
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/templateUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/testUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/translationQueue.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/translationQueue.example.d.ts +0 -1
- package/lib/{videoProcessing.d.ts → Users/nitrog7/Development/reaktor/src/videoProcessing.d.ts} +2 -3
- package/lib/actions/apps.js +2 -2
- package/lib/actions/content.js +1 -2
- package/lib/actions/crm.js +498 -0
- package/lib/actions/crud.js +1 -1
- package/lib/actions/groups.js +2 -2
- package/lib/actions/images.js +3 -10
- package/lib/actions/index.js +3 -1
- package/lib/actions/locations.js +1 -2
- package/lib/actions/posts.js +3 -3
- package/lib/actions/rum.js +66 -0
- package/lib/actions/search.js +30 -53
- package/lib/actions/users.js +124 -160
- package/lib/adapters/messageAdapter.js +7 -5
- package/lib/adapters/userAdapter.js +42 -2
- package/lib/constants/collections.js +17 -1
- package/lib/mocks/image.js +3 -3
- package/lib/mocks/video.js +3 -3
- package/lib/mutations/crm/crm.js +67 -0
- package/lib/mutations/index.js +12 -2
- package/lib/mutations/rum/rum.js +20 -0
- package/lib/objectTypes/crm.js +188 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/persona.js +3 -2
- package/lib/objectTypes/rum.js +33 -0
- package/lib/objectTypes/user.js +83 -2
- package/lib/queries/crm/crm.js +77 -0
- package/lib/queries/index.js +7 -2
- package/lib/queries/videos/videos.js +1 -1
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/crm.types.js +6 -0
- package/lib/types/index.js +3 -1
- package/lib/types/rum.types.js +6 -0
- package/lib/types/users.types.js +1 -1
- package/lib/utils/aqlHelpers.js +13 -2
- package/lib/utils/collectionRegistry.js +18 -1
- package/lib/utils/imageUtils.js +6 -0
- package/lib/utils/localeUtils.example.js +3 -4
- package/lib/utils/stripeUtils.js +2 -2
- package/package.json +53 -39
- package/lib/actions/apps.d.ts.map +0 -1
- package/lib/actions/connections.d.ts.map +0 -1
- package/lib/actions/content.d.ts.map +0 -1
- package/lib/actions/conversations.d.ts.map +0 -1
- package/lib/actions/crud.d.ts.map +0 -1
- package/lib/actions/dynamodb.d.ts.map +0 -1
- package/lib/actions/email.d.ts.map +0 -1
- package/lib/actions/files.d.ts.map +0 -1
- package/lib/actions/groups.d.ts.map +0 -1
- package/lib/actions/images.d.ts.map +0 -1
- package/lib/actions/index.d.ts.map +0 -1
- package/lib/actions/ios.d.ts.map +0 -1
- package/lib/actions/locations.d.ts.map +0 -1
- package/lib/actions/messages.d.ts.map +0 -1
- package/lib/actions/notifications.d.ts.map +0 -1
- package/lib/actions/payments.d.ts.map +0 -1
- package/lib/actions/personas.d.ts.map +0 -1
- package/lib/actions/posts.d.ts.map +0 -1
- package/lib/actions/query.d.ts.map +0 -1
- package/lib/actions/reactions.d.ts.map +0 -1
- package/lib/actions/s3.d.ts.map +0 -1
- package/lib/actions/search.d.ts.map +0 -1
- package/lib/actions/sms.d.ts.map +0 -1
- package/lib/actions/statistics.d.ts.map +0 -1
- package/lib/actions/subscriptions.d.ts.map +0 -1
- package/lib/actions/tags.d.ts.map +0 -1
- package/lib/actions/users.d.ts.map +0 -1
- package/lib/actions/videos.d.ts.map +0 -1
- package/lib/actions/websockets.d.ts.map +0 -1
- package/lib/adapters/arangoAdapter.d.ts.map +0 -1
- package/lib/adapters/contentAdapter.d.ts.map +0 -1
- package/lib/adapters/fileAdapter.d.ts.map +0 -1
- package/lib/adapters/imageAdapter.d.ts.map +0 -1
- package/lib/adapters/index.d.ts.map +0 -1
- package/lib/adapters/messageAdapter.d.ts.map +0 -1
- package/lib/adapters/postAdapter.d.ts.map +0 -1
- package/lib/adapters/reaktorAdapter.d.ts.map +0 -1
- package/lib/adapters/tagAdapter.d.ts.map +0 -1
- package/lib/adapters/userAdapter.d.ts.map +0 -1
- package/lib/config.d.ts.map +0 -1
- package/lib/constants/collections.d.ts +0 -71
- package/lib/constants/collections.d.ts.map +0 -1
- package/lib/handlers/graphqlHandler.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/lambdas/actions/websockets.d.ts.map +0 -1
- package/lib/lambdas/authorizer.d.ts.map +0 -1
- package/lib/lambdas/connection.d.ts.map +0 -1
- package/lib/lambdas/utils/message.d.ts.map +0 -1
- package/lib/lambdas/utils/websocket.d.ts.map +0 -1
- package/lib/mocks/conversation.d.ts.map +0 -1
- package/lib/mocks/file.d.ts.map +0 -1
- package/lib/mocks/group.d.ts.map +0 -1
- package/lib/mocks/image.d.ts.map +0 -1
- package/lib/mocks/post.d.ts.map +0 -1
- package/lib/mocks/tag.d.ts.map +0 -1
- package/lib/mocks/user.d.ts.map +0 -1
- package/lib/mocks/video.d.ts.map +0 -1
- package/lib/mutations/content/content.d.ts.map +0 -1
- package/lib/mutations/events/events.d.ts.map +0 -1
- package/lib/mutations/groups/groups.d.ts.map +0 -1
- package/lib/mutations/images/images.d.ts.map +0 -1
- package/lib/mutations/index.d.ts.map +0 -1
- package/lib/mutations/locations/locations.d.ts.map +0 -1
- package/lib/mutations/messages/messages.d.ts.map +0 -1
- package/lib/mutations/personas/personas.d.ts.map +0 -1
- package/lib/mutations/posts/posts.d.ts.map +0 -1
- package/lib/mutations/reactions/reactions.d.ts.map +0 -1
- package/lib/mutations/statistics/statistics.d.ts.map +0 -1
- package/lib/mutations/subscriptions/subscriptions.d.ts.map +0 -1
- package/lib/mutations/tags/tags.d.ts.map +0 -1
- package/lib/mutations/users/users.d.ts.map +0 -1
- package/lib/mutations/videos/videos.d.ts.map +0 -1
- package/lib/objectTypes/app.d.ts.map +0 -1
- package/lib/objectTypes/bankAccount.d.ts.map +0 -1
- package/lib/objectTypes/connection.d.ts.map +0 -1
- package/lib/objectTypes/content.d.ts.map +0 -1
- package/lib/objectTypes/conversation.d.ts.map +0 -1
- package/lib/objectTypes/creditCard.d.ts.map +0 -1
- package/lib/objectTypes/document.d.ts.map +0 -1
- package/lib/objectTypes/error.d.ts.map +0 -1
- package/lib/objectTypes/event.d.ts.map +0 -1
- package/lib/objectTypes/external.d.ts.map +0 -1
- package/lib/objectTypes/file.d.ts.map +0 -1
- package/lib/objectTypes/filter.d.ts.map +0 -1
- package/lib/objectTypes/group.d.ts.map +0 -1
- package/lib/objectTypes/iapSubscription.d.ts.map +0 -1
- package/lib/objectTypes/image.d.ts.map +0 -1
- package/lib/objectTypes/index.d.ts.map +0 -1
- package/lib/objectTypes/location.d.ts.map +0 -1
- package/lib/objectTypes/message.d.ts.map +0 -1
- package/lib/objectTypes/passcode.d.ts.map +0 -1
- package/lib/objectTypes/persona.d.ts.map +0 -1
- package/lib/objectTypes/plan.d.ts.map +0 -1
- package/lib/objectTypes/post.d.ts.map +0 -1
- package/lib/objectTypes/query.d.ts.map +0 -1
- package/lib/objectTypes/reaction.d.ts.map +0 -1
- package/lib/objectTypes/relation.d.ts.map +0 -1
- package/lib/objectTypes/search.d.ts.map +0 -1
- package/lib/objectTypes/statistics.d.ts.map +0 -1
- package/lib/objectTypes/subscription.d.ts.map +0 -1
- package/lib/objectTypes/tag.d.ts.map +0 -1
- package/lib/objectTypes/user.d.ts.map +0 -1
- package/lib/objectTypes/video.d.ts.map +0 -1
- package/lib/queries/content/content.d.ts.map +0 -1
- package/lib/queries/events/events.d.ts.map +0 -1
- package/lib/queries/groups/groups.d.ts.map +0 -1
- package/lib/queries/images/images.d.ts.map +0 -1
- package/lib/queries/index.d.ts.map +0 -1
- package/lib/queries/locations/locations.d.ts.map +0 -1
- package/lib/queries/messages/messages.d.ts.map +0 -1
- package/lib/queries/personas/personas.d.ts.map +0 -1
- package/lib/queries/posts/posts.d.ts.map +0 -1
- package/lib/queries/query/query.d.ts.map +0 -1
- package/lib/queries/reactions/reactions.d.ts.map +0 -1
- package/lib/queries/statistics/statistics.d.ts.map +0 -1
- package/lib/queries/subscriptions/subscriptions.d.ts.map +0 -1
- package/lib/queries/tags/tags.d.ts.map +0 -1
- package/lib/queries/users/users.d.ts.map +0 -1
- package/lib/queries/videos/videos.d.ts.map +0 -1
- package/lib/templates/email/layout.d.ts +0 -3
- package/lib/templates/email/layout.d.ts.map +0 -1
- package/lib/templates/email/passwordForgot.d.ts +0 -3
- package/lib/templates/email/passwordForgot.d.ts.map +0 -1
- package/lib/templates/email/passwordRecovery.d.ts +0 -3
- package/lib/templates/email/passwordRecovery.d.ts.map +0 -1
- package/lib/templates/email/verifyEmail.d.ts +0 -3
- package/lib/templates/email/verifyEmail.d.ts.map +0 -1
- package/lib/templates/email/welcome.d.ts +0 -3
- package/lib/templates/email/welcome.d.ts.map +0 -1
- package/lib/templates/sms/passwordForgot.d.ts +0 -3
- package/lib/templates/sms/passwordForgot.d.ts.map +0 -1
- package/lib/templates/sms/passwordRecovery.d.ts +0 -3
- package/lib/templates/sms/passwordRecovery.d.ts.map +0 -1
- package/lib/templates/sms/verifyEmail.d.ts +0 -3
- package/lib/templates/sms/verifyEmail.d.ts.map +0 -1
- package/lib/templates/sms/verifyPhone.d.ts +0 -3
- package/lib/templates/sms/verifyPhone.d.ts.map +0 -1
- package/lib/templates/sms/welcome.d.ts +0 -3
- package/lib/templates/sms/welcome.d.ts.map +0 -1
- package/lib/types/apps.types.d.ts.map +0 -1
- package/lib/types/arangodb.types.d.ts.map +0 -1
- package/lib/types/auth.types.d.ts.map +0 -1
- package/lib/types/connections.types.d.ts.map +0 -1
- package/lib/types/content.types.d.ts.map +0 -1
- package/lib/types/conversations.types.d.ts.map +0 -1
- package/lib/types/email.types.d.ts.map +0 -1
- package/lib/types/error.types.d.ts.map +0 -1
- package/lib/types/files.types.d.ts.map +0 -1
- package/lib/types/google.types.d.ts.map +0 -1
- package/lib/types/groups.types.d.ts.map +0 -1
- package/lib/types/images.types.d.ts.map +0 -1
- package/lib/types/index.d.ts.map +0 -1
- package/lib/types/locations.types.d.ts.map +0 -1
- package/lib/types/messages.types.d.ts.map +0 -1
- package/lib/types/notifications.types.d.ts.map +0 -1
- package/lib/types/payments.types.d.ts.map +0 -1
- package/lib/types/personas.types.d.ts.map +0 -1
- package/lib/types/posts.types.d.ts.map +0 -1
- package/lib/types/statistics.types.d.ts.map +0 -1
- package/lib/types/tags.types.d.ts.map +0 -1
- package/lib/types/users.types.d.ts.map +0 -1
- package/lib/types/videos.types.d.ts.map +0 -1
- package/lib/types/websockets.types.d.ts.map +0 -1
- package/lib/upload.d.ts.map +0 -1
- package/lib/utils/adapterUtils.d.ts.map +0 -1
- package/lib/utils/analyticsUtils.d.ts.map +0 -1
- package/lib/utils/aqlHelpers.d.ts.map +0 -1
- package/lib/utils/arangodbUtils.d.ts.map +0 -1
- package/lib/utils/authUtils.d.ts.map +0 -1
- package/lib/utils/awsUtils.d.ts.map +0 -1
- package/lib/utils/collectionRegistry.d.ts.map +0 -1
- package/lib/utils/contextUtils.d.ts.map +0 -1
- package/lib/utils/dbI18n.d.ts.map +0 -1
- package/lib/utils/dbI18n.example.d.ts.map +0 -1
- package/lib/utils/googleTranslate.d.ts.map +0 -1
- package/lib/utils/graphqlUtils.d.ts.map +0 -1
- package/lib/utils/index.d.ts.map +0 -1
- package/lib/utils/languageDetection.d.ts.map +0 -1
- package/lib/utils/localeUtils.d.ts.map +0 -1
- package/lib/utils/localeUtils.example.d.ts.map +0 -1
- package/lib/utils/middlewareUtils.d.ts.map +0 -1
- package/lib/utils/queryBuilder.d.ts.map +0 -1
- package/lib/utils/schemaUtils.d.ts.map +0 -1
- package/lib/utils/sessionUtils.d.ts.map +0 -1
- package/lib/utils/stripeUtils.d.ts.map +0 -1
- package/lib/utils/templateUtils.d.ts.map +0 -1
- package/lib/utils/testUtils.d.ts.map +0 -1
- package/lib/utils/translationQueue.d.ts.map +0 -1
- package/lib/utils/translationQueue.example.d.ts.map +0 -1
- package/lib/videoProcessing.d.ts.map +0 -1
package/lib/actions/posts.js
CHANGED
|
@@ -210,7 +210,7 @@ export const getPostListByLatest = (context, options)=>{
|
|
|
210
210
|
return getListBy(context, COLLECTIONS.POSTS, {
|
|
211
211
|
type,
|
|
212
212
|
privacy: PrivacyLevel.PUBLIC,
|
|
213
|
-
|
|
213
|
+
parentId: null
|
|
214
214
|
}, {
|
|
215
215
|
sort: [
|
|
216
216
|
{
|
|
@@ -347,7 +347,7 @@ export const getPostListByUser = (context, userId, options)=>{
|
|
|
347
347
|
userId: formatUserId,
|
|
348
348
|
type,
|
|
349
349
|
privacy: PrivacyLevel.PUBLIC,
|
|
350
|
-
|
|
350
|
+
parentId: null
|
|
351
351
|
}, {
|
|
352
352
|
sort: [
|
|
353
353
|
{
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7cGFyc2VQb3N0fSBmcm9tICcuLi9hZGFwdGVycy9wb3N0QWRhcHRlci5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFUywgUHJpdmFjeUxldmVsLCBSZWFjdGlvblR5cGV9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtcbiAgYnVpbGREaXN0YW5jZVF1ZXJ5LFxuICBidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5LFxuICBidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSxcbiAgYnVpbGRSZWFjdGlvbnNRdWVyeSxcbiAgYnVpbGRUYWdzUXVlcnksXG4gIGJ1aWxkVXNlckluZm9RdWVyeSxcbn0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2V4dHJhY3RUYWdzLCBnZXRUYWdMaXN0QnlOYW1lLCB1cGRhdGVUYWdzSW5JdGVtfSBmcm9tICcuL3RhZ3MuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtQcml2YWN5TGV2ZWxUeXBlLCBSZWFjdGlvblR5cGVUeXBlfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1Bvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcG9zdHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ1R5cGV9IGZyb20gJy4uL3R5cGVzL3RhZ3MudHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQ09OVEVOVF9MRU5HVEggPSAxMDAwMDA7XG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3Bvc3RzJztcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGV4cGxpY2l0UGVyc29uYUlkID0gJydcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHByb3ZpZGVkUGVyc29uYUlkID0gcGFyc2VJZChleHBsaWNpdFBlcnNvbmFJZCk7XG5cbiAgaWYocHJvdmlkZWRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gcHJvdmlkZWRQZXJzb25hSWQ7XG4gIH1cblxuICBjb25zdCBzZXNzaW9uVXNlcklkUGFyc2VkID0gcGFyc2VJZChzZXNzaW9uVXNlcklkIHx8ICcnKTtcbiAgaWYoIXNlc3Npb25Vc2VySWRQYXJzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldEl0ZW1CeTx7cGVyc29uYUlkPzogc3RyaW5nfT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHtfa2V5OiBzZXNzaW9uVXNlcklkUGFyc2VkfSk7XG4gIHJldHVybiBwYXJzZUlkKHVzZXI/LnBlcnNvbmFJZCB8fCAnJykgfHwgdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZFBvc3RzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0czogUG9zdFR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgdmlzaWJpbGl0eSA9IGF3YWl0IFByb21pc2UuYWxsKHBvc3RzLm1hcChhc3luYyAocG9zdCkgPT4ge1xuICAgIGNvbnN0IHBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBvc3Q/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gcG9zdHMuZmlsdGVyKChfcG9zdCwgaW5kZXgpID0+IHZpc2liaWxpdHlbaW5kZXhdKTtcbn07XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IHtQcml2YWN5TGV2ZWwsIFJlYWN0aW9uVHlwZX07XG5leHBvcnQgdHlwZSB7UHJpdmFjeUxldmVsVHlwZSwgUmVhY3Rpb25UeXBlVHlwZX07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVBvc3RPcHRpb25zID0gKG9wdGlvbnM6IFBvc3RPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIGxhdGl0dWRlID0gMCxcbiAgICBsb25naXR1ZGUgPSAwLFxuICAgIHN0YXJ0RGF0ZSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ3Bvc3QnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGF0aXR1ZGU6IHBhcnNlTnVtKGxhdGl0dWRlLCAzMiksXG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIGxvbmdpdHVkZTogcGFyc2VOdW0obG9uZ2l0dWRlLCAzMiksXG4gICAgc3RhcnREYXRlOiBwYXJzZU51bShzdGFydERhdGUsIDMyKSxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5jb25zdCBFVkVOVF9QT1NUX1RZUEUgPSAnZXZlbnQnO1xuY29uc3QgUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUgPSBDT0xMRUNUSU9OUy5QT1NUUztcbmNvbnN0IE9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSA9IGBwLnR5cGUgPT0gXCIke0VWRU5UX1BPU1RfVFlQRX1cIiA/IFwiJHtFVkVOVF9QT1NUX1RZUEV9XCIgOiBcIiR7UE9TVF9SRUFDVElPTl9JVEVNX1RZUEV9XCJgO1xuXG5jb25zdCBnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUgPSAocmVhY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gKFxuICByZWFjdGlvbk5hbWUgPT09IFJlYWN0aW9uVHlwZS5QSU5cbiAgICA/ICdpc1NhdmVkJ1xuICAgIDogYGhhcyR7cmVhY3Rpb25OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7cmVhY3Rpb25OYW1lLnNsaWNlKDEpfWBcbik7XG5cbi8vIE1hcCBvZiBvcHRpb25hbCBmaWVsZCBoYW5kbGVyc1xudHlwZSBGaWVsZEhhbmRsZXIgPSAoYWN0b3JEb2NJZDogc3RyaW5nKSA9PiB7cXVlcnk6IHN0cmluZzsgb2JqZWN0OiBzdHJpbmd9O1xuXG5jb25zdCBPUFRJT05BTF9GSUVMRF9IQU5ETEVSUzogUmVjb3JkPHN0cmluZywgRmllbGRIYW5kbGVyPiA9IHtcbiAgaGFzUnN2cDogKGFjdG9yRG9jSWQpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUoUmVhY3Rpb25UeXBlLlJTVlApfSA9IFRPX0JPT0woRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlJTVlB9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pICYmIHIuX2Zyb20gPT0gXCIke2FjdG9yRG9jSWR9XCJcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApKWAsXG4gICAgb2JqZWN0OiAnaGFzUnN2cDpoYXNSc3ZwJ1xuICB9KSxcbiAgaXNTYXZlZDogKGFjdG9yRG9jSWQpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUoUmVhY3Rpb25UeXBlLlBJTil9ID0gVE9fQk9PTChGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUElOfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KSAmJiByLl9mcm9tID09IFwiJHthY3RvckRvY0lkfVwiXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKSlgLFxuICAgIG9iamVjdDogJ2lzU2F2ZWQ6aXNTYXZlZCdcbiAgfSksXG4gIHJlYWN0aW9uczogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCByZWFjdGlvbnMgPSAoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KVxuICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICApYCxcbiAgICBvYmplY3Q6ICdyZWFjdGlvbnM6cmVhY3Rpb25zJ1xuICB9KSxcbiAgcnN2cENvdW50OiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7UmVhY3Rpb25UeXBlLlJTVlB9Q291bnQgPSBGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUlNWUH1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApYCxcbiAgICBvYmplY3Q6ICdyc3ZwQ291bnQ6cnN2cENvdW50J1xuICB9KSxcbiAgdmlld0NvdW50OiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7UmVhY3Rpb25UeXBlLlZJRVd9Q291bnQgPSBGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuVklFV31cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApYCxcbiAgICBvYmplY3Q6ICd2aWV3Q291bnQ6dmlld0NvdW50J1xuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RPcHRpb25hbEZpZWxkcyA9IChcbiAgZmllbGRzOiBzdHJpbmdbXSA9IFtdLFxuICBzZXNzaW9uSWQ6IHN0cmluZyA9ICcnLFxuICBwZXJzb25hSWQ6IHN0cmluZyA9ICcnXG4pID0+XG4gIChmaWVsZHMgfHwgW10pLnJlZHVjZSgoc2VsZWN0czoge29iamVjdHM6IHN0cmluZ1tdLCBxdWVyaWVzOiBzdHJpbmdbXX0sIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gT1BUSU9OQUxfRklFTERfSEFORExFUlNbZmllbGRdO1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBjb25zdCBhY3RvckRvY0lkID0gcGVyc29uYUlkXG4gICAgICAgID8gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7cGFyc2VJZChwZXJzb25hSWQpfWBcbiAgICAgICAgOiBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgICAgIGNvbnN0IHtxdWVyeSwgb2JqZWN0fSA9IGhhbmRsZXIoYWN0b3JEb2NJZCk7XG4gICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgICBzZWxlY3RzLm9iamVjdHMucHVzaChvYmplY3QpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0cztcbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGQgcHJpdmFjeSBmaWx0ZXIgcXVlcnlcbmNvbnN0IGJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5ID0gKFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgZ3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwcml2YWN5OiBzdHJpbmcsXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBzZWxlY3RRdWVyaWVzOiBzdHJpbmdbXSxcbiAgc2VsZWN0T2JqZWN0czogc3RyaW5nW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChncm91cElkICYmIHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5HUk9VUCkge1xuICAgIHJldHVybiBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgRk9SIGdyb3VwIElOICR7Q09MTEVDVElPTlMuR1JPVVBTfVxuICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgJHtFREdFUy5IQVNfQ09OTkVDVElPTn1cbiAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gIH0gZWxzZSBpZiAocHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLlBVQkxJQykge1xuICAgIHJldHVybiBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0QnlJZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCB7dHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgIEZJTFRFUiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9ICYmIHAudHlwZSA9PSAke3R5cGV9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuICAgIGNvbnN0IHtcbiAgICAgIF9pZDogcG9zdERvY0lkLFxuICAgICAgcGVyc29uYUlkLFxuICAgICAgdXNlcklkLFxuICAgICAgZ3JvdXBJZCxcbiAgICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuREVGQVVMVFxuICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgIGlmKHBlcnNvbmFJZCAmJiBhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwZXJzb25hSWQpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gVXNlciBvd25zIHRoZSBwb3N0LCByZXR1cm4gZGlyZWN0bHlcbiAgICBpZiAodXNlcklkID09PSBzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBwb3N0O1xuICAgIH1cblxuICAgIC8vIENoZWNrIHByaXZhY3kgYW5kIGJ1aWxkIGFwcHJvcHJpYXRlIHF1ZXJ5XG4gICAgY29uc3QgcHJpdmFjeUFxbFFyeSA9IGJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5KFxuICAgICAgcG9zdERvY0lkLFxuICAgICAgZ3JvdXBJZCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBzZWxlY3RRdWVyaWVzLFxuICAgICAgc2VsZWN0T2JqZWN0c1xuICAgICk7XG5cbiAgICBpZiAocHJpdmFjeUFxbFFyeSkge1xuICAgICAgcmV0dXJuIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5QXJlYSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGF0aXR1ZGU6IG51bWJlcixcbiAgbG9uZ2l0dWRlOiBudW1iZXIsXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5QXJlYSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGUgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCBJTiAke2xpdGVyYWwoQ09MTEVDVElPTlMuUE9TVFMpfVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAucHJpdmFjeSA9PSAke1ByaXZhY3lMZXZlbC5QVUJMSUN9ICYmIHAucGFyZW50SWQgPT0gbnVsbFxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBTT1JUIGRpc3RhbmNlLCBwLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5TGF0ZXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0TGlzdEJ5TGF0ZXN0JztcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt0eXBlLCBwcml2YWN5OiBQcml2YWN5TGV2ZWwuUFVCTElDLCBwYXJlbnQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zID0gSlNPTi5zdHJpbmdpZnkocmVhY3Rpb25zLm1hcCgocmVhY3Rpb24pID0+IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgYHAucHJpdmFjeSA9PSBcIiR7UHJpdmFjeUxldmVsLlBVQkxJQ31cImBdO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3QgZm9ybWF0U3RhcnREYXRlID0gcGFyc2VOdW0oc3RhcnREYXRlKTtcblxuICBpZiAoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYgKHJlYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkocmVhY3Rpb25zKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zOm1hdGNoZWRSZWFjdGlvbnMnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgPiAwJyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RhcnREYXRlKSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnN0YXJ0RGF0ZSA+PSAke2Zvcm1hdFN0YXJ0RGF0ZX1gKTtcbiAgICBzb3J0QnkucHVzaCgncC5zdGFydERhdGUgQVNDJyk7XG4gIH0gZWxzZSB7XG4gICAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICB9XG5cbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gJHtsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTil9XG4gICAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwICR7bGl0ZXJhbChFREdFUy5JU19UQUdHRUQpfVxuICAgICAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSkgPiAwICYmIFBPU0lUSU9OKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSwgcmVhY3Rpb24ubmFtZSlcbiAgICAgICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocmVhY3Rpb24sIHttYXRjaGVkfSlcbiAgICAgIClcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRUYWdOYW1lczogc3RyaW5nW10gPSB0YWdOYW1lcy5tYXAoKHRhZ05hbWUpID0+IHBhcnNlQ2hhcih0YWdOYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsIGBwLnByaXZhY3kgPT0gXCIke1ByaXZhY3lMZXZlbC5QVUJMSUN9XCJgXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdFN0YXJ0RGF0ZSA9IHBhcnNlTnVtKHN0YXJ0RGF0ZSk7XG5cbiAgaWYgKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIC8vIFVzZSBidWlsZFRhZ3NRdWVyeSBoZWxwZXIgd2l0aCBtYXRjaGVkIHRhZ3NcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkVGFnc1F1ZXJ5KCdwJywgZm9ybWF0VGFnTmFtZXMpKTtcblxuICBpZiAodGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnkoZm9ybWF0VGFnTmFtZXMpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIGlmIChmb3JtYXRTdGFydERhdGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAuc3RhcnREYXRlID49ICR7Zm9ybWF0U3RhcnREYXRlfWApO1xuICAgIHNvcnRCeS5wdXNoKCdwLnN0YXJ0RGF0ZSBBU0MnKTtcbiAgfSBlbHNlIHtcbiAgICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIH1cblxuICBzZWxlY3RPYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VXNlcic7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt1c2VySWQ6IGZvcm1hdFVzZXJJZCwgdHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50OiBudWxsfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdBU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UGFyZW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3RJZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlQYXJlbnQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQocG9zdElkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfa2V5LFxuICAgICAgICBncm91cElkLFxuICAgICAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLkRFRkFVTFRcbiAgICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgICAgbGV0IHByaXZhY3lBcWxRcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLkdST1VQKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCJcbiAgICAgICAgICAke2J1aWxkVXNlckluZm9RdWVyeSgncC51c2VySWQnKX1cbiAgICAgICAgICAke2J1aWxkUmVhY3Rpb25zUXVlcnkoJ3AnKX1cbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gJHtDT0xMRUNUSU9OUy5HUk9VUFN9XG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkICR7RURHRVMuSEFTX0NPTk5FQ1RJT059XG4gICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH0gZWxzZSBpZiAocHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLlBVQkxJQykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiXG4gICAgICAgICAgJHtidWlsZFVzZXJJbmZvUXVlcnkoJ3AudXNlcklkJyl9XG4gICAgICAgICAgJHtidWlsZFJlYWN0aW9uc1F1ZXJ5KCdwJyl9XG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgICAgICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJlcGFyZSBwb3N0IGRhdGEgZm9yIGluc2VydGlvblxuY29uc3QgcHJlcGFyZVBvc3REYXRhID0gKFxuICBpbnB1dDogUG9zdElucHV0VHlwZSxcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIHBlcnNvbmFJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgbm93OiBudW1iZXJcbik6IFBvc3RUeXBlID0+ICh7XG4gIF9pZDogYCR7Q09MTEVDVElPTlMuUE9TVFN9LyR7cG9zdElkfWAsXG4gIF9rZXk6IHBvc3RJZCxcbiAgYWRkZWQ6IG5vdyxcbiAgY29udGVudDogcGFyc2VTdHJpbmcoaW5wdXQuY29udGVudCB8fCAnJywgTUFYX0NPTlRFTlRfTEVOR1RIKSB8fCAnJyxcbiAgZW5kRGF0ZTogaW5wdXQuZW5kRGF0ZSA/IHBhcnNlTnVtKGlucHV0LmVuZERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgZ3JvdXBJZDogaW5wdXQuZ3JvdXBJZCA/IHBhcnNlSWQoaW5wdXQuZ3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gIGxhdGl0dWRlOiBpbnB1dC5sYXRpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubGF0aXR1ZGUpIDogdW5kZWZpbmVkLFxuICBsb2NhdGlvbjogaW5wdXQubG9jYXRpb24gPyBwYXJzZVN0cmluZyhpbnB1dC5sb2NhdGlvbiwgMTYwKSA6IHVuZGVmaW5lZCxcbiAgbG9uZ2l0dWRlOiBpbnB1dC5sb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LmxvbmdpdHVkZSkgOiB1bmRlZmluZWQsXG4gIG1heEd1ZXN0c1BlclBlcnNvbmE6IGlucHV0Lm1heEd1ZXN0c1BlclBlcnNvbmEgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0Lm1heEd1ZXN0c1BlclBlcnNvbmEsIDMpIDogdW5kZWZpbmVkLFxuICBtb2RpZmllZDogbm93LFxuICBuYW1lOiBwYXJzZVN0cmluZyhpbnB1dC5uYW1lIHx8ICcnLCAxNjApLFxuICBwYXJlbnRJZDogaW5wdXQucGFyZW50SWQgPyBwYXJzZUlkKGlucHV0LnBhcmVudElkKSA6IHVuZGVmaW5lZCxcbiAgcHJpdmFjeTogcGFyc2VWYXJDaGFyKGlucHV0LnByaXZhY3kgfHwgUHJpdmFjeUxldmVsLlBVQkxJQywgMTYpLFxuICBwZXJzb25hSWQsXG4gIHN0YXJ0RGF0ZTogaW5wdXQuc3RhcnREYXRlID8gcGFyc2VOdW0oaW5wdXQuc3RhcnREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gIHRpY2tldENvc3RDZW50czogaW5wdXQudGlja2V0Q29zdENlbnRzICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC50aWNrZXRDb3N0Q2VudHMsIDEyKSA6IHVuZGVmaW5lZCxcbiAgdHlwZTogcGFyc2VDaGFyKGlucHV0LnR5cGUgfHwgJ2RlZmF1bHQnLCAzMiksXG4gIHVzZXJJZDogc2Vzc2lvbklkXG59KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSB0YWdzIGZvciBwb3N0c1xuY29uc3QgaGFuZGxlUG9zdFRhZ3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHRhZ3M6IFRhZ1R5cGVbXSxcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbik6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGNvbnRlbnRUYWdOYW1lcyA9IGF3YWl0IGV4dHJhY3RUYWdzKGNvbnRlbnQgfHwgJycpO1xuXG4gIGlmICh0YWdzLmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgdXNlclRhZ3MgPSAoYXdhaXQgZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdzLm1hcCgoe25hbWV9KSA9PiBuYW1lIHx8ICcnKSkpXG4gICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogc2Vzc2lvbklkfSkpO1xuICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gKGF3YWl0IGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgY29udGVudFRhZ05hbWVzIHx8IFtdKSlcbiAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiAnZXh0cmFjdCd9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdXBkYXRlVGFnc0luSXRlbShcbiAgICAgIGNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIGl0ZW1Eb2NJZDogcG9zdERvY0lkLFxuICAgICAgICB0YWdzOiBbLi4uY29udGVudFRhZ3MsIC4uLnVzZXJUYWdzXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW107XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUG9zdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnRlbnQgPSAnJyxcbiAgICBlbmREYXRlLFxuICAgIGdyb3VwSWQgPSAnJyxcbiAgICBsb2NhdGlvbixcbiAgICBsYXRpdHVkZSxcbiAgICBsb25naXR1ZGUsXG4gICAgbmFtZSA9ICcnLFxuICAgIHBhcmVudElkID0gJycsXG4gICAgcHJpdmFjeSA9IFByaXZhY3lMZXZlbC5QVUJMSUMsXG4gICAgbWF4R3Vlc3RzUGVyUGVyc29uYSxcbiAgICBwZXJzb25hSWQgPSAnJyxcbiAgICB0YWdzID0gW10sXG4gICAgc3RhcnREYXRlLFxuICAgIHRpY2tldENvc3RDZW50cyxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH06IFBvc3RJbnB1dFR5cGVcbik6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFBvc3QnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBvc3RJZCA9IGNyZWF0ZUhhc2goYHBvc3QtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IHJlc29sdmVkUGVyc29uYUlkID0gYXdhaXQgcmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QoY29udGV4dCwgcGVyc29uYUlkKTtcblxuICBjb25zdCBpbnNlcnQ6IFBvc3RUeXBlID0gcHJlcGFyZVBvc3REYXRhKFxuICAgIHtjb250ZW50LCBlbmREYXRlLCBncm91cElkLCBsb2NhdGlvbiwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgbWF4R3Vlc3RzUGVyUGVyc29uYSwgbmFtZSwgcGFyZW50SWQsIHByaXZhY3ksIHBlcnNvbmFJZDogcmVzb2x2ZWRQZXJzb25hSWQsIHN0YXJ0RGF0ZSwgdGFncywgdGlja2V0Q29zdENlbnRzLCB0eXBlfSxcbiAgICBzZXNzaW9uSWQsXG4gICAgcmVzb2x2ZWRQZXJzb25hSWQsXG4gICAgcG9zdElkLFxuICAgIERhdGUubm93KClcbiAgKTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBDUlVEIGFkZEl0ZW0gZnVuY3Rpb25cbiAgICBjb25zdCBzYXZlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgYWRkSXRlbTxQb3N0VHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuUE9TVFMsIGluc2VydCk7XG5cbiAgICBjb25zdCB7X2lkOiBwb3N0RG9jSWR9ID0gc2F2ZWRQb3N0O1xuICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gYXdhaXQgaGFuZGxlUG9zdFRhZ3MoY29udGV4dCwgcG9zdERvY0lkLCBpbnNlcnQuY29udGVudCB8fCAnJywgdGFncywgc2Vzc2lvbklkKTtcblxuICAgIGlmICh1cGRhdGVkVGFncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNhdmVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdmVkUG9zdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0OiBQb3N0SW5wdXRUeXBlKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlUG9zdCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcGFyc2VkUG9zdCA9IHBhcnNlUG9zdChwb3N0KTtcbiAgY29uc3Qge1xuICAgIHBvc3RJZCxcbiAgICB0YWdzID0gW11cbiAgfSA9IHBhcnNlZFBvc3Q7XG5cbiAgaWYgKCFwb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCB1cGRhdGU6IFBvc3RUeXBlID0ge1xuICAgIC4uLnBhcnNlZFBvc3RcbiAgfTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBDUlVEIHVwZGF0ZUl0ZW0gd2l0aCBvd25lcnNoaXAgY2hlY2tcbiAgICBjb25zdCB1cGRhdGVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCB1cGRhdGVJdGVtPFBvc3RUeXBlPihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICAgIHBvc3RJZCxcbiAgICAgIHVwZGF0ZSxcbiAgICAgIHtvd25lcnNoaXA6IHRydWV9XG4gICAgKTtcblxuICAgIGNvbnN0IHtfaWQ6IHVwZGF0ZWRQb3N0SWR9ID0gdXBkYXRlZFBvc3Q7XG4gICAgY29uc3QgdXBkYXRlZFRhZ3MgPSBhd2FpdCBoYW5kbGVQb3N0VGFncyhjb250ZXh0LCB1cGRhdGVkUG9zdElkLCB1cGRhdGUuY29udGVudCB8fCAnJywgdGFncywgc2Vzc2lvbklkKTtcblxuICAgIGlmICh1cGRhdGVkVGFncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZFBvc3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdERvY0lkOiBzdHJpbmcpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVQb3N0JztcbiAgaWYgKCFwb3N0RG9jSWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbiAgY29uc3QgZm9ybWF0UG9zdElkID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuXG4gIGlmICghZm9ybWF0UG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZGVsZXRlSXRlbTxQb3N0VHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuUE9TVFMsIGZvcm1hdFBvc3RJZCwge1xuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSkgfHwge19pZDogZm9ybWF0UG9zdElkfSBhcyBQb3N0VHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEVkZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgZWRnZVR5cGU6IHN0cmluZyA9IEVER0VTLklTX1BPU1RFRCxcbiAgcHJvcHMgPSB7fVxuKTogUHJvbWlzZTxGaWxlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlUG9zdEVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihlZGdlVHlwZSk7XG4gIGlmICghcG9zdERvY0lkIHx8ICFpdGVtRG9jSWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbiAgY29uc3QgZm9ybWF0UG9zdElkID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuICBjb25zdCBmb3JtYXREb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbURvY0lkKTtcblxuICBpZiAoIWZvcm1hdERvY0lkIHx8ICFmb3JtYXRQb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBwb3N0RWRnZS0ke2Zvcm1hdFBvc3RJZH0tJHtmb3JtYXREb2NJZH1gKTtcbiAgY29uc3QgZWRnZSA9IHtcbiAgICBfZnJvbTogZm9ybWF0UG9zdElkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdERvY0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIC4uLnByb3BzXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsImFxbCIsImxpdGVyYWwiLCJwYXJzZVBvc3QiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiUHJpdmFjeUxldmVsIiwiUmVhY3Rpb25UeXBlIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiYnVpbGREaXN0YW5jZVF1ZXJ5IiwiYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeSIsImJ1aWxkTWF0Y2hlZFRhZ3NDb3VudFF1ZXJ5IiwiYnVpbGRSZWFjdGlvbnNRdWVyeSIsImJ1aWxkVGFnc1F1ZXJ5IiwiYnVpbGRVc2VySW5mb1F1ZXJ5IiwiZ2V0TGltaXQiLCJ1c2VEYiIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwiZXh0cmFjdFRhZ3MiLCJnZXRUYWdMaXN0QnlOYW1lIiwidXBkYXRlVGFnc0luSXRlbSIsIk1BWF9DT05URU5UX0xFTkdUSCIsImV2ZW50Q2F0ZWdvcnkiLCJyZXNvbHZlUGVyc29uYUlkRm9yUG9zdCIsImNvbnRleHQiLCJleHBsaWNpdFBlcnNvbmFJZCIsInNlc3Npb24iLCJ1c2VySWQiLCJzZXNzaW9uVXNlcklkIiwicHJvdmlkZWRQZXJzb25hSWQiLCJzZXNzaW9uVXNlcklkUGFyc2VkIiwidW5kZWZpbmVkIiwidXNlciIsIlVTRVJTIiwiX2tleSIsInBlcnNvbmFJZCIsImZpbHRlckJsb2NrZWRQb3N0cyIsInBvc3RzIiwidmlzaWJpbGl0eSIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwb3N0IiwiU3RyaW5nIiwiZmlsdGVyIiwiX3Bvc3QiLCJpbmRleCIsInBhcnNlUG9zdE9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic3RhcnREYXRlIiwidG8iLCJ0eXBlIiwibGltaXQiLCJFVkVOVF9QT1NUX1RZUEUiLCJQT1NUX1JFQUNUSU9OX0lURU1fVFlQRSIsIlBPU1RTIiwiT1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFIiwiZ2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlIiwicmVhY3Rpb25OYW1lIiwiUElOIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsIk9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTIiwiaGFzUnN2cCIsImFjdG9yRG9jSWQiLCJxdWVyeSIsIlJTVlAiLCJIQVNfUkVBQ1RJT04iLCJvYmplY3QiLCJpc1NhdmVkIiwicmVhY3Rpb25zIiwicnN2cENvdW50Iiwidmlld0NvdW50IiwiVklFVyIsImdldFBvc3RPcHRpb25hbEZpZWxkcyIsImZpZWxkcyIsInNlc3Npb25JZCIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImhhbmRsZXIiLCJQRVJTT05BUyIsInF1ZXJpZXMiLCJwdXNoIiwib2JqZWN0cyIsImJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5IiwicG9zdERvY0lkIiwiZ3JvdXBJZCIsInByaXZhY3kiLCJzZWxlY3RRdWVyaWVzIiwic2VsZWN0T2JqZWN0cyIsIkdST1VQIiwiam9pbiIsIkdST1VQUyIsIkhBU19DT05ORUNUSU9OIiwiUFVCTElDIiwiZ2V0UG9zdEJ5SWQiLCJwb3N0SWQiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJmb3JtYXRJdGVtSWQiLCJkYXRhYmFzZSIsImFxbFFyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiX2lkIiwiREVGQVVMVCIsInByaXZhY3lBcWxRcnkiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0UG9zdExpc3RCeUFyZWEiLCJmb3JtYXRMYXRpdHVkZSIsImZvcm1hdExvbmdpdHVkZSIsImxlbmd0aCIsImdldFBvc3RMaXN0QnlMYXRlc3QiLCJwYXJlbnQiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImdldFBvc3RMaXN0QnlSZWFjdGlvbiIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWFjdGlvbiIsInRvTG93ZXJDYXNlIiwic29ydEJ5IiwiZmlsdGVycyIsImZvcm1hdFN0YXJ0RGF0ZSIsIklTX1RBR0dFRCIsImdldFBvc3RMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJmb3JtYXRUYWdOYW1lcyIsInRhZ05hbWUiLCJnZXRQb3N0TGlzdEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFBvc3RMaXN0QnlQYXJlbnQiLCJwcmVwYXJlUG9zdERhdGEiLCJpbnB1dCIsIm5vdyIsImFkZGVkIiwiY29udGVudCIsImVuZERhdGUiLCJsb2NhdGlvbiIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJtb2RpZmllZCIsIm5hbWUiLCJwYXJlbnRJZCIsInRpY2tldENvc3RDZW50cyIsImhhbmRsZVBvc3RUYWdzIiwidGFncyIsImNvbnRlbnRUYWdOYW1lcyIsInVzZXJUYWdzIiwidGFnIiwidGFnQnkiLCJjb250ZW50VGFncyIsIml0ZW1Eb2NJZCIsImFkZFBvc3QiLCJyZXNvbHZlZFBlcnNvbmFJZCIsImluc2VydCIsIkRhdGUiLCJzYXZlZFBvc3QiLCJ1cGRhdGVkVGFncyIsInVwZGF0ZVBvc3QiLCJwYXJzZWRQb3N0IiwidmFsdWUiLCJJTlZBTElEX0lEIiwidXBkYXRlIiwidXBkYXRlZFBvc3QiLCJvd25lcnNoaXAiLCJ1cGRhdGVkUG9zdElkIiwiZGVsZXRlUG9zdCIsImZvcm1hdFBvc3RJZCIsImNyZWF0ZVBvc3RFZGdlIiwiZWRnZVR5cGUiLCJJU19QT1NURUQiLCJwcm9wcyIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsImZvcm1hdERvY0lkIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwic2F2ZSIsInJldHVybk5ldyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUNFQyxVQUFV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
|
|
616
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7cGFyc2VQb3N0fSBmcm9tICcuLi9hZGFwdGVycy9wb3N0QWRhcHRlci5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFUywgUHJpdmFjeUxldmVsLCBSZWFjdGlvblR5cGV9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtcbiAgYnVpbGREaXN0YW5jZVF1ZXJ5LFxuICBidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5LFxuICBidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSxcbiAgYnVpbGRSZWFjdGlvbnNRdWVyeSxcbiAgYnVpbGRUYWdzUXVlcnksXG4gIGJ1aWxkVXNlckluZm9RdWVyeSxcbn0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2V4dHJhY3RUYWdzLCBnZXRUYWdMaXN0QnlOYW1lLCB1cGRhdGVUYWdzSW5JdGVtfSBmcm9tICcuL3RhZ3MuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtQcml2YWN5TGV2ZWxUeXBlLCBSZWFjdGlvblR5cGVUeXBlfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1Bvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcG9zdHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ1R5cGV9IGZyb20gJy4uL3R5cGVzL3RhZ3MudHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQ09OVEVOVF9MRU5HVEggPSAxMDAwMDA7XG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3Bvc3RzJztcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGV4cGxpY2l0UGVyc29uYUlkID0gJydcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHByb3ZpZGVkUGVyc29uYUlkID0gcGFyc2VJZChleHBsaWNpdFBlcnNvbmFJZCk7XG5cbiAgaWYocHJvdmlkZWRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gcHJvdmlkZWRQZXJzb25hSWQ7XG4gIH1cblxuICBjb25zdCBzZXNzaW9uVXNlcklkUGFyc2VkID0gcGFyc2VJZChzZXNzaW9uVXNlcklkIHx8ICcnKTtcbiAgaWYoIXNlc3Npb25Vc2VySWRQYXJzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldEl0ZW1CeTx7cGVyc29uYUlkPzogc3RyaW5nfT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHtfa2V5OiBzZXNzaW9uVXNlcklkUGFyc2VkfSk7XG4gIHJldHVybiBwYXJzZUlkKHVzZXI/LnBlcnNvbmFJZCB8fCAnJykgfHwgdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZFBvc3RzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0czogUG9zdFR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgdmlzaWJpbGl0eSA9IGF3YWl0IFByb21pc2UuYWxsKHBvc3RzLm1hcChhc3luYyAocG9zdCkgPT4ge1xuICAgIGNvbnN0IHBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBvc3Q/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gcG9zdHMuZmlsdGVyKChfcG9zdCwgaW5kZXgpID0+IHZpc2liaWxpdHlbaW5kZXhdKTtcbn07XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IHtQcml2YWN5TGV2ZWwsIFJlYWN0aW9uVHlwZX07XG5leHBvcnQgdHlwZSB7UHJpdmFjeUxldmVsVHlwZSwgUmVhY3Rpb25UeXBlVHlwZX07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVBvc3RPcHRpb25zID0gKG9wdGlvbnM6IFBvc3RPcHRpb25zID0ge30pID0+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/IHBhcnNlTnVtKGlucHV0LmxhdGl0dWRlKSA6IHVuZGVmaW5lZCxcbiAgbG9jYXRpb246IGlucHV0LmxvY2F0aW9uID8gcGFyc2VTdHJpbmcoaW5wdXQubG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gIGxvbmdpdHVkZTogaW5wdXQubG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5sb25naXR1ZGUpIDogdW5kZWZpbmVkLFxuICBtYXhHdWVzdHNQZXJQZXJzb25hOiBpbnB1dC5tYXhHdWVzdHNQZXJQZXJzb25hICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5tYXhHdWVzdHNQZXJQZXJzb25hLCAzKSA6IHVuZGVmaW5lZCxcbiAgbW9kaWZpZWQ6IG5vdyxcbiAgbmFtZTogcGFyc2VTdHJpbmcoaW5wdXQubmFtZSB8fCAnJywgMTYwKSxcbiAgcGFyZW50SWQ6IGlucHV0LnBhcmVudElkID8gcGFyc2VJZChpbnB1dC5wYXJlbnRJZCkgOiB1bmRlZmluZWQsXG4gIHByaXZhY3k6IHBhcnNlVmFyQ2hhcihpbnB1dC5wcml2YWN5IHx8IFByaXZhY3lMZXZlbC5QVUJMSUMsIDE2KSxcbiAgcGVyc29uYUlkLFxuICBzdGFydERhdGU6IGlucHV0LnN0YXJ0RGF0ZSA/IHBhcnNlTnVtKGlucHV0LnN0YXJ0RGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICB0aWNrZXRDb3N0Q2VudHM6IGlucHV0LnRpY2tldENvc3RDZW50cyAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQudGlja2V0Q29zdENlbnRzLCAxMikgOiB1bmRlZmluZWQsXG4gIHR5cGU6IHBhcnNlQ2hhcihpbnB1dC50eXBlIHx8ICdkZWZhdWx0JywgMzIpLFxuICB1c2VySWQ6IHNlc3Npb25JZFxufSk7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgdGFncyBmb3IgcG9zdHNcbmNvbnN0IGhhbmRsZVBvc3RUYWdzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICB0YWdzOiBUYWdUeXBlW10sXG4gIHNlc3Npb25JZDogc3RyaW5nXG4pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBjb250ZW50VGFnTmFtZXMgPSBhd2FpdCBleHRyYWN0VGFncyhjb250ZW50IHx8ICcnKTtcblxuICBpZiAodGFncy5sZW5ndGggfHwgY29udGVudFRhZ05hbWVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHVzZXJUYWdzID0gKGF3YWl0IGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgdGFncy5tYXAoKHtuYW1lfSkgPT4gbmFtZSB8fCAnJykpKVxuICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6IHNlc3Npb25JZH0pKTtcbiAgICBjb25zdCBjb250ZW50VGFncyA9IChhd2FpdCBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIGNvbnRlbnRUYWdOYW1lcyB8fCBbXSkpXG4gICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogJ2V4dHJhY3QnfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHVwZGF0ZVRhZ3NJbkl0ZW0oXG4gICAgICBjb250ZXh0LFxuICAgICAge1xuICAgICAgICBpdGVtRG9jSWQ6IHBvc3REb2NJZCxcbiAgICAgICAgdGFnczogWy4uLmNvbnRlbnRUYWdzLCAuLi51c2VyVGFnc11cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb250ZW50ID0gJycsXG4gICAgZW5kRGF0ZSxcbiAgICBncm91cElkID0gJycsXG4gICAgbG9jYXRpb24sXG4gICAgbGF0aXR1ZGUsXG4gICAgbG9uZ2l0dWRlLFxuICAgIG5hbWUgPSAnJyxcbiAgICBwYXJlbnRJZCA9ICcnLFxuICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuUFVCTElDLFxuICAgIG1heEd1ZXN0c1BlclBlcnNvbmEsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0aWNrZXRDb3N0Q2VudHMsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9OiBQb3N0SW5wdXRUeXBlXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwb3N0SWQgPSBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCByZXNvbHZlZFBlcnNvbmFJZCA9IGF3YWl0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0KGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgY29uc3QgaW5zZXJ0OiBQb3N0VHlwZSA9IHByZXBhcmVQb3N0RGF0YShcbiAgICB7Y29udGVudCwgZW5kRGF0ZSwgZ3JvdXBJZCwgbG9jYXRpb24sIGxhdGl0dWRlLCBsb25naXR1ZGUsIG1heEd1ZXN0c1BlclBlcnNvbmEsIG5hbWUsIHBhcmVudElkLCBwcml2YWN5LCBwZXJzb25hSWQ6IHJlc29sdmVkUGVyc29uYUlkLCBzdGFydERhdGUsIHRhZ3MsIHRpY2tldENvc3RDZW50cywgdHlwZX0sXG4gICAgc2Vzc2lvbklkLFxuICAgIHJlc29sdmVkUGVyc29uYUlkLFxuICAgIHBvc3RJZCxcbiAgICBEYXRlLm5vdygpXG4gICk7XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgQ1JVRCBhZGRJdGVtIGZ1bmN0aW9uXG4gICAgY29uc3Qgc2F2ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGFkZEl0ZW08UG9zdFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlBPU1RTLCBpbnNlcnQpO1xuXG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcbiAgICBjb25zdCB1cGRhdGVkVGFncyA9IGF3YWl0IGhhbmRsZVBvc3RUYWdzKGNvbnRleHQsIHBvc3REb2NJZCwgaW5zZXJ0LmNvbnRlbnQgfHwgJycsIHRhZ3MsIHNlc3Npb25JZCk7XG5cbiAgICBpZiAodXBkYXRlZFRhZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zYXZlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzYXZlZFBvc3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdDogUG9zdElucHV0VHlwZSk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVBvc3QnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZFBvc3QgPSBwYXJzZVBvc3QocG9zdCk7XG4gIGNvbnN0IHtcbiAgICBwb3N0SWQsXG4gICAgdGFncyA9IFtdXG4gIH0gPSBwYXJzZWRQb3N0O1xuXG4gIGlmICghcG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlOiBQb3N0VHlwZSA9IHtcbiAgICAuLi5wYXJzZWRQb3N0XG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgQ1JVRCB1cGRhdGVJdGVtIHdpdGggb3duZXJzaGlwIGNoZWNrXG4gICAgY29uc3QgdXBkYXRlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgdXBkYXRlSXRlbTxQb3N0VHlwZT4oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUE9TVFMsXG4gICAgICBwb3N0SWQsXG4gICAgICB1cGRhdGUsXG4gICAgICB7b3duZXJzaGlwOiB0cnVlfVxuICAgICk7XG5cbiAgICBjb25zdCB7X2lkOiB1cGRhdGVkUG9zdElkfSA9IHVwZGF0ZWRQb3N0O1xuICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gYXdhaXQgaGFuZGxlUG9zdFRhZ3MoY29udGV4dCwgdXBkYXRlZFBvc3RJZCwgdXBkYXRlLmNvbnRlbnQgfHwgJycsIHRhZ3MsIHNlc3Npb25JZCk7XG5cbiAgICBpZiAodXBkYXRlZFRhZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRQb3N0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlUG9zdCc7XG4gIGlmICghcG9zdERvY0lkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG4gIGNvbnN0IGZvcm1hdFBvc3RJZCA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcblxuICBpZiAoIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGRlbGV0ZUl0ZW08UG9zdFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlBPU1RTLCBmb3JtYXRQb3N0SWQsIHtcbiAgICAgIG93bmVyc2hpcDogdHJ1ZVxuICAgIH0pIHx8IHtfaWQ6IGZvcm1hdFBvc3RJZH0gYXMgUG9zdFR5cGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvc3RFZGdlID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgaXRlbURvY0lkOiBzdHJpbmcsXG4gIGVkZ2VUeXBlOiBzdHJpbmcgPSBFREdFUy5JU19QT1NURUQsXG4gIHByb3BzID0ge31cbik6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVBvc3RFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oZWRnZVR5cGUpO1xuICBpZiAoIXBvc3REb2NJZCB8fCAhaXRlbURvY0lkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG4gIGNvbnN0IGZvcm1hdFBvc3RJZCA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcbiAgY29uc3QgZm9ybWF0RG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1Eb2NJZCk7XG5cbiAgaWYgKCFmb3JtYXREb2NJZCB8fCAhZm9ybWF0UG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgcG9zdEVkZ2UtJHtmb3JtYXRQb3N0SWR9LSR7Zm9ybWF0RG9jSWR9YCk7XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgX2Zyb206IGZvcm1hdFBvc3RJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmb3JtYXREb2NJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICAuLi5wcm9wc1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJwYXJzZVZhckNoYXIiLCJhcWwiLCJsaXRlcmFsIiwicGFyc2VQb3N0IiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIlByaXZhY3lMZXZlbCIsIlJlYWN0aW9uVHlwZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRGlzdGFuY2VRdWVyeSIsImJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkiLCJidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSIsImJ1aWxkUmVhY3Rpb25zUXVlcnkiLCJidWlsZFRhZ3NRdWVyeSIsImJ1aWxkVXNlckluZm9RdWVyeSIsImdldExpbWl0IiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImV4dHJhY3RUYWdzIiwiZ2V0VGFnTGlzdEJ5TmFtZSIsInVwZGF0ZVRhZ3NJbkl0ZW0iLCJNQVhfQ09OVEVOVF9MRU5HVEgiLCJldmVudENhdGVnb3J5IiwicmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QiLCJjb250ZXh0IiwiZXhwbGljaXRQZXJzb25hSWQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvblVzZXJJZCIsInByb3ZpZGVkUGVyc29uYUlkIiwic2Vzc2lvblVzZXJJZFBhcnNlZCIsInVuZGVmaW5lZCIsInVzZXIiLCJVU0VSUyIsIl9rZXkiLCJwZXJzb25hSWQiLCJmaWx0ZXJCbG9ja2VkUG9zdHMiLCJwb3N0cyIsInZpc2liaWxpdHkiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicG9zdCIsIlN0cmluZyIsImZpbHRlciIsIl9wb3N0IiwiaW5kZXgiLCJwYXJzZVBvc3RPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInN0YXJ0RGF0ZSIsInRvIiwidHlwZSIsImxpbWl0IiwiRVZFTlRfUE9TVF9UWVBFIiwiUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUiLCJQT1NUUyIsIk9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSIsImdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSIsInJlYWN0aW9uTmFtZSIsIlBJTiIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJPUFRJT05BTF9GSUVMRF9IQU5ETEVSUyIsImhhc1JzdnAiLCJhY3RvckRvY0lkIiwicXVlcnkiLCJSU1ZQIiwiSEFTX1JFQUNUSU9OIiwib2JqZWN0IiwiaXNTYXZlZCIsInJlYWN0aW9ucyIsInJzdnBDb3VudCIsInZpZXdDb3VudCIsIlZJRVciLCJnZXRQb3N0T3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZXNzaW9uSWQiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJoYW5kbGVyIiwiUEVSU09OQVMiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSIsInBvc3REb2NJZCIsImdyb3VwSWQiLCJwcml2YWN5Iiwic2VsZWN0UXVlcmllcyIsInNlbGVjdE9iamVjdHMiLCJHUk9VUCIsImpvaW4iLCJHUk9VUFMiLCJIQVNfQ09OTkVDVElPTiIsIlBVQkxJQyIsImdldFBvc3RCeUlkIiwicG9zdElkIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZGF0YWJhc2UiLCJhcWxRcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsIl9pZCIsIkRFRkFVTFQiLCJwcml2YWN5QXFsUXJ5IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldFBvc3RMaXN0QnlBcmVhIiwiZm9ybWF0TGF0aXR1ZGUiLCJmb3JtYXRMb25naXR1ZGUiLCJsZW5ndGgiLCJnZXRQb3N0TGlzdEJ5TGF0ZXN0IiwicGFyZW50SWQiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImdldFBvc3RMaXN0QnlSZWFjdGlvbiIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWFjdGlvbiIsInRvTG93ZXJDYXNlIiwic29ydEJ5IiwiZmlsdGVycyIsImZvcm1hdFN0YXJ0RGF0ZSIsIklTX1RBR0dFRCIsImdldFBvc3RMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJmb3JtYXRUYWdOYW1lcyIsInRhZ05hbWUiLCJnZXRQb3N0TGlzdEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFBvc3RMaXN0QnlQYXJlbnQiLCJwcmVwYXJlUG9zdERhdGEiLCJpbnB1dCIsIm5vdyIsImFkZGVkIiwiY29udGVudCIsImVuZERhdGUiLCJsb2NhdGlvbiIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJtb2RpZmllZCIsIm5hbWUiLCJ0aWNrZXRDb3N0Q2VudHMiLCJoYW5kbGVQb3N0VGFncyIsInRhZ3MiLCJjb250ZW50VGFnTmFtZXMiLCJ1c2VyVGFncyIsInRhZyIsInRhZ0J5IiwiY29udGVudFRhZ3MiLCJpdGVtRG9jSWQiLCJhZGRQb3N0IiwicmVzb2x2ZWRQZXJzb25hSWQiLCJpbnNlcnQiLCJEYXRlIiwic2F2ZWRQb3N0IiwidXBkYXRlZFRhZ3MiLCJ1cGRhdGVQb3N0IiwicGFyc2VkUG9zdCIsInZhbHVlIiwiSU5WQUxJRF9JRCIsInVwZGF0ZSIsInVwZGF0ZWRQb3N0Iiwib3duZXJzaGlwIiwidXBkYXRlZFBvc3RJZCIsImRlbGV0ZVBvc3QiLCJmb3JtYXRQb3N0SWQiLCJjcmVhdGVQb3N0RWRnZSIsImVkZ2VUeXBlIiwiSVNfUE9TVEVEIiwicHJvcHMiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJmb3JtYXREb2NJZCIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsInNhdmUiLCJyZXR1cm5OZXciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FDRUMsVUFBVSxFQUFF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
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { aql } from 'arangojs';
|
|
5
|
+
import { literal } from 'arangojs/aql';
|
|
6
|
+
import { COLLECTIONS } from '../constants/collections.js';
|
|
7
|
+
import { UserError } from '../utils/analyticsUtils.js';
|
|
8
|
+
import { useDb } from '../utils/arangodbUtils.js';
|
|
9
|
+
const MAX_BATCH_SIZE = 50;
|
|
10
|
+
const MAX_PROPERTIES = 20;
|
|
11
|
+
const normalizeText = (value, maxLength)=>String(value || '').trim().slice(0, maxLength);
|
|
12
|
+
const sanitizeProperties = (properties = {})=>Object.entries(properties).slice(0, MAX_PROPERTIES).reduce((result, [key, value])=>{
|
|
13
|
+
const propertyKey = normalizeText(key, 64);
|
|
14
|
+
if (propertyKey && [
|
|
15
|
+
'boolean',
|
|
16
|
+
'number',
|
|
17
|
+
'string'
|
|
18
|
+
].includes(typeof value)) {
|
|
19
|
+
result[propertyKey] = typeof value === 'string' ? normalizeText(value, 256) : value;
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}, {});
|
|
23
|
+
const sanitizeEvent = (event)=>{
|
|
24
|
+
const eventId = normalizeText(event.eventId, 128);
|
|
25
|
+
const journeyId = normalizeText(event.journeyId, 128);
|
|
26
|
+
const name = normalizeText(event.name, 128);
|
|
27
|
+
const path = normalizeText(event.path, 256).split('?')[0].split('#')[0];
|
|
28
|
+
const type = normalizeText(event.type, 64);
|
|
29
|
+
if (!eventId || !journeyId || !name || !type) {
|
|
30
|
+
throw new UserError('invalid_rum_event');
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
eventId,
|
|
34
|
+
journeyId,
|
|
35
|
+
name,
|
|
36
|
+
...path ? {
|
|
37
|
+
path
|
|
38
|
+
} : {},
|
|
39
|
+
properties: sanitizeProperties(event.properties),
|
|
40
|
+
sequence: Math.max(1, Math.floor(Number(event.sequence) || 1)),
|
|
41
|
+
timestamp: Math.max(0, Number(event.timestamp) || Date.now()),
|
|
42
|
+
type
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export const trackRum = async (context, batch)=>{
|
|
46
|
+
const appId = normalizeText(batch?.appId, 128);
|
|
47
|
+
const inputEvents = Array.isArray(batch?.events) ? batch.events : [];
|
|
48
|
+
if (!appId || inputEvents.length === 0 || inputEvents.length > MAX_BATCH_SIZE) {
|
|
49
|
+
throw new UserError('invalid_rum_batch');
|
|
50
|
+
}
|
|
51
|
+
const events = inputEvents.map(sanitizeEvent);
|
|
52
|
+
const now = Date.now();
|
|
53
|
+
await useDb(context.databaseName).query(aql`
|
|
54
|
+
FOR event IN ${events}
|
|
55
|
+
UPSERT {appId: ${appId}, eventId: event.eventId}
|
|
56
|
+
INSERT MERGE(event, {added: ${now}, appId: ${appId}, modified: ${now}})
|
|
57
|
+
UPDATE {modified: ${now}}
|
|
58
|
+
IN ${literal(COLLECTIONS.RUM_LOGS)}
|
|
59
|
+
`);
|
|
60
|
+
return {
|
|
61
|
+
accepted: events.length,
|
|
62
|
+
appId
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcnVtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI2LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7UnVtQmF0Y2hJbnB1dFR5cGUsIFJ1bUV2ZW50SW5wdXRUeXBlLCBSdW1Qcm9wZXJ0eSwgUnVtVHJhY2tSZXN1bHRUeXBlfSBmcm9tICcuLi90eXBlcy9ydW0udHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQkFUQ0hfU0laRSA9IDUwO1xuY29uc3QgTUFYX1BST1BFUlRJRVMgPSAyMDtcblxuY29uc3Qgbm9ybWFsaXplVGV4dCA9ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCkuc2xpY2UoMCwgbWF4TGVuZ3RoKTtcblxuY29uc3Qgc2FuaXRpemVQcm9wZXJ0aWVzID0gKFxuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBSdW1Qcm9wZXJ0eT4gPSB7fVxuKTogUmVjb3JkPHN0cmluZywgUnVtUHJvcGVydHk+ID0+IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpXG4gIC5zbGljZSgwLCBNQVhfUFJPUEVSVElFUylcbiAgLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBSdW1Qcm9wZXJ0eT4+KChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5S2V5ID0gbm9ybWFsaXplVGV4dChrZXksIDY0KTtcblxuICAgIGlmKHByb3BlcnR5S2V5ICYmIFsnYm9vbGVhbicsICdudW1iZXInLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkge1xuICAgICAgcmVzdWx0W3Byb3BlcnR5S2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBub3JtYWxpemVUZXh0KHZhbHVlLCAyNTYpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuXG5jb25zdCBzYW5pdGl6ZUV2ZW50ID0gKGV2ZW50OiBSdW1FdmVudElucHV0VHlwZSk6IFJ1bUV2ZW50SW5wdXRUeXBlID0+IHtcbiAgY29uc3QgZXZlbnRJZCA9IG5vcm1hbGl6ZVRleHQoZXZlbnQuZXZlbnRJZCwgMTI4KTtcbiAgY29uc3Qgam91cm5leUlkID0gbm9ybWFsaXplVGV4dChldmVudC5qb3VybmV5SWQsIDEyOCk7XG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVUZXh0KGV2ZW50Lm5hbWUsIDEyOCk7XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVUZXh0KGV2ZW50LnBhdGgsIDI1Nikuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xuICBjb25zdCB0eXBlID0gbm9ybWFsaXplVGV4dChldmVudC50eXBlLCA2NCk7XG5cbiAgaWYoIWV2ZW50SWQgfHwgIWpvdXJuZXlJZCB8fCAhbmFtZSB8fCAhdHlwZSkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfcnVtX2V2ZW50Jyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV2ZW50SWQsXG4gICAgam91cm5leUlkLFxuICAgIG5hbWUsXG4gICAgLi4uKHBhdGggPyB7cGF0aH0gOiB7fSksXG4gICAgcHJvcGVydGllczogc2FuaXRpemVQcm9wZXJ0aWVzKGV2ZW50LnByb3BlcnRpZXMpLFxuICAgIHNlcXVlbmNlOiBNYXRoLm1heCgxLCBNYXRoLmZsb29yKE51bWJlcihldmVudC5zZXF1ZW5jZSkgfHwgMSkpLFxuICAgIHRpbWVzdGFtcDogTWF0aC5tYXgoMCwgTnVtYmVyKGV2ZW50LnRpbWVzdGFtcCkgfHwgRGF0ZS5ub3coKSksXG4gICAgdHlwZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYWNrUnVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBiYXRjaDogUnVtQmF0Y2hJbnB1dFR5cGVcbik6IFByb21pc2U8UnVtVHJhY2tSZXN1bHRUeXBlPiA9PiB7XG4gIGNvbnN0IGFwcElkID0gbm9ybWFsaXplVGV4dChiYXRjaD8uYXBwSWQsIDEyOCk7XG4gIGNvbnN0IGlucHV0RXZlbnRzID0gQXJyYXkuaXNBcnJheShiYXRjaD8uZXZlbnRzKSA/IGJhdGNoLmV2ZW50cyA6IFtdO1xuXG4gIGlmKCFhcHBJZCB8fCBpbnB1dEV2ZW50cy5sZW5ndGggPT09IDAgfHwgaW5wdXRFdmVudHMubGVuZ3RoID4gTUFYX0JBVENIX1NJWkUpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3J1bV9iYXRjaCcpO1xuICB9XG5cbiAgY29uc3QgZXZlbnRzID0gaW5wdXRFdmVudHMubWFwKHNhbml0aXplRXZlbnQpO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgRk9SIGV2ZW50IElOICR7ZXZlbnRzfVxuICAgICAgVVBTRVJUIHthcHBJZDogJHthcHBJZH0sIGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWR9XG4gICAgICBJTlNFUlQgTUVSR0UoZXZlbnQsIHthZGRlZDogJHtub3d9LCBhcHBJZDogJHthcHBJZH0sIG1vZGlmaWVkOiAke25vd319KVxuICAgICAgVVBEQVRFIHttb2RpZmllZDogJHtub3d9fVxuICAgICAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlJVTV9MT0dTKX1cbiAgYCk7XG5cbiAgcmV0dXJuIHthY2NlcHRlZDogZXZlbnRzLmxlbmd0aCwgYXBwSWR9O1xufTtcbiJdLCJuYW1lcyI6WyJhcWwiLCJsaXRlcmFsIiwiQ09MTEVDVElPTlMiLCJVc2VyRXJyb3IiLCJ1c2VEYiIsIk1BWF9CQVRDSF9TSVpFIiwiTUFYX1BST1BFUlRJRVMiLCJub3JtYWxpemVUZXh0IiwidmFsdWUiLCJtYXhMZW5ndGgiLCJTdHJpbmciLCJ0cmltIiwic2xpY2UiLCJzYW5pdGl6ZVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInByb3BlcnR5S2V5IiwiaW5jbHVkZXMiLCJzYW5pdGl6ZUV2ZW50IiwiZXZlbnQiLCJldmVudElkIiwiam91cm5leUlkIiwibmFtZSIsInBhdGgiLCJzcGxpdCIsInR5cGUiLCJzZXF1ZW5jZSIsIk1hdGgiLCJtYXgiLCJmbG9vciIsIk51bWJlciIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJ0cmFja1J1bSIsImNvbnRleHQiLCJiYXRjaCIsImFwcElkIiwiaW5wdXRFdmVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJldmVudHMiLCJsZW5ndGgiLCJtYXAiLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsIlJVTV9MT0dTIiwiYWNjZXB0ZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBRXJDLFNBQVFDLFdBQVcsUUFBTyw4QkFBOEI7QUFDeEQsU0FBUUMsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFR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
|
package/lib/actions/search.js
CHANGED
|
@@ -7,7 +7,6 @@ import { aql } from 'arangojs';
|
|
|
7
7
|
import { ErrorTypes } from '../types/error.types.js';
|
|
8
8
|
import { logException } from '../utils/analyticsUtils.js';
|
|
9
9
|
import { useDb } from '../utils/arangodbUtils.js';
|
|
10
|
-
import { getListBy } from './crud.js';
|
|
11
10
|
import { executeSearch } from './query.js';
|
|
12
11
|
import { getUserDisplayName } from './users.js';
|
|
13
12
|
const eventCategory = 'search';
|
|
@@ -23,59 +22,37 @@ const eventCategory = 'search';
|
|
|
23
22
|
export const getSearchList = async (context, query, from, to)=>{
|
|
24
23
|
const action = 'getList';
|
|
25
24
|
const { databaseName } = context;
|
|
26
|
-
const isString = true;
|
|
27
25
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
field: 'name'
|
|
49
|
-
}
|
|
50
|
-
];
|
|
51
|
-
const results = await Promise.all(fields.map((obj)=>{
|
|
52
|
-
const qry = `prefix:${query}`;
|
|
53
|
-
const userQry = aql`FOR u IN FULLTEXT(${obj.collection}, ${obj.field}, ${qry}, 50) RETURN u`;
|
|
54
|
-
return useDb(databaseName).query(userQry).then((cursor)=>cursor.all());
|
|
55
|
-
}));
|
|
56
|
-
const list = uniqBy(flatten(results), '_key');
|
|
57
|
-
return list.map((item)=>{
|
|
58
|
-
const { _id: itemId, name: itemName } = item || {};
|
|
59
|
-
const collectionIdList = itemId?.split('/') || [];
|
|
60
|
-
const collection = collectionIdList[0] || '';
|
|
61
|
-
const name = collection === 'users' ? getUserDisplayName(item) : itemName || '';
|
|
62
|
-
return {
|
|
63
|
-
...item,
|
|
64
|
-
name
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
// Phone search using getListBy
|
|
69
|
-
const users = await getListBy(context, 'users', {
|
|
70
|
-
phone: query
|
|
71
|
-
}, {
|
|
72
|
-
limit: {
|
|
73
|
-
from,
|
|
74
|
-
to
|
|
26
|
+
const fields = [
|
|
27
|
+
{
|
|
28
|
+
collection: 'users',
|
|
29
|
+
field: 'firstName'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
collection: 'users',
|
|
33
|
+
field: 'lastName'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
collection: 'users',
|
|
37
|
+
field: 'email'
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
collection: 'users',
|
|
41
|
+
field: 'username'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
collection: 'users',
|
|
45
|
+
field: 'name'
|
|
75
46
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
47
|
+
];
|
|
48
|
+
const results = await Promise.all(fields.map((obj)=>{
|
|
49
|
+
const qry = `prefix:${query}`;
|
|
50
|
+
const userQry = aql`FOR u IN FULLTEXT(${obj.collection}, ${obj.field}, ${qry}, 50) RETURN u`;
|
|
51
|
+
return useDb(databaseName).query(userQry).then((cursor)=>cursor.all());
|
|
52
|
+
}));
|
|
53
|
+
const list = uniqBy(flatten(results), (item)=>item?._key);
|
|
54
|
+
return list.map((item)=>{
|
|
55
|
+
const { _id: itemId, name: itemName } = item || {};
|
|
79
56
|
const collectionIdList = itemId?.split('/') || [];
|
|
80
57
|
const collection = collectionIdList[0] || '';
|
|
81
58
|
const name = collection === 'users' ? getUserDisplayName(item) : itemName || '';
|
|
@@ -94,4 +71,4 @@ export const getSearchList = async (context, query, from, to)=>{
|
|
|
94
71
|
}
|
|
95
72
|
};
|
|
96
73
|
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvc2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2ZsYXR0ZW59IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvZmxhdHRlbic7XG5pbXBvcnQge3VuaXFCeX0gZnJvbSAnQG5sYWJzL3V0aWxzL2FycmF5cy91bmlxJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtleGVjdXRlU2VhcmNofSBmcm9tICcuL3F1ZXJ5LmpzJztcbmltcG9ydCB7Z2V0VXNlckRpc3BsYXlOYW1lfSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge1NlYXJjaE9wdGlvbnN9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3NlYXJjaCc7XG5cbi8qKlxuICogRW5oYW5jZWQgc2VhcmNoIGZ1bmN0aW9uIHVzaW5nIHRoZSBuZXcgcXVlcnkgYnVpbGRlclxuICogUHJvdmlkZXMgbW9yZSBmbGV4aWJsZSBzZWFyY2ggY2FwYWJpbGl0aWVzXG4gKiBAcGFyYW0gY29udGV4dCAtIEFQSSBjb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNlYXJjaCBvcHRpb25zXG4gKiBAcmV0dXJucyBTZWFyY2ggcmVzdWx0c1xuICovXG5leHBvcnQgY29uc3Qgc2VhcmNoRmxleGlibGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnNcbik6IFByb21pc2U8YW55W10+ID0+IHtcbiAgcmV0dXJuIGV4ZWN1dGVTZWFyY2goY29udGV4dCwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoTGlzdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBxdWVyeTogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWVsZHM6IHtjb2xsZWN0aW9uOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmd9W10gPSBbXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdmaXJzdE5hbWUnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ2xhc3ROYW1lJ30sXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdlbWFpbCd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAndXNlcm5hbWUnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ25hbWUnfVxuICAgIF07XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZmllbGRzLm1hcCgob2JqKSA9PiB7XG4gICAgICBjb25zdCBxcnkgPSBgcHJlZml4OiR7cXVlcnl9YDtcbiAgICAgIGNvbnN0IHVzZXJRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1IElOIEZVTExURVhUKCR7b2JqLmNvbGxlY3Rpb259LCAke29iai5maWVsZH0sICR7cXJ5fSwgNTApIFJFVFVSTiB1YDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHVzZXJRcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICB9KSk7XG5cbiAgICBjb25zdCBsaXN0ID0gdW5pcUJ5KGZsYXR0ZW4ocmVzdWx0cyksIChpdGVtOiBhbnkpID0+IGl0ZW0/Ll9rZXkpO1xuXG4gICAgcmV0dXJuIGxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHtfaWQ6IGl0ZW1JZCwgbmFtZTogaXRlbU5hbWV9ID0gaXRlbSB8fCB7fTtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25JZExpc3Q6IHN0cmluZ1tdID0gaXRlbUlkPy5zcGxpdCgnLycpIHx8IFtdO1xuICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25JZExpc3RbMF0gfHwgJyc7XG4gICAgICBjb25zdCBuYW1lID0gY29sbGVjdGlvbiA9PT0gJ3VzZXJzJyA/IGdldFVzZXJEaXNwbGF5TmFtZShpdGVtKSA6IGl0ZW1OYW1lIHx8ICcnO1xuXG4gICAgICByZXR1cm4gey4uLml0ZW0sIG5hbWV9O1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICB2YWx1ZTogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiZmxhdHRlbiIsInVuaXFCeSIsImFxbCIsIkVycm9yVHlwZXMiLCJsb2dFeGNlcHRpb24iLCJ1c2VEYiIsImV4ZWN1dGVTZWFyY2giLCJnZXRVc2VyRGlzcGxheU5hbWUiLCJldmVudENhdGVnb3J5Iiwic2VhcmNoRmxleGlibGUiLCJjb250ZXh0Iiwib3B0aW9ucyIsImdldFNlYXJjaExpc3QiLCJxdWVyeSIsImZyb20iLCJ0byIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImZpZWxkcyIsImNvbGxlY3Rpb24iLCJmaWVsZCIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwib2JqIiwicXJ5IiwidXNlclFyeSIsInRoZW4iLCJjdXJzb3IiLCJsaXN0IiwiaXRlbSIsIl9rZXkiLCJfaWQiLCJpdGVtSWQiLCJuYW1lIiwiaXRlbU5hbWUiLCJjb2xsZWN0aW9uSWRMaXN0Iiwic3BsaXQiLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsInZhbHVlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsT0FBTyxRQUFPLDhCQUE4QjtBQUNwRCxTQUFRQyxNQUFNLFFBQU8sMkJBQTJCO0FBQ2hELFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBRTdCLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsWUFBWSxRQUFPLDZCQUE2QjtBQUN4RCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLGFBQWEsUUFBTyxhQUFhO0FBQ3pDLFNBQVFDLGtCQUFrQixRQUFPLGFBQWE7QUFPOUMsTUFBTUMsZ0JBQWdCO0FBRXRCOzs7Ozs7Q0FNQyxHQUNELE9BQU8sTUFBTUMsaUJBQWlCLE9BQzVCQyxTQUNBQztJQUVBLE9BQU9MLGNBQWNJLFNBQVNDO0FBQ2hDLEVBQUU7QUFFRixPQUFPLE1BQU1DLGdCQUFnQixPQUFPRixTQUFxQkcsT0FBZUMsTUFBY0M7SUFDcEYsTUFBTUMsU0FBUztJQUNmLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUdQO0lBRXZCLElBQUk7UUFDRixNQUFNUSxTQUFnRDtZQUNwRDtnQkFBQ0MsWUFBWTtnQkFBU0MsT0FBTztZQUFXO1lBQ3hDO2dCQUFDRCxZQUFZO2dCQUFTQyxPQUFPO1lBQVU7WUFDdkM7Z0JBQUNELFlBQVk7Z0JBQVNDLE9BQU87WUFBTztZQUNwQztnQkFBQ0QsWUFBWTtnQkFBU0MsT0FBTztZQUFVO1lBQ3ZDO2dCQUFDRCxZQUFZO2dCQUFTQyxPQUFPO1lBQU07U0FDcEM7UUFFRCxNQUFNQyxVQUFVLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ0wsT0FBT00sR0FBRyxDQUFDLENBQUNDO1lBQzVDLE1BQU1DLE1BQU0sQ0FBQyxPQUFPLEVBQUViLE9BQU87WUFDN0IsTUFBTWMsVUFBb0J6QixHQUFHLENBQUMsa0JBQWtCLEVBQUV1QixJQUFJTixVQUFVLENBQUMsRUFBRSxFQUFFTSxJQUFJTCxLQUFLLENBQUMsRUFBRSxFQUFFTSxJQUFJLGNBQWMsQ0FBQztZQUN0RyxPQUFPckIsTUFBTVksY0FBY0osS0FBSyxDQUFDYyxTQUFTQyxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT04sR0FBRztRQUN2RTtRQUVBLE1BQU1PLE9BQU83QixPQUFPRCxRQUFRcUIsVUFBVSxDQUFDVSxPQUFjQSxNQUFNQztRQUUzRCxPQUFPRixLQUFLTixHQUFHLENBQUMsQ0FBQ087WUFDZixNQUFNLEVBQUNFLEtBQUtDLE1BQU0sRUFBRUMsTUFBTUMsUUFBUSxFQUFDLEdBQUdMLFFBQVEsQ0FBQztZQUMvQyxNQUFNTSxtQkFBNkJILFFBQVFJLE1BQU0sUUFBUSxFQUFFO1lBQzNELE1BQU1uQixhQUFha0IsZ0JBQWdCLENBQUMsRUFBRSxJQUFJO1lBQzFDLE1BQU1GLE9BQU9oQixlQUFlLFVBQVVaLG1CQUFtQndCLFFBQVFLLFlBQVk7WUFFN0UsT0FBTztnQkFBQyxHQUFHTCxJQUFJO2dCQUFFSTtZQUFJO1FBQ3ZCO0lBQ0YsRUFBRSxPQUFNSSxPQUFPO1FBQ2IsTUFBTW5DLGFBQWE7WUFDakJZO1lBQ0F3QixVQUFVaEM7WUFDVmlDLE9BQU90QyxXQUFXdUMsY0FBYztZQUNoQ0MsT0FBTyxBQUFDSixNQUFnQkssT0FBTztRQUNqQyxHQUFHbEM7SUFDTDtBQUNGLEVBQUUifQ==
|