@trudb/tru-common-lib 0.1.467 → 0.1.470

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.
@@ -444,12 +444,12 @@ export class TruDataGrid {
444
444
  if (entityLoaded) {
445
445
  joins.push(this.dataContext.entityAccess().searchCacheOnly(this.config.resultConfig.entityType, setupQuery, this.config.resultConfig.expands));
446
446
  if (this.gridType === TruDataGridTypes.DetailManyToMany && this.config.tableConfig.canAdd)
447
- joins.push(this.dataContext.entityAccess().searchQueryChoices(this.config.resultConfig.entityManyToManyType, this.config.resultConfig.manyToManySetupQuery(this.entity), null, false));
447
+ joins.push(this.dataContext.entityAccess().searchQueryChoices(this.config.resultConfig.entityManyToManyType, this.config.resultConfig.manyToManySetupQuery(this.entity), false));
448
448
  }
449
449
  else {
450
450
  joins.push(this.dataContext.entityAccess().search(this.config.resultConfig.entityType, setupQuery, this.config.resultConfig.expands, false));
451
451
  if (this.gridType === TruDataGridTypes.DetailManyToMany && this.config.tableConfig.canAdd)
452
- joins.push(this.dataContext.entityAccess().searchQueryChoices(this.config.resultConfig.entityManyToManyType, this.config.resultConfig.manyToManySetupQuery(this.entity), null, true));
452
+ joins.push(this.dataContext.entityAccess().searchQueryChoices(this.config.resultConfig.entityManyToManyType, this.config.resultConfig.manyToManySetupQuery(this.entity), true));
453
453
  }
454
454
  this.latestSetupQuery = setupQuery;
455
455
  forkJoin(joins).subscribe({
@@ -552,4 +552,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
552
552
  }], name: [{
553
553
  type: Input
554
554
  }] } });
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRhdGEtZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUMsU0FBUyxFQUFnQixLQUFLLEVBQXFCLFFBQVEsRUFBOEIsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNMLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFhaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFNUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2xILE1BQU0sT0FBTyxXQUFXO0lBa0VaO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDVztJQXpFWixNQUFNLENBQXNCO0lBQzVCLE1BQU0sQ0FBTztJQUNiLElBQUksQ0FBTztJQUVwQixnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUVwQyxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBUSxFQUFFLENBQUM7SUFDckIs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UUFDL0IsRUFBQyx1QkFBdUIsRUFBRSxNQUFNLEVBQUM7OzBCQTRFcEMsUUFBUTt5Q0F6RUYsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3B0aW9uYWwsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgY3JlYXRlQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbERlZiwgQ29sdW1uLCBHcmlkQXBpLCBHcmlkUmVhZHlFdmVudCwgU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZvcmtKb2luLCBmcm9tRXZlbnQsIHNraXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICd1bmRlcnNjb3JlJztcclxuaW1wb3J0IHsgVHJ1TGlzdENvbnRyb2xDb25maWdCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS1jbGFzc2VzL3RydS1saXN0LWNvbnRyb2wtY29uZmlnLWJhc2UnO1xyXG5pbXBvcnQgeyBUcnVTZWFyY2hWaWV3RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vYmFzZS12aWV3cy9zZWFyY2gvc2VydmljZXMvdHJ1LXNlYXJjaC12aWV3LWV2ZW50LWhhbmRsZXInO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ2hhbmdlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90cnUtZGF0YS1jaGFuZ2UnO1xyXG5pbXBvcnQgeyBUcnVNZXJnZURhdGFTZXQgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RydS1tZXJnZS1kYXRhLXNldCc7XHJcbmltcG9ydCB7IFRydUFwcEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWFwcC1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IFRydUNvbm5lY3Rpb25IdWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtY29ubmVjdGlvbi1odWInO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1kYXRhLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcnVTZWFyY2hSZXN1bHRWaWV3TWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1zZWFyY2gtcmVzdWx0LXZpZXctbWFuYWdlcic7XHJcbmltcG9ydCB7IFRydVVpTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXVpLW5vdGlmaWNhdGlvbic7XHJcbmltcG9ydCB7IFRydVV0aWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdXRpbCc7XHJcbmltcG9ydCB7IFRydVRhYkdyb3VwRXZlbnROb3RpZmllciB9IGZyb20gJy4uL2xheW91dC90YWIvc2VydmljZXMvdHJ1LXRhYi1ncm91cC1ldmVudC1ub3RpZmllcic7XHJcbmltcG9ydCB7IElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24gfSBmcm9tICcuLi90b29sYmFyL2NsYXNzZXMvdHJ1LXRvb2xiYXItZHJvcGRvd24tb3B0aW9uJztcclxuaW1wb3J0IHsgVHJ1R3JpZFZhbGlkYXRpb25EaWFsb2cgfSBmcm9tICcuLi9ncmlkLXZhbGlkYXRpb24tZGlhbG9nL3RydS1ncmlkLXZhbGlkYXRpb24tZGlhbG9nJztcclxuaW1wb3J0IHsgVHJ1R3JpZFZhbGlkYXRpb25EaWFsb2dDb25maWcgfSBmcm9tICcuLi9ncmlkLXZhbGlkYXRpb24tZGlhbG9nL3RydS1ncmlkLXZhbGlkYXRpb24tZGlhbG9nLWNvbmZpZyc7XHJcbmltcG9ydCB7IElUcnVEYXRhR3JpZENvbmZpZyB9IGZyb20gJy4vY2xhc3Nlcy90cnUtZGF0YS1ncmlkLWNvbmZpZyc7XHJcbmltcG9ydCB7IFRydURhdGFHcmlkVHlwZXMgfSBmcm9tICcuL2VudW1zL3RydS1kYXRhLWdyaWQtdHlwZXMnO1xyXG5pbXBvcnQgeyBUcnVEYXRhR3JpZExvYWRpbmdPdmVybGF5IH0gZnJvbSAnLi9vdmVybGF5cy90cnUtZGF0YS1ncmlkLWxvYWRpbmctb3ZlcmxheS90cnUtZGF0YS1ncmlkLWxvYWRpbmctb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRydURhdGFHcmlkTm9Sb3dzT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheXMvdHJ1LWRhdGEtZ3JpZC1uby1yb3dzLW92ZXJsYXkvdHJ1LWRhdGEtZ3JpZC1uby1yb3dzLW92ZXJsYXknO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cnUtZGF0YS1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWRhdGEtZ3JpZC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cnUtZGF0YS1ncmlkLmNzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgaG9zdDogeydbY2xhc3MudHJ1LWRhdGEtZ3JpZF0nOiAndHJ1ZSd9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVEYXRhR3JpZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBjb25maWchOiBJVHJ1RGF0YUdyaWRDb25maWc7XHJcbiAgQElucHV0KCkgZW50aXR5ITogYW55O1xyXG4gIEBJbnB1dCgpIG5hbWUhOiBhbnk7XHJcblxyXG4gIFRydURhdGFHcmlkVHlwZXMgPSBUcnVEYXRhR3JpZFR5cGVzO1xyXG5cclxuICBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgY29sdW1uRGVmczogYW55ID0gW107XHJcbiAgcm93RGF0YTogYW55ID0gW107XHJcbiAgdmlld0Nob2ljZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3RlZFZpZXdDaG9pY2U6IGFueTtcclxuICB1bmFzc29jaWF0ZWRDaG9pY2VzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgc2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2U6IGFueTtcclxuICB2aWV3TWVudUl0ZW1zOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFZpZXdNZW51SXRlbTogYW55IHwgbnVsbCA9IG51bGw7XHJcbiAgZ3JpZFR5cGU6IFRydURhdGFHcmlkVHlwZXMgPSBUcnVEYXRhR3JpZFR5cGVzLlNlYXJjaFxyXG4gIHVuc2F2ZWRFbnRpdGllczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGxvYWRlZEVudGl0aWVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgbGF0ZXN0U2V0dXBRdWVyeTogYW55O1xyXG4gIGZpcnN0U2VhcmNoUmFuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ3JpZE9wdGlvbnM6IGFueSA9IHtcclxuICAgIHJvd1NlbGVjdGlvbjogJ211bHRpcGxlJyxcclxuICAgIHJvd1N0eWxlOiB7IGJhY2tncm91bmQ6ICd3aGl0ZScgfSxcclxuICAgIHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgbG9hZGluZ092ZXJsYXlDb21wb25lbnQ6IFRydURhdGFHcmlkTG9hZGluZ092ZXJsYXksXHJcbiAgICBsb2FkaW5nT3ZlcmxheUNvbXBvbmVudFBhcmFtczoge1xyXG4gICAgICBsb2FkaW5nTWVzc2FnZTogJ1NlYXJjaGluZyAtIE9uZSBtb21lbnQgcGxlYXNlLi4uJyxcclxuICAgIH0sXHJcbiAgICBub1Jvd3NPdmVybGF5Q29tcG9uZW50OiBUcnVEYXRhR3JpZE5vUm93c092ZXJsYXksXHJcbiAgICBub1Jvd3NPdmVybGF5Q29tcG9uZW50UGFyYW1zOiB7XHJcbiAgICAgIG5vUm93c01lc3NhZ2VGdW5jOiAoKSA9PlxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RTZWFyY2hSYW4pXHJcbiAgICAgICAgICByZXR1cm4gJ1NvcnJ5IC0gbm8gcm93cyBmb3VuZCEnXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuICdDbGljayBzZWFyY2ggdG8gZGlzcGxheSByZXN1bHRzLidcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZWQ6IChwYXJhbXM6IGFueSkgPT4ge1xyXG5cclxuICAgIH0sXHJcbiAgICBvblJvd0RhdGFVcGRhdGVkOiAoKSA9PiB7XHJcbiAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLmVudGl0aWVzID0gdGhpcy5nZXRSb3dEYXRhKCk7XHJcbiAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLmFjdGlvblJlZnMgPSB0aGlzLmdldFJlZnMoKTtcclxuICAgIH0sXHJcbiAgICBvbkNlbGxFZGl0aW5nU3RvcHBlZDogKHBhcmFtczogYW55KSA9PiB7XHJcbiAgICAgIHBhcmFtcy5hcGkucmVmcmVzaENlbGxzKHtcclxuICAgICAgICBmb3JjZTogdHJ1ZSxcclxuICAgICAgICByb3dOb2RlczogW3BhcmFtcy5ub2RlXVxyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBvbkNlbGxWYWx1ZUNoYW5nZWQ6IChwYXJhbXM6IGFueSkgPT4ge1xyXG5cclxuICAgIH0sXHJcbiAgICBvbkdyaWRSZWFkeTogKGV2ZW50OiBHcmlkUmVhZHlFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLmFwaSA9IGV2ZW50LmFwaTtcclxuICAgIH1cclxuICB9XHJcbiAgcGFyZW50VG9vbGJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgYXBpITogR3JpZEFwaTtcclxuICBwcml2YXRlIHN1YnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIGlzQWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRhdGFDb250ZXh0OiBUcnVEYXRhQ29udGV4dCxcclxuICAgIHByaXZhdGUgc2VhcmNoUmVzdWx0Vmlld01hbmFnZXI6IFRydVNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyLFxyXG4gICAgcHJpdmF0ZSBhcHBFbnZpcm9ubWVudDogVHJ1QXBwRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIHNlYXJjaFZpZXdFdmVudEhhbmRsZXI6IFRydVNlYXJjaFZpZXdFdmVudEhhbmRsZXIsXHJcbiAgICBwcml2YXRlIHVpTm90aWZpY2F0aW9uOiBUcnVVaU5vdGlmaWNhdGlvbixcclxuICAgIHByaXZhdGUgY29ubmVjdGlvbkh1YjogVHJ1Q29ubmVjdGlvbkh1YixcclxuICAgIHByaXZhdGUgdXRpbDogVHJ1VXRpbCxcclxuICAgIHByaXZhdGUgYXBwOiBBcHBsaWNhdGlvblJlZixcclxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyB0YWJHcm91cEV2ZW50Tm90aWZpZXI6IFRydVRhYkdyb3VwRXZlbnROb3RpZmllcikge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbmhhbmNlUm93RGF0YUZvckVudGl0eSA9IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgbGV0IHJvd0RhdGEgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcucm93RGF0YUVuaGFuY2VyKGVudGl0eSk7XHJcbiAgICByb3dEYXRhLiRlbnRpdHkgPSBlbnRpdHk7XHJcbiAgICByZXR1cm4gcm93RGF0YTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHNldE5vUm93c1RlbXBsYXRlID0gKCkgPT4ge1xyXG4gICAgLy90aGlzLm5vUm93c1RlbXBsYXRlID0gYDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtcIj5ObyBkYXRhIGZvdW5kLjwvc3Bhbj5gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUbyA9ICgpID0+IHtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuYXBwRW52aXJvbm1lbnQub25TYXZlQ29tcGxldGUkLnBpcGUoc2tpcCgxKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50Py5zdWNjZXNzZnVsKVxyXG4gICAgICAgIHRoaXMuYXBpPy5yZWRyYXdSb3dzKCk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmFwcEVudmlyb25tZW50Lm9uUmV2ZXJ0Q29tcGxldGUkLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bCkge1xyXG4gICAgICAgIGxldCByb3dzVG9SZW1vdmU6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5yb3dEYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5yb3dEYXRhW2ldLiRlbnRpdHlbdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUubmFtZSArICdSZWYnXSA8IDApXHJcbiAgICAgICAgICAgIHJvd3NUb1JlbW92ZS5wdXNoKHRoaXMucm93RGF0YVtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpPy5hcHBseVRyYW5zYWN0aW9uKHsgcmVtb3ZlOiByb3dzVG9SZW1vdmUgfSk7XHJcbiAgICAgICAgdGhpcy5hcGk/LnJlZHJhd1Jvd3MoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuYXBwRW52aXJvbm1lbnQub25EZWxldGVDb21wbGV0ZSQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50Py5zdWNjZXNzZnVsICYmIGV2ZW50LmVudGl0aWVzICYmIGV2ZW50LmVudGl0aWVzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCByb3dzVG9SZW1vdmU6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5yb3dEYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gZXZlbnQuZW50aXRpZXMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucm93RGF0YVtpXS4kZW50aXR5ID09PSBldmVudC5lbnRpdGllc1tqXSlcclxuICAgICAgICAgICAgICByb3dzVG9SZW1vdmUucHVzaCh0aGlzLnJvd0RhdGFbaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaT8uYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogcm93c1RvUmVtb3ZlIH0pO1xyXG4gICAgICAgIHRoaXMuYXBpPy5yZWRyYXdSb3dzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuc2VhcmNoVmlld0V2ZW50SGFuZGxlci5vblNlYXJjaCgpLnBpcGUoc2tpcCgxKSkuc3Vic2NyaWJlKChzZXR1cFF1ZXJ5OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vblNlYXJjaChzZXR1cFF1ZXJ5KTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuY29uZmlnLnZpZXcub25BY3RpdmUoKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoaXNBY3RpdmU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgdGhpcy5pc0FjdGl2ZSA9IGlzQWN0aXZlO1xyXG4gICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLm1lbnVJdGVtc0VuYWJsZWQgPSAoKSA9PiB7IHJldHVybiB0aGlzLnJvd0RhdGEubGVuZ3RoOyB9O1xyXG4gICAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLmFjdGlvblJlZnMgPSB0aGlzLmdldFJlZnMoKTtcclxuICAgICAgICB0aGlzLmFwaS5yZWZyZXNoQ2VsbHMoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgaWYgKHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyLm9uQWN0aXZlU3RhdGVDaGFuZ2VkKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKGlzQWN0aXZlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5jb25uZWN0aW9uSHViLnN1YnNjcmliZShcclxuICAgICAgdGhpcy5kYXRhQ29udGV4dCxcclxuICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsXHJcbiAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUsXHJcbiAgICAgIHRoaXMuYWRkRW50aXR5LFxyXG4gICAgICB0aGlzLmdldFJvd0RhdGEsXHJcbiAgICAgICgpID0+IHsgcmV0dXJuIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSB9LFxyXG4gICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZXhwYW5kcyxcclxuICAgICAgW10sXHJcbiAgICAgICgpID0+IHsgcmV0dXJuIHRydWU7IH0pLnN1YnNjcmliZSgoZGF0YUNoYW5nZTogVHJ1RGF0YUNoYW5nZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzLnB1c2goZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnZpZXcuYWN0aXZlKSB7XHJcbiAgICAgICAgbGV0IGtleVNlcXVlbmNlID0gdGhpcy51dGlsLmdldEtleVNlcXVlbmNlKGV2ZW50KTtcclxuICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK2knIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStpJykgeyBcclxuICAgICAgICAgIHRoaXMub25BZGQoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwrZCcgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK2QnKSB7IFxyXG4gICAgICAgICAgdGhpcy5vbkRlbGV0ZSgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtrJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGEraycpIHsgXHJcbiAgICAgICAgICB0aGlzLm9uS2VlcCgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtyJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGErcicpIHtcclxuICAgICAgICAgIHRoaXMub25SZW1vdmUoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0YXJnZXRJc0NvbnRyb2wgPSB0aGlzLnV0aWwudGFyZ2V0SXNDb250cm9sKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRJc0NvbnRyb2wgJiYgZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkpXHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlZnMgPSAoKTogc3RyaW5nID0+IHtcclxuICAgIGxldCByb3dOb2RlczogYW55ID0gW107XHJcbiAgICB0aGlzLmFwaT8uZm9yRWFjaE5vZGUoKHJvd05vZGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByb3dOb2Rlcy5wdXNoKHJvd05vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgcmVmcyA9IF8ubWFwKHJvd05vZGVzLCAocm93Tm9kZSkgPT4geyByZXR1cm4gcm93Tm9kZS5kYXRhLiRlbnRpdHlbdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUubmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICByZXR1cm4gcmVmcy5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvd0RhdGEgPSAoKSA9PiB7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gW107XHJcbiAgICB0aGlzLmFwaT8uZm9yRWFjaE5vZGUoKHJvd05vZGU6IGFueSkgPT4ge1xyXG4gICAgICBkYXRhLnB1c2gocm93Tm9kZS5kYXRhLiRlbnRpdHkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9IFxyXG5cclxuICBwcml2YXRlIGxvYWRHcmlkRGF0YSA9IChlbnRpdGllczogQXJyYXk8YW55PikgPT4ge1xyXG4gICAgdGhpcy5yb3dEYXRhID0gZW50aXRpZXMubWFwKHRoaXMuZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHksIGVudGl0aWVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZE1hbnlUb01hbnlHcmlkRGF0YSA9IChhc3NvY2lhdGVkRW50aXRpZXM6IEFycmF5PGFueT4sIGFzc29jaWF0YWJsZUVudGl0aWVzOiBBcnJheTxhbnk+LCBpbml0YWxMb2FkOiBib29sZWFuKSA9PiB7XHJcbiAgICBpZiAoaW5pdGFsTG9hZClcclxuICAgICAgdGhpcy5yb3dEYXRhID0gYXNzb2NpYXRlZEVudGl0aWVzLm1hcCh0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5LCBhc3NvY2lhdGVkRW50aXRpZXMpO1xyXG4gICAgZWxzZVxyXG4gICAgICBhc3NvY2lhdGVkRW50aXRpZXMgPSB0aGlzLnJvd0RhdGEubWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIGUuJGVudGl0eSB9KTtcclxuICAgIGxldCBhc3NvY2lhdGFibGVUeXBlTmFtZSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZS5uYW1lXHJcbiAgICBsZXQgYXNzb2NpYXRhYmxlVHlwZU5hbWVXaXRoUHJlZml4ID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlTmFtZVdpdGhQcmVmaXhcclxuICAgIGxldCBhc3NvY2lhdGVkTWFwT2ZBc3NvY2lhdGFibGUgPSBfLm1hcChhc3NvY2lhdGVkRW50aXRpZXMsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlWydvJyArIGFzc29jaWF0YWJsZVR5cGVOYW1lV2l0aFByZWZpeF07IH0pO1xyXG4gICAgdGhpcy51bmFzc29jaWF0ZWRDaG9pY2VzID0gYXNzb2NpYXRhYmxlRW50aXRpZXMuZmlsdGVyKG9iamVjdDEgPT4ge1xyXG4gICAgICByZXR1cm4gIWFzc29jaWF0ZWRNYXBPZkFzc29jaWF0YWJsZS5zb21lKG9iamVjdDIgPT4geyByZXR1cm4gb2JqZWN0MS52YWx1ZS4kID09PSBvYmplY3QyW2Fzc29jaWF0YWJsZVR5cGVOYW1lICsgJ1JlZiddOyB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnREYXRhID0gKCkgPT4ge1xyXG4gICAgdGhpcy51aU5vdGlmaWNhdGlvbi5zaG93RXhwb3J0RGlhbG9nKCkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmICghcmVzdWx0KSByZXR1cm47XHJcbiAgICAgIGxldCBleHBvcnRHcmlkU3BlYztcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlKVxyXG4gICAgICAgIGV4cG9ydEdyaWRTcGVjID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLm5hbWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBleHBvcnRHcmlkU3BlYyA9ICckY3VzdG9tPScgKyAxO1xyXG5cclxuICAgICAgdGhpcy5kYXRhQ29udGV4dFxyXG4gICAgICAgIC5lbnRpdHlBY2Nlc3MoKVxyXG4gICAgICAgIC5leHBvcnQodGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsIGV4cG9ydEdyaWRTcGVjLCB0aGlzLmxhdGVzdFNldHVwUXVlcnksIHRoaXMuZ2V0UmVmcygpLCByZXN1bHQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU3VwcHJlc3NLZXlib2FyZEV2ZW50ID0gKHBhcmFtczogU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zKTogYm9vbGVhbiA9PiB7XHJcbiAgICBsZXQgaXNUYWJLZXkgPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnVGFiJztcclxuICAgIGxldCBpc0Fycm93RG93biA9IHBhcmFtcy5ldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nO1xyXG4gICAgbGV0IGlzQXJyb3dVcCA9IHBhcmFtcy5ldmVudC5rZXkgPT09ICdBcnJvd1VwJztcclxuICAgIGxldCBpc0Fycm93TGVmdCA9IHBhcmFtcy5ldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnO1xyXG4gICAgbGV0IGlzQXJyb3dSaWdodCA9IHBhcmFtcy5ldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JztcclxuICAgIGxldCBpc1NoaWZ0S2V5ID0gcGFyYW1zLmV2ZW50LnNoaWZ0S2V5O1xyXG4gICAgbGV0IGlzQWx0S2V5ID0gcGFyYW1zLmV2ZW50LmFsdEtleTtcclxuXHJcbiAgICBsZXQgZm9jdXNlZENlbGwgPSBwYXJhbXMuYXBpLmdldEZvY3VzZWRDZWxsKCk7XHJcbiAgICBsZXQgaGFzQ2hvaWNlcyA9IHBhcmFtcy5kYXRhW3BhcmFtcy5jb2x1bW4uZ2V0Q29sSWQoKV0gJiYgcGFyYW1zLmRhdGFbcGFyYW1zLmNvbHVtbi5nZXRDb2xJZCgpXS5jaG9pY2VzID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIGlmIChwYXJhbXMuY29sdW1uLmlzUGlubmVkKCkpIHtcclxuICAgICAgaWYgKGlzVGFiS2V5ICYmICFpc1NoaWZ0S2V5KVxyXG4gICAgICAgIHBhcmFtcy5hcGkudGFiVG9OZXh0Q2VsbCgpO1xyXG4gICAgICBlbHNlIGlmIChpc1RhYktleSAmJiBpc1NoaWZ0S2V5KVxyXG4gICAgICAgIHBhcmFtcy5hcGkudGFiVG9QcmV2aW91c0NlbGwoKTtcclxuICAgICAgZWxzZSBpZiAoaXNBcnJvd0xlZnQpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb1ByZXZpb3VzQ2VsbCgpO1xyXG4gICAgICBlbHNlIGlmIChpc0Fycm93UmlnaHQpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb05leHRDZWxsKCk7XHJcbiAgICAgIHRoaXMuYXBpLnN0b3BFZGl0aW5nKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzQ2hvaWNlcyAmJiBpc0FsdEtleSAmJiAoaXNBcnJvd0Rvd24gfHwgaXNBcnJvd1VwKSkge1xyXG4gICAgICBwYXJhbXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHBhcmFtcy5hcGkuc3RhcnRFZGl0aW5nQ2VsbCh7XHJcbiAgICAgICAgcm93SW5kZXg6IGZvY3VzZWRDZWxsPy5yb3dJbmRleCBhcyBudW1iZXIsXHJcbiAgICAgICAgY29sS2V5OiBmb2N1c2VkQ2VsbD8uY29sdW1uIGFzIENvbHVtbixcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgYWRkRW50aXR5ID0gKG5ld0VudGl0eTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5lbnRpdHkpIHtcclxuICAgICAgbGV0IHBhcmVudE5hbWUgPSB0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICBuZXdFbnRpdHlbcGFyZW50TmFtZSArICdSZWYnXSA9IHRoaXMuZW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ107XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55KSB7XHJcbiAgICAgIGxldCBwYXJlbnROYW1lID0gdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZTtcclxuICAgICAgbGV0IHVuYXNzb2NpYXRlZFR5cGUgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGU7XHJcbiAgICAgIGxldCByZWYgPSB0aGlzLnNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlLnZhbHVlLiQ7XHJcbiAgICAgIGxldCBjaGlsZFRvQXNzb2NpYXRlID0gdGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2hCeVJlZkNhY2hlT25seSh1bmFzc29jaWF0ZWRUeXBlLCByZWYsIHRydWUpXHJcbiAgICAgIGlmIChjaGlsZFRvQXNzb2NpYXRlKSB7XHJcbiAgICAgICAgbGV0IGVuaGFuY2VkRW50aXR5ID0gdGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eShuZXdFbnRpdHkpO1xyXG4gICAgICAgIGVuaGFuY2VkRW50aXR5LiRlbnRpdHlbdW5hc3NvY2lhdGVkVHlwZS5uYW1lICsgJ1JlZiddID0gY2hpbGRUb0Fzc29jaWF0ZVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ107XHJcbiAgICAgICAgZW5oYW5jZWRFbnRpdHkuJGVudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddID0gdGhpcy5lbnRpdHlbcGFyZW50TmFtZSArICdSZWYnXTtcclxuICAgICAgICAvLyByZW1vdmUgaXRlbSBmcm9tIHRoZSBhZGQgZHJvcGRvd24gY29udHJvbFxyXG4gICAgICAgIGxldCBpdGVtSW5kZXggPSB0aGlzLnVuYXNzb2NpYXRlZENob2ljZXMuZmluZEluZGV4KChjaG9pY2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiBjaG9pY2VbdW5hc3NvY2lhdGVkVHlwZS5uYW1lICsgJ1JlZiddID09PSBjaGlsZFRvQXNzb2NpYXRlW3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVuYXNzb2NpYXRlZENob2ljZXMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XHJcbiAgICAgICAgLy8gY2xlYXIgYWRkIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgLy8gYWRkIHJvdyB0byBncmlkXHJcbiAgICAgICAgdGhpcy51bnNhdmVkRW50aXRpZXMucHVzaChlbmhhbmNlZEVudGl0eSk7XHJcbiAgICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZDogW2VuaGFuY2VkRW50aXR5XSwgYWRkSW5kZXg6IDAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBlbmhhbmNlZEVudGl0eSA9IHRoaXMuZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHkobmV3RW50aXR5KTtcclxuICAgICAgdGhpcy5yb3dEYXRhLnVuc2hpZnQoZW5oYW5jZWRFbnRpdHkpO1xyXG4gICAgICB0aGlzLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkOiBbZW5oYW5jZWRFbnRpdHldLCBhZGRJbmRleDogMCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWVyZ2VEYXRhID0gKGNvbmZpZzogVHJ1TGlzdENvbnRyb2xDb25maWdCYXNlPGFueT4sIGVudGl0eVRvVmFsaWRhdGU6IGFueSk6IFRydU1lcmdlRGF0YVNldCB8IG51bGwgPT4ge1xyXG4gICAgaWYgKGNvbmZpZy5wcm9wZXJ0eVBhdGg/LmluY2x1ZGVzKCcvJykpIHtcclxuICAgICAgbGV0IHByb3BlcnR5TmFtZVBhcnRzID0gY29uZmlnLnByb3BlcnR5UGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICBwcm9wZXJ0eU5hbWVQYXJ0cy5wb3AoKTtcclxuICAgICAgbGV0IHRhcmdldFByb3BlcnR5OiBhbnk7XHJcbiAgICAgIHByb3BlcnR5TmFtZVBhcnRzLmZvckVhY2goKG5hbWUpID0+IHtcclxuICAgICAgICBpZiAoIXRhcmdldFByb3BlcnR5KSB7XHJcbiAgICAgICAgICBsZXQgdGFyZ2V0UHJvcGVydHlOYW1lID0gJ28nICsgbmFtZSBhcyBrZXlvZiB0eXBlb2YgZW50aXR5VG9WYWxpZGF0ZTtcclxuICAgICAgICAgIHRhcmdldFByb3BlcnR5ID0gZW50aXR5VG9WYWxpZGF0ZVt0YXJnZXRQcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdGFyZ2V0UHJvcGVydHlOYW1lID0gJ28nICsgbmFtZSBhcyBrZXlvZiB0eXBlb2YgZW50aXR5VG9WYWxpZGF0ZTtcclxuICAgICAgICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0UHJvcGVydHlbdGFyZ2V0UHJvcGVydHlOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuTWVyZ2VfRGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0YXJnZXRQcm9wZXJ0eS5NZXJnZV9EYXRhX1NldDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBlbnRpdHlUb1ZhbGlkYXRlLk1lcmdlX0RhdGFfU2V0Py5nZXQoY29uZmlnLnByb3BlcnR5TmFtZSBhcyBzdHJpbmcpID8gZW50aXR5VG9WYWxpZGF0ZS5NZXJnZV9EYXRhX1NldCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGlvbkRpYWxvZzogQ29tcG9uZW50UmVmPFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgYWRkVmFsaWRhdGlvbkRpYWxvZyA9IChjb25maWc6IFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nQ29uZmlnLCBob3N0RWxlbWVudDogYW55KSA9PiB7XHJcbiAgICBsZXQgdGFyZ2V0ID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpYWxvZy10YXJnZXQnKVswXTtcclxuICAgIGxldCBkaWFsb2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaWFsb2dFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ludmFsaWQnKTtcclxuICAgIHRhcmdldC5hcHBlbmRDaGlsZChkaWFsb2dFbGVtZW50KTtcclxuICAgIGxldCBjb21wb25lbnRSZWYgPSBjcmVhdGVDb21wb25lbnQ8VHJ1R3JpZFZhbGlkYXRpb25EaWFsb2c+KFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nLCB7XHJcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuYXBwLmluamVjdG9yLFxyXG4gICAgICBob3N0RWxlbWVudDogZGlhbG9nRWxlbWVudCxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBjb25maWc7XHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5hcGkucmVmcmVzaENlbGxzKHsgZm9yY2U6IHRydWUgfSk7XHJcbiAgICAgIGNvbXBvbmVudFJlZi5kZXN0cm95KClcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRGlhbG9nID0gY29tcG9uZW50UmVmO1xyXG4gICAgdGhpcy5hcHAuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2FpdEZvckdyaWRBcGkgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcclxuICAgIHZhciBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuYXBpKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XHJcbiAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgfVxyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcnVuU2VhcmNoID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy53YWl0Rm9yR3JpZEFwaSgoKSA9PiB7XHJcbiAgICAgIGxldCBjb250YWluZXJJc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllciAhPT0gbnVsbClcclxuICAgICAgICBjb250YWluZXJJc0FjdGl2ZSA9IHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyLmlzQWN0aXZlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgY29udGFpbmVySXNBY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKChcclxuICAgICAgICB0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbCB8fFxyXG4gICAgICAgIHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSB8fFxyXG4gICAgICAgIHRoaXMuY29uZmlnLm5vUXVlcnkpICYmXHJcbiAgICAgICAgY29udGFpbmVySXNBY3RpdmUpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcubm9RdWVyeSlcclxuICAgICAgICAgIHRoaXMub25TZWFyY2gobnVsbCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaCh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuc2V0dXBRdWVyeSh0aGlzLmVudGl0eSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UHJvcGVydHlQYXRoUGFydHMgPSAocHJvcGVydHlQYXRoOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBsYXN0SW5kZXggPSBwcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoJy4nKTtcclxuICAgIHByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aC5zbGljZSgwLCBsYXN0SW5kZXgpO1xyXG4gICAgcmV0dXJuIHByb3BlcnR5UGF0aC5zcGxpdCgnLicpO1xyXG4gIH1cclxuXHJcbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgc3VwcHJlc3NLZXlib2FyZEV2ZW50OiB0aGlzLm9uU3VwcHJlc3NLZXlib2FyZEV2ZW50XHJcbiAgfTtcclxuXHJcbiAgZ2V0Um93Q291bnQgPSAoKSA9PiB7XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgdGhpcy5hcGk/LmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXIoKCkgPT4gY291bnQrKyk7XHJcbiAgICByZXR1cm4gJ1Jvd3M6ICcgKyBjb3VudDtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUm93Q291bnQgPSAoKSA9PiB7XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgY291bnQgPSB0aGlzLmFwaT8uZ2V0U2VsZWN0ZWRSb3dzKCkubGVuZ3RoO1xyXG4gICAgcmV0dXJuICdTZWxlY3RlZDogJyArIGNvdW50O1xyXG4gIH1cclxuXHJcbiAgb25Sb3dEYXRhQ2hhbmdlZCA9IChkYXRhOiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLnJvd0RhdGEgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZXROb1Jvd3NUZW1wbGF0ZSgpO1xyXG4gICAgICB0aGlzLmFwaS5zaG93Tm9Sb3dzT3ZlcmxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsQ2xpY2tlZCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBpZiAoIWV2ZW50LmNvbHVtbi5jb2xEZWYucGlubmVkKSB7XHJcbiAgICAgIHRoaXMuYXBpLmRlc2VsZWN0QWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNlbGxEb3VibGVDbGlja2VkID0gKGdyaWRDb25maWc6IGFueSkgPT4ge1xyXG4gICAgaWYgKGdyaWRDb25maWcuY29sRGVmLmNlbGxDbGFzcyA9PT0gJ2FnLXBrLWFsaWduZWQtY2VsbCcpXHJcbiAgICAgIHRoaXMuY29uZmlnLnJvd0hlYWRlckRvdWJsZUNsaWNrZWQoZ3JpZENvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBvbkNlbGxLZXlEb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIGlmICghZXZlbnQuZXZlbnQpIHJldHVybjtcclxuICAgIGNvbnN0IGtleSA9IChldmVudC5ldmVudCBhcyB1bmtub3duKSBhcyBLZXlib2FyZEV2ZW50O1xyXG4gICAgaWYgKGtleS5jb2RlID09PSAnU3BhY2UnKSB7XHJcbiAgICAgIGtleS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBrZXkuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuYXBpPy5zdGFydEVkaXRpbmdDZWxsKHtcclxuICAgICAgICByb3dJbmRleDogZXZlbnQucm93SW5kZXgsXHJcbiAgICAgICAgY29sS2V5OiBldmVudC5jb2x1bW4uZ2V0Q29sSWQoKSxcclxuICAgICAgICBrZXk6IGtleS5jb2RlXHJcbiAgICAgIH0pO1xyXG4gICAgfSBcclxuICB9XHJcblxyXG4gIG9uQ2VsbE1vdXNlT3ZlcihlOiBhbnkpIHtcclxuICAgIGlmIChlLmRhdGEuJGVudGl0eS5lbnRpdHlBc3BlY3QuaGFzVmFsaWRhdGlvbkVycm9ycykge1xyXG4gICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGUuZXZlbnQudGFyZ2V0O1xyXG4gICAgICBpZiAoIXRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZy1jZWxsJykpXHJcbiAgICAgICAgdGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQuY2xvc2VzdCgnLmFnLWNlbGwnKTtcclxuICAgICAgaWYgKHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbnZhbGlkJykpIHtcclxuICAgICAgICBsZXQgZmllbGROYW1lID0gZS5jb2xEZWYuZmllbGQ7XHJcbiAgICAgICAgbGV0IHByb3BlcnR5Q29uZmlnID0gZS5kYXRhW2ZpZWxkTmFtZV07XHJcblxyXG4gICAgICAgIGxldCBwcm9wZXJ0eVBhdGhQYXJ0czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAocHJvcGVydHlDb25maWcucHJvcGVydHlQYXRoLmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgICAgIHByb3BlcnR5UGF0aFBhcnRzID0gdGhpcy5nZXRQcm9wZXJ0eVBhdGhQYXJ0cyhwcm9wZXJ0eUNvbmZpZy5wcm9wZXJ0eVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGVudGl0eVRvVmFsaWRhdGUgPSBwcm9wZXJ0eVBhdGhQYXJ0cy5sZW5ndGggPyBwcm9wZXJ0eVBhdGhQYXJ0cy5yZWR1Y2UoKHA6IGFueSwgYzogYW55KSA9PiBwICYmIHBbY10gfHwgbnVsbCwgZS5kYXRhLiRlbnRpdHkpIDogZS5kYXRhLiRlbnRpdHk7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRpb25FcnJvcnNGb3JQcm9wZXJ0eSA9IHRoaXMuZGF0YUNvbnRleHQuZ2V0VmFsaWRhdGlvbkVycm9yc0ZvclByb3BlcnR5KGVudGl0eVRvVmFsaWRhdGUsIHByb3BlcnR5Q29uZmlnLnByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRpb25FcnJvcnNNZXNzYWdlc0ZvclByb3BlcnR5ID0gdGhpcy5kYXRhQ29udGV4dC5wYXJzZUVycm9yTWVzc2FnZXModmFsaWRhdGlvbkVycm9yc0ZvclByb3BlcnR5KTtcclxuXHJcbiAgICAgICAgbGV0IHZhbGlkYXRpb25EaWFsb2dDb25maWcgPSBuZXcgVHJ1R3JpZFZhbGlkYXRpb25EaWFsb2dDb25maWcoZW50aXR5VG9WYWxpZGF0ZSwgcHJvcGVydHlDb25maWcsIGZhbHNlKTtcclxuICAgICAgICB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnLmVycm9yTXNnID0gdmFsaWRhdGlvbkVycm9yc01lc3NhZ2VzRm9yUHJvcGVydHk7XHJcbiAgICAgICAgdmFsaWRhdGlvbkRpYWxvZ0NvbmZpZy5tZXJnZURhdGEgPSB0aGlzLmdldE1lcmdlRGF0YShwcm9wZXJ0eUNvbmZpZywgZW50aXR5VG9WYWxpZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uRGlhbG9nKHZhbGlkYXRpb25EaWFsb2dDb25maWcsIHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy52YWxpZGF0aW9uRGlhbG9nKVxyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkRpYWxvZy5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNlbGxNb3VzZU91dChlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25EaWFsb2cpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkRpYWxvZy5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCA9IChzZXR1cFF1ZXJ5OiBhbnkpID0+IHtcclxuICAgIHRoaXMuZmlyc3RTZWFyY2hSYW4gPSB0cnVlO1xyXG4gICAgdGhpcy5hcGkuaGlkZU92ZXJsYXkoKTtcclxuICAgIHRoaXMuYXBpLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xyXG5cclxuICAgIGxldCBlbnRpdHlMb2FkZWQgPSB0aGlzLmxvYWRlZEVudGl0aWVzLnNvbWUoKHJlZikgPT4geyByZXR1cm4gcmVmID09PSB0aGlzLmVudGl0eVt0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lICsgJ1JlZiddOyB9KTtcclxuICAgIGxldCBqb2lucyA9IFtdO1xyXG4gICAgaWYgKGVudGl0eUxvYWRlZCkge1xyXG4gICAgICBqb2lucy5wdXNoKHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoQ2FjaGVPbmx5KFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLFxyXG4gICAgICAgIHNldHVwUXVlcnksXHJcbiAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmV4cGFuZHMpKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkgJiYgdGhpcy5jb25maWcudGFibGVDb25maWcuY2FuQWRkKVxyXG4gICAgICAgIGpvaW5zLnB1c2godGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2hRdWVyeUNob2ljZXMoXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGUsXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcubWFueVRvTWFueVNldHVwUXVlcnkodGhpcy5lbnRpdHkpLCBudWxsLCBmYWxzZSkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBqb2lucy5wdXNoKHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLFxyXG4gICAgICAgIHNldHVwUXVlcnksXHJcbiAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmV4cGFuZHMsIGZhbHNlKSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55ICYmIHRoaXMuY29uZmlnLnRhYmxlQ29uZmlnLmNhbkFkZClcclxuICAgICAgICBqb2lucy5wdXNoKHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoUXVlcnlDaG9pY2VzKFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlLFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLm1hbnlUb01hbnlTZXR1cFF1ZXJ5KHRoaXMuZW50aXR5KSwgbnVsbCwgdHJ1ZSkpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sYXRlc3RTZXR1cFF1ZXJ5ID0gc2V0dXBRdWVyeTtcclxuXHJcbiAgICBmb3JrSm9pbihqb2lucykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogcmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXROb1Jvd3NUZW1wbGF0ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpXHJcbiAgICAgICAgICB0aGlzLmxvYWRNYW55VG9NYW55R3JpZERhdGEocmVzdWx0c1swXSwgcmVzdWx0c1sxXSwgdHJ1ZSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5sb2FkR3JpZERhdGEocmVzdWx0c1swXSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgIT09IFRydURhdGFHcmlkVHlwZXMuU2VhcmNoKVxyXG4gICAgICAgICAgdGhpcy5sb2FkZWRFbnRpdGllcy5wdXNoKHRoaXMuZW50aXR5W3RoaXMuZW50aXR5LmNvbnN0cnVjdG9yLm5hbWUgKyAnUmVmJ10pO1xyXG4gICAgICAgIHRoaXMuYXBpLmhpZGVPdmVybGF5KCk7XHJcbiAgICAgICAgaWYgKHRoaXMucm93RGF0YSA9PT0gbnVsbCB8fCAhdGhpcy5yb3dEYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5hcGkuc2hvd05vUm93c092ZXJsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25VbmFzc29jaWF0ZWRDaG9pY2VDaGFuZ2VkID0gKG9wdGlvbjogSVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbiB8IG51bGwpID0+IHt9XHJcbiAgb25TZWxlY3RlZFJlcG9ydENoYW5nZWQgPSAoZXZlbnQ6IGFueSkgPT4ge31cclxuXHJcbiAgY2FuQWRkID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpXHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlICE9PSB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQWRkID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5hZGRFbnRpdHkodGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5hZGQodGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUpKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgaWYgKHNlbGVjdGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGVudGl0aWVzID0gc2VsZWN0ZWRSb3dzLm1hcChmdW5jdGlvbiAocm93OiBhbnkpIHsgcmV0dXJuIHJvdy4kZW50aXR5OyB9KTtcclxuICAgICAgbGV0IGNvbmZpcm1Nc2cgPSB0aGlzLmFwcEVudmlyb25tZW50LmZvcm1hdERlbGV0ZUNvbmZpcm1hdGlvbk1lc3NhZ2UodGhpcy5jb25maWcudGFibGVOYW1lLCB0aGlzLmNvbmZpZy50YWJsZVBsdXJhbExhYmVsLCBzZWxlY3RlZFJvd3MubGVuZ3RoKTtcclxuICAgICAgbGV0IG9uU3VjY2VzcyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2godGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnNldHVwUXVlcnkodGhpcy5lbnRpdHkpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFDb250ZXh0LmRlbGV0ZShlbnRpdGllcywgY29uZmlybU1zZywgb25TdWNjZXNzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudWlOb3RpZmljYXRpb24ud2FybmluZyh0aGlzLmFwcEVudmlyb25tZW50Lm1zZ05vUmVjb3Jkc1NlbGVjdGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uS2VlcCA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgdGhpcy5hcGkuc2VsZWN0QWxsKCk7XHJcbiAgICBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5yb3dEYXRhID0gW107XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuZXhwb3J0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvKCk7XHJcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmxhYmVsOyBcclxuICAgIHRoaXMuY29sdW1uRGVmcyA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5jb2x1bW5EZWZzO1xyXG4gICAgdGhpcy5ncmlkVHlwZSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5ncmlkVHlwZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vc2V0VGltZW91dCB0byBwcmV2ZW50OiBFUlJPUiBFcnJvcjogTkcwMTAwOiBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yLiBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhcmVudFRvb2xiYXJUZW1wbGF0ZSA9IHRoaXMuc2VhcmNoUmVzdWx0Vmlld01hbmFnZXIuc2VhcmNoVmlld1Rvb2xiYXJUZW1wbGF0ZTtcclxuICAgICAgdGhpcy5jb25maWcudmlld01lbnVDb25maWcubWVudUl0ZW1zRW5hYmxlZCA9ICgpID0+IHsgcmV0dXJuIHRoaXMucm93RGF0YS5sZW5ndGg7IH07XHJcbiAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLmFsbE1lbnVzKCkuc3Vic2NyaWJlKChtZW51OiBhbnkpID0+IHsgdGhpcy52aWV3TWVudUl0ZW1zID0gbWVudTsgfSk7XHJcbiAgICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzc109XCJ7J3RydS1kYXRhLWdyaWQtbGFiZWwtb2Zmc2V0JzogbGFiZWx9XCI+XHJcbiAgPHNwYW4gY2xhc3M9XCJ0cnUtZGF0YS1ncmlkLWxhYmVsXCIgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvc3Bhbj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC10b29sYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgPHRydS10b29sYmFyPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItZHJvcGRvd24gW29wdGlvbnNdPVwidW5hc3NvY2lhdGVkQ2hvaWNlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkT3B0aW9uKV09XCJzZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY29uZmlnLnRhYmxlQ29uZmlnLmNhbkFkZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVW5hc3NvY2lhdGVkQ2hvaWNlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55XCI+XHJcbiAgICAgIDwvdHJ1LXRvb2xiYXItZHJvcGRvd24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWFkZC1pY29uJ1wiIFt0b29sdGlwXT1cIidBZGQgLSBbQ3RybCArIEldJ1wiIFtkaXNhYmxlZF09XCIhY2FuQWRkKClcIiAob25DbGljayk9XCJvbkFkZCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWRlbGV0ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidEZWxldGUgLSBbQ3RybCArIERdJ1wiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWtlZXAtaWNvbidcIiBbdG9vbHRpcF09XCInS2VlcCBzZWxlY3RlZCByZWNvcmRzIC0gW0N0cmwgKyBLXSdcIiAoY2xpY2spPVwib25LZWVwKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcmVtb3ZlLWljb24nXCIgW3Rvb2x0aXBdPVwiJ1JlbW92ZSBzZWxlY3RlZCByZWNvcmRzIC0gW0N0cmwgKyBSXSdcIiAoY2xpY2spPVwib25SZW1vdmUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItc2VwYXJhdG9yICpuZ0lmPVwicGFyZW50VG9vbGJhclRlbXBsYXRlXCI+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYXJlbnRUb29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvcj48L3RydS10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItZXhwb3J0LWljb24nXCIgW3Rvb2x0aXBdPVwiJ0V4cG9ydCdcIiAoY2xpY2spPVwib25FeHBvcnQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItc2VwYXJhdG9yICpuZ0lmPVwidmlld01lbnVJdGVtcy5sZW5ndGhcIj48L3RydS10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZpZXdNZW51SXRlbXMubGVuZ3RoXCI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLW1lbnUgKm5nRm9yPVwibGV0IHZpZXdNZW51SXRlbSBvZiB2aWV3TWVudUl0ZW1zXCIgW2NvbmZpZ109XCJ2aWV3TWVudUl0ZW1cIj48L3RydS10b29sYmFyLW1lbnU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90cnUtdG9vbGJhcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1jb250YWluZXJcIj5cclxuICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCIyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dCdWZmZXJdPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZW50ZXJOYXZpZ2F0ZXNWZXJ0aWNhbGx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZW50ZXJOYXZpZ2F0ZXNWZXJ0aWNhbGx5QWZ0ZXJFZGl0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3VwcHJlc3NSb3dIb3ZlckhpZ2hsaWdodF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N0b3BFZGl0aW5nV2hlbkNlbGxzTG9zZUZvY3VzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxDbGlja2VkKT1cIm9uQ2VsbENsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJvbkNlbGxEb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbEtleURvd24pPVwib25DZWxsS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKHJvd0RhdGFDaGFuZ2VkKT1cIm9uUm93RGF0YUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsTW91c2VPdmVyKT1cIm9uQ2VsbE1vdXNlT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxNb3VzZU91dCk9XCJvbkNlbGxNb3VzZU91dCgkZXZlbnQpXCI+XHJcbiAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItdmFsdWVzLWNvbnRhaW5lclwiPlxyXG4gICAgICA8cCBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy10ZXh0XCI+e3tnZXRSb3dDb3VudCgpfX08L3A+XHJcbiAgICAgIDxwIGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItdmFsdWVzLXRleHRcIj57e2dldFNlbGVjdGVkUm93Q291bnQoKX19PC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
555
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRhdGEtZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUMsU0FBUyxFQUFnQixLQUFLLEVBQXFCLFFBQVEsRUFBOEIsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNMLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFhaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFNUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2xILE1BQU0sT0FBTyxXQUFXO0lBa0VaO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDVztJQXpFWixNQUFNLENBQXNCO0lBQzVCLE1BQU0sQ0FBTztJQUNiLElBQUksQ0FBTztJQUVwQixnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUVwQyxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBUSxFQUFFLENBQUM7SUFDckIs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QUUsTUFBTSxFQUFDOzswQkE0RXBDLFFBQVE7eUNBekVGLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQXBwbGljYXRpb25SZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIGNyZWF0ZUNvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbiwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQsIFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcyB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgZnJvbUV2ZW50LCBza2lwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAndW5kZXJzY29yZSc7XHJcbmltcG9ydCB7IFRydUxpc3RDb250cm9sQ29uZmlnQmFzZSB9IGZyb20gJy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtbGlzdC1jb250cm9sLWNvbmZpZy1iYXNlJztcclxuaW1wb3J0IHsgVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2Jhc2Utdmlld3Mvc2VhcmNoL3NlcnZpY2VzL3RydS1zZWFyY2gtdmlldy1ldmVudC1oYW5kbGVyJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNoYW5nZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdHJ1LWRhdGEtY2hhbmdlJztcclxuaW1wb3J0IHsgVHJ1TWVyZ2VEYXRhU2V0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90cnUtbWVyZ2UtZGF0YS1zZXQnO1xyXG5pbXBvcnQgeyBUcnVBcHBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1hcHAtZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBUcnVDb25uZWN0aW9uSHViIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWNvbm5lY3Rpb24taHViJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcclxuaW1wb3J0IHsgVHJ1U2VhcmNoUmVzdWx0Vmlld01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtc2VhcmNoLXJlc3VsdC12aWV3LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVVaU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS11aS1ub3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBUcnVVdGlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXV0aWwnO1xyXG5pbXBvcnQgeyBUcnVUYWJHcm91cEV2ZW50Tm90aWZpZXIgfSBmcm9tICcuLi9sYXlvdXQvdGFiL3NlcnZpY2VzL3RydS10YWItZ3JvdXAtZXZlbnQtbm90aWZpZXInO1xyXG5pbXBvcnQgeyBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi4vdG9vbGJhci9jbGFzc2VzL3RydS10b29sYmFyLWRyb3Bkb3duLW9wdGlvbic7XHJcbmltcG9ydCB7IFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nIH0gZnJvbSAnLi4vZ3JpZC12YWxpZGF0aW9uLWRpYWxvZy90cnUtZ3JpZC12YWxpZGF0aW9uLWRpYWxvZyc7XHJcbmltcG9ydCB7IFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nQ29uZmlnIH0gZnJvbSAnLi4vZ3JpZC12YWxpZGF0aW9uLWRpYWxvZy90cnUtZ3JpZC12YWxpZGF0aW9uLWRpYWxvZy1jb25maWcnO1xyXG5pbXBvcnQgeyBJVHJ1RGF0YUdyaWRDb25maWcgfSBmcm9tICcuL2NsYXNzZXMvdHJ1LWRhdGEtZ3JpZC1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVEYXRhR3JpZFR5cGVzIH0gZnJvbSAnLi9lbnVtcy90cnUtZGF0YS1ncmlkLXR5cGVzJztcclxuaW1wb3J0IHsgVHJ1RGF0YUdyaWRMb2FkaW5nT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheXMvdHJ1LWRhdGEtZ3JpZC1sb2FkaW5nLW92ZXJsYXkvdHJ1LWRhdGEtZ3JpZC1sb2FkaW5nLW92ZXJsYXknO1xyXG5pbXBvcnQgeyBUcnVEYXRhR3JpZE5vUm93c092ZXJsYXkgfSBmcm9tICcuL292ZXJsYXlzL3RydS1kYXRhLWdyaWQtbm8tcm93cy1vdmVybGF5L3RydS1kYXRhLWdyaWQtbm8tcm93cy1vdmVybGF5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1LWRhdGEtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1kYXRhLWdyaWQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWRhdGEtZ3JpZC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGhvc3Q6IHsnW2NsYXNzLnRydS1kYXRhLWdyaWRdJzogJ3RydWUnfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJ1RGF0YUdyaWQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgY29uZmlnITogSVRydURhdGFHcmlkQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVudGl0eSE6IGFueTtcclxuICBASW5wdXQoKSBuYW1lITogYW55O1xyXG5cclxuICBUcnVEYXRhR3JpZFR5cGVzID0gVHJ1RGF0YUdyaWRUeXBlcztcclxuXHJcbiAgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIGNvbHVtbkRlZnM6IGFueSA9IFtdO1xyXG4gIHJvd0RhdGE6IGFueSA9IFtdO1xyXG4gIHZpZXdDaG9pY2VzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgc2VsZWN0ZWRWaWV3Q2hvaWNlOiBhbnk7XHJcbiAgdW5hc3NvY2lhdGVkQ2hvaWNlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlOiBhbnk7XHJcbiAgdmlld01lbnVJdGVtczogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRWaWV3TWVudUl0ZW06IGFueSB8IG51bGwgPSBudWxsO1xyXG4gIGdyaWRUeXBlOiBUcnVEYXRhR3JpZFR5cGVzID0gVHJ1RGF0YUdyaWRUeXBlcy5TZWFyY2hcclxuICB1bnNhdmVkRW50aXRpZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBsb2FkZWRFbnRpdGllczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGxhdGVzdFNldHVwUXVlcnk6IGFueTtcclxuICBmaXJzdFNlYXJjaFJhbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdyaWRPcHRpb25zOiBhbnkgPSB7XHJcbiAgICByb3dTZWxlY3Rpb246ICdtdWx0aXBsZScsXHJcbiAgICByb3dTdHlsZTogeyBiYWNrZ3JvdW5kOiAnd2hpdGUnIH0sXHJcbiAgICBzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgIGxvYWRpbmdPdmVybGF5Q29tcG9uZW50OiBUcnVEYXRhR3JpZExvYWRpbmdPdmVybGF5LFxyXG4gICAgbG9hZGluZ092ZXJsYXlDb21wb25lbnRQYXJhbXM6IHtcclxuICAgICAgbG9hZGluZ01lc3NhZ2U6ICdTZWFyY2hpbmcgLSBPbmUgbW9tZW50IHBsZWFzZS4uLicsXHJcbiAgICB9LFxyXG4gICAgbm9Sb3dzT3ZlcmxheUNvbXBvbmVudDogVHJ1RGF0YUdyaWROb1Jvd3NPdmVybGF5LFxyXG4gICAgbm9Sb3dzT3ZlcmxheUNvbXBvbmVudFBhcmFtczoge1xyXG4gICAgICBub1Jvd3NNZXNzYWdlRnVuYzogKCkgPT5cclxuICAgICAge1xyXG4gICAgICAgIGlmICh0aGlzLmZpcnN0U2VhcmNoUmFuKVxyXG4gICAgICAgICAgcmV0dXJuICdTb3JyeSAtIG5vIHJvd3MgZm91bmQhJ1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiAnQ2xpY2sgc2VhcmNoIHRvIGRpc3BsYXkgcmVzdWx0cy4nXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgb25TZWxlY3Rpb25DaGFuZ2VkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuXHJcbiAgICB9LFxyXG4gICAgb25Sb3dEYXRhVXBkYXRlZDogKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5lbnRpdGllcyA9IHRoaXMuZ2V0Um93RGF0YSgpO1xyXG4gICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5hY3Rpb25SZWZzID0gdGhpcy5nZXRSZWZzKCk7XHJcbiAgICB9LFxyXG4gICAgb25DZWxsRWRpdGluZ1N0b3BwZWQ6IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICBwYXJhbXMuYXBpLnJlZnJlc2hDZWxscyh7XHJcbiAgICAgICAgZm9yY2U6IHRydWUsXHJcbiAgICAgICAgcm93Tm9kZXM6IFtwYXJhbXMubm9kZV1cclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgb25DZWxsVmFsdWVDaGFuZ2VkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuXHJcbiAgICB9LFxyXG4gICAgb25HcmlkUmVhZHk6IChldmVudDogR3JpZFJlYWR5RXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5hcGkgPSBldmVudC5hcGk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHBhcmVudFRvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGFwaSE6IEdyaWRBcGk7XHJcbiAgcHJpdmF0ZSBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcbiAgcHJpdmF0ZSBpc0FjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXHJcbiAgICBwcml2YXRlIHNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyOiBUcnVTZWFyY2hSZXN1bHRWaWV3TWFuYWdlcixcclxuICAgIHByaXZhdGUgYXBwRW52aXJvbm1lbnQ6IFRydUFwcEVudmlyb25tZW50LFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hWaWV3RXZlbnRIYW5kbGVyOiBUcnVTZWFyY2hWaWV3RXZlbnRIYW5kbGVyLFxyXG4gICAgcHJpdmF0ZSB1aU5vdGlmaWNhdGlvbjogVHJ1VWlOb3RpZmljYXRpb24sXHJcbiAgICBwcml2YXRlIGNvbm5lY3Rpb25IdWI6IFRydUNvbm5lY3Rpb25IdWIsXHJcbiAgICBwcml2YXRlIHV0aWw6IFRydVV0aWwsXHJcbiAgICBwcml2YXRlIGFwcDogQXBwbGljYXRpb25SZWYsXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgdGFiR3JvdXBFdmVudE5vdGlmaWVyOiBUcnVUYWJHcm91cEV2ZW50Tm90aWZpZXIpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHkgPSAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgIGxldCByb3dEYXRhID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnJvd0RhdGFFbmhhbmNlcihlbnRpdHkpO1xyXG4gICAgcm93RGF0YS4kZW50aXR5ID0gZW50aXR5O1xyXG4gICAgcmV0dXJuIHJvd0RhdGE7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBzZXROb1Jvd3NUZW1wbGF0ZSA9ICgpID0+IHtcclxuICAgIC8vdGhpcy5ub1Jvd3NUZW1wbGF0ZSA9IGA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7XCI+Tm8gZGF0YSBmb3VuZC48L3NwYW4+YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG8gPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmFwcEVudmlyb25tZW50Lm9uU2F2ZUNvbXBsZXRlJC5waXBlKHNraXAoMSkpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bClcclxuICAgICAgICB0aGlzLmFwaT8ucmVkcmF3Um93cygpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5hcHBFbnZpcm9ubWVudC5vblJldmVydENvbXBsZXRlJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQ/LnN1Y2Nlc3NmdWwpIHtcclxuICAgICAgICBsZXQgcm93c1RvUmVtb3ZlOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucm93RGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMucm93RGF0YVtpXS4kZW50aXR5W3RoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUgKyAnUmVmJ10gPCAwKVxyXG4gICAgICAgICAgICByb3dzVG9SZW1vdmUucHVzaCh0aGlzLnJvd0RhdGFbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaT8uYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogcm93c1RvUmVtb3ZlIH0pO1xyXG4gICAgICAgIHRoaXMuYXBpPy5yZWRyYXdSb3dzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmFwcEVudmlyb25tZW50Lm9uRGVsZXRlQ29tcGxldGUkLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bCAmJiBldmVudC5lbnRpdGllcyAmJiBldmVudC5lbnRpdGllcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcm93c1RvUmVtb3ZlOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucm93RGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IGV2ZW50LmVudGl0aWVzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd0RhdGFbaV0uJGVudGl0eSA9PT0gZXZlbnQuZW50aXRpZXNbal0pXHJcbiAgICAgICAgICAgICAgcm93c1RvUmVtb3ZlLnB1c2godGhpcy5yb3dEYXRhW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGk/LmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHJvd3NUb1JlbW92ZSB9KTtcclxuICAgICAgICB0aGlzLmFwaT8ucmVkcmF3Um93cygpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnNlYXJjaFZpZXdFdmVudEhhbmRsZXIub25TZWFyY2goKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25TZWFyY2goc2V0dXBRdWVyeSk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmNvbmZpZy52aWV3Lm9uQWN0aXZlKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKGlzQWN0aXZlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcclxuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5tZW51SXRlbXNFbmFibGVkID0gKCkgPT4geyByZXR1cm4gdGhpcy5yb3dEYXRhLmxlbmd0aDsgfTtcclxuICAgICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5hY3Rpb25SZWZzID0gdGhpcy5nZXRSZWZzKCk7XHJcbiAgICAgICAgdGhpcy5hcGkucmVmcmVzaENlbGxzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIGlmICh0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllciAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllci5vbkFjdGl2ZVN0YXRlQ2hhbmdlZCgpLnBpcGUoc2tpcCgxKSkuc3Vic2NyaWJlKChpc0FjdGl2ZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuY29ubmVjdGlvbkh1Yi5zdWJzY3JpYmUoXHJcbiAgICAgIHRoaXMuZGF0YUNvbnRleHQsXHJcbiAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLFxyXG4gICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZS5uYW1lLFxyXG4gICAgICB0aGlzLmFkZEVudGl0eSxcclxuICAgICAgdGhpcy5nZXRSb3dEYXRhLFxyXG4gICAgICAoKSA9PiB7IHJldHVybiB0aGlzLmxhdGVzdFNldHVwUXVlcnkgfSxcclxuICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmV4cGFuZHMsXHJcbiAgICAgIFtdLFxyXG4gICAgICAoKSA9PiB7IHJldHVybiB0cnVlOyB9KS5zdWJzY3JpYmUoKGRhdGFDaGFuZ2U6IFRydURhdGFDaGFuZ2UpID0+IHtcclxuICAgICAgICB0aGlzLmFwaS5yZWZyZXNoQ2VsbHMoeyBmb3JjZTogdHJ1ZSB9KTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHRoaXMuc3Vicy5wdXNoKGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy52aWV3LmFjdGl2ZSkge1xyXG4gICAgICAgIGxldCBrZXlTZXF1ZW5jZSA9IHRoaXMudXRpbC5nZXRLZXlTZXF1ZW5jZShldmVudCk7XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtpJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGEraScpIHsgXHJcbiAgICAgICAgICB0aGlzLm9uQWRkKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK2QnIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStkJykgeyBcclxuICAgICAgICAgIHRoaXMub25EZWxldGUoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwraycgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK2snKSB7IFxyXG4gICAgICAgICAgdGhpcy5vbktlZXAoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwrcicgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK3InKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUmVtb3ZlKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGFyZ2V0SXNDb250cm9sID0gdGhpcy51dGlsLnRhcmdldElzQ29udHJvbChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0SXNDb250cm9sICYmIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KVxyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWZzID0gKCk6IHN0cmluZyA9PiB7XHJcbiAgICBsZXQgcm93Tm9kZXM6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5hcGk/LmZvckVhY2hOb2RlKChyb3dOb2RlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcm93Tm9kZXMucHVzaChyb3dOb2RlKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IHJlZnMgPSBfLm1hcChyb3dOb2RlcywgKHJvd05vZGUpID0+IHsgcmV0dXJuIHJvd05vZGUuZGF0YS4kZW50aXR5W3RoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUgKyAnUmVmJ107IH0pO1xyXG4gICAgcmV0dXJuIHJlZnMuam9pbignLCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSb3dEYXRhID0gKCkgPT4ge1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5hcGk/LmZvckVhY2hOb2RlKChyb3dOb2RlOiBhbnkpID0+IHtcclxuICAgICAgZGF0YS5wdXNoKHJvd05vZGUuZGF0YS4kZW50aXR5KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfSBcclxuXHJcbiAgcHJpdmF0ZSBsb2FkR3JpZERhdGEgPSAoZW50aXRpZXM6IEFycmF5PGFueT4pID0+IHtcclxuICAgIHRoaXMucm93RGF0YSA9IGVudGl0aWVzLm1hcCh0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5LCBlbnRpdGllcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRNYW55VG9NYW55R3JpZERhdGEgPSAoYXNzb2NpYXRlZEVudGl0aWVzOiBBcnJheTxhbnk+LCBhc3NvY2lhdGFibGVFbnRpdGllczogQXJyYXk8YW55PiwgaW5pdGFsTG9hZDogYm9vbGVhbikgPT4ge1xyXG4gICAgaWYgKGluaXRhbExvYWQpXHJcbiAgICAgIHRoaXMucm93RGF0YSA9IGFzc29jaWF0ZWRFbnRpdGllcy5tYXAodGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eSwgYXNzb2NpYXRlZEVudGl0aWVzKTtcclxuICAgIGVsc2VcclxuICAgICAgYXNzb2NpYXRlZEVudGl0aWVzID0gdGhpcy5yb3dEYXRhLm1hcCgoZTogYW55KSA9PiB7IHJldHVybiBlLiRlbnRpdHkgfSk7XHJcbiAgICBsZXQgYXNzb2NpYXRhYmxlVHlwZU5hbWUgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGUubmFtZVxyXG4gICAgbGV0IGFzc29jaWF0YWJsZVR5cGVOYW1lV2l0aFByZWZpeCA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZU5hbWVXaXRoUHJlZml4XHJcbiAgICBsZXQgYXNzb2NpYXRlZE1hcE9mQXNzb2NpYXRhYmxlID0gXy5tYXAoYXNzb2NpYXRlZEVudGl0aWVzLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVsnbycgKyBhc3NvY2lhdGFibGVUeXBlTmFtZVdpdGhQcmVmaXhdOyB9KTtcclxuICAgIHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcyA9IGFzc29jaWF0YWJsZUVudGl0aWVzLmZpbHRlcihvYmplY3QxID0+IHtcclxuICAgICAgcmV0dXJuICFhc3NvY2lhdGVkTWFwT2ZBc3NvY2lhdGFibGUuc29tZShvYmplY3QyID0+IHsgcmV0dXJuIG9iamVjdDEudmFsdWUuJCA9PT0gb2JqZWN0Mlthc3NvY2lhdGFibGVUeXBlTmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0RGF0YSA9ICgpID0+IHtcclxuICAgIHRoaXMudWlOb3RpZmljYXRpb24uc2hvd0V4cG9ydERpYWxvZygpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuO1xyXG4gICAgICBsZXQgZXhwb3J0R3JpZFNwZWM7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSlcclxuICAgICAgICBleHBvcnRHcmlkU3BlYyA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5uYW1lO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZXhwb3J0R3JpZFNwZWMgPSAnJGN1c3RvbT0nICsgMTtcclxuXHJcbiAgICAgIHRoaXMuZGF0YUNvbnRleHRcclxuICAgICAgICAuZW50aXR5QWNjZXNzKClcclxuICAgICAgICAuZXhwb3J0KHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLCBleHBvcnRHcmlkU3BlYywgdGhpcy5sYXRlc3RTZXR1cFF1ZXJ5LCB0aGlzLmdldFJlZnMoKSwgcmVzdWx0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblN1cHByZXNzS2V5Ym9hcmRFdmVudCA9IChwYXJhbXM6IFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgbGV0IGlzVGFiS2V5ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ1RhYic7XHJcbiAgICBsZXQgaXNBcnJvd0Rvd24gPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJztcclxuICAgIGxldCBpc0Fycm93VXAgPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dVcCc7XHJcbiAgICBsZXQgaXNBcnJvd0xlZnQgPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JztcclxuICAgIGxldCBpc0Fycm93UmlnaHQgPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCc7XHJcbiAgICBsZXQgaXNTaGlmdEtleSA9IHBhcmFtcy5ldmVudC5zaGlmdEtleTtcclxuICAgIGxldCBpc0FsdEtleSA9IHBhcmFtcy5ldmVudC5hbHRLZXk7XHJcblxyXG4gICAgbGV0IGZvY3VzZWRDZWxsID0gcGFyYW1zLmFwaS5nZXRGb2N1c2VkQ2VsbCgpO1xyXG4gICAgbGV0IGhhc0Nob2ljZXMgPSBwYXJhbXMuZGF0YVtwYXJhbXMuY29sdW1uLmdldENvbElkKCldICYmIHBhcmFtcy5kYXRhW3BhcmFtcy5jb2x1bW4uZ2V0Q29sSWQoKV0uY2hvaWNlcyA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICBpZiAocGFyYW1zLmNvbHVtbi5pc1Bpbm5lZCgpKSB7XHJcbiAgICAgIGlmIChpc1RhYktleSAmJiAhaXNTaGlmdEtleSlcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvTmV4dENlbGwoKTtcclxuICAgICAgZWxzZSBpZiAoaXNUYWJLZXkgJiYgaXNTaGlmdEtleSlcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzQXJyb3dMZWZ0KVxyXG4gICAgICAgIHBhcmFtcy5hcGkudGFiVG9QcmV2aW91c0NlbGwoKTtcclxuICAgICAgZWxzZSBpZiAoaXNBcnJvd1JpZ2h0KVxyXG4gICAgICAgIHBhcmFtcy5hcGkudGFiVG9OZXh0Q2VsbCgpO1xyXG4gICAgICB0aGlzLmFwaS5zdG9wRWRpdGluZygpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0Nob2ljZXMgJiYgaXNBbHRLZXkgJiYgKGlzQXJyb3dEb3duIHx8IGlzQXJyb3dVcCkpIHtcclxuICAgICAgcGFyYW1zLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBwYXJhbXMuYXBpLnN0YXJ0RWRpdGluZ0NlbGwoe1xyXG4gICAgICAgIHJvd0luZGV4OiBmb2N1c2VkQ2VsbD8ucm93SW5kZXggYXMgbnVtYmVyLFxyXG4gICAgICAgIGNvbEtleTogZm9jdXNlZENlbGw/LmNvbHVtbiBhcyBDb2x1bW4sXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGFkZEVudGl0eSA9IChuZXdFbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIGxldCBwYXJlbnROYW1lID0gdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZTtcclxuICAgICAgbmV3RW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ10gPSB0aGlzLmVudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSkge1xyXG4gICAgICBsZXQgcGFyZW50TmFtZSA9IHRoaXMuZW50aXR5LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgIGxldCB1bmFzc29jaWF0ZWRUeXBlID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlO1xyXG4gICAgICBsZXQgcmVmID0gdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZS52YWx1ZS4kO1xyXG4gICAgICBsZXQgY2hpbGRUb0Fzc29jaWF0ZSA9IHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoQnlSZWZDYWNoZU9ubHkodW5hc3NvY2lhdGVkVHlwZSwgcmVmLCB0cnVlKVxyXG4gICAgICBpZiAoY2hpbGRUb0Fzc29jaWF0ZSkge1xyXG4gICAgICAgIGxldCBlbmhhbmNlZEVudGl0eSA9IHRoaXMuZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHkobmV3RW50aXR5KTtcclxuICAgICAgICBlbmhhbmNlZEVudGl0eS4kZW50aXR5W3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXSA9IGNoaWxkVG9Bc3NvY2lhdGVbdW5hc3NvY2lhdGVkVHlwZS5uYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIGVuaGFuY2VkRW50aXR5LiRlbnRpdHlbcGFyZW50TmFtZSArICdSZWYnXSA9IHRoaXMuZW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ107XHJcbiAgICAgICAgLy8gcmVtb3ZlIGl0ZW0gZnJvbSB0aGUgYWRkIGRyb3Bkb3duIGNvbnRyb2xcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy51bmFzc29jaWF0ZWRDaG9pY2VzLmZpbmRJbmRleCgoY2hvaWNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY2hvaWNlW3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXSA9PT0gY2hpbGRUb0Fzc29jaWF0ZVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy51bmFzc29jaWF0ZWRDaG9pY2VzLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgIC8vIGNsZWFyIGFkZCBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vIGFkZCByb3cgdG8gZ3JpZFxyXG4gICAgICAgIHRoaXMudW5zYXZlZEVudGl0aWVzLnB1c2goZW5oYW5jZWRFbnRpdHkpO1xyXG4gICAgICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGQ6IFtlbmhhbmNlZEVudGl0eV0sIGFkZEluZGV4OiAwIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZW5oYW5jZWRFbnRpdHkgPSB0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5KG5ld0VudGl0eSk7XHJcbiAgICAgIHRoaXMucm93RGF0YS51bnNoaWZ0KGVuaGFuY2VkRW50aXR5KTtcclxuICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZDogW2VuaGFuY2VkRW50aXR5XSwgYWRkSW5kZXg6IDAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1lcmdlRGF0YSA9IChjb25maWc6IFRydUxpc3RDb250cm9sQ29uZmlnQmFzZTxhbnk+LCBlbnRpdHlUb1ZhbGlkYXRlOiBhbnkpOiBUcnVNZXJnZURhdGFTZXQgfCBudWxsID0+IHtcclxuICAgIGlmIChjb25maWcucHJvcGVydHlQYXRoPy5pbmNsdWRlcygnLycpKSB7XHJcbiAgICAgIGxldCBwcm9wZXJ0eU5hbWVQYXJ0cyA9IGNvbmZpZy5wcm9wZXJ0eVBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgcHJvcGVydHlOYW1lUGFydHMucG9wKCk7XHJcbiAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eTogYW55O1xyXG4gICAgICBwcm9wZXJ0eU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgbGV0IHRhcmdldFByb3BlcnR5TmFtZSA9ICdvJyArIG5hbWUgYXMga2V5b2YgdHlwZW9mIGVudGl0eVRvVmFsaWRhdGU7XHJcbiAgICAgICAgICB0YXJnZXRQcm9wZXJ0eSA9IGVudGl0eVRvVmFsaWRhdGVbdGFyZ2V0UHJvcGVydHlOYW1lXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHRhcmdldFByb3BlcnR5TmFtZSA9ICdvJyArIG5hbWUgYXMga2V5b2YgdHlwZW9mIGVudGl0eVRvVmFsaWRhdGU7XHJcbiAgICAgICAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFByb3BlcnR5W3RhcmdldFByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5Lk1lcmdlX0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0UHJvcGVydHkuTWVyZ2VfRGF0YV9TZXQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZW50aXR5VG9WYWxpZGF0ZS5NZXJnZV9EYXRhX1NldD8uZ2V0KGNvbmZpZy5wcm9wZXJ0eU5hbWUgYXMgc3RyaW5nKSA/IGVudGl0eVRvVmFsaWRhdGUuTWVyZ2VfRGF0YV9TZXQgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRpb25EaWFsb2c6IENvbXBvbmVudFJlZjxUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZz4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGFkZFZhbGlkYXRpb25EaWFsb2cgPSAoY29uZmlnOiBUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZ0NvbmZpZywgaG9zdEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgbGV0IHRhcmdldCA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaWFsb2ctdGFyZ2V0JylbMF07XHJcbiAgICBsZXQgZGlhbG9nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZGlhbG9nRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkJyk7XHJcbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZGlhbG9nRWxlbWVudCk7XHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50PFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nPihUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZywge1xyXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcC5pbmplY3RvcixcclxuICAgICAgaG9zdEVsZW1lbnQ6IGRpYWxvZ0VsZW1lbnQsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnID0gY29uZmlnO1xyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpXHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsaWRhdGlvbkRpYWxvZyA9IGNvbXBvbmVudFJlZjtcclxuICAgIHRoaXMuYXBwLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhaXRGb3JHcmlkQXBpID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmFwaSkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJ1blNlYXJjaCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMud2FpdEZvckdyaWRBcGkoKCkgPT4ge1xyXG4gICAgICBsZXQgY29udGFpbmVySXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy50YWJHcm91cEV2ZW50Tm90aWZpZXIgIT09IG51bGwpXHJcbiAgICAgICAgY29udGFpbmVySXNBY3RpdmUgPSB0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllci5pc0FjdGl2ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICgoXHJcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWwgfHxcclxuICAgICAgICB0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkgfHxcclxuICAgICAgICB0aGlzLmNvbmZpZy5ub1F1ZXJ5KSAmJlxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm5vUXVlcnkpXHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoKG51bGwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMub25TZWFyY2godGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnNldHVwUXVlcnkodGhpcy5lbnRpdHkpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByb3BlcnR5UGF0aFBhcnRzID0gKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgbGFzdEluZGV4ID0gcHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGguc2xpY2UoMCwgbGFzdEluZGV4KTtcclxuICAgIHJldHVybiBwcm9wZXJ0eVBhdGguc3BsaXQoJy4nKTtcclxuICB9XHJcblxyXG4gIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcclxuICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5vblN1cHByZXNzS2V5Ym9hcmRFdmVudFxyXG4gIH07XHJcblxyXG4gIGdldFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIHRoaXMuYXBpPy5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyKCgpID0+IGNvdW50KyspO1xyXG4gICAgcmV0dXJuICdSb3dzOiAnICsgY291bnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGNvdW50ID0gdGhpcy5hcGk/LmdldFNlbGVjdGVkUm93cygpLmxlbmd0aDtcclxuICAgIHJldHVybiAnU2VsZWN0ZWQ6ICcgKyBjb3VudDtcclxuICB9XHJcblxyXG4gIG9uUm93RGF0YUNoYW5nZWQgPSAoZGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5yb3dEYXRhID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0Tm9Sb3dzVGVtcGxhdGUoKTtcclxuICAgICAgdGhpcy5hcGkuc2hvd05vUm93c092ZXJsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2VsbENsaWNrZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFldmVudC5jb2x1bW4uY29sRGVmLnBpbm5lZCkge1xyXG4gICAgICB0aGlzLmFwaS5kZXNlbGVjdEFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsRG91YmxlQ2xpY2tlZCA9IChncmlkQ29uZmlnOiBhbnkpID0+IHtcclxuICAgIGlmIChncmlkQ29uZmlnLmNvbERlZi5jZWxsQ2xhc3MgPT09ICdhZy1way1hbGlnbmVkLWNlbGwnKVxyXG4gICAgICB0aGlzLmNvbmZpZy5yb3dIZWFkZXJEb3VibGVDbGlja2VkKGdyaWRDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgb25DZWxsS2V5RG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBpZiAoIWV2ZW50LmV2ZW50KSByZXR1cm47XHJcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQuZXZlbnQgYXMgdW5rbm93bikgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAgIGlmIChrZXkuY29kZSA9PT0gJ1NwYWNlJykge1xyXG4gICAgICBrZXkucHJldmVudERlZmF1bHQoKTtcclxuICAgICAga2V5LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLmFwaT8uc3RhcnRFZGl0aW5nQ2VsbCh7XHJcbiAgICAgICAgcm93SW5kZXg6IGV2ZW50LnJvd0luZGV4LFxyXG4gICAgICAgIGNvbEtleTogZXZlbnQuY29sdW1uLmdldENvbElkKCksXHJcbiAgICAgICAga2V5OiBrZXkuY29kZVxyXG4gICAgICB9KTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBvbkNlbGxNb3VzZU92ZXIoZTogYW55KSB7XHJcbiAgICBpZiAoZS5kYXRhLiRlbnRpdHkuZW50aXR5QXNwZWN0Lmhhc1ZhbGlkYXRpb25FcnJvcnMpIHtcclxuICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBlLmV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKCF0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnYWctY2VsbCcpKVxyXG4gICAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50LmNsb3Nlc3QoJy5hZy1jZWxsJyk7XHJcbiAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnaW52YWxpZCcpKSB7XHJcbiAgICAgICAgbGV0IGZpZWxkTmFtZSA9IGUuY29sRGVmLmZpZWxkO1xyXG4gICAgICAgIGxldCBwcm9wZXJ0eUNvbmZpZyA9IGUuZGF0YVtmaWVsZE5hbWVdO1xyXG5cclxuICAgICAgICBsZXQgcHJvcGVydHlQYXRoUGFydHM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKHByb3BlcnR5Q29uZmlnLnByb3BlcnR5UGF0aC5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGhQYXJ0cyA9IHRoaXMuZ2V0UHJvcGVydHlQYXRoUGFydHMocHJvcGVydHlDb25maWcucHJvcGVydHlQYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBlbnRpdHlUb1ZhbGlkYXRlID0gcHJvcGVydHlQYXRoUGFydHMubGVuZ3RoID8gcHJvcGVydHlQYXRoUGFydHMucmVkdWNlKChwOiBhbnksIGM6IGFueSkgPT4gcCAmJiBwW2NdIHx8IG51bGwsIGUuZGF0YS4kZW50aXR5KSA6IGUuZGF0YS4kZW50aXR5O1xyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uRXJyb3JzRm9yUHJvcGVydHkgPSB0aGlzLmRhdGFDb250ZXh0LmdldFZhbGlkYXRpb25FcnJvcnNGb3JQcm9wZXJ0eShlbnRpdHlUb1ZhbGlkYXRlLCBwcm9wZXJ0eUNvbmZpZy5wcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uRXJyb3JzTWVzc2FnZXNGb3JQcm9wZXJ0eSA9IHRoaXMuZGF0YUNvbnRleHQucGFyc2VFcnJvck1lc3NhZ2VzKHZhbGlkYXRpb25FcnJvcnNGb3JQcm9wZXJ0eSk7XHJcblxyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnID0gbmV3IFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nQ29uZmlnKGVudGl0eVRvVmFsaWRhdGUsIHByb3BlcnR5Q29uZmlnLCBmYWxzZSk7XHJcbiAgICAgICAgdmFsaWRhdGlvbkRpYWxvZ0NvbmZpZy5lcnJvck1zZyA9IHZhbGlkYXRpb25FcnJvcnNNZXNzYWdlc0ZvclByb3BlcnR5O1xyXG4gICAgICAgIHZhbGlkYXRpb25EaWFsb2dDb25maWcubWVyZ2VEYXRhID0gdGhpcy5nZXRNZXJnZURhdGEocHJvcGVydHlDb25maWcsIGVudGl0eVRvVmFsaWRhdGUpO1xyXG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbkRpYWxvZyh2YWxpZGF0aW9uRGlhbG9nQ29uZmlnLCB0YXJnZXRFbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGlvbkRpYWxvZylcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25EaWFsb2cuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsTW91c2VPdXQoZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRGlhbG9nKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25EaWFsb2cuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2ggPSAoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmZpcnN0U2VhcmNoUmFuID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBpLmhpZGVPdmVybGF5KCk7XHJcbiAgICB0aGlzLmFwaS5zaG93TG9hZGluZ092ZXJsYXkoKTtcclxuXHJcbiAgICBsZXQgZW50aXR5TG9hZGVkID0gdGhpcy5sb2FkZWRFbnRpdGllcy5zb21lKChyZWYpID0+IHsgcmV0dXJuIHJlZiA9PT0gdGhpcy5lbnRpdHlbdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICBsZXQgam9pbnMgPSBbXTtcclxuICAgIGlmIChlbnRpdHlMb2FkZWQpIHtcclxuICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaENhY2hlT25seShcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSxcclxuICAgICAgICBzZXR1cFF1ZXJ5LFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5leHBhbmRzKSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55ICYmIHRoaXMuY29uZmlnLnRhYmxlQ29uZmlnLmNhbkFkZClcclxuICAgICAgICBqb2lucy5wdXNoKHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoUXVlcnlDaG9pY2VzKFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlLFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLm1hbnlUb01hbnlTZXR1cFF1ZXJ5KHRoaXMuZW50aXR5KSwgZmFsc2UpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaChcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSxcclxuICAgICAgICBzZXR1cFF1ZXJ5LFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5leHBhbmRzLCBmYWxzZSkpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSAmJiB0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpXHJcbiAgICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaFF1ZXJ5Q2hvaWNlcyhcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZSxcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5tYW55VG9NYW55U2V0dXBRdWVyeSh0aGlzLmVudGl0eSksIHRydWUpKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSA9IHNldHVwUXVlcnk7XHJcblxyXG4gICAgZm9ya0pvaW4oam9pbnMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9Sb3dzVGVtcGxhdGUoKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55KVxyXG4gICAgICAgICAgdGhpcy5sb2FkTWFueVRvTWFueUdyaWREYXRhKHJlc3VsdHNbMF0sIHJlc3VsdHNbMV0sIHRydWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMubG9hZEdyaWREYXRhKHJlc3VsdHNbMF0pO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRUeXBlICE9PSBUcnVEYXRhR3JpZFR5cGVzLlNlYXJjaClcclxuICAgICAgICAgIHRoaXMubG9hZGVkRW50aXRpZXMucHVzaCh0aGlzLmVudGl0eVt0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lICsgJ1JlZiddKTtcclxuICAgICAgICB0aGlzLmFwaS5oaWRlT3ZlcmxheSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvd0RhdGEgPT09IG51bGwgfHwgIXRoaXMucm93RGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuYXBpLnNob3dOb1Jvd3NPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uVW5hc3NvY2lhdGVkQ2hvaWNlQ2hhbmdlZCA9IChvcHRpb246IElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24gfCBudWxsKSA9PiB7fVxyXG4gIG9uU2VsZWN0ZWRSZXBvcnRDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHt9XHJcblxyXG4gIGNhbkFkZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGlmICghdGhpcy5jb25maWcudGFibGVDb25maWcuY2FuQWRkKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55KVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkFkZCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuYWRkRW50aXR5KHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuYWRkKHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlKSk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZSA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBlbnRpdGllcyA9IHNlbGVjdGVkUm93cy5tYXAoZnVuY3Rpb24gKHJvdzogYW55KSB7IHJldHVybiByb3cuJGVudGl0eTsgfSk7XHJcbiAgICAgIGxldCBjb25maXJtTXNnID0gdGhpcy5hcHBFbnZpcm9ubWVudC5mb3JtYXREZWxldGVDb25maXJtYXRpb25NZXNzYWdlKHRoaXMuY29uZmlnLnRhYmxlTmFtZSwgdGhpcy5jb25maWcudGFibGVQbHVyYWxMYWJlbCwgc2VsZWN0ZWRSb3dzLmxlbmd0aCk7XHJcbiAgICAgIGxldCBvblN1Y2Nlc3MgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHNlbGVjdGVkUm93cyB9KTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoKHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5zZXR1cFF1ZXJ5KHRoaXMuZW50aXR5KSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kYXRhQ29udGV4dC5kZWxldGUoZW50aXRpZXMsIGNvbmZpcm1Nc2csIG9uU3VjY2Vzcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVpTm90aWZpY2F0aW9uLndhcm5pbmcodGhpcy5hcHBFbnZpcm9ubWVudC5tc2dOb1JlY29yZHNTZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktlZXAgPSAoKTogdm9pZCA9PiB7XHJcbiAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aClcclxuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZSA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHNlbGVjdGVkUm93cyB9KTtcclxuICAgIHRoaXMuYXBpLnNlbGVjdEFsbCgpO1xyXG4gICAgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aClcclxuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMucm93RGF0YSA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25FeHBvcnQgPSAoKTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmV4cG9ydERhdGEoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUbygpO1xyXG4gICAgdGhpcy5sYWJlbCA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5sYWJlbDsgXHJcbiAgICB0aGlzLmNvbHVtbkRlZnMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY29sdW1uRGVmcztcclxuICAgIHRoaXMuZ3JpZFR5cGUgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZ3JpZFR5cGU7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvL3NldFRpbWVvdXQgdG8gcHJldmVudDogRVJST1IgRXJyb3I6IE5HMDEwMDogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvci4gXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYXJlbnRUb29sYmFyVGVtcGxhdGUgPSB0aGlzLnNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyLnNlYXJjaFZpZXdUb29sYmFyVGVtcGxhdGU7XHJcbiAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLm1lbnVJdGVtc0VuYWJsZWQgPSAoKSA9PiB7IHJldHVybiB0aGlzLnJvd0RhdGEubGVuZ3RoOyB9O1xyXG4gICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5hbGxNZW51cygpLnN1YnNjcmliZSgobWVudTogYW55KSA9PiB7IHRoaXMudmlld01lbnVJdGVtcyA9IG1lbnU7IH0pO1xyXG4gICAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3NdPVwieyd0cnUtZGF0YS1ncmlkLWxhYmVsLW9mZnNldCc6IGxhYmVsfVwiPlxyXG4gIDxzcGFuIGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1sYWJlbFwiICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtdG9vbGJhci1jb250YWluZXJcIj5cclxuICAgIDx0cnUtdG9vbGJhcj5cclxuICAgICAgPHRydS10b29sYmFyLWRyb3Bkb3duIFtvcHRpb25zXT1cInVuYXNzb2NpYXRlZENob2ljZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE9wdGlvbildPVwic2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblVuYXNzb2NpYXRlZENob2ljZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdyaWRUeXBlID09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueVwiPlxyXG4gICAgICA8L3RydS10b29sYmFyLWRyb3Bkb3duPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1hZGQtaWNvbidcIiBbdG9vbHRpcF09XCInQWRkIC0gW0N0cmwgKyBJXSdcIiBbZGlzYWJsZWRdPVwiIWNhbkFkZCgpXCIgKG9uQ2xpY2spPVwib25BZGQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1kZWxldGUtaWNvbidcIiBbdG9vbHRpcF09XCInRGVsZXRlIC0gW0N0cmwgKyBEXSdcIiAoY2xpY2spPVwib25EZWxldGUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1rZWVwLWljb24nXCIgW3Rvb2x0aXBdPVwiJ0tlZXAgc2VsZWN0ZWQgcmVjb3JkcyAtIFtDdHJsICsgS10nXCIgKGNsaWNrKT1cIm9uS2VlcCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLXJlbW92ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidSZW1vdmUgc2VsZWN0ZWQgcmVjb3JkcyAtIFtDdHJsICsgUl0nXCIgKGNsaWNrKT1cIm9uUmVtb3ZlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvciAqbmdJZj1cInBhcmVudFRvb2xiYXJUZW1wbGF0ZVwiPjwvdHJ1LXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFyZW50VG9vbGJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1zZXBhcmF0b3I+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWV4cG9ydC1pY29uJ1wiIFt0b29sdGlwXT1cIidFeHBvcnQnXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvciAqbmdJZj1cInZpZXdNZW51SXRlbXMubGVuZ3RoXCI+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ2aWV3TWVudUl0ZW1zLmxlbmd0aFwiPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1tZW51ICpuZ0Zvcj1cImxldCB2aWV3TWVudUl0ZW0gb2Ygdmlld01lbnVJdGVtc1wiIFtjb25maWddPVwidmlld01lbnVJdGVtXCI+PC90cnUtdG9vbGJhci1tZW51PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvdHJ1LXRvb2xiYXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWRPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2hlYWRlckhlaWdodF09XCIyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcm93QnVmZmVyXT1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2VudGVyTmF2aWdhdGVzVmVydGljYWxseV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2VudGVyTmF2aWdhdGVzVmVydGljYWxseUFmdGVyRWRpdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N1cHByZXNzUm93SG92ZXJIaWdobGlnaHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzdG9wRWRpdGluZ1doZW5DZWxsc0xvc2VGb2N1c109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2tlZCk9XCJvbkNlbGxDbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbERvdWJsZUNsaWNrZWQpPVwib25DZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxLZXlEb3duKT1cIm9uQ2VsbEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChyb3dEYXRhQ2hhbmdlZCk9XCJvblJvd0RhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbE1vdXNlT3Zlcik9XCJvbkNlbGxNb3VzZU92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsTW91c2VPdXQpPVwib25DZWxsTW91c2VPdXQoJGV2ZW50KVwiPlxyXG4gICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy1jb250YWluZXJcIj5cclxuICAgICAgPHAgY2xhc3M9XCJ0cnUtZGF0YS1ncmlkLXN0YXR1c2Jhci12YWx1ZXMtdGV4dFwiPnt7Z2V0Um93Q291bnQoKX19PC9wPlxyXG4gICAgICA8cCBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy10ZXh0XCI+e3tnZXRTZWxlY3RlZFJvd0NvdW50KCl9fTwvcD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -94,14 +94,15 @@ export class TruEntityAccessor {
94
94
  query = query.where(entity.name + 'Ref', '==', ref);
95
95
  return this._entityManager.executeQueryLocally(query);
96
96
  };
97
- searchQueryChoices = (entity, setupQuery = null, hid = null, goToServer = false, ref = undefined) => {
97
+ searchQueryChoices = (entity, setupQuery = null, goToServer = false, ref = undefined, allRecords = false) => {
98
98
  const pkeyName = entity.name + 'Ref';
99
99
  let query = this._breezeContext.createQuery(this.getQueryServiceName(entity));
100
100
  if (setupQuery)
101
101
  query = setupQuery(query, entity) ?? query;
102
102
  if (ref)
103
103
  query = query.where(entity.name + 'Ref', '==', ref);
104
- query = query.top(this.appEnvironment.maxRecordCount);
104
+ if (!allRecords)
105
+ query = query.top(this.appEnvironment.maxRecordCount);
105
106
  if (goToServer) {
106
107
  return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
107
108
  return this.formatQueryChoices(query, queryData.results, pkeyName, null);
@@ -399,4 +400,4 @@ export class TruEntityAccessor {
399
400
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruEntityAccessor, decorators: [{
400
401
  type: Injectable
401
402
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.TruAppEnvironment }, { type: i3.TruUiNotification }, { type: i4.TruTextManager }, { type: i5.TruUser }] });
402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWVudGl0eS1hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvc2VydmljZXMvdHJ1LWVudGl0eS1hY2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBc0MsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2xGLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVFuRCxNQUFNLE9BQU8saUJBQWlCO0lBT2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFWRixjQUFjLENBQW9CO0lBQ2xDLGNBQWMsQ0FBaUI7SUFDL0IsZUFBZSxHQUFXLENBQUMsQ0FBQztJQUM1QixRQUFRLENBQVM7SUFFekIsWUFDVSxVQUFzQixFQUN0QixjQUFpQyxFQUNqQyxjQUFpQyxFQUNqQyxXQUEyQixFQUMzQixJQUFhO1FBSmIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsV0FBMkI7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFj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LE1BQU0sQ0FBQyxDQUFDO2dCQUNuSyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFO2dCQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDbkcsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQTt1R0FwZFUsaUJBQWlCOzJHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlRdWVyeSwgRmV0Y2hTdHJhdGVneSB9IGZyb20gXCJicmVlemUtY2xpZW50XCI7XHJcbmltcG9ydCB7IFRydUVudGl0eUJhc2UgfSBmcm9tICcuLi9iYXNlLWNsYXNzZXMvdHJ1LWVudGl0eS1iYXNlJ1xyXG5pbXBvcnQgeyBUcnVVaU5vdGlmaWNhdGlvbiB9IGZyb20gXCIuL3RydS11aS1ub3RpZmljYXRpb25cIjtcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tIFwiLi90cnUtZGF0YS1jb250ZXh0XCI7XHJcbmltcG9ydCB7IFRydUJyZWV6ZUNvbnRleHQgfSBmcm9tIFwiLi90cnUtYnJlZXplLWNvbnRleHQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gXCJ1bmRlcnNjb3JlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgZGVmZXIsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRydUFwcEVudmlyb25tZW50IH0gZnJvbSBcIi4vdHJ1LWFwcC1lbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBUcnVDaG9pY2UgfSBmcm9tIFwiLi4vY2xhc3Nlcy90cnUtY2hvaWNlXCI7XHJcbmltcG9ydCB7IFRydU5hbWVWYWx1ZSB9IGZyb20gXCIuLi9jbGFzc2VzL3RydS1uYW1lLXZhbHVlXCI7XHJcbmltcG9ydCB7IFRydVVzZXIgfSBmcm9tIFwiLi90cnUtdXNlclwiO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gXCIuL3RydS10ZXh0LW1hbmFnZXJcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRydUVudGl0eUFjY2Vzc29yIHtcclxuICBwcml2YXRlIF9icmVlemVDb250ZXh0ITogVHJ1QnJlZXplQ29udGV4dDtcclxuICBwcml2YXRlIF9lbnRpdHlNYW5hZ2VyITogRW50aXR5TWFuYWdlcjtcclxuICBwcml2YXRlIF9tYXhSZWNvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9iYXNlVXJsOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhcHBFbnZpcm9ubWVudDogVHJ1QXBwRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIHVpTm90aWZpY2F0aW9uOiBUcnVVaU5vdGlmaWNhdGlvbixcclxuICAgIHByaXZhdGUgdGV4dE1hbmFnZXI6IFRydVRleHRNYW5hZ2VyLFxyXG4gICAgcHJpdmF0ZSB1c2VyOiBUcnVVc2VyKSB7XHJcbiAgICB0aGlzLl9tYXhSZWNvcmRDb3VudCA9IHRoaXMuYXBwRW52aXJvbm1lbnQubWF4UmVjb3JkQ291bnQ7XHJcbiAgICB0aGlzLl9iYXNlVXJsID0gdGhpcy5hcHBFbnZpcm9ubWVudC5hcHBVcmk7XHJcbiAgfVxyXG5cclxuICBzZXQgY29udGV4dChkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQpIHtcclxuICAgIHRoaXMuX2JyZWV6ZUNvbnRleHQgPSBkYXRhQ29udGV4dC5icmVlemVDb250ZXh0O1xyXG4gICAgdGhpcy5fZW50aXR5TWFuYWdlciA9IGRhdGFDb250ZXh0LmVudGl0eU1hbmFnZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFF1ZXJ5U2VydmljZU5hbWUgPSAoZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSkgPT4ge1xyXG4gICAgcmV0dXJuICdRdWVyeScgKyBlbnRpdHkubmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2FybklmTWF4UmVjb3JkcyA9IChlbnRpdGllczogYW55W10sIGVudGl0eU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKGVudGl0aWVzLmxlbmd0aCA+PSB0aGlzLmFwcEVudmlyb25tZW50Lm1heFJlY29yZENvdW50KVxyXG4gICAgICB0aGlzLnVpTm90aWZpY2F0aW9uLndhcm5pbmcoJ1snICsgZW50aXR5TmFtZSArICddIGhhcyBtb3JlIHJlY29yZHMgYXZhaWxhYmxlIHRoYW4gc3VwcG9ydGVkJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdFF1ZXJ5Q2hvaWNlcyA9IChxdWVyeTogRW50aXR5UXVlcnksIGVudGl0aWVzOiBBcnJheTxFbnRpdHk+LCBwS2V5TmFtZTogc3RyaW5nLCBoaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKTogQXJyYXk8VHJ1Q2hvaWNlPiA9PiB7XHJcbiAgICBpZiAocXVlcnkgJiYgcXVlcnkub3JkZXJCeUNsYXVzZSlcclxuICAgICAgcmV0dXJuIF8ubWFwKGVudGl0aWVzLCAoZW50aXR5OiBhbnkpID0+IHsgcmV0dXJuIHsgdmFsdWU6IHsgJDogZW50aXR5W3BLZXlOYW1lXSB9LCBsYWJlbDogaGlkICE9PSBudWxsID8gaGlkIDogZW50aXR5LkhJRCB9OyB9KTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIF8uc29ydEJ5KF8ubWFwKGVudGl0aWVzLCAoZW50aXR5OiBhbnkpID0+IHsgcmV0dXJuIHsgdmFsdWU6IHsgJDogZW50aXR5W3BLZXlOYW1lXSB9LCBsYWJlbDogaGlkICE9PSBudWxsID8gaGlkIDogZW50aXR5LkhJRCB9OyB9KSwgJ2xhYmVsJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE5hbWVWYWx1ZXMgPSAocXVlcnk6IEVudGl0eVF1ZXJ5LCBlbnRpdGllczogQXJyYXk8RW50aXR5PiwgcEtleU5hbWU6IHN0cmluZyk6IEFycmF5PFRydU5hbWVWYWx1ZT4gPT4ge1xyXG4gICAgICBpZiAocXVlcnkgJiYgcXVlcnkub3JkZXJCeUNsYXVzZSlcclxuICAgICAgICByZXR1cm4gXy5tYXAoZW50aXRpZXMsIChlbnRpdHk6IGFueSkgPT4geyByZXR1cm4geyBuYW1lOiBlbnRpdHkuTmFtZSwgdmFsdWU6IHsgJDogZW50aXR5LlZhbHVlIH0sIGVudGl0eTogZW50aXR5IH07IH0pO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIF8uc29ydEJ5KF8ubWFwKGVudGl0aWVzLCAoZW50aXR5OiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZW50aXR5Lk5hbWUsIHZhbHVlOiB7ICQ6IGVudGl0eS5WYWx1ZSB9LCBlbnRpdHk6IGVudGl0eSB9OyB9KSwgJ2xhYmVsJyk7XHJcbiAgfVxyXG5cclxuICBhZGQgPSAoZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSwgY29udGV4dEZpbHRlcnM6IGFueSA9IG51bGwpID0+IHtcclxuICAgIGxldCBuZXdFbnRpdHkgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmNyZWF0ZUVudGl0eShlbnRpdHkucHJvdG90eXBlLmVudGl0eVR5cGUpO1xyXG4gICAgcmV0dXJuIG5ld0VudGl0eTtcclxuICB9O1xyXG5cclxuICBzZWFyY2ggPSAoZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwgPSBudWxsLFxyXG4gICAgZXhwYW5kczogW10gfCBudWxsLFxyXG4gICAgZ2xvYmFsOiBib29sZWFuKTogT2JzZXJ2YWJsZTxFbnRpdHlbXT4gPT4ge1xyXG5cclxuICAgIHZhciBxdWVyeTogYW55O1xyXG4gICAgaWYgKGV4cGFuZHMgJiYgZXhwYW5kcy5sZW5ndGgpIHtcclxuICAgICAgaWYgKGdsb2JhbClcclxuICAgICAgICBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLmV4cGFuZChleHBhbmRzLmpvaW4oJywgJykpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS5leHBhbmQoZXhwYW5kcy5qb2luKCcsICcpKS50b3AodGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZ2xvYmFsKVxyXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLnRvcCh0aGlzLmFwcEVudmlyb25tZW50Lm1heFJlY29yZENvdW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2V0dXBRdWVyeSAhPSBudWxsKVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG5cclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWdsb2JhbClcclxuICAgICAgICB0aGlzLndhcm5JZk1heFJlY29yZHMocXVlcnlEYXRhLnJlc3VsdHMsIGVudGl0eS5uYW1lKTtcclxuICAgICAgcmV0dXJuIHF1ZXJ5RGF0YS5yZXN1bHRzO1xyXG4gICAgfSkpKTtcclxuICB9O1xyXG5cclxuICBzZWFyY2hDYWNoZU9ubHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgc2V0dXBRdWVyeTogYW55IHwgbnVsbCA9IG51bGwsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwgPSBudWxsKTogT2JzZXJ2YWJsZTxFbnRpdHlbXT4gPT4ge1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSk7XHJcbiAgICBpZiAoc2V0dXBRdWVyeSlcclxuICAgICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuICAgIHJldHVybiBvZih0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpKTtcclxuICB9O1xyXG5cclxuICBzZWFyY2hDYWNoZU9ubHlTeW5jaHJvbm91c2x5ID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwgPSBudWxsLFxyXG4gICAgZXhwYW5kczogW10gfCBudWxsID0gbnVsbCk6IEFycmF5PGFueT4gPT4ge1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSk7XHJcbiAgICBpZiAoc2V0dXBRdWVyeSlcclxuICAgICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuICAgIHJldHVybiB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaEJ5UmVmQ2FjaGVPbmx5U3luY2hyb25vdXNseSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICByZWY6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwgPSBudWxsKTogQXJyYXk8YW55PiA9PiB7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChyZWYpXHJcbiAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKTtcclxuICAgIHJldHVybiB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaFF1ZXJ5Q2hvaWNlcyA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIGhpZDogc3RyaW5nIHwgbnVsbCA9IG51bGwsXHJcbiAgICBnb1RvU2VydmVyOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICByZWY6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFRydUNob2ljZVtdPiA9PiB7XHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgbGV0IHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSk7XHJcbiAgICBpZiAoc2V0dXBRdWVyeSlcclxuICAgICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5LCBlbnRpdHkpID8/IHF1ZXJ5O1xyXG4gICAgaWYgKHJlZilcclxuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpO1xyXG4gICAgcXVlcnkgPSBxdWVyeS50b3AodGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudCk7XHJcbiAgICBpZiAoZ29Ub1NlcnZlcikge1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YodGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lLCBudWxsKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoTmFtZVZhbHVlc0NhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VHJ1TmFtZVZhbHVlW10+ID0+IHtcclxuICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSkgPz8gcXVlcnk7XHJcbiAgICBpZiAocmVmKVxyXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKTtcclxuICAgIHJldHVybiBvZih0aGlzLmZvcm1hdE5hbWVWYWx1ZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWYgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgZmV0Y2hTdHJhdGVneTogRmV0Y2hTdHJhdGVneS5Gcm9tU2VydmVyXHJcbiAgICB9KTtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLndoZXJlKGVudGl0eS5uYW1lICsgJ1JlZicsICc9PScsIHJlZikudXNpbmcocXVlcnlPcHRpb25zKTtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICB9KSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaEJ5UmVmUHJlZmVyZWRDYWNoZSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICByZWY6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGxldCBjYWNoZWRFbnRpdHkgPSB0aGlzLnNlYXJjaEJ5UmVmQ2FjaGVPbmx5KGVudGl0eSwgcmVmKTtcclxuICAgIGlmIChjYWNoZWRFbnRpdHkpIHtcclxuICAgICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpLnVzaW5nKHF1ZXJ5T3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0c1swXTtcclxuICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbVNlcnZlclxyXG4gICAgICB9KTtcclxuICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHNbMF07XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZDYWNoZU9ubHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZBcnJheUNhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZnM6IEFycmF5PG51bWJlcj4sXHJcbiAgICBpbmNsdWRlRGVsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgXHJcbiAgICBpZiAoIWluY2x1ZGVEZWxldGVkKVxyXG4gICAgICBpbmNsdWRlRGVsZXRlZCA9IGZhbHNlO1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgaW5jbHVkZURlbGV0ZWQ6IGluY2x1ZGVEZWxldGVkLFxyXG4gICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgaWYgKHF1ZXJ5ID09PSBudWxsKS8vc2V0dXBRdWVyeSgpIHJldHVybmVkIG51bGwgdG8gc2VsZWN0IG5vIHJvd3NcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgaWYgKHJlZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICAgIHZhciBwcmVkaWNhdGUgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVByZWRpY2F0ZShwa2V5TmFtZSwgJz09JywgcmVmc1swXSk7XHJcbiAgICAgIF8ucmVzdChyZWZzLCAxKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUub3IocGtleU5hbWUsICc9PScsIHJlZik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKHByZWRpY2F0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGgpXHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hCeVJlZldpdGhRdWVyeSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnksXHJcbiAgICByZWY6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5W10+ID0+IHtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHByZWRpY2F0ZSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUHJlZGljYXRlKHBrZXlOYW1lLCAnPT0nLCByZWYpO1xyXG4gICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcmVkaWNhdGUpO1xyXG5cclxuICAgIHZhciBsb2NhbFJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG5cclxuICAgIGlmIChsb2NhbFJlc3VsdHMubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gb2YobG9jYWxSZXN1bHRzKTtcclxuXHJcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhKSA9PiB7XHJcbiAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0cztcclxuICAgIH0pKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoVXNlckJ5UmVmQ2FjaGVPbmx5ID0gKFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSgnUXVlcnlUcnVEYlVzZXInKS53aGVyZSgnVHJ1RGJVc2VyUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgY3VzdG9tU2VhcmNoID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHF1ZXJ5OiBhbnkpID0+IHtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndhcm5JZk1heFJlY29yZHMocXVlcnlEYXRhLnJlc3VsdHMsIGVudGl0eS5uYW1lKTtcclxuICAgICAgcmV0dXJuIHF1ZXJ5RGF0YS5yZXN1bHRzO1xyXG4gICAgfSkpKTtcclxuICB9O1xyXG5cclxuICBleHBvcnQgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgZ3JpZFNwZWM6IHN0cmluZyxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwsXHJcbiAgICBlbnRpdHlSZWZzOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgb3B0aW9uczogYW55KSA9PiB7XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB2YXIgYXJncyA9IHtcclxuICAgICAgcnVuQXN5bmM6IGZhbHNlLFxyXG4gICAgICB1c2VOYW1lczogZmFsc2UsXHJcbiAgICAgIHVzZUVtcHR5VGFnczogZmFsc2UsXHJcbiAgICAgIGVudGl0eVJlZnM6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcclxuICAgICAgZW50aXR5VHlwZU5hbWU6IGVudGl0eS5uYW1lLFxyXG4gICAgICBncmlkU3BlYzogZ3JpZFNwZWNcclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5hc3luYylcclxuICAgICAgYXJncy5ydW5Bc3luYyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VOYW1lcylcclxuICAgICAgYXJncy51c2VOYW1lcyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VFbXB0eVRhZ3MpXHJcbiAgICAgIGFyZ3MudXNlRW1wdHlUYWdzID0gdHJ1ZTtcclxuICAgIHZhciBxdWVyeVRleHQ7XHJcbiAgICBpZiAob3B0aW9ucy51c2VHcmlkKSB7XHJcbiAgICAgIGFyZ3MuZW50aXR5UmVmcyA9IGVudGl0eVJlZnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KCdub25hbWUnKTtcclxuICAgICAgaWYgKHNldHVwUXVlcnkpXHJcbiAgICAgICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgaWYgKHF1ZXJ5ID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdObyByZWNvcmRzIHNlbGVjdGVkIGJ5IHF1ZXJ5Jyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5VGV4dCA9IHF1ZXJ5Ll90b1VyaSh0aGlzLl9lbnRpdHlNYW5hZ2VyKTtcclxuICAgICAgICBxdWVyeVRleHQgPSBxdWVyeVRleHQuc3BsaXQoJz8nKVsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlOb3RpZmljYXRpb24uaW5mbyhhcmdzLnJ1bkFzeW5jID8gJ1F1ZXVpbmcgZXhwb3J0Li4uJyA6ICdFeHBvcnRpbmcuLi4nKTtcclxuXHJcbiAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh4aHIucmVzcG9uc2VUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuX2Jhc2VVcmwgKyAnL2FwaS9leHBvcnQvZXhlY3V0ZScpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Jyk7XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgdXNlclJlZjogdGhpcy51c2VyLmFjdGl2ZVVzZXJSZWYsXHJcbiAgICAgIHJ1bkFzeW5jOiBhcmdzLnJ1bkFzeW5jLFxyXG4gICAgICB1c2VOYW1lczogYXJncy51c2VOYW1lcyxcclxuICAgICAgdXNlRW1wdHlUYWdzOiBhcmdzLnVzZUVtcHR5VGFncyxcclxuICAgICAgZW50aXR5UmVmczogYXJncy5lbnRpdHlSZWZzLFxyXG4gICAgICBlbnRpdHlUeXBlTmFtZTogYXJncy5lbnRpdHlUeXBlTmFtZSxcclxuICAgICAgZ3JpZFNwZWM6IGFyZ3MuZ3JpZFNwZWMsXHJcbiAgICAgIHF1ZXJ5OiBxdWVyeVRleHRcclxuICAgIH0pKVxyXG4gIH07XHJcblxyXG4gIGRvd25sb2FkRnJvbVVybCA9ICh1cmw6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLl9iYXNlVXJsICsgdXJsLCBKU09OLnN0cmluZ2lmeShkYXRhKSwge1xyXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCcgfSxcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXHJcbiAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7IHRoaXMuc2F2ZURvd25sb2FkZWRGaWxlKHJlc3BvbnNlKTsgfSxcclxuICAgICAgICBlcnJvcjogKGV4OiBhbnkpID0+IHsgY29uc29sZS5sb2coJ2Vycm9yJywgdGhpcy51aU5vdGlmaWNhdGlvbi5lcnJvcignU2VydmVyIEVycm9yOiAnICsgZXguc3RhdHVzLCBbZXguZXJyb3IuTWVzc2FnZV0pKSB9XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGRvd25sb2FkRnJvbVNlcnZpY2UgPSAoc2VydmljZU5hbWU6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmRvd25sb2FkRnJvbVVybChzZXJ2aWNlTmFtZSwgZGF0YSk7XHJcbiAgfTtcclxuXHJcbiAgdXBsb2FkRnJvbVVybCA9ICh1cmw6IHN0cmluZywgZGF0YTogRm9ybURhdGEpID0+IHtcclxuICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuX2Jhc2VVcmwgKyB1cmwsIGRhdGEsIHtcclxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnIH0sXHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ1xyXG4gICAgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PikgPT4geyB0aGlzLnNhdmVEb3dubG9hZGVkRmlsZShyZXNwb25zZSk7IH0sXHJcbiAgICAgICAgZXJyb3I6IChleDogYW55KSA9PiB7IGNvbnNvbGUubG9nKCdlcnJvcicsIHRoaXMudWlOb3RpZmljYXRpb24uZXJyb3IoJ1NlcnZlciBFcnJvcjogJyArIGV4LnN0YXR1cywgW2V4LmVycm9yLk1lc3NhZ2VdKSkgfVxyXG4gICAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAqIFJlcXVlc3QgYW4gYWN0aW9uLlxyXG4gICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5UmVmcyAtIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGVudGl0eSBwa2V5IHZhbHVlcy5cclxuICAqIEByZXR1cm5zIHtwcm9taXNlfSBvbiBzdWNjZXNzLCBwYXNzZXMgdGhlIHJlc3VsdHMgdG8gc3VjY2VzcyBoYW5kbGVyOyBcclxuICAqICAgICAgb24gZmFpbHVyZSwgcGFzc2VzIGV4Y2VwdGlvbiB0byBmYWlsIGhhbmRsZXIuXHJcbiAgKi9cclxuICByZXF1ZXN0QWN0aW9uID0gKGFjdGlvbk5hbWU6IHN0cmluZywgZW50aXR5UmVmczogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KCdSZXF1ZXN0QWN0aW9uJyArIGFjdGlvbk5hbWUpXHJcbiAgICAud2l0aFBhcmFtZXRlcnMoe1xyXG4gICAgICAkbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICRlbmNvZGluZzogJ0pTT04nLFxyXG4gICAgICAkZGF0YTogeyByZWZzOiBlbnRpdHlSZWZzIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5fZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnkocXVlcnkpLnRoZW4oKHF1ZXJ5RGF0YTogYW55KSA9PiB7O1xyXG4gICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHM7XHJcbiAgICB9KSkpO1xyXG5gYH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlRG93bmxvYWRlZEZpbGUgPSBhc3luYyAocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcclxuICAgIGlmICghY29udGVudERpc3Bvc2l0aW9uKVxyXG4gICAgICByZXR1cm47IC8vIE5PVEU6IGNhbm5vdCBzYXZlIHdpdGhvdXQgaGVhZGVyIGluZm9cclxuICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuZXh0cmFjdEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbihjb250ZW50RGlzcG9zaXRpb24pO1xyXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYm9keTtcclxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIGFzIHN0cmluZyB9KTtcclxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb24gPSAodGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgcGFydHMgPSBfLm1hcCh0ZXh0LnNwbGl0KCc7JyksIGZ1bmN0aW9uIChwYXJ0KSB7IHJldHVybiBwYXJ0LnRyaW0oKTsgfSk7XHJcbiAgICB2YXIgcHJlZml4ID0gJ2ZpbGVuYW1lPSc7XHJcbiAgICB2YXIgZmlsZW5hbWVQYXJ0ID0gXy5maW5kKHBhcnRzLCBmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gcGFydC5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCkgPT09IHByZWZpeCB9KTtcclxuICAgIGlmICghZmlsZW5hbWVQYXJ0KVxyXG4gICAgICByZXR1cm4gJ2ZpbGUnO1xyXG4gICAgdmFyIGZpbGVuYW1lID0gZmlsZW5hbWVQYXJ0LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcclxuICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvXCIvZywgJycpO1xyXG4gICAgcmV0dXJuIGZpbGVuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEltcG9ydHMgdGhlIGRhdGEgb2YgYSBzZXQgb2YgZmlsZXMuXHJcbiAgICAqIFxyXG4gICAgKiBJTVBMRU1FTlRBVElPTlxyXG4gICAgKiBUaGUgaW5wdXQgZWxlbWVudCBzdG9yZXMgdGhlIGxpc3Qgb2YgZmlsZXMgdGhlIHVzZXIgc2VsZWN0cy4gSWYgdGhlIHVzZXIgd2VyZSB0b1xyXG4gICAgKiB1c2UgdGhlIHNhbWUgaW5wdXQgZWxlbWVudCB0byBzZWxlY3QgdGhlIHNhbWUgZmlsZShzKSB0aGUgbmV4dCB0aW1lLCB0aGVuIHRoZSBpbnB1dFxyXG4gICAgKiBlbGVtZW50IHdvdWxkIG5vdCBmaXJlIHRoZSBjaGFuZ2UgZXZlbnQgLS0gcmVzdWx0aW5nIGluIG5vIGltcG9ydC4gIFRoZXJlZm9yZSwgbmVlZFxyXG4gICAgKiB0byBjbGVhciB0aGUgZmlsZSBzZWxlY3Rpb24uICBUaGUgaW1wbGVtZW50YXRpb24gb2YgY2xlYXJpbmcgaXMgc2xpZ2h0bHkgZGlmZmVyZW50XHJcbiAgICAqIGZvciBJRSB2cy4gQ2hyb21lLiAgSW4gQ2hyb21lLCBjbGVhcmluZyB0aGUgc2VsZWN0aW9uIChieSBzZXR0aW5nIHRoZSBlbGVtZW50IHZhbHVlXHJcbiAgICAqIHRvIG51bGwpIHJlc3VsdHMgaW4gY2xlYXJpbmcgdGhlIEZpbGVMaXN0IG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGNoYW5nZSBoYW5kbGVyXHJcbiAgICAqICh0aGlzIGZ1bmN0aW9uKS4gIFRoZXJlZm9yZSwgbmVlZCB0byBjbGVhciB0aGUgc2VsZWN0aW9uIF9hZnRlcl8gdXNpbmcgdGhlIHBhc3NlZFxyXG4gICAgKiBGaWxlTGlzdCBvYmplY3QuICBGb3IgSUUsIGNsZWFyaW5nIHRoZSBzZWxlY3Rpb24gZG9lcyBub3QgY2xlYXIgdGhlIEZpbGVMaXN0IHBhc3NlZCBcclxuICAgICogdG8gdGhlIGhhbmRsZXIsIGJ1dCBpdCBkb2VzIGNhdXNlIHRoZSBjaGFuZ2UgaGFuZGxlciB0byBmaXJlLiAgVG8gaWdub3JlIHRoaXMgZXZlbnQsXHJcbiAgICAqIHJldHVybiBpZiB0aGUgRmlsZUxpc3QgaXMgZW1wdHkgLS0gd2hpY2ggaXQgaXMgc2luY2UganVzdCBjbGVhcmVkIGl0LlxyXG4gICAgKi9cclxuICBpbXBvcnQgPSAoZmlsZXM6IEFycmF5PEZpbGU+KSA9PiB7XHJcbiAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIEFycmF5LmZyb20oZmlsZXMgfHwgW10pLmZvckVhY2goKGZpbGUpID0+IHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL3ZhciBjb250ZXh0RmlsdGVyVmFsdWVzID0gY29udGV4dEZpbHRlcnMuc2VyaWFsaXplVmFsdWVzKCk7XHJcbiAgICAvL2lmIChjb250ZXh0RmlsdGVyVmFsdWVzKVxyXG4gICAgLy8gIGZvcm1EYXRhLmFwcGVuZCgnY29udGV4dEZpbHRlcnMnLCBjb250ZXh0RmlsdGVyVmFsdWVzKTtcclxuXHJcbiAgICB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLl9iYXNlVXJsICsgJy9hcGkvaW1wb3J0L2V4ZWN1dGUnLCBKU09OLnN0cmluZ2lmeShmb3JtRGF0YSksIHtcclxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJycgfSxcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXHJcbiAgICB9KVxyXG4gICAgLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkuYnl0ZUxlbmd0aClcclxuICAgICAgICAgIHRoaXMuc2F2ZURvd25sb2FkZWRGaWxlKHJlc3BvbnNlKTtcclxuICAgICAgICBsZXQgb3BlcmF0aW9uU3RhdHVzSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ09wZXJhdGlvbi1TdGF0dXMnKTtcclxuICAgICAgICBsZXQgb3BlcmF0aW9uU3RhdHVzID0gb3BlcmF0aW9uU3RhdHVzSGVhZGVyID8gSlNPTi5wYXJzZShvcGVyYXRpb25TdGF0dXNIZWFkZXIpIDogbnVsbDtcclxuICAgICAgICBpZiAob3BlcmF0aW9uU3RhdHVzLkVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB2YXIgbGluZXMgPSBfLm1hcChvcGVyYXRpb25TdGF0dXMuRXJyb3JzLCB0aGlzLnRleHRNYW5hZ2VyLmZtdEltcG9ydEVycm9yKTtcclxuICAgICAgICAgIF8uZWFjaChsaW5lcywgKGxpbmUpID0+IHsgdGhpcy51aU5vdGlmaWNhdGlvbi5sb2cobGluZSk7IH0pO1xyXG4gICAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdSZWNvcmRzIGltcG9ydGVkOiAnICsgcmVzcG9uc2UuUmVjb3Jkc0ltcG9ydGVkICsgJywgUmVjb3JkcyByZWFkOiAnICsgcmVzcG9uc2UuUmVjb3Jkc1JlYWQgKyAnLCBFcnJvcnM6ICcgKyByZXNwb25zZS5FcnJvcnMubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi5pbmZvKCdSZWNvcmRzIGltcG9ydGVkOiAnICsgcmVzcG9uc2UuUmVjb3Jkc0ltcG9ydGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIHRoaXMudWlOb3RpZmljYXRpb24uZXJyb3IoJ1NlcnZlciBFcnJvcjogJyArIGV4LnN0YXR1cywgW2V4LmVycm9yLk1lc3NhZ2VdKSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWVudGl0eS1hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvc2VydmljZXMvdHJ1LWVudGl0eS1hY2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBc0MsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2xGLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVFuRCxNQUFNLE9BQU8saUJBQWlCO0lBT2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFWRixjQUFjLENBQW9CO0lBQ2xDLGNBQWMsQ0FBaUI7SUFDL0IsZUFBZSxHQUFXLENBQUMsQ0FBQztJQUM1QixRQUFRLENBQVM7SUFFekIsWUFDVSxVQUFzQixFQUN0QixjQUFpQyxFQUNqQyxjQUFpQyxFQUNqQyxXQUEyQixFQUMzQixJQUFhO1FBSmIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsV0FBMkI7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFj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LFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25LLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzVFLENBQUM7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNuRyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFBO3VHQXJkVSxpQkFBaUI7MkdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBFbnRpdHksIEVudGl0eU1hbmFnZXIsIEVudGl0eVF1ZXJ5LCBGZXRjaFN0cmF0ZWd5IH0gZnJvbSBcImJyZWV6ZS1jbGllbnRcIjtcclxuaW1wb3J0IHsgVHJ1RW50aXR5QmFzZSB9IGZyb20gJy4uL2Jhc2UtY2xhc3Nlcy90cnUtZW50aXR5LWJhc2UnXHJcbmltcG9ydCB7IFRydVVpTm90aWZpY2F0aW9uIH0gZnJvbSBcIi4vdHJ1LXVpLW5vdGlmaWNhdGlvblwiO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ29udGV4dCB9IGZyb20gXCIuL3RydS1kYXRhLWNvbnRleHRcIjtcclxuaW1wb3J0IHsgVHJ1QnJlZXplQ29udGV4dCB9IGZyb20gXCIuL3RydS1icmVlemUtY29udGV4dC1mYWN0b3J5XCI7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcInVuZGVyc2NvcmVcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBkZWZlciwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJ1QXBwRW52aXJvbm1lbnQgfSBmcm9tIFwiLi90cnUtYXBwLWVudmlyb25tZW50XCI7XHJcbmltcG9ydCB7IFRydUNob2ljZSB9IGZyb20gXCIuLi9jbGFzc2VzL3RydS1jaG9pY2VcIjtcclxuaW1wb3J0IHsgVHJ1TmFtZVZhbHVlIH0gZnJvbSBcIi4uL2NsYXNzZXMvdHJ1LW5hbWUtdmFsdWVcIjtcclxuaW1wb3J0IHsgVHJ1VXNlciB9IGZyb20gXCIuL3RydS11c2VyXCI7XHJcbmltcG9ydCB7IFRydVRleHRNYW5hZ2VyIH0gZnJvbSBcIi4vdHJ1LXRleHQtbWFuYWdlclwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJ1RW50aXR5QWNjZXNzb3Ige1xyXG4gIHByaXZhdGUgX2JyZWV6ZUNvbnRleHQhOiBUcnVCcmVlemVDb250ZXh0O1xyXG4gIHByaXZhdGUgX2VudGl0eU1hbmFnZXIhOiBFbnRpdHlNYW5hZ2VyO1xyXG4gIHByaXZhdGUgX21heFJlY29yZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2Jhc2VVcmw6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGFwcEVudmlyb25tZW50OiBUcnVBcHBFbnZpcm9ubWVudCxcclxuICAgIHByaXZhdGUgdWlOb3RpZmljYXRpb246IFRydVVpTm90aWZpY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSB0ZXh0TWFuYWdlcjogVHJ1VGV4dE1hbmFnZXIsXHJcbiAgICBwcml2YXRlIHVzZXI6IFRydVVzZXIpIHtcclxuICAgIHRoaXMuX21heFJlY29yZENvdW50ID0gdGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudDtcclxuICAgIHRoaXMuX2Jhc2VVcmwgPSB0aGlzLmFwcEVudmlyb25tZW50LmFwcFVyaTtcclxuICB9XHJcblxyXG4gIHNldCBjb250ZXh0KGRhdGFDb250ZXh0OiBUcnVEYXRhQ29udGV4dCkge1xyXG4gICAgdGhpcy5fYnJlZXplQ29udGV4dCA9IGRhdGFDb250ZXh0LmJyZWV6ZUNvbnRleHQ7XHJcbiAgICB0aGlzLl9lbnRpdHlNYW5hZ2VyID0gZGF0YUNvbnRleHQuZW50aXR5TWFuYWdlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UXVlcnlTZXJ2aWNlTmFtZSA9IChlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICByZXR1cm4gJ1F1ZXJ5JyArIGVudGl0eS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXJuSWZNYXhSZWNvcmRzID0gKGVudGl0aWVzOiBhbnlbXSwgZW50aXR5TmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAoZW50aXRpZXMubGVuZ3RoID49IHRoaXMuYXBwRW52aXJvbm1lbnQubWF4UmVjb3JkQ291bnQpXHJcbiAgICAgIHRoaXMudWlOb3RpZmljYXRpb24ud2FybmluZygnWycgKyBlbnRpdHlOYW1lICsgJ10gaGFzIG1vcmUgcmVjb3JkcyBhdmFpbGFibGUgdGhhbiBzdXBwb3J0ZWQnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0UXVlcnlDaG9pY2VzID0gKHF1ZXJ5OiBFbnRpdHlRdWVyeSwgZW50aXRpZXM6IEFycmF5PEVudGl0eT4sIHBLZXlOYW1lOiBzdHJpbmcsIGhpZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBBcnJheTxUcnVDaG9pY2U+ID0+IHtcclxuICAgIGlmIChxdWVyeSAmJiBxdWVyeS5vcmRlckJ5Q2xhdXNlKVxyXG4gICAgICByZXR1cm4gXy5tYXAoZW50aXRpZXMsIChlbnRpdHk6IGFueSkgPT4geyByZXR1cm4geyB2YWx1ZTogeyAkOiBlbnRpdHlbcEtleU5hbWVdIH0sIGxhYmVsOiBoaWQgIT09IG51bGwgPyBoaWQgOiBlbnRpdHkuSElEIH07IH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gXy5zb3J0QnkoXy5tYXAoZW50aXRpZXMsIChlbnRpdHk6IGFueSkgPT4geyByZXR1cm4geyB2YWx1ZTogeyAkOiBlbnRpdHlbcEtleU5hbWVdIH0sIGxhYmVsOiBoaWQgIT09IG51bGwgPyBoaWQgOiBlbnRpdHkuSElEIH07IH0pLCAnbGFiZWwnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0TmFtZVZhbHVlcyA9IChxdWVyeTogRW50aXR5UXVlcnksIGVudGl0aWVzOiBBcnJheTxFbnRpdHk+LCBwS2V5TmFtZTogc3RyaW5nKTogQXJyYXk8VHJ1TmFtZVZhbHVlPiA9PiB7XHJcbiAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS5vcmRlckJ5Q2xhdXNlKVxyXG4gICAgICAgIHJldHVybiBfLm1hcChlbnRpdGllcywgKGVudGl0eTogYW55KSA9PiB7IHJldHVybiB7IG5hbWU6IGVudGl0eS5OYW1lLCB2YWx1ZTogeyAkOiBlbnRpdHkuVmFsdWUgfSwgZW50aXR5OiBlbnRpdHkgfTsgfSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gXy5zb3J0QnkoXy5tYXAoZW50aXRpZXMsIChlbnRpdHk6IGFueSkgPT4geyByZXR1cm4geyBuYW1lOiBlbnRpdHkuTmFtZSwgdmFsdWU6IHsgJDogZW50aXR5LlZhbHVlIH0sIGVudGl0eTogZW50aXR5IH07IH0pLCAnbGFiZWwnKTtcclxuICB9XHJcblxyXG4gIGFkZCA9IChlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLCBjb250ZXh0RmlsdGVyczogYW55ID0gbnVsbCkgPT4ge1xyXG4gICAgbGV0IG5ld0VudGl0eSA9IHRoaXMuX2VudGl0eU1hbmFnZXIuY3JlYXRlRW50aXR5KGVudGl0eS5wcm90b3R5cGUuZW50aXR5VHlwZSk7XHJcbiAgICByZXR1cm4gbmV3RW50aXR5O1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaCA9IChlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgc2V0dXBRdWVyeTogYW55IHwgbnVsbCA9IG51bGwsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwsXHJcbiAgICBnbG9iYWw6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEVudGl0eVtdPiA9PiB7XHJcblxyXG4gICAgdmFyIHF1ZXJ5OiBhbnk7XHJcbiAgICBpZiAoZXhwYW5kcyAmJiBleHBhbmRzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoZ2xvYmFsKVxyXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkuZXhwYW5kKGV4cGFuZHMuam9pbignLCAnKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLmV4cGFuZChleHBhbmRzLmpvaW4oJywgJykpLnRvcCh0aGlzLmFwcEVudmlyb25tZW50Lm1heFJlY29yZENvdW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChnbG9iYWwpXHJcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkudG9wKHRoaXMuYXBwRW52aXJvbm1lbnQubWF4UmVjb3JkQ291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZXR1cFF1ZXJ5ICE9IG51bGwpXHJcbiAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5fZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnkocXVlcnkpLnRoZW4oKHF1ZXJ5RGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZ2xvYmFsKVxyXG4gICAgICAgIHRoaXMud2FybklmTWF4UmVjb3JkcyhxdWVyeURhdGEucmVzdWx0cywgZW50aXR5Lm5hbWUpO1xyXG4gICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHM7XHJcbiAgICB9KSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaENhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIGV4cGFuZHM6IFtdIHwgbnVsbCA9IG51bGwpOiBPYnNlcnZhYmxlPEVudGl0eVtdPiA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgcmV0dXJuIG9mKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaENhY2hlT25seVN5bmNocm9ub3VzbHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgc2V0dXBRdWVyeTogYW55IHwgbnVsbCA9IG51bGwsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwgPSBudWxsKTogQXJyYXk8YW55PiA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZDYWNoZU9ubHlTeW5jaHJvbm91c2x5ID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcclxuICAgIGV4cGFuZHM6IFtdIHwgbnVsbCA9IG51bGwpOiBBcnJheTxhbnk+ID0+IHtcclxuICAgIGxldCBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgaWYgKHJlZilcclxuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoUXVlcnlDaG9pY2VzID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwgPSBudWxsLFxyXG4gICAgZ29Ub1NlcnZlcjogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgYWxsUmVjb3JkczogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxUcnVDaG9pY2VbXT4gPT4ge1xyXG4gICAgdHlwZSBPYmplY3RLZXkgPSBrZXlvZiB0eXBlb2YgZW50aXR5O1xyXG4gICAgY29uc3QgcGtleU5hbWUgPSBlbnRpdHkubmFtZSArICdSZWYnIGFzIE9iamVjdEtleTtcclxuICAgIGxldCBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgaWYgKHNldHVwUXVlcnkpXHJcbiAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSwgZW50aXR5KSA/PyBxdWVyeTtcclxuICAgIGlmIChyZWYpXHJcbiAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKTtcclxuICAgIGlmICghYWxsUmVjb3JkcylcclxuICAgICAgcXVlcnkgPSBxdWVyeS50b3AodGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudCk7XHJcbiAgICBpZiAoZ29Ub1NlcnZlcikge1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YodGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lLCBudWxsKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoTmFtZVZhbHVlc0NhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VHJ1TmFtZVZhbHVlW10+ID0+IHtcclxuICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSkgPz8gcXVlcnk7XHJcbiAgICBpZiAocmVmKVxyXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKTtcclxuICAgIHJldHVybiBvZih0aGlzLmZvcm1hdE5hbWVWYWx1ZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWYgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgZmV0Y2hTdHJhdGVneTogRmV0Y2hTdHJhdGVneS5Gcm9tU2VydmVyXHJcbiAgICB9KTtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLndoZXJlKGVudGl0eS5uYW1lICsgJ1JlZicsICc9PScsIHJlZikudXNpbmcocXVlcnlPcHRpb25zKTtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICB9KSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaEJ5UmVmUHJlZmVyZWRDYWNoZSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICByZWY6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGxldCBjYWNoZWRFbnRpdHkgPSB0aGlzLnNlYXJjaEJ5UmVmQ2FjaGVPbmx5KGVudGl0eSwgcmVmKTtcclxuICAgIGlmIChjYWNoZWRFbnRpdHkpIHtcclxuICAgICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpLnVzaW5nKHF1ZXJ5T3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0c1swXTtcclxuICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbVNlcnZlclxyXG4gICAgICB9KTtcclxuICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHNbMF07XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZDYWNoZU9ubHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZBcnJheUNhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZnM6IEFycmF5PG51bWJlcj4sXHJcbiAgICBpbmNsdWRlRGVsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgXHJcbiAgICBpZiAoIWluY2x1ZGVEZWxldGVkKVxyXG4gICAgICBpbmNsdWRlRGVsZXRlZCA9IGZhbHNlO1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgaW5jbHVkZURlbGV0ZWQ6IGluY2x1ZGVEZWxldGVkLFxyXG4gICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgaWYgKHF1ZXJ5ID09PSBudWxsKS8vc2V0dXBRdWVyeSgpIHJldHVybmVkIG51bGwgdG8gc2VsZWN0IG5vIHJvd3NcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgaWYgKHJlZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICAgIHZhciBwcmVkaWNhdGUgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVByZWRpY2F0ZShwa2V5TmFtZSwgJz09JywgcmVmc1swXSk7XHJcbiAgICAgIF8ucmVzdChyZWZzLCAxKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUub3IocGtleU5hbWUsICc9PScsIHJlZik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKHByZWRpY2F0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGgpXHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hCeVJlZldpdGhRdWVyeSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnksXHJcbiAgICByZWY6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5W10+ID0+IHtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHByZWRpY2F0ZSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUHJlZGljYXRlKHBrZXlOYW1lLCAnPT0nLCByZWYpO1xyXG4gICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcmVkaWNhdGUpO1xyXG5cclxuICAgIHZhciBsb2NhbFJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG5cclxuICAgIGlmIChsb2NhbFJlc3VsdHMubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gb2YobG9jYWxSZXN1bHRzKTtcclxuXHJcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhKSA9PiB7XHJcbiAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0cztcclxuICAgIH0pKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoVXNlckJ5UmVmQ2FjaGVPbmx5ID0gKFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSgnUXVlcnlUcnVEYlVzZXInKS53aGVyZSgnVHJ1RGJVc2VyUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgY3VzdG9tU2VhcmNoID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHF1ZXJ5OiBhbnkpID0+IHtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndhcm5JZk1heFJlY29yZHMocXVlcnlEYXRhLnJlc3VsdHMsIGVudGl0eS5uYW1lKTtcclxuICAgICAgcmV0dXJuIHF1ZXJ5RGF0YS5yZXN1bHRzO1xyXG4gICAgfSkpKTtcclxuICB9O1xyXG5cclxuICBleHBvcnQgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgZ3JpZFNwZWM6IHN0cmluZyxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwsXHJcbiAgICBlbnRpdHlSZWZzOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgb3B0aW9uczogYW55KSA9PiB7XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB2YXIgYXJncyA9IHtcclxuICAgICAgcnVuQXN5bmM6IGZhbHNlLFxyXG4gICAgICB1c2VOYW1lczogZmFsc2UsXHJcbiAgICAgIHVzZUVtcHR5VGFnczogZmFsc2UsXHJcbiAgICAgIGVudGl0eVJlZnM6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcclxuICAgICAgZW50aXR5VHlwZU5hbWU6IGVudGl0eS5uYW1lLFxyXG4gICAgICBncmlkU3BlYzogZ3JpZFNwZWNcclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5hc3luYylcclxuICAgICAgYXJncy5ydW5Bc3luYyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VOYW1lcylcclxuICAgICAgYXJncy51c2VOYW1lcyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VFbXB0eVRhZ3MpXHJcbiAgICAgIGFyZ3MudXNlRW1wdHlUYWdzID0gdHJ1ZTtcclxuICAgIHZhciBxdWVyeVRleHQ7XHJcbiAgICBpZiAob3B0aW9ucy51c2VHcmlkKSB7XHJcbiAgICAgIGFyZ3MuZW50aXR5UmVmcyA9IGVudGl0eVJlZnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KCdub25hbWUnKTtcclxuICAgICAgaWYgKHNldHVwUXVlcnkpXHJcbiAgICAgICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgaWYgKHF1ZXJ5ID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdObyByZWNvcmRzIHNlbGVjdGVkIGJ5IHF1ZXJ5Jyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5VGV4dCA9IHF1ZXJ5Ll90b1VyaSh0aGlzLl9lbnRpdHlNYW5hZ2VyKTtcclxuICAgICAgICBxdWVyeVRleHQgPSBxdWVyeVRleHQuc3BsaXQoJz8nKVsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlOb3RpZmljYXRpb24uaW5mbyhhcmdzLnJ1bkFzeW5jID8gJ1F1ZXVpbmcgZXhwb3J0Li4uJyA6ICdFeHBvcnRpbmcuLi4nKTtcclxuXHJcbiAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh4aHIucmVzcG9uc2VUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuX2Jhc2VVcmwgKyAnL2FwaS9leHBvcnQvZXhlY3V0ZScpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Jyk7XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgdXNlclJlZjogdGhpcy51c2VyLmFjdGl2ZVVzZXJSZWYsXHJcbiAgICAgIHJ1bkFzeW5jOiBhcmdzLnJ1bkFzeW5jLFxyXG4gICAgICB1c2VOYW1lczogYXJncy51c2VOYW1lcyxcclxuICAgICAgdXNlRW1wdHlUYWdzOiBhcmdzLnVzZUVtcHR5VGFncyxcclxuICAgICAgZW50aXR5UmVmczogYXJncy5lbnRpdHlSZWZzLFxyXG4gICAgICBlbnRpdHlUeXBlTmFtZTogYXJncy5lbnRpdHlUeXBlTmFtZSxcclxuICAgICAgZ3JpZFNwZWM6IGFyZ3MuZ3JpZFNwZWMsXHJcbiAgICAgIHF1ZXJ5OiBxdWVyeVRleHRcclxuICAgIH0pKVxyXG4gIH07XHJcblxyXG4gIGRvd25sb2FkRnJvbVVybCA9ICh1cmw6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLl9iYXNlVXJsICsgdXJsLCBKU09OLnN0cmluZ2lmeShkYXRhKSwge1xyXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCcgfSxcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXHJcbiAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7IHRoaXMuc2F2ZURvd25sb2FkZWRGaWxlKHJlc3BvbnNlKTsgfSxcclxuICAgICAgICBlcnJvcjogKGV4OiBhbnkpID0+IHsgY29uc29sZS5sb2coJ2Vycm9yJywgdGhpcy51aU5vdGlmaWNhdGlvbi5lcnJvcignU2VydmVyIEVycm9yOiAnICsgZXguc3RhdHVzLCBbZXguZXJyb3IuTWVzc2FnZV0pKSB9XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGRvd25sb2FkRnJvbVNlcnZpY2UgPSAoc2VydmljZU5hbWU6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmRvd25sb2FkRnJvbVVybChzZXJ2aWNlTmFtZSwgZGF0YSk7XHJcbiAgfTtcclxuXHJcbiAgdXBsb2FkRnJvbVVybCA9ICh1cmw6IHN0cmluZywgZGF0YTogRm9ybURhdGEpID0+IHtcclxuICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuX2Jhc2VVcmwgKyB1cmwsIGRhdGEsIHtcclxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnIH0sXHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ1xyXG4gICAgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PikgPT4geyB0aGlzLnNhdmVEb3dubG9hZGVkRmlsZShyZXNwb25zZSk7IH0sXHJcbiAgICAgICAgZXJyb3I6IChleDogYW55KSA9PiB7IGNvbnNvbGUubG9nKCdlcnJvcicsIHRoaXMudWlOb3RpZmljYXRpb24uZXJyb3IoJ1NlcnZlciBFcnJvcjogJyArIGV4LnN0YXR1cywgW2V4LmVycm9yLk1lc3NhZ2VdKSkgfVxyXG4gICAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAqIFJlcXVlc3QgYW4gYWN0aW9uLlxyXG4gICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5UmVmcyAtIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGVudGl0eSBwa2V5IHZhbHVlcy5cclxuICAqIEByZXR1cm5zIHtwcm9taXNlfSBvbiBzdWNjZXNzLCBwYXNzZXMgdGhlIHJlc3VsdHMgdG8gc3VjY2VzcyBoYW5kbGVyOyBcclxuICAqICAgICAgb24gZmFpbHVyZSwgcGFzc2VzIGV4Y2VwdGlvbiB0byBmYWlsIGhhbmRsZXIuXHJcbiAgKi9cclxuICByZXF1ZXN0QWN0aW9uID0gKGFjdGlvbk5hbWU6IHN0cmluZywgZW50aXR5UmVmczogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KCdSZXF1ZXN0QWN0aW9uJyArIGFjdGlvbk5hbWUpXHJcbiAgICAud2l0aFBhcmFtZXRlcnMoe1xyXG4gICAgICAkbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICRlbmNvZGluZzogJ0pTT04nLFxyXG4gICAgICAkZGF0YTogeyByZWZzOiBlbnRpdHlSZWZzIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5fZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnkocXVlcnkpLnRoZW4oKHF1ZXJ5RGF0YTogYW55KSA9PiB7O1xyXG4gICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHM7XHJcbiAgICB9KSkpO1xyXG5gYH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlRG93bmxvYWRlZEZpbGUgPSBhc3luYyAocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcclxuICAgIGlmICghY29udGVudERpc3Bvc2l0aW9uKVxyXG4gICAgICByZXR1cm47IC8vIE5PVEU6IGNhbm5vdCBzYXZlIHdpdGhvdXQgaGVhZGVyIGluZm9cclxuICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuZXh0cmFjdEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbihjb250ZW50RGlzcG9zaXRpb24pO1xyXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYm9keTtcclxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIGFzIHN0cmluZyB9KTtcclxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb24gPSAodGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgcGFydHMgPSBfLm1hcCh0ZXh0LnNwbGl0KCc7JyksIGZ1bmN0aW9uIChwYXJ0KSB7IHJldHVybiBwYXJ0LnRyaW0oKTsgfSk7XHJcbiAgICB2YXIgcHJlZml4ID0gJ2ZpbGVuYW1lPSc7XHJcbiAgICB2YXIgZmlsZW5hbWVQYXJ0ID0gXy5maW5kKHBhcnRzLCBmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gcGFydC5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCkgPT09IHByZWZpeCB9KTtcclxuICAgIGlmICghZmlsZW5hbWVQYXJ0KVxyXG4gICAgICByZXR1cm4gJ2ZpbGUnO1xyXG4gICAgdmFyIGZpbGVuYW1lID0gZmlsZW5hbWVQYXJ0LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcclxuICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvXCIvZywgJycpO1xyXG4gICAgcmV0dXJuIGZpbGVuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEltcG9ydHMgdGhlIGRhdGEgb2YgYSBzZXQgb2YgZmlsZXMuXHJcbiAgICAqIFxyXG4gICAgKiBJTVBMRU1FTlRBVElPTlxyXG4gICAgKiBUaGUgaW5wdXQgZWxlbWVudCBzdG9yZXMgdGhlIGxpc3Qgb2YgZmlsZXMgdGhlIHVzZXIgc2VsZWN0cy4gSWYgdGhlIHVzZXIgd2VyZSB0b1xyXG4gICAgKiB1c2UgdGhlIHNhbWUgaW5wdXQgZWxlbWVudCB0byBzZWxlY3QgdGhlIHNhbWUgZmlsZShzKSB0aGUgbmV4dCB0aW1lLCB0aGVuIHRoZSBpbnB1dFxyXG4gICAgKiBlbGVtZW50IHdvdWxkIG5vdCBmaXJlIHRoZSBjaGFuZ2UgZXZlbnQgLS0gcmVzdWx0aW5nIGluIG5vIGltcG9ydC4gIFRoZXJlZm9yZSwgbmVlZFxyXG4gICAgKiB0byBjbGVhciB0aGUgZmlsZSBzZWxlY3Rpb24uICBUaGUgaW1wbGVtZW50YXRpb24gb2YgY2xlYXJpbmcgaXMgc2xpZ2h0bHkgZGlmZmVyZW50XHJcbiAgICAqIGZvciBJRSB2cy4gQ2hyb21lLiAgSW4gQ2hyb21lLCBjbGVhcmluZyB0aGUgc2VsZWN0aW9uIChieSBzZXR0aW5nIHRoZSBlbGVtZW50IHZhbHVlXHJcbiAgICAqIHRvIG51bGwpIHJlc3VsdHMgaW4gY2xlYXJpbmcgdGhlIEZpbGVMaXN0IG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGNoYW5nZSBoYW5kbGVyXHJcbiAgICAqICh0aGlzIGZ1bmN0aW9uKS4gIFRoZXJlZm9yZSwgbmVlZCB0byBjbGVhciB0aGUgc2VsZWN0aW9uIF9hZnRlcl8gdXNpbmcgdGhlIHBhc3NlZFxyXG4gICAgKiBGaWxlTGlzdCBvYmplY3QuICBGb3IgSUUsIGNsZWFyaW5nIHRoZSBzZWxlY3Rpb24gZG9lcyBub3QgY2xlYXIgdGhlIEZpbGVMaXN0IHBhc3NlZCBcclxuICAgICogdG8gdGhlIGhhbmRsZXIsIGJ1dCBpdCBkb2VzIGNhdXNlIHRoZSBjaGFuZ2UgaGFuZGxlciB0byBmaXJlLiAgVG8gaWdub3JlIHRoaXMgZXZlbnQsXHJcbiAgICAqIHJldHVybiBpZiB0aGUgRmlsZUxpc3QgaXMgZW1wdHkgLS0gd2hpY2ggaXQgaXMgc2luY2UganVzdCBjbGVhcmVkIGl0LlxyXG4gICAgKi9cclxuICBpbXBvcnQgPSAoZmlsZXM6IEFycmF5PEZpbGU+KSA9PiB7XHJcbiAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIEFycmF5LmZyb20oZmlsZXMgfHwgW10pLmZvckVhY2goKGZpbGUpID0+IHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL3ZhciBjb250ZXh0RmlsdGVyVmFsdWVzID0gY29udGV4dEZpbHRlcnMuc2VyaWFsaXplVmFsdWVzKCk7XHJcbiAgICAvL2lmIChjb250ZXh0RmlsdGVyVmFsdWVzKVxyXG4gICAgLy8gIGZvcm1EYXRhLmFwcGVuZCgnY29udGV4dEZpbHRlcnMnLCBjb250ZXh0RmlsdGVyVmFsdWVzKTtcclxuXHJcbiAgICB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLl9iYXNlVXJsICsgJy9hcGkvaW1wb3J0L2V4ZWN1dGUnLCBKU09OLnN0cmluZ2lmeShmb3JtRGF0YSksIHtcclxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJycgfSxcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXHJcbiAgICB9KVxyXG4gICAgLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkuYnl0ZUxlbmd0aClcclxuICAgICAgICAgIHRoaXMuc2F2ZURvd25sb2FkZWRGaWxlKHJlc3BvbnNlKTtcclxuICAgICAgICBsZXQgb3BlcmF0aW9uU3RhdHVzSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ09wZXJhdGlvbi1TdGF0dXMnKTtcclxuICAgICAgICBsZXQgb3BlcmF0aW9uU3RhdHVzID0gb3BlcmF0aW9uU3RhdHVzSGVhZGVyID8gSlNPTi5wYXJzZShvcGVyYXRpb25TdGF0dXNIZWFkZXIpIDogbnVsbDtcclxuICAgICAgICBpZiAob3BlcmF0aW9uU3RhdHVzLkVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB2YXIgbGluZXMgPSBfLm1hcChvcGVyYXRpb25TdGF0dXMuRXJyb3JzLCB0aGlzLnRleHRNYW5hZ2VyLmZtdEltcG9ydEVycm9yKTtcclxuICAgICAgICAgIF8uZWFjaChsaW5lcywgKGxpbmUpID0+IHsgdGhpcy51aU5vdGlmaWNhdGlvbi5sb2cobGluZSk7IH0pO1xyXG4gICAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdSZWNvcmRzIGltcG9ydGVkOiAnICsgcmVzcG9uc2UuUmVjb3Jkc0ltcG9ydGVkICsgJywgUmVjb3JkcyByZWFkOiAnICsgcmVzcG9uc2UuUmVjb3Jkc1JlYWQgKyAnLCBFcnJvcnM6ICcgKyByZXNwb25zZS5FcnJvcnMubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi5pbmZvKCdSZWNvcmRzIGltcG9ydGVkOiAnICsgcmVzcG9uc2UuUmVjb3Jkc0ltcG9ydGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIHRoaXMudWlOb3RpZmljYXRpb24uZXJyb3IoJ1NlcnZlciBFcnJvcjogJyArIGV4LnN0YXR1cywgW2V4LmVycm9yLk1lc3NhZ2VdKSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==