@aws-cdk/aws-imagebuilder-alpha 2.242.0-alpha.0 → 2.244.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.
@@ -73,7 +73,7 @@ var ContainerType;
73
73
  * Helper class for referencing and uploading dockerfile data for the container recipe
74
74
  */
75
75
  class DockerfileData {
76
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DockerfileData", version: "2.242.0-alpha.0" };
76
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DockerfileData", version: "2.244.0-alpha.0" };
77
77
  /**
78
78
  * Uploads dockerfile data from a local file to S3 to use as the dockerfile data
79
79
  *
@@ -109,7 +109,7 @@ exports.DockerfileData = DockerfileData;
109
109
  * Helper class for S3-based dockerfile data references, containing additional permission grant methods on the S3 object
110
110
  */
111
111
  class S3DockerfileData extends DockerfileData {
112
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3DockerfileData", version: "2.242.0-alpha.0" };
112
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3DockerfileData", version: "2.244.0-alpha.0" };
113
113
  bucket;
114
114
  key;
115
115
  constructor(bucket, key) {
@@ -170,7 +170,7 @@ class S3DockerfileDataFromAsset extends S3DockerfileData {
170
170
  * A new or imported Container Recipe
171
171
  */
172
172
  class ContainerRecipeBase extends cdk.Resource {
173
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipeBase", version: "2.242.0-alpha.0" };
173
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipeBase", version: "2.244.0-alpha.0" };
174
174
  /**
175
175
  * Grant custom actions to the given grantee for the container recipe
176
176
  * [disable-awslint:no-grants]
@@ -245,7 +245,7 @@ let ContainerRecipe = (() => {
245
245
  ContainerRecipe = _classThis = _classDescriptor.value;
246
246
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
247
247
  }
248
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipe", version: "2.242.0-alpha.0" };
248
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipe", version: "2.244.0-alpha.0" };
249
249
  /** Uniquely identifies this class. */
250
250
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.ContainerRecipe';
251
251
  /**
@@ -277,7 +277,7 @@ let ContainerRecipe = (() => {
277
277
  throw error;
278
278
  }
279
279
  if (!attrs.containerRecipeArn && !attrs.containerRecipeName) {
280
- throw new cdk.ValidationError('either either containerRecipeArn or containerRecipeName must be provided to import a container recipe', scope);
280
+ throw new cdk.ValidationError('ContainerRecipeAttributesRequired', 'either either containerRecipeArn or containerRecipeName must be provided to import a container recipe', scope);
281
281
  }
282
282
  const containerRecipeArn = attrs.containerRecipeArn ??
283
283
  cdk.Stack.of(scope).formatArn({
@@ -438,16 +438,16 @@ let ContainerRecipe = (() => {
438
438
  return; // Cannot validate unresolved tokens, given their actual value is rendered at deployment time
439
439
  }
440
440
  if (this.physicalName.length > 128) {
441
- throw new cdk.ValidationError(`the containerRecipeName cannot be longer than 128 characters, got: '${this.physicalName}'`, this);
441
+ throw new cdk.ValidationError('ContainerRecipeNameTooLong', `the containerRecipeName cannot be longer than 128 characters, got: '${this.physicalName}'`, this);
442
442
  }
443
443
  if (this.physicalName.includes(' ')) {
444
- throw new cdk.ValidationError(`the containerRecipeName cannot contain spaces, got: '${this.physicalName}'`, this);
444
+ throw new cdk.ValidationError('ContainerRecipeNameNoSpaces', `the containerRecipeName cannot contain spaces, got: '${this.physicalName}'`, this);
445
445
  }
446
446
  if (this.physicalName.includes('_')) {
447
- throw new cdk.ValidationError(`the containerRecipeName cannot contain underscores, got: '${this.physicalName}'`, this);
447
+ throw new cdk.ValidationError('ContainerRecipeNameNoUnderscores', `the containerRecipeName cannot contain underscores, got: '${this.physicalName}'`, this);
448
448
  }
449
449
  if (this.physicalName !== this.physicalName.toLowerCase()) {
450
- throw new cdk.ValidationError(`the containerRecipeName must be lowercase, got: '${this.physicalName}'`, this);
450
+ throw new cdk.ValidationError('ContainerRecipeNameMustBeLowercase', `the containerRecipeName must be lowercase, got: '${this.physicalName}'`, this);
451
451
  }
452
452
  }
453
453
  static {
@@ -457,4 +457,4 @@ let ContainerRecipe = (() => {
457
457
  return ContainerRecipe = _classThis;
458
458
  })();
459
459
  exports.ContainerRecipe = ContainerRecipe;
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXJlY2lwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRhaW5lci1yZWNpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW1DO0FBRW5DLDJDQUEyQztBQUMzQyxtRUFBa0U7QUFHbEUsc0RBQXNEO0FBQ3RELDRFQUF1RTtBQUN2RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBUTFFLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0FBRTlGOzs7OztHQUtHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBRS9COzs7OztHQUtHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUM7QUEySHZDOztHQUVHO0FBQ0gsSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3ZCOztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLGFBQWEsNkJBQWIsYUFBYSxRQUt4QjtBQXVCRDs7R0FFRztBQUNILE1BQXNCLGNBQWM7O0lBQ2xDOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUNyQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsSUFBWSxFQUNaLFVBQWlDLEVBQUU7UUFFbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFrQixFQUFFLEdBQVc7UUFDbEQsT0FBTyxJQUFJLDZCQUE2QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN2RDtJQUVEOzs7O09B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QztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQzNCLDZEQUE2RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQ2pGLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLG9EQUFvRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEgsQ0FBQztTQUNGOztZQTdQVSx1REFBZTs7Ozs7QUFBZiwwQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkNvbnRhaW5lclJlY2lwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pbWFnZWJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgdHlwZSAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzM2Fzc2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IG1lbW9pemVkR2V0dGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQmFzZUNvbnRhaW5lckltYWdlLCBDb250YWluZXJJbnN0YW5jZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB0eXBlIHsgUmVwb3NpdG9yeSB9IGZyb20gJy4vZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBJSW1hZ2VSZWNpcGUgfSBmcm9tICcuL2ltYWdlLXJlY2lwZSc7XG5pbXBvcnQgdHlwZSB7IE9TVmVyc2lvbiB9IGZyb20gJy4vb3MtdmVyc2lvbic7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENvbmZpZ3VyYXRpb24sIElSZWNpcGVCYXNlIH0gZnJvbSAnLi9yZWNpcGUtYmFzZSc7XG5cbmNvbnN0IENPTlRBSU5FUl9SRUNJUEVfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5Db250YWluZXJSZWNpcGUnKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBhIGNvbnRhaW5lciByZWNpcGUuIFdoZW4gdXNpbmcgdGhlIHJlY2lwZSBpbiBhIHBpcGVsaW5lLCB0aGUgcGlwZWxpbmUgd2lsbCB1c2UgdGhlXG4gKiBsYXRlc3QgcmVjaXBlIGF0IHRoZSB0aW1lIG9mIGV4ZWN1dGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pYmhvdy1zZW1hbnRpYy12ZXJzaW9uaW5nLmh0bWxcbiAqL1xuY29uc3QgTEFURVNUX1ZFUlNJT04gPSAneC54LngnO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnNpb24gdG8gdXNlIGluIHRoZSBjb250YWluZXIgcmVjaXBlLiBXaGVuIHRoZSByZWNpcGUgaXMgdXBkYXRlZCwgdGhlIGB4YCB3aWxsIGJlIGluY3JlbWVudGVkIG9mZiBmcm9tXG4gKiB0aGUgbGF0ZXN0IHJlY2lwZSB2ZXJzaW9uIHRoYXQgZXhpc3RzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2NyZWF0ZS1pbWFnZS1yZWNpcGVzLmh0bWxcbiAqL1xuY29uc3QgREVGQVVMVF9SRUNJUEVfVkVSU0lPTiA9ICcxLjAueCc7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29udGFpbmVyIFJlY2lwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29udGFpbmVyUmVjaXBlIGV4dGVuZHMgSVJlY2lwZUJhc2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVWZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBDb250YWluZXIgUmVjaXBlIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyUmVjaXBlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGJhc2UgaW1hZ2UgZm9yIGN1c3RvbWl6YXRpb25zIHNwZWNpZmllZCBpbiB0aGUgY29udGFpbmVyIHJlY2lwZS5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VJbWFnZTogQmFzZUNvbnRhaW5lckltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIHJlcG9zaXRvcnkgd2hlcmUgdGhlIG91dHB1dCBjb250YWluZXIgaW1hZ2UgaXMgc3RvcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UmVwb3NpdG9yeTogUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmFtZSBpcyBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAueFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvY2tlcmZpbGUgdGVtcGxhdGUgdXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgc3RhbmRhcmQgZG9ja2VyZmlsZSB0ZW1wbGF0ZSB3aWxsIGJlIGdlbmVyYXRlZCB0byBwdWxsIHRoZSBiYXNlIGltYWdlLCBwZXJmb3JtIGVudmlyb25tZW50IHNldHVwLCBhbmRcbiAgICogcnVuIGFsbCBjb21wb25lbnRzIGluIHRoZSByZWNpcGVcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGU/OiBEb2NrZXJmaWxlRGF0YTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgY29tcG9uZW50IGNvbmZpZ3VyYXRpb25zIHRvIGFwcGx5IGluIHRoZSBpbWFnZSBidWlsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50cz86IENvbXBvbmVudENvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBkb2NrZXJmaWxlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB1c2UgZHVyaW5nIGJ1aWxkIGFuZCB0ZXN0IHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgSW1hZ2UgQnVpbGRlciBkZWZhdWx0IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVzZWQuIEZvciBMaW51eCBhbmQgbWFjT1MgYnVpbGRzLCB0aGlzIHdvdWxkIGJlIC90bXAuIEZvclxuICAgKiBXaW5kb3dzIGJ1aWxkcywgdGhpcyB3b3VsZCBiZSBDOi9cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIChPUykgdmVyc2lvbiBvZiB0aGUgYmFzZSBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJbWFnZSBCdWlsZGVyIHdpbGwgZGV0ZXJtaW5lIHRoZSBPUyB2ZXJzaW9uIG9mIHRoZSBiYXNlIGltYWdlLCBpZiBzb3VyY2VkIGZyb20gYSB0aGlyZC1wYXJ0eSBjb250YWluZXJcbiAgICogcmVnaXN0cnkuIE90aGVyd2lzZSwgdGhlIE9TIHZlcnNpb24gb2YgdGhlIGJhc2UgaW1hZ2UgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBvc1ZlcnNpb24/OiBPU1ZlcnNpb247XG5cbiAgLyoqXG4gICAqIFRoZSBibG9jayBkZXZpY2VzIHRvIGF0dGFjaCB0byB0aGUgaW5zdGFuY2UgdXNlZCBmb3IgYnVpbGRpbmcsIHRlc3RpbmcsIGFuZCBkaXN0cmlidXRpbmcgdGhlIGNvbnRhaW5lciBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGJsb2NrIGRldmljZXMgb2YgdGhlIGluc3RhbmNlIGltYWdlIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VCbG9ja0RldmljZXM/OiBlYzIuQmxvY2tEZXZpY2VbXTtcblxuICAvKipcbiAgICogVGhlIGltYWdlIHRvIHVzZSB0byBsYXVuY2ggdGhlIGluc3RhbmNlIHVzZWQgZm9yIGJ1aWxkaW5nLCB0ZXN0aW5nLCBhbmQgZGlzdHJpYnV0aW5nIHRoZSBjb250YWluZXIgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IEltYWdlIEJ1aWxkZXIgd2lsbCB1c2UgdGhlIGFwcHJvcHJpYXRlIEVDUy1vcHRpbWl6ZWQgQU1JXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUltYWdlPzogQ29udGFpbmVySW5zdGFuY2VJbWFnZTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgdGhlIGNvbnRhaW5lciBiZWluZyB1c2VkIGluIHRoZSBjb250YWluZXIgcmVjaXBlXG4gKi9cbmV4cG9ydCBlbnVtIENvbnRhaW5lclR5cGUge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb250YWluZXIgcmVjaXBlIHVzZXMgYSBEb2NrZXIgY29udGFpbmVyXG4gICAqL1xuICBET0NLRVIgPSAnRE9DS0VSJyxcbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSB2YWx1ZSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvbi5cbiAqIC0gRm9yIGlubGluZSBkb2NrZXJmaWxlcywgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YSBpcyB0aGUgRG9ja2VyZmlsZSB0ZW1wbGF0ZSB0ZXh0XG4gKiAtIEZvciBTMy1iYWNrZWQgZG9ja2VyZmlsZXMsIGRvY2tlcmZpbGVUZW1wbGF0ZVVyaSBpcyB0aGUgUzMgVVJMXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyZmlsZVRlbXBsYXRlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBEb2NrZXJmaWxlIGRhdGEsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGRvY2tlcmZpbGVUZW1wbGF0ZVVyaSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGVUZW1wbGF0ZURhdGE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBEb2NrZXJmaWxlIFVSSSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGVUZW1wbGF0ZVVyaT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHJlZmVyZW5jaW5nIGFuZCB1cGxvYWRpbmcgZG9ja2VyZmlsZSBkYXRhIGZvciB0aGUgY29udGFpbmVyIHJlY2lwZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRG9ja2VyZmlsZURhdGEge1xuICAvKipcbiAgICogVXBsb2FkcyBkb2NrZXJmaWxlIGRhdGEgZnJvbSBhIGxvY2FsIGZpbGUgdG8gUzMgdG8gdXNlIGFzIHRoZSBkb2NrZXJmaWxlIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcGF0aCBUaGUgbG9jYWwgcGF0aCB0byB0aGUgZG9ja2VyZmlsZSBkYXRhIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgUzMgYXNzZXQgdXBsb2FkIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFzc2V0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogczNhc3NldHMuQXNzZXRPcHRpb25zID0ge30sXG4gICk6IFMzRG9ja2VyZmlsZURhdGEge1xuICAgIGNvbnN0IGFzc2V0ID0gbmV3IHMzYXNzZXRzLkFzc2V0KHNjb3BlLCBpZCwgeyAuLi5vcHRpb25zLCBwYXRoIH0pO1xuICAgIHJldHVybiBuZXcgUzNEb2NrZXJmaWxlRGF0YUZyb21Bc3NldChhc3NldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXJlbmNlcyBkb2NrZXJmaWxlIGRhdGEgZnJvbSBhIHByZS1leGlzdGluZyBTMyBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBkb2NrZXJmaWxlIGRhdGEgaXMgc3RvcmVkXG4gICAqIEBwYXJhbSBrZXkgVGhlIFMzIGtleSBvZiB0aGUgZG9ja2VyZmlsZSBkYXRhIGZpbGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVMzKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpOiBTM0RvY2tlcmZpbGVEYXRhIHtcbiAgICByZXR1cm4gbmV3IFMzRG9ja2VyZmlsZURhdGFGcm9tQnVja2V0S2V5KGJ1Y2tldCwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBzdHJpbmcgYXMgdGhlIGRvY2tlcmZpbGUgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZG9ja2VyZmlsZSBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbmxpbmUoZGF0YTogc3RyaW5nKTogRG9ja2VyZmlsZURhdGEge1xuICAgIHJldHVybiBuZXcgSW5saW5lRG9ja2VyZmlsZURhdGEoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgdmFsdWUsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb24uXG4gICAqIC0gRm9yIGlubGluZSBkb2NrZXJmaWxlcywgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YSBpcyB0aGUgRG9ja2VyZmlsZSB0ZW1wbGF0ZSB0ZXh0XG4gICAqIC0gRm9yIFMzLWJhY2tlZCBkb2NrZXJmaWxlcywgZG9ja2VyZmlsZVRlbXBsYXRlVXJpIGlzIHRoZSBTMyBVUkxcbiAgICovXG4gIGFic3RyYWN0IHJlbmRlcigpOiBEb2NrZXJmaWxlVGVtcGxhdGVDb25maWc7XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBTMy1iYXNlZCBkb2NrZXJmaWxlIGRhdGEgcmVmZXJlbmNlcywgY29udGFpbmluZyBhZGRpdGlvbmFsIHBlcm1pc3Npb24gZ3JhbnQgbWV0aG9kcyBvbiB0aGUgUzMgb2JqZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTM0RvY2tlcmZpbGVEYXRhIGV4dGVuZHMgRG9ja2VyZmlsZURhdGEge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5idWNrZXQgPSBidWNrZXQ7XG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgUzMgVVJMLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IERvY2tlcmZpbGVUZW1wbGF0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHsgZG9ja2VyZmlsZVRlbXBsYXRlVXJpOiB0aGlzLmJ1Y2tldC5zM1VybEZvck9iamVjdCh0aGlzLmtleSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwdXQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkb2NrZXJmaWxlIGRhdGEgaW4gUzNcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFB1dChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UHV0KGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZG9ja2VyZmlsZSBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVEb2NrZXJmaWxlRGF0YSBleHRlbmRzIERvY2tlcmZpbGVEYXRhIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgdGV4dCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBEb2NrZXJmaWxlVGVtcGxhdGVDb25maWcge1xuICAgIHJldHVybiB7IGRvY2tlcmZpbGVUZW1wbGF0ZURhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzRG9ja2VyZmlsZURhdGFGcm9tQnVja2V0S2V5IGV4dGVuZHMgUzNEb2NrZXJmaWxlRGF0YSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYnVja2V0LCBrZXkpO1xuICB9XG59XG5cbmNsYXNzIFMzRG9ja2VyZmlsZURhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0RvY2tlcmZpbGVEYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGFzc2V0OiBzM2Fzc2V0cy5Bc3NldCkge1xuICAgIHN1cGVyKGFzc2V0LmJ1Y2tldCwgYXNzZXQuczNPYmplY3RLZXkpO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgY29udGFpbmVyIHJlY2lwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lclJlY2lwZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBjb250YWluZXJSZWNpcGVOYW1lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIGNvbnRhaW5lclJlY2lwZUFyblxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gY29udGFpbmVyUmVjaXBlQXJuLiBpZiBhIGNvbnRhaW5lclJlY2lwZU5hbWUgaXMgcHJvdmlkZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiwgeC54LngsIHdpbGxcbiAgICogYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgQ29udGFpbmVyIFJlY2lwZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29udGFpbmVyUmVjaXBlQmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb250YWluZXJSZWNpcGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb250YWluZXJSZWNpcGVWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5jb250YWluZXJSZWNpcGVBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0Q29udGFpbmVyUmVjaXBlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2lwZSBpcyBhIENvbnRhaW5lciBSZWNpcGVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzQ29udGFpbmVyUmVjaXBlKCk6IHRoaXMgaXMgSUNvbnRhaW5lclJlY2lwZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2lwZSBpcyBhbiBJbWFnZSBSZWNpcGVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzSW1hZ2VSZWNpcGUoKTogdGhpcyBpcyBJSW1hZ2VSZWNpcGUge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29udGFpbmVyIFJlY2lwZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtcmVjaXBlcy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBDb250YWluZXJSZWNpcGUgZXh0ZW5kcyBDb250YWluZXJSZWNpcGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbnRhaW5lclJlY2lwZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb250YWluZXIgcmVjaXBlIGdpdmVuIGl0cyBBUk4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250YWluZXJSZWNpcGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29udGFpbmVyUmVjaXBlQXJuOiBzdHJpbmcpOiBJQ29udGFpbmVyUmVjaXBlIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgY29udGFpbmVyUmVjaXBlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gZXhpc3RpbmcgY29udGFpbmVyIHJlY2lwZSBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5XG4gICAqIGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250YWluZXJSZWNpcGVOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbnRhaW5lclJlY2lwZU5hbWU6IHN0cmluZyk6IElDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiB0aGlzLmZyb21Db250YWluZXJSZWNpcGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb250YWluZXJSZWNpcGVOYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb250YWluZXIgcmVjaXBlIGJ5IHByb3ZpZGluZyBpdHMgYXR0cmlidXRlcy4gSWYgdGhlIGNvbnRhaW5lciByZWNpcGUgbmFtZSBpcyBwcm92aWRlZCBhcyBhblxuICAgKiBhdHRyaWJ1dGUsIGl0IG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlc1xuICAgKiBhbmQgdW5kZXJzY29yZXMgd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IENvbnRhaW5lclJlY2lwZUF0dHJpYnV0ZXMsXG4gICk6IElDb250YWluZXJSZWNpcGUge1xuICAgIGlmICghYXR0cnMuY29udGFpbmVyUmVjaXBlQXJuICYmICFhdHRycy5jb250YWluZXJSZWNpcGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ2VpdGhlciBlaXRoZXIgY29udGFpbmVyUmVjaXBlQXJuIG9yIGNvbnRhaW5lclJlY2lwZU5hbWUgbXVzdCBiZSBwcm92aWRlZCB0byBpbXBvcnQgYSBjb250YWluZXIgcmVjaXBlJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lclJlY2lwZUFybiA9XG4gICAgICBhdHRycy5jb250YWluZXJSZWNpcGVBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29udGFpbmVyLXJlY2lwZScsXG4gICAgICAgIHJlc291cmNlTmFtZTogYCR7YXR0cnMuY29udGFpbmVyUmVjaXBlTmFtZX0vJHthdHRycy5jb250YWluZXJSZWNpcGVWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OfWAsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IFtjb250YWluZXJSZWNpcGVOYW1lLCBjb250YWluZXJSZWNpcGVWZXJzaW9uXSA9ICgoKSA9PiB7XG4gICAgICBpZiAoYXR0cnMuY29udGFpbmVyUmVjaXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gW2F0dHJzLmNvbnRhaW5lclJlY2lwZU5hbWUsIGF0dHJzLmNvbnRhaW5lclJlY2lwZVZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT05dO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWluZXJSZWNpcGVOYW1lVmVyc2lvbiA9IGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oXG4gICAgICAgIGNvbnRhaW5lclJlY2lwZUFybixcbiAgICAgICAgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgICBjb25zdCBjb250YWluZXJSZWNpcGVOYW1lVmVyc2lvblNwbGl0ID0gY2RrLkZuLnNwbGl0KCcvJywgY29udGFpbmVyUmVjaXBlTmFtZVZlcnNpb24pO1xuICAgICAgcmV0dXJuIFtjZGsuRm4uc2VsZWN0KDAsIGNvbnRhaW5lclJlY2lwZU5hbWVWZXJzaW9uU3BsaXQpLCBjZGsuRm4uc2VsZWN0KDEsIGNvbnRhaW5lclJlY2lwZU5hbWVWZXJzaW9uU3BsaXQpXTtcbiAgICB9KSgpO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQ29udGFpbmVyUmVjaXBlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlQXJuID0gY29udGFpbmVyUmVjaXBlQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWUgPSBjb250YWluZXJSZWNpcGVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb24gPSBjb250YWluZXJSZWNpcGVWZXJzaW9uO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIENvbnRhaW5lclJlY2lwZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNDb250YWluZXJSZWNpcGUoeDogYW55KTogeCBpcyBDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiBDT05UQUlORVJfUkVDSVBFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZUJsb2NrRGV2aWNlczogZWMyLkJsb2NrRGV2aWNlW10gPSBbXTtcbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuQ29udGFpbmVyUmVjaXBlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29udGFpbmVyUmVjaXBlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuY29udGFpbmVyUmVjaXBlTmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQ09OVEFJTkVSX1JFQ0lQRV9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQ29udGFpbmVyUmVjaXBlTmFtZSgpO1xuXG4gICAgdGhpcy5hZGRJbnN0YW5jZUJsb2NrRGV2aWNlKC4uLihwcm9wcy5pbnN0YW5jZUJsb2NrRGV2aWNlcyA/PyBbXSkpO1xuXG4gICAgY29uc3QgY29tcG9uZW50czogQ2ZuQ29udGFpbmVyUmVjaXBlLkNvbXBvbmVudENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkID0gcHJvcHMuY29tcG9uZW50cz8ubWFwKFxuICAgICAgKGNvbXBvbmVudCkgPT4gKHtcbiAgICAgICAgY29tcG9uZW50QXJuOiBjb21wb25lbnQuY29tcG9uZW50LmNvbXBvbmVudEFybixcbiAgICAgICAgLi4uKGNvbXBvbmVudC5wYXJhbWV0ZXJzICYmIHtcbiAgICAgICAgICBwYXJhbWV0ZXJzOiBPYmplY3QuZW50cmllcyhjb21wb25lbnQucGFyYW1ldGVycykubWFwKFxuICAgICAgICAgICAgKFtuYW1lLCBwYXJhbV0pOiBDZm5Db250YWluZXJSZWNpcGUuQ29tcG9uZW50UGFyYW1ldGVyUHJvcGVydHkgPT4gKHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHBhcmFtLnZhbHVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgZG9ja2VyZmlsZSA9XG4gICAgICBwcm9wcy5kb2NrZXJmaWxlID8/XG4gICAgICBEb2NrZXJmaWxlRGF0YS5mcm9tSW5saW5lKFxuICAgICAgICAnRlJPTSB7e3sgaW1hZ2VidWlsZGVyOnBhcmVudEltYWdlIH19fVxcbnt7eyBpbWFnZWJ1aWxkZXI6ZW52aXJvbm1lbnRzIH19fVxcbnt7eyBpbWFnZWJ1aWxkZXI6Y29tcG9uZW50cyB9fX0nLFxuICAgICAgKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lclJlY2lwZVZlcnNpb24gPSBwcm9wcy5jb250YWluZXJSZWNpcGVWZXJzaW9uID8/IERFRkFVTFRfUkVDSVBFX1ZFUlNJT047XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Db250YWluZXJSZWNpcGUodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb250YWluZXJSZWNpcGVWZXJzaW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50SW1hZ2U6IHByb3BzLmJhc2VJbWFnZS5pbWFnZSxcbiAgICAgIGNvbnRhaW5lclR5cGU6IENvbnRhaW5lclR5cGUuRE9DS0VSLFxuICAgICAgdGFyZ2V0UmVwb3NpdG9yeToge1xuICAgICAgICByZXBvc2l0b3J5TmFtZTogcHJvcHMudGFyZ2V0UmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgc2VydmljZTogcHJvcHMudGFyZ2V0UmVwb3NpdG9yeS5zZXJ2aWNlLFxuICAgICAgfSxcbiAgICAgIHBsYXRmb3JtT3ZlcnJpZGU6IHByb3BzLm9zVmVyc2lvbj8ucGxhdGZvcm0sXG4gICAgICBpbWFnZU9zVmVyc2lvbk92ZXJyaWRlOiBwcm9wcy5vc1ZlcnNpb24/Lm9zVmVyc2lvbixcbiAgICAgIGttc0tleUlkOiBwcm9wcy5rbXNLZXk/LmtleUFybixcbiAgICAgIGluc3RhbmNlQ29uZmlndXJhdGlvbjogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5idWlsZEluc3RhbmNlQ29uZmlndXJhdGlvbihwcm9wcykgfSksXG4gICAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9wcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLmRvY2tlcmZpbGUucmVuZGVyKCksXG4gICAgICAuLi4oY29tcG9uZW50cz8ubGVuZ3RoICYmIHsgY29tcG9uZW50cyB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGNvbnRhaW5lclJlY2lwZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5hdHRyTmFtZSk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBjb250YWluZXJSZWNpcGVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJBcm4sIHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdjb250YWluZXItcmVjaXBlJyxcbiAgICAgIHJlc291cmNlTmFtZTogYCR7dGhpcy5waHlzaWNhbE5hbWV9LyR7dGhpcy5yZXNvdXJjZS52ZXJzaW9ufWAsXG4gICAgfSk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBjb250YWluZXJSZWNpcGVWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UuZ2V0QXR0KCdWZXJzaW9uJykudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGJsb2NrIGRldmljZXMgdG8gYXR0YWNoIHRvIHRoZSBpbnN0YW5jZSB1c2VkIGZvciBidWlsZGluZywgdGVzdGluZywgYW5kIGRpc3RyaWJ1dGluZyB0aGUgY29udGFpbmVyIGltYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFuY2VCbG9ja0RldmljZXMgLSBUaGUgbGlzdCBvZiBibG9jayBkZXZpY2VzIHRvIGF0dGFjaFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEluc3RhbmNlQmxvY2tEZXZpY2UoLi4uaW5zdGFuY2VCbG9ja0RldmljZXM6IGVjMi5CbG9ja0RldmljZVtdKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0YW5jZUJsb2NrRGV2aWNlcy5wdXNoKC4uLmluc3RhbmNlQmxvY2tEZXZpY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBibG9jayBkZXZpY2VzIHByb3ZpZGVkIGFzIGlucHV0IHRvIHRoZSBjb25zdHJ1Y3QsIGludG8gdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nIHN0cnVjdHVyZSB0aGF0XG4gICAqIENmbkNvbnRhaW5lclJlY2lwZSBleHBlY3RzIHRvIHJlY2VpdmUuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVuZGVyZWQgYXQgc3ludGhlc2lzIHRpbWUsIGFzIHVzZXJzIGNhbiBhZGQgYWRkaXRpb25hbCBibG9jayBkZXZpY2VzIHdpdGggYGFkZEluc3RhbmNlQmxvY2tEZXZpY2VgLCBhZnRlclxuICAgKiB0aGUgY29uc3RydWN0IGhhcyBiZWVuIGluc3RhbnRpYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQmxvY2tEZXZpY2VzKCk6IENmbkNvbnRhaW5lclJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJsb2NrRGV2aWNlcyA9IHRoaXMuaW5zdGFuY2VCbG9ja0RldmljZXMubWFwKFxuICAgICAgKGJsb2NrRGV2aWNlKTogQ2ZuQ29udGFpbmVyUmVjaXBlLkluc3RhbmNlQmxvY2tEZXZpY2VNYXBwaW5nUHJvcGVydHkgPT4ge1xuICAgICAgICBjb25zdCBlYnNEZXZpY2UgPSBibG9ja0RldmljZS52b2x1bWUuZWJzRGV2aWNlO1xuICAgICAgICBjb25zdCBlYnM6IENmbkNvbnRhaW5lclJlY2lwZS5FYnNJbnN0YW5jZUJsb2NrRGV2aWNlU3BlY2lmaWNhdGlvblByb3BlcnR5ID0ge1xuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LmRlbGV0ZU9uVGVybWluYXRpb24gIT09IHVuZGVmaW5lZCAmJiB7IGRlbGV0ZU9uVGVybWluYXRpb246IGVic0RldmljZS5kZWxldGVPblRlcm1pbmF0aW9uIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LmVuY3J5cHRlZCAhPT0gdW5kZWZpbmVkICYmIHsgZW5jcnlwdGVkOiBlYnNEZXZpY2UuZW5jcnlwdGVkIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LmlvcHMgIT09IHVuZGVmaW5lZCAmJiB7IGlvcHM6IGVic0RldmljZS5pb3BzIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/Lmttc0tleSAhPT0gdW5kZWZpbmVkICYmIHsga21zS2V5SWQ6IGVic0RldmljZS5rbXNLZXkua2V5QXJuIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnNuYXBzaG90SWQgIT09IHVuZGVmaW5lZCAmJiB7IHNuYXBzaG90SWQ6IGVic0RldmljZS5zbmFwc2hvdElkIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnRocm91Z2hwdXQgIT09IHVuZGVmaW5lZCAmJiB7IHRocm91Z2hwdXQ6IGVic0RldmljZS50aHJvdWdocHV0IH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnZvbHVtZVNpemUgIT09IHVuZGVmaW5lZCAmJiB7IHZvbHVtZVNpemU6IGVic0RldmljZS52b2x1bWVTaXplIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnZvbHVtZVR5cGUgIT09IHVuZGVmaW5lZCAmJiB7IHZvbHVtZVR5cGU6IGVic0RldmljZS52b2x1bWVUeXBlIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1hcHBpbmdFbmFibGVkID0gYmxvY2tEZXZpY2UubWFwcGluZ0VuYWJsZWQgPz8gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiBibG9ja0RldmljZS5kZXZpY2VOYW1lLFxuICAgICAgICAgIHZpcnR1YWxOYW1lOiBibG9ja0RldmljZS52b2x1bWUudmlydHVhbE5hbWUsXG4gICAgICAgICAgLi4uKCFtYXBwaW5nRW5hYmxlZCAmJiB7IG5vRGV2aWNlOiAnJyB9KSxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZWJzKS5sZW5ndGggJiYgeyBlYnMgfSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gYmxvY2tEZXZpY2VzLmxlbmd0aCA/IGJsb2NrRGV2aWNlcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgaW50byB0aGUgYEluc3RhbmNlQ29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGUgIENsb3VkRm9ybWF0aW9uIEwxXG4gICAqIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgcGFzc2VkIGFzIGlucHV0IHRvIHRoZSBjb25zdHJ1Y3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYnVpbGRJbnN0YW5jZUNvbmZpZ3VyYXRpb24oXG4gICAgcHJvcHM6IENvbnRhaW5lclJlY2lwZVByb3BzLFxuICApOiBDZm5Db250YWluZXJSZWNpcGUuSW5zdGFuY2VDb25maWd1cmF0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJsb2NrRGV2aWNlcyA9IHRoaXMucmVuZGVyQmxvY2tEZXZpY2VzKCk7XG5cbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZ3VyYXRpb246IENmbkNvbnRhaW5lclJlY2lwZS5JbnN0YW5jZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgIC4uLihibG9ja0RldmljZXM/Lmxlbmd0aCAmJiB7IGJsb2NrRGV2aWNlTWFwcGluZ3M6IGJsb2NrRGV2aWNlcyB9KSxcbiAgICAgIC4uLihwcm9wcy5pbnN0YW5jZUltYWdlICE9PSB1bmRlZmluZWQgJiYgeyBpbWFnZTogcHJvcHMuaW5zdGFuY2VJbWFnZS5pbWFnZSB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGluc3RhbmNlQ29uZmlndXJhdGlvbikubGVuZ3RoID8gaW5zdGFuY2VDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbnRhaW5lclJlY2lwZU5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgdGhlIGNvbnRhaW5lclJlY2lwZU5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb250YWluZXJSZWNpcGVOYW1lIGNhbm5vdCBjb250YWluIHNwYWNlcywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCdfJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgdGhlIGNvbnRhaW5lclJlY2lwZU5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb250YWluZXJSZWNpcGVOYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXJlY2lwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRhaW5lci1yZWNpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW1DO0FBRW5DLDJDQUEyQztBQUMzQyxtRUFBa0U7QUFHbEUsc0RBQXNEO0FBQ3RELDRFQUF1RTtBQUN2RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBUTFFLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0FBRTlGOzs7OztHQUtHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBRS9COzs7OztHQUtHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUM7QUEySHZDOztHQUVHO0FBQ0gsSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3ZCOztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLGFBQWEsNkJBQWIsYUFBYSxRQUt4QjtBQXVCRDs7R0FFRztBQUNILE1BQXNCLGNBQWM7O0lBQ2xDOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUNyQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsSUFBWSxFQUNaLFVBQWlDLEVBQUU7UUFFbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFrQixFQUFFLEdBQVc7UUFDbEQsT0FBTyxJQUFJLDZCQUE2QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN2RDtJQUVEOzs7O09B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QUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuSixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FDM0Isa0NBQWtDLEVBQ2xDLDZEQUE2RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQ2pGLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLG9DQUFvQyxFQUFFLG9EQUFvRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEosQ0FBQztTQUNGOztZQWhRVSx1REFBZTs7Ozs7QUFBZiwwQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkNvbnRhaW5lclJlY2lwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pbWFnZWJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgdHlwZSAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzM2Fzc2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IG1lbW9pemVkR2V0dGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQmFzZUNvbnRhaW5lckltYWdlLCBDb250YWluZXJJbnN0YW5jZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB0eXBlIHsgUmVwb3NpdG9yeSB9IGZyb20gJy4vZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBJSW1hZ2VSZWNpcGUgfSBmcm9tICcuL2ltYWdlLXJlY2lwZSc7XG5pbXBvcnQgdHlwZSB7IE9TVmVyc2lvbiB9IGZyb20gJy4vb3MtdmVyc2lvbic7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENvbmZpZ3VyYXRpb24sIElSZWNpcGVCYXNlIH0gZnJvbSAnLi9yZWNpcGUtYmFzZSc7XG5cbmNvbnN0IENPTlRBSU5FUl9SRUNJUEVfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5Db250YWluZXJSZWNpcGUnKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBhIGNvbnRhaW5lciByZWNpcGUuIFdoZW4gdXNpbmcgdGhlIHJlY2lwZSBpbiBhIHBpcGVsaW5lLCB0aGUgcGlwZWxpbmUgd2lsbCB1c2UgdGhlXG4gKiBsYXRlc3QgcmVjaXBlIGF0IHRoZSB0aW1lIG9mIGV4ZWN1dGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pYmhvdy1zZW1hbnRpYy12ZXJzaW9uaW5nLmh0bWxcbiAqL1xuY29uc3QgTEFURVNUX1ZFUlNJT04gPSAneC54LngnO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnNpb24gdG8gdXNlIGluIHRoZSBjb250YWluZXIgcmVjaXBlLiBXaGVuIHRoZSByZWNpcGUgaXMgdXBkYXRlZCwgdGhlIGB4YCB3aWxsIGJlIGluY3JlbWVudGVkIG9mZiBmcm9tXG4gKiB0aGUgbGF0ZXN0IHJlY2lwZSB2ZXJzaW9uIHRoYXQgZXhpc3RzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2NyZWF0ZS1pbWFnZS1yZWNpcGVzLmh0bWxcbiAqL1xuY29uc3QgREVGQVVMVF9SRUNJUEVfVkVSU0lPTiA9ICcxLjAueCc7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29udGFpbmVyIFJlY2lwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29udGFpbmVyUmVjaXBlIGV4dGVuZHMgSVJlY2lwZUJhc2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVWZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBDb250YWluZXIgUmVjaXBlIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyUmVjaXBlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGJhc2UgaW1hZ2UgZm9yIGN1c3RvbWl6YXRpb25zIHNwZWNpZmllZCBpbiB0aGUgY29udGFpbmVyIHJlY2lwZS5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VJbWFnZTogQmFzZUNvbnRhaW5lckltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIHJlcG9zaXRvcnkgd2hlcmUgdGhlIG91dHB1dCBjb250YWluZXIgaW1hZ2UgaXMgc3RvcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UmVwb3NpdG9yeTogUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmFtZSBpcyBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAueFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvY2tlcmZpbGUgdGVtcGxhdGUgdXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgc3RhbmRhcmQgZG9ja2VyZmlsZSB0ZW1wbGF0ZSB3aWxsIGJlIGdlbmVyYXRlZCB0byBwdWxsIHRoZSBiYXNlIGltYWdlLCBwZXJmb3JtIGVudmlyb25tZW50IHNldHVwLCBhbmRcbiAgICogcnVuIGFsbCBjb21wb25lbnRzIGluIHRoZSByZWNpcGVcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGU/OiBEb2NrZXJmaWxlRGF0YTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgY29tcG9uZW50IGNvbmZpZ3VyYXRpb25zIHRvIGFwcGx5IGluIHRoZSBpbWFnZSBidWlsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50cz86IENvbXBvbmVudENvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBkb2NrZXJmaWxlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB1c2UgZHVyaW5nIGJ1aWxkIGFuZCB0ZXN0IHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgSW1hZ2UgQnVpbGRlciBkZWZhdWx0IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVzZWQuIEZvciBMaW51eCBhbmQgbWFjT1MgYnVpbGRzLCB0aGlzIHdvdWxkIGJlIC90bXAuIEZvclxuICAgKiBXaW5kb3dzIGJ1aWxkcywgdGhpcyB3b3VsZCBiZSBDOi9cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIChPUykgdmVyc2lvbiBvZiB0aGUgYmFzZSBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJbWFnZSBCdWlsZGVyIHdpbGwgZGV0ZXJtaW5lIHRoZSBPUyB2ZXJzaW9uIG9mIHRoZSBiYXNlIGltYWdlLCBpZiBzb3VyY2VkIGZyb20gYSB0aGlyZC1wYXJ0eSBjb250YWluZXJcbiAgICogcmVnaXN0cnkuIE90aGVyd2lzZSwgdGhlIE9TIHZlcnNpb24gb2YgdGhlIGJhc2UgaW1hZ2UgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBvc1ZlcnNpb24/OiBPU1ZlcnNpb247XG5cbiAgLyoqXG4gICAqIFRoZSBibG9jayBkZXZpY2VzIHRvIGF0dGFjaCB0byB0aGUgaW5zdGFuY2UgdXNlZCBmb3IgYnVpbGRpbmcsIHRlc3RpbmcsIGFuZCBkaXN0cmlidXRpbmcgdGhlIGNvbnRhaW5lciBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGJsb2NrIGRldmljZXMgb2YgdGhlIGluc3RhbmNlIGltYWdlIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VCbG9ja0RldmljZXM/OiBlYzIuQmxvY2tEZXZpY2VbXTtcblxuICAvKipcbiAgICogVGhlIGltYWdlIHRvIHVzZSB0byBsYXVuY2ggdGhlIGluc3RhbmNlIHVzZWQgZm9yIGJ1aWxkaW5nLCB0ZXN0aW5nLCBhbmQgZGlzdHJpYnV0aW5nIHRoZSBjb250YWluZXIgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IEltYWdlIEJ1aWxkZXIgd2lsbCB1c2UgdGhlIGFwcHJvcHJpYXRlIEVDUy1vcHRpbWl6ZWQgQU1JXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUltYWdlPzogQ29udGFpbmVySW5zdGFuY2VJbWFnZTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgdGhlIGNvbnRhaW5lciBiZWluZyB1c2VkIGluIHRoZSBjb250YWluZXIgcmVjaXBlXG4gKi9cbmV4cG9ydCBlbnVtIENvbnRhaW5lclR5cGUge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb250YWluZXIgcmVjaXBlIHVzZXMgYSBEb2NrZXIgY29udGFpbmVyXG4gICAqL1xuICBET0NLRVIgPSAnRE9DS0VSJyxcbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSB2YWx1ZSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvbi5cbiAqIC0gRm9yIGlubGluZSBkb2NrZXJmaWxlcywgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YSBpcyB0aGUgRG9ja2VyZmlsZSB0ZW1wbGF0ZSB0ZXh0XG4gKiAtIEZvciBTMy1iYWNrZWQgZG9ja2VyZmlsZXMsIGRvY2tlcmZpbGVUZW1wbGF0ZVVyaSBpcyB0aGUgUzMgVVJMXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyZmlsZVRlbXBsYXRlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBEb2NrZXJmaWxlIGRhdGEsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGRvY2tlcmZpbGVUZW1wbGF0ZVVyaSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGVUZW1wbGF0ZURhdGE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBEb2NrZXJmaWxlIFVSSSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGVUZW1wbGF0ZVVyaT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHJlZmVyZW5jaW5nIGFuZCB1cGxvYWRpbmcgZG9ja2VyZmlsZSBkYXRhIGZvciB0aGUgY29udGFpbmVyIHJlY2lwZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRG9ja2VyZmlsZURhdGEge1xuICAvKipcbiAgICogVXBsb2FkcyBkb2NrZXJmaWxlIGRhdGEgZnJvbSBhIGxvY2FsIGZpbGUgdG8gUzMgdG8gdXNlIGFzIHRoZSBkb2NrZXJmaWxlIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcGF0aCBUaGUgbG9jYWwgcGF0aCB0byB0aGUgZG9ja2VyZmlsZSBkYXRhIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgUzMgYXNzZXQgdXBsb2FkIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFzc2V0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogczNhc3NldHMuQXNzZXRPcHRpb25zID0ge30sXG4gICk6IFMzRG9ja2VyZmlsZURhdGEge1xuICAgIGNvbnN0IGFzc2V0ID0gbmV3IHMzYXNzZXRzLkFzc2V0KHNjb3BlLCBpZCwgeyAuLi5vcHRpb25zLCBwYXRoIH0pO1xuICAgIHJldHVybiBuZXcgUzNEb2NrZXJmaWxlRGF0YUZyb21Bc3NldChhc3NldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXJlbmNlcyBkb2NrZXJmaWxlIGRhdGEgZnJvbSBhIHByZS1leGlzdGluZyBTMyBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBkb2NrZXJmaWxlIGRhdGEgaXMgc3RvcmVkXG4gICAqIEBwYXJhbSBrZXkgVGhlIFMzIGtleSBvZiB0aGUgZG9ja2VyZmlsZSBkYXRhIGZpbGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVMzKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpOiBTM0RvY2tlcmZpbGVEYXRhIHtcbiAgICByZXR1cm4gbmV3IFMzRG9ja2VyZmlsZURhdGFGcm9tQnVja2V0S2V5KGJ1Y2tldCwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBzdHJpbmcgYXMgdGhlIGRvY2tlcmZpbGUgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZG9ja2VyZmlsZSBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbmxpbmUoZGF0YTogc3RyaW5nKTogRG9ja2VyZmlsZURhdGEge1xuICAgIHJldHVybiBuZXcgSW5saW5lRG9ja2VyZmlsZURhdGEoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgdmFsdWUsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb24uXG4gICAqIC0gRm9yIGlubGluZSBkb2NrZXJmaWxlcywgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YSBpcyB0aGUgRG9ja2VyZmlsZSB0ZW1wbGF0ZSB0ZXh0XG4gICAqIC0gRm9yIFMzLWJhY2tlZCBkb2NrZXJmaWxlcywgZG9ja2VyZmlsZVRlbXBsYXRlVXJpIGlzIHRoZSBTMyBVUkxcbiAgICovXG4gIGFic3RyYWN0IHJlbmRlcigpOiBEb2NrZXJmaWxlVGVtcGxhdGVDb25maWc7XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBTMy1iYXNlZCBkb2NrZXJmaWxlIGRhdGEgcmVmZXJlbmNlcywgY29udGFpbmluZyBhZGRpdGlvbmFsIHBlcm1pc3Npb24gZ3JhbnQgbWV0aG9kcyBvbiB0aGUgUzMgb2JqZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTM0RvY2tlcmZpbGVEYXRhIGV4dGVuZHMgRG9ja2VyZmlsZURhdGEge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5idWNrZXQgPSBidWNrZXQ7XG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgUzMgVVJMLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IERvY2tlcmZpbGVUZW1wbGF0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHsgZG9ja2VyZmlsZVRlbXBsYXRlVXJpOiB0aGlzLmJ1Y2tldC5zM1VybEZvck9iamVjdCh0aGlzLmtleSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwdXQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkb2NrZXJmaWxlIGRhdGEgaW4gUzNcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFB1dChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UHV0KGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZG9ja2VyZmlsZSBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVEb2NrZXJmaWxlRGF0YSBleHRlbmRzIERvY2tlcmZpbGVEYXRhIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgdGV4dCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBEb2NrZXJmaWxlVGVtcGxhdGVDb25maWcge1xuICAgIHJldHVybiB7IGRvY2tlcmZpbGVUZW1wbGF0ZURhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzRG9ja2VyZmlsZURhdGFGcm9tQnVja2V0S2V5IGV4dGVuZHMgUzNEb2NrZXJmaWxlRGF0YSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYnVja2V0LCBrZXkpO1xuICB9XG59XG5cbmNsYXNzIFMzRG9ja2VyZmlsZURhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0RvY2tlcmZpbGVEYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGFzc2V0OiBzM2Fzc2V0cy5Bc3NldCkge1xuICAgIHN1cGVyKGFzc2V0LmJ1Y2tldCwgYXNzZXQuczNPYmplY3RLZXkpO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgY29udGFpbmVyIHJlY2lwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lclJlY2lwZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBjb250YWluZXJSZWNpcGVOYW1lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIGNvbnRhaW5lclJlY2lwZUFyblxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gY29udGFpbmVyUmVjaXBlQXJuLiBpZiBhIGNvbnRhaW5lclJlY2lwZU5hbWUgaXMgcHJvdmlkZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiwgeC54LngsIHdpbGxcbiAgICogYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgQ29udGFpbmVyIFJlY2lwZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29udGFpbmVyUmVjaXBlQmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb250YWluZXJSZWNpcGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb250YWluZXJSZWNpcGVWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5jb250YWluZXJSZWNpcGVBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0Q29udGFpbmVyUmVjaXBlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2lwZSBpcyBhIENvbnRhaW5lciBSZWNpcGVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzQ29udGFpbmVyUmVjaXBlKCk6IHRoaXMgaXMgSUNvbnRhaW5lclJlY2lwZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2lwZSBpcyBhbiBJbWFnZSBSZWNpcGVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzSW1hZ2VSZWNpcGUoKTogdGhpcyBpcyBJSW1hZ2VSZWNpcGUge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29udGFpbmVyIFJlY2lwZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtcmVjaXBlcy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBDb250YWluZXJSZWNpcGUgZXh0ZW5kcyBDb250YWluZXJSZWNpcGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbnRhaW5lclJlY2lwZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb250YWluZXIgcmVjaXBlIGdpdmVuIGl0cyBBUk4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250YWluZXJSZWNpcGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29udGFpbmVyUmVjaXBlQXJuOiBzdHJpbmcpOiBJQ29udGFpbmVyUmVjaXBlIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgY29udGFpbmVyUmVjaXBlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gZXhpc3RpbmcgY29udGFpbmVyIHJlY2lwZSBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5XG4gICAqIGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250YWluZXJSZWNpcGVOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbnRhaW5lclJlY2lwZU5hbWU6IHN0cmluZyk6IElDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiB0aGlzLmZyb21Db250YWluZXJSZWNpcGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb250YWluZXJSZWNpcGVOYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb250YWluZXIgcmVjaXBlIGJ5IHByb3ZpZGluZyBpdHMgYXR0cmlidXRlcy4gSWYgdGhlIGNvbnRhaW5lciByZWNpcGUgbmFtZSBpcyBwcm92aWRlZCBhcyBhblxuICAgKiBhdHRyaWJ1dGUsIGl0IG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlc1xuICAgKiBhbmQgdW5kZXJzY29yZXMgd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IENvbnRhaW5lclJlY2lwZUF0dHJpYnV0ZXMsXG4gICk6IElDb250YWluZXJSZWNpcGUge1xuICAgIGlmICghYXR0cnMuY29udGFpbmVyUmVjaXBlQXJuICYmICFhdHRycy5jb250YWluZXJSZWNpcGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0NvbnRhaW5lclJlY2lwZUF0dHJpYnV0ZXNSZXF1aXJlZCcsXG4gICAgICAgICdlaXRoZXIgZWl0aGVyIGNvbnRhaW5lclJlY2lwZUFybiBvciBjb250YWluZXJSZWNpcGVOYW1lIG11c3QgYmUgcHJvdmlkZWQgdG8gaW1wb3J0IGEgY29udGFpbmVyIHJlY2lwZScsXG4gICAgICAgIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXJSZWNpcGVBcm4gPVxuICAgICAgYXR0cnMuY29udGFpbmVyUmVjaXBlQXJuID8/XG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICByZXNvdXJjZTogJ2NvbnRhaW5lci1yZWNpcGUnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbnRhaW5lclJlY2lwZU5hbWV9LyR7YXR0cnMuY29udGFpbmVyUmVjaXBlVmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBbY29udGFpbmVyUmVjaXBlTmFtZSwgY29udGFpbmVyUmVjaXBlVmVyc2lvbl0gPSAoKCkgPT4ge1xuICAgICAgaWYgKGF0dHJzLmNvbnRhaW5lclJlY2lwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFthdHRycy5jb250YWluZXJSZWNpcGVOYW1lLCBhdHRycy5jb250YWluZXJSZWNpcGVWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGFpbmVyUmVjaXBlTmFtZVZlcnNpb24gPSBjZGsuU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKFxuICAgICAgICBjb250YWluZXJSZWNpcGVBcm4sXG4gICAgICAgIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgICkucmVzb3VyY2VOYW1lITtcblxuICAgICAgY29uc3QgY29udGFpbmVyUmVjaXBlTmFtZVZlcnNpb25TcGxpdCA9IGNkay5Gbi5zcGxpdCgnLycsIGNvbnRhaW5lclJlY2lwZU5hbWVWZXJzaW9uKTtcbiAgICAgIHJldHVybiBbY2RrLkZuLnNlbGVjdCgwLCBjb250YWluZXJSZWNpcGVOYW1lVmVyc2lvblNwbGl0KSwgY2RrLkZuLnNlbGVjdCgxLCBjb250YWluZXJSZWNpcGVOYW1lVmVyc2lvblNwbGl0KV07XG4gICAgfSkoKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIENvbnRhaW5lclJlY2lwZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZUFybiA9IGNvbnRhaW5lclJlY2lwZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lID0gY29udGFpbmVyUmVjaXBlTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb250YWluZXJSZWNpcGVWZXJzaW9uID0gY29udGFpbmVyUmVjaXBlVmVyc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBDb250YWluZXJSZWNpcGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzQ29udGFpbmVyUmVjaXBlKHg6IGFueSk6IHggaXMgQ29udGFpbmVyUmVjaXBlIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgQ09OVEFJTkVSX1JFQ0lQRV9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VCbG9ja0RldmljZXM6IGVjMi5CbG9ja0RldmljZVtdID0gW107XG4gIHByaXZhdGUgcmVzb3VyY2U6IENmbkNvbnRhaW5lclJlY2lwZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbnRhaW5lclJlY2lwZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmNvbnRhaW5lclJlY2lwZU5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIENPTlRBSU5FUl9SRUNJUEVfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0ZUNvbnRhaW5lclJlY2lwZU5hbWUoKTtcblxuICAgIHRoaXMuYWRkSW5zdGFuY2VCbG9ja0RldmljZSguLi4ocHJvcHMuaW5zdGFuY2VCbG9ja0RldmljZXMgPz8gW10pKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudHM6IENmbkNvbnRhaW5lclJlY2lwZS5Db21wb25lbnRDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCA9IHByb3BzLmNvbXBvbmVudHM/Lm1hcChcbiAgICAgIChjb21wb25lbnQpID0+ICh7XG4gICAgICAgIGNvbXBvbmVudEFybjogY29tcG9uZW50LmNvbXBvbmVudC5jb21wb25lbnRBcm4sXG4gICAgICAgIC4uLihjb21wb25lbnQucGFyYW1ldGVycyAmJiB7XG4gICAgICAgICAgcGFyYW1ldGVyczogT2JqZWN0LmVudHJpZXMoY29tcG9uZW50LnBhcmFtZXRlcnMpLm1hcChcbiAgICAgICAgICAgIChbbmFtZSwgcGFyYW1dKTogQ2ZuQ29udGFpbmVyUmVjaXBlLkNvbXBvbmVudFBhcmFtZXRlclByb3BlcnR5ID0+ICh7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXJhbS52YWx1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRvY2tlcmZpbGUgPVxuICAgICAgcHJvcHMuZG9ja2VyZmlsZSA/P1xuICAgICAgRG9ja2VyZmlsZURhdGEuZnJvbUlubGluZShcbiAgICAgICAgJ0ZST00ge3t7IGltYWdlYnVpbGRlcjpwYXJlbnRJbWFnZSB9fX1cXG57e3sgaW1hZ2VidWlsZGVyOmVudmlyb25tZW50cyB9fX1cXG57e3sgaW1hZ2VidWlsZGVyOmNvbXBvbmVudHMgfX19JyxcbiAgICAgICk7XG5cbiAgICBjb25zdCBjb250YWluZXJSZWNpcGVWZXJzaW9uID0gcHJvcHMuY29udGFpbmVyUmVjaXBlVmVyc2lvbiA/PyBERUZBVUxUX1JFQ0lQRV9WRVJTSU9OO1xuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuQ29udGFpbmVyUmVjaXBlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgdmVyc2lvbjogY29udGFpbmVyUmVjaXBlVmVyc2lvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHBhcmVudEltYWdlOiBwcm9wcy5iYXNlSW1hZ2UuaW1hZ2UsXG4gICAgICBjb250YWluZXJUeXBlOiBDb250YWluZXJUeXBlLkRPQ0tFUixcbiAgICAgIHRhcmdldFJlcG9zaXRvcnk6IHtcbiAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHByb3BzLnRhcmdldFJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIHNlcnZpY2U6IHByb3BzLnRhcmdldFJlcG9zaXRvcnkuc2VydmljZSxcbiAgICAgIH0sXG4gICAgICBwbGF0Zm9ybU92ZXJyaWRlOiBwcm9wcy5vc1ZlcnNpb24/LnBsYXRmb3JtLFxuICAgICAgaW1hZ2VPc1ZlcnNpb25PdmVycmlkZTogcHJvcHMub3NWZXJzaW9uPy5vc1ZlcnNpb24sXG4gICAgICBrbXNLZXlJZDogcHJvcHMua21zS2V5Py5rZXlBcm4sXG4gICAgICBpbnN0YW5jZUNvbmZpZ3VyYXRpb246IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuYnVpbGRJbnN0YW5jZUNvbmZpZ3VyYXRpb24ocHJvcHMpIH0pLFxuICAgICAgd29ya2luZ0RpcmVjdG9yeTogcHJvcHMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICAuLi5kb2NrZXJmaWxlLnJlbmRlcigpLFxuICAgICAgLi4uKGNvbXBvbmVudHM/Lmxlbmd0aCAmJiB7IGNvbXBvbmVudHMgfSksXG4gICAgfSk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBjb250YWluZXJSZWNpcGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ck5hbWUpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29udGFpbmVyUmVjaXBlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5hdHRyQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnY29udGFpbmVyLXJlY2lwZScsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke3RoaXMucmVzb3VyY2UudmVyc2lvbn1gLFxuICAgIH0pO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29udGFpbmVyUmVjaXBlVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLmdldEF0dCgnVmVyc2lvbicpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBibG9jayBkZXZpY2VzIHRvIGF0dGFjaCB0byB0aGUgaW5zdGFuY2UgdXNlZCBmb3IgYnVpbGRpbmcsIHRlc3RpbmcsIGFuZCBkaXN0cmlidXRpbmcgdGhlIGNvbnRhaW5lciBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbmNlQmxvY2tEZXZpY2VzIC0gVGhlIGxpc3Qgb2YgYmxvY2sgZGV2aWNlcyB0byBhdHRhY2hcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRJbnN0YW5jZUJsb2NrRGV2aWNlKC4uLmluc3RhbmNlQmxvY2tEZXZpY2VzOiBlYzIuQmxvY2tEZXZpY2VbXSk6IHZvaWQge1xuICAgIHRoaXMuaW5zdGFuY2VCbG9ja0RldmljZXMucHVzaCguLi5pbnN0YW5jZUJsb2NrRGV2aWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYmxvY2sgZGV2aWNlcyBwcm92aWRlZCBhcyBpbnB1dCB0byB0aGUgY29uc3RydWN0LCBpbnRvIHRoZSBibG9jayBkZXZpY2UgbWFwcGluZyBzdHJ1Y3R1cmUgdGhhdFxuICAgKiBDZm5Db250YWluZXJSZWNpcGUgZXhwZWN0cyB0byByZWNlaXZlLlxuICAgKlxuICAgKiBUaGlzIGlzIHJlbmRlcmVkIGF0IHN5bnRoZXNpcyB0aW1lLCBhcyB1c2VycyBjYW4gYWRkIGFkZGl0aW9uYWwgYmxvY2sgZGV2aWNlcyB3aXRoIGBhZGRJbnN0YW5jZUJsb2NrRGV2aWNlYCwgYWZ0ZXJcbiAgICogdGhlIGNvbnN0cnVjdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJsb2NrRGV2aWNlcygpOiBDZm5Db250YWluZXJSZWNpcGUuSW5zdGFuY2VCbG9ja0RldmljZU1hcHBpbmdQcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBibG9ja0RldmljZXMgPSB0aGlzLmluc3RhbmNlQmxvY2tEZXZpY2VzLm1hcChcbiAgICAgIChibG9ja0RldmljZSk6IENmbkNvbnRhaW5lclJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5ID0+IHtcbiAgICAgICAgY29uc3QgZWJzRGV2aWNlID0gYmxvY2tEZXZpY2Uudm9sdW1lLmVic0RldmljZTtcbiAgICAgICAgY29uc3QgZWJzOiBDZm5Db250YWluZXJSZWNpcGUuRWJzSW5zdGFuY2VCbG9ja0RldmljZVNwZWNpZmljYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5kZWxldGVPblRlcm1pbmF0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZWxldGVPblRlcm1pbmF0aW9uOiBlYnNEZXZpY2UuZGVsZXRlT25UZXJtaW5hdGlvbiB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5lbmNyeXB0ZWQgIT09IHVuZGVmaW5lZCAmJiB7IGVuY3J5cHRlZDogZWJzRGV2aWNlLmVuY3J5cHRlZCB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5pb3BzICE9PSB1bmRlZmluZWQgJiYgeyBpb3BzOiBlYnNEZXZpY2UuaW9wcyB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5rbXNLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGttc0tleUlkOiBlYnNEZXZpY2Uua21zS2V5LmtleUFybiB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5zbmFwc2hvdElkICE9PSB1bmRlZmluZWQgJiYgeyBzbmFwc2hvdElkOiBlYnNEZXZpY2Uuc25hcHNob3RJZCB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy50aHJvdWdocHV0ICE9PSB1bmRlZmluZWQgJiYgeyB0aHJvdWdocHV0OiBlYnNEZXZpY2UudGhyb3VnaHB1dCB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy52b2x1bWVTaXplICE9PSB1bmRlZmluZWQgJiYgeyB2b2x1bWVTaXplOiBlYnNEZXZpY2Uudm9sdW1lU2l6ZSB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy52b2x1bWVUeXBlICE9PSB1bmRlZmluZWQgJiYgeyB2b2x1bWVUeXBlOiBlYnNEZXZpY2Uudm9sdW1lVHlwZSB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtYXBwaW5nRW5hYmxlZCA9IGJsb2NrRGV2aWNlLm1hcHBpbmdFbmFibGVkID8/IHRydWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogYmxvY2tEZXZpY2UuZGV2aWNlTmFtZSxcbiAgICAgICAgICB2aXJ0dWFsTmFtZTogYmxvY2tEZXZpY2Uudm9sdW1lLnZpcnR1YWxOYW1lLFxuICAgICAgICAgIC4uLighbWFwcGluZ0VuYWJsZWQgJiYgeyBub0RldmljZTogJycgfSksXG4gICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGVicykubGVuZ3RoICYmIHsgZWJzIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGJsb2NrRGV2aWNlcy5sZW5ndGggPyBibG9ja0RldmljZXMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBpbnN0YW5jZSBjb25maWd1cmF0aW9uIHByb3BlcnR5IGludG8gdGhlIGBJbnN0YW5jZUNvbmZpZ3VyYXRpb25gIHR5cGUgaW4gdGhlICBDbG91ZEZvcm1hdGlvbiBMMVxuICAgKiBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BzIHBhc3NlZCBhcyBpbnB1dCB0byB0aGUgY29uc3RydWN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSW5zdGFuY2VDb25maWd1cmF0aW9uKFxuICAgIHByb3BzOiBDb250YWluZXJSZWNpcGVQcm9wcyxcbiAgKTogQ2ZuQ29udGFpbmVyUmVjaXBlLkluc3RhbmNlQ29uZmlndXJhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBibG9ja0RldmljZXMgPSB0aGlzLnJlbmRlckJsb2NrRGV2aWNlcygpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VDb25maWd1cmF0aW9uOiBDZm5Db250YWluZXJSZWNpcGUuSW5zdGFuY2VDb25maWd1cmF0aW9uUHJvcGVydHkgPSB7XG4gICAgICAuLi4oYmxvY2tEZXZpY2VzPy5sZW5ndGggJiYgeyBibG9ja0RldmljZU1hcHBpbmdzOiBibG9ja0RldmljZXMgfSksXG4gICAgICAuLi4ocHJvcHMuaW5zdGFuY2VJbWFnZSAhPT0gdW5kZWZpbmVkICYmIHsgaW1hZ2U6IHByb3BzLmluc3RhbmNlSW1hZ2UuaW1hZ2UgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhpbnN0YW5jZUNvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IGluc3RhbmNlQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb250YWluZXJSZWNpcGVOYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0NvbnRhaW5lclJlY2lwZU5hbWVUb29Mb25nJyxcbiAgICAgICAgYHRoZSBjb250YWluZXJSZWNpcGVOYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdDb250YWluZXJSZWNpcGVOYW1lTm9TcGFjZXMnLCBgdGhlIGNvbnRhaW5lclJlY2lwZU5hbWUgY2Fubm90IGNvbnRhaW4gc3BhY2VzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICdDb250YWluZXJSZWNpcGVOYW1lTm9VbmRlcnNjb3JlcycsXG4gICAgICAgIGB0aGUgY29udGFpbmVyUmVjaXBlTmFtZSBjYW5ub3QgY29udGFpbiB1bmRlcnNjb3JlcywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lICE9PSB0aGlzLnBoeXNpY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignQ29udGFpbmVyUmVjaXBlTmFtZU11c3RCZUxvd2VyY2FzZScsIGB0aGUgY29udGFpbmVyUmVjaXBlTmFtZSBtdXN0IGJlIGxvd2VyY2FzZSwgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCwgdGhpcyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -89,7 +89,7 @@ var RepositoryService;
89
89
  * A container repository used to distribute container images in EC2 Image Builder
90
90
  */
91
91
  class Repository {
92
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Repository", version: "2.242.0-alpha.0" };
92
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Repository", version: "2.244.0-alpha.0" };
93
93
  /**
94
94
  * The ECR repository to use as the target container repository
95
95
  *
@@ -136,7 +136,7 @@ let DistributionConfiguration = (() => {
136
136
  DistributionConfiguration = _classThis = _classDescriptor.value;
137
137
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
138
138
  }
139
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DistributionConfiguration", version: "2.242.0-alpha.0" };
139
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DistributionConfiguration", version: "2.244.0-alpha.0" };
140
140
  /** Uniquely identifies this class. */
141
141
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.DistributionConfiguration';
142
142
  /**
@@ -231,7 +231,7 @@ let DistributionConfiguration = (() => {
231
231
  amiDistributions.forEach((amiDistribution) => {
232
232
  const region = amiDistribution.region ?? cdk.Stack.of(this).region;
233
233
  if (this.amiDistributionsByRegion[region]) {
234
- throw new cdk.ValidationError(`duplicate AMI distribution found for region "${region}"; only one AMI distribution per region is allowed`, this);
234
+ throw new cdk.ValidationError('DuplicateAmiDistribution', `duplicate AMI distribution found for region "${region}"; only one AMI distribution per region is allowed`, this);
235
235
  }
236
236
  this.amiDistributionsByRegion[region] = amiDistribution;
237
237
  });
@@ -254,7 +254,7 @@ let DistributionConfiguration = (() => {
254
254
  containerDistributions.forEach((containerDistribution) => {
255
255
  const region = containerDistribution.region ?? cdk.Stack.of(this).region;
256
256
  if (this.containerDistributionsByRegion[region]) {
257
- throw new cdk.ValidationError(`duplicate Container distribution found for region "${region}"; only one Container distribution per region is allowed`, this);
257
+ throw new cdk.ValidationError('DuplicateContainerDistribution', `duplicate Container distribution found for region "${region}"; only one Container distribution per region is allowed`, this);
258
258
  }
259
259
  this.containerDistributionsByRegion[region] = containerDistribution;
260
260
  });
@@ -264,16 +264,16 @@ let DistributionConfiguration = (() => {
264
264
  return; // Cannot validate unresolved tokens, given their actual value is rendered at deployment time
265
265
  }
266
266
  if (this.physicalName.length > 128) {
267
- throw new cdk.ValidationError('The distributionConfigurationName cannot be longer than 128 characters', this);
267
+ throw new cdk.ValidationError('DistributionConfigurationNameTooLong', 'The distributionConfigurationName cannot be longer than 128 characters', this);
268
268
  }
269
269
  if (this.physicalName.includes(' ')) {
270
- throw new cdk.ValidationError('The distributionConfigurationName cannot contain spaces', this);
270
+ throw new cdk.ValidationError('DistributionConfigurationNameNoSpaces', 'The distributionConfigurationName cannot contain spaces', this);
271
271
  }
272
272
  if (this.physicalName.includes('_')) {
273
- throw new cdk.ValidationError('The distributionConfigurationName cannot contain underscores', this);
273
+ throw new cdk.ValidationError('DistributionConfigurationNameNoUnderscores', 'The distributionConfigurationName cannot contain underscores', this);
274
274
  }
275
275
  if (this.physicalName !== this.physicalName.toLowerCase()) {
276
- throw new cdk.ValidationError('The distributionConfigurationName must be lowercase', this);
276
+ throw new cdk.ValidationError('DistributionConfigurationNameMustBeLowercase', 'The distributionConfigurationName must be lowercase', this);
277
277
  }
278
278
  }
279
279
  /**
@@ -290,7 +290,7 @@ let DistributionConfiguration = (() => {
290
290
  renderDistributions() {
291
291
  if (!Object.keys(this.amiDistributionsByRegion).length &&
292
292
  !Object.keys(this.containerDistributionsByRegion).length) {
293
- throw new cdk.ValidationError('You must specify at least one AMI or container distribution', this);
293
+ throw new cdk.ValidationError('DistributionRequired', 'You must specify at least one AMI or container distribution', this);
294
294
  }
295
295
  const distributionByRegion = {};
296
296
  for (const [region, distribution] of Object.entries(this.amiDistributionsByRegion)) {
@@ -314,7 +314,7 @@ let DistributionConfiguration = (() => {
314
314
  distributions.forEach((distribution) => {
315
315
  const { region: _, ...distributionWithoutRegion } = distribution;
316
316
  if (!Object.entries(distributionWithoutRegion).some(([__, value]) => value !== undefined)) {
317
- throw new cdk.ValidationError(`at least one distribution property must be set for region "${distribution.region}"`, this);
317
+ throw new cdk.ValidationError('DistributionPropertyRequired', `at least one distribution property must be set for region "${distribution.region}"`, this);
318
318
  }
319
319
  });
320
320
  return distributions;
@@ -370,7 +370,7 @@ let DistributionConfiguration = (() => {
370
370
  if (fastLaunchConfiguration.maxParallelLaunches !== undefined &&
371
371
  !cdk.Token.isUnresolved(fastLaunchConfiguration.maxParallelLaunches) &&
372
372
  fastLaunchConfiguration.maxParallelLaunches < MIN_PARALLEL_LAUNCHES) {
373
- throw new cdk.ValidationError(`you must specify a maximum parallel launch count of at least ${MIN_PARALLEL_LAUNCHES}`, this);
373
+ throw new cdk.ValidationError('MinParallelLaunches', `you must specify a maximum parallel launch count of at least ${MIN_PARALLEL_LAUNCHES}`, this);
374
374
  }
375
375
  const launchTemplate = fastLaunchConfiguration.launchTemplate;
376
376
  const useFastLaunchLaunchTemplateId = launchTemplate?.launchTemplateId !== undefined;
@@ -399,7 +399,7 @@ let DistributionConfiguration = (() => {
399
399
  buildLaunchTemplateConfigurations(amiDistribution) {
400
400
  const launchTemplateConfigurations = amiDistribution.launchTemplates?.map((launchTemplateConfiguration) => {
401
401
  if (!launchTemplateConfiguration.launchTemplate.launchTemplateId) {
402
- throw new cdk.ValidationError('You must reference launch templates by ID in launch template configurations', this);
402
+ throw new cdk.ValidationError('LaunchTemplateIdRequired', 'You must reference launch templates by ID in launch template configurations', this);
403
403
  }
404
404
  return {
405
405
  accountId: launchTemplateConfiguration.accountId,
@@ -427,4 +427,4 @@ let DistributionConfiguration = (() => {
427
427
  return DistributionConfiguration = _classThis;
428
428
  })();
429
429
  exports.DistributionConfiguration = DistributionConfiguration;
430
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFHbkMsMkNBQTJDO0FBQzNDLG1FQUE0RTtBQUc1RSw0RUFBdUU7QUFDdkUsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUcxRSxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztBQUVsSCxxREFBcUQ7QUFDckQsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUEwVWhDOztHQUVHO0FBQ0gsTUFBZSw2QkFBOEIsU0FBUSxHQUFHLENBQUMsUUFBUTtJQVcvRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLE9BQU87WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUM7WUFDakQsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7S0FDSjtJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLE9BQXVCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztLQUN6RTtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSzVCO0FBRUQ7O0dBRUc7QUFDSCxNQUFzQixVQUFVOztJQUM5Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUEyQjtRQUMv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QUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDaEg7UUFFTywrQkFBK0IsQ0FDckMsZUFBZ0M7WUFFaEMsTUFBTSwwQkFBMEIsR0FBRyxlQUFlLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FDbkUsQ0FBQyx5QkFBeUIsRUFBa0UsRUFBRSxDQUFDLENBQUM7Z0JBQzlGLFlBQVksRUFBRSx5QkFBeUIsQ0FBQyxVQUFVO2dCQUNsRCxRQUFRLEVBQUUseUJBQXlCLENBQUMsUUFBUTtnQkFDNUMsYUFBYSxFQUFFLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxhQUFhO2FBQ2pFLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDcEY7O1lBcldVLHVEQUF5Qjs7Ozs7QUFBekIsOERBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHR5cGUgKiBhcyBlY3IgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgdHlwZSAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5jb25zdCBESVNUUklCVVRJT05fQ09ORklHVVJBVElPTl9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24nKTtcblxuLy8gRmFzdCBMYXVuY2ggcmVxdWlyZXMgYXQgbGVhc3QgNiBwYXJhbGxlbCBsYXVuY2hlcy5cbmNvbnN0IE1JTl9QQVJBTExFTF9MQVVOQ0hFUyA9IDY7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgRGlzdHJpYnV0aW9uIENvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBjZGsuSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG59XG5cbi8qKlxuICogVGhlIGxhdW5jaCBwZXJtaXNzaW9ucyBmb3IgdGhlIEFNSSwgZGVmaW5pbmcgd2hpY2ggcHJpbmNpcGFscyBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIEFNSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtaUxhdW5jaFBlcm1pc3Npb24ge1xuICAvKipcbiAgICogVGhlIEFSTnMgZm9yIHRoZSBBV1MgT3JnYW5pemF0aW9ucyBvcmdhbml6YXRpb25hbCB1bml0cyB0byBzaGFyZSB0aGUgQU1JIHdpdGhcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0QXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOcyBmb3IgdGhlIEFXUyBPcmdhbml6YXRpb24gdGhhdCB5b3Ugd2FudCB0byBzaGFyZSB0aGUgQU1JIHdpdGhcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIG1ha2UgdGhlIEFNSSBwdWJsaWMuIEJsb2NrIHB1YmxpYyBhY2Nlc3MgZm9yIEFNSXMgbXVzdCBiZSBkaXNhYmxlZCB0byBtYWtlIHRoZSBBTUkgcHVibGljLlxuICAgKlxuICAgKiBXQVJOSU5HOiBNYWtpbmcgYW4gQU1JIHB1YmxpYyBleHBvc2VzIGl0IHRvIGFueSBBV1MgYWNjb3VudCBnbG9iYWxseS5cbiAgICogIEVuc3VyZSB0aGUgQU1JIGRvZXMgbm90IGNvbnRhaW46XG4gICAqICAtIFNlbnNpdGl2ZSBkYXRhIG9yIGNyZWRlbnRpYWxzXG4gICAqICAtIFByb3ByaWV0YXJ5IHNvZnR3YXJlIG9yIGNvbmZpZ3VyYXRpb25zXG4gICAqICAtIEludGVybmFsIG5ldHdvcmsgaW5mb3JtYXRpb24gb3Igc2VjdXJpdHkgc2V0dGluZ3NcbiAgICpcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYmxvY2tpbmcgcHVibGljIGFjY2VzcyBmb3IgQU1Jcywgc2VlOiBbVW5kZXJzdGFuZCBibG9jayBwdWJsaWMgYWNjZXNzIGZvciBBTUlzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYmxvY2stcHVibGljLWFjY2Vzcy10by1hbWlzLmh0bWwpXG4gICAqXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc1B1YmxpY1VzZXJHcm91cD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRHMgdG8gc2hhcmUgdGhlIEFNSSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgU1NNIHBhcmFtZXRlcnMgdG8gY3JlYXRlIG9yIHVwZGF0ZSBmb3IgdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTU01QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSUQgdGhhdCB3aWxsIG93biB0aGUgU1NNIHBhcmFtZXRlciBpbiB0aGUgZ2l2ZW4gcmVnaW9uLiBUaGlzIG11c3QgYmUgb25lIG9mIHRoZSB0YXJnZXQgYWNjb3VudHNcbiAgICogdGhhdCB3YXMgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YgQU1JIGRpc3RyaWJ1dGlvbiB0YXJnZXQgYWNjb3VudHNcbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgYWNjb3VudCBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBhbWlBY2NvdW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSB0eXBlIG9mIHRoZSBTU00gcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IHNzbS5QYXJhbWV0ZXJEYXRhVHlwZS5BV1NfRUMyX0lNQUdFXG4gICAqL1xuICByZWFkb25seSBkYXRhVHlwZT86IHNzbS5QYXJhbWV0ZXJEYXRhVHlwZTtcblxuICAvKipcbiAgICogVGhlIFNTTSBwYXJhbWV0ZXIgdG8gY3JlYXRlIG9yIHVwZGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyOiBzc20uSVN0cmluZ1BhcmFtZXRlcjtcbn1cblxuLyoqXG4gKiBUaGUgbGF1bmNoIHRlbXBsYXRlIHRvIGFwcGx5IHRoZSBkaXN0cmlidXRlZCBBTUkgdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGxhdW5jaCB0ZW1wbGF0ZSB0byBhcHBseSB0aGUgZGlzdHJpYnV0ZWQgQU1JIHRvLiBBIG5ldyBsYXVuY2ggdGVtcGxhdGUgdmVyc2lvbiB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoZVxuICAgKiBwcm92aWRlZCBsYXVuY2ggdGVtcGxhdGUgd2l0aCB0aGUgZGlzdHJpYnV0ZWQgQU1JIGFwcGxpZWQuXG4gICAqXG4gICAqICpOb3RlOiogVGhlIGxhdW5jaCB0ZW1wbGF0ZSBzaG91bGQgZXhwb3NlIGEgYGxhdW5jaFRlbXBsYXRlSWRgLiBUZW1wbGF0ZXNcbiAgICogaW1wb3J0ZWQgYnkgbmFtZSBvbmx5IGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGU6IGVjMi5JTGF1bmNoVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCB0aGF0IG93bnMgdGhlIGxhdW5jaCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCBhY2NvdW50IGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBzZXQgdGhlIG5ldyBsYXVuY2ggdGVtcGxhdGUgdmVyc2lvbiB0aGF0IGlzIGNyZWF0ZWQgYXMgdGhlIGRlZmF1bHQgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24uIEFmdGVyXG4gICAqIGNyZWF0aW9uIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUgdmVyc2lvbiBjb250YWluaW5nIHRoZSBkaXN0cmlidXRlZCBBTUksIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBzZXQgYXMgdGhlXG4gICAqIGRlZmF1bHQgdmVyc2lvbiBmb3IgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNldERlZmF1bHRWZXJzaW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgRUMyIEZhc3QgTGF1bmNoIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciB0aGUgV2luZG93cyBBTUlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYXN0TGF1bmNoQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBmYXN0IGxhdW5jaCBmb3IgdGhlIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsYXVuY2ggdGVtcGxhdGUgdGhhdCB0aGUgZmFzdC1sYXVuY2ggZW5hYmxlZCBXaW5kb3dzIEFNSSB1c2VzIHdoZW4gaXQgbGF1bmNoZXMgV2luZG93cyBpbnN0YW5jZXMgdG8gY3JlYXRlXG4gICAqIHByZS1wcm92aXNpb25lZCBzbmFwc2hvdHNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGU/OiBlYzIuSUxhdW5jaFRlbXBsYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgaW5zdGFuY2VzIHRoYXQgYXJlIGxhdW5jaGVkIGZvciBjcmVhdGluZyByZXNvdXJjZXNcbiAgICpcbiAgICogQGRlZmF1bHQgQSBtYXhpbXVtIG9mIDYgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZCBpbiBwYXJhbGxlbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRW5hYmxlRmFzdExhdW5jaC5odG1sXG4gICAqL1xuICByZWFkb25seSBtYXhQYXJhbGxlbExhdW5jaGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHByZS1wcm92aXNpb25lZCBzbmFwc2hvdHMgdG8ga2VlcCBvbiBoYW5kIGZvciBhIGZhc3QtbGF1bmNoIGVuYWJsZWQgV2luZG93cyBBTUlcbiAgICpcbiAgICogQGRlZmF1bHQgMTAgc25hcHNob3RzIGFyZSBrZXB0IHByZS1wcm92aXNpb25lZFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRW5hYmxlRmFzdExhdW5jaC5odG1sXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRTbmFwc2hvdENvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSByZWdpb25hbCBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gdXNlIGZvciBhbiBBTUkgYnVpbGRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbWlEaXN0cmlidXRpb24ge1xuICAvKipcbiAgICogVGhlIHRhcmdldCByZWdpb24gdG8gZGlzdHJpYnV0ZSBBTUlzIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IHJlZ2lvbiBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaVRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlEZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdG8gZW5jcnlwdCB0aGUgZGlzdHJpYnV0ZWQgQU1JIHdpdGhcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pS21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXVuY2ggcGVybWlzc2lvbnMgZm9yIHRoZSBBTUksIGRlZmluaW5nIHdoaWNoIHByaW5jaXBhbHMgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBBTUlcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pTGF1bmNoUGVybWlzc2lvbj86IEFtaUxhdW5jaFBlcm1pc3Npb247XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIHRvIHVzZSBmb3IgdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgQSBuYW1lIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBpbWFnZSByZWNpcGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFjY291bnQgSURzIHRvIGNvcHkgdGhlIG91dHB1dCBBTUkgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pVGFyZ2V0QWNjb3VudElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NNIHBhcmFtZXRlcnMgdG8gY3JlYXRlIG9yIHVwZGF0ZSBmb3IgdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc3NtUGFyYW1ldGVycz86IFNTTVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zW107XG5cbiAgLyoqXG4gICAqIFRoZSBsYXVuY2ggdGVtcGxhdGVzIHRvIGFwcGx5IHRoZSBkaXN0cmlidXRlZCBBTUkgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVzPzogTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBmYXN0IGxhdW5jaCBjb25maWd1cmF0aW9ucyB0byB1c2UgZm9yIGVuYWJsaW5nIEVDMiBGYXN0IExhdW5jaCBvbiB0aGUgZGlzdHJpYnV0ZWQgV2luZG93cyBBTUlcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRW5hYmxlRmFzdExhdW5jaC5odG1sXG4gICAqL1xuICByZWFkb25seSBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnM/OiBGYXN0TGF1bmNoQ29uZmlndXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgTGljZW5zZSBNYW5hZ2VyIGxpY2Vuc2UgY29uZmlndXJhdGlvbiBBUk5zIHRvIGFwcGx5IHRvIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2VDb25maWd1cmF0aW9uQXJucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSByZWdpb25hbCBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gdXNlIGZvciBhIGNvbnRhaW5lciBidWlsZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckRpc3RyaWJ1dGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IHJlZ2lvbiB0byBkaXN0cmlidXRlIGNvbnRhaW5lcnMgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgcmVnaW9uIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnkgdG8gZGlzdHJpYnV0ZSB0aGUgb3V0cHV0IGNvbnRhaW5lciB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgdGFyZ2V0IHJlcG9zaXRvcnkgaW4gdGhlIGNvbnRhaW5lciByZWNpcGUgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVwb3NpdG9yeTogUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250YWluZXIgaW1hZ2VcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhZGRpdGlvbmFsIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGVkIGNvbnRhaW5lciBpbWFnZXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyVGFncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgRGlzdHJpYnV0aW9uIENvbmZpZ3VyYXRpb24gcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdGFyZ2V0IHJlZ2lvbnMgYW5kIGFzc29jaWF0ZWQgQU1JIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB3aGVyZSB0aGUgYnVpbHQgQU1JIHdpbGwgYmUgZGlzdHJpYnV0ZWQuIEFNSVxuICAgKiBkaXN0cmlidXRpb25zIG1heSBhbHNvIGJlIGFkZGVkIHdpdGggdGhlIGBhZGRBbWlEaXN0cmlidXRpb25zYCBtZXRob2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmUgaWYgY29udGFpbmVyIGRpc3RyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkLiBPdGhlcndpc2UsIGF0IGxlYXN0IG9uZSBBTUkgb3IgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBtdXN0XG4gICAqICAgICAgICAgIGJlIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBhbWlEaXN0cmlidXRpb25zPzogQW1pRGlzdHJpYnV0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHRhcmdldCByZWdpb25zIGFuZCBhc3NvY2lhdGVkIGNvbnRhaW5lciBkaXN0cmlidXRpb24gc2V0dGluZ3Mgd2hlcmUgdGhlIGJ1aWx0IGNvbnRhaW5lciB3aWxsIGJlXG4gICAqIGRpc3RyaWJ1dGVkLiBDb250YWluZXIgZGlzdHJpYnV0aW9ucyBtYXkgYWxzbyBiZSBhZGRlZCB3aXRoIHRoZSBgYWRkQ29udGFpbmVyRGlzdHJpYnV0aW9uc2AgbWV0aG9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lIGlmIEFNSSBkaXN0cmlidXRpb25zIGFyZSBwcm92aWRlZC4gT3RoZXJ3aXNlLCBhdCBsZWFzdCBvbmUgQU1JIG9yIGNvbnRhaW5lciBkaXN0cmlidXRpb24gbXVzdCBiZVxuICAgKiAgICAgICAgICBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRGlzdHJpYnV0aW9ucz86IENvbnRhaW5lckRpc3RyaWJ1dGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IEEgbmFtZSBpcyBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIERpc3RyaWJ1dGlvbiBDb25maWd1cmF0aW9uXG4gKi9cbmFic3RyYWN0IGNsYXNzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25CYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAnaW1hZ2VidWlsZGVyOkdldERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24nKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzZXJ2aWNlIGluIHdoaWNoIGEgY29udGFpbmVyIHNob3VsZCBiZSByZWdpc3RlcmVkXG4gKi9cbmV4cG9ydCBlbnVtIFJlcG9zaXRvcnlTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29udGFpbmVyIHNob3VsZCBiZSByZWdpc3RlcmVkIGluIEVDUlxuICAgKi9cbiAgRUNSID0gJ0VDUicsXG59XG5cbi8qKlxuICogQSBjb250YWluZXIgcmVwb3NpdG9yeSB1c2VkIHRvIGRpc3RyaWJ1dGUgY29udGFpbmVyIGltYWdlcyBpbiBFQzIgSW1hZ2UgQnVpbGRlclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVwb3NpdG9yeSB7XG4gIC8qKlxuICAgKiBUaGUgRUNSIHJlcG9zaXRvcnkgdG8gdXNlIGFzIHRoZSB0YXJnZXQgY29udGFpbmVyIHJlcG9zaXRvcnlcbiAgICpcbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgVGhlIEVDUiByZXBvc2l0b3J5IHRvIHVzZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRWNyKHJlcG9zaXRvcnk6IGVjci5JUmVwb3NpdG9yeSk6IFJlcG9zaXRvcnkge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlcG9zaXRvcnkge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcgPSByZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlID0gUmVwb3NpdG9yeVNlcnZpY2UuRUNSO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZXBvc2l0b3J5IHdoZXJlIHRoZSBvdXRwdXQgY29udGFpbmVyIGltYWdlIGlzIHN0b3JlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgaW4gd2hpY2ggdGhlIGNvbnRhaW5lciByZXBvc2l0b3J5IGlzIGhvc3RlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgc2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBFQzIgSW1hZ2UgQnVpbGRlciBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtZGlzdHJpYnV0aW9uLXNldHRpbmdzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWltYWdlYnVpbGRlci1hbHBoYS5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGdpdmVuIGl0cyBBUk4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21EaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmcsXG4gICk6IElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oXG4gICAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuLFxuICAgICAgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICkucmVzb3VyY2VOYW1lITtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuID0gZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZ1xuICAgKiBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTogc3RyaW5nLFxuICApOiBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4oXG4gICAgICBzY29wZSxcbiAgICAgIGlkLFxuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgICAgcmVzb3VyY2U6ICdkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbicsXG4gICAgICAgIHJlc291cmNlTmFtZTogZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0Rpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24oeDogYW55KTogeCBpcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgRElTVFJJQlVUSU9OX0NPTkZJR1VSQVRJT05fU1lNQk9MIGluIHg7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbjogeyBbcmVnaW9uOiBzdHJpbmddOiBBbWlEaXN0cmlidXRpb24gfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbjoge1xuICAgIFtyZWdpb246IHN0cmluZ106IENvbnRhaW5lckRpc3RyaWJ1dGlvbjtcbiAgfSA9IHt9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvblByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIERJU1RSSUJVVElPTl9DT05GSUdVUkFUSU9OX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVEaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSgpO1xuXG4gICAgdGhpcy5hZGRBbWlEaXN0cmlidXRpb25zKC4uLihwcm9wcy5hbWlEaXN0cmlidXRpb25zID8/IFtdKSk7XG4gICAgdGhpcy5hZGRDb250YWluZXJEaXN0cmlidXRpb25zKC4uLihwcm9wcy5jb250YWluZXJEaXN0cmlidXRpb25zID8/IFtdKSk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24odGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBkaXN0cmlidXRpb25zOiBjZGsuTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckRpc3RyaWJ1dGlvbnMoKSB9KSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgfSk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJBcm4sIHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbicsXG4gICAgICByZXNvdXJjZU5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgQU1JIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGFtaURpc3RyaWJ1dGlvbnMgVGhlIGxpc3Qgb2YgQU1JIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byBhcHBseVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEFtaURpc3RyaWJ1dGlvbnMoLi4uYW1pRGlzdHJpYnV0aW9uczogQW1pRGlzdHJpYnV0aW9uW10pOiB2b2lkIHtcbiAgICBhbWlEaXN0cmlidXRpb25zLmZvckVhY2goKGFtaURpc3RyaWJ1dGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVnaW9uID0gYW1pRGlzdHJpYnV0aW9uLnJlZ2lvbiA/PyBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgICAgaWYgKHRoaXMuYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYGR1cGxpY2F0ZSBBTUkgZGlzdHJpYnV0aW9uIGZvdW5kIGZvciByZWdpb24gXCIke3JlZ2lvbn1cIjsgb25seSBvbmUgQU1JIGRpc3RyaWJ1dGlvbiBwZXIgcmVnaW9uIGlzIGFsbG93ZWRgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0gPSBhbWlEaXN0cmlidXRpb247XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjb250YWluZXIgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRGlzdHJpYnV0aW9ucyBUaGUgbGlzdCBvZiBjb250YWluZXIgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIGFwcGx5XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkQ29udGFpbmVyRGlzdHJpYnV0aW9ucyguLi5jb250YWluZXJEaXN0cmlidXRpb25zOiBDb250YWluZXJEaXN0cmlidXRpb25bXSk6IHZvaWQge1xuICAgIGNvbnRhaW5lckRpc3RyaWJ1dGlvbnMuZm9yRWFjaCgoY29udGFpbmVyRGlzdHJpYnV0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWdpb24gPSBjb250YWluZXJEaXN0cmlidXRpb24ucmVnaW9uID8/IGNkay5TdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgICBpZiAodGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgZHVwbGljYXRlIENvbnRhaW5lciBkaXN0cmlidXRpb24gZm91bmQgZm9yIHJlZ2lvbiBcIiR7cmVnaW9ufVwiOyBvbmx5IG9uZSBDb250YWluZXIgZGlzdHJpYnV0aW9uIHBlciByZWdpb24gaXMgYWxsb3dlZGAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSA9IGNvbnRhaW5lckRpc3RyaWJ1dGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVEaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSgpIHtcbiAgICBpZiAoY2RrLlRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLnBoeXNpY2FsTmFtZSkpIHtcbiAgICAgIHJldHVybjsgLy8gQ2Fubm90IHZhbGlkYXRlIHVucmVzb2x2ZWQgdG9rZW5zLCBnaXZlbiB0aGVpciBhY3R1YWwgdmFsdWUgaXMgcmVuZGVyZWQgYXQgZGVwbG95bWVudCB0aW1lXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgY29udGFpbiB1bmRlcnNjb3JlcycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBtdXN0IGJlIGxvd2VyY2FzZScsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBBTUkgYW5kIGNvbnRhaW5lciBkaXN0cmlidXRpb25zIHByb3ZpZGVkIGFzIGlucHV0IHRvIHRoZSBjb25zdHJ1Y3QsIGludG8gdGhlIGBEaXN0cmlidXRpb25bXWAgc3RydWN0dXJlXG4gICAqIHRoYXQgQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBleHBlY3RzIHRvIHJlY2VpdmUuIERpc3RyaWJ1dGlvbnMgcHJvdmlkZWQgdG8gQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBtdXN0XG4gICAqIG1hcCB0byBhIHVuaXF1ZSByZWdpb24gcGVyIGVudHJ5IGluIHRoZSBsaXN0IC0gdGhpcyByZW5kZXIgZnVuY3Rpb24gYWxzbyBoYW5kbGVzIGNvbWJpbmluZyBBTUkgYW5kIGNvbnRhaW5lclxuICAgKiBkaXN0cmlidXRpb25zIGluIHRoZSBzYW1lIHJlZ2lvbiBpbnRvIGEgc2luZ2xlIGVudHJ5LlxuICAgKlxuICAgKiBUaGlzIGlzIHJlbmRlcmVkIGF0IHN5bnRoZXNpcyB0aW1lLCBhcyB1c2VycyBjYW4gYWRkIGFkZGl0aW9uYWwgQU1JIGFuZCBjb250YWluZXIgZGlzdHJpYnV0aW9ucyB3aXRoXG4gICAqIGBhZGRBbWlEaXN0cmlidXRpb25zYCBhbmQgYGFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnNgLCBhZnRlciB0aGUgY29uc3RydWN0IGhhcyBiZWVuIGluc3RhbnRpYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyRGlzdHJpYnV0aW9ucygpOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkRpc3RyaWJ1dGlvblByb3BlcnR5W10ge1xuICAgIGlmIChcbiAgICAgICFPYmplY3Qua2V5cyh0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbikubGVuZ3RoICYmXG4gICAgICAhT2JqZWN0LmtleXModGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb24pLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ1lvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uJywgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uQnlSZWdpb246IHsgW3JlZ2lvbjogc3RyaW5nXTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5EaXN0cmlidXRpb25Qcm9wZXJ0eSB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtyZWdpb24sIGRpc3RyaWJ1dGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb24pKSB7XG4gICAgICBkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID0ge1xuICAgICAgICByZWdpb24sXG4gICAgICAgIGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb246IHRoaXMuYnVpbGRBbWlEaXN0cmlidXRpb24oZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkRmFzdExhdW5jaENvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnM6IHRoaXMuYnVpbGRMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMoZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgbGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zOiB0aGlzLmJ1aWxkTGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zKGRpc3RyaWJ1dGlvbiksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3JlZ2lvbiwgY29udGFpbmVyRGlzdHJpYnV0aW9uXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbikpIHtcbiAgICAgIGRpc3RyaWJ1dGlvbkJ5UmVnaW9uW3JlZ2lvbl0gPSB7XG4gICAgICAgIC4uLihkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID8/IHt9KSxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBjb250YWluZXJEaXN0cmlidXRpb25Db25maWd1cmF0aW9uOiB0aGlzLmJ1aWxkQ29udGFpbmVyRGlzdHJpYnV0aW9uKGNvbnRhaW5lckRpc3RyaWJ1dGlvbiksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbnMgPSBPYmplY3QudmFsdWVzKGRpc3RyaWJ1dGlvbkJ5UmVnaW9uKTtcblxuICAgIGRpc3RyaWJ1dGlvbnMuZm9yRWFjaCgoZGlzdHJpYnV0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7IHJlZ2lvbjogXywgLi4uZGlzdHJpYnV0aW9uV2l0aG91dFJlZ2lvbiB9ID0gZGlzdHJpYnV0aW9uO1xuICAgICAgaWYgKCFPYmplY3QuZW50cmllcyhkaXN0cmlidXRpb25XaXRob3V0UmVnaW9uKS5zb21lKChbX18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYGF0IGxlYXN0IG9uZSBkaXN0cmlidXRpb24gcHJvcGVydHkgbXVzdCBiZSBzZXQgZm9yIHJlZ2lvbiBcIiR7ZGlzdHJpYnV0aW9uLnJlZ2lvbn1cImAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXN0cmlidXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFtaURpc3RyaWJ1dGlvbihhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbik6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGF1bmNoUGVybWlzc2lvbnMgPSB0aGlzLmJ1aWxkQW1pTGF1bmNoUGVybWlzc2lvbnMoYW1pRGlzdHJpYnV0aW9uKTtcbiAgICBjb25zdCBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgLi4uKE9iamVjdC5rZXlzKGFtaURpc3RyaWJ1dGlvbi5hbWlUYWdzID8/IHt9KS5sZW5ndGggJiYgeyBBbWlUYWdzOiBhbWlEaXN0cmlidXRpb24uYW1pVGFncyB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pRGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB7IERlc2NyaXB0aW9uOiBhbWlEaXN0cmlidXRpb24uYW1pRGVzY3JpcHRpb24gfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUttc0tleSAhPT0gdW5kZWZpbmVkICYmIHsgS21zS2V5SWQ6IGFtaURpc3RyaWJ1dGlvbi5hbWlLbXNLZXkua2V5QXJuIH0pLFxuICAgICAgLi4uKGxhdW5jaFBlcm1pc3Npb25zICYmIHsgTGF1bmNoUGVybWlzc2lvbkNvbmZpZ3VyYXRpb246IGxhdW5jaFBlcm1pc3Npb25zIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlOYW1lICE9PSB1bmRlZmluZWQgJiYgeyBOYW1lOiBhbWlEaXN0cmlidXRpb24uYW1pTmFtZSB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pVGFyZ2V0QWNjb3VudElkcyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgVGFyZ2V0QWNjb3VudElkczogYW1pRGlzdHJpYnV0aW9uLmFtaVRhcmdldEFjY291bnRJZHMsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29udGFpbmVyRGlzdHJpYnV0aW9uKGNvbnRhaW5lckRpc3RyaWJ1dGlvbjogQ29udGFpbmVyRGlzdHJpYnV0aW9uKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ29udGFpbmVyVGFnczogY29udGFpbmVyRGlzdHJpYnV0aW9uLmNvbnRhaW5lclRhZ3MsXG4gICAgICBEZXNjcmlwdGlvbjogY29udGFpbmVyRGlzdHJpYnV0aW9uLmNvbnRhaW5lckRlc2NyaXB0aW9uLFxuICAgICAgVGFyZ2V0UmVwb3NpdG9yeToge1xuICAgICAgICBSZXBvc2l0b3J5TmFtZTogY29udGFpbmVyRGlzdHJpYnV0aW9uLmNvbnRhaW5lclJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIFNlcnZpY2U6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJSZXBvc2l0b3J5LnNlcnZpY2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQW1pTGF1bmNoUGVybWlzc2lvbnMoYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24pOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmIChhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uaXNQdWJsaWNVc2VyR3JvdXApIHtcbiAgICAgIGNkay5Bbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICAnQU1JIGlzIGNvbmZpZ3VyZWQgZm9yIHB1YmxpYyBhY2Nlc3MsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYW55IEFXUyBhY2NvdW50IGdsb2JhbGx5LiAnICtcbiAgICAgICAgICAnRW5zdXJlIG5vIHNlbnNpdGl2ZSBkYXRhLCBjcmVkZW50aWFscywgb3IgcHJvcHJpZXRhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluY2x1ZGVkLiAnICtcbiAgICAgICAgICBcIlJldmlldyB5b3VyIG9yZ2FuaXphdGlvbidzIHNlY3VyaXR5IHBvbGljaWVzIGJlZm9yZSBkZXBsb3lpbmcgcHVibGljIEFNSXMuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxhdW5jaFBlcm1pc3Npb25zID0ge1xuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5vcmdhbml6YXRpb25hbFVuaXRBcm5zICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBPcmdhbml6YXRpb25hbFVuaXRBcm5zOiBhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uYWxVbml0QXJucyxcbiAgICAgIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5vcmdhbml6YXRpb25Bcm5zICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBPcmdhbml6YXRpb25Bcm5zOiBhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uQXJucyxcbiAgICAgIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5pc1B1YmxpY1VzZXJHcm91cCAmJiB7XG4gICAgICAgIFVzZXJHcm91cHM6IFsnYWxsJ10sXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uYWNjb3VudElkcyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgVXNlcklkczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmFjY291bnRJZHMsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhdW5jaFBlcm1pc3Npb25zKS5sZW5ndGggPyBsYXVuY2hQZXJtaXNzaW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGYXN0TGF1bmNoQ29uZmlndXJhdGlvbnMoXG4gICAgYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24sXG4gICk6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRmFzdExhdW5jaENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnMgPSBhbWlEaXN0cmlidXRpb24uZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zPy5tYXAoXG4gICAgICAoZmFzdExhdW5jaENvbmZpZ3VyYXRpb24pOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hDb25maWd1cmF0aW9uUHJvcGVydHkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIWNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcykgJiZcbiAgICAgICAgICBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5tYXhQYXJhbGxlbExhdW5jaGVzIDwgTUlOX1BBUkFMTEVMX0xBVU5DSEVTXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgYHlvdSBtdXN0IHNwZWNpZnkgYSBtYXhpbXVtIHBhcmFsbGVsIGxhdW5jaCBjb3VudCBvZiBhdCBsZWFzdCAke01JTl9QQVJBTExFTF9MQVVOQ0hFU31gLFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGF1bmNoVGVtcGxhdGUgPSBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5sYXVuY2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgdXNlRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlSWQgPSBsYXVuY2hUZW1wbGF0ZT8ubGF1bmNoVGVtcGxhdGVJZCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBmYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGU6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvblByb3BlcnR5ID0ge1xuICAgICAgICAgIC4uLih1c2VGYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGVJZCAmJiB7XG4gICAgICAgICAgICBsYXVuY2hUZW1wbGF0ZUlkOiBsYXVuY2hUZW1wbGF0ZT8ubGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4oIXVzZUZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZUlkICYmIHtcbiAgICAgICAgICAgIGxhdW5jaFRlbXBsYXRlTmFtZTogbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4obGF1bmNoVGVtcGxhdGU/LnZlcnNpb25OdW1iZXIgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICBsYXVuY2hUZW1wbGF0ZVZlcnNpb246IGxhdW5jaFRlbXBsYXRlPy52ZXJzaW9uTnVtYmVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFzdExhdW5jaENvbmZpZ3VyYXRpb24uZW5hYmxlZCxcbiAgICAgICAgICBtYXhQYXJhbGxlbExhdW5jaGVzOiBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5tYXhQYXJhbGxlbExhdW5jaGVzLFxuICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhmYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGUpLmxlbmd0aCAmJiB7IGxhdW5jaFRlbXBsYXRlOiBmYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGUgfSksXG4gICAgICAgICAgLi4uKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLnRhcmdldFNuYXBzaG90Q291bnQgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICBzbmFwc2hvdENvbmZpZ3VyYXRpb246IHsgdGFyZ2V0UmVzb3VyY2VDb3VudDogZmFzdExhdW5jaENvbmZpZ3VyYXRpb24udGFyZ2V0U25hcHNob3RDb3VudCB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz8ubGVuZ3RoID8gZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMoXG4gICAgYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24sXG4gICk6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9ucyA9IGFtaURpc3RyaWJ1dGlvbi5sYXVuY2hUZW1wbGF0ZXM/Lm1hcChcbiAgICAgIChsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvblByb3BlcnR5ID0+IHtcbiAgICAgICAgaWYgKCFsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGUubGF1bmNoVGVtcGxhdGVJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgJ1lvdSBtdXN0IHJlZmVyZW5jZSBsYXVuY2ggdGVtcGxhdGVzIGJ5IElEIGluIGxhdW5jaCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9ucycsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjY291bnRJZDogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmFjY291bnRJZCxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZUlkOiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGUubGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgICAgICBzZXREZWZhdWx0VmVyc2lvbjogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLnNldERlZmF1bHRWZXJzaW9uLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zKGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBhbWlEaXN0cmlidXRpb24ubGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zPy5sZW5ndGggPyBhbWlEaXN0cmlidXRpb24ubGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyA9IGFtaURpc3RyaWJ1dGlvbi5zc21QYXJhbWV0ZXJzPy5tYXAoXG4gICAgICAoc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbik6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvblByb3BlcnR5ID0+ICh7XG4gICAgICAgIGFtaUFjY291bnRJZDogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5hbWlBY2NvdW50LFxuICAgICAgICBkYXRhVHlwZTogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5kYXRhVHlwZSxcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5wYXJhbWV0ZXIucGFyYW1ldGVyTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFHbkMsMkNBQTJDO0FBQzNDLG1FQUE0RTtBQUc1RSw0RUFBdUU7QUFDdkUsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUcxRSxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztBQUVsSCxxREFBcUQ7QUFDckQsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUEwVWhDOztHQUVHO0FBQ0gsTUFBZSw2QkFBOEIsU0FBUSxHQUFHLENBQUMsUUFBUTtJQVcvRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLE9BQU87WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUM7WUFDakQsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7S0FDSjtJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLE9BQXVCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztLQUN6RTtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSzVCO0FBRUQ7O0dBRUc7QUFDSCxNQUFzQixVQUFVOztJQUM5Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUEyQjtRQUMvQyxNQUFNLE1BQU8sU0FBUSxVQUFVO1lBQ2IsY0FBYyxHQUFXLFVBQVUsQ0FBQyxjQUFjLENBQUM7WUFDbkQsT0FBTyxHQUFzQixpQkFBaUIsQ0FBQyxHQUFHLENBQUM7U0FDcEU7UUFFRCxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7S0FDckI7O0FBYkgsZ0NBd0JDO0FBRUQ7Ozs7R0FJRztJQUVVLHlCQUF5Qjs0QkFEckMsb0NBQWtCOzs7O3NCQUM0Qiw2QkFBNkI7Ozs7Ozt5Q0FBckMsU0FBUSxXQUE2Qjs7Ozs2REF5RnpFLGlDQUFjOzREQUtkLGlDQUFjOytDQWNkLElBQUEsa0NBQWMsR0FBRTtxREFxQmhCLElBQUEsa0NBQWMsR0FBRTtZQXZDakIsOE9BQVcsNkJBQTZCLDZEQUV2QztZQUdELDJPQUFXLDRCQUE0Qiw2REFNdEM7WUFRRCw0TUFBTyxtQkFBbUIsNkRBYXpCO1lBUUQsOE5BQU8seUJBQXlCLDZEQWEvQjtZQS9JSCw2S0EyV0M7Ozs7O1FBMVdDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsMkRBQTJELENBQUM7UUFFbkg7O1dBRUc7UUFDSSxNQUFNLENBQUMsZ0NBQWdDLENBQzVDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDViw0QkFBb0M7WUFFcEMsTUFBTSw2QkFBNkIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQ2hFLDRCQUE0QixFQUM1QixHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUNsQyxDQUFDLFlBQWEsQ0FBQztZQUVoQixNQUFNLE1BQU8sU0FBUSw2QkFBNkI7Z0JBQ2hDLDRCQUE0QixHQUFHLDRCQUE0QixDQUFDO2dCQUM1RCw2QkFBNkIsR0FBRyw2QkFBNkIsQ0FBQzthQUMvRTtZQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO1FBRUQ7OztXQUdHO1FBQ0ksTUFBTSxDQUFDLGlDQUFpQyxDQUM3QyxLQUFnQixFQUNoQixFQUFVLEVBQ1YsNkJBQXFDO1lBRXJDLE9BQU8sSUFBSSxDQUFDLGdDQUFnQyxDQUMxQyxLQUFLLEVBQ0wsRUFBRSxFQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLFlBQVksRUFBRSw2QkFBNkI7YUFDNUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVEOztXQUVHO1FBQ0ksTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQU07WUFDOUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxpQ0FBaUMsSUFBSSxDQUFDLENBQUM7U0FDdEY7UUFFZ0IsUUFBUSxHQXBEZCxtREFBeUIsQ0FvRG9CO1FBQ3ZDLHdCQUF3QixHQUEwQyxFQUFFLENBQUM7UUFDckUsOEJBQThCLEdBRTNDLEVBQUUsQ0FBQztRQUVQLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQXdDLEVBQUU7WUFDekYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQ2YsWUFBWSxFQUNWLEtBQUssQ0FBQyw2QkFBNkI7b0JBQ25DLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUNkLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDWixHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTs0QkFDakMsU0FBUyxFQUFFLEdBQUc7NEJBQ2QsU0FBUyxFQUFFLEdBQUc7NEJBQ2Qsd0JBQXdCLEVBQUUsR0FBRzt5QkFDOUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLG9EQUFvRDtxQkFDekUsQ0FBQzthQUNMLENBQUMsQ0FBQzs7Ozs7O21EQXRFTSx5QkFBeUI7Ozs7WUF1RWxDLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxpQ0FBaUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWhGLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1lBRTdDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV4RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksK0NBQTRCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDakUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzlCLGFBQWEsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO2dCQUMxRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7YUFDakIsQ0FBQyxDQUFDO1NBQ0o7UUFHRCxJQUFXLDZCQUE2QjtZQUN0QyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzlEO1FBR0QsSUFBVyw0QkFBNEI7WUFDckMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pELE9BQU8sRUFBRSxjQUFjO2dCQUN2QixRQUFRLEVBQUUsNEJBQTRCO2dCQUN0QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7YUFDaEMsQ0FBQyxDQUFDO1NBQ0o7UUFFRDs7OztXQUlHO1FBRUksbUJBQW1CLENBQUMsR0FBRyxnQkFBbUM7Ozs7Ozs7Ozs7WUFDL0QsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQzNDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNuRSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMxQyxNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FDM0IsMEJBQTBCLEVBQzFCLGdEQUFnRCxNQUFNLG9EQUFvRCxFQUMxRyxJQUFJLENBQ0wsQ0FBQztnQkFDSixDQUFDO2dCQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxlQUFlLENBQUM7WUFDMUQsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVEOzs7O1dBSUc7UUFFSSx5QkFBeUIsQ0FBQyxHQUFHLHNCQUErQzs7Ozs7Ozs7OztZQUNqRixzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFO2dCQUN2RCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUN6RSxJQUFJLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FDM0IsZ0NBQWdDLEVBQ2hDLHNEQUFzRCxNQUFNLDBEQUEwRCxFQUN0SCxJQUFJLENBQ0wsQ0FBQztnQkFDSixDQUFDO2dCQUVELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRU8scUNBQXFDO1lBQzNDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sQ0FBQyw2RkFBNkY7WUFDdkcsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLHNDQUFzQyxFQUFFLHdFQUF3RSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hKLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLHVDQUF1QyxFQUFFLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFJLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLDRDQUE0QyxFQUFFLDhEQUE4RCxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BKLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyw4Q0FBOEMsRUFBRSxxREFBcUQsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3SSxDQUFDO1NBQ0Y7UUFFRDs7Ozs7Ozs7OztXQVVHO1FBQ0ssbUJBQW1CO1lBQ3pCLElBQ0UsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU07Z0JBQ2xELENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxNQUFNLEVBQ3hELENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsNkRBQTZELEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0gsQ0FBQztZQUVELE1BQU0sb0JBQW9CLEdBQTRFLEVBQUUsQ0FBQztZQUV6RyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO2dCQUNuRixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRztvQkFDN0IsTUFBTTtvQkFDTiw0QkFBNEIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDO29CQUNyRSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDO29CQUMxRSw0QkFBNEIsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsWUFBWSxDQUFDO29CQUNsRiwwQkFBMEIsRUFBRSxJQUFJLENBQUMsK0JBQStCLENBQUMsWUFBWSxDQUFDO29CQUM5RSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDO2lCQUMzRSxDQUFDO1lBQ0osQ0FBQztZQUVELEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQztnQkFDbEcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUc7b0JBQzdCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3ZDLE1BQU07b0JBQ04sa0NBQWtDLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLHFCQUFxQixDQUFDO2lCQUMzRixDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUUxRCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsR0FBRyxZQUFZLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUMxRixNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FDM0IsOEJBQThCLEVBQzlCLDhEQUE4RCxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQ3BGLElBQUksQ0FDTCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBRU8sb0JBQW9CLENBQUMsZUFBZ0M7WUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUUsTUFBTSw0QkFBNEIsR0FBRztnQkFDbkMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5RixHQUFHLENBQUMsZUFBZSxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwRyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUYsR0FBRyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsNkJBQTZCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztnQkFDOUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDL0UsR0FBRyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLElBQUk7b0JBQ3ZELGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxtQkFBbUI7aUJBQ3RELENBQUM7YUFDSCxDQUFDO1lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ3BHO1FBRU8sMEJBQTBCLENBQUMscUJBQTRDO1lBQzdFLE9BQU87Z0JBQ0wsYUFBYSxFQUFFLHFCQUFxQixDQUFDLGFBQWE7Z0JBQ2xELFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxvQkFBb0I7Z0JBQ3ZELGdCQUFnQixFQUFFO29CQUNoQixjQUFjLEVBQUUscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsY0FBYztvQkFDeEUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLE9BQU87aUJBQzNEO2FBQ0YsQ0FBQztTQUNIO1FBRU8seUJBQXlCLENBQUMsZUFBZ0M7WUFDaEUsSUFBSSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUNqQyx3RkFBd0Y7b0JBQ3RGLHFGQUFxRjtvQkFDckYsNEVBQTRFLENBQy9FLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxzQkFBc0IsS0FBSyxTQUFTLElBQUk7b0JBQy9FLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxzQkFBc0I7aUJBQ3BGLENBQUM7Z0JBQ0YsR0FBRyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsS0FBSyxTQUFTLElBQUk7b0JBQ3pFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0I7aUJBQ3hFLENBQUM7Z0JBQ0YsR0FBRyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsSUFBSTtvQkFDNUQsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDO2lCQUNwQixDQUFDO2dCQUNGLEdBQUcsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxLQUFLLFNBQVMsSUFBSTtvQkFDbkUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxVQUFVO2lCQUN6RCxDQUFDO2FBQ0gsQ0FBQztZQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUM5RTtRQUVPLDZCQUE2QixDQUNuQyxlQUFnQztZQUVoQyxNQUFNLHdCQUF3QixHQUFHLGVBQWUsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQzVFLENBQUMsdUJBQXVCLEVBQWdFLEVBQUU7Z0JBQ3hGLElBQ0UsdUJBQXVCLENBQUMsbUJBQW1CLEtBQUssU0FBUztvQkFDekQsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDcEUsdUJBQXVCLENBQUMsbUJBQW1CLEdBQUcscUJBQXFCLEVBQ25FLENBQUM7b0JBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQzNCLHFCQUFxQixFQUNyQixnRUFBZ0UscUJBQXFCLEVBQUUsRUFDdkYsSUFBSSxDQUNMLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzlELE1BQU0sNkJBQTZCLEdBQUcsY0FBYyxFQUFFLGdCQUFnQixLQUFLLFNBQVMsQ0FBQztnQkFDckYsTUFBTSx3QkFBd0IsR0FBK0U7b0JBQzNHLEdBQUcsQ0FBQyw2QkFBNkIsSUFBSTt3QkFDbkMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQjtxQkFDbkQsQ0FBQztvQkFDRixHQUFHLENBQUMsQ0FBQyw2QkFBNkIsSUFBSTt3QkFDcEMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQjtxQkFDdkQsQ0FBQztvQkFDRixHQUFHLENBQUMsY0FBYyxFQUFFLGFBQWEsS0FBSyxTQUFTLElBQUk7d0JBQ2pELHFCQUFxQixFQUFFLGNBQWMsRUFBRSxhQUFhO3FCQUNyRCxDQUFDO2lCQUNILENBQUM7Z0JBRUYsT0FBTztvQkFDTCxPQUFPLEVBQUUsdUJBQXVCLENBQUMsT0FBTztvQkFDeEMsbUJBQW1CLEVBQUUsdUJBQXVCLENBQUMsbUJBQW1CO29CQUNoRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxDQUFDO29CQUNqRyxHQUFHLENBQUMsdUJBQXVCLENBQUMsbUJBQW1CLEtBQUssU0FBUyxJQUFJO3dCQUMvRCxxQkFBcUIsRUFBRSxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixDQUFDLG1CQUFtQixFQUFFO3FCQUM1RixDQUFDO2lCQUNILENBQUM7WUFDSixDQUFDLENBQ0YsQ0FBQztZQUVGLE9BQU8sd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ2hGO1FBRU8saUNBQWlDLENBQ3ZDLGVBQWdDO1lBRWhDLE1BQU0sNEJBQTRCLEdBQUcsZUFBZSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQ3ZFLENBQUMsMkJBQTJCLEVBQW9FLEVBQUU7Z0JBQ2hHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDakUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQzNCLDBCQUEwQixFQUMxQiw2RUFBNkUsRUFDN0UsSUFBSSxDQUNMLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxPQUFPO29CQUNMLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxTQUFTO29CQUNoRCxnQkFBZ0IsRUFBRSwyQkFBMkIsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO29CQUM3RSxpQkFBaUIsRUFBRSwyQkFBMkIsQ0FBQyxpQkFBaUI7aUJBQ2pFLENBQUM7WUFDSixDQUFDLENBQ0YsQ0FBQztZQUVGLE9BQU8sNEJBQTRCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ3hGO1FBRU8sNkJBQTZCLENBQUMsZUFBZ0M7WUFDcEUsT0FBTyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNoSDtRQUVPLCtCQUErQixDQUNyQyxlQUFnQztZQUVoQyxNQUFNLDBCQUEwQixHQUFHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUNuRSxDQUFDLHlCQUF5QixFQUFrRSxFQUFFLENBQUMsQ0FBQztnQkFDOUYsWUFBWSxFQUFFLHlCQUF5QixDQUFDLFVBQVU7Z0JBQ2xELFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxRQUFRO2dCQUM1QyxhQUFhLEVBQUUseUJBQXlCLENBQUMsU0FBUyxDQUFDLGFBQWE7YUFDakUsQ0FBQyxDQUNILENBQUM7WUFFRixPQUFPLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNwRjs7WUExV1UsdURBQXlCOzs7OztBQUF6Qiw4REFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCB0eXBlICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHR5cGUgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBtZW1vaXplZEdldHRlciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmNvbnN0IERJU1RSSUJVVElPTl9DT05GSUdVUkFUSU9OX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1pbWFnZWJ1aWxkZXItYWxwaGEuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbicpO1xuXG4vLyBGYXN0IExhdW5jaCByZXF1aXJlcyBhdCBsZWFzdCA2IHBhcmFsbGVsIGxhdW5jaGVzLlxuY29uc3QgTUlOX1BBUkFMTEVMX0xBVU5DSEVTID0gNjtcblxuLyoqXG4gKiBBbiBFQzIgSW1hZ2UgQnVpbGRlciBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIGNkay5JUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBUaGUgbGF1bmNoIHBlcm1pc3Npb25zIGZvciB0aGUgQU1JLCBkZWZpbmluZyB3aGljaCBwcmluY2lwYWxzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgQU1JXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW1pTGF1bmNoUGVybWlzc2lvbiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOcyBmb3IgdGhlIEFXUyBPcmdhbml6YXRpb25zIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBBUk5zIGZvciB0aGUgQVdTIE9yZ2FuaXphdGlvbiB0aGF0IHlvdSB3YW50IHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbWFrZSB0aGUgQU1JIHB1YmxpYy4gQmxvY2sgcHVibGljIGFjY2VzcyBmb3IgQU1JcyBtdXN0IGJlIGRpc2FibGVkIHRvIG1ha2UgdGhlIEFNSSBwdWJsaWMuXG4gICAqXG4gICAqIFdBUk5JTkc6IE1ha2luZyBhbiBBTUkgcHVibGljIGV4cG9zZXMgaXQgdG8gYW55IEFXUyBhY2NvdW50IGdsb2JhbGx5LlxuICAgKiAgRW5zdXJlIHRoZSBBTUkgZG9lcyBub3QgY29udGFpbjpcbiAgICogIC0gU2Vuc2l0aXZlIGRhdGEgb3IgY3JlZGVudGlhbHNcbiAgICogIC0gUHJvcHJpZXRhcnkgc29mdHdhcmUgb3IgY29uZmlndXJhdGlvbnNcbiAgICogIC0gSW50ZXJuYWwgbmV0d29yayBpbmZvcm1hdGlvbiBvciBzZWN1cml0eSBzZXR0aW5nc1xuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBibG9ja2luZyBwdWJsaWMgYWNjZXNzIGZvciBBTUlzLCBzZWU6IFtVbmRlcnN0YW5kIGJsb2NrIHB1YmxpYyBhY2Nlc3MgZm9yIEFNSXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9ibG9jay1wdWJsaWMtYWNjZXNzLXRvLWFtaXMuaHRtbClcbiAgICpcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGlzUHVibGljVXNlckdyb3VwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEcyB0byBzaGFyZSB0aGUgQU1JIHdpdGhcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBTU00gcGFyYW1ldGVycyB0byBjcmVhdGUgb3IgdXBkYXRlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNTTVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCB0aGF0IHdpbGwgb3duIHRoZSBTU00gcGFyYW1ldGVyIGluIHRoZSBnaXZlbiByZWdpb24uIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIHRhcmdldCBhY2NvdW50c1xuICAgKiB0aGF0IHdhcyBpbmNsdWRlZCBpbiB0aGUgbGlzdCBvZiBBTUkgZGlzdHJpYnV0aW9uIHRhcmdldCBhY2NvdW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCBhY2NvdW50IGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGFtaUFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIFNTTSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgc3NtLlBhcmFtZXRlckRhdGFUeXBlLkFXU19FQzJfSU1BR0VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFUeXBlPzogc3NtLlBhcmFtZXRlckRhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NNIHBhcmFtZXRlciB0byBjcmVhdGUgb3IgdXBkYXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIFRoZSBsYXVuY2ggdGVtcGxhdGUgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlIHRvIGFwcGx5IHRoZSBkaXN0cmlidXRlZCBBTUkgdG8uIEEgbmV3IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlXG4gICAqIHByb3ZpZGVkIGxhdW5jaCB0ZW1wbGF0ZSB3aXRoIHRoZSBkaXN0cmlidXRlZCBBTUkgYXBwbGllZC5cbiAgICpcbiAgICogKk5vdGU6KiBUaGUgbGF1bmNoIHRlbXBsYXRlIHNob3VsZCBleHBvc2UgYSBgbGF1bmNoVGVtcGxhdGVJZGAuIFRlbXBsYXRlc1xuICAgKiBpbXBvcnRlZCBieSBuYW1lIG9ubHkgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZTogZWMyLklMYXVuY2hUZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIHRoYXQgb3ducyB0aGUgbGF1bmNoIHRlbXBsYXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IGFjY291bnQgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNldCB0aGUgbmV3IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIHRoYXQgaXMgY3JlYXRlZCBhcyB0aGUgZGVmYXVsdCBsYXVuY2ggdGVtcGxhdGUgdmVyc2lvbi4gQWZ0ZXJcbiAgICogY3JlYXRpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIGNvbnRhaW5pbmcgdGhlIGRpc3RyaWJ1dGVkIEFNSSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldCBhcyB0aGVcbiAgICogZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFZlcnNpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBFQzIgRmFzdCBMYXVuY2ggY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIHRoZSBXaW5kb3dzIEFNSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhc3RMYXVuY2hDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGZhc3QgbGF1bmNoIGZvciB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCB0ZW1wbGF0ZSB0aGF0IHRoZSBmYXN0LWxhdW5jaCBlbmFibGVkIFdpbmRvd3MgQU1JIHVzZXMgd2hlbiBpdCBsYXVuY2hlcyBXaW5kb3dzIGluc3RhbmNlcyB0byBjcmVhdGVcbiAgICogcHJlLXByb3Zpc2lvbmVkIHNuYXBzaG90c1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZT86IGVjMi5JTGF1bmNoVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBpbnN0YW5jZXMgdGhhdCBhcmUgbGF1bmNoZWQgZm9yIGNyZWF0aW5nIHJlc291cmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBBIG1heGltdW0gb2YgNiBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkIGluIHBhcmFsbGVsXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IG1heFBhcmFsbGVsTGF1bmNoZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgcHJlLXByb3Zpc2lvbmVkIHNuYXBzaG90cyB0byBrZWVwIG9uIGhhbmQgZm9yIGEgZmFzdC1sYXVuY2ggZW5hYmxlZCBXaW5kb3dzIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCAxMCBzbmFwc2hvdHMgYXJlIGtlcHQgcHJlLXByb3Zpc2lvbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFNuYXBzaG90Q291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHJlZ2lvbmFsIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB1c2UgZm9yIGFuIEFNSSBidWlsZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtaURpc3RyaWJ1dGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IHJlZ2lvbiB0byBkaXN0cmlidXRlIEFNSXMgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgcmVnaW9uIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pVGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB0byBlbmNyeXB0IHRoZSBkaXN0cmlidXRlZCBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlLbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCBwZXJtaXNzaW9ucyBmb3IgdGhlIEFNSSwgZGVmaW5pbmcgd2hpY2ggcHJpbmNpcGFscyBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlMYXVuY2hQZXJtaXNzaW9uPzogQW1pTGF1bmNoUGVybWlzc2lvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBBIG5hbWUgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGltYWdlIHJlY2lwZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBhbWlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBJRHMgdG8gY29weSB0aGUgb3V0cHV0IEFNSSB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlUYXJnZXRBY2NvdW50SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVycyB0byBjcmVhdGUgb3IgdXBkYXRlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBzc21QYXJhbWV0ZXJzPzogU1NNUGFyYW1ldGVyQ29uZmlndXJhdGlvbnNbXTtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCB0ZW1wbGF0ZXMgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZXM/OiBMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGZhc3QgbGF1bmNoIGNvbmZpZ3VyYXRpb25zIHRvIHVzZSBmb3IgZW5hYmxpbmcgRUMyIEZhc3QgTGF1bmNoIG9uIHRoZSBkaXN0cmlidXRlZCBXaW5kb3dzIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz86IEZhc3RMYXVuY2hDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBMaWNlbnNlIE1hbmFnZXIgbGljZW5zZSBjb25maWd1cmF0aW9uIEFSTnMgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlZ2lvbmFsIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB1c2UgZm9yIGEgY29udGFpbmVyIGJ1aWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyRGlzdHJpYnV0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcmVnaW9uIHRvIGRpc3RyaWJ1dGUgY29udGFpbmVycyB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCByZWdpb24gaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeSB0byBkaXN0cmlidXRlIHRoZSBvdXRwdXQgY29udGFpbmVyIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSB0YXJnZXQgcmVwb3NpdG9yeSBpbiB0aGUgY29udGFpbmVyIHJlY2lwZSBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRhaW5lciBpbWFnZVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0ZWQgY29udGFpbmVyIGltYWdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJUYWdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbiByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0YXJnZXQgcmVnaW9ucyBhbmQgYXNzb2NpYXRlZCBBTUkgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHdoZXJlIHRoZSBidWlsdCBBTUkgd2lsbCBiZSBkaXN0cmlidXRlZC4gQU1JXG4gICAqIGRpc3RyaWJ1dGlvbnMgbWF5IGFsc28gYmUgYWRkZWQgd2l0aCB0aGUgYGFkZEFtaURpc3RyaWJ1dGlvbnNgIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZSBpZiBjb250YWluZXIgZGlzdHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQuIE90aGVyd2lzZSwgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uIG11c3RcbiAgICogICAgICAgICAgYmUgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFtaURpc3RyaWJ1dGlvbnM/OiBBbWlEaXN0cmlidXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdGFyZ2V0IHJlZ2lvbnMgYW5kIGFzc29jaWF0ZWQgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB3aGVyZSB0aGUgYnVpbHQgY29udGFpbmVyIHdpbGwgYmVcbiAgICogZGlzdHJpYnV0ZWQuIENvbnRhaW5lciBkaXN0cmlidXRpb25zIG1heSBhbHNvIGJlIGFkZGVkIHdpdGggdGhlIGBhZGRDb250YWluZXJEaXN0cmlidXRpb25zYCBtZXRob2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmUgaWYgQU1JIGRpc3RyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkLiBPdGhlcndpc2UsIGF0IGxlYXN0IG9uZSBBTUkgb3IgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBtdXN0IGJlXG4gICAqICAgICAgICAgIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJEaXN0cmlidXRpb25zPzogQ29udGFpbmVyRGlzdHJpYnV0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgRGlzdHJpYnV0aW9uIENvbmZpZ3VyYXRpb25cbiAqL1xuYWJzdHJhY3QgY2xhc3MgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkJhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybl0sXG4gICAgICBzY29wZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0RGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHNlcnZpY2UgaW4gd2hpY2ggYSBjb250YWluZXIgc2hvdWxkIGJlIHJlZ2lzdGVyZWRcbiAqL1xuZXhwb3J0IGVudW0gUmVwb3NpdG9yeVNlcnZpY2Uge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb250YWluZXIgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgaW4gRUNSXG4gICAqL1xuICBFQ1IgPSAnRUNSJyxcbn1cblxuLyoqXG4gKiBBIGNvbnRhaW5lciByZXBvc2l0b3J5IHVzZWQgdG8gZGlzdHJpYnV0ZSBjb250YWluZXIgaW1hZ2VzIGluIEVDMiBJbWFnZSBCdWlsZGVyXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXBvc2l0b3J5IHtcbiAgLyoqXG4gICAqIFRoZSBFQ1IgcmVwb3NpdG9yeSB0byB1c2UgYXMgdGhlIHRhcmdldCBjb250YWluZXIgcmVwb3NpdG9yeVxuICAgKlxuICAgKiBAcGFyYW0gcmVwb3NpdG9yeSBUaGUgRUNSIHJlcG9zaXRvcnkgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FY3IocmVwb3NpdG9yeTogZWNyLklSZXBvc2l0b3J5KTogUmVwb3NpdG9yeSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVwb3NpdG9yeSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZyA9IHJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2UgPSBSZXBvc2l0b3J5U2VydmljZS5FQ1I7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHJlcG9zaXRvcnkgd2hlcmUgdGhlIG91dHB1dCBjb250YWluZXIgaW1hZ2UgaXMgc3RvcmVkXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSByZXBvc2l0b3J5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSBpbiB3aGljaCB0aGUgY29udGFpbmVyIHJlcG9zaXRvcnkgaXMgaG9zdGVkXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBzZXJ2aWNlOiBSZXBvc2l0b3J5U2VydmljZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVDMiBJbWFnZSBCdWlsZGVyIERpc3RyaWJ1dGlvbiBDb25maWd1cmF0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1kaXN0cmlidXRpb24tc2V0dGluZ3MuaHRtbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25CYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24nO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IHN0cmluZyxcbiAgKTogSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4sXG4gICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4gPSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lID0gZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZ2l2ZW4gaXRzIG5hbWUuIFRoZSBwcm92aWRlZCBuYW1lIG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nXG4gICAqIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXMgd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmcsXG4gICk6IElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICByZXNvdXJjZTogJ2Rpc3RyaWJ1dGlvbi1jb25maWd1cmF0aW9uJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbih4OiBhbnkpOiB4IGlzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiBESVNUUklCVVRJT05fQ09ORklHVVJBVElPTl9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uOiB7IFtyZWdpb246IHN0cmluZ106IEFtaURpc3RyaWJ1dGlvbiB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uOiB7XG4gICAgW3JlZ2lvbjogc3RyaW5nXTogQ29udGFpbmVyRGlzdHJpYnV0aW9uO1xuICB9ID0ge307XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOlxuICAgICAgICBwcm9wcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgRElTVFJJQlVUSU9OX0NPTkZJR1VSQVRJT05fU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0ZURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKCk7XG5cbiAgICB0aGlzLmFkZEFtaURpc3RyaWJ1dGlvbnMoLi4uKHByb3BzLmFtaURpc3RyaWJ1dGlvbnMgPz8gW10pKTtcbiAgICB0aGlzLmFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnMoLi4uKHByb3BzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnMgPz8gW10pKTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbih0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGRpc3RyaWJ1dGlvbnM6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyRGlzdHJpYnV0aW9ucygpIH0pLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ck5hbWUpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2Rpc3RyaWJ1dGlvbi1jb25maWd1cmF0aW9uJyxcbiAgICAgIHJlc291cmNlTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBBTUkgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gYW1pRGlzdHJpYnV0aW9ucyBUaGUgbGlzdCBvZiBBTUkgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIGFwcGx5XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkQW1pRGlzdHJpYnV0aW9ucyguLi5hbWlEaXN0cmlidXRpb25zOiBBbWlEaXN0cmlidXRpb25bXSk6IHZvaWQge1xuICAgIGFtaURpc3RyaWJ1dGlvbnMuZm9yRWFjaCgoYW1pRGlzdHJpYnV0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWdpb24gPSBhbWlEaXN0cmlidXRpb24ucmVnaW9uID8/IGNkay5TdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgICBpZiAodGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAnRHVwbGljYXRlQW1pRGlzdHJpYnV0aW9uJyxcbiAgICAgICAgICBgZHVwbGljYXRlIEFNSSBkaXN0cmlidXRpb24gZm91bmQgZm9yIHJlZ2lvbiBcIiR7cmVnaW9ufVwiOyBvbmx5IG9uZSBBTUkgZGlzdHJpYnV0aW9uIHBlciByZWdpb24gaXMgYWxsb3dlZGAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSA9IGFtaURpc3RyaWJ1dGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNvbnRhaW5lciBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJEaXN0cmlidXRpb25zIFRoZSBsaXN0IG9mIGNvbnRhaW5lciBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gYXBwbHlcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRDb250YWluZXJEaXN0cmlidXRpb25zKC4uLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnM6IENvbnRhaW5lckRpc3RyaWJ1dGlvbltdKTogdm9pZCB7XG4gICAgY29udGFpbmVyRGlzdHJpYnV0aW9ucy5mb3JFYWNoKChjb250YWluZXJEaXN0cmlidXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5yZWdpb24gPz8gY2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICdEdXBsaWNhdGVDb250YWluZXJEaXN0cmlidXRpb24nLFxuICAgICAgICAgIGBkdXBsaWNhdGUgQ29udGFpbmVyIGRpc3RyaWJ1dGlvbiBmb3VuZCBmb3IgcmVnaW9uIFwiJHtyZWdpb259XCI7IG9ubHkgb25lIENvbnRhaW5lciBkaXN0cmlidXRpb24gcGVyIHJlZ2lvbiBpcyBhbGxvd2VkYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dID0gY29udGFpbmVyRGlzdHJpYnV0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWVUb29Mb25nJywgJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ0Rpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lTm9TcGFjZXMnLCAnVGhlIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lIGNhbm5vdCBjb250YWluIHNwYWNlcycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWVOb1VuZGVyc2NvcmVzJywgJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBjYW5ub3QgY29udGFpbiB1bmRlcnNjb3JlcycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ0Rpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lTXVzdEJlTG93ZXJjYXNlJywgJ1RoZSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSBtdXN0IGJlIGxvd2VyY2FzZScsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBBTUkgYW5kIGNvbnRhaW5lciBkaXN0cmlidXRpb25zIHByb3ZpZGVkIGFzIGlucHV0IHRvIHRoZSBjb25zdHJ1Y3QsIGludG8gdGhlIGBEaXN0cmlidXRpb25bXWAgc3RydWN0dXJlXG4gICAqIHRoYXQgQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBleHBlY3RzIHRvIHJlY2VpdmUuIERpc3RyaWJ1dGlvbnMgcHJvdmlkZWQgdG8gQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBtdXN0XG4gICAqIG1hcCB0byBhIHVuaXF1ZSByZWdpb24gcGVyIGVudHJ5IGluIHRoZSBsaXN0IC0gdGhpcyByZW5kZXIgZnVuY3Rpb24gYWxzbyBoYW5kbGVzIGNvbWJpbmluZyBBTUkgYW5kIGNvbnRhaW5lclxuICAgKiBkaXN0cmlidXRpb25zIGluIHRoZSBzYW1lIHJlZ2lvbiBpbnRvIGEgc2luZ2xlIGVudHJ5LlxuICAgKlxuICAgKiBUaGlzIGlzIHJlbmRlcmVkIGF0IHN5bnRoZXNpcyB0aW1lLCBhcyB1c2VycyBjYW4gYWRkIGFkZGl0aW9uYWwgQU1JIGFuZCBjb250YWluZXIgZGlzdHJpYnV0aW9ucyB3aXRoXG4gICAqIGBhZGRBbWlEaXN0cmlidXRpb25zYCBhbmQgYGFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnNgLCBhZnRlciB0aGUgY29uc3RydWN0IGhhcyBiZWVuIGluc3RhbnRpYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyRGlzdHJpYnV0aW9ucygpOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkRpc3RyaWJ1dGlvblByb3BlcnR5W10ge1xuICAgIGlmIChcbiAgICAgICFPYmplY3Qua2V5cyh0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbikubGVuZ3RoICYmXG4gICAgICAhT2JqZWN0LmtleXModGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb24pLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ0Rpc3RyaWJ1dGlvblJlcXVpcmVkJywgJ1lvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uJywgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uQnlSZWdpb246IHsgW3JlZ2lvbjogc3RyaW5nXTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5EaXN0cmlidXRpb25Qcm9wZXJ0eSB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtyZWdpb24sIGRpc3RyaWJ1dGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb24pKSB7XG4gICAgICBkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID0ge1xuICAgICAgICByZWdpb24sXG4gICAgICAgIGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb246IHRoaXMuYnVpbGRBbWlEaXN0cmlidXRpb24oZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkRmFzdExhdW5jaENvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnM6IHRoaXMuYnVpbGRMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMoZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgbGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zOiB0aGlzLmJ1aWxkTGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zKGRpc3RyaWJ1dGlvbiksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3JlZ2lvbiwgY29udGFpbmVyRGlzdHJpYnV0aW9uXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbikpIHtcbiAgICAgIGRpc3RyaWJ1dGlvbkJ5UmVnaW9uW3JlZ2lvbl0gPSB7XG4gICAgICAgIC4uLihkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID8/IHt9KSxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBjb250YWluZXJEaXN0cmlidXRpb25Db25maWd1cmF0aW9uOiB0aGlzLmJ1aWxkQ29udGFpbmVyRGlzdHJpYnV0aW9uKGNvbnRhaW5lckRpc3RyaWJ1dGlvbiksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbnMgPSBPYmplY3QudmFsdWVzKGRpc3RyaWJ1dGlvbkJ5UmVnaW9uKTtcblxuICAgIGRpc3RyaWJ1dGlvbnMuZm9yRWFjaCgoZGlzdHJpYnV0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7IHJlZ2lvbjogXywgLi4uZGlzdHJpYnV0aW9uV2l0aG91dFJlZ2lvbiB9ID0gZGlzdHJpYnV0aW9uO1xuICAgICAgaWYgKCFPYmplY3QuZW50cmllcyhkaXN0cmlidXRpb25XaXRob3V0UmVnaW9uKS5zb21lKChbX18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgJ0Rpc3RyaWJ1dGlvblByb3BlcnR5UmVxdWlyZWQnLFxuICAgICAgICAgIGBhdCBsZWFzdCBvbmUgZGlzdHJpYnV0aW9uIHByb3BlcnR5IG11c3QgYmUgc2V0IGZvciByZWdpb24gXCIke2Rpc3RyaWJ1dGlvbi5yZWdpb259XCJgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlzdHJpYnV0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBbWlEaXN0cmlidXRpb24oYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24pOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxhdW5jaFBlcm1pc3Npb25zID0gdGhpcy5idWlsZEFtaUxhdW5jaFBlcm1pc3Npb25zKGFtaURpc3RyaWJ1dGlvbik7XG4gICAgY29uc3QgYW1pRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLihPYmplY3Qua2V5cyhhbWlEaXN0cmlidXRpb24uYW1pVGFncyA/PyB7fSkubGVuZ3RoICYmIHsgQW1pVGFnczogYW1pRGlzdHJpYnV0aW9uLmFtaVRhZ3MgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaURlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBEZXNjcmlwdGlvbjogYW1pRGlzdHJpYnV0aW9uLmFtaURlc2NyaXB0aW9uIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlLbXNLZXkgIT09IHVuZGVmaW5lZCAmJiB7IEttc0tleUlkOiBhbWlEaXN0cmlidXRpb24uYW1pS21zS2V5LmtleUFybiB9KSxcbiAgICAgIC4uLihsYXVuY2hQZXJtaXNzaW9ucyAmJiB7IExhdW5jaFBlcm1pc3Npb25Db25maWd1cmF0aW9uOiBsYXVuY2hQZXJtaXNzaW9ucyB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTmFtZSAhPT0gdW5kZWZpbmVkICYmIHsgTmFtZTogYW1pRGlzdHJpYnV0aW9uLmFtaU5hbWUgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaVRhcmdldEFjY291bnRJZHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIFRhcmdldEFjY291bnRJZHM6IGFtaURpc3RyaWJ1dGlvbi5hbWlUYXJnZXRBY2NvdW50SWRzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uKS5sZW5ndGggPyBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbnRhaW5lckRpc3RyaWJ1dGlvbihjb250YWluZXJEaXN0cmlidXRpb246IENvbnRhaW5lckRpc3RyaWJ1dGlvbik6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENvbnRhaW5lclRhZ3M6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJUYWdzLFxuICAgICAgRGVzY3JpcHRpb246IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJEZXNjcmlwdGlvbixcbiAgICAgIFRhcmdldFJlcG9zaXRvcnk6IHtcbiAgICAgICAgUmVwb3NpdG9yeU5hbWU6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJSZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBTZXJ2aWNlOiBjb250YWluZXJEaXN0cmlidXRpb24uY29udGFpbmVyUmVwb3NpdG9yeS5zZXJ2aWNlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFtaUxhdW5jaFBlcm1pc3Npb25zKGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmlzUHVibGljVXNlckdyb3VwKSB7XG4gICAgICBjZGsuQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgJ0FNSSBpcyBjb25maWd1cmVkIGZvciBwdWJsaWMgYWNjZXNzLCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIGFueSBBV1MgYWNjb3VudCBnbG9iYWxseS4gJyArXG4gICAgICAgICAgJ0Vuc3VyZSBubyBzZW5zaXRpdmUgZGF0YSwgY3JlZGVudGlhbHMsIG9yIHByb3ByaWV0YXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZC4gJyArXG4gICAgICAgICAgXCJSZXZpZXcgeW91ciBvcmdhbml6YXRpb24ncyBzZWN1cml0eSBwb2xpY2llcyBiZWZvcmUgZGVwbG95aW5nIHB1YmxpYyBBTUlzLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXVuY2hQZXJtaXNzaW9ucyA9IHtcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uYWxVbml0QXJucyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgT3JnYW5pemF0aW9uYWxVbml0QXJuczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbmFsVW5pdEFybnMsXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uQXJucyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgT3JnYW5pemF0aW9uQXJuczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbkFybnMsXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uaXNQdWJsaWNVc2VyR3JvdXAgJiYge1xuICAgICAgICBVc2VyR3JvdXBzOiBbJ2FsbCddLFxuICAgICAgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmFjY291bnRJZHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIFVzZXJJZHM6IGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5hY2NvdW50SWRzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXVuY2hQZXJtaXNzaW9ucykubGVuZ3RoID8gbGF1bmNoUGVybWlzc2lvbnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmFzdExhdW5jaENvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zID0gYW1pRGlzdHJpYnV0aW9uLmZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz8ubWFwKFxuICAgICAgKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5GYXN0TGF1bmNoQ29uZmlndXJhdGlvblByb3BlcnR5ID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMpICYmXG4gICAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyA8IE1JTl9QQVJBTExFTF9MQVVOQ0hFU1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgICdNaW5QYXJhbGxlbExhdW5jaGVzJyxcbiAgICAgICAgICAgIGB5b3UgbXVzdCBzcGVjaWZ5IGEgbWF4aW11bSBwYXJhbGxlbCBsYXVuY2ggY291bnQgb2YgYXQgbGVhc3QgJHtNSU5fUEFSQUxMRUxfTEFVTkNIRVN9YCxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGU7XG4gICAgICAgIGNvbnN0IHVzZUZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZUlkID0gbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlSWQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgICAgICAuLi4odXNlRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlSWQgJiYge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKCF1c2VGYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGVJZCAmJiB7XG4gICAgICAgICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGxhdW5jaFRlbXBsYXRlPy5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGxhdW5jaFRlbXBsYXRlPy52ZXJzaW9uTnVtYmVyICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVWZXJzaW9uOiBsYXVuY2hUZW1wbGF0ZT8udmVyc2lvbk51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLmVuYWJsZWQsXG4gICAgICAgICAgbWF4UGFyYWxsZWxMYXVuY2hlczogZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlKS5sZW5ndGggJiYgeyBsYXVuY2hUZW1wbGF0ZTogZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlIH0pLFxuICAgICAgICAgIC4uLihmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi50YXJnZXRTbmFwc2hvdENvdW50ICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgc25hcHNob3RDb25maWd1cmF0aW9uOiB7IHRhcmdldFJlc291cmNlQ291bnQ6IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLnRhcmdldFNuYXBzaG90Q291bnQgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvblByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMgPSBhbWlEaXN0cmlidXRpb24ubGF1bmNoVGVtcGxhdGVzPy5tYXAoXG4gICAgICAobGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5MYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9PiB7XG4gICAgICAgIGlmICghbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmxhdW5jaFRlbXBsYXRlLmxhdW5jaFRlbXBsYXRlSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgICdMYXVuY2hUZW1wbGF0ZUlkUmVxdWlyZWQnLFxuICAgICAgICAgICAgJ1lvdSBtdXN0IHJlZmVyZW5jZSBsYXVuY2ggdGVtcGxhdGVzIGJ5IElEIGluIGxhdW5jaCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9ucycsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjY291bnRJZDogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmFjY291bnRJZCxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZUlkOiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGUubGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgICAgICBzZXREZWZhdWx0VmVyc2lvbjogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLnNldERlZmF1bHRWZXJzaW9uLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zKGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBhbWlEaXN0cmlidXRpb24ubGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zPy5sZW5ndGggPyBhbWlEaXN0cmlidXRpb24ubGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyA9IGFtaURpc3RyaWJ1dGlvbi5zc21QYXJhbWV0ZXJzPy5tYXAoXG4gICAgICAoc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbik6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvblByb3BlcnR5ID0+ICh7XG4gICAgICAgIGFtaUFjY291bnRJZDogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5hbWlBY2NvdW50LFxuICAgICAgICBkYXRhVHlwZTogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5kYXRhVHlwZSxcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbi5wYXJhbWV0ZXIucGFyYW1ldGVyTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=