@cdklabs/cdk-appmod-catalog-blueprints 1.14.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/.jsii +3 -3
  2. package/README.md +29 -28
  3. package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
  4. package/lib/document-processing/agentic-document-processing.js +1 -1
  5. package/lib/document-processing/base-document-processing.js +1 -1
  6. package/lib/document-processing/bedrock-document-processing.js +1 -1
  7. package/lib/document-processing/default-document-processing-config.js +1 -1
  8. package/lib/framework/agents/base-agent.js +1 -1
  9. package/lib/framework/agents/batch-agent.js +1 -1
  10. package/lib/framework/agents/default-agent-config.js +1 -1
  11. package/lib/framework/agents/interactive-agent.js +10 -10
  12. package/lib/framework/agents/knowledge-base/base-knowledge-base.js +1 -1
  13. package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +1 -1
  14. package/lib/framework/bedrock/bedrock.js +1 -1
  15. package/lib/framework/custom-resource/default-runtimes.js +1 -1
  16. package/lib/framework/foundation/access-log.js +1 -1
  17. package/lib/framework/foundation/eventbridge-broker.js +1 -1
  18. package/lib/framework/foundation/network.js +1 -1
  19. package/lib/utilities/data-loader.js +1 -1
  20. package/lib/utilities/lambda-iam-utils.js +1 -1
  21. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  22. package/lib/utilities/observability/cloudwatch-transaction-search.js +1 -1
  23. package/lib/utilities/observability/default-observability-config.js +1 -1
  24. package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
  25. package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
  26. package/lib/utilities/observability/powertools-config.js +1 -1
  27. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  28. package/lib/webapp/frontend-construct.js +1 -1
  29. package/package.json +1 -1
@@ -188,7 +188,7 @@ class StreamingHttpAdapter {
188
188
  }
189
189
  exports.StreamingHttpAdapter = StreamingHttpAdapter;
190
190
  _a = JSII_RTTI_SYMBOL_1;
191
- StreamingHttpAdapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StreamingHttpAdapter", version: "1.14.0" };
191
+ StreamingHttpAdapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StreamingHttpAdapter", version: "1.15.0" };
192
192
  /**
193
193
  * S3-based session manager for persisting conversation state.
194
194
  *
@@ -265,7 +265,7 @@ class S3SessionManager {
265
265
  }
266
266
  exports.S3SessionManager = S3SessionManager;
267
267
  _b = JSII_RTTI_SYMBOL_1;
268
- S3SessionManager[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.S3SessionManager", version: "1.14.0" };
268
+ S3SessionManager[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.S3SessionManager", version: "1.15.0" };
269
269
  /**
270
270
  * Sliding window conversation manager for maintaining recent conversation history.
271
271
  *
@@ -313,7 +313,7 @@ class SlidingWindowConversationManager {
313
313
  }
314
314
  exports.SlidingWindowConversationManager = SlidingWindowConversationManager;
315
315
  _c = JSII_RTTI_SYMBOL_1;
316
- SlidingWindowConversationManager[_c] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.SlidingWindowConversationManager", version: "1.14.0" };
316
+ SlidingWindowConversationManager[_c] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.SlidingWindowConversationManager", version: "1.15.0" };
317
317
  /**
318
318
  * Null conversation manager for stateless interactions.
319
319
  *
@@ -336,7 +336,7 @@ class NullConversationManager {
336
336
  }
337
337
  exports.NullConversationManager = NullConversationManager;
338
338
  _d = JSII_RTTI_SYMBOL_1;
339
- NullConversationManager[_d] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NullConversationManager", version: "1.14.0" };
339
+ NullConversationManager[_d] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NullConversationManager", version: "1.15.0" };
340
340
  /**
341
341
  * Cognito-based authenticator for securing REST API endpoints.
342
342
  *
@@ -459,7 +459,7 @@ class CognitoAuthenticator {
459
459
  }
460
460
  exports.CognitoAuthenticator = CognitoAuthenticator;
461
461
  _e = JSII_RTTI_SYMBOL_1;
462
- CognitoAuthenticator[_e] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CognitoAuthenticator", version: "1.14.0" };
462
+ CognitoAuthenticator[_e] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CognitoAuthenticator", version: "1.15.0" };
463
463
  /**
464
464
  * DynamoDB-based session index for fast user to session lookups.
465
465
  *
@@ -546,7 +546,7 @@ class DynamoDBSessionIndex {
546
546
  }
547
547
  exports.DynamoDBSessionIndex = DynamoDBSessionIndex;
548
548
  _f = JSII_RTTI_SYMBOL_1;
549
- DynamoDBSessionIndex[_f] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DynamoDBSessionIndex", version: "1.14.0" };
549
+ DynamoDBSessionIndex[_f] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DynamoDBSessionIndex", version: "1.15.0" };
550
550
  /**
551
551
  * No-authentication authenticator for development and testing.
552
552
  *
@@ -576,7 +576,7 @@ class NoAuthenticator {
576
576
  }
577
577
  exports.NoAuthenticator = NoAuthenticator;
578
578
  _g = JSII_RTTI_SYMBOL_1;
579
- NoAuthenticator[_g] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NoAuthenticator", version: "1.14.0" };
579
+ NoAuthenticator[_g] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NoAuthenticator", version: "1.15.0" };
580
580
  /**
581
581
  * Lambda hosting adapter for InteractiveAgent.
582
582
  *
@@ -722,7 +722,7 @@ class LambdaHostingAdapter {
722
722
  }
723
723
  exports.LambdaHostingAdapter = LambdaHostingAdapter;
724
724
  _h = JSII_RTTI_SYMBOL_1;
725
- LambdaHostingAdapter[_h] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaHostingAdapter", version: "1.14.0" };
725
+ LambdaHostingAdapter[_h] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaHostingAdapter", version: "1.15.0" };
726
726
  /**
727
727
  * AgentCore Runtime hosting adapter for InteractiveAgent.
728
728
  *
@@ -913,7 +913,7 @@ class AgentCoreRuntimeHostingAdapter {
913
913
  }
914
914
  exports.AgentCoreRuntimeHostingAdapter = AgentCoreRuntimeHostingAdapter;
915
915
  _j = JSII_RTTI_SYMBOL_1;
916
- AgentCoreRuntimeHostingAdapter[_j] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgentCoreRuntimeHostingAdapter", version: "1.14.0" };
916
+ AgentCoreRuntimeHostingAdapter[_j] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgentCoreRuntimeHostingAdapter", version: "1.15.0" };
917
917
  /**
918
918
  * Interactive Agent for real-time conversational AI with SSE streaming.
919
919
  *
@@ -1121,5 +1121,5 @@ class InteractiveAgent extends base_agent_1.BaseAgent {
1121
1121
  }
1122
1122
  exports.InteractiveAgent = InteractiveAgent;
1123
1123
  _k = JSII_RTTI_SYMBOL_1;
1124
- InteractiveAgent[_k] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.InteractiveAgent", version: "1.14.0" };
1124
+ InteractiveAgent[_k] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.InteractiveAgent", version: "1.15.0" };
1125
1125
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9pbnRlcmFjdGl2ZS1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFFdEMsNkJBQTZCO0FBQzdCLDZDQUFpRTtBQUNqRSwrREFTb0M7QUFDcEMsMkVBQWtGO0FBQ2xGLHlEQUF5SDtBQUN6SCwyREFBc0g7QUFDdEgsK0RBQThEO0FBQzlELGlEQUFrRztBQUVsRyx1REFBOEc7QUFDOUcsK0NBQTBGO0FBRTFGLDZDQUF5RDtBQUN6RCwrQ0FBMEU7QUFDMUUsaUVBQTREO0FBQzVELCtDQUFtRTtBQUNuRSxpRUFBMkU7QUFDM0Usd0NBQStDO0FBQy9DLHdEQUFxRDtBQXNFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFDSCxNQUFhLG9CQUFvQjtJQW1CL0IsWUFBWSxRQUFtQyxFQUFFO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxjQUF5QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUZBQXVGLENBQUMsQ0FBQztRQUMzRyxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO1FBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RSxNQUFNLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxRCw0QkFBNEI7UUFDNUIscUVB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YyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLEtBQTRCO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakQsSUFBSSxjQUFjLEdBQUcsQ0FBQyxJQUFJLGNBQWMsR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuSCxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7O0FBbE1ILDRDQW1NQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IER1cmF0aW9uLCBGbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uVHlwZSxcbiAgQ29nbml0b1VzZXJQb29sc0F1dGhvcml6ZXIsXG4gIENvcnMsXG4gIEVuZHBvaW50VHlwZSxcbiAgR2F0ZXdheVJlc3BvbnNlLFxuICBMYW1iZGFJbnRlZ3JhdGlvbixcbiAgUmVzcG9uc2VUeXBlLFxuICBSZXN0QXBpLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgeyBDZm5SdW50aW1lLCBDZm5SdW50aW1lRW5kcG9pbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgeyBVc2VyUG9vbCwgVXNlclBvb2xDbGllbnQsIE1mYSwgQWNjb3VudFJlY292ZXJ5LCBVc2VyUG9vbENsaWVudElkZW50aXR5UHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29nbml0byc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVUeXBlLCBCaWxsaW5nTW9kZSwgSVRhYmxlLCBTdHJlYW1WaWV3VHlwZSwgVGFibGUsIFRhYmxlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBEb2NrZXJJbWFnZUFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjci1hc3NldHMnO1xuaW1wb3J0IHsgSUdyYW50YWJsZSwgUm9sZSwgU2VydmljZVByaW5jaXBhbCwgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElLZXksIEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgSUZ1bmN0aW9uLCBBcmNoaXRlY3R1cmUsIElMYXllclZlcnNpb24sIExheWVyVmVyc2lvbiwgRnVuY3Rpb24sIENvZGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElCdWNrZXQsIEJ1Y2tldCwgQnVja2V0RW5jcnlwdGlvbiwgQmxvY2tQdWJsaWNBY2Nlc3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCYXNlQWdlbnQsIEJhc2VBZ2VudFByb3BzIH0gZnJvbSAnLi9iYXNlLWFnZW50JztcbmltcG9ydCB7IGdlbmVyYXRlS25vd2xlZGdlQmFzZVN5c3RlbVByb21wdEFkZGl0aW9uIH0gZnJvbSAnLi9iYXRjaC1hZ2VudCc7XG5pbXBvcnQgeyBEZWZhdWx0QWdlbnRDb25maWcgfSBmcm9tICcuL2RlZmF1bHQtYWdlbnQtY29uZmlnJztcbmltcG9ydCB7IExhbWJkYUlhbVV0aWxzLCBQb3dlcnRvb2xzQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHsgQmVkcm9ja01vZGVsVXRpbHMgfSBmcm9tICcuLi9iZWRyb2NrJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uL2N1c3RvbS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vZm91bmRhdGlvbic7XG5cbi8qKlxuICogU3RyYXRlZ3kgaW50ZXJmYWNlIGZvciBwbHVnZ2FibGUgY29tbXVuaWNhdGlvbiBtZWNoYW5pc21zLlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBTdHJlYW1pbmdIdHRwQWRhcHRlciAoQVBJIEdhdGV3YXkgUkVTVCBBUEkgd2l0aCByZXNwb25zZSBzdHJlYW1pbmcpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21tdW5pY2F0aW9uQWRhcHRlciB7XG4gIC8qKlxuICAgKiBBdHRhY2ggdGhlIGFkYXB0ZXIgdG8gYSBMYW1iZGEgZnVuY3Rpb24gYW5kIGNyZWF0ZSBjb21tdW5pY2F0aW9uIGluZnJhc3RydWN0dXJlLlxuICAgKiBSZXR1cm5zIHRoZSBwdWJsaWMgZW5kcG9pbnQgVVJMIGZvciBjbGllbnQgY29ubmVjdGlvbnMuXG4gICAqL1xuICBhdHRhY2hUb0Z1bmN0aW9uKGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBMYW1iZGEgZnVuY3Rpb24gcGVybWlzc2lvbiB0byBzZW5kIHJlc3BvbnNlcyBiYWNrIHRvIGNsaWVudHMuXG4gICAqL1xuICBncmFudEludm9rZShsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaHJvdHRsZSBzZXR0aW5ncyBmb3IgUkVTVCBBUEkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhyb3R0bGVTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBSYXRlIGxpbWl0IChyZXF1ZXN0cyBwZXIgc2Vjb25kKS5cbiAgICovXG4gIHJlYWRvbmx5IHJhdGVMaW1pdD86IG51bWJlcjtcblxuICAvKipcbiAgICogQnVyc3QgbGltaXQgKG1heGltdW0gY29uY3VycmVudCByZXF1ZXN0cykuXG4gICAqL1xuICByZWFkb25seSBidXJzdExpbWl0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgU3RyZWFtaW5nSHR0cEFkYXB0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtaW5nSHR0cEFkYXB0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBSRVNUIEFQSSBzdGFnZSBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAncHJvZCdcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhyb3R0bGUgc2V0dGluZ3MgZm9yIFJFU1QgQVBJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyB0aHJvdHRsaW5nXG4gICAqL1xuICByZWFkb25seSB0aHJvdHRsZT86IFRocm90dGxlU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0b3IgZm9yIHNlY3VyaW5nIEFQSSBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFVzZXMgYXV0aGVudGljYXRvciBmcm9tIEludGVyYWN0aXZlQWdlbnRcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0b3I/OiBJQXV0aGVudGljYXRvcjtcblxuICAvKipcbiAgICogSFRUUCBtZXRob2RzIHRvIGFsbG93IGluIENPUlMgcHJlZmxpZ2h0IHJlc3BvbnNlcy5cbiAgICogVXNlIHRoaXMgdG8gZW5hYmxlIGFkZGl0aW9uYWwgbWV0aG9kcyAoR0VULCBERUxFVEUsIFBVVCkgZm9yIGN1c3RvbSByb3V0ZXNcbiAgICogYWRkZWQgdG8gdGhlIFJFU1QgQVBJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ1BPU1QnLCAnT1BUSU9OUyddXG4gICAqL1xuICByZWFkb25seSBjb3JzQWxsb3dNZXRob2RzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogU3RyZWFtaW5nIEhUVFAgYWRhcHRlciBmb3IgcmVhbC10aW1lIGFnZW50IGNvbW11bmljYXRpb24gdmlhIFNTRS5cbiAqXG4gKiBUaGlzIGFkYXB0ZXIgY3JlYXRlcyBhbiBBUEkgR2F0ZXdheSBSRVNUIEFQSSB3aXRoIHJlc3BvbnNlIHN0cmVhbWluZyBlbmFibGVkLFxuICogYWxsb3dpbmcgdGhlIExhbWJkYSBmdW5jdGlvbiB0byBzdHJlYW0gU1NFIChTZXJ2ZXItU2VudCBFdmVudHMpIHJlc3BvbnNlc1xuICogYmFjayB0byBjbGllbnRzIGFzIHRoZSBTdHJhbmRzIEFnZW50IGdlbmVyYXRlcyB0b2tlbnMuXG4gKlxuICogIyMgQXJjaGl0ZWN0dXJlXG4gKlxuICogYGBgXG4gKiBDbGllbnQg4oaSIFBPU1QgL2NoYXQg4oaSIEFQSSBHYXRld2F5IFJFU1QgQVBJIChTVFJFQU0gbW9kZSkg4oaSIExhbWJkYSAoRmFzdEFQSSArIExXQSkg4oaSIEJlZHJvY2tcbiAqIENsaWVudCDihpAgU1NFIHN0cmVhbSDihpAgQVBJIEdhdGV3YXkg4oaQIExhbWJkYSByZXNwb25zZSBzdHJlYW1pbmcg4oaQIEFnZW50IHRva2Vuc1xuICogYGBgXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqUmVzcG9uc2UgU3RyZWFtaW5nKio6IFByb2dyZXNzaXZlIFNTRSBkZWxpdmVyeSB2aWEgQVBJIEdhdGV3YXkgcmVzcG9uc2Ugc3RyZWFtaW5nXG4gKiAtICoqMTUtTWludXRlIFRpbWVvdXQqKjogRXh0ZW5kZWQgdGltZW91dCBmb3IgbG9uZy1ydW5uaW5nIGFnZW50IGNvbnZlcnNhdGlvbnNcbiAqIC0gKipDb2duaXRvIEF1dGgqKjogTmF0aXZlIENPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIG9uIFJFU1QgQVBJXG4gKiAtICoqQ09SUyoqOiBCdWlsdC1pbiBDT1JTIHN1cHBvcnQgZm9yIGJyb3dzZXIgY2xpZW50c1xuICogLSAqKlRocm90dGxpbmcqKjogQ29uZmlndXJhYmxlIHJhdGUgYW5kIGJ1cnN0IGxpbWl0c1xuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuICogaW1wb3J0IHsgSW50ZXJhY3RpdmVBZ2VudCwgU3RyZWFtaW5nSHR0cEFkYXB0ZXIgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogY29uc3QgbXlQcm9tcHQgPSBuZXcgQXNzZXQodGhpcywgJ1Byb21wdCcsIHsgcGF0aDogJy4vcHJvbXB0LnR4dCcgfSk7XG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKHtcbiAqICAgc3RhZ2VOYW1lOiAncHJvZCcsXG4gKiAgIHRocm90dGxlOiB7IHJhdGVMaW1pdDogMTAwLCBidXJzdExpbWl0OiAyMDAgfVxuICogfSk7XG4gKlxuICogY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudCh0aGlzLCAnQWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ0NoYXRBZ2VudCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjogeyBiZWRyb2NrTW9kZWw6IHt9LCBzeXN0ZW1Qcm9tcHQ6IG15UHJvbXB0IH0sXG4gKiAgIGNvbW11bmljYXRpb25BZGFwdGVyOiBhZGFwdGVyXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtaW5nSHR0cEFkYXB0ZXIgaW1wbGVtZW50cyBJQ29tbXVuaWNhdGlvbkFkYXB0ZXIge1xuICAvKipcbiAgICogVGhlIFJFU1QgQVBJIEdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzdEFwaT86IFJlc3RBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbHMgYXV0aG9yaXplciAoaWYgQ29nbml0byBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb2duaXRvQXV0aG9yaXplcj86IENvZ25pdG9Vc2VyUG9vbHNBdXRob3JpemVyO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIGVuZHBvaW50IFVSTC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlFbmRwb2ludD86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTdHJlYW1pbmdIdHRwQWRhcHRlclByb3BzO1xuICBwcml2YXRlIHNjb3BlPzogQ29uc3RydWN0O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdHJlYW1pbmdIdHRwQWRhcHRlclByb3BzID0ge30pIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIHRoZSBhZGFwdGVyIHRvIGEgTGFtYmRhIGZ1bmN0aW9uIGFuZCBjcmVhdGUgUkVTVCBBUEkgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqIENyZWF0ZXMgQVBJIEdhdGV3YXkgUkVTVCBBUEkgd2l0aCBQT1NUIC9jaGF0IGVuZHBvaW50IGFuZCByZXNwb25zZSBzdHJlYW1pbmcuXG4gICAqL1xuICBhdHRhY2hUb0Z1bmN0aW9uKGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zY29wZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1pbmdIdHRwQWRhcHRlciBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggYSBzY29wZSBiZWZvcmUgY2FsbGluZyBhdHRhY2hUb0Z1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhZ2VOYW1lID0gdGhpcy5wcm9wcy5zdGFnZU5hbWUgfHwgJ3Byb2QnO1xuICAgIGNvbnN0IGNvcnNBbGxvd01ldGhvZHMgPSB0aGlzLnByb3BzLmNvcnNBbGxvd01ldGhvZHMgfHwgWydQT1NUJywgJ09QVElPTlMnXTtcbiAgICBjb25zdCBjb3JzQWxsb3dNZXRob2RzU3RyaW5nID0gY29yc0FsbG93TWV0aG9kcy5qb2luKCcsJyk7XG5cbiAgICAvLyBDcmVhdGUgUkVTVCBBUEkgd2l0aCBDT1JTXG4gICAgLy8gVXNlIFJFR0lPTkFMIGVuZHBvaW50IGZvciA1LW1pbnV0ZSBpZGxlIHRpbWVvdXQgKHZzIDMwcyBmb3IgRURHRSkuXG4gICAgLy8gVGhpcyBhbGxvd3MgcmVzcG9uc2Ugc3RyZWFtaW5nIHRvIGV4Y2VlZCBBUEkgR2F0ZXdheSdzIDI5cyBsaW1pdC5cbiAgICBjb25zdCByZXN0QXBpID0gbmV3IFJlc3RBcGkodGhpcy5zY29wZSwgJ0NoYXRBcGknLCB7XG4gICAgICByZXN0QXBpTmFtZTogYCR7U3RhY2sub2YodGhpcy5zY29wZSkuc3RhY2tOYW1lfS1DaGF0QXBpYCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJhY3RpdmUgQWdlbnQgQ2hhdCBBUEkgd2l0aCByZXNwb25zZSBzdHJlYW1pbmcnLFxuICAgICAgZW5kcG9pbnRUeXBlczogW0VuZHBvaW50VHlwZS5SRUdJT05BTF0sXG4gICAgICBkZXBsb3lPcHRpb25zOiB7XG4gICAgICAgIHN0YWdlTmFtZSxcbiAgICAgICAgdGhyb3R0bGluZ1JhdGVMaW1pdDogdGhpcy5wcm9wcy50aHJvdHRsZT8ucmF0ZUxpbWl0LFxuICAgICAgICB0aHJvdHRsaW5nQnVyc3RMaW1pdDogdGhpcy5wcm9wcy50aHJvdHRsZT8uYnVyc3RMaW1pdCxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Q29yc1ByZWZsaWdodE9wdGlvbnM6IHtcbiAgICAgICAgYWxsb3dPcmlnaW5zOiBDb3JzLkFMTF9PUklHSU5TLFxuICAgICAgICBhbGxvd01ldGhvZHM6IGNvcnNBbGxvd01ldGhvZHMsXG4gICAgICAgIGFsbG93SGVhZGVyczogWydDb250ZW50LVR5cGUnLCAnQXV0aG9yaXphdGlvbiddLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAodGhpcyBhcyBhbnkpLnJlc3RBcGkgPSByZXN0QXBpO1xuXG4gICAgLy8gQWRkIENPUlMgaGVhZGVycyB0byBBUEkgR2F0ZXdheSBlcnJvciByZXNwb25zZXMgKDRYWC81WFgpLlxuICAgIC8vIFdpdGhvdXQgdGhlc2UsIHRoZSBDb2duaXRvIGF1dGhvcml6ZXIncyA0MDEgcmVzcG9uc2Ugd29uJ3QgaW5jbHVkZVxuICAgIC8vIEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiBhbmQgdGhlIGJyb3dzZXIgd2lsbCBibG9jayBpdCBhcyBhIENPUlMgZXJyb3IuXG4gICAgbmV3IEdhdGV3YXlSZXNwb25zZSh0aGlzLnNjb3BlLCAnR2F0ZXdheURlZmF1bHQ0WFgnLCB7XG4gICAgICByZXN0QXBpLFxuICAgICAgdHlwZTogUmVzcG9uc2VUeXBlLkRFRkFVTFRfNFhYLFxuICAgICAgcmVzcG9uc2VIZWFkZXJzOiB7XG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiBcIicqJ1wiLFxuICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6IFwiJ0NvbnRlbnQtVHlwZSxBdXRob3JpemF0aW9uJ1wiLFxuICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6IGAnJHtjb3JzQWxsb3dNZXRob2RzU3RyaW5nfSdgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBuZXcgR2F0ZXdheVJlc3BvbnNlKHRoaXMuc2NvcGUsICdHYXRld2F5RGVmYXVsdDVYWCcsIHtcbiAgICAgIHJlc3RBcGksXG4gICAgICB0eXBlOiBSZXNwb25zZVR5cGUuREVGQVVMVF81WFgsXG4gICAgICByZXNwb25zZUhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IFwiJyonXCIsXG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogXCInQ29udGVudC1UeXBlLEF1dGhvcml6YXRpb24nXCIsXG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogYCcke2NvcnNBbGxvd01ldGhvZHNTdHJpbmd9J2AsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIExhbWJkYSBpbnRlZ3JhdGlvblxuICAgIGNvbnN0IGxhbWJkYUludGVncmF0aW9uID0gbmV3IExhbWJkYUludGVncmF0aW9uKGxhbWJkYUZ1bmN0aW9uLCB7XG4gICAgICBwcm94eTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCAvY2hhdCByZXNvdXJjZSB3aXRoIFBPU1QgbWV0aG9kXG4gICAgY29uc3QgY2hhdFJlc291cmNlID0gcmVzdEFwaS5yb290LmFkZFJlc291cmNlKCdjaGF0Jyk7XG5cbiAgICAvLyBEZXRlcm1pbmUgYXV0aG9yaXphdGlvbiB0eXBlXG4gICAgbGV0IGF1dGhvcml6YXRpb25UeXBlID0gQXV0aG9yaXphdGlvblR5cGUuTk9ORTtcbiAgICBsZXQgYXV0aG9yaXplcjogQ29nbml0b1VzZXJQb29sc0F1dGhvcml6ZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hdXRoZW50aWNhdG9yIGluc3RhbmNlb2YgQ29nbml0b0F1dGhlbnRpY2F0b3IgJiYgdGhpcy5wcm9wcy5hdXRoZW50aWNhdG9yLnVzZXJQb29sKSB7XG4gICAgICBhdXRob3JpemVyID0gbmV3IENvZ25pdG9Vc2VyUG9vbHNBdXRob3JpemVyKHRoaXMuc2NvcGUsICdDb2duaXRvQXV0aG9yaXplcicsIHtcbiAgICAgICAgY29nbml0b1VzZXJQb29sczogW3RoaXMucHJvcHMuYXV0aGVudGljYXRvci51c2VyUG9vbF0sXG4gICAgICAgIGF1dGhvcml6ZXJOYW1lOiAnQ29nbml0b0F1dGhvcml6ZXInLFxuICAgICAgfSk7XG4gICAgICAodGhpcyBhcyBhbnkpLmNvZ25pdG9BdXRob3JpemVyID0gYXV0aG9yaXplcjtcbiAgICAgIGF1dGhvcml6YXRpb25UeXBlID0gQXV0aG9yaXphdGlvblR5cGUuQ09HTklUTztcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0TWV0aG9kID0gY2hhdFJlc291cmNlLmFkZE1ldGhvZCgnUE9TVCcsIGxhbWJkYUludGVncmF0aW9uLCB7XG4gICAgICBhdXRob3JpemF0aW9uVHlwZSxcbiAgICAgIGF1dGhvcml6ZXIsXG4gICAgfSk7XG5cbiAgICAvLyBDb25maWd1cmUgcmVzcG9uc2Ugc3RyZWFtaW5nIHZpYSBDZm5NZXRob2QgZXNjYXBlIGhhdGNoXG4gICAgLy8gQVBJIEdhdGV3YXkgUkVTVCBBUEkgcmVzcG9uc2Ugc3RyZWFtaW5nIHJlcXVpcmVzOlxuICAgIC8vIDEuIHJlc3BvbnNlVHJhbnNmZXJNb2RlOiBTVFJFQU0gb24gdGhlIGludGVncmF0aW9uXG4gICAgLy8gMi4gSW50ZWdyYXRpb24gVVJJIHBvaW50aW5nIHRvIC9yZXNwb25zZS1zdHJlYW1pbmctaW52b2NhdGlvbnNcbiAgICBjb25zdCBjZm5NZXRob2QgPSBwb3N0TWV0aG9kLm5vZGUuZGVmYXVsdENoaWxkIGFzIGFueTtcbiAgICBpZiAoY2ZuTWV0aG9kKSB7XG4gICAgICBjZm5NZXRob2QuYWRkUHJvcGVydHlPdmVycmlkZSgnSW50ZWdyYXRpb24uUmVzcG9uc2VUcmFuc2Zlck1vZGUnLCAnU1RSRUFNJyk7XG4gICAgICAvLyBPdmVycmlkZSB0aGUgaW50ZWdyYXRpb24gVVJJIHRvIHVzZSByZXNwb25zZS1zdHJlYW1pbmctaW52b2NhdGlvbnMgcGF0aFxuICAgICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcy5zY29wZSkucmVnaW9uO1xuICAgICAgY2ZuTWV0aG9kLmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICAgICdJbnRlZ3JhdGlvbi5VcmknLFxuICAgICAgICBgYXJuOmF3czphcGlnYXRld2F5OiR7cmVnaW9ufTpsYW1iZGE6cGF0aC8yMDIxLTExLTE1L2Z1bmN0aW9ucy8ke2xhbWJkYUZ1bmN0aW9uLmZ1bmN0aW9uQXJufS9yZXNwb25zZS1zdHJlYW1pbmctaW52b2NhdGlvbnNgLFxuICAgICAgKTtcbiAgICAgIC8vIFNldCBpbnRlZ3JhdGlvbiB0aW1lb3V0IHRvIDE1IG1pbnV0ZXMgKDkwMDAwMCBtcylcbiAgICAgIGNmbk1ldGhvZC5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdJbnRlZ3JhdGlvbi5UaW1lb3V0SW5NaWxsaXMnLCA5MDAwMDApO1xuICAgIH1cblxuICAgIC8vIEdyYW50IEFQSSBHYXRld2F5IHBlcm1pc3Npb24gdG8gaW52b2tlIExhbWJkYSB3aXRoIHJlc3BvbnNlIHN0cmVhbWluZ1xuICAgIGxhbWJkYUZ1bmN0aW9uLmFkZFBlcm1pc3Npb24oJ0FwaUdhdGV3YXlJbnZva2UnLCB7XG4gICAgICBwcmluY2lwYWw6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdhcGlnYXRld2F5LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIHNvdXJjZUFybjogcmVzdEFwaS5hcm5Gb3JFeGVjdXRlQXBpKCksXG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIGdyYW50IEludm9rZVdpdGhSZXNwb25zZVN0cmVhbSBwZXJtaXNzaW9uXG4gICAgbGFtYmRhRnVuY3Rpb24uYWRkUGVybWlzc2lvbignQXBpR2F0ZXdheVN0cmVhbUludm9rZScsIHtcbiAgICAgIHByaW5jaXBhbDogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgICAgc291cmNlQXJuOiByZXN0QXBpLmFybkZvckV4ZWN1dGVBcGkoJ1BPU1QnLCAnL2NoYXQnKSxcbiAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvblVybCcsXG4gICAgfSk7XG5cbiAgICAvLyBDb25zdHJ1Y3QgZW5kcG9pbnQgVVJMXG4gICAgY29uc3QgdXJsID0gcmVzdEFwaS51cmxGb3JQYXRoKCcvY2hhdCcpO1xuICAgICh0aGlzIGFzIGFueSkuYXBpRW5kcG9pbnQgPSB1cmw7XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBMYW1iZGEgZnVuY3Rpb24gcGVybWlzc2lvbnMgZm9yIEFQSSBHYXRld2F5IGludGVncmF0aW9uLlxuICAgKiBGb3IgUkVTVCBBUEkgc3RyZWFtaW5nLCBubyBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGFyZSBuZWVkZWQgYmV5b25kIHRoZSBpbnZva2UgcGVybWlzc2lvbi5cbiAgICovXG4gIGdyYW50SW52b2tlKF9sYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgLy8gUkVTVCBBUEkgc3RyZWFtaW5nIGRvZXNuJ3QgbmVlZCBwb3N0X3RvX2Nvbm5lY3Rpb24gbGlrZSBXZWJTb2NrZXQuXG4gICAgLy8gVGhlIExhbWJkYSBpbnZva2UgcGVybWlzc2lvbiBpcyBhbHJlYWR5IGdyYW50ZWQgaW4gYXR0YWNoVG9GdW5jdGlvbi5cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBhZGFwdGVyIHdpdGggYSBDREsgc2NvcGUuXG4gICAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhdHRhY2hUb0Z1bmN0aW9uIG9yIGdyYW50SW52b2tlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfc2V0U2NvcGUoc2NvcGU6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3Igc2Vzc2lvbiBwZXJzaXN0ZW5jZS5cbiAqXG4gKiBTZXNzaW9uIHN0b3JlcyBtYW5hZ2UgY29udmVyc2F0aW9uIHN0YXRlIHBlcnNpc3RlbmNlIGFjcm9zcyBIVFRQIHJlcXVlc3RzLlxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gKFMzU2Vzc2lvbk1hbmFnZXIpIHVzZXMgUzMgZm9yIGR1cmFibGUgc3RvcmFnZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgU3RyYW5kcy1uYXRpdmUgYFMzU2Vzc2lvbk1hbmFnZXJgIGZyb20gYHN0cmFuZHMuc2Vzc2lvbi5zM19zZXNzaW9uX21hbmFnZXJgIGluc3RlYWQuXG4gKiBUaGUgUHl0aG9uIGhhbmRsZXIgbm93IHVzZXMgU3RyYW5kcy1uYXRpdmUgc2Vzc2lvbiBtYW5hZ2VtZW50IGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNlc3Npb25TdG9yZSB7XG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHVzZWQgZm9yIHNlc3Npb24gc3RvcmFnZSAoaWYgUzMtYmFzZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkJ1Y2tldD86IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gYSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBsYW1iZGFGdW5jdGlvbiAtIFRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIHNlc3Npb24gc3RvcmVcbiAgICovXG4gIGdyYW50UmVhZFdyaXRlKGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiB2b2lkO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgUzNTZXNzaW9uTWFuYWdlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgU3RyYW5kcy1uYXRpdmUgYFMzU2Vzc2lvbk1hbmFnZXJgIGZyb20gYHN0cmFuZHMuc2Vzc2lvbi5zM19zZXNzaW9uX21hbmFnZXJgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUzNTZXNzaW9uTWFuYWdlclByb3BzIHtcbiAgLyoqXG4gICAqIFMzIGJ1Y2tldCBmb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBdXRvLWNyZWF0ZWQgYnVja2V0IHdpdGggS01TIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldD86IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRpbWUtdG8tbGl2ZSBmb3Igc2Vzc2lvbnMuXG4gICAqIFNlc3Npb25zIG9sZGVyIHRoYW4gdGhpcyBkdXJhdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uaG91cnMoMjQpXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uVFRMPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEtNUyBlbmNyeXB0aW9uIGtleSBmb3IgdGhlIHNlc3Npb24gYnVja2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBBdXRvLWNyZWF0ZWQgS01TIGtleSB3aXRoIHJvdGF0aW9uIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBJS2V5O1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHNlc3Npb24gYnVja2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIFMzLWJhc2VkIHNlc3Npb24gbWFuYWdlciBmb3IgcGVyc2lzdGluZyBjb252ZXJzYXRpb24gc3RhdGUuXG4gKlxuICogVXNlcyBTMyBmb3IgZHVyYWJsZSBzdG9yYWdlIG9mIHNlc3Npb24gZGF0YSB3aXRoIGF1dG9tYXRpYyBleHBpcmF0aW9uXG4gKiB2aWEgbGlmZWN5Y2xlIHBvbGljaWVzLiBFYWNoIEhUVFAgcmVxdWVzdCBsb2Fkcy9zYXZlcyBzZXNzaW9uIHN0YXRlLFxuICogZW5hYmxpbmcgbXVsdGktdHVybiBjb252ZXJzYXRpb25zIG92ZXIgc3RhdGVsZXNzIEhUVFAuXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqRHVyYWJsZSBTdG9yYWdlKio6IFNlc3Npb25zIHBlcnNpc3RlZCB0byBTMyBzdXJ2aXZlIExhbWJkYSByZXN0YXJ0c1xuICogLSAqKkF1dG9tYXRpYyBFeHBpcmF0aW9uKio6IExpZmVjeWNsZSBwb2xpY3kgcmVtb3ZlcyBvbGQgc2Vzc2lvbnNcbiAqIC0gKipFbmNyeXB0aW9uKio6IEtNUyBlbmNyeXB0aW9uIGF0IHJlc3RcbiAqIC0gKipDb3N0IE9wdGltaXphdGlvbioqOiBTMyBTdGFuZGFyZCBzdG9yYWdlIHdpdGggbGlmZWN5Y2xlIG1hbmFnZW1lbnRcbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG4gKiBpbXBvcnQgeyBJbnRlcmFjdGl2ZUFnZW50LCBTM1Nlc3Npb25NYW5hZ2VyIH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICogaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG4gKlxuICogY29uc3QgbXlQcm9tcHQgPSBuZXcgQXNzZXQodGhpcywgJ1Byb21wdCcsIHsgcGF0aDogJy4vcHJvbXB0LnR4dCcgfSk7XG4gKiBjb25zdCBzZXNzaW9uTWFuYWdlciA9IG5ldyBTM1Nlc3Npb25NYW5hZ2VyKHRoaXMsICdTZXNzaW9uTWFuYWdlcicsIHtcbiAqICAgc2Vzc2lvblRUTDogRHVyYXRpb24uaG91cnMoNDgpXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHRoaXMsICdBZ2VudCcsIHtcbiAqICAgYWdlbnROYW1lOiAnQ2hhdEFnZW50JyxcbiAqICAgYWdlbnREZWZpbml0aW9uOiB7IGJlZHJvY2tNb2RlbDoge30sIHN5c3RlbVByb21wdDogbXlQcm9tcHQgfSxcbiAqICAgc2Vzc2lvblN0b3JlOiBzZXNzaW9uTWFuYWdlclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgU3RyYW5kcy1uYXRpdmUgYFMzU2Vzc2lvbk1hbmFnZXJgIGZyb20gYHN0cmFuZHMuc2Vzc2lvbi5zM19zZXNzaW9uX21hbmFnZXJgIGluc3RlYWQuXG4gKiBUaGUgUHl0aG9uIGhhbmRsZXIgbm93IHVzZXMgU3RyYW5kcy1uYXRpdmUgc2Vzc2lvbiBtYW5hZ2VtZW50IGF1dG9tYXRpY2FsbHkuXG4gKiBBbiBTMyBidWNrZXQgaXMgc3RpbGwgY3JlYXRlZCBmb3IgdGhlIFN0cmFuZHMgc2Vzc2lvbiBtYW5hZ2VyOyB0aGlzIENESyBjbGFzc1xuICogaXMgbm8gbG9uZ2VyIG5lZWRlZCB0byBjb25maWd1cmUgc2Vzc2lvbiBwZXJzaXN0ZW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFMzU2Vzc2lvbk1hbmFnZXIgaW1wbGVtZW50cyBJU2Vzc2lvblN0b3JlIHtcbiAgLyoqXG4gICAqIFRoZSBTMyBidWNrZXQgdXNlZCBmb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcblxuICAvKipcbiAgICogVGhlIHNlc3Npb24gVFRMIGR1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlc3Npb25UVEw6IER1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTM1Nlc3Npb25NYW5hZ2VyUHJvcHMgPSB7fSkge1xuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgICBjb25zdCBzZXNzaW9uVFRMID0gcHJvcHMuc2Vzc2lvblRUTCB8fCBEdXJhdGlvbi5ob3VycygyNCk7XG5cbiAgICAvLyBVc2UgcHJvdmlkZWQgYnVja2V0IG9yIGNyZWF0ZSBuZXcgb25lXG4gICAgdGhpcy5idWNrZXQgPSBwcm9wcy5idWNrZXQgfHwgbmV3IEJ1Y2tldChzY29wZSwgYCR7aWR9QnVja2V0YCwge1xuICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5LTVMsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBwcm9wcy5lbmNyeXB0aW9uS2V5LFxuICAgICAgcmVtb3ZhbFBvbGljeTogcmVtb3ZhbFBvbGljeSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiByZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdEZWxldGVPbGRTZXNzaW9ucycsXG4gICAgICAgICAgZXhwaXJhdGlvbjogc2Vzc2lvblRUTCxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICB2ZXJzaW9uZWQ6IGZhbHNlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICB9KTtcblxuICAgIHRoaXMuc2Vzc2lvblRUTCA9IHNlc3Npb25UVEw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIFMzIGJ1Y2tldCB1c2VkIGZvciBzZXNzaW9uIHN0b3JhZ2UgKElTZXNzaW9uU3RvcmUgaW50ZXJmYWNlKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2Vzc2lvbkJ1Y2tldCgpOiBJQnVja2V0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQ7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyB0byBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIGdyYW50UmVhZFdyaXRlKGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShsYW1iZGFGdW5jdGlvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJhdGVneSBpbnRlcmZhY2UgZm9yIGNvbnZlcnNhdGlvbiBoaXN0b3J5IG1hbmFnZW1lbnQuXG4gKlxuICogQ29udGV4dCBzdHJhdGVnaWVzIGNvbnRyb2wgaG93IGNvbnZlcnNhdGlvbiBoaXN0b3J5IGlzIG1haW50YWluZWQgYW5kIHByb3ZpZGVkXG4gKiB0byB0aGUgYWdlbnQuIERpZmZlcmVudCBzdHJhdGVnaWVzIGVuYWJsZSBkaWZmZXJlbnQgY29udmVyc2F0aW9uIHBhdHRlcm5zLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBTdHJhbmRzLW5hdGl2ZSBgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXJgIGZyb21cbiAqIGBzdHJhbmRzLmFnZW50LmNvbnZlcnNhdGlvbl9tYW5hZ2VyYCBpbnN0ZWFkLiBUaGUgUHl0aG9uIGhhbmRsZXIgbm93IHVzZXNcbiAqIFN0cmFuZHMtbmF0aXZlIGNvbnZlcnNhdGlvbiBtYW5hZ2VtZW50IGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRleHRTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgY29udGV4dCBtYW5hZ2VyXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFN0cmFuZHMtbmF0aXZlIGBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcmAgZnJvbVxuICogYHN0cmFuZHMuYWdlbnQuY29udmVyc2F0aW9uX21hbmFnZXJgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB0byBrZWVwIGluIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAyMCBtZXNzYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgd2luZG93U2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTbGlkaW5nIHdpbmRvdyBjb252ZXJzYXRpb24gbWFuYWdlciBmb3IgbWFpbnRhaW5pbmcgcmVjZW50IGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuICpcbiAqIEtlZXBzIGEgZml4ZWQtc2l6ZSB3aW5kb3cgb2YgcmVjZW50IG1lc3NhZ2VzLCBhdXRvbWF0aWNhbGx5IGRpc2NhcmRpbmcgb2xkZXJcbiAqIG1lc3NhZ2VzIGFzIG5ldyBvbmVzIGFycml2ZS4gUHJvdmlkZXMgY29uc2lzdGVudCBjb250ZXh0IHNpemUgZm9yIHRoZSBhZ2VudC5cbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG4gKiBpbXBvcnQgeyBJbnRlcmFjdGl2ZUFnZW50LCBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlciB9IGZyb20gJ0BjZGtsYWJzL2Nkay1hcHBtb2QtY2F0YWxvZy1ibHVlcHJpbnRzJztcbiAqXG4gKiBjb25zdCBteVByb21wdCA9IG5ldyBBc3NldCh0aGlzLCAnUHJvbXB0JywgeyBwYXRoOiAnLi9wcm9tcHQudHh0JyB9KTtcbiAqIGNvbnN0IGNvbnRleHRNYW5hZ2VyID0gbmV3IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyKHsgd2luZG93U2l6ZTogMzAgfSk7XG4gKlxuICogY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudCh0aGlzLCAnQWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ0NoYXRBZ2VudCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjogeyBiZWRyb2NrTW9kZWw6IHt9LCBzeXN0ZW1Qcm9tcHQ6IG15UHJvbXB0IH0sXG4gKiAgIGNvbnRleHRTdHJhdGVneTogY29udGV4dE1hbmFnZXJcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFN0cmFuZHMtbmF0aXZlIGBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcmAgZnJvbVxuICogYHN0cmFuZHMuYWdlbnQuY29udmVyc2F0aW9uX21hbmFnZXJgIGluc3RlYWQuIFRoZSBQeXRob24gaGFuZGxlciBub3cgaGFuZGxlc1xuICogY29udmVyc2F0aW9uIHdpbmRvd2luZyBuYXRpdmVseS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyIGltcGxlbWVudHMgSUNvbnRleHRTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBUaGUgd2luZG93IHNpemUgKG51bWJlciBvZiBtZXNzYWdlcyB0byBrZWVwKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3aW5kb3dTaXplOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyUHJvcHMgPSB7fSkge1xuICAgIGNvbnN0IHdpbmRvd1NpemUgPSBwcm9wcy53aW5kb3dTaXplICE9PSB1bmRlZmluZWQgPyBwcm9wcy53aW5kb3dTaXplIDogMjA7XG5cbiAgICBpZiAod2luZG93U2l6ZSA8IDEgfHwgd2luZG93U2l6ZSA+IDEwMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd2luZG93U2l6ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcpO1xuICAgIH1cblxuICAgIHRoaXMud2luZG93U2l6ZSA9IHdpbmRvd1NpemU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgTGFtYmRhIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgQ09OVEVYVF9FTkFCTEVEOiAndHJ1ZScsXG4gICAgICBDT05URVhUX1NUUkFURUdZOiAnU2xpZGluZ1dpbmRvdycsXG4gICAgICBDT05URVhUX1dJTkRPV19TSVpFOiB0aGlzLndpbmRvd1NpemUudG9TdHJpbmcoKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogTnVsbCBjb252ZXJzYXRpb24gbWFuYWdlciBmb3Igc3RhdGVsZXNzIGludGVyYWN0aW9ucy5cbiAqXG4gKiBEaXNhYmxlcyBjb252ZXJzYXRpb24gaGlzdG9yeSwgdHJlYXRpbmcgZWFjaCBtZXNzYWdlIGFzIGluZGVwZW5kZW50LlxuICogVXNlZnVsIGZvciBzdGF0ZWxlc3MgdXNlIGNhc2VzIHdoZXJlIGNvbnRleHQgaXMgbm90IG5lZWRlZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBUaGUgUHl0aG9uIGhhbmRsZXIgbm93IHVzZXMgU3RyYW5kcy1uYXRpdmUgY29udmVyc2F0aW9uIG1hbmFnZW1lbnQuXG4gKiBUbyBkaXNhYmxlIGNvbnZlcnNhdGlvbiBoaXN0b3J5LCBvbWl0IHRoZSBzZXNzaW9uIGJ1Y2tldCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgTnVsbENvbnZlcnNhdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBJQ29udGV4dFN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIExhbWJkYSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENPTlRFWFRfRU5BQkxFRDogJ2ZhbHNlJyxcbiAgICAgIENPTlRFWFRfU1RSQVRFR1k6ICdOdWxsJyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogU3RyYXRlZ3kgaW50ZXJmYWNlIGZvciBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLlxuICpcbiAqIEF1dGhlbnRpY2F0b3JzIGNvbnRyb2wgaG93IEFQSSBlbmRwb2ludHMgYXJlIHNlY3VyZWQuXG4gKiBEaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdmFyaW91cyBhdXRoZW50aWNhdGlvbiBtZXRob2RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdG9yIHtcbiAgLyoqXG4gICAqIEdyYW50IGF1dGhlbnRpY2F0aW9uIHBlcm1pc3Npb25zIHRvIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKi9cbiAgZ3JhbnRBdXRoZW50aWNhdGUobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIExhbWJkYSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIENvZ25pdG9BdXRoZW50aWNhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BdXRoZW50aWNhdG9yUHJvcHMge1xuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBdXRvLWNyZWF0ZWQgVXNlciBQb29sIHdpdGggc2VjdXJlIGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSB1c2VyUG9vbD86IFVzZXJQb29sO1xuXG4gIC8qKlxuICAgKiBDb2duaXRvIFVzZXIgUG9vbCBDbGllbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG8tY3JlYXRlZCBjbGllbnQgd2l0aCBhcHByb3ByaWF0ZSBhdXRoIGZsb3dzXG4gICAqL1xuICByZWFkb25seSB1c2VyUG9vbENsaWVudD86IFVzZXJQb29sQ2xpZW50O1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgQ29nbml0byByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogQ29nbml0by1iYXNlZCBhdXRoZW50aWNhdG9yIGZvciBzZWN1cmluZyBSRVNUIEFQSSBlbmRwb2ludHMuXG4gKlxuICogQ3JlYXRlcyBhIENvZ25pdG8gVXNlciBQb29sIGFuZCBpbnRlZ3JhdGVzIHdpdGggQVBJIEdhdGV3YXkgUkVTVCBBUElcbiAqIHVzaW5nIHRoZSBuYXRpdmUgQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6ZXIgdHlwZS4gQ2xpZW50cyBzZW5kXG4gKiBKV1QgdG9rZW5zIGluIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAqXG4gKiAjIyBGZWF0dXJlc1xuICpcbiAqIC0gKipOYXRpdmUgSldUIFZhbGlkYXRpb24qKjogQVBJIEdhdGV3YXkgdmFsaWRhdGVzIHRva2VucyB3aXRob3V0IGN1c3RvbSBMYW1iZGFcbiAqIC0gKipVc2VyIE1hbmFnZW1lbnQqKjogQnVpbHQtaW4gdXNlciByZWdpc3RyYXRpb24gYW5kIG1hbmFnZW1lbnRcbiAqIC0gKipQYXNzd29yZCBQb2xpY2llcyoqOiBFbmZvcmNlcyBzdHJvbmcgcGFzc3dvcmQgcmVxdWlyZW1lbnRzXG4gKiAtICoqQWNjb3VudCBSZWNvdmVyeSoqOiBFbWFpbC1iYXNlZCBhY2NvdW50IHJlY292ZXJ5XG4gKlxuICogIyMgVXNhZ2VcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuICogaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbiAqIGltcG9ydCB7IEludGVyYWN0aXZlQWdlbnQsIENvZ25pdG9BdXRoZW50aWNhdG9yIH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICpcbiAqIGNvbnN0IG15UHJvbXB0ID0gbmV3IEFzc2V0KHRoaXMsICdQcm9tcHQnLCB7IHBhdGg6ICcuL3Byb21wdC50eHQnIH0pO1xuICogY29uc3QgYXV0aGVudGljYXRvciA9IG5ldyBDb2duaXRvQXV0aGVudGljYXRvcih7XG4gKiAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHRoaXMsICdBZ2VudCcsIHtcbiAqICAgYWdlbnROYW1lOiAnQ2hhdEFnZW50JyxcbiAqICAgYWdlbnREZWZpbml0aW9uOiB7IGJlZHJvY2tNb2RlbDoge30sIHN5c3RlbVByb21wdDogbXlQcm9tcHQgfSxcbiAqICAgYXV0aGVudGljYXRvclxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9BdXRoZW50aWNhdG9yIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0b3Ige1xuICAvKipcbiAgICogVGhlIENvZ25pdG8gVXNlciBQb29sLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sPzogVXNlclBvb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbCBDbGllbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnQ/OiBVc2VyUG9vbENsaWVudDtcblxuICBwcml2YXRlIHNjb3BlPzogQ29uc3RydWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3k7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IENvZ25pdG9BdXRoZW50aWNhdG9yUHJvcHMgPSB7fSkge1xuICAgIHRoaXMudXNlclBvb2wgPSBwcm9wcy51c2VyUG9vbDtcbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50ID0gcHJvcHMudXNlclBvb2xDbGllbnQ7XG4gICAgdGhpcy5yZW1vdmFsUG9saWN5ID0gcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1k7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgYXV0aGVudGljYXRpb24gcGVybWlzc2lvbnMgdG8gYSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIEdyYW50cyBwZXJtaXNzaW9ucyB0byB2ZXJpZnkgQ29nbml0byB0b2tlbnMuXG4gICAqL1xuICBncmFudEF1dGhlbnRpY2F0ZShsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjb3BlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZ25pdG9BdXRoZW50aWNhdG9yIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHNjb3BlIGJlZm9yZSBjYWxsaW5nIGdyYW50QXV0aGVudGljYXRlJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnVzZXJQb29sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgUG9vbCBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIGdyYW50aW5nIHBlcm1pc3Npb25zLiBDYWxsIF9zZXRTY29wZSBmaXJzdC4nKTtcbiAgICB9XG5cbiAgICBsYW1iZGFGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnY29nbml0by1pZHA6R2V0VXNlcicsXG4gICAgICAgICAgJ2NvZ25pdG8taWRwOkFkbWluR2V0VXNlcicsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW3RoaXMudXNlclBvb2wudXNlclBvb2xBcm5dLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7XG4gICAgICBBVVRIX1RZUEU6ICdDb2duaXRvJyxcbiAgICAgIFVTRVJfUE9PTF9JRDogdGhpcy51c2VyUG9vbD8udXNlclBvb2xJZCB8fCAnJyxcbiAgICAgIFVTRVJfUE9PTF9DTElFTlRfSUQ6IHRoaXMudXNlclBvb2xDbGllbnQ/LnVzZXJQb29sQ2xpZW50SWQgfHwgJycsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBhdXRoZW50aWNhdG9yIHdpdGggYSBDREsgc2NvcGUuXG4gICAqIENyZWF0ZXMgVXNlciBQb29sIGFuZCBDbGllbnQgaWYgbm90IHByb3ZpZGVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfc2V0U2NvcGUoc2NvcGU6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcblxuICAgIGlmICghdGhpcy51c2VyUG9vbCkge1xuICAgICAgKHRoaXMgYXMgYW55KS51c2VyUG9vbCA9IG5ldyBVc2VyUG9vbChzY29wZSwgJ1VzZXJQb29sJywge1xuICAgICAgICB1c2VyUG9vbE5hbWU6IGAke1N0YWNrLm9mKHNjb3BlKS5zdGFja05hbWV9LVVzZXJQb29sYCxcbiAgICAgICAgc2VsZlNpZ25VcEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHNpZ25JbkFsaWFzZXM6IHtcbiAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICB1c2VybmFtZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b1ZlcmlmeToge1xuICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBwYXNzd29yZFBvbGljeToge1xuICAgICAgICAgIG1pbkxlbmd0aDogOCxcbiAgICAgICAgICByZXF1aXJlTG93ZXJjYXNlOiB0cnVlLFxuICAgICAgICAgIHJlcXVpcmVVcHBlcmNhc2U6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZURpZ2l0czogdHJ1ZSxcbiAgICAgICAgICByZXF1aXJlU3ltYm9sczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbWZhOiBNZmEuT1BUSU9OQUwsXG4gICAgICAgIG1mYVNlY29uZEZhY3Rvcjoge1xuICAgICAgICAgIHNtczogdHJ1ZSxcbiAgICAgICAgICBvdHA6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFjY291bnRSZWNvdmVyeTogQWNjb3VudFJlY292ZXJ5LkVNQUlMX09OTFksXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IHRoaXMucmVtb3ZhbFBvbGljeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy51c2VyUG9vbENsaWVudCAmJiB0aGlzLnVzZXJQb29sKSB7XG4gICAgICAodGhpcyBhcyBhbnkpLnVzZXJQb29sQ2xpZW50ID0gbmV3IFVzZXJQb29sQ2xpZW50KHNjb3BlLCAnVXNlclBvb2xDbGllbnQnLCB7XG4gICAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgICB1c2VyUG9vbENsaWVudE5hbWU6IGAke1N0YWNrLm9mKHNjb3BlKS5zdGFja05hbWV9LVVzZXJQb29sQ2xpZW50YCxcbiAgICAgICAgYXV0aEZsb3dzOiB7XG4gICAgICAgICAgdXNlclBhc3N3b3JkOiB0cnVlLFxuICAgICAgICAgIHVzZXJTcnA6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlU2VjcmV0OiBmYWxzZSxcbiAgICAgICAgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM6IFtcbiAgICAgICAgICBVc2VyUG9vbENsaWVudElkZW50aXR5UHJvdmlkZXIuQ09HTklUTyxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3Igc2Vzc2lvbiBpbmRleCBzdG9yYWdlLlxuICpcbiAqIFNlc3Npb24gaW5kZXhlcyBwcm92aWRlIGZhc3QgdXNlciB0byBzZXNzaW9uIGxvb2t1cHMgZm9yIGxpc3RpbmcgYW5kIG1hbmFnaW5nIHNlc3Npb25zLlxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gKER5bmFtb0RCU2Vzc2lvbkluZGV4KSB1c2VzIER5bmFtb0RCIGZvciBlZmZpY2llbnQgcXVlcmllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2Vzc2lvbkluZGV4IHtcbiAgLyoqXG4gICAqIEdyYW50IHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBwcmluY2lwYWwgdGhhdCBuZWVkcyBhY2Nlc3MgdG8gdGhlIHNlc3Npb24gaW5kZXhcbiAgICovXG4gIGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgc2Vzc2lvbiBpbmRleFxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIER5bmFtb0RCU2Vzc2lvbkluZGV4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCU2Vzc2lvbkluZGV4UHJvcHMge1xuICAvKipcbiAgICogRXhpc3RpbmcgRHluYW1vREIgdGFibGUgdG8gdXNlLlxuICAgKiBUYWJsZSBtdXN0IGhhdmUgcGFydGl0aW9uIGtleSAndXNlcl9pZCcgKFN0cmluZykgYW5kIHNvcnQga2V5ICdzZXNzaW9uX2lkJyAoU3RyaW5nKS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1jcmVhdGVkIHRhYmxlXG4gICAqL1xuICByZWFkb25seSB0YWJsZT86IElUYWJsZTtcblxuICAvKipcbiAgICogVGltZS10by1saXZlIGZvciBzZXNzaW9uIGluZGV4IHJlY29yZHMuXG4gICAqIFdoZW4gc2V0LCBleHBpcmVkIHJlY29yZHMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBieSBEeW5hbW9EQiBUVEwuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIFRUTCAoc2Vzc2lvbnMgcGVyc2lzdCB1bnRpbCBleHBsaWNpdGx5IGRlbGV0ZWQpXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uVFRMPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEtNUyBrZXkgZm9yIHRhYmxlIGVuY3J5cHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IEFXUyBtYW5hZ2VkIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBJS2V5O1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIER5bmFtb0RCIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIER5bmFtb0RCLWJhc2VkIHNlc3Npb24gaW5kZXggZm9yIGZhc3QgdXNlciB0byBzZXNzaW9uIGxvb2t1cHMuXG4gKlxuICogQ3JlYXRlcyBhIER5bmFtb0RCIHRhYmxlIGluZGV4ZWQgYnkgdXNlcl9pZCAocGFydGl0aW9uIGtleSkgYW5kIHNlc3Npb25faWQgKHNvcnQga2V5KVxuICogZm9yIGVmZmljaWVudCBxdWVyeWluZyBvZiBhIHVzZXIncyBzZXNzaW9ucy4gVGhlIHRhYmxlIHN0b3JlcyBzZXNzaW9uIG1ldGFkYXRhXG4gKiBpbmNsdWRpbmcgY3JlYXRpb24gdGltZSwgbGFzdCB1cGRhdGUgdGltZSwgYW5kIG9wdGlvbmFsIFRUTCBmb3IgYXV0b21hdGljIGNsZWFudXAuXG4gKlxuICogIyMgVGFibGUgU2NoZW1hXG4gKlxuICogLSAqKlBhcnRpdGlvbiBLZXkqKjogdXNlcl9pZCAoU3RyaW5nKSAtIFVzZXIgaWRlbnRpZmllciBmcm9tIGF1dGhlbnRpY2F0aW9uXG4gKiAtICoqU29ydCBLZXkqKjogc2Vzc2lvbl9pZCAoU3RyaW5nKSAtIFVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXJcbiAqIC0gKipBdHRyaWJ1dGVzKio6IGNyZWF0ZWRfYXQsIHVwZGF0ZWRfYXQsIGxhc3RfbWVzc2FnZSwgZXhwaXJlc19hdCAob3B0aW9uYWwpXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqRmFzdCBMb29rdXBzKio6IFF1ZXJ5IGFsbCBzZXNzaW9ucyBmb3IgYSB1c2VyIGluIE8oMSkgdXNpbmcgcGFydGl0aW9uIGtleVxuICogLSAqKkF1dG9tYXRpYyBFeHBpcmF0aW9uKio6IE9wdGlvbmFsIFRUTCByZW1vdmVzIHN0YWxlIHNlc3Npb25zIGF1dG9tYXRpY2FsbHlcbiAqIC0gKipPbi1EZW1hbmQgQ2FwYWNpdHkqKjogUGF5LXBlci1yZXF1ZXN0IGJpbGxpbmcsIG5vIGNhcGFjaXR5IHBsYW5uaW5nIG5lZWRlZFxuICogLSAqKkVuY3J5cHRpb24qKjogQVdTIG1hbmFnZWQgb3IgY3VzdG9tZXItbWFuYWdlZCBLTVMgZW5jcnlwdGlvblxuICpcbiAqICMjIFVzYWdlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbiAqIGltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuICogaW1wb3J0IHsgSW50ZXJhY3RpdmVBZ2VudCwgRHluYW1vREJTZXNzaW9uSW5kZXggfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogY29uc3QgbXlQcm9tcHQgPSBuZXcgQXNzZXQodGhpcywgJ1Byb21wdCcsIHsgcGF0aDogJy4vcHJvbXB0LnR4dCcgfSk7XG4gKiBjb25zdCBzZXNzaW9uSW5kZXggPSBuZXcgRHluYW1vREJTZXNzaW9uSW5kZXgodGhpcywgJ1Nlc3Npb25JbmRleCcsIHtcbiAqICAgc2Vzc2lvblRUTDogRHVyYXRpb24uZGF5cyg3KVxuICogfSk7XG4gKlxuICogY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudCh0aGlzLCAnQWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ0NoYXRBZ2VudCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjogeyBiZWRyb2NrTW9kZWw6IHt9LCBzeXN0ZW1Qcm9tcHQ6IG15UHJvbXB0IH0sXG4gKiAgIHNlc3Npb25JbmRleFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIER5bmFtb0RCU2Vzc2lvbkluZGV4IGltcGxlbWVudHMgSVNlc3Npb25JbmRleCB7XG4gIC8qKlxuICAgKiBUaGUgRHluYW1vREIgdGFibGUgdXNlZCBmb3Igc2Vzc2lvbiBpbmRleCBzdG9yYWdlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlOiBJVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXNzaW9uIFRUTCBkdXJhdGlvbiAoaWYgY29uZmlndXJlZCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvblRUTD86IER1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEeW5hbW9EQlNlc3Npb25JbmRleFByb3BzID0ge30pIHtcbiAgICBjb25zdCByZW1vdmFsUG9saWN5ID0gcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1k7XG5cbiAgICAvLyBVc2UgcHJvdmlkZWQgdGFibGUgb3IgY3JlYXRlIG5ldyBvbmVcbiAgICBpZiAocHJvcHMudGFibGUpIHtcbiAgICAgIHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFibGVQcm9wczogYW55ID0ge1xuICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogJ3VzZXJfaWQnLCB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgICBzb3J0S2V5OiB7IG5hbWU6ICdzZXNzaW9uX2lkJywgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgICAgYmlsbGluZ01vZGU6IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbktleSA/IFRhYmxlRW5jcnlwdGlvbi5DVVNUT01FUl9NQU5BR0VEIDogVGFibGVFbmNyeXB0aW9uLkFXU19NQU5BR0VELFxuICAgICAgICBlbmNyeXB0aW9uS2V5OiBwcm9wcy5lbmNyeXB0aW9uS2V5LFxuICAgICAgICByZW1vdmFsUG9saWN5OiByZW1vdmFsUG9saWN5LFxuICAgICAgICBwb2ludEluVGltZVJlY292ZXJ5OiB0cnVlLFxuICAgICAgICBzdHJlYW06IFN0cmVhbVZpZXdUeXBlLk5FV19BTkRfT0xEX0lNQUdFUyxcbiAgICAgIH07XG5cbiAgICAgIC8vIEVuYWJsZSBUVEwgaWYgc2Vzc2lvblRUTCBpcyBzcGVjaWZpZWRcbiAgICAgIGlmIChwcm9wcy5zZXNzaW9uVFRMKSB7XG4gICAgICAgIHRhYmxlUHJvcHMudGltZVRvTGl2ZUF0dHJpYnV0ZSA9ICdleHBpcmVzX2F0JztcbiAgICAgIH1cblxuICAgICAgdGhpcy50YWJsZSA9IG5ldyBUYWJsZShzY29wZSwgYCR7aWR9VGFibGVgLCB0YWJsZVByb3BzKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlc3Npb25UVEwgPSBwcm9wcy5zZXNzaW9uVFRMO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKi9cbiAgZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIExhbWJkYSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgU0VTU0lPTl9JTkRFWF9UQUJMRTogdGhpcy50YWJsZS50YWJsZU5hbWUsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNlc3Npb25UVEwpIHtcbiAgICAgIGVudi5TRVNTSU9OX0lOREVYX1RUTF9TRUNPTkRTID0gdGhpcy5zZXNzaW9uVFRMLnRvU2Vjb25kcygpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudjtcbiAgfVxufVxuXG4vKipcbiAqIE5vLWF1dGhlbnRpY2F0aW9uIGF1dGhlbnRpY2F0b3IgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nLlxuICpcbiAqIERpc2FibGVzIGF1dGhlbnRpY2F0aW9uIGVudGlyZWx5LCBhbGxvd2luZyBhbnkgY2xpZW50IHRvIGNvbm5lY3RcbiAqIHdpdGhvdXQgY3JlZGVudGlhbHMuIFRoaXMgc2hvdWxkIE9OTFkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnRcbiAqIGFuZCB0ZXN0aW5nIGVudmlyb25tZW50cy5cbiAqXG4gKiAjIyBTZWN1cml0eSBXYXJuaW5nXG4gKlxuICogVGhpcyBhdXRoZW50aWNhdG9yIHByb3ZpZGVzIE5PIHNlY3VyaXR5LiBOZXZlciB1c2UgaW4gcHJvZHVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vQXV0aGVudGljYXRvciBpbXBsZW1lbnRzIElBdXRoZW50aWNhdG9yIHtcbiAgLyoqXG4gICAqIE5vLW9wIGZvciBOb0F1dGhlbnRpY2F0b3Igc2luY2Ugbm8gYXV0aGVudGljYXRpb24gaXMgcGVyZm9ybWVkLlxuICAgKi9cbiAgZ3JhbnRBdXRoZW50aWNhdGUoX2xhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAvLyBObyBwZXJtaXNzaW9ucyBuZWVkZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7XG4gICAgICBBVVRIX1RZUEU6ICdOb25lJyxcbiAgICB9O1xuICB9XG59XG5cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHBhc3NlZCB0byBhIGhvc3RpbmcgYWRhcHRlcidzIGRlcGxveSBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRIb3N0aW5nQ29uZmlnIHtcbiAgLyoqIENESyBzY29wZSBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzLiAqL1xuICByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuICAvKiogQWdlbnQgbmFtZSBpZGVudGlmaWVyLiAqL1xuICByZWFkb25seSBhZ2VudE5hbWU6IHN0cmluZztcbiAgLyoqIElBTSByb2xlIGZvciB0aGUgYWdlbnQgcnVudGltZS4gKi9cbiAgcmVhZG9ubHkgYWdlbnRSb2xlOiBSb2xlO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBvbiB0aGUgcnVudGltZS4gKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBLTVMgZW5jcnlwdGlvbiBrZXkuICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk6IEtleTtcbiAgLyoqIE9wdGlvbmFsIFZQQyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrO1xuICAvKiogTGFtYmRhIGFyY2hpdGVjdHVyZSAoTGFtYmRhIGhvc3Rpbmcgb25seSkuICovXG4gIHJlYWRvbmx5IGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcbiAgLyoqIExhbWJkYSBtZW1vcnkgc2l6ZSBpbiBNQiAoTGFtYmRhIGhvc3Rpbmcgb25seSkuICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgdGltZW91dCAoTGFtYmRhIGhvc3Rpbmcgb25seSkuICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqIFJlc2VydmVkIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyAoTGFtYmRhIGhvc3Rpbmcgb25seSkuICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgbGF5ZXJzIGZyb20gYWdlbnQgZGVmaW5pdGlvbiAoTGFtYmRhIGhvc3Rpbmcgb25seSkuICovXG4gIHJlYWRvbmx5IGxhbWJkYUxheWVycz86IElMYXllclZlcnNpb25bXTtcbiAgLyoqIExhbWJkYSBsYXllcnMgZnJvbSBrbm93bGVkZ2UgYmFzZXMgKExhbWJkYSBob3N0aW5nIG9ubHkpLiAqL1xuICByZWFkb25seSBrbm93bGVkZ2VCYXNlTGF5ZXJzPzogSUxheWVyVmVyc2lvbltdO1xuICAvKiogV2hldGhlciBvYnNlcnZhYmlsaXR5IGlzIGVuYWJsZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuICAvKiogQWdlbnQgdG9vbHMgbG9jYXRpb24gZGVmaW5pdGlvbnMgKEpTT04gc2VyaWFsaXplZCkuICovXG4gIHJlYWRvbmx5IHRvb2xzQ29uZmlnOiBzdHJpbmc7XG4gIC8qKiBTeXN0ZW0gcHJvbXB0IFMzIGJ1Y2tldCBuYW1lLiAqL1xuICByZWFkb25seSBzeXN0ZW1Qcm9tcHRCdWNrZXQ6IHN0cmluZztcbiAgLyoqIFN5c3RlbSBwcm9tcHQgUzMga2V5LiAqL1xuICByZWFkb25seSBzeXN0ZW1Qcm9tcHRLZXk6IHN0cmluZztcbiAgLyoqIEtub3dsZWRnZSBiYXNlIGNvbmZpZ3MgKEpTT04gc2VyaWFsaXplZCkuICovXG4gIHJlYWRvbmx5IGtub3dsZWRnZUJhc2VDb25maWdzPzogc3RyaW5nO1xuICAvKiogS25vd2xlZGdlIGJhc2Ugc3lzdGVtIHByb21wdCBhZGRpdGlvbi4gKi9cbiAgcmVhZG9ubHkga25vd2xlZGdlQmFzZVN5c3RlbVByb21wdEFkZGl0aW9uPzogc3RyaW5nO1xuICAvKiogUmVtb3ZhbCBwb2xpY3kgZm9yIHJlc291cmNlcy4gKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogUmVzdWx0IHJldHVybmVkIGJ5IGEgaG9zdGluZyBhZGFwdGVyJ3MgZGVwbG95IG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudEhvc3RpbmdSZXN1bHQge1xuICAvKiogVGhlIGFnZW50IGVuZHBvaW50IFVSTCBvciBBUk4uICovXG4gIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG4gIC8qKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIChpZiBMYW1iZGEtaG9zdGVkKS4gKi9cbiAgcmVhZG9ubHkgYWdlbnRGdW5jdGlvbj86IElGdW5jdGlvbjtcbiAgLyoqIFRoZSBBZ2VudENvcmUgQ2ZuUnVudGltZSAoaWYgQWdlbnRDb3JlLWhvc3RlZCkuICovXG4gIHJlYWRvbmx5IGNmblJ1bnRpbWU/OiBDZm5SdW50aW1lO1xufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgcGx1Z2dhYmxlIGhvc3RpbmcgYmFja2VuZHMuXG4gKlxuICogSG9zdGluZyBhZGFwdGVycyBlbmNhcHN1bGF0ZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIHRvIHJ1biBhbiBhZ2VudC5cbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGBMYW1iZGFIb3N0aW5nQWRhcHRlcmAgKExhbWJkYSArIExXQSArIEFQSSBHYXRld2F5KS5cbiAqIGBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXJgIHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIHVzaW5nIEFnZW50Q29yZSBSdW50aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElIb3N0aW5nQWRhcHRlciB7XG4gIC8qKlxuICAgKiBUaGUgSUFNIHNlcnZpY2UgcHJpbmNpcGFsIHRoYXQgdGhpcyBob3N0aW5nIGJhY2tlbmQgcmVxdWlyZXMuXG4gICAqXG4gICAqIEJhc2VBZ2VudCB1c2VzIHRoaXMgdG8gY3JlYXRlIHRoZSBhZ2VudCByb2xlIHdpdGggdGhlIGNvcnJlY3QgdHJ1c3QgcG9saWN5LlxuICAgKiBGb3IgZXhhbXBsZSwgTGFtYmRhIGhvc3RpbmcgcmVxdWlyZXMgYGxhbWJkYS5hbWF6b25hd3MuY29tYCB3aGlsZSBBZ2VudENvcmVcbiAgICogaG9zdGluZyByZXF1aXJlcyBgYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbWAuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlUHJpbmNpcGFsOiBTZXJ2aWNlUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBEZXBsb3kgdGhlIGFnZW50IGhvc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgaG9zdGluZ1xuICAgKiBAcmV0dXJucyBUaGUgaG9zdGluZyByZXN1bHQgaW5jbHVkaW5nIGVuZHBvaW50IGFuZCBvcHRpb25hbCByZXNvdXJjZXNcbiAgICovXG4gIGRlcGxveShjb25maWc6IEFnZW50SG9zdGluZ0NvbmZpZyk6IEFnZW50SG9zdGluZ1Jlc3VsdDtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIExhbWJkYUhvc3RpbmdBZGFwdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUhvc3RpbmdBZGFwdGVyUHJvcHMge1xuICAvKipcbiAgICogQ29tbXVuaWNhdGlvbiBhZGFwdGVyIGZvciBjbGllbnQtYWdlbnQgaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IFN0cmVhbWluZ0h0dHBBZGFwdGVyXG4gICAqL1xuICByZWFkb25seSBjb21tdW5pY2F0aW9uQWRhcHRlcj86IElDb21tdW5pY2F0aW9uQWRhcHRlcjtcblxuICAvKipcbiAgICogQXV0aGVudGljYXRvciBmb3Igc2VjdXJpbmcgQVBJIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgQ29nbml0b0F1dGhlbnRpY2F0b3JcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0b3I/OiBJQXV0aGVudGljYXRvcjtcblxuICAvKipcbiAgICogSFRUUCBtZXRob2RzIHRvIGFsbG93IGluIENPUlMgcHJlZmxpZ2h0IHJlc3BvbnNlcy5cbiAgICogVXNlIHRoaXMgdG8gZW5hYmxlIGFkZGl0aW9uYWwgbWV0aG9kcyAoR0VULCBERUxFVEUsIFBVVCkgZm9yIGN1c3RvbSByb3V0ZXNcbiAgICogYWRkZWQgdG8gdGhlIFJFU1QgQVBJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ1BPU1QnLCAnT1BUSU9OUyddXG4gICAqL1xuICByZWFkb25seSBjb3JzQWxsb3dNZXRob2RzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiBtZW1vcnkgc2l6ZSBpbiBNQi5cbiAgICpcbiAgICogQGRlZmF1bHQgMTAyNFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIHRpbWVvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoMTUpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiBhcmNoaXRlY3R1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFyY2hpdGVjdHVyZS5YODZfNjRcbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcblxuICAvKipcbiAgICogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyByZXNlcnZlZCBjb25jdXJyZW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBMYW1iZGEgaG9zdGluZyBhZGFwdGVyIGZvciBJbnRlcmFjdGl2ZUFnZW50LlxuICpcbiAqIERlcGxveXMgdGhlIGFnZW50IGFzIGEgTGFtYmRhIGZ1bmN0aW9uIGJlaGluZCBMYW1iZGEgV2ViIEFkYXB0ZXIgYW5kIEFQSSBHYXRld2F5XG4gKiBSRVNUIEFQSSB3aXRoIHJlc3BvbnNlIHN0cmVhbWluZy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBob3N0aW5nIGJhY2tlbmQuXG4gKlxuICogIyMgQXJjaGl0ZWN0dXJlXG4gKlxuICogYGBgXG4gKiBDbGllbnQg4oaSIFBPU1QgL2NoYXQg4oaSIEFQSSBHYXRld2F5IFJFU1QgQVBJIChTVFJFQU0pIOKGkiBMYW1iZGEgKEZhc3RBUEkgKyBMV0EpIOKGkiBCZWRyb2NrXG4gKiBDbGllbnQg4oaQIFNTRSBzdHJlYW0g4oaQIEFQSSBHYXRld2F5IOKGkCBMYW1iZGEgcmVzcG9uc2Ugc3RyZWFtaW5nIOKGkCBBZ2VudCB0b2tlbnNcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhSG9zdGluZ0FkYXB0ZXIgaW1wbGVtZW50cyBJSG9zdGluZ0FkYXB0ZXIge1xuICAvKiogVGhlIGNvbW11bmljYXRpb24gYWRhcHRlci4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbW11bmljYXRpb25BZGFwdGVyPzogSUNvbW11bmljYXRpb25BZGFwdGVyO1xuICAvKiogVGhlIGF1dGhlbnRpY2F0b3IuICovXG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdG9yPzogSUF1dGhlbnRpY2F0b3I7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTGFtYmRhSG9zdGluZ0FkYXB0ZXJQcm9wcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTGFtYmRhSG9zdGluZ0FkYXB0ZXJQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2VQcmluY2lwYWwoKSB7IHJldHVybiBuZXcgU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKTsgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3kgTGFtYmRhICsgTFdBICsgQVBJIEdhdGV3YXkgaG9zdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAgICovXG4gIGRlcGxveShjb25maWc6IEFnZW50SG9zdGluZ0NvbmZpZyk6IEFnZW50SG9zdGluZ1Jlc3VsdCB7XG4gICAgY29uc3Qgc2NvcGUgPSBjb25maWcuc2NvcGU7XG5cbiAgICAvLyBJbml0aWFsaXplIGF1dGhlbnRpY2F0b3JcbiAgICBjb25zdCBhdXRoZW50aWNhdG9yID0gdGhpcy5wcm9wcy5hdXRoZW50aWNhdG9yICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5wcm9wcy5hdXRoZW50aWNhdG9yXG4gICAgICA6IG5ldyBDb2duaXRvQXV0aGVudGljYXRvcigpO1xuICAgICh0aGlzIGFzIGFueSkuYXV0aGVudGljYXRvciA9IGF1dGhlbnRpY2F0b3I7XG5cbiAgICBpZiAoYXV0aGVudGljYXRvciBpbnN0YW5jZW9mIENvZ25pdG9BdXRoZW50aWNhdG9yKSB7XG4gICAgICBhdXRoZW50aWNhdG9yLl9zZXRTY29wZShzY29wZSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBjb21tdW5pY2F0aW9uIGFkYXB0ZXJcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5wcm9wcy5jb21tdW5pY2F0aW9uQWRhcHRlciB8fCBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoe1xuICAgICAgYXV0aGVudGljYXRvcixcbiAgICAgIGNvcnNBbGxvd01ldGhvZHM6IHRoaXMucHJvcHMuY29yc0FsbG93TWV0aG9kcyxcbiAgICB9KTtcbiAgICAodGhpcyBhcyBhbnkpLmNvbW11bmljYXRpb25BZGFwdGVyID0gYWRhcHRlcjtcblxuICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgU3RyZWFtaW5nSHR0cEFkYXB0ZXIpIHtcbiAgICAgIGFkYXB0ZXIuX3NldFNjb3BlKHNjb3BlKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAuLi5jb25maWcuZW52aXJvbm1lbnQsXG4gICAgICAvLyBMYW1iZGEgV2ViIEFkYXB0ZXIgY29uZmlndXJhdGlvblxuICAgICAgQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVI6ICcvb3B0L2Jvb3RzdHJhcCcsXG4gICAgICBBV1NfTFdBX0lOVk9LRV9NT0RFOiAncmVzcG9uc2Vfc3RyZWFtJyxcbiAgICAgIEFXU19MV0FfUkVBRElORVNTX0NIRUNLX1BBVEg6ICcvaGVhbHRoJyxcbiAgICAgIEFXU19MV0FfUE9SVDogJzgwODAnLFxuICAgICAgUE9SVDogJzgwODAnLFxuICAgICAgLi4uYXV0aGVudGljYXRvci5lbnZpcm9ubWVudFZhcmlhYmxlcygpLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgTGFtYmRhIGZ1bmN0aW9uIHdpdGggTGFtYmRhIFdlYiBBZGFwdGVyIGxheWVyXG4gICAgY29uc3QgeyBhY2NvdW50LCByZWdpb24gfSA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBjb25zdCBhZ2VudExhbWJkYUxvZ1Blcm1pc3Npb25zUmVzdWx0ID0gTGFtYmRhSWFtVXRpbHMuY3JlYXRlTG9nc1Blcm1pc3Npb25zKHtcbiAgICAgIGFjY291bnQsXG4gICAgICByZWdpb24sXG4gICAgICBzY29wZSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogY29uZmlnLmFnZW50TmFtZSxcbiAgICAgIGVuYWJsZU9ic2VydmFiaWxpdHk6IGNvbmZpZy5lbmFibGVPYnNlcnZhYmlsaXR5LFxuICAgIH0pO1xuXG4gICAgLy8gTGFtYmRhIFdlYiBBZGFwdGVyIGxheWVyXG4gICAgY29uc3Qgd2ViQWRhcHRlckxheWVyID0gTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXG4gICAgICBzY29wZSxcbiAgICAgICdMYW1iZGFXZWJBZGFwdGVyTGF5ZXInLFxuICAgICAgYGFybjphd3M6bGFtYmRhOiR7cmVnaW9ufTo3NTMyNDA1OTgwNzU6bGF5ZXI6TGFtYmRhQWRhcHRlckxheWVyWDg2OjI1YCxcbiAgICApO1xuXG4gICAgY29uc3QgYWxsTGF5ZXJzOiBJTGF5ZXJWZXJzaW9uW10gPSBbd2ViQWRhcHRlckxheWVyXTtcbiAgICBpZiAoY29uZmlnLmxhbWJkYUxheWVycykge1xuICAgICAgYWxsTGF5ZXJzLnB1c2goLi4uY29uZmlnLmxhbWJkYUxheWVycyk7XG4gICAgfVxuICAgIGlmIChjb25maWcua25vd2xlZGdlQmFzZUxheWVycyAmJiBjb25maWcua25vd2xlZGdlQmFzZUxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxMYXllcnMucHVzaCguLi5jb25maWcua25vd2xlZGdlQmFzZUxheWVycyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2ludGVyYWN0aXZlLWFnZW50LWhhbmRsZXInKTtcblxuICAgIC8vIEFsbCBQeXRob24gdmVyc2lvbiByZWZlcmVuY2VzIGRlcml2ZWQgZnJvbSBEZWZhdWx0UnVudGltZXMuUFlUSE9OXG4gICAgY29uc3QgcHl0aG9uUnVudGltZSA9IERlZmF1bHRSdW50aW1lcy5QWVRIT047XG4gICAgY29uc3QgcHlWZXJzaW9uID0gcHl0aG9uUnVudGltZS5uYW1lLnJlcGxhY2UoJ3B5dGhvbicsICcnKTsgLy8gZS5nLiBcIjMuMTNcIlxuXG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gdGhpcy5wcm9wcy5hcmNoaXRlY3R1cmUgfHwgY29uZmlnLmFyY2hpdGVjdHVyZSB8fCBBcmNoaXRlY3R1cmUuWDg2XzY0O1xuICAgIGNvbnN0IG1lbW9yeVNpemUgPSB0aGlzLnByb3BzLm1lbW9yeVNpemUgfHwgY29uZmlnLm1lbW9yeVNpemUgfHwgMTAyNDtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0IHx8IGNvbmZpZy50aW1lb3V0IHx8IER1cmF0aW9uLm1pbnV0ZXMoMTUpO1xuICAgIGNvbnN0IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPSB0aGlzLnByb3BzLnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPz8gY29uZmlnLnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM7XG5cbiAgICBjb25zdCBhZ2VudEZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHNjb3BlLCAnSW50ZXJhY3RpdmVBZ2VudEZ1bmN0aW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBhZ2VudExhbWJkYUxvZ1Blcm1pc3Npb25zUmVzdWx0LnVuaXF1ZUZ1bmN0aW9uTmFtZSxcbiAgICAgIGFyY2hpdGVjdHVyZSxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGhhbmRsZXJQYXRoLCB7XG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgaW1hZ2U6IHB5dGhvblJ1bnRpbWUuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgICAnYmFzaCcsICctYycsXG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0ICYmIGNwIC1hIC4gL2Fzc2V0LW91dHB1dCcsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBsb2NhbDoge1xuICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvYyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgICAgICAgICAgY29uc3QgcHl0aG9uQ2FuZGlkYXRlcyA9IFtgcHl0aG9uJHtweVZlcnNpb259YCwgJ3B5dGhvbjMnLCAncHl0aG9uJ107XG4gICAgICAgICAgICAgICAgbGV0IHB5dGhvbkJpbiA9ICdweXRob24zJztcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBweXRob25DYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXIgPSBwcm9jLmV4ZWNTeW5jKGAke2NhbmRpZGF0ZX0gLS12ZXJzaW9uIDI+JjFgLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB2ZXIubWF0Y2goL1B5dGhvbiAoXFxkKylcXC4oXFxkKykvKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIChwYXJzZUludChtYXRjaFsxXSkgPiAzIHx8IChwYXJzZUludChtYXRjaFsxXSkgPT09IDMgJiYgcGFyc2VJbnQobWF0Y2hbMl0pID49IDExKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBweXRob25CaW4gPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvYy5leGVjU3luYyhcbiAgICAgICAgICAgICAgICAgIGAke3B5dGhvbkJpbn0gLW0gcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCBcIiR7b3V0cHV0RGlyfVwiIC0tcGxhdGZvcm0gbWFueWxpbnV4MjAxNF94ODZfNjQgLS1vbmx5LWJpbmFyeT06YWxsOiAtLXB5dGhvbi12ZXJzaW9uICR7cHlWZXJzaW9ufWAsXG4gICAgICAgICAgICAgICAgICB7IGN3ZDogaGFuZGxlclBhdGgsIHN0ZGlvOiAnaW5oZXJpdCcgfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHByb2MuZXhlY1N5bmMoXG4gICAgICAgICAgICAgICAgICBgY3AgLXIgLiBcIiR7b3V0cHV0RGlyfVwiYCxcbiAgICAgICAgICAgICAgICAgIHsgY3dkOiBoYW5kbGVyUGF0aCwgc3RkaW86ICdpbmhlcml0JyB9LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICByb2xlOiBjb25maWcuYWdlbnRSb2xlLFxuICAgICAgaGFuZGxlcjogJ3J1bi5zaCcsXG4gICAgICBydW50aW1lOiBweXRob25SdW50aW1lLFxuICAgICAgbGF5ZXJzOiBhbGxMYXllcnMsXG4gICAgICB0aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIGVudmlyb25tZW50OiBlbnYsXG4gICAgICBlbnZpcm9ubWVudEVuY3J5cHRpb246IGNvbmZpZy5lbmNyeXB0aW9uS2V5LFxuICAgICAgdnBjOiBjb25maWcubmV0d29yayA/IGNvbmZpZy5uZXR3b3JrLnZwYyA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY1N1Ym5ldHM6IGNvbmZpZy5uZXR3b3JrID8gY29uZmlnLm5ldHdvcmsuYXBwbGljYXRpb25TdWJuZXRTZWxlY3Rpb24oKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBsb2cgcGVybWlzc2lvbnNcbiAgICBmb3IgKGNvbnN0IHMgb2YgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC5wb2xpY3lTdGF0ZW1lbnRzKSB7XG4gICAgICBjb25maWcuYWdlbnRSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHMpO1xuICAgIH1cblxuICAgIC8vIEdyYW50IGF1dGhlbnRpY2F0b3IgcGVybWlzc2lvbnNcbiAgICBpZiAoYXV0aGVudGljYXRvcikge1xuICAgICAgYXV0aGVudGljYXRvci5ncmFudEF1dGhlbnRpY2F0ZShhZ2VudEZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggY29tbXVuaWNhdGlvbiBhZGFwdGVyIGFuZCBnZXQgZW5kcG9pbnRcbiAgICBjb25zdCBlbmRwb2ludCA9IGFkYXB0ZXIuYXR0YWNoVG9GdW5jdGlvbihhZ2VudEZ1bmN0aW9uKTtcbiAgICBhZGFwdGVyLmdyYW50SW52b2tlKGFnZW50RnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHsgZW5kcG9pbnQsIGFnZW50RnVuY3Rpb24gfTtcbiAgfVxufVxuXG4vKipcbiAqIEN1c3RvbSBKV1QgYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciBBZ2VudENvcmUgUnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudENvcmVKd3RBdXRob3JpemVyQ29uZmlnIHtcbiAgLyoqIE9JREMgZGlzY292ZXJ5IFVSTC4gKi9cbiAgcmVhZG9ubHkgZGlzY292ZXJ5VXJsOiBzdHJpbmc7XG4gIC8qKiBBbGxvd2VkIGF1ZGllbmNlcy4gKi9cbiAgcmVhZG9ubHkgYWxsb3dlZEF1ZGllbmNlPzogc3RyaW5nW107XG4gIC8qKiBBbGxvd2VkIGNsaWVudCBJRHMuICovXG4gIHJlYWRvbmx5IGFsbG93ZWRDbGllbnRzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyUHJvcHMge1xuICAvKipcbiAgICogRUNSIGNvbnRhaW5lciBpbWFnZSBVUkkuIElmIG5vdCBwcm92aWRlZCwgYnVpbGRzIGZyb20gdGhlIGJ1bmRsZWQgaGFuZGxlciBzb3VyY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IEJ1aWxkcyBmcm9tIGFnZW50Y29yZS1hZ2VudC1oYW5kbGVyIGRpcmVjdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVySW1hZ2VVcmk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgbW9kZTogJ1BVQkxJQycgb3IgJ1ZQQycuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdQVUJMSUMnXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrTW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIEpXVCBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIE9taXQgZm9yIElBTS1vbmx5IGF1dGguXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Kd3RBdXRob3JpemVyPzogQWdlbnRDb3JlSnd0QXV0aG9yaXplckNvbmZpZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgY29uZmlndXJhdGlvbjogJ0hUVFAnIHwgJ01DUCcgfCAnQTJBJy5cbiAgICpcbiAgICogQGRlZmF1bHQgJ0hUVFAnXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgZW5kcG9pbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1nZW5lcmF0ZWQgZnJvbSBhZ2VudCBuYW1lXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQWdlbnRDb3JlIFJ1bnRpbWUgaG9zdGluZyBhZGFwdGVyIGZvciBJbnRlcmFjdGl2ZUFnZW50LlxuICpcbiAqIERlcGxveXMgdGhlIGFnZW50IGFzIGEgY29udGFpbmVyIHJ1bm5pbmcgb24gQWdlbnRDb3JlIFJ1bnRpbWUgKG1pY3JvVk0pLlxuICogVXNlcyBMMSBjb25zdHJ1Y3RzIGBDZm5SdW50aW1lYCBhbmQgYENmblJ1bnRpbWVFbmRwb2ludGAgZnJvbVxuICogYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYC5cbiAqXG4gKiAjIyBBcmNoaXRlY3R1cmVcbiAqXG4gKiBgYGBcbiAqIENsaWVudCDihpIgQWdlbnRDb3JlIFJ1bnRpbWUgRW5kcG9pbnQg4oaSIENvbnRhaW5lciAoRmFzdEFQSSBvbiBwb3J0IDgwODApIOKGkiBCZWRyb2NrXG4gKiBgYGBcbiAqXG4gKiAjIyBGZWF0dXJlc1xuICpcbiAqIC0gKipTZXNzaW9uIElzb2xhdGlvbioqOiBtaWNyb1ZNIHByb3ZpZGVzIHBlci1zZXNzaW9uIGlzb2xhdGlvbiAobm8gUzMgc2Vzc2lvbiBidWNrZXQgbmVlZGVkKVxuICogLSAqKk1hbmFnZWQgSW5mcmFzdHJ1Y3R1cmUqKjogTm8gTGFtYmRhIGNvbGQgc3RhcnRzIG9yIHRpbWVvdXQgbGltaXRzXG4gKiAtICoqTXVsdGlwbGUgUHJvdG9jb2xzKio6IEhUVFAsIE1DUCwgb3IgQTJBIHByb3RvY29sIHN1cHBvcnRcbiAqIC0gKipDb250YWluZXItQmFzZWQqKjogU3RhbmRhcmQgRG9ja2VyIGltYWdlIGRlcGxveW1lbnRcbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG4gKiBpbXBvcnQgeyBJbnRlcmFjdGl2ZUFnZW50LCBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogZGVjbGFyZSBjb25zdCBteVByb21wdDogQXNzZXQ7XG4gKlxuICogbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0FnZW50Jywge1xuICogICBhZ2VudE5hbWU6ICdNeUNoYXRib3QnLFxuICogICBhZ2VudERlZmluaXRpb246IHsgYmVkcm9ja01vZGVsOiB7fSwgc3lzdGVtUHJvbXB0OiBteVByb21wdCB9LFxuICogICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gKiAgICAgbmV0d29ya01vZGU6ICdQVUJMSUMnLFxuICogICB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIgaW1wbGVtZW50cyBJSG9zdGluZ0FkYXB0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXJQcm9wcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyUHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuXG4gIGdldCBzZXJ2aWNlUHJpbmNpcGFsKCkgeyByZXR1cm4gbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nKTsgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3kgQWdlbnRDb3JlIFJ1bnRpbWUgaG9zdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAgICovXG4gIGRlcGxveShjb25maWc6IEFnZW50SG9zdGluZ0NvbmZpZyk6IEFnZW50SG9zdGluZ1Jlc3VsdCB7XG4gICAgY29uc3Qgc2NvcGUgPSBjb25maWcuc2NvcGU7XG4gICAgY29uc3QgbmV0d29ya01vZGUgPSB0aGlzLnByb3BzLm5ldHdvcmtNb2RlIHx8ICdQVUJMSUMnO1xuXG4gICAgLy8gQnVpbGQgb3IgcmVmZXJlbmNlIGNvbnRhaW5lciBpbWFnZVxuICAgIGxldCBjb250YWluZXJVcmk6IHN0cmluZztcbiAgICBpZiAodGhpcy5wcm9wcy5jb250YWluZXJJbWFnZVVyaSkge1xuICAgICAgY29udGFpbmVyVXJpID0gdGhpcy5wcm9wcy5jb250YWluZXJJbWFnZVVyaTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2FnZW50Y29yZS1hZ2VudC1oYW5kbGVyJyk7XG4gICAgICBjb25zdCBpbWFnZUFzc2V0ID0gbmV3IERvY2tlckltYWdlQXNzZXQoc2NvcGUsICdBZ2VudENvcmVIYW5kbGVySW1hZ2UnLCB7XG4gICAgICAgIGRpcmVjdG9yeTogaGFuZGxlclBhdGgsXG4gICAgICB9KTtcbiAgICAgIGNvbnRhaW5lclVyaSA9IGltYWdlQXNzZXQuaW1hZ2VVcmk7XG4gICAgfVxuXG4gICAgLy8gUmV1c2UgdGhlIHNpbmdsZSBhZ2VudFJvbGUgKGFscmVhZHkgaGFzIGJlZHJvY2stYWdlbnRjb3JlIHRydXN0IGZyb20gQmFzZUFnZW50KS5cbiAgICAvLyBPbmx5IGFkZCBFQ1IgcHVsbCBwZXJtaXNzaW9ucyDigJQgYWxsIG90aGVyIHBlcm1pc3Npb25zIChCZWRyb2NrIEludm9rZU1vZGVsLFxuICAgIC8vIFMzIHRvb2wgYXNzZXRzLCBLQiBhY2Nlc3MsIHNlc3Npb24gYnVja2V0LCBvYnNlcnZhYmlsaXR5KSBhcmUgYWxyZWFkeSBncmFudGVkXG4gICAgLy8gYnkgQmFzZUFnZW50IG9uIGNvbmZpZy5hZ2VudFJvbGUuXG4gICAgY29uc3QgZWNyUG9saWN5UmVzdWx0ID0gY29uZmlnLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAnZWNyOkJhdGNoR2V0SW1hZ2UnLFxuICAgICAgICAnZWNyOkdldEF1dGhvcml6YXRpb25Ub2tlbicsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG5cbiAgICAvLyBBZGQgQURPVCBvYnNlcnZhYmlsaXR5IHBlcm1pc3Npb25zIHdoZW4gZW5hYmxlZC5cbiAgICAvLyBUaGUgY29udGFpbmVyIERvY2tlcmZpbGUgdXNlcyBgb3BlbnRlbGVtZXRyeS1pbnN0cnVtZW50YCBhcyBpdHMgQ01EIHdyYXBwZXI7XG4gICAgLy8gQURPVCBuZWVkcyB0aGVzZSBwZXJtaXNzaW9ucyB0byBleHBvcnQgdHJhY2VzLCBsb2dzLCBhbmQgbWV0cmljcyBmcm9tIHRoZSBjb250YWluZXIuXG4gICAgLy8gTm90ZTogV2UgdXNlIGV4cGxpY2l0IHN0YXRlbWVudHMgaW5zdGVhZCBvZiBDbG91ZFdhdGNoTGFtYmRhQXBwbGljYXRpb25TaWduYWxzRXhlY3V0aW9uUm9sZVBvbGljeVxuICAgIC8vIGJlY2F1c2UgdGhhdCBtYW5hZ2VkIHBvbGljeSBvbmx5IGNvdmVycyAvYXdzL2FwcGxpY2F0aW9uLXNpZ25hbHMvZGF0YSBsb2cgZ3JvdXBcbiAgICAvLyBhbmQgbWlzc2VzIHBlcm1pc3Npb25zIEFET1QgbmVlZHMgKERlc2NyaWJlTG9nR3JvdXBzLCBEZXNjcmliZUxvZ1N0cmVhbXMsIFB1dE1ldHJpY0RhdGEpLlxuICAgIGlmIChjb25maWcuZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgY29uZmlnLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ0dyb3VwcycsXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pKTtcbiAgICAgIGNvbmZpZy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6UHV0TWV0cmljRGF0YScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgY29udGFpbmVyXG4gICAgY29uc3QgeyByZWdpb24sIGFjY291bnQgfSA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBjb25zdCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLy8gVW5saWtlIExhbWJkYSwgQWdlbnRDb3JlIGNvbnRhaW5lcnMgZG9uJ3QgZ2V0IEFXU19SRUdJT04gYXV0b21hdGljYWxseS5cbiAgICAgIC8vIGJvdG8zIGFuZCBvdGhlciBBV1MgU0RLcyBuZWVkIGl0IHRvIG1ha2UgQVBJIGNhbGxzLlxuICAgICAgQVdTX1JFR0lPTjogcmVnaW9uLFxuICAgICAgQVdTX0RFRkFVTFRfUkVHSU9OOiByZWdpb24sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZW52aXJvbm1lbnQpKSB7XG4gICAgICBlbnZWYXJzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBBR0VOVF9PQlNFUlZBQklMSVRZX0VOQUJMRUQgYW5kIE9URUxfKiBlbnYgdmFycyBhcmUgTk9UIHNldCBoZXJlLlxuICAgIC8vIEZvciBBZ2VudENvcmUtaG9zdGVkIGFnZW50cywgdGhlIEFET1QgYXV0by1pbnN0cnVtZW50YXRpb24gdmlhXG4gICAgLy8gYG9wZW50ZWxlbWV0cnktaW5zdHJ1bWVudGAgaW4gdGhlIERvY2tlcmZpbGUgQ01EIGhhbmRsZXMgdHJhY2Uvc3BhblxuICAgIC8vIGV4cG9ydCBhdXRvbWF0aWNhbGx5LiBUaGVzZSBlbnYgdmFycyBhcmUgb25seSBuZWVkZWQgZm9yIGFnZW50c1xuICAgIC8vIGhvc3RlZCBvdXRzaWRlIG9mIEFnZW50Q29yZS5cblxuICAgIC8vIEJ1aWxkIG5ldHdvcmsgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IG5ldHdvcmtDb25maWd1cmF0aW9uOiBhbnkgPSB7XG4gICAgICBuZXR3b3JrTW9kZSxcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgYXV0aG9yaXphdGlvbiBjb25maWd1cmF0aW9uIGlmIEpXVCBhdXRob3JpemVyIGlzIHNwZWNpZmllZFxuICAgIGNvbnN0IGF1dGhDb25maWcgPSB0aGlzLnByb3BzLmN1c3RvbUp3dEF1dGhvcml6ZXIgPyB7XG4gICAgICBjdXN0b21Kd3RBdXRob3JpemVyOiB7XG4gICAgICAgIGRpc2NvdmVyeVVybDogdGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyLmRpc2NvdmVyeVVybCxcbiAgICAgICAgYWxsb3dlZEF1ZGllbmNlOiB0aGlzLnByb3BzLmN1c3RvbUp3dEF1dGhvcml6ZXIuYWxsb3dlZEF1ZGllbmNlLFxuICAgICAgICBhbGxvd2VkQ2xpZW50czogdGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyLmFsbG93ZWRDbGllbnRzLFxuICAgICAgfSxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQ3JlYXRlIENmblJ1bnRpbWVcbiAgICBjb25zdCBydW50aW1lID0gbmV3IENmblJ1bnRpbWUoc2NvcGUsICdBZ2VudENvcmVSdW50aW1lJywge1xuICAgICAgYWdlbnRSdW50aW1lTmFtZTogYCR7Y29uZmlnLmFnZW50TmFtZS5yZXBsYWNlKC8tL2csICdfJyl9X3J1bnRpbWVgLFxuICAgICAgYWdlbnRSdW50aW1lQXJ0aWZhY3Q6IHtcbiAgICAgICAgY29udGFpbmVyQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvbnRhaW5lclVyaSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByb2xlQXJuOiBjb25maWcuYWdlbnRSb2xlLnJvbGVBcm4sXG4gICAgICBuZXR3b3JrQ29uZmlndXJhdGlvbixcbiAgICAgIGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiBhdXRoQ29uZmlnLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IGVudlZhcnMsXG4gICAgfSk7XG5cbiAgICBydW50aW1lLmFwcGx5UmVtb3ZhbFBvbGljeShjb25maWcucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgLy8gV2hlbiBKV1QgYXV0aCBpcyBjb25maWd1cmVkLCBhbGxvd2xpc3QgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHNvIHRoZVxuICAgIC8vIGNvbnRhaW5lciBjYW4gZXh0cmFjdCB1c2VyIGlkZW50aXR5IGNsYWltcyBmcm9tIHRoZSBmb3J3YXJkZWQgSldUIHRva2VuLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLW9hdXRoLmh0bWwjb2F1dGgtcHJvcGFnYXRlLWp3dC10b2tlblxuICAgIGlmICh0aGlzLnByb3BzLmN1c3RvbUp3dEF1dGhvcml6ZXIpIHtcbiAgICAgIHJ1bnRpbWUuYWRkUHJvcGVydHlPdmVycmlkZSgnUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24nLCB7XG4gICAgICAgIFJlcXVlc3RIZWFkZXJBbGxvd2xpc3Q6IFsnQXV0aG9yaXphdGlvbiddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIENmblJ1bnRpbWUgd2FpdHMgZm9yIHRoZSByb2xlIGFuZCBpdHMgcG9saWNpZXMgdG8gYmUgZnVsbHkgY3JlYXRlZC91cGRhdGVkLlxuICAgIC8vIFdpdGhvdXQgdGhpcywgQ2xvdWRGb3JtYXRpb24gbWF5IHZhbGlkYXRlIHRoZSByb2xlIGJlZm9yZTpcbiAgICAvLyAtIFRoZSB0cnVzdCBwb2xpY3kgaXMgdXBkYXRlZCB0byBiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tIChkdXJpbmcgc3RhY2sgdXBkYXRlcylcbiAgICAvLyAtIFRoZSBFQ1IgcGVybWlzc2lvbnMgcG9saWN5IGlzIGF0dGFjaGVkXG4gICAgcnVudGltZS5ub2RlLmFkZERlcGVuZGVuY3koY29uZmlnLmFnZW50Um9sZSk7XG4gICAgaWYgKGVjclBvbGljeVJlc3VsdC5wb2xpY3lEZXBlbmRhYmxlKSB7XG4gICAgICBydW50aW1lLm5vZGUuYWRkRGVwZW5kZW5jeShlY3JQb2xpY3lSZXN1bHQucG9saWN5RGVwZW5kYWJsZSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIENmblJ1bnRpbWVFbmRwb2ludFxuICAgIGNvbnN0IGVuZHBvaW50TmFtZSA9IHRoaXMucHJvcHMuZW5kcG9pbnROYW1lIHx8IGAke2NvbmZpZy5hZ2VudE5hbWUucmVwbGFjZSgvLS9nLCAnXycpfV9lbmRwb2ludGA7XG4gICAgY29uc3QgcnVudGltZUVuZHBvaW50ID0gbmV3IENmblJ1bnRpbWVFbmRwb2ludChzY29wZSwgJ0FnZW50Q29yZVJ1bnRpbWVFbmRwb2ludCcsIHtcbiAgICAgIGFnZW50UnVudGltZUlkOiBydW50aW1lLnJlZixcbiAgICAgIGFnZW50UnVudGltZVZlcnNpb246IHJ1bnRpbWUuYXR0ckFnZW50UnVudGltZVZlcnNpb24sXG4gICAgICBuYW1lOiBlbmRwb2ludE5hbWUsXG4gICAgICAuLi4odGhpcy5wcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gJiYge1xuICAgICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBzZXJ2ZXJQcm90b2NvbDogdGhpcy5wcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBydW50aW1lRW5kcG9pbnQuYXBwbHlSZW1vdmFsUG9saWN5KGNvbmZpZy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG5cbiAgICAvLyBDb25zdHJ1Y3QgdGhlIGZ1bGwgaW52b2NhdGlvbiBVUkwgZm9yIGRpcmVjdCBIVFRQUyBhY2Nlc3MgKHJlcXVpcmVkIGZvciBKV1QgYXV0aCkuXG4gICAgLy8gRm9ybWF0OiBodHRwczovL2JlZHJvY2stYWdlbnRjb3JlLntyZWdpb259LmFtYXpvbmF3cy5jb20vcnVudGltZXMve1VSTC1lbmNvZGVkLUFSTn0vaW52b2NhdGlvbnM/cXVhbGlmaWVyPXtlbmRwb2ludE5hbWV9XG4gICAgY29uc3QgZW5jb2RlZEFybiA9IEZuLmpvaW4oJycsIFtcbiAgICAgICdhcm4lM0Fhd3MlM0FiZWRyb2NrLWFnZW50Y29yZSUzQScsXG4gICAgICByZWdpb24sXG4gICAgICAnJTNBJyxcbiAgICAgIGFjY291bnQsXG4gICAgICAnJTNBcnVudGltZSUyRicsXG4gICAgICBydW50aW1lLmF0dHJBZ2VudFJ1bnRpbWVJZCxcbiAgICBdKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IEZuLmpvaW4oJycsIFtcbiAgICAgICdodHRwczovL2JlZHJvY2stYWdlbnRjb3JlLicsXG4gICAgICByZWdpb24sXG4gICAgICAnLmFtYXpvbmF3cy5jb20vcnVudGltZXMvJyxcbiAgICAgIGVuY29kZWRBcm4sXG4gICAgICAnL2ludm9jYXRpb25zP3F1YWxpZmllcj0nLFxuICAgICAgZW5kcG9pbnROYW1lLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIHsgZW5kcG9pbnQsIGNmblJ1bnRpbWU6IHJ1bnRpbWUgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgSW50ZXJhY3RpdmVBZ2VudC5cbiAqXG4gKiBFeHRlbmRzIEJhc2VBZ2VudFByb3BzIHdpdGggY29tbXVuaWNhdGlvbiwgc2Vzc2lvbiwgY29udGV4dCwgYW5kIGF1dGhlbnRpY2F0aW9uXG4gKiBzdHJhdGVneSBpbnRlcmZhY2VzIGZvciBidWlsZGluZyByZWFsLXRpbWUgY29udmVyc2F0aW9uYWwgQUkgYWdlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVyYWN0aXZlQWdlbnRQcm9wcyBleHRlbmRzIEJhc2VBZ2VudFByb3BzIHtcbiAgLyoqXG4gICAqIEhvc3RpbmcgYWRhcHRlciBmb3IgZGVwbG95aW5nIHRoZSBhZ2VudCBydW50aW1lLlxuICAgKlxuICAgKiBVc2UgYExhbWJkYUhvc3RpbmdBZGFwdGVyYCBmb3IgTGFtYmRhICsgQVBJIEdhdGV3YXkgKGRlZmF1bHQpIG9yXG4gICAqIGBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXJgIGZvciBBZ2VudENvcmUgUnVudGltZSBob3N0aW5nLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBgY29tbXVuaWNhdGlvbkFkYXB0ZXJgLCBgYXV0aGVudGljYXRvcmAsIGBtZW1vcnlTaXplYCxcbiAgICogYHRpbWVvdXRgLCBgYXJjaGl0ZWN0dXJlYCwgYW5kIGByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zYCBwcm9wc1xuICAgKiBhcmUgaWdub3JlZCAoY29uZmlndXJlIHRoZW0gb24gdGhlIGFkYXB0ZXIgZGlyZWN0bHkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBMYW1iZGFIb3N0aW5nQWRhcHRlclxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGluZ0FkYXB0ZXI/OiBJSG9zdGluZ0FkYXB0ZXI7XG4gIC8qKlxuICAgKiBDb21tdW5pY2F0aW9uIGFkYXB0ZXIgZm9yIGNsaWVudC1hZ2VudCBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgU3RyZWFtaW5nSHR0cEFkYXB0ZXIgd2l0aCBDb2duaXRvQXV0aGVudGljYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgY29tbXVuaWNhdGlvbkFkYXB0ZXI/OiBJQ29tbXVuaWNhdGlvbkFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIFNlc3Npb24gc3RvcmUgZm9yIHBlcnNpc3RpbmcgY29udmVyc2F0aW9uIHN0YXRlLlxuICAgKiBTZXQgdG8gdW5kZWZpbmVkIHRvIGRpc2FibGUgc2Vzc2lvbiBwZXJzaXN0ZW5jZSAoc3RhdGVsZXNzIG1vZGUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTM1Nlc3Npb25NYW5hZ2VyIHdpdGggMjQtaG91ciBUVExcbiAgICogQGRlcHJlY2F0ZWQgU2Vzc2lvbiBtYW5hZ2VtZW50IGlzIG5vdyBoYW5kbGVkIGJ5IFN0cmFuZHMtbmF0aXZlIGBTM1Nlc3Npb25NYW5hZ2VyYC5cbiAgICogQW4gUzMgYnVja2V0IGlzIGFsd2F5cyBjcmVhdGVkIGFuZCBwYXNzZWQgYXMgYFNFU1NJT05fQlVDS0VUYCBlbnYgdmFyLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblN0b3JlPzogSVNlc3Npb25TdG9yZTtcblxuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBzZXNzaW9uIHN0b3JhZ2UgKHNob3J0aGFuZCBmb3IgUzNTZXNzaW9uTWFuYWdlcikuXG4gICAqIElnbm9yZWQgaWYgc2Vzc2lvblN0b3JlIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBdXRvLWNyZWF0ZWQgYnVja2V0XG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQnVja2V0PzogSUJ1Y2tldDtcblxuICAvKipcbiAgICogVGltZS10by1saXZlIGZvciBzZXNzaW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uaG91cnMoMjQpXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uVFRMPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFNlc3Npb24gaW5kZXggZm9yIGZhc3QgdXNlciB0byBzZXNzaW9uIGxvb2t1cHMuXG4gICAqIFByb3ZpZGVzIGVmZmljaWVudCBxdWVyeWluZyBvZiBhIHVzZXIncyBzZXNzaW9ucyBmb3IgbGlzdGluZyBhbmQgbWFuYWdlbWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHluYW1vREJTZXNzaW9uSW5kZXggKGF1dG8tY3JlYXRlZClcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25JbmRleD86IElTZXNzaW9uSW5kZXg7XG5cbiAgLyoqXG4gICAqIENvbnRleHQgc3RyYXRlZ3kgZm9yIGNvbnZlcnNhdGlvbiBoaXN0b3J5IG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyIHdpdGggMjAgbWVzc2FnZXNcbiAgICogQGRlcHJlY2F0ZWQgQ29udmVyc2F0aW9uIG1hbmFnZW1lbnQgaXMgbm93IGhhbmRsZWQgYnkgU3RyYW5kcy1uYXRpdmVcbiAgICogYFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyYCBpbiB0aGUgUHl0aG9uIGhhbmRsZXIuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0U3RyYXRlZ3k/OiBJQ29udGV4dFN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB0byBrZWVwIGluIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuICAgKiBTaG9ydGhhbmQgZm9yIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyIHdpbmRvd1NpemUuXG4gICAqIElnbm9yZWQgaWYgY29udGV4dFN0cmF0ZWd5IGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyMFxuICAgKiBAZGVwcmVjYXRlZCBDb252ZXJzYXRpb24gd2luZG93aW5nIGlzIG5vdyBoYW5kbGVkIGJ5IFN0cmFuZHMtbmF0aXZlXG4gICAqIGBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcmAgaW4gdGhlIFB5dGhvbiBoYW5kbGVyIChkZWZhdWx0OiAyMCkuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlSGlzdG9yeUxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdG9yIGZvciBzZWN1cmluZyBBUEkgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBDb2duaXRvQXV0aGVudGljYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRvcj86IElBdXRoZW50aWNhdG9yO1xuXG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gYWxsb3cgaW4gQ09SUyBwcmVmbGlnaHQgcmVzcG9uc2VzLlxuICAgKiBVc2UgdGhpcyB0byBlbmFibGUgYWRkaXRpb25hbCBtZXRob2RzIChHRVQsIERFTEVURSwgUFVUKSBmb3IgY3VzdG9tIHJvdXRlc1xuICAgKiBhZGRlZCB0byB0aGUgUkVTVCBBUEkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnUE9TVCcsICdPUFRJT05TJ11cbiAgICovXG4gIHJlYWRvbmx5IGNvcnNBbGxvd01ldGhvZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIG1lbW9yeSBzaXplIGluIE1CLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDI0XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gdGltZW91dC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcygxNSlcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIGFyY2hpdGVjdHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBSZXNlcnZlZCBjb25jdXJyZW50IGV4ZWN1dGlvbnMgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIHJlc2VydmVkIGNvbmN1cnJlbmN5XG4gICAqL1xuICByZWFkb25seSByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEludGVyYWN0aXZlIEFnZW50IGZvciByZWFsLXRpbWUgY29udmVyc2F0aW9uYWwgQUkgd2l0aCBTU0Ugc3RyZWFtaW5nLlxuICpcbiAqIENyZWF0ZXMgYSBjb21wbGV0ZSBzZXJ2ZXJsZXNzIGluZnJhc3RydWN0dXJlIGZvciBpbnRlcmFjdGl2ZSBBSSBjb252ZXJzYXRpb25zXG4gKiB1c2luZyBBUEkgR2F0ZXdheSBSRVNUIEFQSSB3aXRoIHJlc3BvbnNlIHN0cmVhbWluZywgTGFtYmRhIFdlYiBBZGFwdGVyLFxuICogRmFzdEFQSSwgYW5kIHN0YW5kYXJkIFN0cmFuZHMgQWdlbnQuXG4gKlxuICogIyMgQXJjaGl0ZWN0dXJlXG4gKlxuICogYGBgXG4gKiBDbGllbnQgKGZldGNoICsgUmVhZGFibGVTdHJlYW0pXG4gKiAgICAg4oaTIFBPU1QgL2NoYXQgKEF1dGhvcml6YXRpb246IEJlYXJlciBKV1QpXG4gKiBBUEkgR2F0ZXdheSBSRVNUIEFQSSAocmVzcG9uc2VUcmFuc2Zlck1vZGU6IFNUUkVBTSlcbiAqICAgICDihpMgSW52b2tlV2l0aFJlc3BvbnNlU3RyZWFtXG4gKiBMYW1iZGEgKFB5dGhvbiArIExhbWJkYSBXZWIgQWRhcHRlciArIEZhc3RBUEkpXG4gKiAgICAg4oaTIHN0cmFuZHMuQWdlbnQgc3RyZWFtaW5nXG4gKiBBbWF6b24gQmVkcm9jayAoQ2xhdWRlKVxuICogYGBgXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqU1NFIFN0cmVhbWluZyoqOiBSZWFsLXRpbWUgdG9rZW4tYnktdG9rZW4gcmVzcG9uc2Ugc3RyZWFtaW5nXG4gKiAtICoqMTUtTWludXRlIFRpbWVvdXQqKjogRXh0ZW5kZWQgdGltZW91dCBmb3IgbG9uZyBjb252ZXJzYXRpb25zXG4gKiAtICoqU2Vzc2lvbiBNYW5hZ2VtZW50Kio6IFMzLWJhc2VkIGNvbnZlcnNhdGlvbiBwZXJzaXN0ZW5jZVxuICogLSAqKkNvbnRleHQgV2luZG93aW5nKio6IFNsaWRpbmcgd2luZG93IGNvbnZlcnNhdGlvbiBoaXN0b3J5XG4gKiAtICoqQ29nbml0byBBdXRoKio6IE5hdGl2ZSBKV1QgdmFsaWRhdGlvbiBvbiBSRVNUIEFQSVxuICogLSAqKlN0cmF0ZWd5IEludGVyZmFjZXMqKjogUGx1Z2dhYmxlIGFkYXB0ZXJzIGZvciBhbGwgY29tcG9uZW50c1xuICogLSAqKk9ic2VydmFiaWxpdHkqKjogTGFtYmRhIFBvd2VydG9vbHMgaW50ZWdyYXRpb25cbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG4gKiBpbXBvcnQgeyBJbnRlcmFjdGl2ZUFnZW50IH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICpcbiAqIGNvbnN0IHN5c3RlbVByb21wdCA9IG5ldyBBc3NldCh0aGlzLCAnUHJvbXB0JywgeyBwYXRoOiAnLi9wcm9tcHQudHh0JyB9KTtcbiAqXG4gKiBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHRoaXMsICdDaGF0QWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ015Q2hhdGJvdCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjoge1xuICogICAgIGJlZHJvY2tNb2RlbDogeyB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZTogdHJ1ZSB9LFxuICogICAgIHN5c3RlbVByb21wdDogc3lzdGVtUHJvbXB0LFxuICogICB9LFxuICogfSk7XG4gKlxuICogLy8gQWNjZXNzIG91dHB1dHNcbiAqIGFnZW50LmFwaUVuZHBvaW50OyAgICAgICAvLyBSRVNUIEFQSSBlbmRwb2ludCBVUkxcbiAqIGFnZW50LnNlc3Npb25CdWNrZXQ7ICAgICAvLyBTMyBzZXNzaW9uIGJ1Y2tldFxuICogYWdlbnQuYXV0aGVudGljYXRvcjsgICAgIC8vIENvZ25pdG8gYXV0aGVudGljYXRvciAoZm9yIFVzZXIgUG9vbCBpbmZvKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZUFnZW50IGV4dGVuZHMgQmFzZUFnZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGFnZW50RnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBhZGFwdGVyPzogSUNvbW11bmljYXRpb25BZGFwdGVyO1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvblN0b3JlPzogSVNlc3Npb25TdG9yZTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHRTdHJhdGVneT86IElDb250ZXh0U3RyYXRlZ3k7XG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdG9yPzogSUF1dGhlbnRpY2F0b3I7XG4gIHB1YmxpYyByZWFkb25seSBhcGlFbmRwb2ludDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbkJ1Y2tldD86IElCdWNrZXQ7XG4gIHB1YmxpYyByZWFkb25seSBjZm5SdW50aW1lPzogQ2ZuUnVudGltZTtcbiAgLyoqXG4gICAqIFRoZSBzZXNzaW9uIGluZGV4IGZvciBmYXN0IHVzZXIgdG8gc2Vzc2lvbiBsb29rdXBzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlc3Npb25JbmRleD86IElTZXNzaW9uSW5kZXg7XG4gIC8qKlxuICAgKiBUaGUgUkVTVCBBUEkgR2F0ZXdheSAob25seSBhdmFpbGFibGUgd2hlbiB1c2luZyBMYW1iZGFIb3N0aW5nQWRhcHRlciB3aXRoIFN0cmVhbWluZ0h0dHBBZGFwdGVyKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXN0QXBpPzogUmVzdEFwaTtcbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbHMgYXV0aG9yaXplciAob25seSBhdmFpbGFibGUgd2hlbiB1c2luZyBMYW1iZGFIb3N0aW5nQWRhcHRlciB3aXRoIENvZ25pdG9BdXRoZW50aWNhdG9yKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb2duaXRvQXV0aG9yaXplcj86IENvZ25pdG9Vc2VyUG9vbHNBdXRob3JpemVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbnRlcmFjdGl2ZUFnZW50UHJvcHMpIHtcbiAgICAvLyBEZXRlcm1pbmUgaG9zdGluZyBhZGFwdGVyIEJFRk9SRSBzdXBlcigpIHNvIHdlIGNhbiBwYXNzIGl0cyB0cnVzdCBwcmluY2lwYWxcbiAgICBjb25zdCBob3N0aW5nQWRhcHRlciA9IHByb3BzLmhvc3RpbmdBZGFwdGVyIHx8IG5ldyBMYW1iZGFIb3N0aW5nQWRhcHRlcih7XG4gICAgICBjb21tdW5pY2F0aW9uQWRhcHRlcjogcHJvcHMuY29tbXVuaWNhdGlvbkFkYXB0ZXIsXG4gICAgICBhdXRoZW50aWNhdG9yOiBwcm9wcy5hdXRoZW50aWNhdG9yLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQsXG4gICAgICBhcmNoaXRlY3R1cmU6IHByb3BzLmFyY2hpdGVjdHVyZSxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IHByb3BzLnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgfSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHsgLi4ucHJvcHMsIHNlcnZpY2VQcmluY2lwYWw6IGhvc3RpbmdBZGFwdGVyLnNlcnZpY2VQcmluY2lwYWwgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBwcm9wc1xuICAgIHRoaXMudmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICBjb25zdCBtb2RlbElkID0gQmVkcm9ja01vZGVsVXRpbHMuZGVyaXZlQWN0dWFsTW9kZWxJZCh0aGlzLmJlZHJvY2tNb2RlbCk7XG4gICAgY29uc3QgbWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICBjb25zdCBtZXRyaWNTZXJ2aWNlTmFtZSA9IHByb3BzLm1ldHJpY1NlcnZpY2VOYW1lIHx8IERlZmF1bHRBZ2VudENvbmZpZy5ERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzZXNzaW9uIHN0b3JlIChTMyBidWNrZXQgZm9yIFN0cmFuZHMtbmF0aXZlIFMzU2Vzc2lvbk1hbmFnZXIpXG4gICAgaWYgKHByb3BzLnNlc3Npb25TdG9yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yZSA9IHByb3BzLnNlc3Npb25TdG9yZTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnNlc3Npb25TdG9yZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLnNlc3Npb25CdWNrZXQpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JlID0gbmV3IFMzU2Vzc2lvbk1hbmFnZXIodGhpcywgJ1Nlc3Npb25NYW5hZ2VyJywge1xuICAgICAgICBidWNrZXQ6IHByb3BzLnNlc3Npb25CdWNrZXQsXG4gICAgICAgIHNlc3Npb25UVEw6IHByb3BzLnNlc3Npb25UVEwsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdDogY3JlYXRlIFMzU2Vzc2lvbk1hbmFnZXIgKGJ1Y2tldCB1c2VkIGJ5IFN0cmFuZHMtbmF0aXZlIHNlc3Npb24gbWFuYWdlcilcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JlID0gbmV3IFMzU2Vzc2lvbk1hbmFnZXIodGhpcywgJ1Nlc3Npb25NYW5hZ2VyJywge1xuICAgICAgICBzZXNzaW9uVFRMOiBwcm9wcy5zZXNzaW9uVFRMLFxuICAgICAgICBlbmNyeXB0aW9uS2V5OiBwcm9wcy5lbmNyeXB0aW9uS2V5LFxuICAgICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2Vzc2lvbkJ1Y2tldCA9IHRoaXMuc2Vzc2lvblN0b3JlPy5zZXNzaW9uQnVja2V0O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzZXNzaW9uIGluZGV4IChEeW5hbW9EQiB0YWJsZSBmb3IgdXNlcuKGknNlc3Npb24gbG9va3VwcylcbiAgICBpZiAocHJvcHMuc2Vzc2lvbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbkluZGV4ID0gcHJvcHMuc2Vzc2lvbkluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0OiBjcmVhdGUgRHluYW1vREJTZXNzaW9uSW5kZXhcbiAgICAgIHRoaXMuc2Vzc2lvbkluZGV4ID0gbmV3IER5bmFtb0RCU2Vzc2lvbkluZGV4KHRoaXMsICdTZXNzaW9uSW5kZXgnLCB7XG4gICAgICAgIHNlc3Npb25UVEw6IHByb3BzLnNlc3Npb25UVEwsXG4gICAgICAgIGVuY3J5cHRpb25LZXk6IHByb3BzLmVuY3J5cHRpb25LZXksXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3ksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb250ZXh0IHN0cmF0ZWd5IGlzIGRlcHJlY2F0ZWQg4oCUIFN0cmFuZHMtbmF0aXZlIGNvbnZlcnNhdGlvbiBtYW5hZ2VyIGhhbmRsZXMgdGhpcy5cbiAgICAvLyBLZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJ1dCBkbyBub3QgdXNlIGVudiB2YXJzLlxuICAgIGlmIChwcm9wcy5jb250ZXh0U3RyYXRlZ3kpIHtcbiAgICAgIHRoaXMuY29udGV4dFN0cmF0ZWd5ID0gcHJvcHMuY29udGV4dFN0cmF0ZWd5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRleHRTdHJhdGVneSA9IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7XG4gICAgICAgIHdpbmRvd1NpemU6IHByb3BzLm1lc3NhZ2VIaXN0b3J5TGltaXQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBiYXNlIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIE1PREVMX0lEOiBtb2RlbElkLFxuICAgICAgU1lTVEVNX1BST01QVF9TM19CVUNLRVRfTkFNRTogcHJvcHMuYWdlbnREZWZpbml0aW9uLnN5c3RlbVByb21wdC5zM0J1Y2tldE5hbWUsXG4gICAgICBTWVNURU1fUFJPTVBUX1MzX0tFWTogcHJvcHMuYWdlbnREZWZpbml0aW9uLnN5c3RlbVByb21wdC5zM09iamVjdEtleSxcbiAgICAgIFRPT0xTX0NPTkZJRzogSlNPTi5zdHJpbmdpZnkodGhpcy5hZ2VudFRvb2xzTG9jYXRpb25EZWZpbml0aW9ucyksXG4gICAgICAuLi5Qb3dlcnRvb2xzQ29uZmlnLmdlbmVyYXRlRGVmYXVsdExhbWJkYUNvbmZpZyhcbiAgICAgICAgcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICAgICAgbWV0cmljTmFtZXNwYWNlLFxuICAgICAgICBtZXRyaWNTZXJ2aWNlTmFtZSxcbiAgICAgICAgJ0RFQlVHJyxcbiAgICAgICksXG4gICAgfTtcblxuICAgIC8vIEFkZCBzZXNzaW9uIGJ1Y2tldCBlbnYgdmFyIGlmIHNlc3Npb24gc3RvcmUgZXhpc3RzXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkJ1Y2tldCkge1xuICAgICAgZW52LlNFU1NJT05fQlVDS0VUID0gdGhpcy5zZXNzaW9uQnVja2V0LmJ1Y2tldE5hbWU7XG4gICAgfVxuXG4gICAgLy8gQWRkIHNlc3Npb24gaW5kZXggZW52IHZhcnMgaWYgc2Vzc2lvbiBpbmRleCBleGlzdHNcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5kZXgpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZW52LCB0aGlzLnNlc3Npb25JbmRleC5lbnZpcm9ubWVudFZhcmlhYmxlcygpKTtcbiAgICB9XG5cbiAgICAvLyBBZGQga25vd2xlZGdlIGJhc2UgY29uZmlndXJhdGlvbiBpZiBLQnMgYXJlIGNvbmZpZ3VyZWRcbiAgICBpZiAodGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncy5sZW5ndGggPiAwKSB7XG4gICAgICBlbnYuS05PV0xFREdFX0JBU0VTX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MpO1xuICAgICAgZW52LktOT1dMRURHRV9CQVNFX1NZU1RFTV9QUk9NUFRfQURESVRJT04gPSBnZW5lcmF0ZUtub3dsZWRnZUJhc2VTeXN0ZW1Qcm9tcHRBZGRpdGlvbih0aGlzLmtub3dsZWRnZUJhc2VDb25maWdzKTtcbiAgICB9XG5cbiAgICAvLyBEZXBsb3kgdmlhIGhvc3RpbmcgYWRhcHRlclxuICAgIGNvbnN0IGhvc3RpbmdSZXN1bHQgPSBob3N0aW5nQWRhcHRlci5kZXBsb3koe1xuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICBhZ2VudE5hbWU6IHByb3BzLmFnZW50TmFtZSxcbiAgICAgIGFnZW50Um9sZTogdGhpcy5hZ2VudFJvbGUsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5lbmNyeXB0aW9uS2V5LFxuICAgICAgbmV0d29yazogcHJvcHMubmV0d29yayxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvcHMuYXJjaGl0ZWN0dXJlLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgbGFtYmRhTGF5ZXJzOiBwcm9wcy5hZ2VudERlZmluaXRpb24ubGFtYmRhTGF5ZXJzLFxuICAgICAga25vd2xlZGdlQmFzZUxheWVyczogdGhpcy5rbm93bGVkZ2VCYXNlTGF5ZXJzLFxuICAgICAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICAgIHRvb2xzQ29uZmlnOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIHN5c3RlbVByb21wdEJ1Y2tldDogcHJvcHMuYWdlbnREZWZpbml0aW9uLnN5c3RlbVByb21wdC5zM0J1Y2tldE5hbWUsXG4gICAgICBzeXN0ZW1Qcm9tcHRLZXk6IHByb3BzLmFnZW50RGVmaW5pdGlvbi5zeXN0ZW1Qcm9tcHQuczNPYmplY3RLZXksXG4gICAgICBrbm93bGVkZ2VCYXNlQ29uZmlnczogdGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncy5sZW5ndGggPiAwID8gSlNPTi5zdHJpbmdpZnkodGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncykgOiB1bmRlZmluZWQsXG4gICAgICBrbm93bGVkZ2VCYXNlU3lzdGVtUHJvbXB0QWRkaXRpb246IHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MubGVuZ3RoID4gMFxuICAgICAgICA/IGdlbmVyYXRlS25vd2xlZGdlQmFzZVN5c3RlbVByb21wdEFkZGl0aW9uKHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcblxuICAgIHRoaXMuYXBpRW5kcG9pbnQgPSBob3N0aW5nUmVzdWx0LmVuZHBvaW50O1xuICAgIHRoaXMuYWdlbnRGdW5jdGlvbiA9IGhvc3RpbmdSZXN1bHQuYWdlbnRGdW5jdGlvbjtcbiAgICB0aGlzLmNmblJ1bnRpbWUgPSBob3N0aW5nUmVzdWx0LmNmblJ1bnRpbWU7XG5cbiAgICAvLyBTZXQgYWRhcHRlciBhbmQgYXV0aGVudGljYXRvciByZWZlcmVuY2VzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKGhvc3RpbmdBZGFwdGVyIGluc3RhbmNlb2YgTGFtYmRhSG9zdGluZ0FkYXB0ZXIpIHtcbiAgICAgIHRoaXMuYWRhcHRlciA9IGhvc3RpbmdBZGFwdGVyLmNvbW11bmljYXRpb25BZGFwdGVyO1xuICAgICAgdGhpcy5hdXRoZW50aWNhdG9yID0gaG9zdGluZ0FkYXB0ZXIuYXV0aGVudGljYXRvcjtcblxuICAgICAgLy8gRXhwb3NlIFJFU1QgQVBJIGFuZCBDb2duaXRvIGF1dGhvcml6ZXIgZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBhZGFwdGVyXG4gICAgICBpZiAodGhpcy5hZGFwdGVyIGluc3RhbmNlb2YgU3RyZWFtaW5nSHR0cEFkYXB0ZXIpIHtcbiAgICAgICAgdGhpcy5yZXN0QXBpID0gdGhpcy5hZGFwdGVyLnJlc3RBcGk7XG4gICAgICAgIHRoaXMuY29nbml0b0F1dGhvcml6ZXIgPSB0aGlzLmFkYXB0ZXIuY29nbml0b0F1dGhvcml6ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR3JhbnQgc3lzdGVtIHByb21wdCByZWFkIGFjY2Vzc1xuICAgIHByb3BzLmFnZW50RGVmaW5pdGlvbi5zeXN0ZW1Qcm9tcHQuZ3JhbnRSZWFkKHRoaXMuYWdlbnRSb2xlKTtcblxuICAgIC8vIEdyYW50IHNlc3Npb24gc3RvcmUgYWNjZXNzXG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JlKSB7XG4gICAgICBpZiAodGhpcy5hZ2VudEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JlLmdyYW50UmVhZFdyaXRlKHRoaXMuYWdlbnRGdW5jdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2Vzc2lvbkJ1Y2tldCkge1xuICAgICAgICAvLyBGb3IgQWdlbnRDb3JlIGhvc3RpbmcsIGdyYW50IHRoZSBhZ2VudCByb2xlIGRpcmVjdCBTMyBhY2Nlc3NcbiAgICAgICAgdGhpcy5zZXNzaW9uQnVja2V0LmdyYW50UmVhZFdyaXRlKHRoaXMuYWdlbnRSb2xlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHcmFudCBzZXNzaW9uIGluZGV4IGFjY2Vzc1xuICAgIGlmICh0aGlzLnNlc3Npb25JbmRleCkge1xuICAgICAgdGhpcy5zZXNzaW9uSW5kZXguZ3JhbnRSZWFkV3JpdGUodGhpcy5hZ2VudFJvbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgSW50ZXJhY3RpdmVBZ2VudCBwcm9wcy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcyhwcm9wczogSW50ZXJhY3RpdmVBZ2VudFByb3BzKTogdm9pZCB7XG4gICAgaWYgKCFwcm9wcy5hZ2VudE5hbWUgfHwgcHJvcHMuYWdlbnROYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYWdlbnROYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tZW1vcnlTaXplICE9PSB1bmRlZmluZWQgJiYgKHByb3BzLm1lbW9yeVNpemUgPCAxMjggfHwgcHJvcHMubWVtb3J5U2l6ZSA+IDEwMjQwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZW1vcnlTaXplIG11c3QgYmUgYmV0d2VlbiAxMjggYW5kIDEwMjQwIE1CJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBwcm9wcy50aW1lb3V0LnRvU2Vjb25kcygpO1xuICAgICAgaWYgKHRpbWVvdXRTZWNvbmRzIDwgMSB8fCB0aW1lb3V0U2Vjb25kcyA+IDkwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuIDEgc2Vjb25kIGFuZCAxNSBtaW51dGVzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm1lc3NhZ2VIaXN0b3J5TGltaXQgIT09IHVuZGVmaW5lZCAmJiAocHJvcHMubWVzc2FnZUhpc3RvcnlMaW1pdCA8IDEgfHwgcHJvcHMubWVzc2FnZUhpc3RvcnlMaW1pdCA+IDEwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2VIaXN0b3J5TGltaXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMDAnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -103,5 +103,5 @@ class BaseKnowledgeBase extends constructs_1.Construct {
103
103
  }
104
104
  exports.BaseKnowledgeBase = BaseKnowledgeBase;
105
105
  _a = JSII_RTTI_SYMBOL_1;
106
- BaseKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseKnowledgeBase", version: "1.14.0" };
106
+ BaseKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseKnowledgeBase", version: "1.15.0" };
107
107
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1rbm93bGVkZ2UtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2tub3dsZWRnZS1iYXNlL2Jhc2Uta25vd2xlZGdlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSwyQ0FBdUM7QUFTdkM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFzQixpQkFBa0IsU0FBUSxzQkFBUztJQWlDdkQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDTyxhQUFhLENBQUMsS0FBNkI7UUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBWUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQy9CLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUztTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOztBQTlISCw4Q0ErSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgTGF5ZXJWZXJzaW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJS25vd2xlZGdlQmFzZSB9IGZyb20gJy4vaS1rbm93bGVkZ2UtYmFzZSc7XG5pbXBvcnQge1xuICBBY2xDb25maWd1cmF0aW9uLFxuICBCYXNlS25vd2xlZGdlQmFzZVByb3BzLFxuICBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyxcbiAgUmV0cmlldmFsQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi9rbm93bGVkZ2UtYmFzZS1wcm9wcyc7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Iga25vd2xlZGdlIGJhc2UgaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBrbm93bGVkZ2UgYmFzZSBpbXBsZW1lbnRhdGlvbnMsXG4gKiBpbmNsdWRpbmcgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50LCB2YWxpZGF0aW9uLCBhbmQgZGVmYXVsdCBiZWhhdmlvcnMuIENvbmNyZXRlXG4gKiBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgQmVkcm9ja0tub3dsZWRnZUJhc2UpIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBpbXBsZW1lbnRcbiAqIHRoZSBhYnN0cmFjdCBtZXRob2RzLlxuICpcbiAqIFRoZSBiYXNlIGNsYXNzIGhhbmRsZXM6XG4gKiAtIFByb3BzIHZhbGlkYXRpb24gKG5hbWUgYW5kIGRlc2NyaXB0aW9uIGFyZSByZXF1aXJlZClcbiAqIC0gRGVmYXVsdCByZXRyaWV2YWwgY29uZmlndXJhdGlvbiAobnVtYmVyT2ZSZXN1bHRzIGRlZmF1bHRzIHRvIDUpXG4gKiAtIEFDTCBjb25maWd1cmF0aW9uIHN0b3JhZ2VcbiAqIC0gQmFzZSBydW50aW1lIGNvbmZpZ3VyYXRpb24gZXhwb3J0XG4gKlxuICogU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudDpcbiAqIC0gYGdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKWA6IFJldHVybiBJQU0gcGVybWlzc2lvbnMgc3BlY2lmaWMgdG8gdGhlIEtCIHR5cGVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VLbm93bGVkZ2VCYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUtub3dsZWRnZUJhc2Uge1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBrbm93bGVkZ2UgYmFzZS5cbiAgICpcbiAgICogVGhpcyBuYW1lIGlzIHVzZWQgZm9yIGxvZ2dpbmcsIGRpc3BsYXkgcHVycG9zZXMsIGFuZCB0byBoZWxwIHRoZSBhZ2VudFxuICAgKiBpZGVudGlmeSB3aGljaCBrbm93bGVkZ2UgYmFzZSB0byBxdWVyeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBrbm93bGVkZ2UgYmFzZSBjb250YWlucy5cbiAgICpcbiAgICogVGhpcyBkZXNjcmlwdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgYWdlbnQncyBzeXN0ZW0gcHJvbXB0IHRvIGhlbHBcbiAgICogdGhlIGFnZW50IGRlY2lkZSB3aGVuIHRvIHF1ZXJ5IHRoaXMga25vd2xlZGdlIGJhc2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogUmV0cmlldmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMga25vd2xlZGdlIGJhc2UuXG4gICAqXG4gICAqIENvbnRhaW5zIHNldHRpbmdzIGxpa2UgbnVtYmVyT2ZSZXN1bHRzIGFuZCBvcHRpb25hbCBtZXRhZGF0YSBmaWx0ZXJzLlxuICAgKiBEZWZhdWx0cyB0byB7IG51bWJlck9mUmVzdWx0czogNSB9IGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZXRyaWV2YWxDb25maWc6IFJldHJpZXZhbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEFDTCBjb25maWd1cmF0aW9uIGZvciBpZGVudGl0eS1hd2FyZSByZXRyaWV2YWwuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgcmV0cmlldmFsIHF1ZXJpZXMgd2lsbCBiZSBmaWx0ZXJlZCBiYXNlZCBvbiB1c2VyXG4gICAqIGlkZW50aXR5IGNvbnRleHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWNsQ29uZmlnPzogQWNsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBCYXNlS25vd2xlZGdlQmFzZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRFxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBrbm93bGVkZ2UgYmFzZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5hbWUgaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZGVzY3JpcHRpb24gaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzZUtub3dsZWRnZUJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMocHJvcHMpO1xuXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5yZXRyaWV2YWxDb25maWcgPSBwcm9wcy5yZXRyaWV2YWwgPz8geyBudW1iZXJPZlJlc3VsdHM6IDUgfTtcbiAgICB0aGlzLmFjbENvbmZpZyA9IHByb3BzLmFjbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHByb3BzIGF0IGNvbnN0cnVjdGlvbiB0aW1lLlxuICAgKlxuICAgKiBFbnN1cmVzIHRoYXQgcmVxdWlyZWQgZmllbGRzIChuYW1lIGFuZCBkZXNjcmlwdGlvbikgYXJlIHByb3ZpZGVkXG4gICAqIGFuZCBub3QgZW1wdHkuIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBhZGRpdGlvbmFsXG4gICAqIHZhbGlkYXRpb24sIGJ1dCBzaG91bGQgY2FsbCBzdXBlci52YWxpZGF0ZVByb3BzKCkgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wcyB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5hbWUgaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZGVzY3JpcHRpb24gaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wcyhwcm9wczogQmFzZUtub3dsZWRnZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgIGlmICghcHJvcHMubmFtZSB8fCBwcm9wcy5uYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbmFtZSBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICghcHJvcHMuZGVzY3JpcHRpb24gfHwgcHJvcHMuZGVzY3JpcHRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXNjcmlwdGlvbiBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIElBTSBwb2xpY3kgc3RhdGVtZW50cyByZXF1aXJlZCBmb3IgYWNjZXNzaW5nIHRoaXMga25vd2xlZGdlIGJhc2UuXG4gICAqXG4gICAqIFRoaXMgYWJzdHJhY3QgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byByZXR1cm4gdGhlXG4gICAqIHNwZWNpZmljIElBTSBwZXJtaXNzaW9ucyBuZWVkZWQgZm9yIHRoZWlyIGtub3dsZWRnZSBiYXNlIHR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIElBTSBQb2xpY3lTdGF0ZW1lbnQgb2JqZWN0cyBncmFudGluZyBuZWNlc3NhcnkgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZW5lcmF0ZUlhbVBlcm1pc3Npb25zKCk6IFBvbGljeVN0YXRlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBFeHBvcnQgY29uZmlndXJhdGlvbiBmb3IgcnVudGltZSB1c2UgYnkgdGhlIHJldHJpZXZhbCB0b29sLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgY29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzZSBrbm93bGVkZ2UgYmFzZVxuICAgKiBzZXR0aW5ncy4gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gYWRkIGltcGxlbWVudGF0aW9uLVxuICAgKiBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBjYWxsaW5nIHN1cGVyLmV4cG9ydENvbmZpZ3VyYXRpb24oKSB0byBpbmNsdWRlXG4gICAqIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFJ1bnRpbWUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSByZXRyaWV2YWwgdG9vbFxuICAgKi9cbiAgcHVibGljIGV4cG9ydENvbmZpZ3VyYXRpb24oKTogS25vd2xlZGdlQmFzZVJ1bnRpbWVDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIHJldHJpZXZhbDogdGhpcy5yZXRyaWV2YWxDb25maWcsXG4gICAgICBhY2w6IHRoaXMuYWNsQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSB0aGUgcmV0cmlldmFsIHRvb2wgYXNzZXQgZm9yIHRoaXMga25vd2xlZGdlIGJhc2UgdHlwZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgcmV0dXJucyB1bmRlZmluZWQgdG8gdXNlIHRoZSBmcmFtZXdvcmsncyBkZWZhdWx0IHJldHJpZXZhbFxuICAgKiB0b29sLiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGEgY3VzdG9tIHJldHJpZXZhbFxuICAgKiB0b29sIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB1bmRlZmluZWQgdG8gdXNlIHRoZSBkZWZhdWx0IHJldHJpZXZhbCB0b29sXG4gICAqL1xuICBwdWJsaWMgcmV0cmlldmFsVG9vbEFzc2V0KCk6IEFzc2V0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgTGFtYmRhIGxheWVycyByZXF1aXJlZCBieSB0aGUgcmV0cmlldmFsIHRvb2wuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHJldHVybnMgdW5kZWZpbmVkIGluZGljYXRpbmcgbm8gYWRkaXRpb25hbCBsYXllcnMgYXJlIG5lZWRlZC5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBMYW1iZGEgbGF5ZXJzIGNvbnRhaW5pbmdcbiAgICogZGVwZW5kZW5jaWVzIHJlcXVpcmVkIGJ5IHRoZWlyIHJldHJpZXZhbCB0b29sLlxuICAgKlxuICAgKiBAcmV0dXJucyB1bmRlZmluZWQgaW5kaWNhdGluZyBubyBhZGRpdGlvbmFsIGxheWVycyBuZWVkZWRcbiAgICovXG4gIHB1YmxpYyByZXRyaWV2YWxUb29sTGF5ZXJzKCk6IExheWVyVmVyc2lvbltdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -188,5 +188,5 @@ class BedrockKnowledgeBase extends base_knowledge_base_1.BaseKnowledgeBase {
188
188
  }
189
189
  exports.BedrockKnowledgeBase = BedrockKnowledgeBase;
190
190
  _a = JSII_RTTI_SYMBOL_1;
191
- BedrockKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockKnowledgeBase", version: "1.14.0" };
191
+ BedrockKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockKnowledgeBase", version: "1.15.0" };
192
192
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1rbm93bGVkZ2UtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2tub3dsZWRnZS1iYXNlL2JlZHJvY2sta25vd2xlZGdlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZCQUE2QjtBQUM3Qiw2Q0FBb0M7QUFDcEMsaURBQThEO0FBQzlELDZEQUFrRDtBQUVsRCwrREFBMEQ7QUFTMUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSx1Q0FBaUI7SUFxRHpEOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRTdCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCO1lBQ25CLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3RCLG1CQUFtQixJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLG1CQUFtQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFdBQVcs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QUksZ0JBQWdCLEdBQUc7aUJBQzlFO2FBQ0YsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPO1lBQ0wsR0FBRyxLQUFLLENBQUMsbUJBQW1CLEVBQUU7WUFDOUIsSUFBSSxFQUFFLFNBQVM7WUFDZixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLHFCQUFLLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQzdDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQ0FBa0MsQ0FBQztZQUM5RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeE9ILG9EQXlPQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VLbm93bGVkZ2VCYXNlIH0gZnJvbSAnLi9iYXNlLWtub3dsZWRnZS1iYXNlJztcbmltcG9ydCB7XG4gIEJlZHJvY2tLbm93bGVkZ2VCYXNlUHJvcHMsXG4gIENyZWF0ZUtub3dsZWRnZUJhc2VDb25maWd1cmF0aW9uLFxuICBHdWFyZHJhaWxDb25maWd1cmF0aW9uLFxuICBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyxcbiAgVmVjdG9yU3RvcmVDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2tub3dsZWRnZS1iYXNlLXByb3BzJztcblxuLyoqXG4gKiBBbWF6b24gQmVkcm9jayBLbm93bGVkZ2UgQmFzZSBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGludGVncmF0aW9uIHdpdGggQW1hem9uIEJlZHJvY2sgS25vd2xlZGdlIEJhc2VzLFxuICogd2hpY2ggdXNlIHZlY3RvciBzdG9yZXMgKFMzIFZlY3RvcnMgYnkgZGVmYXVsdCkgZm9yIHNlbWFudGljIHNlYXJjaC5cbiAqIEl0IGlzIHRoZSBkZWZhdWx0IGtub3dsZWRnZSBiYXNlIGltcGxlbWVudGF0aW9uIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQuXG4gKlxuICogVGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXM6XG4gKiAtIEFSTiBjb25zdHJ1Y3Rpb24gZnJvbSBrbm93bGVkZ2UgYmFzZSBJRCAoaWYgQVJOIG5vdCBwcm92aWRlZClcbiAqIC0gSUFNIHBlcm1pc3Npb24gZ2VuZXJhdGlvbiBmb3IgQmVkcm9jayBSZXRyaWV2ZSBhbmQgUmV0cmlldmVBbmRHZW5lcmF0ZSBBUElzXG4gKiAtIE9wdGlvbmFsIGd1YXJkcmFpbCBjb25maWd1cmF0aW9uIGZvciBjb250ZW50IGZpbHRlcmluZ1xuICogLSBSdW50aW1lIGNvbmZpZ3VyYXRpb24gZXhwb3J0IGZvciB0aGUgcmV0cmlldmFsIHRvb2xcbiAqL1xuZXhwb3J0IGNsYXNzIEJlZHJvY2tLbm93bGVkZ2VCYXNlIGV4dGVuZHMgQmFzZUtub3dsZWRnZUJhc2Uge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgSUQgYXNzaWduZWQgYnkgQmVkcm9jayB3aGVuIHRoZSBrbm93bGVkZ2UgYmFzZSB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbm93bGVkZ2VCYXNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkIGluIHByb3BzLCB0aGlzIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGtub3dsZWRnZUJhc2VJZFxuICAgKiB1c2luZyB0aGUgY3VycmVudCByZWdpb24gYW5kIGFjY291bnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkga25vd2xlZGdlQmFzZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHdWFyZHJhaWwgY29uZmlndXJhdGlvbiBmb3IgY29udGVudCBmaWx0ZXJpbmcuXG4gICAqXG4gICAqIFdoZW4gY29uZmlndXJlZCwgdGhlIGd1YXJkcmFpbCB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHJldHJpZXZhbFxuICAgKiBvcGVyYXRpb25zIHRvIGZpbHRlciBpbmFwcHJvcHJpYXRlIG9yIHNlbnNpdGl2ZSBjb250ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBndWFyZHJhaWxDb25maWc/OiBHdWFyZHJhaWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBWZWN0b3Igc3RvcmUgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogRGVmaW5lcyB0aGUgdHlwZSBvZiB2ZWN0b3Igc3RvcmUgdXNlZCBieSB0aGlzIGtub3dsZWRnZSBiYXNlLlxuICAgKiBEZWZhdWx0cyB0byBTMyBWZWN0b3JzIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZlY3RvclN0b3JlQ29uZmlnOiBWZWN0b3JTdG9yZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIGEgbmV3IGtub3dsZWRnZSBiYXNlLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbnN0cnVjdCBzaG91bGQgY3JlYXRlIGEgbmV3XG4gICAqIEJlZHJvY2sgS25vd2xlZGdlIEJhc2UgcmF0aGVyIHRoYW4gcmVmZXJlbmNlIGFuIGV4aXN0aW5nIG9uZS5cbiAgICpcbiAgICogTm90ZTogS0IgY3JlYXRpb24gaXMgYW4gYWR2YW5jZWQgZmVhdHVyZS4gQ3VycmVudGx5LCB0aGlzIHByb3BlcnR5XG4gICAqIHN0b3JlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVDb25maWc/OiBDcmVhdGVLbm93bGVkZ2VCYXNlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gd2hlcmUgdGhlIGtub3dsZWRnZSBiYXNlIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIHdoZXJlIHRoZSBrbm93bGVkZ2UgYmFzZSBpcyBkZXBsb3llZC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElEXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIEJlZHJvY2sgS25vd2xlZGdlIEJhc2VcbiAgICogQHRocm93cyBFcnJvciBpZiBrbm93bGVkZ2VCYXNlSWQgaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmVkcm9ja0tub3dsZWRnZUJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy52YWxpZGF0ZUJlZHJvY2tQcm9wcyhwcm9wcyk7XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIHRoaXMucmVnaW9uID0gc3RhY2sucmVnaW9uO1xuICAgIHRoaXMuYWNjb3VudCA9IHN0YWNrLmFjY291bnQ7XG5cbiAgICB0aGlzLmtub3dsZWRnZUJhc2VJZCA9IHByb3BzLmtub3dsZWRnZUJhc2VJZDtcbiAgICB0aGlzLmtub3dsZWRnZUJhc2VBcm4gPVxuICAgICAgcHJvcHMua25vd2xlZGdlQmFzZUFybiA/P1xuICAgICAgYGFybjphd3M6YmVkcm9jazoke3RoaXMucmVnaW9ufToke3RoaXMuYWNjb3VudH06a25vd2xlZGdlLWJhc2UvJHtwcm9wcy5rbm93bGVkZ2VCYXNlSWR9YDtcbiAgICB0aGlzLmd1YXJkcmFpbENvbmZpZyA9IHByb3BzLmd1YXJkcmFpbDtcbiAgICAvLyBEZWZhdWx0IHRvIFMzIFZlY3RvcnMgaWYgbm90IHNwZWNpZmllZFxuICAgIHRoaXMudmVjdG9yU3RvcmVDb25maWcgPSBwcm9wcy52ZWN0b3JTdG9yZSA/PyB7IHR5cGU6ICdzMy12ZWN0b3JzJyB9O1xuICAgIHRoaXMuY3JlYXRlQ29uZmlnID0gcHJvcHMuY3JlYXRlO1xuXG4gICAgLy8gTm90ZTogS0IgY3JlYXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IHdoZW4gY3JlYXRlIGNvbmZpZyBpcyBwcm92aWRlZFxuICAgIC8vIFRoaXMgaXMgYW4gYWR2YW5jZWQgZmVhdHVyZSB0aGF0IHdpbGwgY3JlYXRlIGFjdHVhbCBBV1MgcmVzb3VyY2VzXG4gICAgaWYgKHRoaXMuY3JlYXRlQ29uZmlnKSB7XG4gICAgICB0aGlzLnNldHVwS25vd2xlZGdlQmFzZUNyZWF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAga25vd2xlZGdlIGJhc2UgY3JlYXRpb24gd2hlbiBjcmVhdGUgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gd2hlbiB0aGUgYGNyZWF0ZWAgcHJvcGVydHlcbiAgICogaXMgc3BlY2lmaWVkLiBJdCBwcmVwYXJlcyB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBmb3IgY3JlYXRpbmcgYSBuZXdcbiAgICogQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogTm90ZTogRnVsbCBLQiBjcmVhdGlvbiBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBDbG91ZEZvcm1hdGlvbiBjdXN0b21cbiAgICogcmVzb3VyY2VzIG9yIEwxIGNvbnN0cnVjdHMuIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEtub3dsZWRnZUJhc2VDcmVhdGlvbigpOiB2b2lkIHtcbiAgICAvLyBLQiBjcmVhdGlvbiBpcyBhbiBhZHZhbmNlZCBmZWF0dXJlXG4gICAgLy8gVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBpbnZvbHZlOlxuICAgIC8vIDEuIENyZWF0aW5nIGFuIElBTSByb2xlIGZvciBCZWRyb2NrIEtCXG4gICAgLy8gMi4gQ3JlYXRpbmcgdGhlIEJlZHJvY2sgS0IgdmlhIENmbktub3dsZWRnZUJhc2VcbiAgICAvLyAzLiBDcmVhdGluZyBhIGRhdGEgc291cmNlIHBvaW50aW5nIHRvIHRoZSBTMyBidWNrZXRcbiAgICAvLyA0LiBDb25maWd1cmluZyB0aGUgZW1iZWRkaW5nIG1vZGVsXG4gICAgLy8gNS4gU2V0dGluZyB1cCB0aGUgdmVjdG9yIHN0b3JlIChTMyBWZWN0b3JzIGJ5IGRlZmF1bHQpXG4gICAgLy9cbiAgICAvLyBGb3Igbm93LCB0aGlzIHN0b3JlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgcmVmZXJlbmNlLlxuICAgIC8vIFVzZXJzIHNob3VsZCBjcmVhdGUgS0JzIHZpYSB0aGUgQmVkcm9jayBjb25zb2xlIG9yIENMSVxuICAgIC8vIGFuZCByZWZlcmVuY2UgdGhlbSBieSBJRC5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgQmVkcm9jay1zcGVjaWZpYyBwcm9wcyBhdCBjb25zdHJ1Y3Rpb24gdGltZS5cbiAgICpcbiAgICogRW5zdXJlcyB0aGF0IHRoZSBrbm93bGVkZ2VCYXNlSWQgaXMgcHJvdmlkZWQgYW5kIG5vdCBlbXB0eS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb3BzIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYga25vd2xlZGdlQmFzZUlkIGlzIGVtcHR5IG9yIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUJlZHJvY2tQcm9wcyhwcm9wczogQmVkcm9ja0tub3dsZWRnZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgIGlmICghcHJvcHMua25vd2xlZGdlQmFzZUlkIHx8IHByb3BzLmtub3dsZWRnZUJhc2VJZC50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tub3dsZWRnZUJhc2VJZCBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIElBTSBwb2xpY3kgc3RhdGVtZW50cyByZXF1aXJlZCBmb3IgYWNjZXNzaW5nIHRoaXMgQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogUmV0dXJucyBwZXJtaXNzaW9ucyBmb3I6XG4gICAqIC0gYmVkcm9jazpSZXRyaWV2ZSAtIFF1ZXJ5IHRoZSBrbm93bGVkZ2UgYmFzZVxuICAgKiAtIGJlZHJvY2s6UmV0cmlldmVBbmRHZW5lcmF0ZSAtIFF1ZXJ5IGFuZCBnZW5lcmF0ZSByZXNwb25zZXNcbiAgICogLSBiZWRyb2NrOkFwcGx5R3VhcmRyYWlsIC0gQXBwbHkgZ3VhcmRyYWlsIChpZiBjb25maWd1cmVkKVxuICAgKiAtIHMzOkdldE9iamVjdCAtIEFjY2VzcyBTMyB2ZWN0b3JzIChpZiB1c2luZyBTMyBWZWN0b3JzIHdpdGggY3VzdG9tIGJ1Y2tldClcbiAgICogLSBzMzpHZXRPYmplY3QgLSBBY2Nlc3MgZGF0YSBzb3VyY2UgYnVja2V0IChpZiBjcmVhdGUgY29uZmlnIHByb3ZpZGVkKVxuICAgKlxuICAgKiBBbGwgcGVybWlzc2lvbnMgYXJlIHNjb3BlZCB0byB0aGUgc3BlY2lmaWMga25vd2xlZGdlIGJhc2UgQVJOXG4gICAqIGZvbGxvd2luZyB0aGUgcHJpbmNpcGxlIG9mIGxlYXN0IHByaXZpbGVnZS5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgSUFNIFBvbGljeVN0YXRlbWVudCBvYmplY3RzIGdyYW50aW5nIG5lY2Vzc2FyeSBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKTogUG9saWN5U3RhdGVtZW50W10ge1xuICAgIGNvbnN0IHN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdID0gW1xuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2JlZHJvY2s6UmV0cmlldmUnLCAnYmVkcm9jazpSZXRyaWV2ZUFuZEdlbmVyYXRlJ10sXG4gICAgICAgIHJlc291cmNlczogW3RoaXMua25vd2xlZGdlQmFzZUFybl0sXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLy8gQWRkIGd1YXJkcmFpbCBwZXJtaXNzaW9ucyBpZiBjb25maWd1cmVkXG4gICAgaWYgKHRoaXMuZ3VhcmRyYWlsQ29uZmlnKSB7XG4gICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnYmVkcm9jazpBcHBseUd1YXJkcmFpbCddLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6YmVkcm9jazoke3RoaXMucmVnaW9ufToke3RoaXMuYWNjb3VudH06Z3VhcmRyYWlsLyR7dGhpcy5ndWFyZHJhaWxDb25maWcuZ3VhcmRyYWlsSWR9YCxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQWRkIFMzIHBlcm1pc3Npb25zIGlmIHVzaW5nIFMzIFZlY3RvcnMgd2l0aCBhIGN1c3RvbSBidWNrZXRcbiAgICBpZiAodGhpcy52ZWN0b3JTdG9yZUNvbmZpZy50eXBlID09PSAnczMtdmVjdG9ycycgJiYgdGhpcy52ZWN0b3JTdG9yZUNvbmZpZy5idWNrZXROYW1lKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB0aGlzLnZlY3RvclN0b3JlQ29uZmlnLnByZWZpeCA/PyAndmVjdG9ycy8nO1xuICAgICAgc3RhdGVtZW50cy5wdXNoKFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ3MzOkdldE9iamVjdCddLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6czM6Ojoke3RoaXMudmVjdG9yU3RvcmVDb25maWcuYnVja2V0TmFtZX0vJHtwcmVmaXh9KmAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFkZCBkYXRhIHNvdXJjZSBidWNrZXQgcGVybWlzc2lvbnMgaWYgY3JlYXRlIGNvbmZpZyBpcyBwcm92aWRlZFxuICAgIGlmICh0aGlzLmNyZWF0ZUNvbmZpZykge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZVByZWZpeCA9IHRoaXMuY3JlYXRlQ29uZmlnLmRhdGFTb3VyY2VQcmVmaXggPz8gJyc7XG4gICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOkxpc3RCdWNrZXQnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOnMzOjo6JHt0aGlzLmNyZWF0ZUNvbmZpZy5kYXRhU291cmNlQnVja2V0TmFtZX1gLFxuICAgICAgICAgICAgYGFybjphd3M6czM6Ojoke3RoaXMuY3JlYXRlQ29uZmlnLmRhdGFTb3VyY2VCdWNrZXROYW1lfS8ke2RhdGFTb3VyY2VQcmVmaXh9KmAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBjb25maWd1cmF0aW9uIGZvciBydW50aW1lIHVzZSBieSB0aGUgcmV0cmlldmFsIHRvb2wuXG4gICAqXG4gICAqIFJldHVybnMgYSBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWluaW5nIGFsbCBCZWRyb2NrLXNwZWNpZmljXG4gICAqIHNldHRpbmdzIG5lZWRlZCB0byBxdWVyeSB0aGUga25vd2xlZGdlIGJhc2UgYXQgcnVudGltZSwgaW5jbHVkaW5nOlxuICAgKiAtIEJhc2UgY29uZmlndXJhdGlvbiAobmFtZSwgZGVzY3JpcHRpb24sIHJldHJpZXZhbCwgYWNsKVxuICAgKiAtIEtub3dsZWRnZSBiYXNlIHR5cGUgKCdiZWRyb2NrJylcbiAgICogLSBLbm93bGVkZ2UgYmFzZSBJRCBhbmQgQVJOXG4gICAqIC0gVmVjdG9yIHN0b3JlIGNvbmZpZ3VyYXRpb25cbiAgICogLSBHdWFyZHJhaWwgY29uZmlndXJhdGlvbiAoaWYgcHJlc2VudClcbiAgICpcbiAgICogQHJldHVybnMgUnVudGltZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIHJldHJpZXZhbCB0b29sXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0Q29uZmlndXJhdGlvbigpOiBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmV4cG9ydENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIHR5cGU6ICdiZWRyb2NrJyxcbiAgICAgIGtub3dsZWRnZUJhc2VJZDogdGhpcy5rbm93bGVkZ2VCYXNlSWQsXG4gICAgICBrbm93bGVkZ2VCYXNlQXJuOiB0aGlzLmtub3dsZWRnZUJhc2VBcm4sXG4gICAgICB2ZWN0b3JTdG9yZTogdGhpcy52ZWN0b3JTdG9yZUNvbmZpZyxcbiAgICAgIGd1YXJkcmFpbDogdGhpcy5ndWFyZHJhaWxDb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBCZWRyb2NrLXNwZWNpZmljIHJldHJpZXZhbCB0b29sIGFzc2V0LlxuICAgKlxuICAgKiBSZXR1cm5zIGFuIEFzc2V0IGNvbnRhaW5pbmcgdGhlIFB5dGhvbiByZXRyaWV2YWwgdG9vbCB0aGF0IHVzZXNcbiAgICogdGhlIEFtYXpvbiBCZWRyb2NrIEFnZW50IFJ1bnRpbWUgQVBJIHRvIHF1ZXJ5IGtub3dsZWRnZSBiYXNlcy5cbiAgICogVGhpcyB0b29sIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gYWdlbnRzIHRoYXQgdXNlIEJlZHJvY2tcbiAgICoga25vd2xlZGdlIGJhc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBc3NldCBjb250YWluaW5nIHRoZSBCZWRyb2NrIHJldHJpZXZhbCB0b29sXG4gICAqL1xuICBwdWJsaWMgcmV0cmlldmFsVG9vbEFzc2V0KCk6IEFzc2V0IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0KHRoaXMsICdCZWRyb2NrUmV0cmlldmFsVG9vbCcsIHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9yZXNvdXJjZXMva25vd2xlZGdlLWJhc2UtdG9vbCcpLFxuICAgICAgZXhjbHVkZTogWyd0ZXN0XyonLCAnKl90ZXN0LnB5J10sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -50,5 +50,5 @@ class BedrockModelUtils {
50
50
  }
51
51
  exports.BedrockModelUtils = BedrockModelUtils;
52
52
  _a = JSII_RTTI_SYMBOL_1;
53
- BedrockModelUtils[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockModelUtils", version: "1.14.0" };
53
+ BedrockModelUtils[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockModelUtils", version: "1.15.0" };
54
54
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYmVkcm9jay9iZWRyb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2Q0FBb0M7QUFDcEMseURBQW9FO0FBQ3BFLGlEQUE4RDtBQUc5RDs7O0dBR0c7QUFDSCxJQUFZLGlDQUtYO0FBTEQsV0FBWSxpQ0FBaUM7SUFDM0MsOENBQThDO0lBQzlDLDhDQUFTLENBQUE7SUFDVCw4Q0FBOEM7SUFDOUMsOENBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxpQ0FBaUMsaURBQWpDLGlDQUFpQyxRQUs1QztBQXdCRCxNQUFhLGlCQUFpQjtJQUNyQixNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBeUI7UUFDekQsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixPQUFPLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDMUcsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxLQUFnQixFQUFFLEtBQXlCO1FBQ25GLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRixPQUFPLElBQUkseUJBQWUsQ0FBQztZQUN6QixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRTtnQkFDUCxxQkFBcUI7Z0JBQ3JCLHVDQUF1QzthQUN4QztZQUNELFNBQVMsRUFBRTtnQkFDVCx1Q0FBdUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDMUQsbUJBQW1CLE1BQU0sSUFBSSxPQUFPLHNCQUFzQixpQkFBaUIsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO2FBQ25HO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBeUI7UUFDckQsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQVMsSUFBSSx1Q0FBeUIsQ0FBQyx1Q0FBdUMsQ0FBQztRQUN4RyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFBRSwwQkFBMEIsSUFBSSxpQ0FBaUMsQ0FBQyxFQUFFLENBQUM7UUFFcEcsT0FBTztZQUNMLFNBQVM7WUFDVCxpQkFBaUI7U0FDbEIsQ0FBQztJQUNKLENBQUM7O0FBL0JILDhDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2snO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIENyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcHJlZml4IG9wdGlvbnMgZm9yIEJlZHJvY2sgbW9kZWxzLlxuICogVXNlZCB0byBjb25maWd1cmUgaW5mZXJlbmNlIHByb2ZpbGVzIGZvciBpbXByb3ZlZCBhdmFpbGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuICovXG5leHBvcnQgZW51bSBCZWRyb2NrQ3Jvc3NSZWdpb25JbmZlcmVuY2VQcmVmaXgge1xuICAvKiogVVMtYmFzZWQgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBwcm9maWxlICovXG4gIFVTID0gJ3VzJyxcbiAgLyoqIEVVLWJhc2VkIGNyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcHJvZmlsZSAqL1xuICBFVSA9ICdldScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVkcm9ja01vZGVsUHJvcHMge1xuICAvKipcbiAgICAgKiBGb3VuZGF0aW9uIG1vZGVsIHRvIHVzZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllci5BTlRIUk9QSUNfQ0xBVURFX1NPTk5FVF80XzIwMjUwNTE0X1YxXzBcbiAgICAgKi9cbiAgcmVhZG9ubHkgZm1Nb2RlbElkPzogRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllcjtcblxuICAvKipcbiAgICAgKiBFbmFibGUgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBmb3IgQmVkcm9jayBtb2RlbHMgdG8gaW1wcm92ZSBhdmFpbGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuICAgICAqIFdoZW4gZW5hYmxlZCwgdXNlcyBpbmZlcmVuY2UgcHJvZmlsZXMgaW5zdGVhZCBvZiBkaXJlY3QgbW9kZWwgaW52b2NhdGlvbi5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICByZWFkb25seSB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKlxuICAgICAqIFByZWZpeCBmb3IgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBjb25maWd1cmF0aW9uLlxuICAgICAqIE9ubHkgdXNlZCB3aGVuIHVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlIGlzIHRydWUuXG4gICAgICogQGRlZmF1bHQgQmVkcm9ja0Nyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4LlVTXG4gICAgICovXG4gIHJlYWRvbmx5IGNyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4PzogQmVkcm9ja0Nyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4O1xufVxuXG5leHBvcnQgY2xhc3MgQmVkcm9ja01vZGVsVXRpbHMge1xuICBwdWJsaWMgc3RhdGljIGRlcml2ZUFjdHVhbE1vZGVsSWQocHJvcHM/OiBCZWRyb2NrTW9kZWxQcm9wcyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBmbU1vZGVsSWQsIGNyb3NzUmVnaW9uUHJlZml4IH0gPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVEZWZhdWx0cyhwcm9wcyk7XG4gICAgcmV0dXJuIHByb3BzPy51c2VDcm9zc1JlZ2lvbkluZmVyZW5jZSA/IGAke2Nyb3NzUmVnaW9uUHJlZml4fS4ke2ZtTW9kZWxJZC5tb2RlbElkfWAgOiBmbU1vZGVsSWQubW9kZWxJZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVNb2RlbElBTVBlcm1pc3Npb25zKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgeyBmbU1vZGVsSWQsIGNyb3NzUmVnaW9uUHJlZml4IH0gPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVEZWZhdWx0cyhwcm9wcyk7XG5cbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2JlZHJvY2s6SW52b2tlTW9kZWwnLFxuICAgICAgICAnYmVkcm9jazpJbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbScsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6Kjo6Zm91bmRhdGlvbi1tb2RlbC8ke2ZtTW9kZWxJZC5tb2RlbElkfWAsXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6JHtyZWdpb259OiR7YWNjb3VudH06aW5mZXJlbmNlLXByb2ZpbGUvJHtjcm9zc1JlZ2lvblByZWZpeH0uJHtmbU1vZGVsSWQubW9kZWxJZH1gLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRlcml2ZURlZmF1bHRzKHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbU1vZGVsSWQgPSBwcm9wcz8uZm1Nb2RlbElkIHx8IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIuQU5USFJPUElDX0NMQVVERV9TT05ORVRfNF8yMDI1MDUxNF9WMV8wO1xuICAgIGNvbnN0IGNyb3NzUmVnaW9uUHJlZml4ID0gcHJvcHM/LmNyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4IHx8IEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeC5VUztcblxuICAgIHJldHVybiB7XG4gICAgICBmbU1vZGVsSWQsXG4gICAgICBjcm9zc1JlZ2lvblByZWZpeCxcbiAgICB9O1xuICB9XG59Il19
@@ -13,7 +13,7 @@ class DefaultRuntimes {
13
13
  }
14
14
  exports.DefaultRuntimes = DefaultRuntimes;
15
15
  _a = DefaultRuntimes, _b = JSII_RTTI_SYMBOL_1;
16
- DefaultRuntimes[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultRuntimes", version: "1.14.0" };
16
+ DefaultRuntimes[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultRuntimes", version: "1.15.0" };
17
17
  /**
18
18
  * Default runtime for all Lambda functions in the use cases.
19
19
  */
@@ -117,5 +117,5 @@ class AccessLog extends constructs_1.Construct {
117
117
  }
118
118
  exports.AccessLog = AccessLog;
119
119
  _a = JSII_RTTI_SYMBOL_1;
120
- AccessLog[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AccessLog", version: "1.14.0" };
120
+ AccessLog[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AccessLog", version: "1.15.0" };
121
121
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvZm91bmRhdGlvbi9hY2Nlc3MtbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0QyxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUN6QywyQ0FBdUM7QUErQnZDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQWdCdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUF3QixFQUFFO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUM7UUFFeEQseUVBQXlFO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLFFBQVEsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7UUFFdkQsMEJBQTBCO1FBQzFCLE1BQU0scUJBQXFCLEdBQXVCO1lBQ2hEO2dCQUNFLEVBQUUsRUFBRSxvQkFBb0I7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFdBQVcsRUFBRTtvQkFDWDt3QkFDRSxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUI7d0JBQy9DLGVBQWUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElB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O0lBQzlELENBQUM7O0FBcEhILDhCQXFIQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQWNjZXNzTG9nIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc0xvZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBTMyBidWNrZXQgZm9yIGFjY2VzcyBsb2dzXG4gICAqIEBkZWZhdWx0ICdhY2Nlc3MtbG9ncydcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBydWxlcyBmb3IgdGhlIGFjY2VzcyBsb2dzXG4gICAqIEBkZWZhdWx0IFRyYW5zaXRpb24gdG8gSUEgYWZ0ZXIgMzAgZGF5cywgZGVsZXRlIGFmdGVyIDkwIGRheXNcbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZVJ1bGVzPzogczMuTGlmZWN5Y2xlUnVsZVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB2ZXJzaW9uaW5nIG9uIHRoZSBhY2Nlc3MgbG9ncyBidWNrZXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb25lZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBidWNrZXQgcHJlZml4IGZvciBvcmdhbml6aW5nIGFjY2VzcyBsb2dzXG4gICAqIEBkZWZhdWx0ICdhY2Nlc3MtbG9ncydcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldFByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBY2Nlc3NMb2cgY29uc3RydWN0IHRoYXQgcHJvdmlkZXMgYSBjZW50cmFsaXplZCBTMyBidWNrZXQgZm9yIHN0b3JpbmcgYWNjZXNzIGxvZ3MuXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzIGEgc2VjdXJlIFMzIGJ1Y2tldCB3aXRoIGFwcHJvcHJpYXRlIHBvbGljaWVzIGZvciBBV1Mgc2VydmljZXNcbiAqIHRvIGRlbGl2ZXIgYWNjZXNzIGxvZ3MuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogY29uc3QgYWNjZXNzTG9nID0gbmV3IEFjY2Vzc0xvZyh0aGlzLCAnQWNjZXNzTG9nJyk7XG4gKiBjb25zdCBidWNrZXQgPSBhY2Nlc3NMb2cuYnVja2V0O1xuICogY29uc3QgYnVja2V0TmFtZSA9IGFjY2Vzc0xvZy5idWNrZXROYW1lO1xuICovXG5leHBvcnQgY2xhc3MgQWNjZXNzTG9nIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBTMyBidWNrZXQgZm9yIHN0b3JpbmcgYWNjZXNzIGxvZ3NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXQ6IHMzLkJ1Y2tldDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFMzIGJ1Y2tldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1Y2tldCBwcmVmaXggdXNlZCBmb3Igb3JnYW5pemluZyBhY2Nlc3MgbG9nc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldFByZWZpeDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBY2Nlc3NMb2dQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFN0b3JlIHRoZSBidWNrZXQgcHJlZml4XG4gICAgdGhpcy5idWNrZXRQcmVmaXggPSBwcm9wcy5idWNrZXRQcmVmaXggfHwgJ2FjY2Vzcy1sb2dzJztcblxuICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBidWNrZXQgbmFtZSB3aXRoIGFjY291bnQgYW5kIHJlZ2lvbiB0byBhdm9pZCBjb25mbGljdHNcbiAgICBjb25zdCBhY2NvdW50SWQgPSBjZGsuU3RhY2sub2YodGhpcykuYWNjb3VudDtcbiAgICBjb25zdCByZWdpb24gPSBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gcHJvcHMuYnVja2V0TmFtZSB8fCAnYWNjZXNzLWxvZ3MnO1xuICAgIHRoaXMuYnVja2V0TmFtZSA9IGAke2Jhc2VOYW1lfS0ke2FjY291bnRJZH0tJHtyZWdpb259YDtcblxuICAgIC8vIERlZmF1bHQgbGlmZWN5Y2xlIHJ1bGVzXG4gICAgY29uc3QgZGVmYXVsdExpZmVjeWNsZVJ1bGVzOiBzMy5MaWZlY3ljbGVSdWxlW10gPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnQWNjZXNzTG9nTGlmZWN5Y2xlJyxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgdHJhbnNpdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdG9yYWdlQ2xhc3M6IHMzLlN0b3JhZ2VDbGFzcy5JTkZSRVFVRU5UX0FDQ0VTUyxcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RvcmFnZUNsYXNzOiBzMy5TdG9yYWdlQ2xhc3MuR0xBQ0lFUixcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoOTApLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGV4cGlyYXRpb246IGNkay5EdXJhdGlvbi5kYXlzKDM2NSksIC8vIERlbGV0ZSBhZnRlciAxIHllYXJcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIENyZWF0ZSB0aGUgUzMgYnVja2V0IGZvciBhY2Nlc3MgbG9nc1xuICAgIHRoaXMuYnVja2V0ID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnQWNjZXNzTG9nQnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgdmVyc2lvbmVkOiBwcm9wcy52ZXJzaW9uZWQgfHwgZmFsc2UsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IHByb3BzLmxpZmVjeWNsZVJ1bGVzIHx8IGRlZmF1bHRMaWZlY3ljbGVSdWxlcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTiwgLy8gUmV0YWluIGxvZ3MgZm9yIGNvbXBsaWFuY2VcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsIC8vIEVuZm9yY2UgU1NMIGZvciBhbGwgcmVxdWVzdHNcbiAgICAgIGV2ZW50QnJpZGdlRW5hYmxlZDogZmFsc2UsIC8vIERpc2FibGUgRXZlbnRCcmlkZ2UgZm9yIGNvc3Qgb3B0aW1pemF0aW9uXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYnVja2V0IHBvbGljeSB0byBhbGxvdyBhY2Nlc3MgbG9nIGRlbGl2ZXJ5IGZyb20gQVdTIHNlcnZpY2VzXG4gICAgdGhpcy5idWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdBbGxvd0FjY2Vzc0xvZ0RlbGl2ZXJ5JyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsb2dnaW5nLnMzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdkZWxpdmVyeS5sb2dzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdzMzpQdXRPYmplY3QnLFxuICAgICAgICAnczM6R2V0QnVja2V0QWNsJyxcbiAgICAgICAgJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB0aGlzLmJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgIGAke3RoaXMuYnVja2V0LmJ1Y2tldEFybn0vKmAsXG4gICAgICBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnczM6eC1hbXotYWNsJzogJ2J1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBBbGxvdyBFTEIgc2VydmljZSB0byB3cml0ZSBhY2Nlc3MgbG9nc1xuICAgIHRoaXMuYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnQWxsb3dFTEJBY2Nlc3NMb2dEZWxpdmVyeScsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWxhc3RpY2xvYWRiYWxhbmNpbmcuYW1hem9uYXdzLmNvbScpLFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFsnczM6UHV0T2JqZWN0J10sXG4gICAgICByZXNvdXJjZXM6IFtgJHt0aGlzLmJ1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBTMyBidWNrZXQgcGF0aCBmb3IgYSBzcGVjaWZpYyBzZXJ2aWNlJ3MgYWNjZXNzIGxvZ3NcbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIChlLmcuLCAnYWxiJywgJ2Nsb3VkZnJvbnQnLCAnczMnKVxuICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIE9wdGlvbmFsIHJlc291cmNlIG5hbWUgZm9yIGZ1cnRoZXIgb3JnYW5pemF0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBTMyBwYXRoIGZvciB0aGUgc2VydmljZSdzIGFjY2VzcyBsb2dzXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9nUGF0aChzZXJ2aWNlTmFtZTogc3RyaW5nLCByZXNvdXJjZU5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gYCR7dGhpcy5idWNrZXROYW1lfS8ke3RoaXMuYnVja2V0UHJlZml4fS8ke3NlcnZpY2VOYW1lfWA7XG4gICAgcmV0dXJuIHJlc291cmNlTmFtZSA/IGAke2Jhc2VQYXRofS8ke3Jlc291cmNlTmFtZX1gIDogYmFzZVBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBTMyBVUkkgZm9yIGEgc3BlY2lmaWMgc2VydmljZSdzIGFjY2VzcyBsb2dzXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSAoZS5nLiwgJ2FsYicsICdjbG91ZGZyb250JywgJ3MzJylcbiAgICogQHBhcmFtIHJlc291cmNlTmFtZSBPcHRpb25hbCByZXNvdXJjZSBuYW1lIGZvciBmdXJ0aGVyIG9yZ2FuaXphdGlvblxuICAgKiBAcmV0dXJucyBUaGUgUzMgVVJJIGZvciB0aGUgc2VydmljZSdzIGFjY2VzcyBsb2dzXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9nVXJpKHNlcnZpY2VOYW1lOiBzdHJpbmcsIHJlc291cmNlTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBzMzovLyR7dGhpcy5nZXRMb2dQYXRoKHNlcnZpY2VOYW1lLCByZXNvdXJjZU5hbWUpfWA7XG4gIH1cbn1cbiJdfQ==
@@ -38,5 +38,5 @@ class EventbridgeBroker extends constructs_1.Construct {
38
38
  }
39
39
  exports.EventbridgeBroker = EventbridgeBroker;
40
40
  _a = JSII_RTTI_SYMBOL_1;
41
- EventbridgeBroker[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.EventbridgeBroker", version: "1.14.0" };
41
+ EventbridgeBroker[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.EventbridgeBroker", version: "1.15.0" };
42
42
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRicmlkZ2UtYnJva2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2ZyYW1ld29yay9mb3VuZGF0aW9uL2V2ZW50YnJpZGdlLWJyb2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUM1Qyx1REFBa0Q7QUFDbEQsaURBQTBDO0FBQzFDLHFFQUEwRDtBQUMxRCxpRkFBMkU7QUFDM0UsMkNBQXVDO0FBU3ZDLE1BQWEsaUJBQWtCLFNBQVEsc0JBQVM7SUFLOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPLENBQUM7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMvRCxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxlQUFlLENBQUMsVUFBa0IsRUFBRSxXQUFnQjtRQUN6RCxPQUFPLElBQUksOENBQW9CLENBQUMsSUFBSSxFQUFFLHNCQUFzQixVQUFVLEVBQUUsRUFBRTtZQUN4RSxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQ3hCLFVBQVU7b0JBQ1YsTUFBTSxFQUFFLDZCQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztpQkFDMUM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBL0JILDhDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFdmVudEJ1cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBUYXNrSW5wdXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBFdmVudEJyaWRnZVB1dEV2ZW50cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50YnJpZGdlQnJva2VyUHJvcHMge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBldmVudFNvdXJjZTogc3RyaW5nO1xuICByZWFkb25seSBrbXNLZXk/OiBLZXk7XG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRicmlkZ2VCcm9rZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U291cmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50YnVzOiBFdmVudEJ1cztcbiAgcmVhZG9ubHkga21zS2V5OiBLZXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEV2ZW50YnJpZGdlQnJva2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleSB8fCBuZXcgS2V5KHRoaXMsICdFdmVudEJyb2tlcktNU0tleScsIHtcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50YnVzID0gbmV3IEV2ZW50QnVzKHRoaXMsICdFdmVudEJ1cycsIHtcbiAgICAgIGV2ZW50QnVzTmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGttc0tleTogdGhpcy5rbXNLZXksXG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50U291cmNlID0gcHJvcHMuZXZlbnRTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2VuZFZpYVNmbkNoYWluKGRldGFpbFR5cGU6IHN0cmluZywgZXZlbnREZXRhaWw6IGFueSkge1xuICAgIHJldHVybiBuZXcgRXZlbnRCcmlkZ2VQdXRFdmVudHModGhpcywgYFNmbkViUHV0RXZlbnRDaGFpbi0ke2RldGFpbFR5cGV9YCwge1xuICAgICAgZW50cmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRCdXM6IHRoaXMuZXZlbnRidXMsXG4gICAgICAgICAgc291cmNlOiB0aGlzLmV2ZW50U291cmNlLFxuICAgICAgICAgIGRldGFpbFR5cGUsXG4gICAgICAgICAgZGV0YWlsOiBUYXNrSW5wdXQuZnJvbU9iamVjdChldmVudERldGFpbCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59Il19
@@ -90,5 +90,5 @@ class Network extends constructs_1.Construct {
90
90
  }
91
91
  exports.Network = Network;
92
92
  _a = JSII_RTTI_SYMBOL_1;
93
- Network[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Network", version: "1.14.0" };
93
+ Network[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Network", version: "1.15.0" };
94
94
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvZm91bmRhdGlvbi9uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0QyxpREFBK1M7QUFDL1MsMkNBQXVDO0FBY3ZDLE1BQWEsT0FBUSxTQUFRLHNCQUFTO0lBQzdCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxPQUF5QjtRQUM1RixNQUFNLEdBQUcsR0FBRyxhQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWhFLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM1QixXQUFXLEVBQUUsR0FBRztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBS0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFzQixFQUFFO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGFBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxxQkFBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7b0JBQ2pFLFdBQVcsRUFBRSxDQUFDO29CQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CLElBQUk7d0JBQ2hEOzRCQUNFLElBQUksRUFBRSxVQUFVOzRCQUNoQixVQUFVLEVBQUUsb0JBQVUsQ0FBQyxnQkFBZ0I7NEJBQ3ZDLFFBQVEsRUFBRSxFQUFFO3lCQUNiO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLHFCQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDakUsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtvQkFDNUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtvQkFDMUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQztvQkFDbkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQ3RCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSTt3QkFDaEQ7NEJBQ0UsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsVUFBVSxFQUFFLG9CQUFVLENBQUMsTUFBTTs0QkFDN0IsUUFBUSxFQUFFLEVBQUU7eUJBQ2I7d0JBQ0Q7NEJBQ0UsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsVUFBVSxFQUFFLG9CQUFVLENBQUMsbUJBQW1COzRCQUMxQyxRQUFRLEVBQUUsRUFBRTt5QkFDYjt3QkFDRDs0QkFDRSxJQUFJLEVBQUUsVUFBVTs0QkFDaEIsVUFBVSxFQUFFLG9CQUFVLENBQUMsZ0JBQWdCOzRCQUN2QyxRQUFRLEVBQUUsRUFBRTt5QkFDYjtxQkFDRjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxFQUFVLEVBQUUsT0FBb0MsRUFBRSxJQUFZO1FBQ3pGLElBQUksT0FBTyxLQUFLLHdDQUE4QixDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRTtnQkFDM0MsT0FBTyxFQUFFLHNDQUE0QixDQUFDLEVBQUU7Z0JBQ3hDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2FBQzdDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLHVCQUFhLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFLEVBQUUsRUFBRTtZQUMvRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7UUFFSCxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxjQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsRUFBRSxFQUFFLEVBQUU7WUFDbkUsT0FBTztZQUNQLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMvQixPQUFPLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwwQkFBMEI7UUFDL0IsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsb0JBQVUsQ0FBQyxtQkFBbUI7U0FDOUYsQ0FBQztJQUNKLENBQUM7O0FBeEZILDBCQXlGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UsIElJcEFkZHJlc3NlcywgSW50ZXJmYWNlVnBjRW5kcG9pbnQsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSwgSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlLCBJcEFkZHJlc3NlcywgSVBlZXIsIElWcGMsIE5hdFByb3ZpZGVyLCBQZWVyLCBQb3J0LCBTZWN1cml0eUdyb3VwLCBTdWJuZXRDb25maWd1cmF0aW9uLCBTdWJuZXRTZWxlY3Rpb24sIFN1Ym5ldFR5cGUsIFZwYywgVnBjTG9va3VwT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1Byb3BzIHtcbiAgcmVhZG9ubHkgZXhpc3RpbmdWcGM/OiBJVnBjO1xuICByZWFkb25seSBwcml2YXRlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXBBZGRyZXNzZXM/OiBJSXBBZGRyZXNzZXM7XG4gIHJlYWRvbmx5IG5hdEdhdGV3YXlQcm92aWRlcj86IE5hdFByb3ZpZGVyO1xuICByZWFkb25seSBuYXRHYXRld2F5U3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcbiAgcmVhZG9ubHkgbmF0R2F0ZXdheXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heEF6cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgc3VibmV0Q29uZmlndXJhdGlvbj86IFN1Ym5ldENvbmZpZ3VyYXRpb25bXTtcbn1cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmsgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgc3RhdGljIHVzZUV4aXN0aW5nVlBDRnJvbUxvb2t1cChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBvcHRpb25zOiBWcGNMb29rdXBPcHRpb25zKTogTmV0d29yayB7XG4gICAgY29uc3QgdnBjID0gVnBjLmZyb21Mb29rdXAoc2NvcGUsIGAke2lkfS1leGlzdGluZ1ZwY2AsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrKHNjb3BlLCBpZCwge1xuICAgICAgZXhpc3RpbmdWcGM6IHZwYyxcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRvbmx5IHZwYzogSVZwYztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTmV0d29ya1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXR3b3JrUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgaWYgKCFwcm9wcy5leGlzdGluZ1ZwYykge1xuICAgICAgaWYgKHByb3BzLnByaXZhdGUpIHtcbiAgICAgICAgdGhpcy52cGMgPSBuZXcgVnBjKHRoaXMsICdWUEMnLCB7XG4gICAgICAgICAgaXBBZGRyZXNzZXM6IHByb3BzLmlwQWRkcmVzc2VzIHx8IElwQWRkcmVzc2VzLmNpZHIoJzEwLjAuMC4wLzE2JyksXG4gICAgICAgICAgbmF0R2F0ZXdheXM6IDAsXG4gICAgICAgICAgbWF4QXpzOiBwcm9wcy5tYXhBenMsXG4gICAgICAgICAgdnBjTmFtZTogcHJvcHMudnBjTmFtZSxcbiAgICAgICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBwcm9wcy5zdWJuZXRDb25maWd1cmF0aW9uIHx8IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ0lzb2xhdGVkJyxcbiAgICAgICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVELFxuICAgICAgICAgICAgICBjaWRyTWFzazogMjQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52cGMgPSBuZXcgVnBjKHRoaXMsICdWUEMnLCB7XG4gICAgICAgICAgaXBBZGRyZXNzZXM6IHByb3BzLmlwQWRkcmVzc2VzIHx8IElwQWRkcmVzc2VzLmNpZHIoJzEwLjAuMC4wLzE2JyksXG4gICAgICAgICAgbmF0R2F0ZXdheVByb3ZpZGVyOiBwcm9wcy5uYXRHYXRld2F5UHJvdmlkZXIsXG4gICAgICAgICAgbmF0R2F0ZXdheVN1Ym5ldHM6IHByb3BzLm5hdEdhdGV3YXlTdWJuZXRzLFxuICAgICAgICAgIG5hdEdhdGV3YXlzOiBwcm9wcy5uYXRHYXRld2F5cyB8fCAxLFxuICAgICAgICAgIG1heEF6czogcHJvcHMubWF4QXpzLFxuICAgICAgICAgIHZwY05hbWU6IHByb3BzLnZwY05hbWUsXG4gICAgICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogcHJvcHMuc3VibmV0Q29uZmlndXJhdGlvbiB8fCBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQdWJsaWMnLFxuICAgICAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgICAgICAgY2lkck1hc2s6IDI0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ1ByaXZhdGUnLFxuICAgICAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgICAgICAgIGNpZHJNYXNrOiAyNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdJc29sYXRlZCcsXG4gICAgICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCxcbiAgICAgICAgICAgICAgY2lkck1hc2s6IDI0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52cGMgPSBwcm9wcy5leGlzdGluZ1ZwYztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU2VydmljZUVuZHBvaW50KGlkOiBzdHJpbmcsIHNlcnZpY2U6IEludGVyZmFjZVZwY0VuZHBvaW50U2VydmljZSwgcGVlcj86IElQZWVyKTogSW50ZXJmYWNlVnBjRW5kcG9pbnQge1xuICAgIGlmIChzZXJ2aWNlID09PSBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMpIHtcbiAgICAgIHRoaXMudnBjLmFkZEdhdGV3YXlFbmRwb2ludChgJHtpZH0tZ2F0ZXdheWAsIHtcbiAgICAgICAgc2VydmljZTogR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5TMyxcbiAgICAgICAgc3VibmV0czogW3RoaXMuYXBwbGljYXRpb25TdWJuZXRTZWxlY3Rpb24oKV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYHNnLWZvci1pbnRlcmZhY2UtZW5kcG9pbnQtJHtpZH1gLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgIH0pO1xuXG4gICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShwZWVyIHx8IFBlZXIuYW55SXB2NCgpLCBQb3J0LkhUVFBTKTtcblxuICAgIHJldHVybiB0aGlzLnZwYy5hZGRJbnRlcmZhY2VFbmRwb2ludChgaW50ZXJmYWNlLWVuZHBvaW50LWZvci0ke2lkfWAsIHtcbiAgICAgIHNlcnZpY2UsXG4gICAgICBzZWN1cml0eUdyb3VwczogW3NlY3VyaXR5R3JvdXBdLFxuICAgICAgc3VibmV0czogdGhpcy5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCk6IFN1Ym5ldFNlbGVjdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldFR5cGU6IHRoaXMucHJvcHMucHJpdmF0ZSA/IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCA6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICB9O1xuICB9XG59Il19