@nlabs/reaktor 1.8.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -1
- package/docs/GENERATION.md +63 -0
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.d.ts +2 -2
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/contentGeneration.d.ts +40 -0
- package/lib/actions/contentGeneration.js +206 -0
- package/lib/actions/conversations.js +1 -1
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.d.ts +2 -2
- package/lib/actions/crud.js +1 -1
- package/lib/actions/dynamodb.js +1 -1
- package/lib/actions/email.js +1 -1
- package/lib/actions/files.d.ts +42 -4
- package/lib/actions/files.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/geminiVideo.d.ts +19 -0
- package/lib/actions/geminiVideo.js +161 -0
- package/lib/actions/groups.js +1 -1
- package/lib/actions/higgsfield.d.ts +20 -0
- package/lib/actions/higgsfield.js +148 -0
- package/lib/actions/imageGeneration.d.ts +37 -0
- package/lib/actions/imageGeneration.js +121 -0
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.d.ts +5 -0
- package/lib/actions/index.js +6 -1
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +1 -1
- package/lib/actions/messages.js +1 -1
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/payments.js +27 -26
- package/lib/actions/personas.d.ts +4 -4
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.js +1 -1
- package/lib/actions/query.js +1 -1
- package/lib/actions/reactions.d.ts +6 -6
- package/lib/actions/reactions.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.d.ts +4 -4
- package/lib/actions/s3.js +22 -6
- package/lib/actions/search.js +1 -1
- package/lib/actions/sms.js +1 -1
- package/lib/actions/statistics.js +1 -1
- package/lib/actions/subscriptions.js +1 -1
- package/lib/actions/tags.d.ts +2 -2
- package/lib/actions/tags.js +1 -1
- package/lib/actions/users.d.ts +2 -2
- package/lib/actions/users.js +1 -1
- package/lib/actions/videoGeneration.d.ts +20 -0
- package/lib/actions/videoGeneration.js +32 -0
- package/lib/actions/videos.js +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +1 -1
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/geminiGenerationAdapter.d.ts +34 -0
- package/lib/adapters/geminiGenerationAdapter.js +41 -0
- package/lib/adapters/higgsfieldAdapter.d.ts +120 -0
- package/lib/adapters/higgsfieldAdapter.js +131 -0
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/imageGenerationAdapter.d.ts +17 -0
- package/lib/adapters/imageGenerationAdapter.js +18 -0
- package/lib/adapters/index.d.ts +3 -0
- package/lib/adapters/index.js +4 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.js +1 -1
- package/lib/adapters/userAdapter.d.ts +76 -1
- package/lib/adapters/userAdapter.js +1 -1
- package/lib/config.d.ts +19 -14
- package/lib/config.js +9 -1
- package/lib/constants/collections.js +1 -1
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/lambdas/actions/websockets.d.ts +5 -0
- package/lib/lambdas/actions/websockets.js +16 -1
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.d.ts +2 -2
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.d.ts +4 -4
- package/lib/lambdas/utils/websocket.js +1 -1
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.js +1 -1
- package/lib/mutations/content/content.js +15 -1
- package/lib/mutations/crm/crm.js +1 -1
- package/lib/mutations/events/events.js +1 -1
- package/lib/mutations/flags/flags.js +1 -1
- package/lib/mutations/groups/groups.js +1 -1
- package/lib/mutations/higgsfield/higgsfield.d.ts +1 -0
- package/lib/mutations/higgsfield/higgsfield.js +62 -0
- package/lib/mutations/images/images.js +10 -1
- package/lib/mutations/index.d.ts +2 -1
- package/lib/mutations/index.js +11 -2
- package/lib/mutations/locations/locations.js +1 -1
- package/lib/mutations/messages/messages.js +1 -1
- package/lib/mutations/personas/personas.js +1 -1
- package/lib/mutations/posts/posts.js +1 -1
- package/lib/mutations/reactions/reactions.js +1 -1
- package/lib/mutations/rum/rum.js +1 -1
- package/lib/mutations/statistics/statistics.js +1 -1
- package/lib/mutations/subscriptions/subscriptions.js +1 -1
- package/lib/mutations/tags/tags.js +1 -1
- package/lib/mutations/users/users.js +1 -1
- package/lib/mutations/videos/videos.js +24 -10
- package/lib/objectTypes/analytics.js +1 -1
- package/lib/objectTypes/app.js +1 -1
- package/lib/objectTypes/bankAccount.js +1 -1
- package/lib/objectTypes/connection.js +1 -1
- package/lib/objectTypes/content.js +1 -1
- package/lib/objectTypes/contentGeneration.d.ts +2 -0
- package/lib/objectTypes/contentGeneration.js +30 -0
- package/lib/objectTypes/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +1 -1
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +1 -1
- package/lib/objectTypes/event.js +1 -1
- package/lib/objectTypes/external.js +1 -1
- package/lib/objectTypes/file.js +1 -1
- package/lib/objectTypes/filter.js +1 -1
- package/lib/objectTypes/flag.js +1 -1
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/higgsfield.d.ts +5 -0
- package/lib/objectTypes/higgsfield.js +149 -0
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/imageGeneration.d.ts +2 -0
- package/lib/objectTypes/imageGeneration.js +33 -0
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/location.js +1 -1
- package/lib/objectTypes/message.js +1 -1
- package/lib/objectTypes/passcode.js +1 -1
- package/lib/objectTypes/persona.d.ts +37 -2
- package/lib/objectTypes/persona.js +1 -1
- package/lib/objectTypes/plan.js +1 -1
- package/lib/objectTypes/post.js +1 -1
- package/lib/objectTypes/query.js +1 -1
- package/lib/objectTypes/reaction.js +1 -1
- package/lib/objectTypes/relation.js +1 -1
- package/lib/objectTypes/rum.js +1 -1
- package/lib/objectTypes/search.js +1 -1
- package/lib/objectTypes/statistics.js +1 -1
- package/lib/objectTypes/subscription.js +1 -1
- package/lib/objectTypes/tag.js +1 -1
- package/lib/objectTypes/user.js +1 -1
- package/lib/objectTypes/video.js +1 -1
- package/lib/objectTypes/videoGeneration.d.ts +2 -0
- package/lib/objectTypes/videoGeneration.js +31 -0
- package/lib/queries/analytics/analytics.js +1 -1
- package/lib/queries/content/content.js +1 -1
- package/lib/queries/crm/crm.js +1 -1
- package/lib/queries/events/events.js +1 -1
- package/lib/queries/flags/flags.js +1 -1
- package/lib/queries/groups/groups.js +1 -1
- package/lib/queries/higgsfield/higgsfield.d.ts +1 -0
- package/lib/queries/higgsfield/higgsfield.js +22 -0
- package/lib/queries/images/images.js +1 -1
- package/lib/queries/index.d.ts +2 -1
- package/lib/queries/index.js +7 -2
- package/lib/queries/locations/locations.js +1 -1
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +1 -1
- package/lib/queries/posts/posts.js +1 -1
- package/lib/queries/query/query.js +1 -1
- package/lib/queries/reactions/reactions.js +1 -1
- package/lib/queries/statistics/statistics.js +1 -1
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +1 -1
- package/lib/queries/users/users.js +1 -1
- package/lib/queries/videos/videos.js +1 -1
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.d.ts +16 -16
- package/lib/types/analytics.types.js +1 -1
- package/lib/types/apps.types.d.ts +4 -4
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.d.ts +20 -20
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.d.ts +2 -2
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.d.ts +6 -6
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.d.ts +2 -2
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.d.ts +30 -30
- package/lib/types/crm.types.js +1 -1
- package/lib/types/email.types.d.ts +2 -2
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.d.ts +1 -0
- package/lib/types/error.types.js +2 -1
- package/lib/types/files.types.d.ts +2 -2
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.d.ts +8 -8
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.d.ts +2 -2
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.d.ts +2 -2
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.d.ts +2 -2
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.d.ts +2 -2
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.d.ts +14 -14
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.d.ts +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +2 -2
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.d.ts +6 -6
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +4 -4
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.d.ts +2 -2
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.d.ts +2 -2
- package/lib/types/videos.types.js +1 -1
- package/lib/types/websockets.types.d.ts +4 -4
- package/lib/types/websockets.types.js +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/adapterUtils.js +1 -1
- package/lib/utils/analyticsUtils.js +1 -1
- package/lib/utils/appContext.js +1 -1
- package/lib/utils/aqlHelpers.js +1 -1
- package/lib/utils/arangodbUtils.js +1 -1
- package/lib/utils/authUtils.js +1 -1
- package/lib/utils/awsUtils.js +1 -1
- package/lib/utils/collectionRegistry.d.ts +2 -2
- package/lib/utils/collectionRegistry.js +1 -1
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/googleTranslate.js +1 -1
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -1
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.example.js +1 -1
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/mediaAccess.d.ts +5 -0
- package/lib/utils/mediaAccess.js +57 -0
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/nodeRealtime.d.ts +14 -0
- package/lib/utils/nodeRealtime.js +84 -0
- package/lib/utils/opaqueToken.d.ts +4 -0
- package/lib/utils/opaqueToken.js +7 -0
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/stripeUtils.ts.bak +12 -0
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +1 -1
- package/lib/utils/translationQueue.example.js +1 -1
- package/lib/utils/translationQueue.js +1 -1
- package/lib/videoProcessing.js +1 -1
- package/package.json +26 -25
package/lib/actions/content.js
CHANGED
|
@@ -209,4 +209,4 @@ export const searchContent = async (context, options = {})=>{
|
|
|
209
209
|
return contentList.map((content)=>parseContentFromDb(content));
|
|
210
210
|
};
|
|
211
211
|
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2NvbnRlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuXG5pbXBvcnQge3BhcnNlQ29udGVudEZyb21EYiwgcGFyc2VDb250ZW50SW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2NvbnRlbnRBZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHt0cmFuc2xhdGVUZXh0fSBmcm9tICcuLi91dGlscy9nb29nbGVUcmFuc2xhdGUuanMnO1xuaW1wb3J0IHtleHRyYWN0TGFuZ3VhZ2UsIGlzUmVnaW9uYWxMb2NhbGV9IGZyb20gJy4uL3V0aWxzL2xvY2FsZVV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDb250ZW50SW5wdXRUeXBlLCBDb250ZW50T3B0aW9ucywgQ29udGVudFR5cGUsIExvY2FsZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50T3B0aW9ucyA9IChvcHRpb25zOiBDb250ZW50T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjYXRlZ29yeSxcbiAgICBpc0FjdGl2ZSA9IHRydWUsXG4gICAga2V5LFxuICAgIGxvY2FsZVxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGNhdGVnb3J5OiBjYXRlZ29yeSA/IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApIDogdW5kZWZpbmVkLFxuICAgIGlzQWN0aXZlLFxuICAgIGtleToga2V5ID8gcGFyc2VTdHJpbmcoa2V5LCAyMDApIDogdW5kZWZpbmVkLFxuICAgIGxvY2FsZVxuICB9O1xufTtcblxuY29uc3QgYnVpbGRDb250ZW50RmlsdGVycyA9IChvcHRpb25zOiBDb250ZW50T3B0aW9ucyA9IHt9KTogRmlsdGVyR3JvdXAgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7Y2F0ZWdvcnksIGlzQWN0aXZlLCBrZXksIGxvY2FsZX0gPSBwYXJzZUNvbnRlbnRPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmaWx0ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGlmKGtleSkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdrZXknLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGtleX0pO1xuICB9XG5cbiAgaWYobG9jYWxlKSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2xvY2FsZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogbG9jYWxlfSk7XG4gIH1cblxuICBpZihjYXRlZ29yeSkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdjYXRlZ29yeScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogY2F0ZWdvcnl9KTtcbiAgfVxuXG4gIGlmKGlzQWN0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAnaXNBY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGlzQWN0aXZlfSk7XG4gIH1cblxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPiAwID8ge29wZXJhdG9yOiAnQU5EJywgZmlsdGVyc30gYXMgYW55IDogdW5kZWZpbmVkO1xufTtcblxuY29uc3QgYnVpbGRDb250ZW50TXV0YXRpb24gPSAoXG4gIGNvbnRlbnRJbnB1dDogQ29udGVudElucHV0VHlwZSxcbiAgb3B0aW9uczoge3JlYWRvbmx5IGluY2x1ZGVJZGVudGl0eT86IGJvb2xlYW59ID0ge31cbik6IFBhcnRpYWw8Q29udGVudFR5cGU+ID0+IHtcbiAgY29uc3QgcGFyc2VkQ29udGVudCA9IHBhcnNlQ29udGVudElucHV0KGNvbnRlbnRJbnB1dCk7XG4gIGNvbnN0IHtcbiAgICBjYXRlZ29yeSxcbiAgICBjb250ZW50LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGlzQWN0aXZlLFxuICAgIGtleSxcbiAgICBsb2NhbGU6IHBhcnNlZExvY2FsZVxuICB9ID0gcGFyc2VkQ29udGVudDtcbiAgY29uc3Qge2luY2x1ZGVJZGVudGl0eSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvY2FsZTogTG9jYWxlID0gcGFyc2VkTG9jYWxlIHx8ICdlbic7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oaW5jbHVkZUlkZW50aXR5ICYmIHtrZXk6IGtleSA/IHBhcnNlU3RyaW5nKGtleSwgMjAwKSA6IHVuZGVmaW5lZCwgbG9jYWxlfSksXG4gICAgY29udGVudDogY29udGVudCAhPT0gdW5kZWZpbmVkID8gcGFyc2VTdHJpbmcoY29udGVudCwgMTAwMDApIDogdW5kZWZpbmVkLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8gKGRlc2NyaXB0aW9uID8gcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCkgOiB1bmRlZmluZWQpIGFzIHN0cmluZyA6IHVuZGVmaW5lZCxcbiAgICBjYXRlZ29yeTogY2F0ZWdvcnkgIT09IHVuZGVmaW5lZCA/IChjYXRlZ29yeSA/IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApIDogdW5kZWZpbmVkKSBhcyBzdHJpbmcgOiB1bmRlZmluZWQsXG4gICAgaXNBY3RpdmVcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgZ2V0SXRlbUJ5PENvbnRlbnRUeXBlPihjb250ZXh0LCAnY29udGVudCcsIGJ1aWxkQ29udGVudEZpbHRlcnMoe2tleSwgbG9jYWxlLCBpc0FjdGl2ZTogdHJ1ZX0pKTtcbiAgcmV0dXJuIGNvbnRlbnQgPyBwYXJzZUNvbnRlbnRGcm9tRGIoY29udGVudCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRlbnRXaXRoRmFsbGJhY2sgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBmYWxsYmFja0NvbnRlbnQ6IHN0cmluZyxcbiAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBhcHBMb2NhbGUgPSAoQ29uZmlnLmdldCgnYXBwLmxvY2FsZScpIHx8ICdlbicpIGFzIExvY2FsZTtcblxuICB0cnkge1xuICAgIGxldCBjb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGxvY2FsZSk7XG5cbiAgICBpZihjb250ZW50Py5jb250ZW50KSB7XG4gICAgICByZXR1cm4gY29udGVudC5jb250ZW50O1xuICAgIH1cblxuICAgIGlmKGlzUmVnaW9uYWxMb2NhbGUobG9jYWxlKSkge1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBleHRyYWN0TGFuZ3VhZ2UobG9jYWxlKTtcbiAgICAgIGNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgbGFuZ3VhZ2UgYXMgTG9jYWxlKTtcblxuICAgICAgaWYoY29udGVudD8uY29udGVudCkge1xuICAgICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY29udGVudDogY29udGVudC5jb250ZW50LFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYEV4dHJhY3RlZCBmcm9tICR7bGFuZ3VhZ2V9YFxuICAgICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGV4dHJhY3RlZCBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb250ZW50LmNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYobG9jYWxlID09PSBhcHBMb2NhbGUpIHtcbiAgICAgIGlmKGZhbGxiYWNrQ29udGVudCkge1xuICAgICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY29udGVudDogZmFsbGJhY2tDb250ZW50LFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0F1dG8tZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2snXG4gICAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZmFsbGJhY2sgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udGVudCB8fCBrZXk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsZXQgc291cmNlQ29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBhcHBMb2NhbGUpO1xuICAgICAgbGV0IHNvdXJjZVRleHQ6IHN0cmluZztcblxuICAgICAgaWYoc291cmNlQ29udGVudD8uY29udGVudCkge1xuICAgICAgICBzb3VyY2VUZXh0ID0gc291cmNlQ29udGVudC5jb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYoaXNSZWdpb25hbExvY2FsZShhcHBMb2NhbGUpKSB7XG4gICAgICAgICAgY29uc3QgYXBwTGFuZ3VhZ2UgPSBleHRyYWN0TGFuZ3VhZ2UoYXBwTG9jYWxlKTtcbiAgICAgICAgICBzb3VyY2VDb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGFwcExhbmd1YWdlIGFzIExvY2FsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihzb3VyY2VDb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgICAgc291cmNlVGV4dCA9IHNvdXJjZUNvbnRlbnQuY29udGVudDtcbiAgICAgICAgfSBlbHNlIGlmKGZhbGxiYWNrQ29udGVudCkge1xuICAgICAgICAgIHNvdXJjZVRleHQgPSBmYWxsYmFja0NvbnRlbnQ7XG5cbiAgICAgICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGZhbGxiYWNrQ29udGVudCxcbiAgICAgICAgICAgIGxvY2FsZTogYXBwTG9jYWxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBdXRvLWdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrJ1xuICAgICAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBmYWxsYmFjayBhcyBkZWZhdWx0IGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRUZXh0ID0gYXdhaXQgdHJhbnNsYXRlVGV4dChzb3VyY2VUZXh0LCBleHRyYWN0TGFuZ3VhZ2UobG9jYWxlKSwgZXh0cmFjdExhbmd1YWdlKGFwcExvY2FsZSkpO1xuXG4gICAgICBhZGRDb250ZW50KGNvbnRleHQsIHtcbiAgICAgICAga2V5LFxuICAgICAgICBjb250ZW50OiB0cmFuc2xhdGVkVGV4dCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEF1dG8tdHJhbnNsYXRlZCBmcm9tICR7YXBwTG9jYWxlfWBcbiAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIHRyYW5zbGF0ZWQgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2xhdGVkVGV4dDtcbiAgICB9IGNhdGNoKHRyYW5zbGF0aW9uRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zbGF0aW9uIGVycm9yOicsIHRyYW5zbGF0aW9uRXJyb3IpO1xuXG4gICAgICByZXR1cm4gZmFsbGJhY2tDb250ZW50IHx8IGtleTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjb250ZW50IGZyb20gZGF0YWJhc2U6JywgZXJyb3IpO1xuICAgIHJldHVybiBmYWxsYmFja0NvbnRlbnQgfHwga2V5O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQ29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udGVudElucHV0OiBDb250ZW50SW5wdXRUeXBlXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9ufSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBwYXJzZUNvbnRlbnRJbnB1dChjb250ZW50SW5wdXQpO1xuICBjb25zdCB7XG4gICAgY2F0ZWdvcnksXG4gICAgY29udGVudCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpc0FjdGl2ZSxcbiAgICBrZXksXG4gICAgbG9jYWxlOiBwYXJzZWRMb2NhbGVcbiAgfSA9IHBhcnNlZENvbnRlbnQ7XG4gIGNvbnN0IGxvY2FsZTogTG9jYWxlID0gcGFyc2VkTG9jYWxlIHx8ICdlbic7XG4gIGNvbnN0IGNvbnRlbnRJZCA9IGNyZWF0ZUhhc2goYGNvbnRlbnQtJHtrZXl9LSR7bG9jYWxlfWApO1xuICBjb25zdCBpbnNlcnQ6IENvbnRlbnRUeXBlID0ge1xuICAgIF9rZXk6IGNvbnRlbnRJZCxcbiAgICBrZXk6IHBhcnNlU3RyaW5nKGtleSwgMjAwKSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogcGFyc2VTdHJpbmcoY29udGVudCwgMTAwMDApLFxuICAgIC4uLihkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIHtkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPyBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZH0pLFxuICAgIC4uLihjYXRlZ29yeSAhPT0gdW5kZWZpbmVkICYmIHtjYXRlZ29yeTogY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZH0pLFxuICAgIC4uLihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkICYmIHtpc0FjdGl2ZX0pLFxuICAgIHVzZXJJZDogc2Vzc2lvbj8udXNlcklkIGFzIHN0cmluZ1xuICB9O1xuXG4gIGNvbnN0IHNhdmVkQ29udGVudCA9IGF3YWl0IGFkZEl0ZW08Q29udGVudFR5cGU+KGNvbnRleHQsICdjb250ZW50JywgaW5zZXJ0KTtcbiAgcmV0dXJuIHBhcnNlQ29udGVudEZyb21EYihzYXZlZENvbnRlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnRlbnRJbnB1dDogQ29udGVudElucHV0VHlwZVxuKTogUHJvbWlzZTxDb250ZW50VHlwZT4gPT4ge1xuICBjb25zdCBwYXJzZWRDb250ZW50ID0gcGFyc2VDb250ZW50SW5wdXQoY29udGVudElucHV0KTtcbiAgY29uc3Qge2NvbnRlbnRJZH0gPSBwYXJzZWRDb250ZW50O1xuXG4gIGlmKCFjb250ZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRlbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHVwZGF0ZScpO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlZENvbnRlbnQgPSBhd2FpdCB1cGRhdGVJdGVtPENvbnRlbnRUeXBlPihjb250ZXh0LCAnY29udGVudCcsIGNvbnRlbnRJZCwgYnVpbGRDb250ZW50TXV0YXRpb24oY29udGVudElucHV0KSk7XG5cbiAgaWYoIXVwZGF0ZWRDb250ZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb250ZW50IG5vdCBmb3VuZCBvciBhY2Nlc3MgZGVuaWVkJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VDb250ZW50RnJvbURiKHVwZGF0ZWRDb250ZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWFyY2hDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zOiBDb250ZW50T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPENvbnRlbnRUeXBlW10+ID0+IHtcbiAgY29uc3QgY29udGVudExpc3QgPSBhd2FpdCBnZXRMaXN0Qnk8Q29udGVudFR5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgJ2NvbnRlbnQnLFxuICAgIGJ1aWxkQ29udGVudEZpbHRlcnMob3B0aW9ucyksXG4gICAge3NvcnQ6IFt7ZmllbGQ6ICdrZXknLCBkaXJlY3Rpb246ICdBU0MnfSwge2ZpZWxkOiAnbG9jYWxlJywgZGlyZWN0aW9uOiAnQVNDJ31dfVxuICApO1xuXG4gIHJldHVybiBjb250ZW50TGlzdC5tYXAoKGNvbnRlbnQpID0+IHBhcnNlQ29udGVudEZyb21EYihjb250ZW50KSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZVN0cmluZyIsInBhcnNlQ29udGVudEZyb21EYiIsInBhcnNlQ29udGVudElucHV0IiwiQ29uZmlnIiwidHJhbnNsYXRlVGV4dCIsImV4dHJhY3RMYW5ndWFnZSIsImlzUmVnaW9uYWxMb2NhbGUiLCJhZGRJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsInBhcnNlQ29udGVudE9wdGlvbnMiLCJvcHRpb25zIiwiY2F0ZWdvcnkiLCJpc0FjdGl2ZSIsImtleSIsImxvY2FsZSIsInVuZGVmaW5lZCIsImJ1aWxkQ29udGVudEZpbHRlcnMiLCJmaWx0ZXJzIiwicHVzaCIsImZpZWxkIiwib3BlcmF0b3IiLCJ2YWx1ZSIsImxlbmd0aCIsImJ1aWxkQ29udGVudE11dGF0aW9uIiwiY29udGVudElucHV0IiwicGFyc2VkQ29udGVudCIsImNvbnRlbnQiLCJkZXNjcmlwdGlvbiIsInBhcnNlZExvY2FsZSIsImluY2x1ZGVJZGVudGl0eSIsImdldENvbnRlbnQiLCJjb250ZXh0IiwiZ2V0Q29udGVudFdpdGhGYWxsYmFjayIsImZhbGxiYWNrQ29udGVudCIsImFwcExvY2FsZSIsImdldCIsImxhbmd1YWdlIiwiYWRkQ29udGVudCIsImNhdGNoIiwic2F2ZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwic291cmNlQ29udGVudCIsInNvdXJjZVRleHQiLCJhcHBMYW5ndWFnZSIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRpb25FcnJvciIsInNlc3Npb24iLCJjb250ZW50SWQiLCJpbnNlcnQiLCJfa2V5IiwidXNlcklkIiwic2F2ZWRDb250ZW50IiwidXBkYXRlQ29udGVudCIsIkVycm9yIiwidXBkYXRlZENvbnRlbnQiLCJzZWFyY2hDb250ZW50IiwiY29udGVudExpc3QiLCJzb3J0IiwiZGlyZWN0aW9uIiwibWFwIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFFckUsU0FBUUMsa0JBQWtCLEVBQUVDLGlCQUFpQixRQUFPLGdDQUFnQztBQUNwRixTQUFRQyxNQUFNLFFBQU8sZUFB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
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcblxuaW1wb3J0IHtwYXJzZUNvbnRlbnRGcm9tRGIsIHBhcnNlQ29udGVudElucHV0fSBmcm9tICcuLi9hZGFwdGVycy9jb250ZW50QWRhcHRlci5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7dHJhbnNsYXRlVGV4dH0gZnJvbSAnLi4vdXRpbHMvZ29vZ2xlVHJhbnNsYXRlLmpzJztcbmltcG9ydCB7ZXh0cmFjdExhbmd1YWdlLCBpc1JlZ2lvbmFsTG9jYWxlfSBmcm9tICcuLi91dGlscy9sb2NhbGVVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29udGVudElucHV0VHlwZSwgQ29udGVudE9wdGlvbnMsIENvbnRlbnRUeXBlLCBMb2NhbGV9IGZyb20gJy4uL3R5cGVzL2NvbnRlbnQudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbHRlckdyb3VwfSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudE9wdGlvbnMgPSAob3B0aW9uczogQ29udGVudE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgY2F0ZWdvcnksXG4gICAgaXNBY3RpdmUgPSB0cnVlLFxuICAgIGtleSxcbiAgICBsb2NhbGVcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXRlZ29yeTogY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZCxcbiAgICBpc0FjdGl2ZSxcbiAgICBrZXk6IGtleSA/IHBhcnNlU3RyaW5nKGtleSwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICBsb2NhbGVcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQ29udGVudEZpbHRlcnMgPSAob3B0aW9uczogQ29udGVudE9wdGlvbnMgPSB7fSk6IEZpbHRlckdyb3VwIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qge2NhdGVnb3J5LCBpc0FjdGl2ZSwga2V5LCBsb2NhbGV9ID0gcGFyc2VDb250ZW50T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZmlsdGVyczogYW55W10gPSBbXTtcblxuICBpZihrZXkpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAna2V5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBrZXl9KTtcbiAgfVxuXG4gIGlmKGxvY2FsZSkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdsb2NhbGUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGxvY2FsZX0pO1xuICB9XG5cbiAgaWYoY2F0ZWdvcnkpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAnY2F0ZWdvcnknLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGNhdGVnb3J5fSk7XG4gIH1cblxuICBpZihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2lzQWN0aXZlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBpc0FjdGl2ZX0pO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID4gMCA/IHtvcGVyYXRvcjogJ0FORCcsIGZpbHRlcnN9IGFzIGFueSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGJ1aWxkQ29udGVudE11dGF0aW9uID0gKFxuICBjb250ZW50SW5wdXQ6IENvbnRlbnRJbnB1dFR5cGUsXG4gIG9wdGlvbnM6IHtyZWFkb25seSBpbmNsdWRlSWRlbnRpdHk/OiBib29sZWFufSA9IHt9XG4pOiBQYXJ0aWFsPENvbnRlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBwYXJzZUNvbnRlbnRJbnB1dChjb250ZW50SW5wdXQpO1xuICBjb25zdCB7XG4gICAgY2F0ZWdvcnksXG4gICAgY29udGVudCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpc0FjdGl2ZSxcbiAgICBrZXksXG4gICAgbG9jYWxlOiBwYXJzZWRMb2NhbGVcbiAgfSA9IHBhcnNlZENvbnRlbnQ7XG4gIGNvbnN0IHtpbmNsdWRlSWRlbnRpdHkgPSBmYWxzZX0gPSBvcHRpb25zO1xuICBjb25zdCBsb2NhbGU6IExvY2FsZSA9IHBhcnNlZExvY2FsZSB8fCAnZW4nO1xuXG4gIHJldHVybiB7XG4gICAgLi4uKGluY2x1ZGVJZGVudGl0eSAmJiB7a2V5OiBrZXkgPyBwYXJzZVN0cmluZyhrZXksIDIwMCkgOiB1bmRlZmluZWQsIGxvY2FsZX0pLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnQgIT09IHVuZGVmaW5lZCA/IHBhcnNlU3RyaW5nKGNvbnRlbnQsIDEwMDAwKSA6IHVuZGVmaW5lZCxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCA/IChkZXNjcmlwdGlvbiA/IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApIDogdW5kZWZpbmVkKSBhcyBzdHJpbmcgOiB1bmRlZmluZWQsXG4gICAgY2F0ZWdvcnk6IGNhdGVnb3J5ICE9PSB1bmRlZmluZWQgPyAoY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nIDogdW5kZWZpbmVkLFxuICAgIGlzQWN0aXZlXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAga2V5OiBzdHJpbmcsXG4gIGxvY2FsZTogTG9jYWxlID0gJ2VuJ1xuKTogUHJvbWlzZTxDb250ZW50VHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGdldEl0ZW1CeTxDb250ZW50VHlwZT4oY29udGV4dCwgJ2NvbnRlbnQnLCBidWlsZENvbnRlbnRGaWx0ZXJzKHtrZXksIGxvY2FsZSwgaXNBY3RpdmU6IHRydWV9KSk7XG4gIHJldHVybiBjb250ZW50ID8gcGFyc2VDb250ZW50RnJvbURiKGNvbnRlbnQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50V2l0aEZhbGxiYWNrID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgZmFsbGJhY2tDb250ZW50OiBzdHJpbmcsXG4gIGxvY2FsZTogTG9jYWxlID0gJ2VuJ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYXBwTG9jYWxlID0gKENvbmZpZy5nZXQoJ2FwcC5sb2NhbGUnKSB8fCAnZW4nKSBhcyBMb2NhbGU7XG5cbiAgdHJ5IHtcbiAgICBsZXQgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBsb2NhbGUpO1xuXG4gICAgaWYoY29udGVudD8uY29udGVudCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnQuY29udGVudDtcbiAgICB9XG5cbiAgICBpZihpc1JlZ2lvbmFsTG9jYWxlKGxvY2FsZSkpIHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gZXh0cmFjdExhbmd1YWdlKGxvY2FsZSk7XG4gICAgICBjb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGxhbmd1YWdlIGFzIExvY2FsZSk7XG5cbiAgICAgIGlmKGNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQuY29udGVudCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBFeHRyYWN0ZWQgZnJvbSAke2xhbmd1YWdlfWBcbiAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBleHRyYWN0ZWQgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udGVudC5jb250ZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGxvY2FsZSA9PT0gYXBwTG9jYWxlKSB7XG4gICAgICBpZihmYWxsYmFja0NvbnRlbnQpIHtcbiAgICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGNvbnRlbnQ6IGZhbGxiYWNrQ29udGVudCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdBdXRvLWdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrJ1xuICAgICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGZhbGxiYWNrIGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxsYmFja0NvbnRlbnQgfHwga2V5O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbGV0IHNvdXJjZUNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgYXBwTG9jYWxlKTtcbiAgICAgIGxldCBzb3VyY2VUZXh0OiBzdHJpbmc7XG5cbiAgICAgIGlmKHNvdXJjZUNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgICAgc291cmNlVGV4dCA9IHNvdXJjZUNvbnRlbnQuY29udGVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKGlzUmVnaW9uYWxMb2NhbGUoYXBwTG9jYWxlKSkge1xuICAgICAgICAgIGNvbnN0IGFwcExhbmd1YWdlID0gZXh0cmFjdExhbmd1YWdlKGFwcExvY2FsZSk7XG4gICAgICAgICAgc291cmNlQ29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBhcHBMYW5ndWFnZSBhcyBMb2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoc291cmNlQ29udGVudD8uY29udGVudCkge1xuICAgICAgICAgIHNvdXJjZVRleHQgPSBzb3VyY2VDb250ZW50LmNvbnRlbnQ7XG4gICAgICAgIH0gZWxzZSBpZihmYWxsYmFja0NvbnRlbnQpIHtcbiAgICAgICAgICBzb3VyY2VUZXh0ID0gZmFsbGJhY2tDb250ZW50O1xuXG4gICAgICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBjb250ZW50OiBmYWxsYmFja0NvbnRlbnQsXG4gICAgICAgICAgICBsb2NhbGU6IGFwcExvY2FsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXV0by1nZW5lcmF0ZWQgZnJvbSBmYWxsYmFjaydcbiAgICAgICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZmFsbGJhY2sgYXMgZGVmYXVsdCBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGVkVGV4dCA9IGF3YWl0IHRyYW5zbGF0ZVRleHQoc291cmNlVGV4dCwgZXh0cmFjdExhbmd1YWdlKGxvY2FsZSksIGV4dHJhY3RMYW5ndWFnZShhcHBMb2NhbGUpKTtcblxuICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgY29udGVudDogdHJhbnNsYXRlZFRleHQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBBdXRvLXRyYW5zbGF0ZWQgZnJvbSAke2FwcExvY2FsZX1gXG4gICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyB0cmFuc2xhdGVkIGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZFRleHQ7XG4gICAgfSBjYXRjaCh0cmFuc2xhdGlvbkVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUcmFuc2xhdGlvbiBlcnJvcjonLCB0cmFuc2xhdGlvbkVycm9yKTtcblxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udGVudCB8fCBrZXk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29udGVudCBmcm9tIGRhdGFiYXNlOicsIGVycm9yKTtcbiAgICByZXR1cm4gZmFsbGJhY2tDb250ZW50IHx8IGtleTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZENvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnRlbnRJbnB1dDogQ29udGVudElucHV0VHlwZVxuKTogUHJvbWlzZTxDb250ZW50VHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbn0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRDb250ZW50ID0gcGFyc2VDb250ZW50SW5wdXQoY29udGVudElucHV0KTtcbiAgY29uc3Qge1xuICAgIGNhdGVnb3J5LFxuICAgIGNvbnRlbnQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgaXNBY3RpdmUsXG4gICAga2V5LFxuICAgIGxvY2FsZTogcGFyc2VkTG9jYWxlXG4gIH0gPSBwYXJzZWRDb250ZW50O1xuICBjb25zdCBsb2NhbGU6IExvY2FsZSA9IHBhcnNlZExvY2FsZSB8fCAnZW4nO1xuICBjb25zdCBjb250ZW50SWQgPSBjcmVhdGVIYXNoKGBjb250ZW50LSR7a2V5fS0ke2xvY2FsZX1gKTtcbiAgY29uc3QgaW5zZXJ0OiBDb250ZW50VHlwZSA9IHtcbiAgICBfa2V5OiBjb250ZW50SWQsXG4gICAga2V5OiBwYXJzZVN0cmluZyhrZXksIDIwMCksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGNvbnRlbnQsIDEwMDAwKSxcbiAgICAuLi4oZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB7ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8gcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCkgOiB1bmRlZmluZWR9KSxcbiAgICAuLi4oY2F0ZWdvcnkgIT09IHVuZGVmaW5lZCAmJiB7Y2F0ZWdvcnk6IGNhdGVnb3J5ID8gcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCkgOiB1bmRlZmluZWR9KSxcbiAgICAuLi4oaXNBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7aXNBY3RpdmV9KSxcbiAgICB1c2VySWQ6IHNlc3Npb24/LnVzZXJJZCBhcyBzdHJpbmdcbiAgfTtcblxuICBjb25zdCBzYXZlZENvbnRlbnQgPSBhd2FpdCBhZGRJdGVtPENvbnRlbnRUeXBlPihjb250ZXh0LCAnY29udGVudCcsIGluc2VydCk7XG4gIHJldHVybiBwYXJzZUNvbnRlbnRGcm9tRGIoc2F2ZWRDb250ZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb250ZW50SW5wdXQ6IENvbnRlbnRJbnB1dFR5cGVcbik6IFByb21pc2U8Q29udGVudFR5cGU+ID0+IHtcbiAgY29uc3QgcGFyc2VkQ29udGVudCA9IHBhcnNlQ29udGVudElucHV0KGNvbnRlbnRJbnB1dCk7XG4gIGNvbnN0IHtjb250ZW50SWR9ID0gcGFyc2VkQ29udGVudDtcblxuICBpZighY29udGVudElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb250ZW50IElEIGlzIHJlcXVpcmVkIGZvciB1cGRhdGUnKTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRDb250ZW50ID0gYXdhaXQgdXBkYXRlSXRlbTxDb250ZW50VHlwZT4oY29udGV4dCwgJ2NvbnRlbnQnLCBjb250ZW50SWQsIGJ1aWxkQ29udGVudE11dGF0aW9uKGNvbnRlbnRJbnB1dCkpO1xuXG4gIGlmKCF1cGRhdGVkQ29udGVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBub3QgZm91bmQgb3IgYWNjZXNzIGRlbmllZCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlQ29udGVudEZyb21EYih1cGRhdGVkQ29udGVudCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VhcmNoQ29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgb3B0aW9uczogQ29udGVudE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxDb250ZW50VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGNvbnRlbnRMaXN0ID0gYXdhaXQgZ2V0TGlzdEJ5PENvbnRlbnRUeXBlPihcbiAgICBjb250ZXh0LFxuICAgICdjb250ZW50JyxcbiAgICBidWlsZENvbnRlbnRGaWx0ZXJzKG9wdGlvbnMpLFxuICAgIHtzb3J0OiBbe2ZpZWxkOiAna2V5JywgZGlyZWN0aW9uOiAnQVNDJ30sIHtmaWVsZDogJ2xvY2FsZScsIGRpcmVjdGlvbjogJ0FTQyd9XX1cbiAgKTtcblxuICByZXR1cm4gY29udGVudExpc3QubWFwKChjb250ZW50KSA9PiBwYXJzZUNvbnRlbnRGcm9tRGIoY29udGVudCkpO1xufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VTdHJpbmciLCJwYXJzZUNvbnRlbnRGcm9tRGIiLCJwYXJzZUNvbnRlbnRJbnB1dCIsIkNvbmZpZyIsInRyYW5zbGF0ZVRleHQiLCJleHRyYWN0TGFuZ3VhZ2UiLCJpc1JlZ2lvbmFsTG9jYWxlIiwiYWRkSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJwYXJzZUNvbnRlbnRPcHRpb25zIiwib3B0aW9ucyIsImNhdGVnb3J5IiwiaXNBY3RpdmUiLCJrZXkiLCJsb2NhbGUiLCJ1bmRlZmluZWQiLCJidWlsZENvbnRlbnRGaWx0ZXJzIiwiZmlsdGVycyIsInB1c2giLCJmaWVsZCIsIm9wZXJhdG9yIiwidmFsdWUiLCJsZW5ndGgiLCJidWlsZENvbnRlbnRNdXRhdGlvbiIsImNvbnRlbnRJbnB1dCIsInBhcnNlZENvbnRlbnQiLCJjb250ZW50IiwiZGVzY3JpcHRpb24iLCJwYXJzZWRMb2NhbGUiLCJpbmNsdWRlSWRlbnRpdHkiLCJnZXRDb250ZW50IiwiY29udGV4dCIsImdldENvbnRlbnRXaXRoRmFsbGJhY2siLCJmYWxsYmFja0NvbnRlbnQiLCJhcHBMb2NhbGUiLCJnZXQiLCJsYW5ndWFnZSIsImFkZENvbnRlbnQiLCJjYXRjaCIsInNhdmVFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInNvdXJjZUNvbnRlbnQiLCJzb3VyY2VUZXh0IiwiYXBwTGFuZ3VhZ2UiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0aW9uRXJyb3IiLCJzZXNzaW9uIiwiY29udGVudElkIiwiaW5zZXJ0IiwiX2tleSIsInVzZXJJZCIsInNhdmVkQ29udGVudCIsInVwZGF0ZUNvbnRlbnQiLCJFcnJvciIsInVwZGF0ZWRDb250ZW50Iiwic2VhcmNoQ29udGVudCIsImNvbnRlbnRMaXN0Iiwic29ydCIsImRpcmVjdGlvbiIsIm1hcCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBRXJFLFNBQVFDLGtCQUFrQixFQUFFQyxpQkFBaUIsUUFBTyxnQ0FBZ0M7QUFDcEYsU0FBUUMsTUFBTSxRQUFPLGVB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
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface ContentGenerationConfig {
|
|
2
|
+
claudeKey?: string;
|
|
3
|
+
claudeModel?: string;
|
|
4
|
+
geminiImageModel?: string;
|
|
5
|
+
geminiKey?: string;
|
|
6
|
+
geminiModel?: string;
|
|
7
|
+
openaiKey?: string;
|
|
8
|
+
openaiModel?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ContentGenerationInput {
|
|
11
|
+
aspectRatio?: string;
|
|
12
|
+
images?: {
|
|
13
|
+
bytes: Buffer;
|
|
14
|
+
mime: string;
|
|
15
|
+
}[];
|
|
16
|
+
maxTokens?: number;
|
|
17
|
+
modality?: 'image' | 'text';
|
|
18
|
+
model?: string;
|
|
19
|
+
prompt: string;
|
|
20
|
+
provider: 'claude' | 'gemini' | 'openai';
|
|
21
|
+
search?: boolean;
|
|
22
|
+
system?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface GeneratedContent {
|
|
25
|
+
image?: {
|
|
26
|
+
bytes: Buffer;
|
|
27
|
+
mime: 'image/jpeg' | 'image/png';
|
|
28
|
+
};
|
|
29
|
+
searchSuggestionsHtml?: string;
|
|
30
|
+
sources: {
|
|
31
|
+
title: string;
|
|
32
|
+
url: string;
|
|
33
|
+
}[];
|
|
34
|
+
text: string;
|
|
35
|
+
}
|
|
36
|
+
/** A confirmed rejection is distinct from an unknown paid submission outcome. */
|
|
37
|
+
export declare class ContentGenerationRejectedError extends Error {
|
|
38
|
+
}
|
|
39
|
+
/** Single submission through Rip-Hunter; callers own durable jobs and reconciliation. */
|
|
40
|
+
export declare const generateContent: (input: ContentGenerationInput, config?: ContentGenerationConfig) => Promise<GeneratedContent>;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { post } from '@nlabs/rip-hunter';
|
|
2
|
+
import { Config } from '../config.js';
|
|
3
|
+
/** A confirmed rejection is distinct from an unknown paid submission outcome. */ export class ContentGenerationRejectedError extends Error {
|
|
4
|
+
}
|
|
5
|
+
/** Single submission through Rip-Hunter; callers own durable jobs and reconciliation. */ export const generateContent = async (input, config = Config.get('contentGeneration') || {})=>{
|
|
6
|
+
if (![
|
|
7
|
+
'claude',
|
|
8
|
+
'gemini',
|
|
9
|
+
'openai'
|
|
10
|
+
].includes(input.provider) || !input.prompt?.trim()) {
|
|
11
|
+
throw new ContentGenerationRejectedError('A supported provider and non-empty prompt are required.');
|
|
12
|
+
}
|
|
13
|
+
if (input.maxTokens !== undefined && (!Number.isInteger(input.maxTokens) || input.maxTokens < 1)) {
|
|
14
|
+
throw new ContentGenerationRejectedError('maxTokens must be a positive integer.');
|
|
15
|
+
}
|
|
16
|
+
if (input.provider !== 'gemini' && (input.images?.length || input.modality === 'image' || input.search)) {
|
|
17
|
+
throw new ContentGenerationRejectedError('This provider operation supports text input and output only.');
|
|
18
|
+
}
|
|
19
|
+
const { prompt, images = [] } = input;
|
|
20
|
+
if (input.provider === 'claude') {
|
|
21
|
+
if (!config.claudeKey) {
|
|
22
|
+
throw new ContentGenerationRejectedError('Claude is not configured on this server.');
|
|
23
|
+
}
|
|
24
|
+
const response = await post('https://api.anthropic.com/v1/messages', {
|
|
25
|
+
max_tokens: input.maxTokens ?? 4096,
|
|
26
|
+
messages: [
|
|
27
|
+
{
|
|
28
|
+
content: prompt,
|
|
29
|
+
role: 'user'
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
model: input.model || config.claudeModel || 'claude-sonnet-5',
|
|
33
|
+
system: input.system
|
|
34
|
+
}, {
|
|
35
|
+
cache: false,
|
|
36
|
+
headers: new Headers({
|
|
37
|
+
'anthropic-version': '2023-06-01',
|
|
38
|
+
'x-api-key': config.claudeKey
|
|
39
|
+
}),
|
|
40
|
+
timeout: 120_000
|
|
41
|
+
});
|
|
42
|
+
if (response.error && [
|
|
43
|
+
'authentication_error',
|
|
44
|
+
'invalid_request_error',
|
|
45
|
+
'not_found_error',
|
|
46
|
+
'permission_error'
|
|
47
|
+
].includes(response.error.type || '')) {
|
|
48
|
+
throw new ContentGenerationRejectedError('Claude rejected the request. Check the model and account access.');
|
|
49
|
+
}
|
|
50
|
+
const text = response.content?.filter((part)=>part.type === 'text').map((part)=>part.text || '').join('\n').trim();
|
|
51
|
+
if (response.error || response.type !== 'message' || response.stop_reason !== 'end_turn' || !text) {
|
|
52
|
+
throw new Error('Claude response could not be confirmed.');
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
sources: [],
|
|
56
|
+
text
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (input.provider === 'openai') {
|
|
60
|
+
if (!config.openaiKey) {
|
|
61
|
+
throw new ContentGenerationRejectedError('OpenAI is not configured on this server.');
|
|
62
|
+
}
|
|
63
|
+
const response = await post('https://api.openai.com/v1/responses', {
|
|
64
|
+
input: prompt,
|
|
65
|
+
instructions: input.system,
|
|
66
|
+
max_output_tokens: input.maxTokens ?? 4096,
|
|
67
|
+
model: input.model || config.openaiModel || 'gpt-6-astra',
|
|
68
|
+
store: false
|
|
69
|
+
}, {
|
|
70
|
+
cache: false,
|
|
71
|
+
headers: new Headers({
|
|
72
|
+
Authorization: `Bearer ${config.openaiKey}`
|
|
73
|
+
}),
|
|
74
|
+
timeout: 120_000
|
|
75
|
+
});
|
|
76
|
+
if (response.error && [
|
|
77
|
+
'invalid_request_error',
|
|
78
|
+
'authentication_error',
|
|
79
|
+
'permission_error'
|
|
80
|
+
].includes(response.error.type || '')) {
|
|
81
|
+
throw new ContentGenerationRejectedError('OpenAI rejected the request. Check the model and account access.');
|
|
82
|
+
}
|
|
83
|
+
const text = response.output?.flatMap((output)=>output.content || []).filter((part)=>part.type === 'output_text').map((part)=>part.text || '').join('\n').trim();
|
|
84
|
+
if (response.error || response.status !== 'completed' || !text) {
|
|
85
|
+
throw new Error('OpenAI response could not be confirmed.');
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
sources: [],
|
|
89
|
+
text
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (!config.geminiKey) {
|
|
93
|
+
throw new ContentGenerationRejectedError('Gemini is not configured on this server.');
|
|
94
|
+
}
|
|
95
|
+
const parts = [
|
|
96
|
+
{
|
|
97
|
+
text: prompt
|
|
98
|
+
},
|
|
99
|
+
...images.map((image)=>({
|
|
100
|
+
inlineData: {
|
|
101
|
+
data: image.bytes.toString('base64'),
|
|
102
|
+
mimeType: image.mime
|
|
103
|
+
}
|
|
104
|
+
}))
|
|
105
|
+
];
|
|
106
|
+
const model = input.model || (input.modality === 'image' ? config.geminiImageModel || 'gemini-3.1-flash-image' : config.geminiModel || 'gemini-3.8-flash');
|
|
107
|
+
if (!/^[a-zA-Z0-9._-]+$/.test(model)) {
|
|
108
|
+
throw new ContentGenerationRejectedError('Invalid Gemini model configuration.');
|
|
109
|
+
}
|
|
110
|
+
const response = await post(`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent`, {
|
|
111
|
+
contents: [
|
|
112
|
+
{
|
|
113
|
+
parts,
|
|
114
|
+
role: 'user'
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
...input.system ? {
|
|
118
|
+
systemInstruction: {
|
|
119
|
+
parts: [
|
|
120
|
+
{
|
|
121
|
+
text: input.system
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
} : {},
|
|
126
|
+
generationConfig: input.modality === 'image' ? {
|
|
127
|
+
...input.aspectRatio ? {
|
|
128
|
+
imageConfig: {
|
|
129
|
+
aspectRatio: input.aspectRatio
|
|
130
|
+
}
|
|
131
|
+
} : {},
|
|
132
|
+
responseModalities: [
|
|
133
|
+
'TEXT',
|
|
134
|
+
'IMAGE'
|
|
135
|
+
]
|
|
136
|
+
} : {
|
|
137
|
+
maxOutputTokens: input.maxTokens ?? 4096
|
|
138
|
+
},
|
|
139
|
+
...input.search ? {
|
|
140
|
+
tools: [
|
|
141
|
+
{
|
|
142
|
+
googleSearch: {}
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
} : {}
|
|
146
|
+
}, {
|
|
147
|
+
cache: false,
|
|
148
|
+
headers: new Headers({
|
|
149
|
+
'x-goog-api-key': config.geminiKey
|
|
150
|
+
}),
|
|
151
|
+
timeout: 120_000
|
|
152
|
+
});
|
|
153
|
+
if (response.error && [
|
|
154
|
+
400,
|
|
155
|
+
401,
|
|
156
|
+
403,
|
|
157
|
+
404
|
|
158
|
+
].includes(response.error.code || 0)) {
|
|
159
|
+
throw new ContentGenerationRejectedError('Gemini rejected the request. Check the reference format and model access.');
|
|
160
|
+
}
|
|
161
|
+
if (response.error || !response.candidates?.length) {
|
|
162
|
+
throw new Error('Gemini response could not be confirmed.');
|
|
163
|
+
}
|
|
164
|
+
const candidate = response.candidates[0];
|
|
165
|
+
const output = (candidate.content?.parts || []).filter((part)=>!part.thought);
|
|
166
|
+
const inline = output.find((part)=>part.inlineData)?.inlineData;
|
|
167
|
+
let image;
|
|
168
|
+
if (inline && [
|
|
169
|
+
'image/png',
|
|
170
|
+
'image/jpeg'
|
|
171
|
+
].includes(inline.mimeType)) {
|
|
172
|
+
const bytes = Buffer.from(inline.data, 'base64');
|
|
173
|
+
if (!bytes.length || bytes.length > 20 * 1024 * 1024) {
|
|
174
|
+
throw new Error('Invalid image output.');
|
|
175
|
+
}
|
|
176
|
+
image = {
|
|
177
|
+
bytes,
|
|
178
|
+
mime: inline.mimeType
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const text = output.map((part)=>part.text || '').join('\n').trim();
|
|
182
|
+
if (input.modality === 'image' ? !image : !text) {
|
|
183
|
+
throw new Error('The requested output was not returned.');
|
|
184
|
+
}
|
|
185
|
+
const sources = (candidate.groundingMetadata?.groundingChunks || []).flatMap(({ web })=>{
|
|
186
|
+
try {
|
|
187
|
+
const url = new URL(web?.uri || '');
|
|
188
|
+
return url.protocol === 'https:' ? [
|
|
189
|
+
{
|
|
190
|
+
title: web?.title || url.hostname,
|
|
191
|
+
url: url.href
|
|
192
|
+
}
|
|
193
|
+
] : [];
|
|
194
|
+
} catch {
|
|
195
|
+
return [];
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
image,
|
|
200
|
+
searchSuggestionsHtml: candidate.groundingMetadata?.searchEntryPoint?.renderedContent,
|
|
201
|
+
sources,
|
|
202
|
+
text
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50R2VuZXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3Bvc3R9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRpb25Db25maWcge1xuICBjbGF1ZGVLZXk/OiBzdHJpbmc7XG4gIGNsYXVkZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlJbWFnZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlLZXk/OiBzdHJpbmc7XG4gIGdlbWluaU1vZGVsPzogc3RyaW5nO1xuICBvcGVuYWlLZXk/OiBzdHJpbmc7XG4gIG9wZW5haU1vZGVsPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50R2VuZXJhdGlvbklucHV0IHtcbiAgYXNwZWN0UmF0aW8/OiBzdHJpbmc7XG4gIGltYWdlcz86IHtieXRlczogQnVmZmVyOyBtaW1lOiBzdHJpbmd9W107XG4gIG1heFRva2Vucz86IG51bWJlcjtcbiAgbW9kYWxpdHk/OiAnaW1hZ2UnIHwgJ3RleHQnO1xuICBtb2RlbD86IHN0cmluZztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIHByb3ZpZGVyOiAnY2xhdWRlJyB8ICdnZW1pbmknIHwgJ29wZW5haSc7XG4gIHNlYXJjaD86IGJvb2xlYW47XG4gIHN5c3RlbT86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVkQ29udGVudCB7XG4gIGltYWdlPzoge2J5dGVzOiBCdWZmZXI7IG1pbWU6ICdpbWFnZS9qcGVnJyB8ICdpbWFnZS9wbmcnfTtcbiAgc2VhcmNoU3VnZ2VzdGlvbnNIdG1sPzogc3RyaW5nO1xuICBzb3VyY2VzOiB7dGl0bGU6IHN0cmluZzsgdXJsOiBzdHJpbmd9W107XG4gIHRleHQ6IHN0cmluZztcbn1cbi8qKiBBIGNvbmZpcm1lZCByZWplY3Rpb24gaXMgZGlzdGluY3QgZnJvbSBhbiB1bmtub3duIHBhaWQgc3VibWlzc2lvbiBvdXRjb21lLiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmludGVyZmFjZSBHZW1pbmlQYXJ0IHtpbmxpbmVEYXRhPzoge2RhdGE6IHN0cmluZzsgbWltZVR5cGU6IHN0cmluZ307IHRleHQ/OiBzdHJpbmc7IHRob3VnaHQ/OiBib29sZWFufVxuaW50ZXJmYWNlIEdlbWluaVJlc3BvbnNlIHtcbiAgY2FuZGlkYXRlcz86IHtcbiAgICBjb250ZW50Pzoge3BhcnRzPzogR2VtaW5pUGFydFtdfTtcbiAgICBncm91bmRpbmdNZXRhZGF0YT86IHtcbiAgICAgIGdyb3VuZGluZ0NodW5rcz86IHt3ZWI/OiB7dGl0bGU/OiBzdHJpbmc7IHVyaT86IHN0cmluZ319W107XG4gICAgICBzZWFyY2hFbnRyeVBvaW50Pzoge3JlbmRlcmVkQ29udGVudD86IHN0cmluZ307XG4gICAgfTtcbiAgfVtdO1xuICBlcnJvcj86IHtjb2RlPzogbnVtYmVyfTtcbiAgcHJvbXB0RmVlZGJhY2s/OiB7YmxvY2tSZWFzb24/OiBzdHJpbmd9O1xufVxuXG4vKiogU2luZ2xlIHN1Ym1pc3Npb24gdGhyb3VnaCBSaXAtSHVudGVyOyBjYWxsZXJzIG93biBkdXJhYmxlIGpvYnMgYW5kIHJlY29uY2lsaWF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlQ29udGVudCA9IGFzeW5jIChcbiAgaW5wdXQ6IENvbnRlbnRHZW5lcmF0aW9uSW5wdXQsXG4gIGNvbmZpZzogQ29udGVudEdlbmVyYXRpb25Db25maWcgPSBDb25maWcuZ2V0PENvbnRlbnRHZW5lcmF0aW9uQ29uZmlnPignY29udGVudEdlbmVyYXRpb24nKSB8fCB7fVxuKTogUHJvbWlzZTxHZW5lcmF0ZWRDb250ZW50PiA9PiB7XG4gIGlmKCFbJ2NsYXVkZScsICdnZW1pbmknLCAnb3BlbmFpJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpIHx8ICFpbnB1dC5wcm9tcHQ/LnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0Egc3VwcG9ydGVkIHByb3ZpZGVyIGFuZCBub24tZW1wdHkgcHJvbXB0IGFyZSByZXF1aXJlZC4nKTtcbiAgfVxuICBpZihpbnB1dC5tYXhUb2tlbnMgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0ludGVnZXIoaW5wdXQubWF4VG9rZW5zKSB8fCBpbnB1dC5tYXhUb2tlbnMgPCAxKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ21heFRva2VucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKTtcbiAgfVxuICBpZihpbnB1dC5wcm92aWRlciAhPT0gJ2dlbWluaScgJiYgKGlucHV0LmltYWdlcz8ubGVuZ3RoIHx8IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnIHx8IGlucHV0LnNlYXJjaCkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdUaGlzIHByb3ZpZGVyIG9wZXJhdGlvbiBzdXBwb3J0cyB0ZXh0IGlucHV0IGFuZCBvdXRwdXQgb25seS4nKTtcbiAgfVxuICBjb25zdCB7cHJvbXB0LCBpbWFnZXMgPSBbXX0gPSBpbnB1dDtcbiAgaWYoaW5wdXQucHJvdmlkZXIgPT09ICdjbGF1ZGUnKSB7XG4gICAgaWYoIWNvbmZpZy5jbGF1ZGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0NsYXVkZSBpcyBub3QgY29uZmlndXJlZCBvbiB0aGlzIHNlcnZlci4nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb3N0KCdodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzJywge1xuICAgICAgbWF4X3Rva2VuczogaW5wdXQubWF4VG9rZW5zID8/IDQwOTYsXG4gICAgICBtZXNzYWdlczogW3tjb250ZW50OiBwcm9tcHQsIHJvbGU6ICd1c2VyJ31dLFxuICAgICAgbW9kZWw6IGlucHV0Lm1vZGVsIHx8IGNvbmZpZy5jbGF1ZGVNb2RlbCB8fCAnY2xhdWRlLXNvbm5ldC01JyxcbiAgICAgIHN5c3RlbTogaW5wdXQuc3lzdGVtXG4gICAgfSwge2NhY2hlOiBmYWxzZSwgaGVhZGVyczogbmV3IEhlYWRlcnMoeydhbnRocm9waWMtdmVyc2lvbic6ICcyMDIzLTA2LTAxJywgJ3gtYXBpLWtleSc6IGNvbmZpZy5jbGF1ZGVLZXl9KSwgdGltZW91dDogMTIwXzAwMH0pIGFzIHtcbiAgICAgIGNvbnRlbnQ/OiB7dGV4dD86IHN0cmluZzsgdHlwZT86IHN0cmluZ31bXTtcbiAgICAgIGVycm9yPzoge3R5cGU/OiBzdHJpbmd9O1xuICAgICAgc3RvcF9yZWFzb24/OiBzdHJpbmc7XG4gICAgICB0eXBlPzogc3RyaW5nO1xuICAgIH07XG4gICAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWydhdXRoZW50aWNhdGlvbl9lcnJvcicsICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InLCAnbm90X2ZvdW5kX2Vycm9yJywgJ3Blcm1pc3Npb25fZXJyb3InXS5pbmNsdWRlcyhyZXNwb25zZS5lcnJvci50eXBlIHx8ICcnKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignQ2xhdWRlIHJlamVjdGVkIHRoZSByZXF1ZXN0LiBDaGVjayB0aGUgbW9kZWwgYW5kIGFjY291bnQgYWNjZXNzLicpO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gcmVzcG9uc2UuY29udGVudD8uZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICd0ZXh0JykubWFwKChwYXJ0KSA9PiBwYXJ0LnRleHQgfHwgJycpLmpvaW4oJ1xcbicpLnRyaW0oKTtcbiAgICBpZihyZXNwb25zZS5lcnJvciB8fCByZXNwb25zZS50eXBlICE9PSAnbWVzc2FnZScgfHwgcmVzcG9uc2Uuc3RvcF9yZWFzb24gIT09ICdlbmRfdHVybicgfHwgIXRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2xhdWRlIHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiB7c291cmNlczogW10sIHRleHR9O1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyID09PSAnb3BlbmFpJykge1xuICAgIGlmKCFjb25maWcub3BlbmFpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdPcGVuQUkgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhpcyBzZXJ2ZXIuJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCgnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9yZXNwb25zZXMnLCB7XG4gICAgICBpbnB1dDogcHJvbXB0LFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnB1dC5zeXN0ZW0sXG4gICAgICBtYXhfb3V0cHV0X3Rva2VuczogaW5wdXQubWF4VG9rZW5zID8/IDQwOTYsXG4gICAgICBtb2RlbDogaW5wdXQubW9kZWwgfHwgY29uZmlnLm9wZW5haU1vZGVsIHx8ICdncHQtNi1hc3RyYScsXG4gICAgICBzdG9yZTogZmFsc2VcbiAgICB9LCB7Y2FjaGU6IGZhbHNlLCBoZWFkZXJzOiBuZXcgSGVhZGVycyh7QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy5vcGVuYWlLZXl9YH0pLCB0aW1lb3V0OiAxMjBfMDAwfSkgYXMge1xuICAgICAgZXJyb3I/OiB7Y29kZT86IHN0cmluZzsgdHlwZT86IHN0cmluZ307XG4gICAgICBvdXRwdXQ/OiB7Y29udGVudD86IHt0ZXh0Pzogc3RyaW5nOyB0eXBlPzogc3RyaW5nfVtdfVtdO1xuICAgICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIH07XG4gICAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWydpbnZhbGlkX3JlcXVlc3RfZXJyb3InLCAnYXV0aGVudGljYXRpb25fZXJyb3InLCAncGVybWlzc2lvbl9lcnJvciddLmluY2x1ZGVzKHJlc3BvbnNlLmVycm9yLnR5cGUgfHwgJycpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdPcGVuQUkgcmVqZWN0ZWQgdGhlIHJlcXVlc3QuIENoZWNrIHRoZSBtb2RlbCBhbmQgYWNjb3VudCBhY2Nlc3MuJyk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSByZXNwb25zZS5vdXRwdXQ/LmZsYXRNYXAoKG91dHB1dCkgPT4gb3V0cHV0LmNvbnRlbnQgfHwgW10pLmZpbHRlcigocGFydCkgPT4gcGFydC50eXBlID09PSAnb3V0cHV0X3RleHQnKS5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCB8fCAnJykuam9pbignXFxuJykudHJpbSgpO1xuICAgIGlmKHJlc3BvbnNlLmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcgfHwgIXRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlbkFJIHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiB7c291cmNlczogW10sIHRleHR9O1xuICB9XG4gIGlmKCFjb25maWcuZ2VtaW5pS2V5KSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignR2VtaW5pIGlzIG5vdCBjb25maWd1cmVkIG9uIHRoaXMgc2VydmVyLicpO1xuICB9XG4gIGNvbnN0IHBhcnRzOiB1bmtub3duW10gPSBbe3RleHQ6IHByb21wdH0sIC4uLmltYWdlcy5tYXAoKGltYWdlKSA9PiAoe2lubGluZURhdGE6IHtkYXRhOiBpbWFnZS5ieXRlcy50b1N0cmluZygnYmFzZTY0JyksIG1pbWVUeXBlOiBpbWFnZS5taW1lfX0pKV07XG4gIGNvbnN0IG1vZGVsID0gaW5wdXQubW9kZWwgfHwgKGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gY29uZmlnLmdlbWluaUltYWdlTW9kZWwgfHwgJ2dlbWluaS0zLjEtZmxhc2gtaW1hZ2UnIDogY29uZmlnLmdlbWluaU1vZGVsIHx8ICdnZW1pbmktMy44LWZsYXNoJyk7XG4gIGlmKCEvXlthLXpBLVowLTkuXy1dKyQvLnRlc3QobW9kZWwpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignSW52YWxpZCBHZW1pbmkgbW9kZWwgY29uZmlndXJhdGlvbi4nKTtcbiAgfVxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3QoYGh0dHBzOi8vZ2VuZXJhdGl2ZWxhbmd1YWdlLmdvb2dsZWFwaXMuY29tL3YxYmV0YS9tb2RlbHMvJHttb2RlbH06Z2VuZXJhdGVDb250ZW50YCwge1xuICAgIGNvbnRlbnRzOiBbe3BhcnRzLCByb2xlOiAndXNlcid9XSxcbiAgICAuLi4oaW5wdXQuc3lzdGVtID8ge3N5c3RlbUluc3RydWN0aW9uOiB7cGFydHM6IFt7dGV4dDogaW5wdXQuc3lzdGVtfV19fSA6IHt9KSxcbiAgICBnZW5lcmF0aW9uQ29uZmlnOiBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyA/IHsuLi4oaW5wdXQuYXNwZWN0UmF0aW8gPyB7aW1hZ2VDb25maWc6IHthc3BlY3RSYXRpbzogaW5wdXQuYXNwZWN0UmF0aW99fSA6IHt9KSwgcmVzcG9uc2VNb2RhbGl0aWVzOiBbJ1RFWFQnLCAnSU1BR0UnXX0gOiB7bWF4T3V0cHV0VG9rZW5zOiBpbnB1dC5tYXhUb2tlbnMgPz8gNDA5Nn0sXG4gICAgLi4uKGlucHV0LnNlYXJjaCA/IHt0b29sczogW3tnb29nbGVTZWFyY2g6IHt9fV19IDoge30pXG4gIH0sIHtjYWNoZTogZmFsc2UsIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsneC1nb29nLWFwaS1rZXknOiBjb25maWcuZ2VtaW5pS2V5fSksIHRpbWVvdXQ6IDEyMF8wMDB9KSBhcyBHZW1pbmlSZXNwb25zZTtcbiAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWzQwMCwgNDAxLCA0MDMsIDQwNF0uaW5jbHVkZXMocmVzcG9uc2UuZXJyb3IuY29kZSB8fCAwKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0dlbWluaSByZWplY3RlZCB0aGUgcmVxdWVzdC4gQ2hlY2sgdGhlIHJlZmVyZW5jZSBmb3JtYXQgYW5kIG1vZGVsIGFjY2Vzcy4nKTtcbiAgfVxuICBpZihyZXNwb25zZS5lcnJvciB8fCAhcmVzcG9uc2UuY2FuZGlkYXRlcz8ubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHZW1pbmkgcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZC4nKTtcbiAgfVxuICBjb25zdCBjYW5kaWRhdGUgPSByZXNwb25zZS5jYW5kaWRhdGVzWzBdITtcbiAgY29uc3Qgb3V0cHV0ID0gKGNhbmRpZGF0ZS5jb250ZW50Py5wYXJ0cyB8fCBbXSkuZmlsdGVyKChwYXJ0KSA9PiAhcGFydC50aG91Z2h0KTtcbiAgY29uc3QgaW5saW5lID0gb3V0cHV0LmZpbmQoKHBhcnQpID0+IHBhcnQuaW5saW5lRGF0YSk/LmlubGluZURhdGE7XG4gIGxldCBpbWFnZTogR2VuZXJhdGVkQ29udGVudFsnaW1hZ2UnXTtcbiAgaWYoaW5saW5lICYmIFsnaW1hZ2UvcG5nJywgJ2ltYWdlL2pwZWcnXS5pbmNsdWRlcyhpbmxpbmUubWltZVR5cGUpKSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShpbmxpbmUuZGF0YSwgJ2Jhc2U2NCcpO1xuICAgIGlmKCFieXRlcy5sZW5ndGggfHwgYnl0ZXMubGVuZ3RoID4gMjAgKiAxMDI0ICogMTAyNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGltYWdlIG91dHB1dC4nKTtcbiAgICB9XG4gICAgaW1hZ2UgPSB7Ynl0ZXMsIG1pbWU6IGlubGluZS5taW1lVHlwZSBhcyAnaW1hZ2UvcG5nJyB8ICdpbWFnZS9qcGVnJ307XG4gIH1cbiAgY29uc3QgdGV4dCA9IG91dHB1dC5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCB8fCAnJykuam9pbignXFxuJykudHJpbSgpO1xuICBpZihpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyA/ICFpbWFnZSA6ICF0ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcmVxdWVzdGVkIG91dHB1dCB3YXMgbm90IHJldHVybmVkLicpO1xuICB9XG4gIGNvbnN0IHNvdXJjZXMgPSAoY2FuZGlkYXRlLmdyb3VuZGluZ01ldGFkYXRhPy5ncm91bmRpbmdDaHVua3MgfHwgW10pLmZsYXRNYXAoKHt3ZWJ9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2ViPy51cmkgfHwgJycpO1xuICAgICAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBbe3RpdGxlOiB3ZWI/LnRpdGxlIHx8IHVybC5ob3N0bmFtZSwgdXJsOiB1cmwuaHJlZn1dIDogW107XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGltYWdlLCBzZWFyY2hTdWdnZXN0aW9uc0h0bWw6IGNhbmRpZGF0ZS5ncm91bmRpbmdNZXRhZGF0YT8uc2VhcmNoRW50cnlQb2ludD8ucmVuZGVyZWRDb250ZW50LCBzb3VyY2VzLCB0ZXh0XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbInBvc3QiLCJDb25maWciLCJDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IiLCJFcnJvciIsImdlbmVyYXRlQ29udGVudCIsImlucHV0IiwiY29uZmlnIiwiZ2V0IiwiaW5jbHVkZXMiLCJwcm92aWRlciIsInByb21wdCIsInRyaW0iLCJtYXhUb2tlbnMiLCJ1bmRlZmluZWQiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJpbWFnZXMiLCJsZW5ndGgiLCJtb2RhbGl0eSIsInNlYXJjaCIsImNsYXVkZUtleSIsInJlc3BvbnNlIiwibWF4X3Rva2VucyIsIm1lc3NhZ2VzIiwiY29udGVudCIsInJvbGUiLCJtb2RlbCIsImNsYXVkZU1vZGVsIiwic3lzdGVtIiwiY2FjaGUiLCJoZWFkZXJzIiwiSGVhZGVycyIsInRpbWVvdXQiLCJlcnJvciIsInR5cGUiLCJ0ZXh0IiwiZmlsdGVyIiwicGFydCIsIm1hcCIsImpvaW4iLCJzdG9wX3JlYXNvbiIsInNvdXJjZXMiLCJvcGVuYWlLZXkiLCJpbnN0cnVjdGlvbnMiLCJtYXhfb3V0cHV0X3Rva2VucyIsIm9wZW5haU1vZGVsIiwic3RvcmUiLCJBdXRob3JpemF0aW9uIiwib3V0cHV0IiwiZmxhdE1hcCIsInN0YXR1cyIsImdlbWluaUtleSIsInBhcnRzIiwiaW1hZ2UiLCJpbmxpbmVEYXRhIiwiZGF0YSIsImJ5dGVzIiwidG9TdHJpbmciLCJtaW1lVHlwZSIsIm1pbWUiLCJnZW1pbmlJbWFnZU1vZGVsIiwiZ2VtaW5pTW9kZWwiLCJ0ZXN0IiwiY29udGVudHMiLCJzeXN0ZW1JbnN0cnVjdGlvbiIsImdlbmVyYXRpb25Db25maWciLCJhc3BlY3RSYXRpbyIsImltYWdlQ29uZmlnIiwicmVzcG9uc2VNb2RhbGl0aWVzIiwibWF4T3V0cHV0VG9rZW5zIiwidG9vbHMiLCJnb29nbGVTZWFyY2giLCJjb2RlIiwiY2FuZGlkYXRlcyIsImNhbmRpZGF0ZSIsInRob3VnaHQiLCJpbmxpbmUiLCJmaW5kIiwiQnVmZmVyIiwiZnJvbSIsImdyb3VuZGluZ01ldGFkYXRhIiwiZ3JvdW5kaW5nQ2h1bmtzIiwid2ViIiwidXJsIiwiVVJMIiwidXJpIiwicHJvdG9jb2wiLCJ0aXRsZSIsImhvc3RuYW1lIiwiaHJlZiIsInNlYXJjaFN1Z2dlc3Rpb25zSHRtbCIsInNlYXJjaEVudHJ5UG9pbnQiLCJyZW5kZXJlZENvbnRlbnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLElBQUksUUFBTyxvQkFBb0I7QUFFdkMsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUE0QnBDLCtFQUErRSxHQUMvRSxPQUFPLE1BQU1DLHVDQUF1Q0M7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
|
|
@@ -336,4 +336,4 @@ export const deleteUserFromConversation = (context, { conversationId, userId })=
|
|
|
336
336
|
}, error, context));
|
|
337
337
|
};
|
|
338
338
|
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2NvbnZlcnNhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgc29ydElkcywgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUsIGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5SWR9IGZyb20gJy4vdXNlcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0LCBFZGdlVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0Nvbm5lY3Rpb25UeXBlfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnZlcnNhdGlvbk9wdGlvbnMsXG4gIENvbnZlcnNhdGlvblR5cGUsXG4gIENvbnZlcnNhdGlvblVzZXJzUGFyYW1zLFxuICBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXMsXG4gIFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbn0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdjb252ZXJzYXRpb25zJztcbmNvbnN0IGhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKCdoYXNDb252ZXJzYXRpb24nKTtcblxuY29uc3QgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVVzZXJJZDogc3RyaW5nLFxuICB0b1VzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgW2Zyb21Vc2VyLCB0b1VzZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZyb21Vc2VySWR9KSxcbiAgICBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiB0b1VzZXJJZH0pXG4gIF0pO1xuICBjb25zdCBmcm9tUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoZnJvbVVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCB0b1BlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHRvVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIWZyb21QZXJzb25hSWQgfHwgIXRvUGVyc29uYUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBjb25zdCByZWxhdGlvbnNoaXAgPSBhd2FpdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgdG9QZXJzb25hSWQsIGZyb21QZXJzb25hSWQpO1xuXG4gIGlmKCFyZWxhdGlvbnNoaXAuaXNGcmllbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbnM6IENvbnZlcnNhdGlvblR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIWNvbnZlcnNhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNvbnZlcnNhdGlvbnM7XG4gIH1cblxuICBjb25zdCB2aXNpYmlsaXR5ID0gYXdhaXQgUHJvbWlzZS5hbGwoY29udmVyc2F0aW9ucy5tYXAoYXN5bmMgKGNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICAgID8gY29udmVyc2F0aW9uLnVzZXJzLmZpbmQoKHVzZXIpID0+IHBhcnNlSWQoU3RyaW5nKHVzZXI/LnVzZXJJZCB8fCB1c2VyPy5fa2V5IHx8ICcnKSkgIT09IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHBhcnRpY2lwYW50UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBhcnRpY2lwYW50UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIShhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwYXJ0aWNpcGFudFBlcnNvbmFJZCwgc2Vzc2lvblBlcnNvbmFJZCkpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGNvbnZlcnNhdGlvbnMuZmlsdGVyKChfY29udmVyc2F0aW9uLCBpbmRleCkgPT4gdmlzaWJpbGl0eVtpbmRleF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKTtcblxuICBpZighY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25JZCAmJiAhY29udmVyc2F0aW9uPy5fa2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBpZighY29udmVyc2F0aW9uPy5pc0RpcmVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3QgcGFydGljaXBhbnQgPSBBcnJheS5pc0FycmF5KGNvbnZlcnNhdGlvbj8udXNlcnMpXG4gICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gc2Vzc2lvblVzZXJJZClcbiAgICA6IG51bGw7XG4gIGNvbnN0IHBhcnRpY2lwYW50VXNlcklkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnVzZXJJZCB8fCBwYXJ0aWNpcGFudD8uX2tleSB8fCAnJykpO1xuXG4gIGlmKCFzZXNzaW9uVXNlcklkIHx8ICFwYXJ0aWNpcGFudFVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBzZXNzaW9uVXNlcklkLCBwYXJ0aWNpcGFudFVzZXJJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb252ZXJzYXRpb25PcHRpb25zID0gKG9wdGlvbnM6IENvbnZlcnNhdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbkxpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/KTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke3VzZXJJZH1gO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgXG4gICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3VzZXJEb2NJZH0gJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgU09SVCBjLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgdWMgSU4gMS4uMSBJTkJPVU5EIGMuX2lkICR7aGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgdS5faWQgIT0gJHt1c2VyRG9jSWR9XG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnN9KVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbnMpID0+IGZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zKGNvbnRleHQsIGNvbnZlcnNhdGlvbnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYyA9IERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkgUkVUVVJOIGNgO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZERpcmVjdENvbnZlcnNhdGlvbihjb250ZXh0LCB7ZnJvbUlkLCB0b0lkLCB0b1VzZXI6IHVzZXJ9KTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHModXNlcklkcyk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuXG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBpc0RpcmVjdDogdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlZENvbnZlcnNhdGlvbiA9IGF3YWl0IGFkZEl0ZW08Q29udmVyc2F0aW9uVHlwZT4oY29udGV4dCwgJ2NvbnZlcnNhdGlvbnMnLCBpbnNlcnQpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9uLSR7dXNlcklkfS0ke2NvbnZlcnNhdGlvbklkfWApO1xuICAgICAgY29uc3QgZWRnZTogRWRnZVR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGluc2VydEVkZ2VRdWVyeSk7XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHsuLi51cGRhdGVkQ29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Vc2VyTGlzdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb25uZWN0aW9uVXNlckxpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbm5lY3Rpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke3BhcnNlSWQoY29udmVyc2F0aW9uSWQpfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBpblVzZXIsIGluRWRnZSBJTiAxLi4xIElOQk9VTkQgJHtjb252ZXJzYXRpb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBSRVRVUk4gaW5Vc2VyXG4gICAgKVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGlmKCFjb252ZXJzYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDb252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke3Nlc3Npb25JZH0gYCksXG4gICAgaXNEaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBpc0RpcmVjdCxcbiAgICBuYW1lXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdENvbnZlcnNhdGlvbklkXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4gY29udmVyc2F0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWRcbiAgfTogVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBoY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGhhc0NvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhaGFzQ29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gaGFzQ29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNDb252ZXJzYXRpb24nKTtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke2Zvcm1hdENvbnZlcnNhdGlvbklkfS0ke2Zvcm1hdFVzZXJJZH1gKTtcblxuICAgICAgY29uc3QgZWRnZTogQ29udmVyc2F0aW9uVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IHVzZXJEb2NJZCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGNvbnZlcnNhdGlvbkRvY0lkLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uXG4gICAgICAgIC5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgICAudGhlbigoKSA9PiBlZGdlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252ZXJzYXRpb25JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcbiJdLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJnZXRMaW1pdCIsInNvcnRJZHMiLCJ1c2VEYiIsImFkZEl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImdldFVzZXJCeUlkIiwiZXZlbnRDYXRlZ29yeSIsImhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24iLCJlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwIiwiY29udGV4dCIsImZyb21Vc2VySWQiLCJ0b1VzZXJJZCIsImZyb21Vc2VyIiwidG9Vc2VyIiwiUHJvbWlzZSIsImFsbCIsInVzZXJJZCIsImZyb21QZXJzb25hSWQiLCJTdHJpbmciLCJwZXJzb25hSWQiLCJ0b1BlcnNvbmFJZCIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwiZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMiLCJjb252ZXJzYXRpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInNlc3Npb24iLCJsZW5ndGgiLCJ2aXNpYmlsaXR5IiwibWFwIiwiY29udmVyc2F0aW9uIiwiaXNEaXJlY3QiLCJwYXJ0aWNpcGFudCIsIkFycmF5IiwiaXNBcnJheSIsInVzZXJzIiwiZmluZCIsInVzZXIiLCJfa2V5IiwicGFydGljaXBhbnRQZXJzb25hSWQiLCJmaWx0ZXIiLCJfY29udmVyc2F0aW9uIiwiaW5kZXgiLCJlbnN1cmVDb252ZXJzYXRpb25NZXNzYWdpbmdBbGxvd2VkIiwiY29udmVyc2F0aW9uSWQiLCJnZXRDb252ZXJzYXRpb25CeUlkIiwic2Vzc2lvblVzZXJJZCIsInBhcnRpY2lwYW50VXNlcklkIiwicGFyc2VDb252ZXJzYXRpb25PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsInVzZXJEb2NJZCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXREaXJlY3RDb252ZXJzYXRpb24iLCJmcm9tSWQiLCJ0b0lkIiwiZm9ybWF0RnJvbUlkIiwiZm9ybWF0VG9JZCIsInVzZXJJZHMiLCJzb3J0ZWRVc2VySWRzIiwiam9pbiIsIm5leHQiLCJhZGREaXJlY3RDb252ZXJzYXRpb24iLCJkYXRhYmFzZUVycm9yIiwiaW5zZXJ0IiwidXBkYXRlZENvbnZlcnNhdGlvbiIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwiRGF0ZSIsIm5vdyIsImluc2VydEVkZ2VRdWVyeSIsImdldENvbm5lY3Rpb25Vc2VyTGlzdCIsImluY2x1ZGVBbGwiLCJmaWx0ZXJzIiwicHVzaCIsImdldENvbnZlcnNhdGlvblVzZXJzIiwic2Vzc2lvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJ1cGRhdGVDb252ZXJzYXRpb24iLCJuYW1lIiwiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCJ1cGRhdGUiLCJhZGRVc2VyVG9Db252ZXJzYXRpb24iLCJmb3JtYXRVc2VySWQiLCJoYXNDb252ZXJzYXRpb25FZGdlIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwic2F2ZSIsInJldHVybk5ldyIsImRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sNkJBQTZCO0FBQ3JELFNBQVFDLFVBQVUsRUFBRUMsT0FBTyxRQUFPLCtCQUErQjtBQUNqRSxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUNyQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLEtBQUssUUFBTyw0QkFBNEI7QUFDbkUsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsMkJBQTJCLEVBQUVDLDBCQUEwQixRQUFPLGdCQUFnQjtBQUN0RixTQUFRQyxXQUFXLFFBQU8sYUFBYTtBQWdCdkMsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLDRCQUE0QlgsUUFBUTtBQUUxQyxNQUFNWSxxQ0FBcUMsT0FDekNDLFNBQ0FDLFlBQ0FDO0lBRUEsTUFBTSxDQUFDQyxVQUFVQyxPQUFPLEdBQUcsTUFBTUMsUUFBUUMsR0FBRyxDQUFDO1FBQzNDVixZQUFZSSxTQUFTO1lBQUNPLFFBQVFOO1FBQVU7UUFDeENMLFlBQVlJLFNBQVM7WUFBQ08sUUFBUUw7UUFBUTtLQUN2QztJ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
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb252ZXJzYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2Nsb25lRGVlcH0gZnJvbSAnQG5sYWJzL3V0aWxzL29iamVjdHMvY2xvbmUnO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge2xpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0TGltaXQsIHNvcnRJZHMsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlLCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2dldFVzZXJCeUlkfSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdCwgRWRnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDb25uZWN0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBDb252ZXJzYXRpb25PcHRpb25zLFxuICBDb252ZXJzYXRpb25UeXBlLFxuICBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtcyxcbiAgRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zLFxuICBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG59IGZyb20gJy4uL3R5cGVzL2NvbnZlcnNhdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnY29udmVyc2F0aW9ucyc7XG5jb25zdCBoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9uID0gbGl0ZXJhbCgnaGFzQ29udmVyc2F0aW9uJyk7XG5cbmNvbnN0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21Vc2VySWQ6IHN0cmluZyxcbiAgdG9Vc2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IFtmcm9tVXNlciwgdG9Vc2VyXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmcm9tVXNlcklkfSksXG4gICAgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogdG9Vc2VySWR9KVxuICBdKTtcbiAgY29uc3QgZnJvbVBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGZyb21Vc2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgY29uc3QgdG9QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyh0b1VzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKCFmcm9tUGVyc29uYUlkIHx8ICF0b1BlcnNvbmFJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIHRvUGVyc29uYUlkLCBmcm9tUGVyc29uYUlkKTtcblxuICBpZighcmVsYXRpb25zaGlwLmlzRnJpZW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cbn07XG5cbmNvbnN0IGZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25zOiBDb252ZXJzYXRpb25UeXBlW10gPSBbXVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKCFzZXNzaW9uUGVyc29uYUlkIHx8ICFjb252ZXJzYXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBjb252ZXJzYXRpb25zO1xuICB9XG5cbiAgY29uc3QgdmlzaWJpbGl0eSA9IGF3YWl0IFByb21pc2UuYWxsKGNvbnZlcnNhdGlvbnMubWFwKGFzeW5jIChjb252ZXJzYXRpb24pID0+IHtcbiAgICBpZighY29udmVyc2F0aW9uPy5pc0RpcmVjdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGljaXBhbnQgPSBBcnJheS5pc0FycmF5KGNvbnZlcnNhdGlvbj8udXNlcnMpXG4gICAgICA/IGNvbnZlcnNhdGlvbi51c2Vycy5maW5kKCh1c2VyKSA9PiBwYXJzZUlkKFN0cmluZyh1c2VyPy51c2VySWQgfHwgdXNlcj8uX2tleSB8fCAnJykpICE9PSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBwYXJ0aWNpcGFudFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBhcnRpY2lwYW50Py5wZXJzb25hSWQgfHwgJycpKTtcblxuICAgIGlmKCFwYXJ0aWNpcGFudFBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGFydGljaXBhbnRQZXJzb25hSWQsIHNlc3Npb25QZXJzb25hSWQpKTtcbiAgfSkpO1xuXG4gIHJldHVybiBjb252ZXJzYXRpb25zLmZpbHRlcigoX2NvbnZlcnNhdGlvbiwgaW5kZXgpID0+IHZpc2liaWxpdHlbaW5kZXhdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlbnN1cmVDb252ZXJzYXRpb25NZXNzYWdpbmdBbGxvd2VkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgZ2V0Q29udmVyc2F0aW9uQnlJZChjb250ZXh0LCBjb252ZXJzYXRpb25JZCk7XG5cbiAgaWYoIWNvbnZlcnNhdGlvbj8uY29udmVyc2F0aW9uSWQgJiYgIWNvbnZlcnNhdGlvbj8uX2tleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgaWYoIWNvbnZlcnNhdGlvbj8uaXNEaXJlY3QpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IHBhcnRpY2lwYW50ID0gQXJyYXkuaXNBcnJheShjb252ZXJzYXRpb24/LnVzZXJzKVxuICAgID8gY29udmVyc2F0aW9uLnVzZXJzLmZpbmQoKHVzZXIpID0+IHBhcnNlSWQoU3RyaW5nKHVzZXI/LnVzZXJJZCB8fCB1c2VyPy5fa2V5IHx8ICcnKSkgIT09IHNlc3Npb25Vc2VySWQpXG4gICAgOiBudWxsO1xuICBjb25zdCBwYXJ0aWNpcGFudFVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKHBhcnRpY2lwYW50Py51c2VySWQgfHwgcGFydGljaXBhbnQ/Ll9rZXkgfHwgJycpKTtcblxuICBpZighc2Vzc2lvblVzZXJJZCB8fCAhcGFydGljaXBhbnRVc2VySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgc2Vzc2lvblVzZXJJZCwgcGFydGljaXBhbnRVc2VySWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyA9IChvcHRpb25zOiBDb252ZXJzYXRpb25PcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25MaXN0QnlVc2VyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBvcHRpb25zPyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb252ZXJzYXRpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VDb252ZXJzYXRpb25PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHt1c2VySWR9YDtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYFxuICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHt1c2VyRG9jSWR9ICR7aGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbn1cbiAgICAgIFNPUlQgYy5hZGRlZCBERVNDXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIHVjIElOIDEuLjEgSU5CT1VORCBjLl9pZCAke2hhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIHUuX2lkICE9ICR7dXNlckRvY0lkfVxuICAgICAgICAgIFJFVFVSTiB1XG4gICAgICApXG4gICAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzfSlcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC50aGVuKChjb252ZXJzYXRpb25zKSA9PiBmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyhjb250ZXh0LCBjb252ZXJzYXRpb25zKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHModXNlcklkcyk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGMgPSBET0NVTUVOVCgke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0pIFJFVFVSTiBjYDtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcblxuICAgIGlmKGNvbnZlcnNhdGlvbikge1xuICAgICAgcmV0dXJuIHsuLi5jb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICAgIH1cblxuICAgIHJldHVybiBhZGREaXJlY3RDb252ZXJzYXRpb24oY29udGV4dCwge2Zyb21JZCwgdG9JZCwgdG9Vc2VyOiB1c2VyfSk7XG4gIH0gY2F0Y2goZGF0YWJhc2VFcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICB0b1VzZXJcbiAgfTogRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIGZvcm1hdEZyb21JZCwgZm9ybWF0VG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKHVzZXJJZHMpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcblxuICAgIGNvbnN0IGluc2VydCA9IHtcbiAgICAgIF9rZXk6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgaXNEaXJlY3Q6IHRydWVcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZWRDb252ZXJzYXRpb24gPSBhd2FpdCBhZGRJdGVtPENvbnZlcnNhdGlvblR5cGU+KGNvbnRleHQsICdjb252ZXJzYXRpb25zJywgaW5zZXJ0KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHVzZXJJZHMubWFwKCh1c2VySWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc0NvbnZlcnNhdGlvbi0ke3VzZXJJZH0tJHtjb252ZXJzYXRpb25JZH1gKTtcbiAgICAgIGNvbnN0IGVkZ2U6IEVkZ2VUeXBlID0ge1xuICAgICAgICBfZnJvbTogYHVzZXJzLyR7dXNlcklkfWAsXG4gICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgX3RvOiBgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuICAgICAgY29uc3QgaW5zZXJ0RWRnZVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtlZGdlfSBJTiBoYXNDb252ZXJzYXRpb24gUkVUVVJOIE5FV2A7XG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShpbnNlcnRFZGdlUXVlcnkpO1xuICAgIH0pKTtcblxuICAgIHJldHVybiB7Li4udXBkYXRlZENvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gIH0gY2F0Y2goZGF0YWJhc2VFcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25uZWN0aW9uVXNlckxpc3QgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBpbmNsdWRlQWxsID0gZmFsc2UsXG4gICAgaXNEaXJlY3RcbiAgfTogQ29udmVyc2F0aW9uVXNlcnNQYXJhbXNcbik6IFByb21pc2U8Q29ubmVjdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29ubmVjdGlvblVzZXJMaXN0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZPUiBjIElOIGNvbm5lY3Rpb25zXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb25uZWN0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uVXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBpbmNsdWRlQWxsID0gZmFsc2UsXG4gICAgaXNEaXJlY3RcbiAgfTogQ29udmVyc2F0aW9uVXNlcnNQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb252ZXJzYXRpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbkJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkID0gYGNvbnZlcnNhdGlvbnMvJHtwYXJzZUlkKGNvbnZlcnNhdGlvbklkKX1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGMuX2lkID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTEVUIHUgPSAoXG4gICAgICBGT1IgaW5Vc2VyLCBpbkVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7Y29udmVyc2F0aW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgICAgUkVUVVJOIGluVXNlclxuICAgIClcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBpZighY29udmVyc2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb252ZXJzYXRpb247XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGVcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb24tJHtzZXNzaW9uSWR9IGApLFxuICAgIGlzRGlyZWN0ID0gZmFsc2UsXG4gICAgbmFtZVxuICB9ID0gY29udmVyc2F0aW9uO1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCB1cGRhdGUgPSB7XG4gICAgaXNEaXJlY3QsXG4gICAgbmFtZVxuICB9O1xuXG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRDb252ZXJzYXRpb25JZFxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSB9XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVXNlclRvQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVXNlclRvQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252ZXJzYXRpb25JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gaGNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChoYXNDb252ZXJzYXRpb25FZGdlKSA9PiB7XG4gICAgICBpZighIWhhc0NvbnZlcnNhdGlvbkVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIGhhc0NvbnZlcnNhdGlvbkVkZ2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb24tJHtmb3JtYXRDb252ZXJzYXRpb25JZH0tJHtmb3JtYXRVc2VySWR9YCk7XG5cbiAgICAgIGNvbnN0IGVkZ2U6IENvbnZlcnNhdGlvblR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiB1c2VyRG9jSWQsXG4gICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgX3RvOiBjb252ZXJzYXRpb25Eb2NJZCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvblxuICAgICAgICAuc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gZWRnZSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWRcbiAgfTogVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG4iXSwibmFtZXMiOlsiY2xvbmVEZWVwIiwiY3JlYXRlSGFzaCIsInBhcnNlSWQiLCJhcWwiLCJsaXRlcmFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiZ2V0TGltaXQiLCJzb3J0SWRzIiwidXNlRGIiLCJhZGRJdGVtIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJnZXRVc2VyQnlJZCIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9uIiwiZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcCIsImNvbnRleHQiLCJmcm9tVXNlcklkIiwidG9Vc2VySWQiLCJmcm9tVXNlciIsInRvVXNlciIsIlByb21pc2UiLCJhbGwiLCJ1c2VySWQiLCJmcm9tUGVyc29uYUlkIiwiU3RyaW5nIiwicGVyc29uYUlkIiwidG9QZXJzb25hSWQiLCJFcnJvciIsIklOVkFMSURfQVVUSEVOVElDQVRJT04iLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsImZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zIiwiY29udmVyc2F0aW9ucyIsInNlc3Npb25QZXJzb25hSWQiLCJzZXNzaW9uIiwibGVuZ3RoIiwidmlzaWJpbGl0eSIsIm1hcCIsImNvbnZlcnNhdGlvbiIsImlzRGlyZWN0IiwicGFydGljaXBhbnQiLCJBcnJheSIsImlzQXJyYXkiLCJ1c2VycyIsImZpbmQiLCJ1c2VyIiwiX2tleSIsInBhcnRpY2lwYW50UGVyc29uYUlkIiwiZmlsdGVyIiwiX2NvbnZlcnNhdGlvbiIsImluZGV4IiwiZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCIsImNvbnZlcnNhdGlvbklkIiwiZ2V0Q29udmVyc2F0aW9uQnlJZCIsInNlc3Npb25Vc2VySWQiLCJwYXJ0aWNpcGFudFVzZXJJZCIsInBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJsaW1pdCIsImdldENvbnZlcnNhdGlvbkxpc3RCeVVzZXIiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJ1c2VyRG9jSWQiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0RGlyZWN0Q29udmVyc2F0aW9uIiwiZnJvbUlkIiwidG9JZCIsImZvcm1hdEZyb21JZCIsImZvcm1hdFRvSWQiLCJ1c2VySWRzIiwic29ydGVkVXNlcklkcyIsImpvaW4iLCJuZXh0IiwiYWRkRGlyZWN0Q29udmVyc2F0aW9uIiwiZGF0YWJhc2VFcnJvciIsImluc2VydCIsInVwZGF0ZWRDb252ZXJzYXRpb24iLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJhZGRlZCIsIkRhdGUiLCJub3ciLCJpbnNlcnRFZGdlUXVlcnkiLCJnZXRDb25uZWN0aW9uVXNlckxpc3QiLCJpbmNsdWRlQWxsIiwiZmlsdGVycyIsInB1c2giLCJnZXRDb252ZXJzYXRpb25Vc2VycyIsInNlc3Npb25JZCIsInNlc3Npb25Eb2NJZCIsImNvbnZlcnNhdGlvbkRvY0lkIiwidXBkYXRlQ29udmVyc2F0aW9uIiwibmFtZSIsImZvcm1hdENvbnZlcnNhdGlvbklkIiwidXBkYXRlIiwiYWRkVXNlclRvQ29udmVyc2F0aW9uIiwiZm9ybWF0VXNlcklkIiwiaGFzQ29udmVyc2F0aW9uRWRnZSIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInNhdmUiLCJyZXR1cm5OZXciLCJkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFRQyxVQUFVLEVBQUVDLE9BQU8sUUFBTywrQkFBK0I7QUFDakUsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFDckMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ25FLFNBQVFDLE9BQU8sUUFBTyxZQUFZO0FBQ2xDLFNBQVFDLDJCQUEyQixFQUFFQywwQkFBMEIsUUFBTyxnQkFBZ0I7QUFDdEYsU0FBUUMsV0FBVyxRQUFPLGFBQWE7QUFnQnZDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyw0QkFBNEJYLFFBQVE7QUFFMUMsTUFBTVkscUNBQXFDLE9BQ3pDQyxTQUNBQyxZQUNBQztJQUVBLE1BQU0sQ0FBQ0MsVUFBVUMsT0FBTyxHQUFHLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQztRQUMzQ1YsWUFBWUksU0FBUztZQUFDTyxRQUFRTjtRQUFVO1FBQ3hDTCxZQUFZSSxTQUFTO1lBQUNPLFFBQVFMO1FBQVE7S0FDdkM7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
|