@aws-cdk/aws-bedrock-agentcore-alpha 2.238.0-alpha.0 → 2.239.0-alpha.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 (38) hide show
  1. package/.jsii +1451 -298
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +119 -1
  4. package/README.md +109 -47
  5. package/lib/gateway/gateway-base.js +1 -1
  6. package/lib/gateway/gateway.d.ts +55 -0
  7. package/lib/gateway/gateway.js +38 -2
  8. package/lib/gateway/inbound-auth/authorizer.js +3 -3
  9. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  10. package/lib/gateway/interceptor.js +1 -1
  11. package/lib/gateway/outbound-auth/api-key.js +1 -1
  12. package/lib/gateway/outbound-auth/credential-provider.js +1 -1
  13. package/lib/gateway/protocol.js +2 -2
  14. package/lib/gateway/targets/schema/api-schema.js +4 -4
  15. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  16. package/lib/gateway/targets/target-base.d.ts +3 -1
  17. package/lib/gateway/targets/target-base.js +4 -2
  18. package/lib/gateway/targets/target-configuration.d.ts +246 -0
  19. package/lib/gateway/targets/target-configuration.js +344 -8
  20. package/lib/gateway/targets/target.d.ts +51 -2
  21. package/lib/gateway/targets/target.js +46 -3
  22. package/lib/memory/memory-strategy.js +1 -1
  23. package/lib/memory/memory.js +2 -2
  24. package/lib/memory/strategies/managed-strategy.js +1 -1
  25. package/lib/memory/strategies/self-managed-strategy.js +1 -1
  26. package/lib/network/network-configuration.js +4 -4
  27. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  28. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  29. package/lib/runtime/runtime-artifact.d.ts +23 -0
  30. package/lib/runtime/runtime-artifact.js +67 -2
  31. package/lib/runtime/runtime-base.js +1 -1
  32. package/lib/runtime/runtime-endpoint-base.js +1 -1
  33. package/lib/runtime/runtime-endpoint.js +1 -1
  34. package/lib/runtime/runtime.js +1 -1
  35. package/lib/tools/browser.js +2 -2
  36. package/lib/tools/code-interpreter.js +2 -2
  37. package/package.json +12 -12
  38. package/rosetta/default.ts-fixture +1 -0
@@ -71,6 +71,7 @@ let Gateway = (() => {
71
71
  let _addOpenApiTarget_decorators;
72
72
  let _addSmithyTarget_decorators;
73
73
  let _addMcpServerTarget_decorators;
74
+ let _addApiGatewayTarget_decorators;
74
75
  let _addInterceptor_decorators;
75
76
  var Gateway = class extends _classSuper {
76
77
  static { _classThis = this; }
@@ -80,17 +81,19 @@ let Gateway = (() => {
80
81
  _addOpenApiTarget_decorators = [(0, metadata_resource_1.MethodMetadata)()];
81
82
  _addSmithyTarget_decorators = [(0, metadata_resource_1.MethodMetadata)()];
82
83
  _addMcpServerTarget_decorators = [(0, metadata_resource_1.MethodMetadata)()];
84
+ _addApiGatewayTarget_decorators = [(0, metadata_resource_1.MethodMetadata)()];
83
85
  _addInterceptor_decorators = [(0, metadata_resource_1.MethodMetadata)()];
84
86
  __esDecorate(this, null, _addLambdaTarget_decorators, { kind: "method", name: "addLambdaTarget", static: false, private: false, access: { has: obj => "addLambdaTarget" in obj, get: obj => obj.addLambdaTarget }, metadata: _metadata }, null, _instanceExtraInitializers);
85
87
  __esDecorate(this, null, _addOpenApiTarget_decorators, { kind: "method", name: "addOpenApiTarget", static: false, private: false, access: { has: obj => "addOpenApiTarget" in obj, get: obj => obj.addOpenApiTarget }, metadata: _metadata }, null, _instanceExtraInitializers);
86
88
  __esDecorate(this, null, _addSmithyTarget_decorators, { kind: "method", name: "addSmithyTarget", static: false, private: false, access: { has: obj => "addSmithyTarget" in obj, get: obj => obj.addSmithyTarget }, metadata: _metadata }, null, _instanceExtraInitializers);
87
89
  __esDecorate(this, null, _addMcpServerTarget_decorators, { kind: "method", name: "addMcpServerTarget", static: false, private: false, access: { has: obj => "addMcpServerTarget" in obj, get: obj => obj.addMcpServerTarget }, metadata: _metadata }, null, _instanceExtraInitializers);
90
+ __esDecorate(this, null, _addApiGatewayTarget_decorators, { kind: "method", name: "addApiGatewayTarget", static: false, private: false, access: { has: obj => "addApiGatewayTarget" in obj, get: obj => obj.addApiGatewayTarget }, metadata: _metadata }, null, _instanceExtraInitializers);
88
91
  __esDecorate(this, null, _addInterceptor_decorators, { kind: "method", name: "addInterceptor", static: false, private: false, access: { has: obj => "addInterceptor" in obj, get: obj => obj.addInterceptor }, metadata: _metadata }, null, _instanceExtraInitializers);
89
92
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
90
93
  Gateway = _classThis = _classDescriptor.value;
91
94
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
92
95
  }
93
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Gateway", version: "2.238.0-alpha.0" };
96
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Gateway", version: "2.239.0-alpha.0" };
94
97
  /** Uniquely identifies this class. */
95
98
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Gateway';
96
99
  /**
@@ -443,6 +446,39 @@ let Gateway = (() => {
443
446
  const target = target_1.GatewayTarget.forMcpServer(this, id, targetProps);
444
447
  return target;
445
448
  }
449
+ /**
450
+ * Add an API Gateway target to this gateway
451
+ * This is a convenience method that creates a GatewayTarget associated with this gateway
452
+ *
453
+ * @param id The construct id for the target
454
+ * @param props Properties for the API Gateway target
455
+ * @returns The created GatewayTarget
456
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-api-gateway.html
457
+ */
458
+ addApiGatewayTarget(id, props) {
459
+ try {
460
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_AddApiGatewayTargetOptions(props);
461
+ }
462
+ catch (error) {
463
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
464
+ Error.captureStackTrace(error, this.addApiGatewayTarget);
465
+ }
466
+ throw error;
467
+ }
468
+ // API Gateway targets require explicit credential configuration or defaults to IAM
469
+ // GetExport and execute-api:Invoke permissions are automatically granted in ApiGatewayTargetConfiguration.bind()
470
+ const target = target_1.GatewayTarget.forApiGateway(this, id, {
471
+ gatewayTargetName: props.gatewayTargetName,
472
+ description: props.description,
473
+ gateway: this,
474
+ restApi: props.restApi,
475
+ stage: props.stage,
476
+ apiGatewayToolConfiguration: props.apiGatewayToolConfiguration,
477
+ credentialProviderConfigurations: props.credentialProviderConfigurations,
478
+ metadataConfiguration: props.metadataConfiguration,
479
+ });
480
+ return target;
481
+ }
446
482
  /**
447
483
  * Creates the service role for the gateway to assume
448
484
  *
@@ -686,4 +722,4 @@ let Gateway = (() => {
686
722
  return Gateway = _classThis;
687
723
  })();
688
724
  exports.Gateway = Gateway;
689
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdhdGV3YXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXdEO0FBQ3hELHFFQUFxRTtBQUNyRSxtREFBbUQ7QUFDbkQsMkNBQTJDO0FBRzNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsaURBQTZDO0FBRTdDLDBEQUE4RDtBQUU5RCwrQ0FBa0Q7QUFFbEQsbUNBQXFFO0FBRXJFLHlDQUFnRztBQUdoRyw2Q0FBaUQ7QUFDakQsNkRBQWtHO0FBbVBsRzs7K0VBRStFO0FBQy9FOzs7Ozs7R0FNRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7Ozs7Ozt1QkFBbkIsU0FBUSxXQUFXOzs7OzJDQWtRckMsSUFBQSxrQ0FBYyxHQUFFOzRDQStCaEIsSUFBQSxrQ0FBYyxHQUFFOzJDQXlCaEIsSUFBQSxrQ0FBYyxHQUFFOzhDQThCaEIsSUFBQSxrQ0FBYyxHQUFFOzBDQXlPaEIsSUFBQSxrQ0FBYyxHQUFFO1lBOVRqQixnTUFBTyxlQUFlLDZEQW9CckI7WUFXRCxtTUFBTyxnQkFBZ0IsNkRBY3RCO1lBV0QsZ01BQU8sZUFBZSw2REFrQnJCO1lBWUQseU1BQU8sa0JBQWtCLDZEQWtCeEI7WUF1TkQsNkxBQU8sY0FBYyw2REFrQnBCO1lBcGxCSCw2S0Fpb0JDOzs7OztRQWhvQkMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyw4Q0FBOEMsQ0FBQztRQUN0Rzs7Ozs7OztXQU9HO1FBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUNqQyxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBd0I7Ozs7Ozs7Ozs7WUFFeEIsTUFBTSxlQUFnQixTQUFRLDBCQUFXO2dCQUN2QixVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDOUIsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENB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LENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ2pEOztZQWhvQlUsdURBQU87Ozs7O0FBQVAsMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgVG9rZW4sIExhenksIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBjb2duaXRvIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2duaXRvJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHR5cGUgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuLy8gSW50ZXJuYWwgaW1wb3J0c1xuaW1wb3J0IHR5cGUgeyBHYXRld2F5RXhjZXB0aW9uTGV2ZWwsIElHYXRld2F5IH0gZnJvbSAnLi9nYXRld2F5LWJhc2UnO1xuaW1wb3J0IHsgR2F0ZXdheUJhc2UgfSBmcm9tICcuL2dhdGV3YXktYmFzZSc7XG5pbXBvcnQgdHlwZSB7IElHYXRld2F5QXV0aG9yaXplckNvbmZpZyB9IGZyb20gJy4vaW5ib3VuZC1hdXRoL2F1dGhvcml6ZXInO1xuaW1wb3J0IHsgR2F0ZXdheUF1dGhvcml6ZXIgfSBmcm9tICcuL2luYm91bmQtYXV0aC9hdXRob3JpemVyJztcbmltcG9ydCB0eXBlIHsgSUludGVyY2VwdG9yLCBJbnRlcmNlcHRvckJpbmRDb25maWcgfSBmcm9tICcuL2ludGVyY2VwdG9yJztcbmltcG9ydCB7IEludGVyY2VwdGlvblBvaW50IH0gZnJvbSAnLi9pbnRlcmNlcHRvcic7XG5pbXBvcnQgdHlwZSB7IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWcgfSBmcm9tICcuL291dGJvdW5kLWF1dGgvY3JlZGVudGlhbC1wcm92aWRlcic7XG5pbXBvcnQgeyBHQVRFV0FZX0FTU1VNRV9ST0xFLCBHQVRFV0FZX0tNU19LRVlfUEVSTVMgfSBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB0eXBlIHsgSUdhdGV3YXlQcm90b2NvbENvbmZpZyB9IGZyb20gJy4vcHJvdG9jb2wnO1xuaW1wb3J0IHsgTWNwR2F0ZXdheVNlYXJjaFR5cGUsIE1jcFByb3RvY29sQ29uZmlndXJhdGlvbiwgTUNQUHJvdG9jb2xWZXJzaW9uIH0gZnJvbSAnLi9wcm90b2NvbCc7XG5pbXBvcnQgdHlwZSB7IEFwaVNjaGVtYSB9IGZyb20gJy4vdGFyZ2V0cy9zY2hlbWEvYXBpLXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFRvb2xTY2hlbWEgfSBmcm9tICcuL3RhcmdldHMvc2NoZW1hL3Rvb2wtc2NoZW1hJztcbmltcG9ydCB7IEdhdGV3YXlUYXJnZXQgfSBmcm9tICcuL3RhcmdldHMvdGFyZ2V0JztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhIExhbWJkYSB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTGFtYmRhVGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRvb2wgc2NoZW1hIGRlZmluaW5nIHRoZSBhdmFpbGFibGUgdG9vbHNcbiAgICovXG4gIHJlYWRvbmx5IHRvb2xTY2hlbWE6IFRvb2xTY2hlbWE7XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmlhbVJvbGUoKV1cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zPzogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBPcGVuQVBJIHRhcmdldCB0byBhIGdhdGV3YXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRPcGVuQXBpVGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9wZW5BUEkgc2NoZW1hIGRlZmluaW5nIHRoZSBBUElcbiAgICovXG4gIHJlYWRvbmx5IGFwaVNjaGVtYTogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBPcGVuQVBJIHNjaGVtYSBvciBub3RcbiAgICogTm90ZTogVmFsaWRhdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCBmb3IgaW5saW5lIGFuZCBhc3NldC1iYXNlZCBzY2hlbWEgYW5kICBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICogUzMgc2NoZW1hcyBjYW5ub3QgYmUgdmFsaWRhdGVkIGF0IHN5bnRoZXNpcyB0aW1lLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0ZU9wZW5BcGlTY2hlbWE/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICogQGRlZmF1bHQgLSBbR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5pYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRpbmcgYSBTbWl0aHkgdGFyZ2V0IHRvIGEgZ2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNtaXRoeVRhcmdldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBTbWl0aHkgbW9kZWwgZGVmaW5pbmcgdGhlIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgc21pdGh5TW9kZWw6IEFwaVNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIEBkZWZhdWx0IC0gW0dhdGV3YXlDcmVkZW50aWFsUHJvdmlkZXIuaWFtUm9sZSgpXVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGFuIE1DUCBTZXJ2ZXIgdGFyZ2V0IHRvIGEgZ2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE1jcFNlcnZlclRhcmdldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQUyBlbmRwb2ludCBVUkwgb2YgdGhlIE1DUCBzZXJ2ZXJcbiAgICpcbiAgICogVGhlIGVuZHBvaW50IG11c3Q6XG4gICAqIC0gVXNlIEhUVFBTIHByb3RvY29sXG4gICAqIC0gQmUgcHJvcGVybHkgVVJMLWVuY29kZWRcbiAgICogLSBQb2ludCB0byBhbiBNQ1Agc2VydmVyIHRoYXQgaW1wbGVtZW50cyB0b29sIGNhcGFiaWxpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqXG4gICAqIE1DUCBzZXJ2ZXJzIHJlcXVpcmUgZXhwbGljaXQgYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogT0F1dGgyIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIG92ZXIgTm9BdXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBkZWZpbmluZyBhIEdhdGV3YXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5UHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXlcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHlvdXIgYWNjb3VudFxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSksIC0gKGh5cGhlbikgYW5kIHNwYWNlc1xuICAgKiBUaGUgZGVzY3JpcHRpb24gY2FuIGhhdmUgdXAgdG8gMjAwIGNoYXJhY3RlcnNcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBAZGVmYXVsdCAtIEEgZGVmYXVsdCBwcm90b2NvbCBjb25maWd1cmF0aW9uIHdpbGwgYmUgY3JlYXRlZCB1c2luZyBNQ1Agd2l0aCBmb2xsb3dpbmcgcGFyYW1zXG4gICAqICBzdXBwb3J0ZWRWZXJzaW9uczogW01DUFByb3RvY29sVmVyc2lvbi5NQ1BfMjAyNV8wM18yNl0sXG4gICAqICBzZWFyY2hUeXBlOiBNY3BHYXRld2F5U2VhcmNoVHlwZS5TRU1BTlRJQyxcbiAgICogIGluc3RydWN0aW9uczogXCJEZWZhdWx0IGdhdGV3YXkgdG8gY29ubmVjdCB0byBleHRlcm5hbCBNQ1AgdG9vbHNcIixcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sQ29uZmlndXJhdGlvbj86IElHYXRld2F5UHJvdG9jb2xDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqIEBkZWZhdWx0IC0gQSBkZWZhdWx0IGF1dGhvcml6ZXIgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIENvZ25pdG9cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uPzogSUdhdGV3YXlBdXRob3JpemVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyYm9zaXR5IG9mIGV4Y2VwdGlvbiBtZXNzYWdlc1xuICAgKiBVc2UgREVCVUcgbW9kZSB0byBzZWUgZ3JhbnVsYXIgZXhjZXB0aW9uIG1lc3NhZ2VzIGZyb20gYSBHYXRld2F5XG4gICAqIEBkZWZhdWx0IC0gRXhjZXB0aW9uIG1lc3NhZ2VzIGFyZSBzYW5pdGl6ZWQgZm9yIHByZXNlbnRhdGlvbiB0byBlbmQgdXNlcnNcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2VwdGlvbkxldmVsPzogR2F0ZXdheUV4Y2VwdGlvbkxldmVsO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnYXRld2F5XG4gICAqIEBkZWZhdWx0IC0gTm8gZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgZ2F0ZXdheSB0byBhY2Nlc3MgQVdTIHNlcnZpY2VzXG4gICAqIEBkZWZhdWx0IC0gQSBuZXcgcm9sZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBnYXRld2F5XG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIEdhdGV3YXkgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQgLSBObyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogSW50ZXJjZXB0b3IgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBnYXRld2F5XG4gICAqXG4gICAqIEludGVyY2VwdG9ycyBhbGxvdyB5b3UgdG8gcnVuIGN1c3RvbSBjb2RlIGR1cmluZyBlYWNoIGdhdGV3YXkgaW52b2NhdGlvbjpcbiAgICogLSBSRVFVRVNUIGludGVyY2VwdG9ycyBleGVjdXRlIGJlZm9yZSB0aGUgZ2F0ZXdheSBjYWxscyB0aGUgdGFyZ2V0XG4gICAqIC0gUkVTUE9OU0UgaW50ZXJjZXB0b3JzIGV4ZWN1dGUgYWZ0ZXIgdGhlIHRhcmdldCByZXNwb25kc1xuICAgKlxuICAgKiBBIGdhdGV3YXkgY2FuIGhhdmUgYXQgbW9zdCBvbmUgUkVRVUVTVCBpbnRlcmNlcHRvciBhbmQgb25lIFJFU1BPTlNFIGludGVyY2VwdG9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGludGVyY2VwdG9yc1xuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS1pbnRlcmNlcHRvcnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucz86IElJbnRlcmNlcHRvcltdO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBHYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBHYXRld2F5IHJlc291cmNlIGZvciBBV1MgQmVkcm9jayBBZ2VudCBDb3JlLlxuICogU2VydmVzIGFzIGFuIGludGVncmF0aW9uIHBvaW50IGJldHdlZW4geW91ciBhZ2VudCBhbmQgZXh0ZXJuYWwgc2VydmljZXMuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVHYXRld2F5Lmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEdhdGV3YXkgZXh0ZW5kcyBHYXRld2F5QmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkdhdGV3YXknO1xuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEdhdGV3YXkgdXNpbmcgaXRzIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBleGlzdGluZyBHYXRld2F5XG4gICAqIEByZXR1cm5zIEFuIElHYXRld2F5IGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgaW1wb3J0ZWQgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tR2F0ZXdheUF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBHYXRld2F5QXR0cmlidXRlcyxcbiAgKTogSUdhdGV3YXkge1xuICAgIGNsYXNzIEltcG9ydGVkR2F0ZXdheSBleHRlbmRzIEdhdGV3YXlCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBnYXRld2F5QXJuID0gYXR0cnMuZ2F0ZXdheUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBnYXRld2F5SWQgPSBhdHRycy5nYXRld2F5SWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9IGF0dHJzLmdhdGV3YXlOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHByb3RvY29sQ29uZmlndXJhdGlvbjogSUdhdGV3YXlQcm90b2NvbENvbmZpZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbjogSUdhdGV3YXlBdXRob3JpemVyQ29uZmlnO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4Y2VwdGlvbkxldmVsID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGttc0tleSA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlID0gYXR0cnMucm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBnYXRld2F5VXJsID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNSZWFzb24gPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG4gICAgICAgIC8vIENyZWF0ZSBwbGFjZWhvbGRlciBwcm90b2NvbCBhbmQgYXV0aG9yaXplciBjb25maWd1cmF0aW9uc1xuICAgICAgICB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbiA9IG5ldyBNY3BQcm90b2NvbENvbmZpZ3VyYXRpb24oe1xuICAgICAgICAgIHN1cHBvcnRlZFZlcnNpb25zOiBbTUNQUHJvdG9jb2xWZXJzaW9uLk1DUF8yMDI1XzAzXzI2XSxcbiAgICAgICAgICBzZWFyY2hUeXBlOiBNY3BHYXRld2F5U2VhcmNoVHlwZS5TRU1BTlRJQyxcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICdJbXBvcnRlZCBnYXRld2F5JyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBHYXRld2F5QXV0aG9yaXplci51c2luZ0F3c0lhbSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydGVkR2F0ZXdheShzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhdGV3YXlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXlBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBnYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb246IElHYXRld2F5UHJvdG9jb2xDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb246IElHYXRld2F5QXV0aG9yaXplckNvbmZpZztcblxuICAvKipcbiAgICogVGhlIGV4Y2VwdGlvbiBsZXZlbCBmb3IgdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleGNlcHRpb25MZXZlbD86IEdhdGV3YXlFeGNlcHRpb25MZXZlbDtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIGVuZHBvaW50IGZvciB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheVVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIHJlYXNvbnMgZm9yIHRoZSBnYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNSZWFzb24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGdhdGV3YXkgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGdhdGV3YXkgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYWdzIGFwcGxpZWQgdG8gdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gVXNlciBQb29sIGNyZWF0ZWQgZm9yIHRoZSBnYXRld2F5IChpZiB1c2luZyBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplcilcbiAgICovXG4gIHB1YmxpYyB1c2VyUG9vbD86IGNvZ25pdG8uSVVzZXJQb29sO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wgQ2xpZW50IGNyZWF0ZWQgZm9yIHRoZSBnYXRld2F5IChpZiB1c2luZyBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplcilcbiAgICovXG4gIHB1YmxpYyB1c2VyUG9vbENsaWVudD86IGNvZ25pdG8uSVVzZXJQb29sQ2xpZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgUkVRVUVTVCBpbnRlcmNlcHRvciBjb25maWd1cmF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZXF1ZXN0SW50ZXJjZXB0b3JDb25maWc/OiBJbnRlcmNlcHRvckJpbmRDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBSRVNQT05TRSBpbnRlcmNlcHRvciBjb25maWd1cmF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZXNwb25zZUludGVyY2VwdG9yQ29uZmlnPzogSW50ZXJjZXB0b3JCaW5kQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wgRG9tYWluIGNyZWF0ZWQgZm9yIHRoZSBnYXRld2F5IChpZiB1c2luZyBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplcilcbiAgICovXG4gIHB1YmxpYyB1c2VyUG9vbERvbWFpbj86IGNvZ25pdG8uSVVzZXJQb29sRG9tYWluO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBSZXNvdXJjZSBTZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGdhdGV3YXkgKGlmIHVzaW5nIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyKVxuICAgKi9cbiAgcHVibGljIHJlc291cmNlU2VydmVyPzogY29nbml0by5JVXNlclBvb2xSZXNvdXJjZVNlcnZlcjtcblxuICAvKipcbiAgICogVGhlIE9BdXRoMiB0b2tlbiBlbmRwb2ludCBVUkwgZm9yIGNsaWVudCBjcmVkZW50aWFscyBmbG93LlxuICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0b2tlbkVuZHBvaW50VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT0F1dGgyIHNjb3BlIHN0cmluZ3MgZm9yIGNsaWVudCBjcmVkZW50aWFscyBmbG93LlxuICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvYXV0aFNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzIGlzIGNob3NlbiBpbnN0ZWFkIG9mIDEwMCBjaGFyYWN0ZXJzIHRoYXQgbWVudGlvbmVkIGluIGRvY3VtZW50YXRpb24gYmVsb3csXG4gICAgICAvLyBkdWUgdG8gZmFpbHVyZSBpbiBDRiBkZXBsb3ltZW50IHdoZW4gbW9yZSB0aGFuIDQ4IGNoYXJhY3RlcnMgdXNlZFxuICAgICAgLy8gQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1iZWRyb2NrYWdlbnRjb3JlLWdhdGV3YXkuaHRtbCNjZm4tYmVkcm9ja2FnZW50Y29yZS1nYXRld2F5LW5hbWVcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZ2F0ZXdheU5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXNzaWdubWVudHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHRoaXMubmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMudmFsaWRhdGVHYXRld2F5TmFtZSh0aGlzLm5hbWUpO1xuXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRGVzY3JpcHRpb24odGhpcy5kZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5rbXNLZXkgPSBwcm9wcy5rbXNLZXk7XG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZSA/PyB0aGlzLmNyZWF0ZUdhdGV3YXlSb2xlKCk7XG5cbiAgICBpZiAodGhpcy5rbXNLZXkgJiYgdGhpcy5yb2xlKSB7XG4gICAgICB0aGlzLmttc0tleS5ncmFudEVuY3J5cHREZWNyeXB0KHRoaXMucm9sZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPz8gdGhpcy5jcmVhdGVEZWZhdWx0TWNwUHJvdG9jb2xDb25maWd1cmF0aW9uKCk7XG4gICAgaWYgKHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gcHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb2duaXRvQXV0aCA9IHRoaXMuY3JlYXRlRGVmYXVsdENvZ25pdG9BdXRob3JpemVyQ29uZmlnKCk7XG4gICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gZGVmYXVsdENvZ25pdG9BdXRoLmF1dGhvcml6ZXJDb25maWc7XG4gICAgICB0aGlzLnRva2VuRW5kcG9pbnRVcmwgPSBkZWZhdWx0Q29nbml0b0F1dGgudG9rZW5FbmRwb2ludFVybDtcbiAgICAgIHRoaXMub2F1dGhTY29wZXMgPSBkZWZhdWx0Q29nbml0b0F1dGgub2F1dGhTY29wZXM7XG4gICAgfVxuICAgIHRoaXMuZXhjZXB0aW9uTGV2ZWwgPSBwcm9wcy5leGNlcHRpb25MZXZlbDtcblxuICAgIHRoaXMudGFncyA9IHByb3BzLnRhZ3MgPz8ge307XG5cbiAgICAvLyBJbml0aWFsaXplIGludGVyY2VwdG9ycyBmcm9tIHByb3BzXG4gICAgaWYgKHByb3BzLmludGVyY2VwdG9yQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBbmRJbml0aWFsaXplSW50ZXJjZXB0b3JzKHByb3BzLmludGVyY2VwdG9yQ29uZmlndXJhdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEwxIEluc3RhbnRpYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBfcmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5HYXRld2F5KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLl9yZW5kZXIoKSxcbiAgICAgIGF1dGhvcml6ZXJUeXBlOiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLmF1dGhvcml6ZXJUeXBlLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBleGNlcHRpb25MZXZlbDogdGhpcy5leGNlcHRpb25MZXZlbCxcbiAgICAgIGludGVyY2VwdG9yQ29uZmlndXJhdGlvbnM6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25zKCksXG4gICAgICB9KSxcbiAgICAgIGttc0tleUFybjogdGhpcy5rbXNLZXk/LmtleUFybixcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24uX3JlbmRlcigpLFxuICAgICAgcHJvdG9jb2xUeXBlOiB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbi5wcm90b2NvbFR5cGUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGU/LnJvbGVBcm4sXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmdhdGV3YXlJZCA9IF9yZXNvdXJjZS5hdHRyR2F0ZXdheUlkZW50aWZpZXI7XG4gICAgdGhpcy5nYXRld2F5QXJuID0gX3Jlc291cmNlLmF0dHJHYXRld2F5QXJuO1xuICAgIHRoaXMuZ2F0ZXdheVVybCA9IF9yZXNvdXJjZS5hdHRyR2F0ZXdheVVybDtcbiAgICB0aGlzLnN0YXR1cyA9IF9yZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gX3Jlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSBfcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgICB0aGlzLnN0YXR1c1JlYXNvbiA9IF9yZXNvdXJjZS5hdHRyU3RhdHVzUmVhc29ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBMYW1iZGEgdGFyZ2V0IHRvIHRoaXMgZ2F0ZXdheVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIEdhdGV3YXlUYXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZCBmb3IgdGhlIHRhcmdldFxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIExhbWJkYSB0YXJnZXRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgR2F0ZXdheVRhcmdldFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZExhbWJkYVRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRMYW1iZGFUYXJnZXRPcHRpb25zLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICAvLyBMYW1iZGEgaW52b2tlIHBlcm1pc3Npb25zIGFyZSBhdXRvbWF0aWNhbGx5IGdyYW50ZWQgaW4gTGFtYmRhVGFyZ2V0Q29uZmlndXJhdGlvbi5iaW5kKClcbiAgICAvLyBCdWlsZCB0YXJnZXQgcHJvcHMsIGNvbmRpdGlvbmFsbHkgaW5jbHVkaW5nIGNyZWRlbnRpYWxzIGlmIGFycmF5IGhhcyBpdGVtc1xuICAgIGNvbnN0IHRhcmdldFByb3BzOiBhbnkgPSB7XG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBnYXRld2F5OiB0aGlzLFxuICAgICAgbGFtYmRhRnVuY3Rpb246IHByb3BzLmxhbWJkYUZ1bmN0aW9uLFxuICAgICAgdG9vbFNjaGVtYTogcHJvcHMudG9vbFNjaGVtYSxcbiAgICAgIC4uLihwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyAmJiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgID8geyBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gR2F0ZXdheVRhcmdldC5mb3JMYW1iZGEodGhpcywgaWQsIHRhcmdldFByb3BzKTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIE9wZW5BUEkgdGFyZ2V0IHRvIHRoaXMgZ2F0ZXdheVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIEdhdGV3YXlUYXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZCBmb3IgdGhlIHRhcmdldFxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIE9wZW5BUEkgdGFyZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEdhdGV3YXlUYXJnZXRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRPcGVuQXBpVGFyZ2V0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZE9wZW5BcGlUYXJnZXRPcHRpb25zLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICBjb25zdCB0YXJnZXQgPSBHYXRld2F5VGFyZ2V0LmZvck9wZW5BcGkodGhpcywgaWQsIHtcbiAgICAgIGdhdGV3YXlUYXJnZXROYW1lOiBwcm9wcy5nYXRld2F5VGFyZ2V0TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdhdGV3YXk6IHRoaXMsXG4gICAgICBhcGlTY2hlbWE6IHByb3BzLmFwaVNjaGVtYSxcbiAgICAgIHZhbGlkYXRlT3BlbkFwaVNjaGVtYTogcHJvcHMudmFsaWRhdGVPcGVuQXBpU2NoZW1hLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBTbWl0aHkgdGFyZ2V0IHRvIHRoaXMgZ2F0ZXdheVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIEdhdGV3YXlUYXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZCBmb3IgdGhlIHRhcmdldFxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIFNtaXRoeSB0YXJnZXRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgR2F0ZXdheVRhcmdldFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFNtaXRoeVRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRTbWl0aHlUYXJnZXRPcHRpb25zLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICAvLyBCdWlsZCB0YXJnZXQgcHJvcHMsIGNvbmRpdGlvbmFsbHkgaW5jbHVkaW5nIGNyZWRlbnRpYWxzIGlmIGFycmF5IGhhcyBpdGVtc1xuICAgIGNvbnN0IHRhcmdldFByb3BzOiBhbnkgPSB7XG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBnYXRld2F5OiB0aGlzLFxuICAgICAgc21pdGh5TW9kZWw6IHByb3BzLnNtaXRoeU1vZGVsLFxuICAgICAgLi4uKHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zICYmIHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG5cbiAgICBjb25zdCB0YXJnZXQgPSBHYXRld2F5VGFyZ2V0LmZvclNtaXRoeSh0aGlzLCBpZCwgdGFyZ2V0UHJvcHMpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gTUNQIHNlcnZlciB0YXJnZXQgdG8gdGhpcyBnYXRld2F5XG4gICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgR2F0ZXdheVRhcmdldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5XG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkIGZvciB0aGUgdGFyZ2V0XG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wZXJ0aWVzIGZvciB0aGUgTUNQIHNlcnZlciB0YXJnZXRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgR2F0ZXdheVRhcmdldFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS10YXJnZXQtTUNQc2VydmVycy5odG1sXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkTWNwU2VydmVyVGFyZ2V0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZE1jcFNlcnZlclRhcmdldE9wdGlvbnMsXG4gICk6IEdhdGV3YXlUYXJnZXQge1xuICAgIC8vIEJ1aWxkIHRhcmdldCBwcm9wcywgY29uZGl0aW9uYWxseSBpbmNsdWRpbmcgY3JlZGVudGlhbHMgaWYgYXJyYXkgaGFzIGl0ZW1zXG4gICAgY29uc3QgdGFyZ2V0UHJvcHM6IGFueSA9IHtcbiAgICAgIGdhdGV3YXlUYXJnZXROYW1lOiBwcm9wcy5nYXRld2F5VGFyZ2V0TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdhdGV3YXk6IHRoaXMsXG4gICAgICBlbmRwb2ludDogcHJvcHMuZW5kcG9pbnQsXG4gICAgICAuLi4ocHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgJiYgcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICA/IHsgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcblxuICAgIGNvbnN0IHRhcmdldCA9IEdhdGV3YXlUYXJnZXQuZm9yTWNwU2VydmVyKHRoaXMsIGlkLCB0YXJnZXRQcm9wcyk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHNlcnZpY2Ugcm9sZSBmb3IgdGhlIGdhdGV3YXkgdG8gYXNzdW1lXG4gICAqXG4gICAqIFRoZSBzZXJ2aWNlIHJvbGUgc3RhcnRzIHdpdGggbWluaW1hbCBwZXJtaXNzaW9ucy4gQWRkaXRpb25hbCBwZXJtaXNzaW9uc1xuICAgKiBhcmUgYWRkZWQgYXV0b21hdGljYWxseSB3aGVuIHRhcmdldHMgYXJlIGNvbmZpZ3VyZWQ6XG4gICAqIC0gS01TIGVuY3J5cHRpb246IEF1dG9tYXRpY2FsbHkgZ3JhbnRzIGVuY3J5cHQvZGVjcnlwdCBwZXJtaXNzaW9uc1xuICAgKlxuICAgKiBGb3Igb3RoZXIgdGFyZ2V0IHR5cGVzLCBtYW51YWxseSBncmFudCBwZXJtaXNzaW9ucyB1c2luZyBzdGFuZGFyZCBDREsgZ3JhbnQgbWV0aG9kczpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUdhdGV3YXlSb2xlKCk6IGlhbS5Sb2xlIHtcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgICBkZXNjcmlwdGlvbjogYFNlcnZpY2Ugcm9sZSBmb3IgQmVkcm9jayBBZ2VudENvcmUgR2F0ZXdheSAke3RoaXMubmFtZX1gLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGNvbnN0IGFjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9IFN0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbjtcblxuICAgIC8vIFRoaXMgcmVzdHJpY3RzIHJvbGUgYXNzdW1wdGlvbiB0byB0aGUgc3BlY2lmaWMgZ2F0ZXdheSByZXNvdXJjZSBvbmx5IGluIHRoaXMgYWNjb3VudCxcbiAgICAvLyBwcmV2ZW50aW5nIG90aGVyIGFjY291bnRzIGZyb20gYXNzdW1pbmcgdGhpcyByb2xlLlxuICAgIC8vIFNlZTpodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2dhdGV3YXktcHJlcmVxdWlzaXRlcy1wZXJtaXNzaW9ucy5odG1sI2dhdGV3YXktc2VydmljZS1yb2xlLXBlcm1pc3Npb25zXG4gICAgcm9sZS5hc3N1bWVSb2xlUG9saWN5Py5hZGRTdGF0ZW1lbnRzKFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIHByaW5jaXBhbHM6IFtuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nKV0sXG4gICAgICAgIGFjdGlvbnM6IEdBVEVXQVlfQVNTVU1FX1JPTEUsXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICdhd3M6U291cmNlQWNjb3VudCc6IGFjY291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBBcm5MaWtlOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFybic6IGBhcm46JHtwYXJ0aXRpb259OmJlZHJvY2stYWdlbnRjb3JlOiR7cmVnaW9ufToke2FjY291bnR9OmdhdGV3YXkvJHt0aGlzLm5hbWV9KmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5rbXNLZXkpIHtcbiAgICAgIHJvbGUuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IEdBVEVXQVlfS01TX0tFWV9QRVJNUyxcbiAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5rbXNLZXkua2V5QXJuXSxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBnYXRld2F5IG5hbWUgZm9ybWF0XG4gICAqIFBhdHRlcm46IF4oWzAtOWEtekEtWl1bLV0/KXsxLDQ4fSRcbiAgICogTWF4IGxlbmd0aDogNDggY2hhcmFjdGVyc1xuICAgKiBAcGFyYW0gbmFtZSBUaGUgZ2F0ZXdheSBuYW1lIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG5hbWUgaXMgaW52YWxpZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVHYXRld2F5TmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogNDgsXG4gICAgICBmaWVsZE5hbWU6ICdHYXRld2F5IG5hbWUnLFxuICAgIH0pO1xuXG4gICAgaWYgKGxlbmd0aEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxlbmd0aEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgbmFtZSxcbiAgICAgICdHYXRld2F5IG5hbWUnLFxuICAgICAgL14oWzAtOWEtekEtWl1bLV0/KXsxLDQ4fSQvLFxuICAgICAgJ0dhdGV3YXkgbmFtZSBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucywgd2l0aCBoeXBoZW5zIG9ubHkgYmV0d2VlbiBjaGFyYWN0ZXJzJyxcbiAgICApO1xuXG4gICAgaWYgKHBhdHRlcm5FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihwYXR0ZXJuRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXRcbiAgICogTWF4IGxlbmd0aDogMjAwIGNoYXJhY3RlcnNcbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICB2YWx1ZTogZGVzY3JpcHRpb24sXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDIwMCxcbiAgICAgIGZpZWxkTmFtZTogJ0Rlc2NyaXB0aW9uJyxcbiAgICB9KTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIgZm9yIHRoZSBnYXRld2F5XG4gICAqIFByb3Zpc2lvbnMgYSBDb2duaXRvIFVzZXIgUG9vbCBhbmQgY29uZmlndXJlcyBNMk0gKG1hY2hpbmUtdG8tbWFjaGluZSkgSldUIGF1dGhlbnRpY2F0aW9uXG4gICAqIHVzaW5nIE9BdXRoIDIuMCBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQgZmxvd1xuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWNvZ25pdG8uaHRtbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdENvZ25pdG9BdXRob3JpemVyQ29uZmlnKCk6IHtcbiAgICBhdXRob3JpemVyQ29uZmlnOiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWc7XG4gICAgdG9rZW5FbmRwb2ludFVybDogc3RyaW5nO1xuICAgIG9hdXRoU2NvcGVzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgdXNlclBvb2wgPSBuZXcgY29nbml0by5Vc2VyUG9vbCh0aGlzLCAnVXNlclBvb2wnLCB7XG4gICAgICBzaWduSW5DYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc291cmNlU2VydmVyID0gdXNlclBvb2wuYWRkUmVzb3VyY2VTZXJ2ZXIoJ1Jlc291cmNlU2VydmVyJywge1xuICAgICAgaWRlbnRpZmllcjogTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAyNTYsIHNlcGFyYXRvcjogJy0nIH0pLFxuICAgICAgc2NvcGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzY29wZU5hbWU6ICdyZWFkJyxcbiAgICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnUmVhZCBhY2Nlc3MgdG8gZ2F0ZXdheSB0b29scycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzY29wZU5hbWU6ICd3cml0ZScsXG4gICAgICAgICAgc2NvcGVEZXNjcmlwdGlvbjogJ1dyaXRlIGFjY2VzcyB0byBnYXRld2F5IHRvb2xzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvYXV0aFNjb3BlcyA9IFtcbiAgICAgIGNvZ25pdG8uT0F1dGhTY29wZS5yZXNvdXJjZVNlcnZlcihyZXNvdXJjZVNlcnZlciwge1xuICAgICAgICBzY29wZU5hbWU6ICdyZWFkJyxcbiAgICAgICAgc2NvcGVEZXNjcmlwdGlvbjogJ1JlYWQgYWNjZXNzIHRvIGdhdGV3YXkgdG9vbHMnLFxuICAgICAgfSksXG4gICAgICBjb2duaXRvLk9BdXRoU2NvcGUucmVzb3VyY2VTZXJ2ZXIocmVzb3VyY2VTZXJ2ZXIsIHtcbiAgICAgICAgc2NvcGVOYW1lOiAnd3JpdGUnLFxuICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnV3JpdGUgYWNjZXNzIHRvIGdhdGV3YXkgdG9vbHMnLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIGNvbnN0IHVzZXJQb29sQ2xpZW50ID0gdXNlclBvb2wuYWRkQ2xpZW50KCdEZWZhdWx0Q2xpZW50Jywge1xuICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHRydWUsXG4gICAgICBvQXV0aDoge1xuICAgICAgICBmbG93czoge1xuICAgICAgICAgIGNsaWVudENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzY29wZXM6IG9hdXRoU2NvcGVzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBDb2duaXRvIERvbWFpbiBmb3IgT0F1dGgyIHRva2VuIGVuZHBvaW50XG4gICAgLy8gVXNlIHVuaXF1ZVJlc291cmNlTmFtZSB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBkb21haW4gcHJlZml4IHRvTG93ZXJDYXNlKCkgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgaGFzaCBwb3J0aW9uIGlzIHVwcGVyY2FzZVxuICAgIGNvbnN0IGRvbWFpblByZWZpeCA9IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICBtYXhMZW5ndGg6IDYzLCAvLyBDb2duaXRvIGRvbWFpbiBwcmVmaXggbWF4IGxlbmd0aFxuICAgICAgc2VwYXJhdG9yOiAnLScsXG4gICAgfSkudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IHVzZXJQb29sRG9tYWluID0gdXNlclBvb2wuYWRkRG9tYWluKCdEb21haW4nLCB7XG4gICAgICBjb2duaXRvRG9tYWluOiB7XG4gICAgICAgIGRvbWFpblByZWZpeDogZG9tYWluUHJlZml4LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMudXNlclBvb2wgPSB1c2VyUG9vbDtcbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50ID0gdXNlclBvb2xDbGllbnQ7XG4gICAgdGhpcy51c2VyUG9vbERvbWFpbiA9IHVzZXJQb29sRG9tYWluO1xuICAgIHRoaXMucmVzb3VyY2VTZXJ2ZXIgPSByZXNvdXJjZVNlcnZlcjtcblxuICAgIHJldHVybiB7XG4gICAgICBhdXRob3JpemVyQ29uZmlnOiBHYXRld2F5QXV0aG9yaXplci51c2luZ0NvZ25pdG8oe1xuICAgICAgICB1c2VyUG9vbDogdXNlclBvb2wsXG4gICAgICAgIGFsbG93ZWRDbGllbnRzOiBbdXNlclBvb2xDbGllbnRdLFxuICAgICAgfSksXG4gICAgICB0b2tlbkVuZHBvaW50VXJsOiBgaHR0cHM6Ly8ke3VzZXJQb29sRG9tYWluLmRvbWFpbk5hbWV9LmF1dGguJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmNvZ25pdG8uY29tL29hdXRoMi90b2tlbmAsXG4gICAgICBvYXV0aFNjb3Blczogb2F1dGhTY29wZXMubWFwKHNjb3BlID0+IHNjb3BlLnNjb3BlTmFtZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBNQ1AgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICogUHJvdmlkZXMgc2Vuc2libGUgZGVmYXVsdHMgZm9yIE1DUCBwcm90b2NvbCBzZXR0aW5nc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdE1jcFByb3RvY29sQ29uZmlndXJhdGlvbigpOiBJR2F0ZXdheVByb3RvY29sQ29uZmlnIHtcbiAgICByZXR1cm4gbmV3IE1jcFByb3RvY29sQ29uZmlndXJhdGlvbih7XG4gICAgICBzdXBwb3J0ZWRWZXJzaW9uczogW01DUFByb3RvY29sVmVyc2lvbi5NQ1BfMjAyNV8wM18yNl0sXG4gICAgICBzZWFyY2hUeXBlOiBNY3BHYXRld2F5U2VhcmNoVHlwZS5TRU1BTlRJQyxcbiAgICAgIGluc3RydWN0aW9uczogJ0RlZmF1bHQgZ2F0ZXdheSB0byBjb25uZWN0IHRvIGV4dGVybmFsIE1DUCB0b29scycsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGludGVyY2VwdG9yIHRvIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBJbnRlcmNlcHRvcnMgYWxsb3cgeW91IHRvIHJ1biBjdXN0b20gY29kZSBhdCBzcGVjaWZpYyBwb2ludHMgaW4gdGhlIGdhdGV3YXkgcmVxdWVzdC9yZXNwb25zZSBmbG93OlxuICAgKiAtIFJFUVVFU1QgaW50ZXJjZXB0b3JzIGV4ZWN1dGUgYmVmb3JlIHRoZSBnYXRld2F5IGNhbGxzIHRoZSB0YXJnZXRcbiAgICogLSBSRVNQT05TRSBpbnRlcmNlcHRvcnMgZXhlY3V0ZSBhZnRlciB0aGUgdGFyZ2V0IHJlc3BvbmRzXG4gICAqXG4gICAqIEEgZ2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVFVRVNUIGludGVyY2VwdG9yIGFuZCBvbmUgUkVTUE9OU0UgaW50ZXJjZXB0b3IuXG4gICAqIEBwYXJhbSBpbnRlcmNlcHRvciBUaGUgaW50ZXJjZXB0b3IgdG8gYWRkICh1c2UgTGFtYmRhSW50ZXJjZXB0b3IgZmFjdG9yeSBtZXRob2RzKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGFuIGludGVyY2VwdG9yIG9mIHRoZSBzYW1lIHR5cGUgYWxyZWFkeSBleGlzdHNcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRJbnRlcmNlcHRvcihpbnRlcmNlcHRvcjogSUludGVyY2VwdG9yKTogdm9pZCB7XG4gICAgY29uc3QgaW50ZXJjZXB0aW9uUG9pbnQgPSBpbnRlcmNlcHRvci5pbnRlcmNlcHRpb25Qb2ludDtcblxuICAgIGlmIChpbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVRVUVTVCkge1xuICAgICAgaWYgKHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgJ0dhdGV3YXkgYWxyZWFkeSBoYXMgYSBSRVFVRVNUIGludGVyY2VwdG9yIGNvbmZpZ3VyZWQuIEEgZ2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVFVRVNUIGludGVyY2VwdG9yLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcXVlc3RJbnRlcmNlcHRvckNvbmZpZyA9IGludGVyY2VwdG9yLmJpbmQodGhpcywgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChpbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVTUE9OU0UpIHtcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JDb25maWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAnR2F0ZXdheSBhbHJlYWR5IGhhcyBhIFJFU1BPTlNFIGludGVyY2VwdG9yIGNvbmZpZ3VyZWQuIEEgZ2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVNQT05TRSBpbnRlcmNlcHRvci4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXNwb25zZUludGVyY2VwdG9yQ29uZmlnID0gaW50ZXJjZXB0b3IuYmluZCh0aGlzLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuZCBpbml0aWFsaXplcyBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbnNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQW5kSW5pdGlhbGl6ZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcnM6IElJbnRlcmNlcHRvcltdKTogdm9pZCB7XG4gICAgY29uc3QgcmVxdWVzdENvdW50ID0gaW50ZXJjZXB0b3JzLmZpbHRlcihpID0+IGkuaW50ZXJjZXB0aW9uUG9pbnQgPT09IEludGVyY2VwdGlvblBvaW50LlJFUVVFU1QpLmxlbmd0aDtcbiAgICBjb25zdCByZXNwb25zZUNvdW50ID0gaW50ZXJjZXB0b3JzLmZpbHRlcihpID0+IGkuaW50ZXJjZXB0aW9uUG9pbnQgPT09IEludGVyY2VwdGlvblBvaW50LlJFU1BPTlNFKS5sZW5ndGg7XG5cbiAgICBpZiAocmVxdWVzdENvdW50ID4gMSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYEdhdGV3YXkgY2FuIGhhdmUgYXQgbW9zdCBvbmUgUkVRVUVTVCBpbnRlcmNlcHRvci4gRm91bmQgJHtyZXF1ZXN0Q291bnR9IFJFUVVFU1QgaW50ZXJjZXB0b3JzLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZUNvdW50ID4gMSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYEdhdGV3YXkgY2FuIGhhdmUgYXQgbW9zdCBvbmUgUkVTUE9OU0UgaW50ZXJjZXB0b3IuIEZvdW5kICR7cmVzcG9uc2VDb3VudH0gUkVTUE9OU0UgaW50ZXJjZXB0b3JzLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICB0aGlzLmFkZEludGVyY2VwdG9yKGludGVyY2VwdG9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgaW50ZXJjZXB0b3IgY29uZmlndXJhdGlvbnMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vIGludGVyY2VwdG9ycyBhcmUgY29uZmlndXJlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVySW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucygpOiBhbnlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29uZmlnczogYW55W10gPSBbXTtcblxuICAgIGlmICh0aGlzLnJlcXVlc3RJbnRlcmNlcHRvckNvbmZpZykge1xuICAgICAgY29uZmlncy5wdXNoKHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnLmNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JDb25maWcpIHtcbiAgICAgIGNvbmZpZ3MucHVzaCh0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JDb25maWcuY29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ3MubGVuZ3RoID4gMCA/IGNvbmZpZ3MgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
725
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdhdGV3YXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXdEO0FBRXhELHFFQUFxRTtBQUNyRSxtREFBbUQ7QUFDbkQsMkNBQTJDO0FBRzNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsaURBQTZDO0FBRTdDLDBEQUE4RDtBQUU5RCwrQ0FBa0Q7QUFFbEQsbUNBQXFFO0FBRXJFLHlDQUFnRztBQUdoRyw2Q0FBaUQ7QUFFakQsNkRBQWtHO0FBcVNsRzs7K0VBRStFO0FBQy9FOzs7Ozs7R0FNRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7Ozs7Ozs7dUJBQW5CLFNBQVEsV0FBVzs7OzsyQ0FrUXJDLElBQUEsa0NBQWMsR0FBRTs0Q0ErQmhCLElBQUEsa0NBQWMsR0FBRTsyQ0F5QmhCLElBQUEsa0NBQWMsR0FBRTs4Q0E4QmhCLElBQUEsa0NBQWMsR0FBRTsrQ0E4QmhCLElBQUEsa0NBQWMsR0FBRTswQ0F5T2hCLElBQUEsa0NBQWMsR0FBRTtZQTVWakIsZ01BQU8sZUFBZSw2REFvQnJCO1lBV0QsbU1BQU8sZ0JBQWdCLDZEQWN0QjtZQVdELGdNQUFPLGVBQWUsNkRBa0JyQjtZQVlELHlNQUFPLGtCQUFrQiw2REFrQnhCO1lBWUQsNE1BQU8sbUJBQW1CLDZEQWtCekI7WUF1TkQsNkxBQU8sY0FBYyw2REFrQnBCO1lBbG5CSCw2S0ErcEJDOzs7OztRQTlwQkMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyw4Q0FBOEMsQ0FBQztRQUN0Rzs7Ozs7OztXQU9HO1FBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUNqQyxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBd0I7Ozs7Ozs7Ozs7WUFFeEIsTUFBTSxlQUFnQixTQUFRLDBCQUFXO2dCQUN2QixVQUFVLEdBQUcsS0FB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TUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixLQUFLLCtCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUUxRyxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLG9DQUFlLENBQ3ZCLDJEQUEyRCxZQUFZLHdCQUF3QixDQUNoRyxDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLElBQUksb0NBQWUsQ0FDdkIsNERBQTRELGFBQWEseUJBQXlCLENBQ25HLENBQUM7WUFDSixDQUFDO1lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuQyxDQUFDO1NBQ0Y7UUFFRDs7OztXQUlHO1FBQ0ssK0JBQStCO1lBQ3JDLE1BQU0sT0FBTyxHQUFVLEVBQUUsQ0FBQztZQUUxQixJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ2pEOztZQTlwQlUsdURBQU87Ozs7O0FBQVAsMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgVG9rZW4sIExhenksIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBJUmVzdEFwaSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgY29nbml0byBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29nbml0byc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlIHsgSUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbi8vIEludGVybmFsIGltcG9ydHNcbmltcG9ydCB0eXBlIHsgR2F0ZXdheUV4Y2VwdGlvbkxldmVsLCBJR2F0ZXdheSB9IGZyb20gJy4vZ2F0ZXdheS1iYXNlJztcbmltcG9ydCB7IEdhdGV3YXlCYXNlIH0gZnJvbSAnLi9nYXRld2F5LWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWcgfSBmcm9tICcuL2luYm91bmQtYXV0aC9hdXRob3JpemVyJztcbmltcG9ydCB7IEdhdGV3YXlBdXRob3JpemVyIH0gZnJvbSAnLi9pbmJvdW5kLWF1dGgvYXV0aG9yaXplcic7XG5pbXBvcnQgdHlwZSB7IElJbnRlcmNlcHRvciwgSW50ZXJjZXB0b3JCaW5kQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBJbnRlcmNlcHRpb25Qb2ludCB9IGZyb20gJy4vaW50ZXJjZXB0b3InO1xuaW1wb3J0IHR5cGUgeyBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnIH0gZnJvbSAnLi9vdXRib3VuZC1hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXInO1xuaW1wb3J0IHsgR0FURVdBWV9BU1NVTUVfUk9MRSwgR0FURVdBWV9LTVNfS0VZX1BFUk1TIH0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQgdHlwZSB7IElHYXRld2F5UHJvdG9jb2xDb25maWcgfSBmcm9tICcuL3Byb3RvY29sJztcbmltcG9ydCB7IE1jcEdhdGV3YXlTZWFyY2hUeXBlLCBNY3BQcm90b2NvbENvbmZpZ3VyYXRpb24sIE1DUFByb3RvY29sVmVyc2lvbiB9IGZyb20gJy4vcHJvdG9jb2wnO1xuaW1wb3J0IHR5cGUgeyBBcGlTY2hlbWEgfSBmcm9tICcuL3RhcmdldHMvc2NoZW1hL2FwaS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBUb29sU2NoZW1hIH0gZnJvbSAnLi90YXJnZXRzL3NjaGVtYS90b29sLXNjaGVtYSc7XG5pbXBvcnQgeyBHYXRld2F5VGFyZ2V0IH0gZnJvbSAnLi90YXJnZXRzL3RhcmdldCc7XG5pbXBvcnQgdHlwZSB7IEFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbiwgTWV0YWRhdGFDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90YXJnZXRzL3RhcmdldC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhIExhbWJkYSB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTGFtYmRhVGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRvb2wgc2NoZW1hIGRlZmluaW5nIHRoZSBhdmFpbGFibGUgdG9vbHNcbiAgICovXG4gIHJlYWRvbmx5IHRvb2xTY2hlbWE6IFRvb2xTY2hlbWE7XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmlhbVJvbGUoKV1cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zPzogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBPcGVuQVBJIHRhcmdldCB0byBhIGdhdGV3YXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRPcGVuQXBpVGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9wZW5BUEkgc2NoZW1hIGRlZmluaW5nIHRoZSBBUElcbiAgICovXG4gIHJlYWRvbmx5IGFwaVNjaGVtYTogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBPcGVuQVBJIHNjaGVtYSBvciBub3RcbiAgICogTm90ZTogVmFsaWRhdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCBmb3IgaW5saW5lIGFuZCBhc3NldC1iYXNlZCBzY2hlbWEgYW5kICBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICogUzMgc2NoZW1hcyBjYW5ub3QgYmUgdmFsaWRhdGVkIGF0IHN5bnRoZXNpcyB0aW1lLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0ZU9wZW5BcGlTY2hlbWE/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICogQGRlZmF1bHQgLSBbR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5pYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRpbmcgYSBTbWl0aHkgdGFyZ2V0IHRvIGEgZ2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNtaXRoeVRhcmdldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBTbWl0aHkgbW9kZWwgZGVmaW5pbmcgdGhlIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgc21pdGh5TW9kZWw6IEFwaVNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIEBkZWZhdWx0IC0gW0dhdGV3YXlDcmVkZW50aWFsUHJvdmlkZXIuaWFtUm9sZSgpXVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGFuIE1DUCBTZXJ2ZXIgdGFyZ2V0IHRvIGEgZ2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE1jcFNlcnZlclRhcmdldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQUyBlbmRwb2ludCBVUkwgb2YgdGhlIE1DUCBzZXJ2ZXJcbiAgICpcbiAgICogVGhlIGVuZHBvaW50IG11c3Q6XG4gICAqIC0gVXNlIEhUVFBTIHByb3RvY29sXG4gICAqIC0gQmUgcHJvcGVybHkgVVJMLWVuY29kZWRcbiAgICogLSBQb2ludCB0byBhbiBNQ1Agc2VydmVyIHRoYXQgaW1wbGVtZW50cyB0b29sIGNhcGFiaWxpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqXG4gICAqIE1DUCBzZXJ2ZXJzIHJlcXVpcmUgZXhwbGljaXQgYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogT0F1dGgyIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIG92ZXIgTm9BdXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRpbmcgYW4gQVBJIEdhdGV3YXkgdGFyZ2V0IHRvIGEgZ2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEFwaUdhdGV3YXlUYXJnZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSBhbmQgLSAoaHlwaGVuKVxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlUYXJnZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgUkVTVCBBUEkgdG8gaW50ZWdyYXRlIHdpdGhcbiAgICogTXVzdCBiZSBpbiB0aGUgc2FtZSBhY2NvdW50IGFuZCByZWdpb24gYXMgdGhlIGdhdGV3YXlcbiAgICogW2Rpc2FibGUtYXdzbGludDpwcmVmZXItcmVmLWludGVyZmFjZV1cbiAgICovXG4gIHJlYWRvbmx5IHJlc3RBcGk6IElSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgbmFtZSBvZiB0aGUgUkVTVCBBUElcbiAgICogQGRlZmF1bHQgLSBVc2VzIHRoZSBkZXBsb3ltZW50IHN0YWdlIGZyb20gdGhlIFJlc3RBcGkgKHJlc3RBcGkuZGVwbG95bWVudFN0YWdlLnN0YWdlTmFtZSlcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb29sIGNvbmZpZ3VyYXRpb24gZGVmaW5pbmcgd2hpY2ggb3BlcmF0aW9ucyB0byBleHBvc2VcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbjogQXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICogQVBJIEdhdGV3YXkgdGFyZ2V0cyBzdXBwb3J0IElBTSBhbmQgQVBJIGtleSBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIEVtcHR5IGFycmF5IChzZXJ2aWNlIGhhbmRsZXMgSUFNIGF1dG9tYXRpY2FsbHkpXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcblxuICAvKipcbiAgICogTWV0YWRhdGEgY29uZmlndXJhdGlvbiBmb3IgcGFzc2luZyBoZWFkZXJzIGFuZCBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEFsbG93cyB5b3UgdG8gcGFzcyBhZGRpdGlvbmFsIGNvbnRleHQgdGhyb3VnaCBoZWFkZXJzIGFuZCBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gbWV0YWRhdGEgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGFDb25maWd1cmF0aW9uPzogTWV0YWRhdGFDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGRlZmluaW5nIGEgR2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheVxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSBhbmQgLSAoaHlwaGVuKVxuICAgKiBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4geW91ciBhY2NvdW50XG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSwgLSAoaHlwaGVuKSBhbmQgc3BhY2VzXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBjYW4gaGF2ZSB1cCB0byAyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqIEBkZWZhdWx0IC0gQSBkZWZhdWx0IHByb3RvY29sIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjcmVhdGVkIHVzaW5nIE1DUCB3aXRoIGZvbGxvd2luZyBwYXJhbXNcbiAgICogIHN1cHBvcnRlZFZlcnNpb25zOiBbTUNQUHJvdG9jb2xWZXJzaW9uLk1DUF8yMDI1XzAzXzI2XSxcbiAgICogIHNlYXJjaFR5cGU6IE1jcEdhdGV3YXlTZWFyY2hUeXBlLlNFTUFOVElDLFxuICAgKiAgaW5zdHJ1Y3Rpb25zOiBcIkRlZmF1bHQgZ2F0ZXdheSB0byBjb25uZWN0IHRvIGV4dGVybmFsIE1DUCB0b29sc1wiLFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uPzogSUdhdGV3YXlQcm90b2NvbENvbmZpZztcblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICogQGRlZmF1bHQgLSBBIGRlZmF1bHQgYXV0aG9yaXplciB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgQ29nbml0b1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJib3NpdHkgb2YgZXhjZXB0aW9uIG1lc3NhZ2VzXG4gICAqIFVzZSBERUJVRyBtb2RlIHRvIHNlZSBncmFudWxhciBleGNlcHRpb24gbWVzc2FnZXMgZnJvbSBhIEdhdGV3YXlcbiAgICogQGRlZmF1bHQgLSBFeGNlcHRpb24gbWVzc2FnZXMgYXJlIHNhbml0aXplZCBmb3IgcHJlc2VudGF0aW9uIHRvIGVuZCB1c2Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjZXB0aW9uTGV2ZWw/OiBHYXRld2F5RXhjZXB0aW9uTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdhdGV3YXlcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBnYXRld2F5IHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGFncyBmb3IgdGhlIGdhdGV3YXlcbiAgICogQSBsaXN0IG9mIGtleTp2YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoaXMgR2F0ZXdheSByZXNvdXJjZVxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBJbnRlcmNlcHRvciBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGdhdGV3YXlcbiAgICpcbiAgICogSW50ZXJjZXB0b3JzIGFsbG93IHlvdSB0byBydW4gY3VzdG9tIGNvZGUgZHVyaW5nIGVhY2ggZ2F0ZXdheSBpbnZvY2F0aW9uOlxuICAgKiAtIFJFUVVFU1QgaW50ZXJjZXB0b3JzIGV4ZWN1dGUgYmVmb3JlIHRoZSBnYXRld2F5IGNhbGxzIHRoZSB0YXJnZXRcbiAgICogLSBSRVNQT05TRSBpbnRlcmNlcHRvcnMgZXhlY3V0ZSBhZnRlciB0aGUgdGFyZ2V0IHJlc3BvbmRzXG4gICAqXG4gICAqIEEgZ2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVFVRVNUIGludGVyY2VwdG9yIGFuZCBvbmUgUkVTUE9OU0UgaW50ZXJjZXB0b3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gaW50ZXJjZXB0b3JzXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LWludGVyY2VwdG9ycy5odG1sXG4gICAqL1xuICByZWFkb25seSBpbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25zPzogSUludGVyY2VwdG9yW107XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIEdhdGV3YXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBnYXRld2F5QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBnYXRld2F5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEdhdGV3YXkgcmVzb3VyY2UgZm9yIEFXUyBCZWRyb2NrIEFnZW50IENvcmUuXG4gKiBTZXJ2ZXMgYXMgYW4gaW50ZWdyYXRpb24gcG9pbnQgYmV0d2VlbiB5b3VyIGFnZW50IGFuZCBleHRlcm5hbCBzZXJ2aWNlcy5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUdhdGV3YXkuaHRtbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgR2F0ZXdheSBleHRlbmRzIEdhdGV3YXlCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuR2F0ZXdheSc7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgR2F0ZXdheSB1c2luZyBpdHMgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGV4aXN0aW5nIEdhdGV3YXlcbiAgICogQHJldHVybnMgQW4gSUdhdGV3YXkgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBpbXBvcnRlZCBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21HYXRld2F5QXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEdhdGV3YXlBdHRyaWJ1dGVzLFxuICApOiBJR2F0ZXdheSB7XG4gICAgY2xhc3MgSW1wb3J0ZWRHYXRld2F5IGV4dGVuZHMgR2F0ZXdheUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXlBcm4gPSBhdHRycy5nYXRld2F5QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXlJZCA9IGF0dHJzLmdhdGV3YXlJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gYXR0cnMuZ2F0ZXdheU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBJR2F0ZXdheVByb3RvY29sQ29uZmlnO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXhjZXB0aW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkga21zS2V5ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGUgPSBhdHRycy5yb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXlVcmwgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c1JlYXNvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0ID0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcbiAgICAgICAgLy8gQ3JlYXRlIHBsYWNlaG9sZGVyIHByb3RvY29sIGFuZCBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb25zXG4gICAgICAgIHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uID0gbmV3IE1jcFByb3RvY29sQ29uZmlndXJhdGlvbih7XG4gICAgICAgICAgc3VwcG9ydGVkVmVyc2lvbnM6IFtNQ1BQcm90b2NvbFZlcnNpb24uTUNQXzIwMjVfMDNfMjZdLFxuICAgICAgICAgIHNlYXJjaFR5cGU6IE1jcEdhdGV3YXlTZWFyY2hUeXBlLlNFTUFOVElDLFxuICAgICAgICAgIGluc3RydWN0aW9uczogJ0ltcG9ydGVkIGdhdGV3YXknLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiA9IEdhdGV3YXlBdXRob3JpemVyLnVzaW5nQXdzSWFtKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRHYXRld2F5KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGdhdGV3YXlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXlJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3RvY29sQ29uZmlndXJhdGlvbjogSUdhdGV3YXlQcm90b2NvbENvbmZpZztcblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbjogSUdhdGV3YXlBdXRob3JpemVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhjZXB0aW9uIGxldmVsIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4Y2VwdGlvbkxldmVsPzogR2F0ZXdheUV4Y2VwdGlvbkxldmVsO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSBmb3IgdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgZW5kcG9pbnQgZm9yIHRoZSBnYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBnYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgcmVhc29ucyBmb3IgdGhlIGdhdGV3YXlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c1JlYXNvbj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgZ2F0ZXdheSB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgZ2F0ZXdheSB3YXMgbGFzdCB1cGRhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgYXBwbGllZCB0byB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wgY3JlYXRlZCBmb3IgdGhlIGdhdGV3YXkgKGlmIHVzaW5nIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyKVxuICAgKi9cbiAgcHVibGljIHVzZXJQb29sPzogY29nbml0by5JVXNlclBvb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbCBDbGllbnQgY3JlYXRlZCBmb3IgdGhlIGdhdGV3YXkgKGlmIHVzaW5nIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyKVxuICAgKi9cbiAgcHVibGljIHVzZXJQb29sQ2xpZW50PzogY29nbml0by5JVXNlclBvb2xDbGllbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBSRVFVRVNUIGludGVyY2VwdG9yIGNvbmZpZ3VyYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlcXVlc3RJbnRlcmNlcHRvckNvbmZpZz86IEludGVyY2VwdG9yQmluZENvbmZpZztcblxuICAvKipcbiAgICogVGhlIFJFU1BPTlNFIGludGVyY2VwdG9yIGNvbmZpZ3VyYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlc3BvbnNlSW50ZXJjZXB0b3JDb25maWc/OiBJbnRlcmNlcHRvckJpbmRDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbCBEb21haW4gY3JlYXRlZCBmb3IgdGhlIGdhdGV3YXkgKGlmIHVzaW5nIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyKVxuICAgKi9cbiAgcHVibGljIHVzZXJQb29sRG9tYWluPzogY29nbml0by5JVXNlclBvb2xEb21haW47XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFJlc291cmNlIFNlcnZlciBjcmVhdGVkIGZvciB0aGUgZ2F0ZXdheSAoaWYgdXNpbmcgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIpXG4gICAqL1xuICBwdWJsaWMgcmVzb3VyY2VTZXJ2ZXI/OiBjb2duaXRvLklVc2VyUG9vbFJlc291cmNlU2VydmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgT0F1dGgyIHRva2VuIGVuZHBvaW50IFVSTCBmb3IgY2xpZW50IGNyZWRlbnRpYWxzIGZsb3cuXG4gICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRva2VuRW5kcG9pbnRVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPQXV0aDIgc2NvcGUgc3RyaW5ncyBmb3IgY2xpZW50IGNyZWRlbnRpYWxzIGZsb3cuXG4gICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9hdXRoU2NvcGVzPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdhdGV3YXlQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAvLyBNYXhpbXVtIG5hbWUgbGVuZ3RoIG9mIDQ4IGNoYXJhY3RlcnMgaXMgY2hvc2VuIGluc3RlYWQgb2YgMTAwIGNoYXJhY3RlcnMgdGhhdCBtZW50aW9uZWQgaW4gZG9jdW1lbnRhdGlvbiBiZWxvdyxcbiAgICAgIC8vIGR1ZSB0byBmYWlsdXJlIGluIENGIGRlcGxveW1lbnQgd2hlbiBtb3JlIHRoYW4gNDggY2hhcmFjdGVycyB1c2VkXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWJlZHJvY2thZ2VudGNvcmUtZ2F0ZXdheS5odG1sI2Nmbi1iZWRyb2NrYWdlbnRjb3JlLWdhdGV3YXktbmFtZVxuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5nYXRld2F5TmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiA0OCB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3NpZ25tZW50c1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgdGhpcy5uYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy52YWxpZGF0ZUdhdGV3YXlOYW1lKHRoaXMubmFtZSk7XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVEZXNjcmlwdGlvbih0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleTtcbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlID8/IHRoaXMuY3JlYXRlR2F0ZXdheVJvbGUoKTtcblxuICAgIGlmICh0aGlzLmttc0tleSAmJiB0aGlzLnJvbGUpIHtcbiAgICAgIHRoaXMua21zS2V5LmdyYW50RW5jcnlwdERlY3J5cHQodGhpcy5yb2xlKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbiA9IHByb3BzLnByb3RvY29sQ29uZmlndXJhdGlvbiA/PyB0aGlzLmNyZWF0ZURlZmF1bHRNY3BQcm90b2NvbENvbmZpZ3VyYXRpb24oKTtcbiAgICBpZiAocHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBwcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVmYXVsdENvZ25pdG9BdXRoID0gdGhpcy5jcmVhdGVEZWZhdWx0Q29nbml0b0F1dGhvcml6ZXJDb25maWcoKTtcbiAgICAgIHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBkZWZhdWx0Q29nbml0b0F1dGguYXV0aG9yaXplckNvbmZpZztcbiAgICAgIHRoaXMudG9rZW5FbmRwb2ludFVybCA9IGRlZmF1bHRDb2duaXRvQXV0aC50b2tlbkVuZHBvaW50VXJsO1xuICAgICAgdGhpcy5vYXV0aFNjb3BlcyA9IGRlZmF1bHRDb2duaXRvQXV0aC5vYXV0aFNjb3BlcztcbiAgICB9XG4gICAgdGhpcy5leGNlcHRpb25MZXZlbCA9IHByb3BzLmV4Y2VwdGlvbkxldmVsO1xuXG4gICAgdGhpcy50YWdzID0gcHJvcHMudGFncyA/PyB7fTtcblxuICAgIC8vIEluaXRpYWxpemUgaW50ZXJjZXB0b3JzIGZyb20gcHJvcHNcbiAgICBpZiAocHJvcHMuaW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucykge1xuICAgICAgdGhpcy52YWxpZGF0ZUFuZEluaXRpYWxpemVJbnRlcmNlcHRvcnMocHJvcHMuaW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTDEgSW5zdGFudGlhdGlvblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IF9yZXNvdXJjZSA9IG5ldyBiZWRyb2NrYWdlbnRjb3JlLkNmbkdhdGV3YXkodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgYXV0aG9yaXplckNvbmZpZ3VyYXRpb246IHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24uX3JlbmRlcigpLFxuICAgICAgYXV0aG9yaXplclR5cGU6IHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24uYXV0aG9yaXplclR5cGUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIGV4Y2VwdGlvbkxldmVsOiB0aGlzLmV4Y2VwdGlvbkxldmVsLFxuICAgICAgaW50ZXJjZXB0b3JDb25maWd1cmF0aW9uczogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckludGVyY2VwdG9yQ29uZmlndXJhdGlvbnMoKSxcbiAgICAgIH0pLFxuICAgICAga21zS2V5QXJuOiB0aGlzLmttc0tleT8ua2V5QXJuLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgcHJvdG9jb2xDb25maWd1cmF0aW9uOiB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbi5fcmVuZGVyKCksXG4gICAgICBwcm90b2NvbFR5cGU6IHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uLnByb3RvY29sVHlwZSxcbiAgICAgIHJvbGVBcm46IHRoaXMucm9sZT8ucm9sZUFybixcbiAgICAgIHRhZ3M6IHRoaXMudGFncyxcbiAgICB9KTtcblxuICAgIHRoaXMuZ2F0ZXdheUlkID0gX3Jlc291cmNlLmF0dHJHYXRld2F5SWRlbnRpZmllcjtcbiAgICB0aGlzLmdhdGV3YXlBcm4gPSBfcmVzb3VyY2UuYXR0ckdhdGV3YXlBcm47XG4gICAgdGhpcy5nYXRld2F5VXJsID0gX3Jlc291cmNlLmF0dHJHYXRld2F5VXJsO1xuICAgIHRoaXMuc3RhdHVzID0gX3Jlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBfcmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IF9yZXNvdXJjZS5hdHRyVXBkYXRlZEF0O1xuICAgIHRoaXMuc3RhdHVzUmVhc29uID0gX3Jlc291cmNlLmF0dHJTdGF0dXNSZWFzb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIExhbWJkYSB0YXJnZXQgdG8gdGhpcyBnYXRld2F5XG4gICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgR2F0ZXdheVRhcmdldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5XG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkIGZvciB0aGUgdGFyZ2V0XG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wZXJ0aWVzIGZvciB0aGUgTGFtYmRhIHRhcmdldFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBHYXRld2F5VGFyZ2V0XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkTGFtYmRhVGFyZ2V0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZExhbWJkYVRhcmdldE9wdGlvbnMsXG4gICk6IEdhdGV3YXlUYXJnZXQge1xuICAgIC8vIExhbWJkYSBpbnZva2UgcGVybWlzc2lvbnMgYXJlIGF1dG9tYXRpY2FsbHkgZ3JhbnRlZCBpbiBMYW1iZGFUYXJnZXRDb25maWd1cmF0aW9uLmJpbmQoKVxuICAgIC8vIEJ1aWxkIHRhcmdldCBwcm9wcywgY29uZGl0aW9uYWxseSBpbmNsdWRpbmcgY3JlZGVudGlhbHMgaWYgYXJyYXkgaGFzIGl0ZW1zXG4gICAgY29uc3QgdGFyZ2V0UHJvcHM6IGFueSA9IHtcbiAgICAgIGdhdGV3YXlUYXJnZXROYW1lOiBwcm9wcy5nYXRld2F5VGFyZ2V0TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdhdGV3YXk6IHRoaXMsXG4gICAgICBsYW1iZGFGdW5jdGlvbjogcHJvcHMubGFtYmRhRnVuY3Rpb24sXG4gICAgICB0b29sU2NoZW1hOiBwcm9wcy50b29sU2NoZW1hLFxuICAgICAgLi4uKHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zICYmIHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG5cbiAgICBjb25zdCB0YXJnZXQgPSBHYXRld2F5VGFyZ2V0LmZvckxhbWJkYSh0aGlzLCBpZCwgdGFyZ2V0UHJvcHMpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gT3BlbkFQSSB0YXJnZXQgdG8gdGhpcyBnYXRld2F5XG4gICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgR2F0ZXdheVRhcmdldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5XG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkIGZvciB0aGUgdGFyZ2V0XG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wZXJ0aWVzIGZvciB0aGUgT3BlbkFQSSB0YXJnZXRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgR2F0ZXdheVRhcmdldFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZE9wZW5BcGlUYXJnZXQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkT3BlbkFwaVRhcmdldE9wdGlvbnMsXG4gICk6IEdhdGV3YXlUYXJnZXQge1xuICAgIGNvbnN0IHRhcmdldCA9IEdhdGV3YXlUYXJnZXQuZm9yT3BlbkFwaSh0aGlzLCBpZCwge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIGFwaVNjaGVtYTogcHJvcHMuYXBpU2NoZW1hLFxuICAgICAgdmFsaWRhdGVPcGVuQXBpU2NoZW1hOiBwcm9wcy52YWxpZGF0ZU9wZW5BcGlTY2hlbWEsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFNtaXRoeSB0YXJnZXQgdG8gdGhpcyBnYXRld2F5XG4gICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgR2F0ZXdheVRhcmdldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5XG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkIGZvciB0aGUgdGFyZ2V0XG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wZXJ0aWVzIGZvciB0aGUgU21pdGh5IHRhcmdldFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBHYXRld2F5VGFyZ2V0XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkU21pdGh5VGFyZ2V0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZFNtaXRoeVRhcmdldE9wdGlvbnMsXG4gICk6IEdhdGV3YXlUYXJnZXQge1xuICAgIC8vIEJ1aWxkIHRhcmdldCBwcm9wcywgY29uZGl0aW9uYWxseSBpbmNsdWRpbmcgY3JlZGVudGlhbHMgaWYgYXJyYXkgaGFzIGl0ZW1zXG4gICAgY29uc3QgdGFyZ2V0UHJvcHM6IGFueSA9IHtcbiAgICAgIGdhdGV3YXlUYXJnZXROYW1lOiBwcm9wcy5nYXRld2F5VGFyZ2V0TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdhdGV3YXk6IHRoaXMsXG4gICAgICBzbWl0aHlNb2RlbDogcHJvcHMuc21pdGh5TW9kZWwsXG4gICAgICAuLi4ocHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgJiYgcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICA/IHsgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcblxuICAgIGNvbnN0IHRhcmdldCA9IEdhdGV3YXlUYXJnZXQuZm9yU21pdGh5KHRoaXMsIGlkLCB0YXJnZXRQcm9wcyk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBNQ1Agc2VydmVyIHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBNQ1Agc2VydmVyIHRhcmdldFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBHYXRld2F5VGFyZ2V0XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXRhcmdldC1NQ1BzZXJ2ZXJzLmh0bWxcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRNY3BTZXJ2ZXJUYXJnZXQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkTWNwU2VydmVyVGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgLy8gQnVpbGQgdGFyZ2V0IHByb3BzLCBjb25kaXRpb25hbGx5IGluY2x1ZGluZyBjcmVkZW50aWFscyBpZiBhcnJheSBoYXMgaXRlbXNcbiAgICBjb25zdCB0YXJnZXRQcm9wczogYW55ID0ge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIGVuZHBvaW50OiBwcm9wcy5lbmRwb2ludCxcbiAgICAgIC4uLihwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyAmJiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgID8geyBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gR2F0ZXdheVRhcmdldC5mb3JNY3BTZXJ2ZXIodGhpcywgaWQsIHRhcmdldFByb3BzKTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIEFQSSBHYXRld2F5IHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBBUEkgR2F0ZXdheSB0YXJnZXRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgR2F0ZXdheVRhcmdldFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS10YXJnZXQtYXBpLWdhdGV3YXkuaHRtbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEFwaUdhdGV3YXlUYXJnZXQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkQXBpR2F0ZXdheVRhcmdldE9wdGlvbnMsXG4gICk6IEdhdGV3YXlUYXJnZXQge1xuICAgIC8vIEFQSSBHYXRld2F5IHRhcmdldHMgcmVxdWlyZSBleHBsaWNpdCBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb24gb3IgZGVmYXVsdHMgdG8gSUFNXG4gICAgLy8gR2V0RXhwb3J0IGFuZCBleGVjdXRlLWFwaTpJbnZva2UgcGVybWlzc2lvbnMgYXJlIGF1dG9tYXRpY2FsbHkgZ3JhbnRlZCBpbiBBcGlHYXRld2F5VGFyZ2V0Q29uZmlndXJhdGlvbi5iaW5kKClcbiAgICBjb25zdCB0YXJnZXQgPSBHYXRld2F5VGFyZ2V0LmZvckFwaUdhdGV3YXkodGhpcywgaWQsIHtcbiAgICAgIGdhdGV3YXlUYXJnZXROYW1lOiBwcm9wcy5nYXRld2F5VGFyZ2V0TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdhdGV3YXk6IHRoaXMsXG4gICAgICByZXN0QXBpOiBwcm9wcy5yZXN0QXBpLFxuICAgICAgc3RhZ2U6IHByb3BzLnN0YWdlLFxuICAgICAgYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uOiBwcm9wcy5hcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb24sXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMsXG4gICAgICBtZXRhZGF0YUNvbmZpZ3VyYXRpb246IHByb3BzLm1ldGFkYXRhQ29uZmlndXJhdGlvbixcbiAgICB9KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgc2VydmljZSByb2xlIGZvciB0aGUgZ2F0ZXdheSB0byBhc3N1bWVcbiAgICpcbiAgICogVGhlIHNlcnZpY2Ugcm9sZSBzdGFydHMgd2l0aCBtaW5pbWFsIHBlcm1pc3Npb25zLiBBZGRpdGlvbmFsIHBlcm1pc3Npb25zXG4gICAqIGFyZSBhZGRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGFyZ2V0cyBhcmUgY29uZmlndXJlZDpcbiAgICogLSBLTVMgZW5jcnlwdGlvbjogQXV0b21hdGljYWxseSBncmFudHMgZW5jcnlwdC9kZWNyeXB0IHBlcm1pc3Npb25zXG4gICAqXG4gICAqIEZvciBvdGhlciB0YXJnZXQgdHlwZXMsIG1hbnVhbGx5IGdyYW50IHBlcm1pc3Npb25zIHVzaW5nIHN0YW5kYXJkIENESyBncmFudCBtZXRob2RzOlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlR2F0ZXdheVJvbGUoKTogaWFtLlJvbGUge1xuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ1NlcnZpY2VSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgU2VydmljZSByb2xlIGZvciBCZWRyb2NrIEFnZW50Q29yZSBHYXRld2F5ICR7dGhpcy5uYW1lfWAsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgY29uc3QgcGFydGl0aW9uID0gU3RhY2sub2YodGhpcykucGFydGl0aW9uO1xuXG4gICAgLy8gVGhpcyByZXN0cmljdHMgcm9sZSBhc3N1bXB0aW9uIHRvIHRoZSBzcGVjaWZpYyBnYXRld2F5IHJlc291cmNlIG9ubHkgaW4gdGhpcyBhY2NvdW50LFxuICAgIC8vIHByZXZlbnRpbmcgb3RoZXIgYWNjb3VudHMgZnJvbSBhc3N1bWluZyB0aGlzIHJvbGUuXG4gICAgLy8gU2VlOmh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS1wcmVyZXF1aXNpdGVzLXBlcm1pc3Npb25zLmh0bWwjZ2F0ZXdheS1zZXJ2aWNlLXJvbGUtcGVybWlzc2lvbnNcbiAgICByb2xlLmFzc3VtZVJvbGVQb2xpY3k/LmFkZFN0YXRlbWVudHMoXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcHJpbmNpcGFsczogW25ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpXSxcbiAgICAgICAgYWN0aW9uczogR0FURVdBWV9BU1NVTUVfUk9MRSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBY2NvdW50JzogYWNjb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFybkxpa2U6IHtcbiAgICAgICAgICAgICdhd3M6U291cmNlQXJuJzogYGFybjoke3BhcnRpdGlvbn06YmVkcm9jay1hZ2VudGNvcmU6JHtyZWdpb259OiR7YWNjb3VudH06Z2F0ZXdheS8ke3RoaXMubmFtZX0qYCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmttc0tleSkge1xuICAgICAgcm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogR0FURVdBWV9LTVNfS0VZX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLmttc0tleS5rZXlBcm5dLFxuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGdhdGV3YXkgbmFtZSBmb3JtYXRcbiAgICogUGF0dGVybjogXihbMC05YS16QS1aXVstXT8pezEsNDh9JFxuICAgKiBNYXggbGVuZ3RoOiA0OCBjaGFyYWN0ZXJzXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBnYXRld2F5IG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgbmFtZSBpcyBpbnZhbGlkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdhdGV3YXlOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgbWF4TGVuZ3RoOiA0OCxcbiAgICAgIGZpZWxkTmFtZTogJ0dhdGV3YXkgbmFtZScsXG4gICAgfSk7XG5cbiAgICBpZiAobGVuZ3RoRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGVuZ3RoRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICBuYW1lLFxuICAgICAgJ0dhdGV3YXkgbmFtZScsXG4gICAgICAvXihbMC05YS16QS1aXVstXT8pezEsNDh9JC8sXG4gICAgICAnR2F0ZXdheSBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCB3aXRoIGh5cGhlbnMgb25seSBiZXR3ZWVuIGNoYXJhY3RlcnMnLFxuICAgICk7XG5cbiAgICBpZiAocGF0dGVybkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHBhdHRlcm5FcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdFxuICAgKiBNYXggbGVuZ3RoOiAyMDAgY2hhcmFjdGVyc1xuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gVGhlIGRlc2NyaXB0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiBkZXNjcmlwdGlvbixcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogMjAwLFxuICAgICAgZmllbGROYW1lOiAnRGVzY3JpcHRpb24nLFxuICAgIH0pO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplciBmb3IgdGhlIGdhdGV3YXlcbiAgICogUHJvdmlzaW9ucyBhIENvZ25pdG8gVXNlciBQb29sIGFuZCBjb25maWd1cmVzIE0yTSAobWFjaGluZS10by1tYWNoaW5lKSBKV1QgYXV0aGVudGljYXRpb25cbiAgICogdXNpbmcgT0F1dGggMi4wIGNsaWVudCBjcmVkZW50aWFscyBncmFudCBmbG93XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtY29nbml0by5odG1sXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0Q29nbml0b0F1dGhvcml6ZXJDb25maWcoKToge1xuICAgIGF1dGhvcml6ZXJDb25maWc6IElHYXRld2F5QXV0aG9yaXplckNvbmZpZztcbiAgICB0b2tlbkVuZHBvaW50VXJsOiBzdHJpbmc7XG4gICAgb2F1dGhTY29wZXM6IHN0cmluZ1tdO1xuICB9IHtcbiAgICBjb25zdCB1c2VyUG9vbCA9IG5ldyBjb2duaXRvLlVzZXJQb29sKHRoaXMsICdVc2VyUG9vbCcsIHtcbiAgICAgIHNpZ25JbkNhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzb3VyY2VTZXJ2ZXIgPSB1c2VyUG9vbC5hZGRSZXNvdXJjZVNlcnZlcignUmVzb3VyY2VTZXJ2ZXInLCB7XG4gICAgICBpZGVudGlmaWVyOiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDI1Niwgc2VwYXJhdG9yOiAnLScgfSksXG4gICAgICBzY29wZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNjb3BlTmFtZTogJ3JlYWQnLFxuICAgICAgICAgIHNjb3BlRGVzY3JpcHRpb246ICdSZWFkIGFjY2VzcyB0byBnYXRld2F5IHRvb2xzJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNjb3BlTmFtZTogJ3dyaXRlJyxcbiAgICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnV3JpdGUgYWNjZXNzIHRvIGdhdGV3YXkgdG9vbHMnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG9hdXRoU2NvcGVzID0gW1xuICAgICAgY29nbml0by5PQXV0aFNjb3BlLnJlc291cmNlU2VydmVyKHJlc291cmNlU2VydmVyLCB7XG4gICAgICAgIHNjb3BlTmFtZTogJ3JlYWQnLFxuICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnUmVhZCBhY2Nlc3MgdG8gZ2F0ZXdheSB0b29scycsXG4gICAgICB9KSxcbiAgICAgIGNvZ25pdG8uT0F1dGhTY29wZS5yZXNvdXJjZVNlcnZlcihyZXNvdXJjZVNlcnZlciwge1xuICAgICAgICBzY29wZU5hbWU6ICd3cml0ZScsXG4gICAgICAgIHNjb3BlRGVzY3JpcHRpb246ICdXcml0ZSBhY2Nlc3MgdG8gZ2F0ZXdheSB0b29scycsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgY29uc3QgdXNlclBvb2xDbGllbnQgPSB1c2VyUG9vbC5hZGRDbGllbnQoJ0RlZmF1bHRDbGllbnQnLCB7XG4gICAgICBnZW5lcmF0ZVNlY3JldDogdHJ1ZSxcbiAgICAgIG9BdXRoOiB7XG4gICAgICAgIGZsb3dzOiB7XG4gICAgICAgICAgY2xpZW50Q3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHNjb3Blczogb2F1dGhTY29wZXMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIENvZ25pdG8gRG9tYWluIGZvciBPQXV0aDIgdG9rZW4gZW5kcG9pbnRcbiAgICAvLyBVc2UgdW5pcXVlUmVzb3VyY2VOYW1lIHRvIGdlbmVyYXRlIGEgdW5pcXVlIGRvbWFpbiBwcmVmaXggdG9Mb3dlckNhc2UoKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBoYXNoIHBvcnRpb24gaXMgdXBwZXJjYXNlXG4gICAgY29uc3QgZG9tYWluUHJlZml4ID0gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgIG1heExlbmd0aDogNjMsIC8vIENvZ25pdG8gZG9tYWluIHByZWZpeCBtYXggbGVuZ3RoXG4gICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICB9KS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgdXNlclBvb2xEb21haW4gPSB1c2VyUG9vbC5hZGREb21haW4oJ0RvbWFpbicsIHtcbiAgICAgIGNvZ25pdG9Eb21haW46IHtcbiAgICAgICAgZG9tYWluUHJlZml4OiBkb21haW5QcmVmaXgsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy51c2VyUG9vbCA9IHVzZXJQb29sO1xuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSB1c2VyUG9vbENsaWVudDtcbiAgICB0aGlzLnVzZXJQb29sRG9tYWluID0gdXNlclBvb2xEb21haW47XG4gICAgdGhpcy5yZXNvdXJjZVNlcnZlciA9IHJlc291cmNlU2VydmVyO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGF1dGhvcml6ZXJDb25maWc6IEdhdGV3YXlBdXRob3JpemVyLnVzaW5nQ29nbml0byh7XG4gICAgICAgIHVzZXJQb29sOiB1c2VyUG9vbCxcbiAgICAgICAgYWxsb3dlZENsaWVudHM6IFt1c2VyUG9vbENsaWVudF0sXG4gICAgICB9KSxcbiAgICAgIHRva2VuRW5kcG9pbnRVcmw6IGBodHRwczovLyR7dXNlclBvb2xEb21haW4uZG9tYWluTmFtZX0uYXV0aC4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uY29nbml0by5jb20vb2F1dGgyL3Rva2VuYCxcbiAgICAgIG9hdXRoU2NvcGVzOiBvYXV0aFNjb3Blcy5tYXAoc2NvcGUgPT4gc2NvcGUuc2NvcGVOYW1lKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkZWZhdWx0IE1DUCBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBQcm92aWRlcyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IgTUNQIHByb3RvY29sIHNldHRpbmdzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0TWNwUHJvdG9jb2xDb25maWd1cmF0aW9uKCk6IElHYXRld2F5UHJvdG9jb2xDb25maWcge1xuICAgIHJldHVybiBuZXcgTWNwUHJvdG9jb2xDb25maWd1cmF0aW9uKHtcbiAgICAgIHN1cHBvcnRlZFZlcnNpb25zOiBbTUNQUHJvdG9jb2xWZXJzaW9uLk1DUF8yMDI1XzAzXzI2XSxcbiAgICAgIHNlYXJjaFR5cGU6IE1jcEdhdGV3YXlTZWFyY2hUeXBlLlNFTUFOVElDLFxuICAgICAgaW5zdHJ1Y3Rpb25zOiAnRGVmYXVsdCBnYXRld2F5IHRvIGNvbm5lY3QgdG8gZXh0ZXJuYWwgTUNQIHRvb2xzJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gaW50ZXJjZXB0b3IgdG8gdGhpcyBnYXRld2F5XG4gICAqXG4gICAqIEludGVyY2VwdG9ycyBhbGxvdyB5b3UgdG8gcnVuIGN1c3RvbSBjb2RlIGF0IHNwZWNpZmljIHBvaW50cyBpbiB0aGUgZ2F0ZXdheSByZXF1ZXN0L3Jlc3BvbnNlIGZsb3c6XG4gICAqIC0gUkVRVUVTVCBpbnRlcmNlcHRvcnMgZXhlY3V0ZSBiZWZvcmUgdGhlIGdhdGV3YXkgY2FsbHMgdGhlIHRhcmdldFxuICAgKiAtIFJFU1BPTlNFIGludGVyY2VwdG9ycyBleGVjdXRlIGFmdGVyIHRoZSB0YXJnZXQgcmVzcG9uZHNcbiAgICpcbiAgICogQSBnYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFUVVFU1QgaW50ZXJjZXB0b3IgYW5kIG9uZSBSRVNQT05TRSBpbnRlcmNlcHRvci5cbiAgICogQHBhcmFtIGludGVyY2VwdG9yIFRoZSBpbnRlcmNlcHRvciB0byBhZGQgKHVzZSBMYW1iZGFJbnRlcmNlcHRvciBmYWN0b3J5IG1ldGhvZHMpXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgYW4gaW50ZXJjZXB0b3Igb2YgdGhlIHNhbWUgdHlwZSBhbHJlYWR5IGV4aXN0c1xuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEludGVyY2VwdG9yKGludGVyY2VwdG9yOiBJSW50ZXJjZXB0b3IpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcmNlcHRpb25Qb2ludCA9IGludGVyY2VwdG9yLmludGVyY2VwdGlvblBvaW50O1xuXG4gICAgaWYgKGludGVyY2VwdGlvblBvaW50ID09PSBJbnRlcmNlcHRpb25Qb2ludC5SRVFVRVNUKSB7XG4gICAgICBpZiAodGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JDb25maWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAnR2F0ZXdheSBhbHJlYWR5IGhhcyBhIFJFUVVFU1QgaW50ZXJjZXB0b3IgY29uZmlndXJlZC4gQSBnYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFUVVFU1QgaW50ZXJjZXB0b3IuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnID0gaW50ZXJjZXB0b3IuYmluZCh0aGlzLCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGludGVyY2VwdGlvblBvaW50ID09PSBJbnRlcmNlcHRpb25Qb2ludC5SRVNQT05TRSkge1xuICAgICAgaWYgKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZykge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICdHYXRld2F5IGFscmVhZHkgaGFzIGEgUkVTUE9OU0UgaW50ZXJjZXB0b3IgY29uZmlndXJlZC4gQSBnYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFU1BPTlNFIGludGVyY2VwdG9yLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JDb25maWcgPSBpbnRlcmNlcHRvci5iaW5kKHRoaXMsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIGluaXRpYWxpemVzIGludGVyY2VwdG9ycyBmcm9tIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBbmRJbml0aWFsaXplSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yczogSUludGVyY2VwdG9yW10pOiB2b2lkIHtcbiAgICBjb25zdCByZXF1ZXN0Q291bnQgPSBpbnRlcmNlcHRvcnMuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVRVUVTVCkubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3BvbnNlQ291bnQgPSBpbnRlcmNlcHRvcnMuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVTUE9OU0UpLmxlbmd0aDtcblxuICAgIGlmIChyZXF1ZXN0Q291bnQgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgR2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVFVRVNUIGludGVyY2VwdG9yLiBGb3VuZCAke3JlcXVlc3RDb3VudH0gUkVRVUVTVCBpbnRlcmNlcHRvcnMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlQ291bnQgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgR2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVNQT05TRSBpbnRlcmNlcHRvci4gRm91bmQgJHtyZXNwb25zZUNvdW50fSBSRVNQT05TRSBpbnRlcmNlcHRvcnMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgIHRoaXMuYWRkSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBpbnRlcmNlcHRvciBjb25maWd1cmF0aW9ucyBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm8gaW50ZXJjZXB0b3JzIGFyZSBjb25maWd1cmVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25zKCk6IGFueVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb25maWdzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnKSB7XG4gICAgICBjb25maWdzLnB1c2godGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JDb25maWcuY29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZykge1xuICAgICAgY29uZmlncy5wdXNoKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZy5jb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlncy5sZW5ndGggPiAwID8gY29uZmlncyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -21,7 +21,7 @@ var GatewayAuthorizerType;
21
21
  * Custom JWT authorizer configuration implementation
22
22
  */
23
23
  class CustomJwtAuthorizer {
24
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CustomJwtAuthorizer", version: "2.238.0-alpha.0" };
24
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CustomJwtAuthorizer", version: "2.239.0-alpha.0" };
25
25
  authorizerType = GatewayAuthorizerType.CUSTOM_JWT;
26
26
  discoveryUrl;
27
27
  allowedAudience;
@@ -70,7 +70,7 @@ exports.CustomJwtAuthorizer = CustomJwtAuthorizer;
70
70
  *
71
71
  */
72
72
  class IamAuthorizer {
73
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.IamAuthorizer", version: "2.238.0-alpha.0" };
73
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.IamAuthorizer", version: "2.239.0-alpha.0" };
74
74
  authorizerType = GatewayAuthorizerType.AWS_IAM;
75
75
  /**
76
76
  * @internal
@@ -86,7 +86,7 @@ exports.IamAuthorizer = IamAuthorizer;
86
86
  * Factory class for creating Gateway Authorizers
87
87
  */
88
88
  class GatewayAuthorizer {
89
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayAuthorizer", version: "2.238.0-alpha.0" };
89
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayAuthorizer", version: "2.239.0-alpha.0" };
90
90
  /**
91
91
  * AWS IAM authorizer instance
92
92
  */
@@ -28,7 +28,7 @@ class GatewayCustomClaim {
28
28
  valueType;
29
29
  operator;
30
30
  value;
31
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCustomClaim", version: "2.238.0-alpha.0" };
31
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCustomClaim", version: "2.239.0-alpha.0" };
32
32
  /**
33
33
  * Create a custom claim with a string value.
34
34
  * String claims must use the EQUALS operator.
@@ -34,7 +34,7 @@ var InterceptionPoint;
34
34
  * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-interceptors.html
35
35
  */
36
36
  class LambdaInterceptor {
37
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaInterceptor", version: "2.238.0-alpha.0" };
37
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaInterceptor", version: "2.239.0-alpha.0" };
38
38
  /**
39
39
  * Create a REQUEST interceptor that executes before the gateway calls the target
40
40
  *
@@ -19,7 +19,7 @@ var ApiKeyCredentialLocationType;
19
19
  * API Key location within the request
20
20
  */
21
21
  class ApiKeyCredentialLocation {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialLocation", version: "2.238.0-alpha.0" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialLocation", version: "2.239.0-alpha.0" };
23
23
  /**
24
24
  * Create a header-based API key credential location
25
25
  * @param config - Optional configuration for the credential location
@@ -31,7 +31,7 @@ var CredentialProviderType;
31
31
  * Factory class for creating different Gateway Credential Providers
32
32
  */
33
33
  class GatewayCredentialProvider {
34
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCredentialProvider", version: "2.238.0-alpha.0" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCredentialProvider", version: "2.239.0-alpha.0" };
35
35
  /**
36
36
  * Create an API key credential provider from Identity ARN
37
37
  * Use this method when you have the Identity ARN as a string
@@ -21,7 +21,7 @@ var GatewayProtocolType;
21
21
  * Factory class for instantiating Gateway Protocols
22
22
  */
23
23
  class GatewayProtocol {
24
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayProtocol", version: "2.238.0-alpha.0" };
24
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayProtocol", version: "2.239.0-alpha.0" };
25
25
  /**
26
26
  * Create an MCP protocol configuration
27
27
  * @param props - Optional MCP configuration properties
@@ -75,7 +75,7 @@ var McpGatewaySearchType;
75
75
  * MCP (Model Context Protocol) configuration implementation
76
76
  */
77
77
  class McpProtocolConfiguration {
78
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpProtocolConfiguration", version: "2.238.0-alpha.0" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpProtocolConfiguration", version: "2.239.0-alpha.0" };
79
79
  protocolType;
80
80
  /**
81
81
  * The supported MCP protocol versions
@@ -25,7 +25,7 @@ class ApiSchemaError extends Error {
25
25
  * Represents the concept of an API Schema for a Gateway Target.
26
26
  */
27
27
  class ApiSchema extends base_schema_1.TargetSchema {
28
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiSchema", version: "2.238.0-alpha.0" };
28
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiSchema", version: "2.239.0-alpha.0" };
29
29
  /**
30
30
  * Creates an API Schema from a local file.
31
31
  * @param path - the path to the local file containing the OpenAPI schema for the action group
@@ -83,7 +83,7 @@ exports.ApiSchema = ApiSchema;
83
83
  class AssetApiSchema extends ApiSchema {
84
84
  path;
85
85
  options;
86
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetApiSchema", version: "2.238.0-alpha.0" };
86
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetApiSchema", version: "2.239.0-alpha.0" };
87
87
  asset;
88
88
  constructor(path, options = {}) {
89
89
  super();
@@ -145,7 +145,7 @@ exports.AssetApiSchema = AssetApiSchema;
145
145
  */
146
146
  class InlineApiSchema extends ApiSchema {
147
147
  schema;
148
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineApiSchema", version: "2.238.0-alpha.0" };
148
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineApiSchema", version: "2.239.0-alpha.0" };
149
149
  constructor(schema) {
150
150
  super(undefined, undefined, schema);
151
151
  this.schema = schema;
@@ -175,7 +175,7 @@ exports.InlineApiSchema = InlineApiSchema;
175
175
  class S3ApiSchema extends ApiSchema {
176
176
  location;
177
177
  bucketOwnerAccountId;
178
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ApiSchema", version: "2.238.0-alpha.0" };
178
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ApiSchema", version: "2.239.0-alpha.0" };
179
179
  constructor(location, bucketOwnerAccountId) {
180
180
  super(location, bucketOwnerAccountId, undefined);
181
181
  this.location = location;
@@ -40,7 +40,7 @@ class ToolSchemaError extends Error {
40
40
  * TOOL SCHEMA CLASS
41
41
  *****************************************************************************/
42
42
  class ToolSchema extends base_schema_1.TargetSchema {
43
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ToolSchema", version: "2.238.0-alpha.0" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ToolSchema", version: "2.239.0-alpha.0" };
44
44
  /**
45
45
  * Creates a tool Schema from a local file.
46
46
  * @param path - the path to the local file containing the function schema for the tool
@@ -98,7 +98,7 @@ exports.ToolSchema = ToolSchema;
98
98
  class AssetToolSchema extends ToolSchema {
99
99
  path;
100
100
  options;
101
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetToolSchema", version: "2.238.0-alpha.0" };
101
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetToolSchema", version: "2.239.0-alpha.0" };
102
102
  asset;
103
103
  constructor(path, options = {}) {
104
104
  super();
@@ -151,7 +151,7 @@ exports.AssetToolSchema = AssetToolSchema;
151
151
  */
152
152
  class InlineToolSchema extends ToolSchema {
153
153
  schema;
154
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineToolSchema", version: "2.238.0-alpha.0" };
154
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineToolSchema", version: "2.239.0-alpha.0" };
155
155
  constructor(schema) {
156
156
  super(undefined, undefined, schema);
157
157
  this.schema = schema;
@@ -181,7 +181,7 @@ exports.InlineToolSchema = InlineToolSchema;
181
181
  class S3ToolSchema extends ToolSchema {
182
182
  location;
183
183
  bucketOwnerAccountId;
184
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ToolSchema", version: "2.238.0-alpha.0" };
184
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ToolSchema", version: "2.239.0-alpha.0" };
185
185
  constructor(location, bucketOwnerAccountId) {
186
186
  super(location, bucketOwnerAccountId, undefined);
187
187
  this.location = location;
@@ -25,7 +25,9 @@ export declare enum McpTargetType {
25
25
  /** Lambda function target type */
26
26
  LAMBDA = "LAMBDA",
27
27
  /** MCP server target type */
28
- MCP_SERVER = "MCP_SERVER"
28
+ MCP_SERVER = "MCP_SERVER",
29
+ /** API Gateway target type */
30
+ API_GATEWAY = "API_GATEWAY"
29
31
  }
30
32
  /******************************************************************************
31
33
  * Interface
@@ -28,6 +28,8 @@ var McpTargetType;
28
28
  McpTargetType["LAMBDA"] = "LAMBDA";
29
29
  /** MCP server target type */
30
30
  McpTargetType["MCP_SERVER"] = "MCP_SERVER";
31
+ /** API Gateway target type */
32
+ McpTargetType["API_GATEWAY"] = "API_GATEWAY";
31
33
  })(McpTargetType || (exports.McpTargetType = McpTargetType = {}));
32
34
  /******************************************************************************
33
35
  * Base Class
@@ -39,7 +41,7 @@ var McpTargetType;
39
41
  * permission management and property definitions.
40
42
  */
41
43
  class GatewayTargetBase extends aws_cdk_lib_1.Resource {
42
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTargetBase", version: "2.238.0-alpha.0" };
44
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTargetBase", version: "2.239.0-alpha.0" };
43
45
  /**
44
46
  * A reference to a GatewayTarget resource.
45
47
  */
@@ -93,4 +95,4 @@ class GatewayTargetBase extends aws_cdk_lib_1.Resource {
93
95
  }
94
96
  }
95
97
  exports.GatewayTargetBase = GatewayTargetBase;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YXJnZXQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNkNBQXVDO0FBRXZDLDJDQUEyQztBQUkzQzs7K0VBRStFO0FBQy9FOztHQUVHO0FBQ0gsSUFBWSx5QkFHWDtBQUhELFdBQVkseUJBQXlCO0lBQ25DLGtDQUFrQztJQUNsQyx3Q0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUhXLHlCQUF5Qix5Q0FBekIseUJBQXlCLFFBR3BDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBU1g7QUFURCxXQUFZLGFBQWE7SUFDdkIsaUNBQWlDO0lBQ2pDLGtEQUFpQyxDQUFBO0lBQ2pDLCtCQUErQjtJQUMvQiw4Q0FBNkIsQ0FBQTtJQUM3QixrQ0FBa0M7SUFDbEMsa0NBQWlCLENBQUE7SUFDakIsNkJBQTZCO0lBQzdCLDBDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFUVyxhQUFhLDZCQUFiLGFBQWEsUUFTeEI7QUF1R0Q7OytFQUUrRTtBQUMvRTs7Ozs7R0FLRztBQUNILE1BQXNCLGlCQUFrQixTQUFRLHNCQUFROztJQWF0RDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU87WUFDTCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUI7WUFDNUQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7S0FDSDtJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTyxFQUFFLE9BQU87WUFDaEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM5QixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7S0FDSjtJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxPQUF1QjtRQUN0QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7UUFFeEYsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUNoRCxPQUFPLEVBQUUsT0FBTztZQUNoQixZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDbkIsT0FBTyxFQUFFLENBQUMsc0NBQXNDLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsd0JBQXdCO1FBQ3hCLE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDeEQ7SUFFRDs7Ozs7O09BTUc7SUFDSSxXQUFXLENBQUMsT0FBdUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLE9BQU8sRUFDUCx1Q0FBdUMsRUFDdkMsdUNBQXVDLEVBQ3ZDLHVDQUF1QyxDQUN4QyxDQUFDO0tBQ0g7O0FBeEVILDhDQXlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IEdhdGV3YXlUYXJnZXRSZWZlcmVuY2UsIElHYXRld2F5VGFyZ2V0UmVmIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgeyBJR2F0ZXdheSB9IGZyb20gJy4uL2dhdGV3YXktYmFzZSc7XG5pbXBvcnQgdHlwZSB7IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWcgfSBmcm9tICcuLi9vdXRib3VuZC1hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXInO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVU1cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogUHJvdG9jb2wgdHlwZXMgc3VwcG9ydGVkIGJ5IGdhdGV3YXkgdGFyZ2V0c1xuICovXG5leHBvcnQgZW51bSBHYXRld2F5VGFyZ2V0UHJvdG9jb2xUeXBlIHtcbiAgLyoqIE1vZGVsIENvbnRleHQgUHJvdG9jb2wgdHlwZSAqL1xuICBNQ1AgPSAnTUNQJyxcbn1cblxuLyoqXG4gKiBNQ1AgdGFyZ2V0IHR5cGVzXG4gKi9cbmV4cG9ydCBlbnVtIE1jcFRhcmdldFR5cGUge1xuICAvKiogT3BlbkFQSSBzY2hlbWEgdGFyZ2V0IHR5cGUgKi9cbiAgT1BFTkFQSV9TQ0hFTUEgPSAnT1BFTkFQSV9TQ0hFTUEnLFxuICAvKiogU21pdGh5IG1vZGVsIHRhcmdldCB0eXBlICovXG4gIFNNSVRIWV9NT0RFTCA9ICdTTUlUSFlfTU9ERUwnLFxuICAvKiogTGFtYmRhIGZ1bmN0aW9uIHRhcmdldCB0eXBlICovXG4gIExBTUJEQSA9ICdMQU1CREEnLFxuICAvKiogTUNQIHNlcnZlciB0YXJnZXQgdHlwZSAqL1xuICBNQ1BfU0VSVkVSID0gJ01DUF9TRVJWRVInLFxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBHYXRld2F5VGFyZ2V0IHJlc291cmNlc1xuICpcbiAqIFJlcHJlc2VudHMgYSB0YXJnZXQgdGhhdCBob3N0cyB0b29scyBmb3IgdGhlIGdhdGV3YXkuXG4gKiBUYXJnZXRzIGNhbiBiZSBMYW1iZGEgZnVuY3Rpb25zLCBPcGVuQVBJIHNjaGVtYXMsIG9yIFNtaXRoeSBtb2RlbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhdGV3YXlUYXJnZXQgZXh0ZW5kcyBJUmVzb3VyY2UsIElHYXRld2F5VGFyZ2V0UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhdGV3YXkgdGFyZ2V0IHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgdGhhdCB0aGlzIHRhcmdldCBiZWxvbmdzIHRvXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5OiBJR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBwcm90b2NvbFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UHJvdG9jb2xUeXBlOiBHYXRld2F5VGFyZ2V0UHJvdG9jb2xUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgY3JlZGVudGlhbCBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgcmVhc29ucyBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1c1JlYXNvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGdhdGV3YXkgdGFyZ2V0IHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGdhdGV3YXkgdGFyZ2V0IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIGBHZXRgIGFuZCBgTGlzdGAgYWN0aW9ucyBvbiB0aGUgR2F0ZXdheSBUYXJnZXRcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIGBDcmVhdGVgLCBgVXBkYXRlYCwgYW5kIGBEZWxldGVgIGFjdGlvbnMgb24gdGhlIEdhdGV3YXkgVGFyZ2V0XG4gICAqL1xuICBncmFudE1hbmFnZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIE1DUCBnYXRld2F5IHRhcmdldHNcbiAqXG4gKiBFeHRlbmRzIHRoZSBiYXNlIGdhdGV3YXkgdGFyZ2V0IGludGVyZmFjZSB3aXRoIE1DUC1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICogTUNQIHRhcmdldHMgZXhwb3NlIHRvb2xzIHVzaW5nIHRoZSBNb2RlbCBDb250ZXh0IFByb3RvY29sLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNY3BHYXRld2F5VGFyZ2V0IGV4dGVuZHMgSUdhdGV3YXlUYXJnZXQge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGFyZ2V0IChMYW1iZGEsIE9wZW5BUEksIG9yIFNtaXRoeSlcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFR5cGU6IE1jcFRhcmdldFR5cGU7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlIENsYXNzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGdhdGV3YXkgdGFyZ2V0IGltcGxlbWVudGF0aW9uc1xuICpcbiAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBhbGwgZ2F0ZXdheSB0YXJnZXQgdHlwZXMgaW5jbHVkaW5nXG4gKiBwZXJtaXNzaW9uIG1hbmFnZW1lbnQgYW5kIHByb3BlcnR5IGRlZmluaXRpb25zLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2F0ZXdheVRhcmdldEJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElHYXRld2F5VGFyZ2V0IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRhcmdldEFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFyZ2V0SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZ2F0ZXdheTogSUdhdGV3YXk7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzUmVhc29ucz86IHN0cmluZ1tdO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFyZ2V0UHJvdG9jb2xUeXBlOiBHYXRld2F5VGFyZ2V0UHJvdG9jb2xUeXBlO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byBhIEdhdGV3YXlUYXJnZXQgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdhdGV3YXlUYXJnZXRSZWYoKTogR2F0ZXdheVRhcmdldFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdhdGV3YXlJZGVudGlmaWVyOiB0aGlzLmdhdGV3YXkuZ2F0ZXdheVJlZi5nYXRld2F5SWRlbnRpZmllcixcbiAgICAgIHRhcmdldElkOiB0aGlzLnRhcmdldElkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIElBTSBhY3Rpb25zIHRvIHRoZSBJQU0gUHJpbmNpcGFsXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBJQU0gYWN0aW9ucyB0byBncmFudFxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy50YXJnZXRBcm5dLFxuICAgICAgYWN0aW9uczogYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgYEdldGAgYW5kIGBMaXN0YCBhY3Rpb25zIG9uIHRoZSBHYXRld2F5IFRhcmdldFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCByZWFkIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICBjb25zdCByZXNvdXJjZVNwZWNpZmljR3JhbnQgPSB0aGlzLmdyYW50KGdyYW50ZWUsICdiZWRyb2NrLWFnZW50Y29yZTpHZXRHYXRld2F5VGFyZ2V0Jyk7XG5cbiAgICBjb25zdCBhbGxSZXNvdXJjZUdyYW50ID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFsnKiddLFxuICAgICAgYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpMaXN0R2F0ZXdheVRhcmdldHMnXSxcbiAgICB9KTtcbiAgICAvLyBSZXR1cm4gY29tYmluZWQgZ3JhbnRcbiAgICByZXR1cm4gcmVzb3VyY2VTcGVjaWZpY0dyYW50LmNvbWJpbmUoYWxsUmVzb3VyY2VHcmFudCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIGBDcmVhdGVgLCBgVXBkYXRlYCwgYW5kIGBEZWxldGVgIGFjdGlvbnMgb24gdGhlIEdhdGV3YXkgVGFyZ2V0XG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IG1hbmFnZSBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIGdyYW50TWFuYWdlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChcbiAgICAgIGdyYW50ZWUsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6Q3JlYXRlR2F0ZXdheVRhcmdldCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6VXBkYXRlR2F0ZXdheVRhcmdldCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlR2F0ZXdheVRhcmdldCcsXG4gICAgKTtcbiAgfVxufVxuIl19
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YXJnZXQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNkNBQXVDO0FBRXZDLDJDQUEyQztBQUkzQzs7K0VBRStFO0FBQy9FOztHQUVHO0FBQ0gsSUFBWSx5QkFHWDtBQUhELFdBQVkseUJBQXlCO0lBQ25DLGtDQUFrQztJQUNsQyx3Q0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUhXLHlCQUF5Qix5Q0FBekIseUJBQXlCLFFBR3BDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBV1g7QUFYRCxXQUFZLGFBQWE7SUFDdkIsaUNBQWlDO0lBQ2pDLGtEQUFpQyxDQUFBO0lBQ2pDLCtCQUErQjtJQUMvQiw4Q0FBNkIsQ0FBQTtJQUM3QixrQ0FBa0M7SUFDbEMsa0NBQWlCLENBQUE7SUFDakIsNkJBQTZCO0lBQzdCLDBDQUF5QixDQUFBO0lBQ3pCLDhCQUE4QjtJQUM5Qiw0Q0FBMkIsQ0FBQTtBQUM3QixDQUFDLEVBWFcsYUFBYSw2QkFBYixhQUFhLFFBV3hCO0FBdUdEOzsrRUFFK0U7QUFDL0U7Ozs7O0dBS0c7QUFDSCxNQUFzQixpQkFBa0IsU0FBUSxzQkFBUTs7SUFhdEQ7O09BRUc7SUFDSCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCO1lBQzVELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDO0tBQ0g7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDOUIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7O09BTUc7SUFDSSxTQUFTLENBQUMsT0FBdUI7UUFDdEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1FBRXhGLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDaEQsT0FBTyxFQUFFLE9BQU87WUFDaEIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ25CLE9BQU8sRUFBRSxDQUFDLHNDQUFzQyxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUNILHdCQUF3QjtRQUN4QixPQUFPLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksV0FBVyxDQUFDLE9BQXVCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FDZixPQUFPLEVBQ1AsdUNBQXVDLEVBQ3ZDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsQ0FDeEMsQ0FBQztLQUNIOztBQXhFSCw4Q0F5RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBHYXRld2F5VGFyZ2V0UmVmZXJlbmNlLCBJR2F0ZXdheVRhcmdldFJlZiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlIHsgSUdhdGV3YXkgfSBmcm9tICcuLi9nYXRld2F5LWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnIH0gZnJvbSAnLi4vb3V0Ym91bmQtYXV0aC9jcmVkZW50aWFsLXByb3ZpZGVyJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlVNXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIFByb3RvY29sIHR5cGVzIHN1cHBvcnRlZCBieSBnYXRld2F5IHRhcmdldHNcbiAqL1xuZXhwb3J0IGVudW0gR2F0ZXdheVRhcmdldFByb3RvY29sVHlwZSB7XG4gIC8qKiBNb2RlbCBDb250ZXh0IFByb3RvY29sIHR5cGUgKi9cbiAgTUNQID0gJ01DUCcsXG59XG5cbi8qKlxuICogTUNQIHRhcmdldCB0eXBlc1xuICovXG5leHBvcnQgZW51bSBNY3BUYXJnZXRUeXBlIHtcbiAgLyoqIE9wZW5BUEkgc2NoZW1hIHRhcmdldCB0eXBlICovXG4gIE9QRU5BUElfU0NIRU1BID0gJ09QRU5BUElfU0NIRU1BJyxcbiAgLyoqIFNtaXRoeSBtb2RlbCB0YXJnZXQgdHlwZSAqL1xuICBTTUlUSFlfTU9ERUwgPSAnU01JVEhZX01PREVMJyxcbiAgLyoqIExhbWJkYSBmdW5jdGlvbiB0YXJnZXQgdHlwZSAqL1xuICBMQU1CREEgPSAnTEFNQkRBJyxcbiAgLyoqIE1DUCBzZXJ2ZXIgdGFyZ2V0IHR5cGUgKi9cbiAgTUNQX1NFUlZFUiA9ICdNQ1BfU0VSVkVSJyxcbiAgLyoqIEFQSSBHYXRld2F5IHRhcmdldCB0eXBlICovXG4gIEFQSV9HQVRFV0FZID0gJ0FQSV9HQVRFV0FZJyxcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgR2F0ZXdheVRhcmdldCByZXNvdXJjZXNcbiAqXG4gKiBSZXByZXNlbnRzIGEgdGFyZ2V0IHRoYXQgaG9zdHMgdG9vbHMgZm9yIHRoZSBnYXRld2F5LlxuICogVGFyZ2V0cyBjYW4gYmUgTGFtYmRhIGZ1bmN0aW9ucywgT3BlbkFQSSBzY2hlbWFzLCBvciBTbWl0aHkgbW9kZWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElHYXRld2F5VGFyZ2V0IGV4dGVuZHMgSVJlc291cmNlLCBJR2F0ZXdheVRhcmdldFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnYXRld2F5IHRhcmdldCByZXNvdXJjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoYXQgdGhpcyB0YXJnZXQgYmVsb25ncyB0b1xuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheTogSUdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFByb3RvY29sVHlwZTogR2F0ZXdheVRhcmdldFByb3RvY29sVHlwZTtcblxuICAvKipcbiAgICogVGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIHJlYXNvbnMgZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0dXNSZWFzb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHRhcmdldCB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHRhcmdldCB3YXMgbGFzdCB1cGRhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnRzIElBTSBhY3Rpb25zIHRvIHRoZSBJQU0gUHJpbmNpcGFsXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBgR2V0YCBhbmQgYExpc3RgIGFjdGlvbnMgb24gdGhlIEdhdGV3YXkgVGFyZ2V0XG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBgQ3JlYXRlYCwgYFVwZGF0ZWAsIGFuZCBgRGVsZXRlYCBhY3Rpb25zIG9uIHRoZSBHYXRld2F5IFRhcmdldFxuICAgKi9cbiAgZ3JhbnRNYW5hZ2UoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBNQ1AgZ2F0ZXdheSB0YXJnZXRzXG4gKlxuICogRXh0ZW5kcyB0aGUgYmFzZSBnYXRld2F5IHRhcmdldCBpbnRlcmZhY2Ugd2l0aCBNQ1Atc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIE1DUCB0YXJnZXRzIGV4cG9zZSB0b29scyB1c2luZyB0aGUgTW9kZWwgQ29udGV4dCBQcm90b2NvbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWNwR2F0ZXdheVRhcmdldCBleHRlbmRzIElHYXRld2F5VGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRhcmdldCAoTGFtYmRhLCBPcGVuQVBJLCBvciBTbWl0aHkpXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRUeXBlOiBNY3BUYXJnZXRUeXBlO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBnYXRld2F5IHRhcmdldCBpbXBsZW1lbnRhdGlvbnNcbiAqXG4gKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYWxsIGdhdGV3YXkgdGFyZ2V0IHR5cGVzIGluY2x1ZGluZ1xuICogcGVybWlzc2lvbiBtYW5hZ2VtZW50IGFuZCBwcm9wZXJ0eSBkZWZpbml0aW9ucy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdhdGV3YXlUYXJnZXRCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJR2F0ZXdheVRhcmdldCB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YXJnZXRBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRhcmdldElkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGdhdGV3YXk6IElHYXRld2F5O1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YXR1c1JlYXNvbnM/OiBzdHJpbmdbXTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRhcmdldFByb3RvY29sVHlwZTogR2F0ZXdheVRhcmdldFByb3RvY29sVHlwZTtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSBHYXRld2F5VGFyZ2V0IHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIGdldCBnYXRld2F5VGFyZ2V0UmVmKCk6IEdhdGV3YXlUYXJnZXRSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICBnYXRld2F5SWRlbnRpZmllcjogdGhpcy5nYXRld2F5LmdhdGV3YXlSZWYuZ2F0ZXdheUlkZW50aWZpZXIsXG4gICAgICB0YXJnZXRJZDogdGhpcy50YXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIFByaW5jaXBhbFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgSUFNIGFjdGlvbnMgdG8gZ3JhbnRcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMudGFyZ2V0QXJuXSxcbiAgICAgIGFjdGlvbnM6IGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIGBHZXRgIGFuZCBgTGlzdGAgYWN0aW9ucyBvbiB0aGUgR2F0ZXdheSBUYXJnZXRcbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgcmVzb3VyY2VTcGVjaWZpY0dyYW50ID0gdGhpcy5ncmFudChncmFudGVlLCAnYmVkcm9jay1hZ2VudGNvcmU6R2V0R2F0ZXdheVRhcmdldCcpO1xuXG4gICAgY29uc3QgYWxsUmVzb3VyY2VHcmFudCA9IGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbJyonXSxcbiAgICAgIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEdhdGV3YXlUYXJnZXRzJ10sXG4gICAgfSk7XG4gICAgLy8gUmV0dXJuIGNvbWJpbmVkIGdyYW50XG4gICAgcmV0dXJuIHJlc291cmNlU3BlY2lmaWNHcmFudC5jb21iaW5lKGFsbFJlc291cmNlR3JhbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBgQ3JlYXRlYCwgYFVwZGF0ZWAsIGFuZCBgRGVsZXRlYCBhY3Rpb25zIG9uIHRoZSBHYXRld2F5IFRhcmdldFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBtYW5hZ2UgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyBncmFudE1hbmFnZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoXG4gICAgICBncmFudGVlLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUdhdGV3YXlUYXJnZXQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZUdhdGV3YXlUYXJnZXQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUdhdGV3YXlUYXJnZXQnLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==