@sunbird-cb/tree-hierarchy 0.0.14-cbrelease-4.8.26 → 0.0.16-cbrelease-4.8.26

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.
@@ -56,8 +56,6 @@ export class TreeViewComponent {
56
56
  this.isFraworkLoading = true;
57
57
  }
58
58
  ngOnInit() {
59
- }
60
- ngOnChanges() {
61
59
  this.draftTerms = this.approvalList;
62
60
  this.init();
63
61
  this.showActionBar = this.isApprovalView ? true : false;
@@ -68,6 +66,8 @@ export class TreeViewComponent {
68
66
  });
69
67
  this.isEnableds();
70
68
  }
69
+ ngOnChanges() {
70
+ }
71
71
  ngAfterContentChecked() {
72
72
  this.cdr.detectChanges();
73
73
  }
@@ -818,4 +818,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
818
818
  }], manageOrg: [{
819
819
  type: Output
820
820
  }] } });
821
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFPdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUU3RyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNuSCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXZCLE1BQU0sT0FBTyxpQkFBaUI7SUE0QjVCLFlBQW9CLGdCQUFrQyxFQUM1QyxR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Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vY3JlYXRlLXRlcm0vY3JlYXRlLXRlcm0uY29tcG9uZW50JztcbmltcG9ydCB7IENvbm5lY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2Nvbm5lY3Rvci9jb25uZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2FsQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1jb25uZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUNvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24tdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbm5lY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25uZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBcHByb3ZhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHByb3ZhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcic7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZmlnLCBoZWFkZXJMaW5lQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FwcC1jb25zdGFudCc7XG5pbXBvcnQgeyBsYWJlbHMgfSBmcm9tICcuLi8uLi9sYWJlbHMvc3RyaW5ncyc7XG5pbXBvcnQgeyBDYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhcmlhYmxlLXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JnSGllcmFyY2h5QWRkTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJlZUhpZXJhcmNoeVNlcnZpY2UgfSBmcm9tICcuLi8uLi90cmVlLWhpZXJhcmNoeS5zZXJ2aWNlJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyBDb25mb3JhbXRpb25Qb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZvcmFtdGlvbi1wb3B1cC9jb25mb3JhbXRpb24tcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IENhdGVnb3J5RWRpdE1vZHVsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NhdGVnb3J5LWVkaXQvY2F0ZWdvcnktZWRpdC1tb2R1bGUvY2F0ZWdvcnktZWRpdC1tb2R1bGUuY29tcG9uZW50JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmRlY2xhcmUgdmFyIExlYWRlckxpbmU6IGFueTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10cmVlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGFwcHJvdmFsTGlzdDogQXJyYXk8Q2FyZD4gPSBbXTtcbiAgQElucHV0KCkgaXNBcHByb3ZhbFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgd29ya0Zsb3dTdGF0dXM6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlbnZpcm9ubWVudDphbnk7XG4gIEBJbnB1dCgpIHRheG9ub215Q29uZmlnOiBhbnk7XG4gIEBJbnB1dCgpIG9yZ1NlbGVjdGVkRGF0YTogYW55O1xuICBAT3V0cHV0KCkgc2VudEZvckFwcHJvdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgbG9hZGVyRW5hYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIG1hbmFnZU9yZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIG1hcHBpbmcgPSB7fTtcbiAgaGVpZ2h0TGlnaHRlZCA9IFtdXG4gIGxvY2FsTGlzdCA9IFtdXG4gIHNob3dQdWJsaXNoOiBib29sZWFuID0gZmFsc2VcbiAgbmV3VGVybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIGxvYWRlZDogYW55ID0ge31cbiAgc2hvd0FjdGlvbkJhcjogYm9vbGVhbiA9IGZhbHNlXG4gIGFwcHJvdmFsUmVxdWlyZWRUZXJtcyA9IFtdXG4gIGRyYWZ0VGVybXM6IEFycmF5PENhcmQ+ID0gW107XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBjYXRlZ29yeUxpc3Q6YW55ID0gW107XG4gIGFwcF9zdHJpbmdzOiBhbnkgPSBsYWJlbHM7XG4gIGlzSGlkZUJ0bkVuYTpib29sZWFuID10cnVlO1xuICBjb2x1bW5JZDpzdHJpbmcgPSAnJztcbiAgY29uZmlnQ29kZUJ0bjphbnk7XG4gIGRhdGFDb25maWc6YW55XG4gIGlzRnJhd29ya0xvYWRpbmcgPSB0cnVlXG4gIGxvYWRlclN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZyYW1ld29ya1NlcnZpY2U6IEZyYW1ld29ya1NlcnZpY2UsIFxuICAgIHByaXZhdGUgbG9jYWxTdmM6IExvY2FsQ29ubmVjdGlvblNlcnZpY2UsIFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgXG4gICAgcHJpdmF0ZSBhcHByb3ZhbFNlcnZpY2U6IEFwcHJvdmFsU2VydmljZSxcbiAgICBwcml2YXRlIF9zbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBjb25uZWN0b3JTdmM6IENvbm5lY3RvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJlZUhpZXJhcmNoeVN2YzogVHJlZUhpZXJhcmNoeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgXG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmRyYWZ0VGVybXMgPSB0aGlzLmFwcHJvdmFsTGlzdDtcbiAgICB0aGlzLmluaXQoKVxuICAgIHRoaXMuc2hvd0FjdGlvbkJhciA9IHRoaXMuaXNBcHByb3ZhbFZpZXc/dHJ1ZTpmYWxzZTtcbiAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuYWZ0ZXJBZGRPckVkaXRTdWJqZWN0LnN1YnNjcmliZShyZXNwb25zZURhdGEgPT4ge1xuICAgICAgaWYocmVzcG9uc2VEYXRhICYmIHJlc3BvbnNlRGF0YS5yZXMgJiYgcmVzcG9uc2VEYXRhLmRhdGEpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoRGF0YShyZXNwb25zZURhdGEpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmlzRW5hYmxlZHMoKVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiB9IFxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5pbml0Q29uZmlnKCk7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0luZm8oKHRoaXMub3JnU2VsZWN0ZWREYXRhKSA/IHRoaXMub3JnU2VsZWN0ZWREYXRhIDogJycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3RvclN2Yy5yZW1vdmVBbGxMaW5lcygpXG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2F0ZWdvcmllc0hhc2gudmFsdWUuZm9yRWFjaCgoY2F0OmFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlZFtjYXQuY29kZV0gPSB0cnVlXG4gICAgICB9KVxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vICB0aGlzLmRyYXdIZWFkZXJMaW5lKHJlcy5yZXN1bHQuZnJhbWV3b3JrLmNhdGVnb3JpZXMubGVuZ3RoKTsgIFxuICAgICAgICAgICAgIHRoaXMubWFrZUZpcnN0VGVybVNlbGVjdGVkKClcbiAgICAgICAgfSw1MDApXG4gICAgfSwgKGVycikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignZXJyb3IgaW4gZmV0Y2hpbmcgZnJhbWV3b3JrJywgZXJyKVxuICAgIH0pXG5cbiAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbiA9IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5sb2FkZXJTdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGVyRW5hYmxlLmVtaXQoZGF0YSlcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH0sXG4gICAgKVxuICBcbiAgfVxuICByZWZyZXNoRGF0YShyZXNEYXRhOiBhbnkpIHtcbiAgICBjb25zdCByZXMgPSByZXNEYXRhLnJlc1xuICAgIGlmIChyZXMgJiYgcmVzLmNyZWF0ZWQpIHtcbiAgICAgIHRoaXMuc2hvd1B1Ymxpc2ggPSB0cnVlXG4gICAgfVxuICAgIGlmKHJlcy5tdWx0aSAmJiBBcnJheS5pc0FycmF5KHJlcy50ZXJtKSAmJiByZXMudGVybS5sZW5ndGgpe1xuICAgICAgcmVzLnRlcm0gPSByZXMudGVybVswXVxuICAgIH0gXG4gICAgdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAvLyB3YWl0XG4gICAgY29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgcmVzLnBhcmVudCA9IG51bGxcbiAgICBpZiAocGFyZW50Q29sdW1uKSB7XG4gICAgICByZXMucGFyZW50ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbi5jb2RlKVxuICAgICAgaWYocmVzRGF0YS50eXBlID09PSAndXBkYXRlJyl7XG4gICAgICAgIFxuICAgICAgICByZXMucGFyZW50LmNoaWxkcmVuW3Jlcy5wYXJlbnQuY2hpbGRyZW4uZmluZEluZGV4KChlbDogYW55KSA9PiBlbC5pZGVudGlmaWVyID09PSByZXMudGVybS5pZGVudGlmaWVyKV0gPSAgcmVzLnRlcm1cbiAgICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KHJlcy5wYXJlbnQuY2F0ZWdvcnkpLmNoaWxkcmVuID0gWy4uLnJlcy5wYXJlbnQuY2hpbGRyZW5dXG4gICAgICAgIFxuICAgICAgICBcblxuICAgICAgICAvLyB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogcmVzLnRlcm0uY2F0ZWdvcnksIGRhdGE6IHJlcy50ZXJtLmNoaWxkcmVuLCBjYXJkUmVmOnJlc0RhdGEuY2FyZFJlZiB9KVxuICAgICAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGlvbihyZXMudGVybS5jYXRlZ29yeSwgcmVzLnRlcm0uY29kZSk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlU2VsZWN0aW9uKHJlcy5wYXJlbnQuY2F0ZWdvcnksIHJlcy5wYXJlbnQuY29kZSk7XG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiByZXMudGVybS5jYXRlZ29yeSwgZGF0YTogcmVzLnRlcm0uY2hpbGRyZW4sIGNhcmRSZWY6cmVzRGF0YS5jYXJkUmVmIH0pXG4gICAgICAgIC8vIH0sIDEwMCk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogdHJ1ZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6cmVzRGF0YS5pbmRleCB9KVxuICAgICAgICAgdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gdHJ1ZVxuICAgICAgICByZXMudGVybS5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShyZXMudGVybS5jYXRlZ29yeSlcbiAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5uZXh0KHsgYWN0aW9uOiByZXMudGVybS5jYXRlZ29yeSwgdHlwZTondXBkYXRlJywgZGF0YTogcmVzLnRlcm0gfSlcbiAgICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogdHJ1ZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6cmVzRGF0YS5pbmRleCB9LCAndXBkYXRlJylcbiAgICAgICAgIHJlcy50ZXJtLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAvLyBjb25zdCBuZXh0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShyZXMudGVybS5jYXRlZ29yeSlcbiAgICAgICAgXG4gICAgICAgIC8vICAgaWYgKG5leHQgJiYgbmV4dC5jb2RlKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUobmV4dC5jb2RlKVxuICAgICAgICAvLyAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKCFyZXMubXVsdGkpe1xuICAgICAgICAgIHJlcy5wYXJlbnQuY2hpbGRyZW4/IHJlcy5wYXJlbnQuY2hpbGRyZW4ucHVzaChyZXMudGVybSkgOnJlcy5wYXJlbnRbJ2NoaWxkcmVuJ10gPSBbcmVzLnRlcm1dXG4gICAgICAgIH0gXG4gICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSwpXG4gICAgICB9XG4gICAgfVxuICAgXG4gIH1cblxuICBtYWtlRmlyc3RUZXJtU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgZmlyc3RMaXN0SXRlbSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmVudHJpZXMoKS5uZXh0KCkudmFsdWUgYXMgYW55XG4gICAgaWYoZmlyc3RMaXN0SXRlbSAmJiBmaXJzdExpc3RJdGVtLmxlbmd0aCA+PSAyKXtcbiAgICAgIGlmKGZpcnN0TGlzdEl0ZW1bMV0gJiYgZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlbiAmJiBmaXJzdExpc3RJdGVtWzFdLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdFRlcm0gPSBmaXJzdExpc3RJdGVtWzFdLmNoaWxkcmVuWzBdIGFzIGFueVxuICAgICAgICBjb25zdCBjYXJkUmVmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RUZXJtLm5hbWUpXG4gICAgICAgIC8vIHRoaXMuY2F0ZWdvcnlMaXN0ID0gW11cbiAgICAgICAgZmlyc3RUZXJtLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGEgPSBmaXJzdFRlcm07XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5uZXh0KGZpcnN0VGVybS5jYXRlZ29yeSlcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IGZpcnN0VGVybS5jYXRlZ29yeSwgZGF0YTogZmlyc3RUZXJtLCBjYXJkUmVmIH0pXG4gICAgICAgIHRoaXMuaXNGcmF3b3JrTG9hZGluZyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGF4b25vbXlUZXJtKGRhdGE6IHsgc2VsZWN0ZWRUZXJtOiBhbnksIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sIGlzVXBkYXRlPzphbnl9KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLnNlbGVjdGVkVGVybSAmJiBkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSkge1xuICAgICAgaWYoIWRhdGEuaXNVcGRhdGUpe1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdChkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoZGF0YSwgJ3VwZGF0ZScpXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSwgZGF0YS5zZWxlY3RlZFRlcm0uY29kZSk7XG4gICAgfVxuICB9XG4gIHVwZGF0ZVNlbGVjdGlvbihjYXRlZ29yeTogc3RyaW5nLCBzZWxlY3RlZFRlcm1Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjYXRlZ29yeURhdGEgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5nZXQoY2F0ZWdvcnkpO1xuICAgIGlmIChjYXRlZ29yeURhdGEgJiYgY2F0ZWdvcnlEYXRhLmNoaWxkcmVuKSB7XG4gICAgICBjYXRlZ29yeURhdGEuY2hpbGRyZW4ubWFwKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gc2VsZWN0ZWRUZXJtQ29kZSA9PT0gaXRlbS5jb2RlID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgIHJldHVybiBpdGVtXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vbmVlZCB0byByZWZhY3RvciBhdCBoZWlnaCBsZXZlbFxuICB1cGRhdGVGaW5hbExpc3QoZGF0YTogeyBzZWxlY3RlZFRlcm06IGFueSwgaXNTZWxlY3RlZDogYm9vbGVhbiwgcGFyZW50RGF0YT86IGFueSwgY29sSW5kZXg/OiBhbnl9LCB0eXBlPzogYW55KSB7XG4gICAgXG4gICAgaWYgKGRhdGEuaXNTZWxlY3RlZCkge1xuICAgICAgLy8gZGF0YS5zZWxlY3RlZFRlcm0uc2VsZWN0ZWQgPSBkYXRhLmlzU2VsZWN0ZWRcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LnNldChkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSwgZGF0YS5zZWxlY3RlZFRlcm0pO1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpXG4gICAgICBpZiAobmV4dCAmJiBuZXh0LmNvZGUpIHtcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKG5leHQuY29kZSlcbiAgICAgIH1cbiAgICAgIC8vIG5vdGlmeSBuZXh0XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuaW5zZXJ0VXBkYXRlRGVsZXRlTm90aWZpZXIubmV4dCh7IGFjdGlvbjogZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIHR5cGU6IHR5cGUgPyB0eXBlIDogJ3NlbGVjdCcsIGRhdGE6IGRhdGEuc2VsZWN0ZWRUZXJtIH0pXG4gICAgfSBcbiAgICBpZihkYXRhLmNvbEluZGV4ID09PSAwICYmICFkYXRhLmlzU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB7XG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9LDMwMDApXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkZWRbZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnldID0gdHJ1ZVxuICAgICAgLy8gaWYodHlwZSAmJiB0eXBlID09PSAndXBkYXRlJyl7XG4gICAgICAvLyAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSk7XG4gICAgICAvLyAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBkYXRhLnBhcmVudERhdGEuY2F0ZWdvcnksIGRhdGE6IGRhdGEucGFyZW50RGF0YS5jaGlsZHJlbiB9KVxuICAgICAgLy8gfVxuICAgIH0sIDEwMCk7XG5cbiAgfVxuICBpc0VuYWJsZWQoY29sdW1uQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7ICAgIFxuICAgIHJldHVybiAhIXRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChjb2x1bW5Db2RlKVxuICB9XG5cbiAgaXNFbmFibGVkcygpIHtcbiAgLy8gIHJldHVybiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGFcbiAgaWYodGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrKXtcbiAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuQ3VycmVudENhcmRDbGsuc3Vic2NyaWJlKChpdGVtKT0+e1xuICAgICBjb25zdCBkYXRhQ29kZTogYW55ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShpdGVtKVxuICAgICAgaWYgKGRhdGFDb2RlICYmIGRhdGFDb2RlLmNvZGUpe1xuICAgICAgICB0aGlzLmRhdGFDb25maWcgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0Q29uZmlnKGRhdGFDb2RlLmNvZGUpXG4gICAgICB9XG4gICAgIGlmKGRhdGFDb2RlKXtcbiAgICAgIHRoaXMuY29uZmlnQ29kZUJ0biA9IGRhdGFDb2RlLmNvZGVcbiAgICAgfVxuICAgICB9KVxuICB9XG4gIFxuICBcbiAgfVxuXG4gIC8vIGdldGJ0bkVuYWJsZUZuKF9pdGVtOiBhbnkpIHtcbiAgLy8gICBjb25zdCBhbGxTZWxlY3RlZFRlcm06IGFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRBbGxTZWxlY3RlZFRlcm1zKClcbiAgLy8gICBpZiAoYWxsU2VsZWN0ZWRUZXJtICYmIGFsbFNlbGVjdGVkVGVybS5sZW5ndGggJiYgYWxsU2VsZWN0ZWRUZXJtLmZpbHRlcigodDogYW55KSA9PiB0LmNhdGVnb3J5ID09PSBfaXRlbS5jb2RlKS5sZW5ndGggPiAwKSB7XG4gIC8vICAgICByZXR1cm4gdHJ1ZVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gZmFsc2VcbiAgLy8gfVxuXG5cbiAgb3BlbkNyZWF0ZVRlcm1EaWFsb2coY29sdW1uOiBhbnksIGNvbEluZGV4OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKGNvbHVtbi5jb2RlKSkge1xuICAgICAgY29uc3QgbmV4dENhdCA9IGNvbHVtbi5jb2RlXG4gICAgICBjb25zdCBuZXh0TmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkobmV4dENhdClcbiAgICAgIGlmKG5leHRDYXQpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMobmV4dENhdClcbiAgICAgICAgY29uc3QgY29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dENhdCApXG4gICAgICAgIGxldCBuZXh0Q29sSW5mbzogYW55ID0gW11cbiAgICAgICAgaWYobmV4dE5leHRDYXQgJiYgbmV4dE5leHRDYXQuY29kZSkge1xuICAgICAgICAgIG5leHRDb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0TmV4dENhdC5jb2RlIClcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICAgICAgaWYodGhpcy5lbnZpcm9ubWVudCAmJiB0aGlzLmVudmlyb25tZW50LmZyYW1ld29ya1R5cGUgPT09ICdNRE9fREVTSUdOQVRJT04nKXtcbiAgICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgICBtb2RlOidtdWx0aS1jcmVhdGUnLFxuICAgICAgICAgICAgICAvLyBjYXJkQ29sSW5mbzogdGhpcy5kYXRhLmNvbHVtbkluZm8sXG4gICAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgICAgLy8gY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInLFxuICAgICAgICAgICAgcG9zaXRpb246IHsgdG9wOiAnNTBweCcgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDcmVhdGVUZXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAvLyBkYXRhOiB7XG4gICAgICAgICAgICAvLyAgIG1vZGU6J2NyZWF0ZScsXG4gICAgICAgICAgICAvLyAgIGNvbHVtbkluZm86IGNvbHVtbixcbiAgICAgICAgICAgIC8vICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgLy8gICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIC8vICAgY29sSW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgLy8gICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICAgIC8vIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZighcmVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UHVibGlzaCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICBjb25zdCBkYXRhICA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jYXJkQ2xrRGF0YVxuICAgICAgICAgXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0ge1xuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgaW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoIShyZXMgJiYgcmVzLnN0b3BVcGRhdGUpKXtcbiAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmxvYWRlZFtyZXMudGVybS5jYXRlZ29yeV0gPSBmYWxzZVxuICAgICAgICAgIC8vIHdhaXRcbiAgICAgICAgICBjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShyZXMudGVybVswXS5jYXRlZ29yeSlcbiAgICAgICAgICByZXMucGFyZW50ID0gbnVsbFxuICAgICAgICAgIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgICAgICAgIHJlcy5wYXJlbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uLmNvZGUpXG4gICAgICAgICAgICByZXMucGFyZW50LmNoaWxkcmVuPyByZXMucGFyZW50LmNoaWxkcmVuLnB1c2gocmVzLnRlcm1bMF0pIDpyZXMucGFyZW50WydjaGlsZHJlbiddID0gW3Jlcy50ZXJtWzBdXVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm1bMF0sIGlzU2VsZWN0ZWQ6IGZhbHNlLCBwYXJlbnREYXRhOiByZXMucGFyZW50LCBjb2xJbmRleDpjb2xJbmRleCB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5Pcmdhbml6YXRpb25EaWFsb2coY29sdW1uOiBhbnksIF9pbmRleDogYW55LCB0eXBlU2VsZWN0ZWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyZWVMaXN0RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uLmNvZGUpICAgICBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKE9yZ0hpZXJhcmNoeUFkZE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHByZXZpb3VzOiB0cmVlTGlzdERhdGEsXG4gICAgICAgIGN1cnJlbnREYXRhOiBjb2x1bW4sXG4gICAgICAgIHNlbGVjdGVkT3JnRGF0YTogdGhpcy5vcmdTZWxlY3RlZERhdGEsXG4gICAgICAgIHR5cGU6IHR5cGVTZWxlY3RlZFxuICAgICAgfSxcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcbiAgICAgIHBvc2l0aW9uOiB7IHJpZ2h0OiAnMCcgfSxcbiAgICAgIGhlaWdodDogJzEwMHZoJyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdyaWdodC1zaWRlLW1vZGFsJyxcbiAgICAgIG1heFdpZHRoOiAnMTAwdncnXG4gICAgfSk7XG4gICAgXG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGFzeW5jIChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKF9yZXMgJiYgX3Jlcy50eXBlID09PSAnYWRkJykge1xuICAgICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZSh0cnVlKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRlcm1zKF9yZXMuc2VsZWN0ZWRPcmcsIGNvbHVtbilcbiAgICAgICAgfSBlbHNlIGlmIChfcmVzICYmIF9yZXMudHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICBpZiAoX3Jlcy5wYXBhcmVudFNlbGVjdGVkT3JnKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBhcmVudEFzc29jaWF0aW9uKF9yZXMucGFwYXJlbnRTZWxlY3RlZE9yZywgX3Jlcy5jdXJyZW50VGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfcmVzLnNlbGVjdGVkT3JnICYmIF9yZXMuc2VsZWN0ZWRPcmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUZXJtcyhfcmVzLnNlbGVjdGVkT3JnLCBjb2x1bW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHVibGlzaEZyYW1ld29yayh7XG4gICAgICAgICAgICAgIGlkOiB0aGlzLm9yZ1NlbGVjdGVkRGF0YS5vcmdIaWVyYXJjaHlGcmFtZXdvcmtJZCB8fCAnJyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnJ30pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGlzdCgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpXG4gIH1cbiAgXG4gIGRyYXdIZWFkZXJMaW5lKGxlbjogbnVtYmVyKXtcbiAgICBjb25zdCBvcHRpb25zID0gey4uLmRlZmF1bHRDb25maWcsLi4uaGVhZGVyTGluZUNvbmZpZyB9XG4gICAgZm9yKGxldCBpPTE7IGk8PWxlbjsgaSsrKXtcbiAgICAgIGNvbnN0IHN0YXJ0RWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2JveCR7aX1jb3VudGApXG4gICAgICBjb25zdCBlbmRFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYm94JHtpfUhlYWRlcmApXG4gICAgICBpZihzdGFydEVsZSAmJiBlbmRFbGUpIHtcbiAgICAgICAgbmV3IExlYWRlckxpbmUoc3RhcnRFbGUsIGVuZEVsZSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uKGNvbHVtbkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5nZXQoY29sdW1uQ29kZSlcbiAgfVxuICBcbiAgbmV3Q29ubmVjdGlvbigpIHsgXG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDb25uZWN0b3JDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgd2lkdGg6ICc5MCUnLFxuICAgICAgLy8gcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyBcbiAgICB9KVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBJQ29ubmVjdGlvblR5cGUpID0+IHtcbiAgICAgIGlmICgocmVzLnNvdXJjZSA9PT0gJ29ubGluZScgJiYgcmVzLmRhdGEuZW5kcG9pbnQpIHx8IChyZXMuc291cmNlID09PSAnb2ZmbGluZScpKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdmMubG9jYWxTdG9yYWdlID0gcmVzXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlcy5zb3VyY2UgPT09ICdvbmxpbmUnICYmICFyZXMuZGF0YS5lbmRwb2ludCkge1xuICAgICAgICB0aGlzLmxvY2FsU3ZjLmxvY2FsU3RvcmFnZSA9IHJlc1xuICAgICAgICB0aGlzLmluaXQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB1cGRhdGVEcmFmdFN0YXR1c1Rlcm1zKGV2ZW50OiBhbnkpe1xuICAgIGlmKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuZHJhZnRUZXJtcy5wdXNoKGV2ZW50LnRlcm0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFmdFRlcm1zID0gdGhpcy5kcmFmdFRlcm1zLmZpbHRlcihkID0+IGV2ZW50LnRlcm0uaWRlbnRpZmllciAhPT0gZC5pZGVudGlmaWVyKVxuICAgIH1cbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSB0aGlzLmRyYWZ0VGVybXMubGVuZ3RoPjA/dHJ1ZTpmYWxzZVxuICB9XG5cbiAgZ2V0Tm9PZkNhcmRzKGV2ZW50OmFueSkge1xuICAgIGlmKHRoaXMuY2F0ZWdvcnlMaXN0Lmxlbmd0aCA+IDAgJiYgZXZlbnQuY2F0ZWdvcnkgIT09ICcnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmNhdGVnb3J5TGlzdC5maW5kSW5kZXgoKG9iajphbnkpID0+IG9iai5jYXRlZ29yeSA9PSBldmVudC5jYXRlZ29yeSk7XG4gICAgICBpZihpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnNwbGljZShpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGV2ZW50LmNhdGVnb3J5ID09ICcnKSB7XG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdFt0aGlzLmNhdGVnb3J5TGlzdC5sZW5ndGgtMV0uY291bnQgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNhdGVnb3J5TGlzdC5wdXNoKGV2ZW50KTtcbiAgfVxuICBcbiAgZ2V0Q291bnQoY29kZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBHZXQgYWxsIHByZXZpb3VzIGNhdGVnb3JpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgaGF2ZSBzZWxlY3Rpb25zXG4gICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpO1xuICAgIGNvbnN0IGN1cnJlbnRDYXRlZ29yeUluZGV4ID0gYWxsQ2F0ZWdvcmllcy5maW5kSW5kZXgoY2F0ID0+IGNhdC5jb2RlID09PSBjb2RlKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBhbGwgcHJldmlvdXMgY2F0ZWdvcmllcyBoYXZlIHNlbGVjdGVkIHRlcm1zXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Q2F0ZWdvcnlJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwcmV2Q2F0ZWdvcnlDb2RlID0gYWxsQ2F0ZWdvcmllc1tpXS5jb2RlO1xuICAgICAgY29uc3QgaGFzUHJldlNlbGVjdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmhhcyhwcmV2Q2F0ZWdvcnlDb2RlKTtcbiAgICAgIFxuICAgICAgLy8gSWYgYW55IHByZXZpb3VzIGNhdGVnb3J5IGRvZXNuJ3QgaGF2ZSBhIHNlbGVjdGlvbiwgcmV0dXJuIDBcbiAgICAgIGlmICghaGFzUHJldlNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gTm93IHdlIGNhbiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBjb3VudCBzaW5jZSBhbGwgcHJldmlvdXMgbGV2ZWxzIGFyZSBzZWxlY3RlZFxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIHNlbGVjdGVkIHRlcm0gZm9yIHBhcmVudCBjYXRlZ29yeSB0aGF0IGhhcyBjaGlsZHJlbiBmb3IgdGhpcyBjYXRlZ29yeVxuICAgIGNvbnN0IHByZXZDYXRlZ29yeSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KGNvZGUpO1xuICAgIGlmIChwcmV2Q2F0ZWdvcnkpIHtcbiAgICAgIGNvbnN0IHByZXZTZWxlY3RlZFRlcm0gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocHJldkNhdGVnb3J5LmNvZGUpO1xuICAgICAgaWYgKHByZXZTZWxlY3RlZFRlcm0pIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHNlbGVjdGVkIHBhcmVudCB0ZXJtLCBjb3VudCBpdHMgY2hpbGRyZW4gZm9yIHRoaXMgY2F0ZWdvcnlcbiAgICAgICAgaWYgKHByZXZTZWxlY3RlZFRlcm0uY2hpbGRyZW4gJiYgcHJldlNlbGVjdGVkVGVybS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY291bnQgPSBwcmV2U2VsZWN0ZWRUZXJtLmNoaWxkcmVuLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4gXG4gICAgICAgICAgICAhY2hpbGQuaXNEZWxldGVkICYmIGNoaWxkLnN0YXR1cyAhPT0gJ1JldGlyZWQnICYmIFxuICAgICAgICAgICAgKGNoaWxkLmNhdGVnb3J5ID09PSBjb2RlIHx8IChjaGlsZC5hc3NvY2lhdGlvbnMgJiYgXG4gICAgICAgICAgICAgY2hpbGQuYXNzb2NpYXRpb25zLnNvbWUoKGFzc29jOiBhbnkpID0+IGFzc29jLmNhdGVnb3J5ID09PSBjb2RlKSkpXG4gICAgICAgICAgKS5sZW5ndGg7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIG5vIHNlbGVjdGlvbiBleGlzdHMgZm9yIHRoZSBwYXJlbnQsIGRvbid0IHNob3cgY291bnRzXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgbGV2ZWwsIHdlIGNhbiBzaG93IGFsbCB0ZXJtc1xuICAgIGNvbnN0IGNhdGVnb3J5RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChjb2RlKTtcbiAgICBpZiAoY2F0ZWdvcnlEYXRhICYmIGNhdGVnb3J5RGF0YS5jaGlsZHJlbikge1xuICAgICAgY291bnQgPSBjYXRlZ29yeURhdGEuY2hpbGRyZW4uZmlsdGVyKChjaGlsZDogYW55KSA9PiBcbiAgICAgICAgIWNoaWxkLmlzRGVsZXRlZCAmJiBjaGlsZC5zdGF0dXMgIT09ICdSZXRpcmVkJ1xuICAgICAgKS5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHNlbmRGb3JBcHByb3ZhbCgpe1xuICAgIGlmKCF0aGlzLmlzQXBwcm92YWxWaWV3KXtcbiAgICAgICAgbGV0IHBhcmVudExpc3Q6IGFueSA9IFtdXG4gICAgICAgIHRoaXMubGlzdC5mb3JFYWNoKGVsZSA9PiB7XG4gICAgICAgICAgY29uc3QgdCA9IGVsZS5jaGlsZHJlbi5maWx0ZXIoKHRlcm06IGFueSkgPT4gdGVybS5zZWxlY3RlZCA9PT0gdHJ1ZSlcbiAgICAgICAgICBpZih0WzBdKXtcbiAgICAgICAgICAgIHBhcmVudExpc3QucHVzaCh0WzBdKVxuICAgICAgICAgIH0gXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlczpbLi4ucGFyZW50TGlzdCwgLi4udGhpcy5kcmFmdFRlcm1zXVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmNyZWF0ZUFwcHJvdmFsKHJlcSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVtb3ZlT2xkTGluZSgpXG4gICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbignVGVybXMgc3VjY2Vzc2Z1bGx5IHNlbnQgZm9yIEFwcHJvdmFsLicsICdjYW5jZWwnKVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRGb3JBcHByb3ZlLmVtaXQodGhpcy5kcmFmdFRlcm1zKVxuICAgIH1cbiAgIFxuICB9XG5cbiAgY2xvc2VBY3Rpb25CYXIoX2U6YW55KXsgXG4gICAgdGhpcy5zaG93QWN0aW9uQmFyID0gZmFsc2U7XG4gIH1cblxuICBpbml0Q29uZmlnKCkge1xuICAgIGlmKHRoaXMuZW52aXJvbm1lbnQpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUVudmlyb25tZW50KHRoaXMuZW52aXJvbm1lbnQpO1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNldENvbmZpZyh0aGlzLnRheG9ub215Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnJlbW92ZU9sZExpbmUoKTtcbiAgICAgIC8vIHRoaXMuZW52aXJvbm1lbnQgPSBudWxsXG4gICAgICAvLyB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVzZXRBbmRGcmVzaCgpXG4gICAgICAvLyB0aGlzLmNvbm5lY3RvclN2Yy5yZW1vdmVBbGxMaW5lcygpXG4gICAgICAvLyB0aGlzLmNvbm5lY3RvclN2Yy51cGRhdGVDb25uZWN0b3JzTWFwKHt9KVxuICB9XG5cbiAgZ2V0TmV4dENhdChkYXRhOiBhbnkpIHtcbiAgICBpZihkYXRhICAmJiBkYXRhLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlzQ3VycmVudE9yTmV4dFRlcm0oX2NvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgdGhlcmUncyBubyBjdXJyZW50IHNlbGVjdGlvbiwgb25seSBlbmFibGUgdGhlIGZpcnN0IGNvbHVtblxuICAgIGlmICghdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGNhdGVnb3J5IGZyb20gdGhlIGN1cnJlbnRTZWxlY3Rpb25cbiAgICBjb25zdCBjdXJyZW50Q2F0ZWdvcnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi52YWx1ZS50eXBlO1xuICAgIGlmICghY3VycmVudENhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IDA7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGFjdGl2ZSBjb2x1bW5cbiAgICBsZXQgY3VycmVudEluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmxpc3RbaV0uY29kZSA9PT0gY3VycmVudENhdGVnb3J5KSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBjdXJyZW50IGluZGV4LCBvbmx5IGVuYWJsZSB0aGUgZmlyc3QgY29sdW1uXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5hYmxlIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlIG5leHQgb25lXG4gICAgcmV0dXJuIGluZGV4ID09PSBjdXJyZW50SW5kZXggfHwgaW5kZXggPT09IGN1cnJlbnRJbmRleCArIDE7XG4gIH1cblxuICBzaG91bGRTaG93U3ZnQm9yZGVyV3JhcHBlcihjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpbmRleCkgJiYgdGhpcy5nZXRDb3VudChjb2x1bW4uY29kZSkgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBhc3luYyBjcmVhdGVUZXJtcyhzZWxlY3RlZExpc3Q6YW55LCBjb2x1bW46YW55KSB7XG4gICAgY29uc3QgZnJhbWV3b3JrRGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLm9yZ1NlbGVjdGVkRGF0YS5vcmdIaWVyYXJjaHlGcmFtZXdvcmtJZCB8fCAnJyxcbiAgICAgIGNhdGVnb3J5OiBjb2x1bW4uY29kZSB8fCAnJyxcbiAgICB9XG4gICAgbGV0IGNyZWF0ZWROb2RlSWQ6YW55ID0gW11cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGVsZSBvZiBzZWxlY3RlZExpc3QpIHsgXG4gICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgICBuYW1lOiBlbGUub3JnTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGVsZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgY29kZTogdXVpZHY0KCksXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgb3JnSWQ6IGVsZS5pZGVudGlmaWVyIHx8ICcnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZVRyZW1zUmVzOmFueSA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5jcmVhdGVUZXJtKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtEYXRhKS50b1Byb21pc2UoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgZXJyKTtcbiAgICAgIH0pXG4gICAgICBpZiAoY3JlYXRlVHJlbXNSZXMgJiYgY3JlYXRlVHJlbXNSZXMucmVzdWx0ICYmIGNyZWF0ZVRyZW1zUmVzLnJlc3VsdC5ub2RlX2lkKSB7XG4gICAgICAgIGNyZWF0ZWROb2RlSWQucHVzaChjcmVhdGVUcmVtc1Jlcy5yZXN1bHQubm9kZV9pZFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjcmVhdGVkTm9kZUlkLmxlbmd0aCA9PT0gc2VsZWN0ZWRMaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGNvbHVtbi5pbmRleCA+MSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFzc29jaWF0aW9uKGNyZWF0ZWROb2RlSWQsIGZyYW1ld29ya0RhdGEsIGNvbHVtbik7XG4gICAgICB9IFxuICAgICAgdGhpcy5wdWJsaXNoRnJhbWV3b3JrKGZyYW1ld29ya0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFzc29jaWF0aW9uKG5vZGVJZDogYW55LCBmcmFtZXdvcmtEYXRhOiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgY29uc3QgcHJldjphbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShjb2x1bW4uY29kZSk7XG4gICAgbGV0IHByZXZUcmVtOmFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uLmNvZGUpXG4gICAgY29uc3QgdGVtcEZyYW1lRGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlKVxuICAgIGNvbnN0IHJlcXVlc3RCb2R5OmFueSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgdGVybToge1xuICAgICAgICAgIGFzc29jaWF0aW9uczogW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gXG4gICAgaWYgKHByZXYgJiYgcHJldlRyZW0pIHtcbiAgICAgIHByZXZUcmVtID0gcHJldlRyZW0uZmluZCgoZWxlOmFueSkgPT4gZWxlLmNhdGVnb3J5ID09PSBwcmV2LmNvZGUpXG4gICAgICBwcmV2VHJlbSA9IHRlbXBGcmFtZURhdGEuY2F0ZWdvcmllcy5maW5kKChlbGU6YW55KSA9PiBlbGUuY29kZSA9PT0gcHJldi5jb2RlKS50ZXJtcy5maW5kKChlbGU6YW55KSA9PiBlbGUuY29kZSA9PT0gcHJldlRyZW0uY29kZSlcbiAgICAgIGlmIChwcmV2VHJlbSAmJiBwcmV2VHJlbS5hc3NvY2lhdGlvbnMgJiYgcHJldlRyZW0uYXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJldlRyZW0uYXNzb2NpYXRpb25zLmZvckVhY2goKGVsZTphbnkpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiBlbGUuaWRlbnRpZmllclxuICAgICAgICAgIH0pXG4gICAgICAgIH0pIFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZUlkICYmIG5vZGVJZC5sZW5ndGggPiAwKSB7XG4gICAgICBub2RlSWQuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xuICAgICAgICByZXF1ZXN0Qm9keS5yZXF1ZXN0LnRlcm0uYXNzb2NpYXRpb25zLnB1c2goe1xuICAgICAgICAgIGlkZW50aWZpZXI6IGVsZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgZnJhbWV3b3JrRGF0YS5jYXRlZ29yeSA9IHByZXZUcmVtLmNhdGVnb3J5IHx8ICcnO1xuICAgIGNvbnN0IG5vZGVJZFBhcnRzID0gcHJldlRyZW0uaWRlbnRpZmllci5zcGxpdCgnXycpO1xuICAgIGNvbnN0IGNvZGVJZCA9IG5vZGVJZFBhcnRzW25vZGVJZFBhcnRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHVwZGF0ZUFzc29jaWF0aW9uUmVzOmFueSA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy51cGRhdGVGcmFtZXdvcmtBc3NvY2lhdGlvbihyZXF1ZXN0Qm9keSwgZnJhbWV3b3JrRGF0YSwgY29kZUlkKS50b1Byb21pc2UoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gdXBkYXRpbmcgYXNzb2NpYXRpb24nLCBlcnIpO1xuICAgIH0pXG4gICAgaWYgKHVwZGF0ZUFzc29jaWF0aW9uUmVzICYmIHVwZGF0ZUFzc29jaWF0aW9uUmVzLnJlc3VsdCAmJiB1cGRhdGVBc3NvY2lhdGlvblJlcy5yZXN1bHQubm9kZV9pZCkge1xuICAgICAgLy8gdGhpcy5wdWJsaXNoRnJhbWV3b3JrKGZyYW1ld29ya0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHB1Ymxpc2hGcmFtZXdvcmsoZnJhbWV3b3JrRGF0YTogYW55KSB7XG4gICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnB1Ymxpc2hGcmVhbWV3b3JrKGZyYW1ld29ya0RhdGEpLnN1YnNjcmliZSgocmVzOmFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQucHVibGlzaFN0YXR1cykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBPcmdhbml6YXRpb24gaGllcmFyY2h5IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsIGVycik7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQ29ubmVjdGlvbihkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXJtc0Fzc29jaWF0aW9uKGRhdGEuY2hpbGRyZW4uY29kZSk7XG4gICAgbGV0IGNvdW50ID0gMFxuICAgIGlmIChhc3NvY2lhdGlvbiAmJiBhc3NvY2lhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBhc3NvY2lhdGlvbi5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgIGlmIChhc3NvYy5pZHMgJiYgYXNzb2MuaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb3VudCArPSBhc3NvYy5pZHMubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICAgIGRpYWxvZ1R5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGVhZGVyOiBgJHtjb3VudCB8fCAwfSBPcmdhbmlzYXRpb24ke2NvdW50ID4gMSA/ICdzJyA6ICcnfSB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvcmdhbmlzYXRpb24gaGllcmFyY2h5LmAsXG4gICAgICAgICAgICBoZWFkZXJDbGFzczogJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmx1ZScsXG4gICAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbXNnQ2xhc3M6ICd0ZXh0LWJsdWUgbWFyZ2luLWJvdHRvbS1zJyxcbiAgICAgICAgICAgICAgICBtc2c6IGBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZvb3RlckNsYXNzOiAnaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJyxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJ0blRleHQ6ICdObycsXG4gICAgICAgICAgICBidG5DbGFzczogJ2J0bi1jb21tb24gYnRuLXNlY29uZGFyeScsXG4gICAgICAgICAgICByZXNwb25zZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBidG5UZXh0OiAnWWVzJyxcbiAgICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWNvbW1vbiBidG4tcHJpbWFyeScsXG4gICAgICAgICAgICByZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfVxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25mb3JhbXRpb25Qb3B1cENvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgICAgbWF4V2lkdGg6ICc4MHZ3JyxcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLnJldGlyZVRlcm1GdW5jdGlvbihhc3NvY2lhdGlvbilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgRXJyb3IgaW4gcmVtb3ZpbmcgdGhlIG9yZ2FuaXNhdGlvbmAsICdjYW5jZWwnKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldGlyZVRlcm1GdW5jdGlvbihhc3NvY2lhdGlvbjogYW55KSB7ICBcbiAgICBsZXQgY291bnQgPSAwICBcbiAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUodHJ1ZSlcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGVsZSBvZiBhc3NvY2lhdGlvbikge1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBjb250ZW50SWRzOiBlbGUuaWRzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGZyYW1ld29ya09iaiA9IHtcbiAgICAgICAgaWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGNhdGVnb3J5OiBlbGUuY2F0ZWdvcnkgfHwgJycsXG4gICAgICB9XG4gICAgICBjb25zdCByZXRpcmVSZXMgPSBhd2FpdCB0aGlzLnRyZWVIaWVyYXJjaHlTdmMucmV0aXJlVGVybShyZXF1ZXN0Qm9keSwgZnJhbWV3b3JrT2JqKS50b1Byb21pc2UoKS5jYXRjaCgoX2VycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSlcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgRmFpbGVkIHRvIHJlbW92ZSBjb25uZWN0aW9uLmAsICdjYW5jZWwnKVxuICAgICAgfSlcbiAgICAgIGlmIChyZXRpcmVSZXMgJiYgcmV0aXJlUmVzLnBhcmFtcyAmJiByZXRpcmVSZXMucGFyYW1zLnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3NmdWwnKSB7XG4gICAgICAgIGNvdW50ICs9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSlcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgRmFpbGVkIHRvIHJlbW92ZSBjb25uZWN0aW9uLmAsICdjYW5jZWwnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY291bnQgPT09IGFzc29jaWF0aW9uLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5wdWJsaXNoRnJhbWV3b3JrKHtcbiAgICAgICAgaWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlLmNvZGUsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpXG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBGYWlsZWQgdG8gcmVtb3ZlIGNvbm5lY3Rpb24uYCwgJ2NhbmNlbCcpXG4gICAgfVxuICB9XG5cbiAgY2FyZEFjdGlvbkVtaXQoZXZlbnQ6YW55KSB7XG4gICAgc3dpdGNoKGV2ZW50LmFjdGlvbikge1xuICAgICAgY2FzZSAncmVtb3ZlLXRlcm0nOlxuICAgICAgICAgIHRoaXMucmVtb3ZlQ29ubmVjdGlvbihldmVudC5kYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBkYXRlLWhpZXJhcmNoeSc6XG4gICAgICAgICAgdGhpcy5vcGVuT3JnYW5pemF0aW9uRGlhbG9nKHRoaXMubGlzdFt0aGlzLmxpc3QuZmluZEluZGV4KChpdGVtOmFueSkgPT4gaXRlbS5jb2RlID09PSBldmVudC5kYXRhLmNhdGVnb3J5KSArMV0sICcnLCAndXBkYXRlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWFuYWdlLW9yZyc6XG4gICAgICAgICAgICB0aGlzLm1hbmFnZU9yZy5lbWl0KGV2ZW50LmRhdGEuY2hpbGRyZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRDYXRlZ29yeU5hbWUoY29sdW1uOmFueSwgaW5kZXg6YW55KSB7XG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDYXRlZ29yeUVkaXRNb2R1bGVDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29sdW1uSW5mbzogY29sdW1uLFxuICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgIGNvbEluZGV4OiBpbmRleFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgcGFuZWxDbGFzczogJ2NhdGVnb3J5LWVkaXQtY29udGFpbmVyJyxcbiAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICB9KVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgIGNhdGVnb3J5Q29kZTogcmVzLmNvbHVtbi5jb2x1bW5EYXRhLmNvZGUsXG4gICAgICAgICAgY2F0ZWdvcnlOYW1lOiByZXMuY29sdW1uLmZvcm1EYXRhLmNhdGVnb3J5TmFtZSxcbiAgICAgICAgICBjYXRlZ29yeURlc2NyaXB0aW9uOiByZXMuY29sdW1uLmZvcm1EYXRhLmNhdGVnb3R5RGVzY3JpcHRpb24gfHwgJydcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUNhdGVnb3J5KHJlcXVlc3RCb2R5KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0U2VsZWN0ZWRUZXJtc0Fzc29jaWF0aW9uKGNhdGVnb3J5Q29kZTogc3RyaW5nKSB7XG4gICAgbGV0IHRlbXBEYXRhOiBhbnkgPSBbXTtcbiAgICBjb25zdCBjb21wbGV0ZURhdGEgPSBfLmNsb25lRGVlcCh0aGlzLmZyYW1ld29ya1NlcnZpY2UuY29tcGxldGVSZXNwb25zZSk7XG4gICAgaWYgKGNvbXBsZXRlRGF0YSAmJiBjb21wbGV0ZURhdGEuY2F0ZWdvcmllcyAmJiBjb21wbGV0ZURhdGEuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb21wbGV0ZURhdGEuY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeTogYW55LCBjYXRJbmRleDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjYXRlZ29yeS50ZXJtcyAmJiBjYXRlZ29yeS50ZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY2F0ZWdvcnkudGVybXMuZm9yRWFjaCgodGVybTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGVybS5jb2RlID09PSBjYXRlZ29yeUNvZGUpIHtcbiAgICAgICAgICAgICAgdGVtcERhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogdGVybS5uYW1lLFxuICAgICAgICAgICAgICAgIGNhdGVnb3J5OiB0ZXJtLmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgIGlkczogW3Rlcm0uY29kZV0sXG4gICAgICAgICAgICAgICAgbmV4dENhdGVnb3J5OiB0ZXJtLmNoaWxkcmVuID8gdGVybS5jaGlsZHJlblswXS5jYXRlZ29yeSA6ICcnLFxuICAgICAgICAgICAgICAgIGFzc29jSWRzOiBbXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHRlcm0uYXNzb2NpYXRpb25zICYmIHRlcm0uYXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZXJtLmFzc29jaWF0aW9ucy5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBnZXRJbmRleCA9IHRlbXBEYXRhLmZpbmRJbmRleCgoaXRlbTphbnkpID0+IGl0ZW0uaWRzICYmIGl0ZW0uaWRzLmluY2x1ZGVzKHRlcm0uY29kZSkpXG4gICAgICAgICAgICAgICAgICB0ZW1wRGF0YVtnZXRJbmRleF1bJ2Fzc29jSWRzJ10ucHVzaChhc3NvYy5jb2RlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBpZiAoY2F0SW5kZXggPiAwICYmIGNhdGVnb3J5LnRlcm1zICYmIGNhdGVnb3J5LnRlcm1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjYXRlZ29yeS50ZXJtcy5mb3JFYWNoKCh0ZXJtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRlbXBEYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS5uZXh0Q2F0ZWdvcnkgPT09IHRlcm0uY2F0ZWdvcnkgJiYgaXRlbS5hc3NvY0lkcy5pbmNsdWRlcyh0ZXJtLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHVzaERhdGE6YW55ID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogdGVybS5uYW1lLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHRlcm0uY2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBpZHM6IFt0ZXJtLmNvZGVdLFxuICAgICAgICAgICAgICAgICAgbmV4dENhdGVnb3J5OiB0ZXJtLmNoaWxkcmVuID8gdGVybS5jaGlsZHJlblswXS5jYXRlZ29yeSA6ICcnLFxuICAgICAgICAgICAgICAgICAgYXNzb2NJZHM6IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0ZXJtLmFzc29jaWF0aW9ucyAmJiB0ZXJtLmFzc29jaWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0ZXJtLmFzc29jaWF0aW9ucy5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hEYXRhWydhc3NvY0lkcyddLnB1c2goYXNzb2MuY29kZSlcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLnB1c2gocHVzaERhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGF0YTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUNhdGVnb3J5KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgY2F0ZWdvcnk6IHtcbiAgICAgICAgICBuYW1lOiBldmVudC5jYXRlZ29yeU5hbWUgfHwgJycsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmNhdGVnb3J5RGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZnJhbWV3b3JrT2JqID0ge1xuICAgICAgaWQ6IGV2ZW50LmZyYW1ld29ya0lkLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50LmNhdGVnb3J5Q29kZVxuICAgIH1cbiAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUodHJ1ZSk7ICAgIFxuICAgIGNvbnN0IHVwZGF0ZUNhdFJlcyA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy51cGRhdGVDYXRlZ29yeShyZXF1ZXN0Qm9keSwgZnJhbWV3b3JrT2JqKS50b1Byb21pc2UoKS5jYXRjaCgoX2VycjogYW55KSA9PiB7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgaWYgKF9lcnIgJiYgX2Vyci5lcnJvciAmJiBfZXJyLmVycm9yLnBhcmFtcyAmJiBfZXJyLmVycm9yLnBhcmFtcy5lcnJNc2cpIHtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgJHtfZXJyLmVycm9yLnBhcmFtcy5lcnJNc2d9YClcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICh1cGRhdGVDYXRSZXMgJiYgdXBkYXRlQ2F0UmVzLnBhcmFtcyAmJiB1cGRhdGVDYXRSZXMucGFyYW1zLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2Vzc2Z1bCcpIHtcbiAgICAgIGF3YWl0IHRoaXMucHVibGlzaEZyYW1ld29yayhmcmFtZXdvcmtPYmopXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlUGFyZW50QXNzb2NpYXRpb24oc2VsZWN0ZWRQYXJlbnQ6IGFueSwgY3VycmVudFRlcm06IGFueSkge1xuICAgIGNvbnN0IGZyYW13b3JrRGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlKTtcbiAgICBjb25zdCBwYXJlbnRDYXRlZ29yeURhdGEgPSBmcmFtd29ya0RhdGEuY2F0ZWdvcmllcy5maW5kKChjYXQ6IGFueSkgPT4gY2F0LmNvZGUgPT09IHNlbGVjdGVkUGFyZW50LmNhdGVnb3J5KTtcbiAgICBpZiAocGFyZW50Q2F0ZWdvcnlEYXRhICYmIHBhcmVudENhdGVnb3J5RGF0YS50ZXJtcyAmJiBwYXJlbnRDYXRlZ29yeURhdGEudGVybXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudFBhcmVudFRlcm0gPSBwYXJlbnRDYXRlZ29yeURhdGEudGVybXMuZmluZCgodGVybTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0ZXJtLmFzc29jaWF0aW9ucyAmJiB0ZXJtLmFzc29jaWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRlcm0uYXNzb2NpYXRpb25zLnNvbWUoKGFzc29jOiBhbnkpID0+IGFzc29jLmNvZGUgPT09IGN1cnJlbnRUZXJtLmNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjdXJyZW50UGFyZW50VGVybSkge1xuICAgICAgICBjb25zdCB1cGRhdGVPbGRQYXJlbnRBc3NvY2lhdGlvbjphbnkgPSB7XG4gICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgICBhc3NvY2lhdGlvbnM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRQYXJlbnRUZXJtLmFzc29jaWF0aW9ucy5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGFzc29jLmNvZGUgIT09IGN1cnJlbnRUZXJtLmNvZGUpIHtcbiAgICAgICAgICAgIHVwZGF0ZU9sZFBhcmVudEFzc29jaWF0aW9uLnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7aWRlbnRpZmllcjogYXNzb2MuaWRlbnRpZmllcn0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUhpZXJhcmNoeUFzc29jaWNhdGlvbih1cGRhdGVPbGRQYXJlbnRBc3NvY2lhdGlvbiwgZnJhbXdvcmtEYXRhLmlkZW50aWZpZXIsIGN1cnJlbnRQYXJlbnRUZXJtKVxuICAgICAgfVxuICAgICAgc2VsZWN0ZWRQYXJlbnQgPSBwYXJlbnRDYXRlZ29yeURhdGEudGVybXMuZmluZCgodGVybTogYW55KSA9PiB0ZXJtLmNvZGUgPT09IHNlbGVjdGVkUGFyZW50LmNvZGUpO1xuICAgICAgY29uc3QgdXBkYXRlTmV3UGFyZW50QXNzb2NpYXRpb246YW55ID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgYXNzb2NpYXRpb25zOiBbXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlbGVjdGVkUGFyZW50ICYmIHNlbGVjdGVkUGFyZW50LmFzc29jaWF0aW9ucyAmJiBzZWxlY3RlZFBhcmVudC5hc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxlY3RlZFBhcmVudC5hc3NvY2lhdGlvbnMuZm9yRWFjaCgoYXNzb2M6IGFueSkgPT4ge1xuICAgICAgICAgIHVwZGF0ZU5ld1BhcmVudEFzc29jaWF0aW9uLnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7aWRlbnRpZmllcjogYXNzb2MuaWRlbnRpZmllcn0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB1cGRhdGVOZXdQYXJlbnRBc3NvY2lhdGlvbi5yZXF1ZXN0LnRlcm0uYXNzb2NpYXRpb25zLnB1c2goe2lkZW50aWZpZXI6IGN1cnJlbnRUZXJtLmlkZW50aWZpZXJ9KTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlSGllcmFyY2h5QXNzb2NpY2F0aW9uKHVwZGF0ZU5ld1BhcmVudEFzc29jaWF0aW9uLCBmcmFtd29ya0RhdGEuaWRlbnRpZmllciwgc2VsZWN0ZWRQYXJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUhpZXJhcmNoeUFzc29jaWNhdGlvbihyZXF1ZXN0Qm9keTogYW55LCBmcmFtZXdvcmtJZDogYW55LCB0ZXJtRGF0YTogYW55KSB7XG4gICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKHRydWUpO1xuICAgIGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy51cGRhdGVGcmFtZXdvcmtBc3NvY2lhdGlvbihyZXF1ZXN0Qm9keSwgeyBpZDogZnJhbWV3b3JrSWQsIGNhdGVnb3J5OiB0ZXJtRGF0YS5jYXRlZ29yeSB9LCB0ZXJtRGF0YS5jb2RlKS50b1Byb21pc2UoKS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHVwZGF0aW5nIGFzc29jaWF0aW9uJywgZXJyKTtcbiAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSk7XG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBFcnJvciBpbiB1cGRhdGluZyBhc3NvY2lhdGlvbmAsICdjYW5jZWwnKTtcbiAgICB9KTtcbiAgfVxufSIsIjwhLS0gPGRpdiBjbGFzcz1cImZsZXggZmxleC0xIGNvbm5lY3Rpb25TZXR0aW5nc1wiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwibmV3Q29ubmVjdGlvbigpXCI+XG4gICAgICAgIDxtYXQtaWNvbj57e2FwcF9zdHJpbmdzLmJ1aWxkfX08L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+IC0tPlxuXG48ZGl2ICpuZ0lmPVwibGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaGVpZ2h0Rml4IG92ZXJmbG93LWNvbnRhaW5lclwiIGlkPVwidHJlZVZpZXdDb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbGlzdDsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBmbGV4LWNvbCBjb2wtY29udGFpbmVyIGNvbnRhaW5lcnN7e2xpc3QubGVuZ3RofX1cIiBpZD1cImJveHt7aSsxfX1Db250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLXN0aWNreVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXRlZ29yeS1oZWFkZXInPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRlci1pdGVtcyB3LWZ1bGwgZmxleCBwYWRkaW5nLXJlbW92ZVwiIGlkPVwiYm94e3tpfX1IZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZ2FwLTEgbWF0LWJvZHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5jb25maWc/Lmljb25FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmNvbmZpZy5jb2xvcn1cIj57e2NvbHVtbi5jb25maWcuaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4ubmFtZX19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbj8uY29uZmlnPy5jYXRlZ29yeURpc3BsYXlOYW1lIHx8IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICE9IDAgJiYgY2F0ZWdvcnlMaXN0Py5sZW5ndGggPiAwOyBlbHNlIGZpcnN0Q29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmluZGV4ICE9PSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPih7e2dldENvdW50KGNvbHVtbi5jb2RlKX19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5sZXZlbE5hbWVFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJlZGl0LWJ0biBmbGV4XCIgKGNsaWNrKT1cImVkaXRDYXRlZ29yeU5hbWUoY29sdW1uLCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpcnN0Q29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT0gMFwiIGlkPVwiYm94e3tpKzF9fWNvdW50XCIgY2xhc3M9XCJjb3VudFwiPih7e2NvbHVtbi5jaGlsZHJlbi5sZW5ndGh9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiXCIgKm5nSWY9XCJjb2x1bW4/LmNvbmZpZz8uY3JlYXRlQnRuRW5hYmxlZCAmJiAhY29sdW1uPy5jb25maWc/LmFkZE9yZ0VuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0biBtYXJnaW4tbGVmdC1hdXRvXCIgW25nQ2xhc3NdPVwieydidXR0b24tZW5hYmxlZCc6IGNvbmZpZ0NvZGVCdG49PSBjb2x1bW4/LmNvZGUsICdidXR0b24tZGlzYWJsZWQnOiBjb25maWdDb2RlQnRuIT09IGNvbHVtbj8uY29kZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DcmVhdGVUZXJtRGlhbG9nKGNvbHVtbiwgaSlcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5hZGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5hZGRPcmdFbmFibGVkICYmICFjb2x1bW4/LmNvbmZpZz8uY3JlYXRlQnRuRW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJhZGQtYnRuIG1hcmdpbi1sZWZ0LWF1dG9cIiAoY2xpY2spPVwib3Blbk9yZ2FuaXphdGlvbkRpYWxvZyhjb2x1bW4sIGksICdhZGQnKVwiIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydidXR0b24tZW5hYmxlZCc6IGlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKSwgJ2J1dHRvbi1kaXNhYmxlZCc6ICFpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5hZGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93XCIgaWQ9XCJib3h7e2krMX19Y291bnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgUHV0IHNlYXJjaCBidXR0b24gaGVyZSBpbiBmdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGluZy14MiBjYXQtY29sdW1ucyBjb250YWluZXItYm94XCIgaWQ9XCJib3h7e2krMX19XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY2hpbGRyZW4gJiYgY29sdW1uPy5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItdHJlZS1jb2x1bW4tdmlldyAqbmdJZj1cImxvYWRlZFtjb2x1bW4uY29kZV1cIiAjc2VsZWN0ZWRUYXhvbm9teVRlcm0gW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVySWRdPVwiJ2JveCcrKGkrMSlcIiAodXBkYXRlVGF4b25vbXlUZXJtKT1cInVwZGF0ZVRheG9ub215VGVybSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHVwZGF0ZVRlcm1MaXN0KT1cInVwZGF0ZURyYWZ0U3RhdHVzVGVybXMoJGV2ZW50KVwiIChjYXJkc0NvdW50KT1cImdldE5vT2ZDYXJkcygkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgICAgIChyZXRpcmVUZXJtRGF0YSk9XCJyZW1vdmVDb25uZWN0aW9uKCRldmVudClcIiAoY2FyZEFjdGlvbik9XCJjYXJkQWN0aW9uRW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9saWItdHJlZS1jb2x1bW4tdmlldz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd1N2Z0JvcmRlcldyYXBwZXIoY29sdW1uLCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ZnLWJvcmRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzFCMjEzMzUyXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9XCIyMCwgMTBcIiByeD1cIjEwXCIgcnk9XCIxMFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQgZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmcmFjLW5vLWNvbm5lY3Rpb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgYW4gb3JnYW5pemF0aW9uIHRvIGFkZCBvciBzZWUgZnVydGhlciBjb25uZWN0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbiwgaSwgJ2FkZCcpXCIgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnV0dG9uLWVuYWJsZWQnOiBpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSksICdidXR0b24tZGlzYWJsZWQnOiAhaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwX3N0cmluZ3MuYWRkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bGliLWFjdGlvbi1iYXIgKm5nSWY9XCJzaG93QWN0aW9uQmFyXCIgW2FjdGlvblR5cGVdPVwiaXNBcHByb3ZhbFZpZXdcIiBbY29uZmlnVHlwZV09XCJ3b3JrRmxvd1N0YXR1c1wiXG4gICAgICAgIChzZW5kQXBwcm92YWwpPVwic2VuZEZvckFwcHJvdmFsKClcIiAoY2xvc2VBY3Rpb24pPVwiY2xvc2VBY3Rpb25CYXIoJGV2ZW50KVwiPjwvbGliLWFjdGlvbi1iYXI+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwICkgJiYgaXNGcmF3b3JrTG9hZGluZ1wiIGNsYXNzPVwiZmxleCBoZWlnaHRGaXggXCI+XG4gICAgPGgxIGkxOG4+e3thcHBfc3RyaW5ncy5sb2FkaW5nfX08L2gxPlxuPC9kaXY+Il19
821
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFPdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUU3RyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNuSCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXZCLE1BQU0sT0FBTyxpQkFBaUI7SUE0QjVCLFlBQW9CLGdCQUFrQyxFQUM1QyxR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Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vY3JlYXRlLXRlcm0vY3JlYXRlLXRlcm0uY29tcG9uZW50JztcbmltcG9ydCB7IENvbm5lY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2Nvbm5lY3Rvci9jb25uZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2FsQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1jb25uZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUNvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24tdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbm5lY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25uZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBcHByb3ZhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHByb3ZhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcic7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZmlnLCBoZWFkZXJMaW5lQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FwcC1jb25zdGFudCc7XG5pbXBvcnQgeyBsYWJlbHMgfSBmcm9tICcuLi8uLi9sYWJlbHMvc3RyaW5ncyc7XG5pbXBvcnQgeyBDYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhcmlhYmxlLXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JnSGllcmFyY2h5QWRkTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJlZUhpZXJhcmNoeVNlcnZpY2UgfSBmcm9tICcuLi8uLi90cmVlLWhpZXJhcmNoeS5zZXJ2aWNlJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyBDb25mb3JhbXRpb25Qb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZvcmFtdGlvbi1wb3B1cC9jb25mb3JhbXRpb24tcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IENhdGVnb3J5RWRpdE1vZHVsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NhdGVnb3J5LWVkaXQvY2F0ZWdvcnktZWRpdC1tb2R1bGUvY2F0ZWdvcnktZWRpdC1tb2R1bGUuY29tcG9uZW50JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmRlY2xhcmUgdmFyIExlYWRlckxpbmU6IGFueTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10cmVlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGFwcHJvdmFsTGlzdDogQXJyYXk8Q2FyZD4gPSBbXTtcbiAgQElucHV0KCkgaXNBcHByb3ZhbFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgd29ya0Zsb3dTdGF0dXM6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlbnZpcm9ubWVudDphbnk7XG4gIEBJbnB1dCgpIHRheG9ub215Q29uZmlnOiBhbnk7XG4gIEBJbnB1dCgpIG9yZ1NlbGVjdGVkRGF0YTogYW55O1xuICBAT3V0cHV0KCkgc2VudEZvckFwcHJvdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgbG9hZGVyRW5hYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIG1hbmFnZU9yZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIG1hcHBpbmcgPSB7fTtcbiAgaGVpZ2h0TGlnaHRlZCA9IFtdXG4gIGxvY2FsTGlzdCA9IFtdXG4gIHNob3dQdWJsaXNoOiBib29sZWFuID0gZmFsc2VcbiAgbmV3VGVybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIGxvYWRlZDogYW55ID0ge31cbiAgc2hvd0FjdGlvbkJhcjogYm9vbGVhbiA9IGZhbHNlXG4gIGFwcHJvdmFsUmVxdWlyZWRUZXJtcyA9IFtdXG4gIGRyYWZ0VGVybXM6IEFycmF5PENhcmQ+ID0gW107XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBjYXRlZ29yeUxpc3Q6YW55ID0gW107XG4gIGFwcF9zdHJpbmdzOiBhbnkgPSBsYWJlbHM7XG4gIGlzSGlkZUJ0bkVuYTpib29sZWFuID10cnVlO1xuICBjb2x1bW5JZDpzdHJpbmcgPSAnJztcbiAgY29uZmlnQ29kZUJ0bjphbnk7XG4gIGRhdGFDb25maWc6YW55XG4gIGlzRnJhd29ya0xvYWRpbmcgPSB0cnVlXG4gIGxvYWRlclN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZyYW1ld29ya1NlcnZpY2U6IEZyYW1ld29ya1NlcnZpY2UsIFxuICAgIHByaXZhdGUgbG9jYWxTdmM6IExvY2FsQ29ubmVjdGlvblNlcnZpY2UsIFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgXG4gICAgcHJpdmF0ZSBhcHByb3ZhbFNlcnZpY2U6IEFwcHJvdmFsU2VydmljZSxcbiAgICBwcml2YXRlIF9zbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBjb25uZWN0b3JTdmM6IENvbm5lY3RvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJlZUhpZXJhcmNoeVN2YzogVHJlZUhpZXJhcmNoeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kcmFmdFRlcm1zID0gdGhpcy5hcHByb3ZhbExpc3Q7XG4gICAgdGhpcy5pbml0KClcbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSB0aGlzLmlzQXBwcm92YWxWaWV3P3RydWU6ZmFsc2U7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmFmdGVyQWRkT3JFZGl0U3ViamVjdC5zdWJzY3JpYmUocmVzcG9uc2VEYXRhID0+IHtcbiAgICAgIGlmKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEucmVzICYmIHJlc3BvbnNlRGF0YS5kYXRhKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaERhdGEocmVzcG9uc2VEYXRhKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5pc0VuYWJsZWRzKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIFxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiB9IFxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5pbml0Q29uZmlnKCk7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0luZm8oKHRoaXMub3JnU2VsZWN0ZWREYXRhKSA/IHRoaXMub3JnU2VsZWN0ZWREYXRhIDogJycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3RvclN2Yy5yZW1vdmVBbGxMaW5lcygpXG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2F0ZWdvcmllc0hhc2gudmFsdWUuZm9yRWFjaCgoY2F0OmFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlZFtjYXQuY29kZV0gPSB0cnVlXG4gICAgICB9KVxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vICB0aGlzLmRyYXdIZWFkZXJMaW5lKHJlcy5yZXN1bHQuZnJhbWV3b3JrLmNhdGVnb3JpZXMubGVuZ3RoKTsgIFxuICAgICAgICAgICAgIHRoaXMubWFrZUZpcnN0VGVybVNlbGVjdGVkKClcbiAgICAgICAgfSw1MDApXG4gICAgfSwgKGVycikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignZXJyb3IgaW4gZmV0Y2hpbmcgZnJhbWV3b3JrJywgZXJyKVxuICAgIH0pXG5cbiAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbiA9IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5sb2FkZXJTdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGVyRW5hYmxlLmVtaXQoZGF0YSlcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH0sXG4gICAgKVxuICBcbiAgfVxuICByZWZyZXNoRGF0YShyZXNEYXRhOiBhbnkpIHtcbiAgICBjb25zdCByZXMgPSByZXNEYXRhLnJlc1xuICAgIGlmIChyZXMgJiYgcmVzLmNyZWF0ZWQpIHtcbiAgICAgIHRoaXMuc2hvd1B1Ymxpc2ggPSB0cnVlXG4gICAgfVxuICAgIGlmKHJlcy5tdWx0aSAmJiBBcnJheS5pc0FycmF5KHJlcy50ZXJtKSAmJiByZXMudGVybS5sZW5ndGgpe1xuICAgICAgcmVzLnRlcm0gPSByZXMudGVybVswXVxuICAgIH0gXG4gICAgdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAvLyB3YWl0XG4gICAgY29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgcmVzLnBhcmVudCA9IG51bGxcbiAgICBpZiAocGFyZW50Q29sdW1uKSB7XG4gICAgICByZXMucGFyZW50ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbi5jb2RlKVxuICAgICAgaWYocmVzRGF0YS50eXBlID09PSAndXBkYXRlJyl7XG4gICAgICAgIFxuICAgICAgICByZXMucGFyZW50LmNoaWxkcmVuW3Jlcy5wYXJlbnQuY2hpbGRyZW4uZmluZEluZGV4KChlbDogYW55KSA9PiBlbC5pZGVudGlmaWVyID09PSByZXMudGVybS5pZGVudGlmaWVyKV0gPSAgcmVzLnRlcm1cbiAgICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KHJlcy5wYXJlbnQuY2F0ZWdvcnkpLmNoaWxkcmVuID0gWy4uLnJlcy5wYXJlbnQuY2hpbGRyZW5dXG4gICAgICAgIFxuICAgICAgICBcblxuICAgICAgICAvLyB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogcmVzLnRlcm0uY2F0ZWdvcnksIGRhdGE6IHJlcy50ZXJtLmNoaWxkcmVuLCBjYXJkUmVmOnJlc0RhdGEuY2FyZFJlZiB9KVxuICAgICAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGlvbihyZXMudGVybS5jYXRlZ29yeSwgcmVzLnRlcm0uY29kZSk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlU2VsZWN0aW9uKHJlcy5wYXJlbnQuY2F0ZWdvcnksIHJlcy5wYXJlbnQuY29kZSk7XG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiByZXMudGVybS5jYXRlZ29yeSwgZGF0YTogcmVzLnRlcm0uY2hpbGRyZW4sIGNhcmRSZWY6cmVzRGF0YS5jYXJkUmVmIH0pXG4gICAgICAgIC8vIH0sIDEwMCk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogdHJ1ZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6cmVzRGF0YS5pbmRleCB9KVxuICAgICAgICAgdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gdHJ1ZVxuICAgICAgICByZXMudGVybS5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShyZXMudGVybS5jYXRlZ29yeSlcbiAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5uZXh0KHsgYWN0aW9uOiByZXMudGVybS5jYXRlZ29yeSwgdHlwZTondXBkYXRlJywgZGF0YTogcmVzLnRlcm0gfSlcbiAgICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogdHJ1ZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6cmVzRGF0YS5pbmRleCB9LCAndXBkYXRlJylcbiAgICAgICAgIHJlcy50ZXJtLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAvLyBjb25zdCBuZXh0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShyZXMudGVybS5jYXRlZ29yeSlcbiAgICAgICAgXG4gICAgICAgIC8vICAgaWYgKG5leHQgJiYgbmV4dC5jb2RlKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUobmV4dC5jb2RlKVxuICAgICAgICAvLyAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKCFyZXMubXVsdGkpe1xuICAgICAgICAgIHJlcy5wYXJlbnQuY2hpbGRyZW4/IHJlcy5wYXJlbnQuY2hpbGRyZW4ucHVzaChyZXMudGVybSkgOnJlcy5wYXJlbnRbJ2NoaWxkcmVuJ10gPSBbcmVzLnRlcm1dXG4gICAgICAgIH0gXG4gICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSwpXG4gICAgICB9XG4gICAgfVxuICAgXG4gIH1cblxuICBtYWtlRmlyc3RUZXJtU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgZmlyc3RMaXN0SXRlbSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmVudHJpZXMoKS5uZXh0KCkudmFsdWUgYXMgYW55XG4gICAgaWYoZmlyc3RMaXN0SXRlbSAmJiBmaXJzdExpc3RJdGVtLmxlbmd0aCA+PSAyKXtcbiAgICAgIGlmKGZpcnN0TGlzdEl0ZW1bMV0gJiYgZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlbiAmJiBmaXJzdExpc3RJdGVtWzFdLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdFRlcm0gPSBmaXJzdExpc3RJdGVtWzFdLmNoaWxkcmVuWzBdIGFzIGFueVxuICAgICAgICBjb25zdCBjYXJkUmVmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RUZXJtLm5hbWUpXG4gICAgICAgIC8vIHRoaXMuY2F0ZWdvcnlMaXN0ID0gW11cbiAgICAgICAgZmlyc3RUZXJtLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGEgPSBmaXJzdFRlcm07XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5uZXh0KGZpcnN0VGVybS5jYXRlZ29yeSlcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IGZpcnN0VGVybS5jYXRlZ29yeSwgZGF0YTogZmlyc3RUZXJtLCBjYXJkUmVmIH0pXG4gICAgICAgIHRoaXMuaXNGcmF3b3JrTG9hZGluZyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGF4b25vbXlUZXJtKGRhdGE6IHsgc2VsZWN0ZWRUZXJtOiBhbnksIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sIGlzVXBkYXRlPzphbnl9KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLnNlbGVjdGVkVGVybSAmJiBkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSkge1xuICAgICAgaWYoIWRhdGEuaXNVcGRhdGUpe1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdChkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoZGF0YSwgJ3VwZGF0ZScpXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSwgZGF0YS5zZWxlY3RlZFRlcm0uY29kZSk7XG4gICAgfVxuICB9XG4gIHVwZGF0ZVNlbGVjdGlvbihjYXRlZ29yeTogc3RyaW5nLCBzZWxlY3RlZFRlcm1Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjYXRlZ29yeURhdGEgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5nZXQoY2F0ZWdvcnkpO1xuICAgIGlmIChjYXRlZ29yeURhdGEgJiYgY2F0ZWdvcnlEYXRhLmNoaWxkcmVuKSB7XG4gICAgICBjYXRlZ29yeURhdGEuY2hpbGRyZW4ubWFwKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gc2VsZWN0ZWRUZXJtQ29kZSA9PT0gaXRlbS5jb2RlID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgIHJldHVybiBpdGVtXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vbmVlZCB0byByZWZhY3RvciBhdCBoZWlnaCBsZXZlbFxuICB1cGRhdGVGaW5hbExpc3QoZGF0YTogeyBzZWxlY3RlZFRlcm06IGFueSwgaXNTZWxlY3RlZDogYm9vbGVhbiwgcGFyZW50RGF0YT86IGFueSwgY29sSW5kZXg/OiBhbnl9LCB0eXBlPzogYW55KSB7XG4gICAgXG4gICAgaWYgKGRhdGEuaXNTZWxlY3RlZCkge1xuICAgICAgLy8gZGF0YS5zZWxlY3RlZFRlcm0uc2VsZWN0ZWQgPSBkYXRhLmlzU2VsZWN0ZWRcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LnNldChkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSwgZGF0YS5zZWxlY3RlZFRlcm0pO1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpXG4gICAgICBpZiAobmV4dCAmJiBuZXh0LmNvZGUpIHtcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKG5leHQuY29kZSlcbiAgICAgIH1cbiAgICAgIC8vIG5vdGlmeSBuZXh0XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuaW5zZXJ0VXBkYXRlRGVsZXRlTm90aWZpZXIubmV4dCh7IGFjdGlvbjogZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIHR5cGU6IHR5cGUgPyB0eXBlIDogJ3NlbGVjdCcsIGRhdGE6IGRhdGEuc2VsZWN0ZWRUZXJtIH0pXG4gICAgfSBcbiAgICBpZihkYXRhLmNvbEluZGV4ID09PSAwICYmICFkYXRhLmlzU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB7XG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9LDMwMDApXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkZWRbZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnldID0gdHJ1ZVxuICAgICAgLy8gaWYodHlwZSAmJiB0eXBlID09PSAndXBkYXRlJyl7XG4gICAgICAvLyAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSk7XG4gICAgICAvLyAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBkYXRhLnBhcmVudERhdGEuY2F0ZWdvcnksIGRhdGE6IGRhdGEucGFyZW50RGF0YS5jaGlsZHJlbiB9KVxuICAgICAgLy8gfVxuICAgIH0sIDEwMCk7XG5cbiAgfVxuICBpc0VuYWJsZWQoY29sdW1uQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7ICAgIFxuICAgIHJldHVybiAhIXRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChjb2x1bW5Db2RlKVxuICB9XG5cbiAgaXNFbmFibGVkcygpIHtcbiAgLy8gIHJldHVybiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGFcbiAgaWYodGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrKXtcbiAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuQ3VycmVudENhcmRDbGsuc3Vic2NyaWJlKChpdGVtKT0+e1xuICAgICBjb25zdCBkYXRhQ29kZTogYW55ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShpdGVtKVxuICAgICAgaWYgKGRhdGFDb2RlICYmIGRhdGFDb2RlLmNvZGUpe1xuICAgICAgICB0aGlzLmRhdGFDb25maWcgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0Q29uZmlnKGRhdGFDb2RlLmNvZGUpXG4gICAgICB9XG4gICAgIGlmKGRhdGFDb2RlKXtcbiAgICAgIHRoaXMuY29uZmlnQ29kZUJ0biA9IGRhdGFDb2RlLmNvZGVcbiAgICAgfVxuICAgICB9KVxuICB9XG4gIFxuICBcbiAgfVxuXG4gIC8vIGdldGJ0bkVuYWJsZUZuKF9pdGVtOiBhbnkpIHtcbiAgLy8gICBjb25zdCBhbGxTZWxlY3RlZFRlcm06IGFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRBbGxTZWxlY3RlZFRlcm1zKClcbiAgLy8gICBpZiAoYWxsU2VsZWN0ZWRUZXJtICYmIGFsbFNlbGVjdGVkVGVybS5sZW5ndGggJiYgYWxsU2VsZWN0ZWRUZXJtLmZpbHRlcigodDogYW55KSA9PiB0LmNhdGVnb3J5ID09PSBfaXRlbS5jb2RlKS5sZW5ndGggPiAwKSB7XG4gIC8vICAgICByZXR1cm4gdHJ1ZVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gZmFsc2VcbiAgLy8gfVxuXG5cbiAgb3BlbkNyZWF0ZVRlcm1EaWFsb2coY29sdW1uOiBhbnksIGNvbEluZGV4OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKGNvbHVtbi5jb2RlKSkge1xuICAgICAgY29uc3QgbmV4dENhdCA9IGNvbHVtbi5jb2RlXG4gICAgICBjb25zdCBuZXh0TmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkobmV4dENhdClcbiAgICAgIGlmKG5leHRDYXQpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMobmV4dENhdClcbiAgICAgICAgY29uc3QgY29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dENhdCApXG4gICAgICAgIGxldCBuZXh0Q29sSW5mbzogYW55ID0gW11cbiAgICAgICAgaWYobmV4dE5leHRDYXQgJiYgbmV4dE5leHRDYXQuY29kZSkge1xuICAgICAgICAgIG5leHRDb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0TmV4dENhdC5jb2RlIClcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICAgICAgaWYodGhpcy5lbnZpcm9ubWVudCAmJiB0aGlzLmVudmlyb25tZW50LmZyYW1ld29ya1R5cGUgPT09ICdNRE9fREVTSUdOQVRJT04nKXtcbiAgICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgICBtb2RlOidtdWx0aS1jcmVhdGUnLFxuICAgICAgICAgICAgICAvLyBjYXJkQ29sSW5mbzogdGhpcy5kYXRhLmNvbHVtbkluZm8sXG4gICAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgICAgLy8gY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInLFxuICAgICAgICAgICAgcG9zaXRpb246IHsgdG9wOiAnNTBweCcgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDcmVhdGVUZXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAvLyBkYXRhOiB7XG4gICAgICAgICAgICAvLyAgIG1vZGU6J2NyZWF0ZScsXG4gICAgICAgICAgICAvLyAgIGNvbHVtbkluZm86IGNvbHVtbixcbiAgICAgICAgICAgIC8vICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgLy8gICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIC8vICAgY29sSW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgLy8gICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICAgIC8vIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZighcmVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UHVibGlzaCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICBjb25zdCBkYXRhICA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jYXJkQ2xrRGF0YVxuICAgICAgICAgXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0ge1xuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgaW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoIShyZXMgJiYgcmVzLnN0b3BVcGRhdGUpKXtcbiAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmxvYWRlZFtyZXMudGVybS5jYXRlZ29yeV0gPSBmYWxzZVxuICAgICAgICAgIC8vIHdhaXRcbiAgICAgICAgICBjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShyZXMudGVybVswXS5jYXRlZ29yeSlcbiAgICAgICAgICByZXMucGFyZW50ID0gbnVsbFxuICAgICAgICAgIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgICAgICAgIHJlcy5wYXJlbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uLmNvZGUpXG4gICAgICAgICAgICByZXMucGFyZW50LmNoaWxkcmVuPyByZXMucGFyZW50LmNoaWxkcmVuLnB1c2gocmVzLnRlcm1bMF0pIDpyZXMucGFyZW50WydjaGlsZHJlbiddID0gW3Jlcy50ZXJtWzBdXVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm1bMF0sIGlzU2VsZWN0ZWQ6IGZhbHNlLCBwYXJlbnREYXRhOiByZXMucGFyZW50LCBjb2xJbmRleDpjb2xJbmRleCB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5Pcmdhbml6YXRpb25EaWFsb2coY29sdW1uOiBhbnksIF9pbmRleDogYW55LCB0eXBlU2VsZWN0ZWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyZWVMaXN0RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uLmNvZGUpICAgICBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKE9yZ0hpZXJhcmNoeUFkZE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHByZXZpb3VzOiB0cmVlTGlzdERhdGEsXG4gICAgICAgIGN1cnJlbnREYXRhOiBjb2x1bW4sXG4gICAgICAgIHNlbGVjdGVkT3JnRGF0YTogdGhpcy5vcmdTZWxlY3RlZERhdGEsXG4gICAgICAgIHR5cGU6IHR5cGVTZWxlY3RlZFxuICAgICAgfSxcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcbiAgICAgIHBvc2l0aW9uOiB7IHJpZ2h0OiAnMCcgfSxcbiAgICAgIGhlaWdodDogJzEwMHZoJyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdyaWdodC1zaWRlLW1vZGFsJyxcbiAgICAgIG1heFdpZHRoOiAnMTAwdncnXG4gICAgfSk7XG4gICAgXG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGFzeW5jIChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKF9yZXMgJiYgX3Jlcy50eXBlID09PSAnYWRkJykge1xuICAgICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZSh0cnVlKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRlcm1zKF9yZXMuc2VsZWN0ZWRPcmcsIGNvbHVtbilcbiAgICAgICAgfSBlbHNlIGlmIChfcmVzICYmIF9yZXMudHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICBpZiAoX3Jlcy5wYXBhcmVudFNlbGVjdGVkT3JnKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBhcmVudEFzc29jaWF0aW9uKF9yZXMucGFwYXJlbnRTZWxlY3RlZE9yZywgX3Jlcy5jdXJyZW50VGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfcmVzLnNlbGVjdGVkT3JnICYmIF9yZXMuc2VsZWN0ZWRPcmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUZXJtcyhfcmVzLnNlbGVjdGVkT3JnLCBjb2x1bW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHVibGlzaEZyYW1ld29yayh7XG4gICAgICAgICAgICAgIGlkOiB0aGlzLm9yZ1NlbGVjdGVkRGF0YS5vcmdIaWVyYXJjaHlGcmFtZXdvcmtJZCB8fCAnJyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnJ30pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGlzdCgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpXG4gIH1cbiAgXG4gIGRyYXdIZWFkZXJMaW5lKGxlbjogbnVtYmVyKXtcbiAgICBjb25zdCBvcHRpb25zID0gey4uLmRlZmF1bHRDb25maWcsLi4uaGVhZGVyTGluZUNvbmZpZyB9XG4gICAgZm9yKGxldCBpPTE7IGk8PWxlbjsgaSsrKXtcbiAgICAgIGNvbnN0IHN0YXJ0RWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2JveCR7aX1jb3VudGApXG4gICAgICBjb25zdCBlbmRFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYm94JHtpfUhlYWRlcmApXG4gICAgICBpZihzdGFydEVsZSAmJiBlbmRFbGUpIHtcbiAgICAgICAgbmV3IExlYWRlckxpbmUoc3RhcnRFbGUsIGVuZEVsZSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uKGNvbHVtbkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5nZXQoY29sdW1uQ29kZSlcbiAgfVxuICBcbiAgbmV3Q29ubmVjdGlvbigpIHsgXG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDb25uZWN0b3JDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgd2lkdGg6ICc5MCUnLFxuICAgICAgLy8gcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyBcbiAgICB9KVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBJQ29ubmVjdGlvblR5cGUpID0+IHtcbiAgICAgIGlmICgocmVzLnNvdXJjZSA9PT0gJ29ubGluZScgJiYgcmVzLmRhdGEuZW5kcG9pbnQpIHx8IChyZXMuc291cmNlID09PSAnb2ZmbGluZScpKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdmMubG9jYWxTdG9yYWdlID0gcmVzXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlcy5zb3VyY2UgPT09ICdvbmxpbmUnICYmICFyZXMuZGF0YS5lbmRwb2ludCkge1xuICAgICAgICB0aGlzLmxvY2FsU3ZjLmxvY2FsU3RvcmFnZSA9IHJlc1xuICAgICAgICB0aGlzLmluaXQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB1cGRhdGVEcmFmdFN0YXR1c1Rlcm1zKGV2ZW50OiBhbnkpe1xuICAgIGlmKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuZHJhZnRUZXJtcy5wdXNoKGV2ZW50LnRlcm0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFmdFRlcm1zID0gdGhpcy5kcmFmdFRlcm1zLmZpbHRlcihkID0+IGV2ZW50LnRlcm0uaWRlbnRpZmllciAhPT0gZC5pZGVudGlmaWVyKVxuICAgIH1cbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSB0aGlzLmRyYWZ0VGVybXMubGVuZ3RoPjA/dHJ1ZTpmYWxzZVxuICB9XG5cbiAgZ2V0Tm9PZkNhcmRzKGV2ZW50OmFueSkge1xuICAgIGlmKHRoaXMuY2F0ZWdvcnlMaXN0Lmxlbmd0aCA+IDAgJiYgZXZlbnQuY2F0ZWdvcnkgIT09ICcnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmNhdGVnb3J5TGlzdC5maW5kSW5kZXgoKG9iajphbnkpID0+IG9iai5jYXRlZ29yeSA9PSBldmVudC5jYXRlZ29yeSk7XG4gICAgICBpZihpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnNwbGljZShpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGV2ZW50LmNhdGVnb3J5ID09ICcnKSB7XG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdFt0aGlzLmNhdGVnb3J5TGlzdC5sZW5ndGgtMV0uY291bnQgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNhdGVnb3J5TGlzdC5wdXNoKGV2ZW50KTtcbiAgfVxuICBcbiAgZ2V0Q291bnQoY29kZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBHZXQgYWxsIHByZXZpb3VzIGNhdGVnb3JpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgaGF2ZSBzZWxlY3Rpb25zXG4gICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpO1xuICAgIGNvbnN0IGN1cnJlbnRDYXRlZ29yeUluZGV4ID0gYWxsQ2F0ZWdvcmllcy5maW5kSW5kZXgoY2F0ID0+IGNhdC5jb2RlID09PSBjb2RlKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBhbGwgcHJldmlvdXMgY2F0ZWdvcmllcyBoYXZlIHNlbGVjdGVkIHRlcm1zXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Q2F0ZWdvcnlJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwcmV2Q2F0ZWdvcnlDb2RlID0gYWxsQ2F0ZWdvcmllc1tpXS5jb2RlO1xuICAgICAgY29uc3QgaGFzUHJldlNlbGVjdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmhhcyhwcmV2Q2F0ZWdvcnlDb2RlKTtcbiAgICAgIFxuICAgICAgLy8gSWYgYW55IHByZXZpb3VzIGNhdGVnb3J5IGRvZXNuJ3QgaGF2ZSBhIHNlbGVjdGlvbiwgcmV0dXJuIDBcbiAgICAgIGlmICghaGFzUHJldlNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gTm93IHdlIGNhbiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBjb3VudCBzaW5jZSBhbGwgcHJldmlvdXMgbGV2ZWxzIGFyZSBzZWxlY3RlZFxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIHNlbGVjdGVkIHRlcm0gZm9yIHBhcmVudCBjYXRlZ29yeSB0aGF0IGhhcyBjaGlsZHJlbiBmb3IgdGhpcyBjYXRlZ29yeVxuICAgIGNvbnN0IHByZXZDYXRlZ29yeSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KGNvZGUpO1xuICAgIGlmIChwcmV2Q2F0ZWdvcnkpIHtcbiAgICAgIGNvbnN0IHByZXZTZWxlY3RlZFRlcm0gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocHJldkNhdGVnb3J5LmNvZGUpO1xuICAgICAgaWYgKHByZXZTZWxlY3RlZFRlcm0pIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHNlbGVjdGVkIHBhcmVudCB0ZXJtLCBjb3VudCBpdHMgY2hpbGRyZW4gZm9yIHRoaXMgY2F0ZWdvcnlcbiAgICAgICAgaWYgKHByZXZTZWxlY3RlZFRlcm0uY2hpbGRyZW4gJiYgcHJldlNlbGVjdGVkVGVybS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY291bnQgPSBwcmV2U2VsZWN0ZWRUZXJtLmNoaWxkcmVuLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4gXG4gICAgICAgICAgICAhY2hpbGQuaXNEZWxldGVkICYmIGNoaWxkLnN0YXR1cyAhPT0gJ1JldGlyZWQnICYmIFxuICAgICAgICAgICAgKGNoaWxkLmNhdGVnb3J5ID09PSBjb2RlIHx8IChjaGlsZC5hc3NvY2lhdGlvbnMgJiYgXG4gICAgICAgICAgICAgY2hpbGQuYXNzb2NpYXRpb25zLnNvbWUoKGFzc29jOiBhbnkpID0+IGFzc29jLmNhdGVnb3J5ID09PSBjb2RlKSkpXG4gICAgICAgICAgKS5sZW5ndGg7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIG5vIHNlbGVjdGlvbiBleGlzdHMgZm9yIHRoZSBwYXJlbnQsIGRvbid0IHNob3cgY291bnRzXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgbGV2ZWwsIHdlIGNhbiBzaG93IGFsbCB0ZXJtc1xuICAgIGNvbnN0IGNhdGVnb3J5RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChjb2RlKTtcbiAgICBpZiAoY2F0ZWdvcnlEYXRhICYmIGNhdGVnb3J5RGF0YS5jaGlsZHJlbikge1xuICAgICAgY291bnQgPSBjYXRlZ29yeURhdGEuY2hpbGRyZW4uZmlsdGVyKChjaGlsZDogYW55KSA9PiBcbiAgICAgICAgIWNoaWxkLmlzRGVsZXRlZCAmJiBjaGlsZC5zdGF0dXMgIT09ICdSZXRpcmVkJ1xuICAgICAgKS5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHNlbmRGb3JBcHByb3ZhbCgpe1xuICAgIGlmKCF0aGlzLmlzQXBwcm92YWxWaWV3KXtcbiAgICAgICAgbGV0IHBhcmVudExpc3Q6IGFueSA9IFtdXG4gICAgICAgIHRoaXMubGlzdC5mb3JFYWNoKGVsZSA9PiB7XG4gICAgICAgICAgY29uc3QgdCA9IGVsZS5jaGlsZHJlbi5maWx0ZXIoKHRlcm06IGFueSkgPT4gdGVybS5zZWxlY3RlZCA9PT0gdHJ1ZSlcbiAgICAgICAgICBpZih0WzBdKXtcbiAgICAgICAgICAgIHBhcmVudExpc3QucHVzaCh0WzBdKVxuICAgICAgICAgIH0gXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlczpbLi4ucGFyZW50TGlzdCwgLi4udGhpcy5kcmFmdFRlcm1zXVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmNyZWF0ZUFwcHJvdmFsKHJlcSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVtb3ZlT2xkTGluZSgpXG4gICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbignVGVybXMgc3VjY2Vzc2Z1bGx5IHNlbnQgZm9yIEFwcHJvdmFsLicsICdjYW5jZWwnKVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRGb3JBcHByb3ZlLmVtaXQodGhpcy5kcmFmdFRlcm1zKVxuICAgIH1cbiAgIFxuICB9XG5cbiAgY2xvc2VBY3Rpb25CYXIoX2U6YW55KXsgXG4gICAgdGhpcy5zaG93QWN0aW9uQmFyID0gZmFsc2U7XG4gIH1cblxuICBpbml0Q29uZmlnKCkge1xuICAgIGlmKHRoaXMuZW52aXJvbm1lbnQpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUVudmlyb25tZW50KHRoaXMuZW52aXJvbm1lbnQpO1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNldENvbmZpZyh0aGlzLnRheG9ub215Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnJlbW92ZU9sZExpbmUoKTtcbiAgICAgIC8vIHRoaXMuZW52aXJvbm1lbnQgPSBudWxsXG4gICAgICAvLyB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVzZXRBbmRGcmVzaCgpXG4gICAgICAvLyB0aGlzLmNvbm5lY3RvclN2Yy5yZW1vdmVBbGxMaW5lcygpXG4gICAgICAvLyB0aGlzLmNvbm5lY3RvclN2Yy51cGRhdGVDb25uZWN0b3JzTWFwKHt9KVxuICB9XG5cbiAgZ2V0TmV4dENhdChkYXRhOiBhbnkpIHtcbiAgICBpZihkYXRhICAmJiBkYXRhLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlzQ3VycmVudE9yTmV4dFRlcm0oX2NvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgdGhlcmUncyBubyBjdXJyZW50IHNlbGVjdGlvbiwgb25seSBlbmFibGUgdGhlIGZpcnN0IGNvbHVtblxuICAgIGlmICghdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGNhdGVnb3J5IGZyb20gdGhlIGN1cnJlbnRTZWxlY3Rpb25cbiAgICBjb25zdCBjdXJyZW50Q2F0ZWdvcnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi52YWx1ZS50eXBlO1xuICAgIGlmICghY3VycmVudENhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IDA7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGFjdGl2ZSBjb2x1bW5cbiAgICBsZXQgY3VycmVudEluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmxpc3RbaV0uY29kZSA9PT0gY3VycmVudENhdGVnb3J5KSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBjdXJyZW50IGluZGV4LCBvbmx5IGVuYWJsZSB0aGUgZmlyc3QgY29sdW1uXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5hYmxlIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlIG5leHQgb25lXG4gICAgcmV0dXJuIGluZGV4ID09PSBjdXJyZW50SW5kZXggfHwgaW5kZXggPT09IGN1cnJlbnRJbmRleCArIDE7XG4gIH1cblxuICBzaG91bGRTaG93U3ZnQm9yZGVyV3JhcHBlcihjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpbmRleCkgJiYgdGhpcy5nZXRDb3VudChjb2x1bW4uY29kZSkgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBhc3luYyBjcmVhdGVUZXJtcyhzZWxlY3RlZExpc3Q6YW55LCBjb2x1bW46YW55KSB7XG4gICAgY29uc3QgZnJhbWV3b3JrRGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLm9yZ1NlbGVjdGVkRGF0YS5vcmdIaWVyYXJjaHlGcmFtZXdvcmtJZCB8fCAnJyxcbiAgICAgIGNhdGVnb3J5OiBjb2x1bW4uY29kZSB8fCAnJyxcbiAgICB9XG4gICAgbGV0IGNyZWF0ZWROb2RlSWQ6YW55ID0gW11cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGVsZSBvZiBzZWxlY3RlZExpc3QpIHsgXG4gICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgICBuYW1lOiBlbGUub3JnTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGVsZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgY29kZTogdXVpZHY0KCksXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgb3JnSWQ6IGVsZS5pZGVudGlmaWVyIHx8ICcnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZVRyZW1zUmVzOmFueSA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5jcmVhdGVUZXJtKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtEYXRhKS50b1Byb21pc2UoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgZXJyKTtcbiAgICAgIH0pXG4gICAgICBpZiAoY3JlYXRlVHJlbXNSZXMgJiYgY3JlYXRlVHJlbXNSZXMucmVzdWx0ICYmIGNyZWF0ZVRyZW1zUmVzLnJlc3VsdC5ub2RlX2lkKSB7XG4gICAgICAgIGNyZWF0ZWROb2RlSWQucHVzaChjcmVhdGVUcmVtc1Jlcy5yZXN1bHQubm9kZV9pZFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjcmVhdGVkTm9kZUlkLmxlbmd0aCA9PT0gc2VsZWN0ZWRMaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGNvbHVtbi5pbmRleCA+MSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFzc29jaWF0aW9uKGNyZWF0ZWROb2RlSWQsIGZyYW1ld29ya0RhdGEsIGNvbHVtbik7XG4gICAgICB9IFxuICAgICAgdGhpcy5wdWJsaXNoRnJhbWV3b3JrKGZyYW1ld29ya0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFzc29jaWF0aW9uKG5vZGVJZDogYW55LCBmcmFtZXdvcmtEYXRhOiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgY29uc3QgcHJldjphbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShjb2x1bW4uY29kZSk7XG4gICAgbGV0IHByZXZUcmVtOmFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uLmNvZGUpXG4gICAgY29uc3QgdGVtcEZyYW1lRGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlKVxuICAgIGNvbnN0IHJlcXVlc3RCb2R5OmFueSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgdGVybToge1xuICAgICAgICAgIGFzc29jaWF0aW9uczogW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gXG4gICAgaWYgKHByZXYgJiYgcHJldlRyZW0pIHtcbiAgICAgIHByZXZUcmVtID0gcHJldlRyZW0uZmluZCgoZWxlOmFueSkgPT4gZWxlLmNhdGVnb3J5ID09PSBwcmV2LmNvZGUpXG4gICAgICBwcmV2VHJlbSA9IHRlbXBGcmFtZURhdGEuY2F0ZWdvcmllcy5maW5kKChlbGU6YW55KSA9PiBlbGUuY29kZSA9PT0gcHJldi5jb2RlKS50ZXJtcy5maW5kKChlbGU6YW55KSA9PiBlbGUuY29kZSA9PT0gcHJldlRyZW0uY29kZSlcbiAgICAgIGlmIChwcmV2VHJlbSAmJiBwcmV2VHJlbS5hc3NvY2lhdGlvbnMgJiYgcHJldlRyZW0uYXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJldlRyZW0uYXNzb2NpYXRpb25zLmZvckVhY2goKGVsZTphbnkpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiBlbGUuaWRlbnRpZmllclxuICAgICAgICAgIH0pXG4gICAgICAgIH0pIFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZUlkICYmIG5vZGVJZC5sZW5ndGggPiAwKSB7XG4gICAgICBub2RlSWQuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xuICAgICAgICByZXF1ZXN0Qm9keS5yZXF1ZXN0LnRlcm0uYXNzb2NpYXRpb25zLnB1c2goe1xuICAgICAgICAgIGlkZW50aWZpZXI6IGVsZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgZnJhbWV3b3JrRGF0YS5jYXRlZ29yeSA9IHByZXZUcmVtLmNhdGVnb3J5IHx8ICcnO1xuICAgIGNvbnN0IG5vZGVJZFBhcnRzID0gcHJldlRyZW0uaWRlbnRpZmllci5zcGxpdCgnXycpO1xuICAgIGNvbnN0IGNvZGVJZCA9IG5vZGVJZFBhcnRzW25vZGVJZFBhcnRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHVwZGF0ZUFzc29jaWF0aW9uUmVzOmFueSA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy51cGRhdGVGcmFtZXdvcmtBc3NvY2lhdGlvbihyZXF1ZXN0Qm9keSwgZnJhbWV3b3JrRGF0YSwgY29kZUlkKS50b1Byb21pc2UoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gdXBkYXRpbmcgYXNzb2NpYXRpb24nLCBlcnIpO1xuICAgIH0pXG4gICAgaWYgKHVwZGF0ZUFzc29jaWF0aW9uUmVzICYmIHVwZGF0ZUFzc29jaWF0aW9uUmVzLnJlc3VsdCAmJiB1cGRhdGVBc3NvY2lhdGlvblJlcy5yZXN1bHQubm9kZV9pZCkge1xuICAgICAgLy8gdGhpcy5wdWJsaXNoRnJhbWV3b3JrKGZyYW1ld29ya0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHB1Ymxpc2hGcmFtZXdvcmsoZnJhbWV3b3JrRGF0YTogYW55KSB7XG4gICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnB1Ymxpc2hGcmVhbWV3b3JrKGZyYW1ld29ya0RhdGEpLnN1YnNjcmliZSgocmVzOmFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQucHVibGlzaFN0YXR1cykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBPcmdhbml6YXRpb24gaGllcmFyY2h5IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsIGVycik7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQ29ubmVjdGlvbihkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXJtc0Fzc29jaWF0aW9uKGRhdGEuY2hpbGRyZW4uY29kZSk7XG4gICAgbGV0IGNvdW50ID0gMFxuICAgIGlmIChhc3NvY2lhdGlvbiAmJiBhc3NvY2lhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBhc3NvY2lhdGlvbi5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgIGlmIChhc3NvYy5pZHMgJiYgYXNzb2MuaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb3VudCArPSBhc3NvYy5pZHMubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICAgIGRpYWxvZ1R5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGVhZGVyOiBgJHtjb3VudCB8fCAwfSBPcmdhbmlzYXRpb24ke2NvdW50ID4gMSA/ICdzJyA6ICcnfSB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvcmdhbmlzYXRpb24gaGllcmFyY2h5LmAsXG4gICAgICAgICAgICBoZWFkZXJDbGFzczogJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmx1ZScsXG4gICAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbXNnQ2xhc3M6ICd0ZXh0LWJsdWUgbWFyZ2luLWJvdHRvbS1zJyxcbiAgICAgICAgICAgICAgICBtc2c6IGBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZvb3RlckNsYXNzOiAnaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJyxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJ0blRleHQ6ICdObycsXG4gICAgICAgICAgICBidG5DbGFzczogJ2J0bi1jb21tb24gYnRuLXNlY29uZGFyeScsXG4gICAgICAgICAgICByZXNwb25zZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBidG5UZXh0OiAnWWVzJyxcbiAgICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWNvbW1vbiBidG4tcHJpbWFyeScsXG4gICAgICAgICAgICByZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfVxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25mb3JhbXRpb25Qb3B1cENvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgICAgbWF4V2lkdGg6ICc4MHZ3JyxcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLnJldGlyZVRlcm1GdW5jdGlvbihhc3NvY2lhdGlvbilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgRXJyb3IgaW4gcmVtb3ZpbmcgdGhlIG9yZ2FuaXNhdGlvbmAsICdjYW5jZWwnKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldGlyZVRlcm1GdW5jdGlvbihhc3NvY2lhdGlvbjogYW55KSB7ICBcbiAgICBsZXQgY291bnQgPSAwICBcbiAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUodHJ1ZSlcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGVsZSBvZiBhc3NvY2lhdGlvbikge1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBjb250ZW50SWRzOiBlbGUuaWRzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGZyYW1ld29ya09iaiA9IHtcbiAgICAgICAgaWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGNhdGVnb3J5OiBlbGUuY2F0ZWdvcnkgfHwgJycsXG4gICAgICB9XG4gICAgICBjb25zdCByZXRpcmVSZXMgPSBhd2FpdCB0aGlzLnRyZWVIaWVyYXJjaHlTdmMucmV0aXJlVGVybShyZXF1ZXN0Qm9keSwgZnJhbWV3b3JrT2JqKS50b1Byb21pc2UoKS5jYXRjaCgoX2VycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSlcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgRmFpbGVkIHRvIHJlbW92ZSBjb25uZWN0aW9uLmAsICdjYW5jZWwnKVxuICAgICAgfSlcbiAgICAgIGlmIChyZXRpcmVSZXMgJiYgcmV0aXJlUmVzLnBhcmFtcyAmJiByZXRpcmVSZXMucGFyYW1zLnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3NmdWwnKSB7XG4gICAgICAgIGNvdW50ICs9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSlcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgRmFpbGVkIHRvIHJlbW92ZSBjb25uZWN0aW9uLmAsICdjYW5jZWwnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY291bnQgPT09IGFzc29jaWF0aW9uLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5wdWJsaXNoRnJhbWV3b3JrKHtcbiAgICAgICAgaWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlLmNvZGUsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpXG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBGYWlsZWQgdG8gcmVtb3ZlIGNvbm5lY3Rpb24uYCwgJ2NhbmNlbCcpXG4gICAgfVxuICB9XG5cbiAgY2FyZEFjdGlvbkVtaXQoZXZlbnQ6YW55KSB7XG4gICAgc3dpdGNoKGV2ZW50LmFjdGlvbikge1xuICAgICAgY2FzZSAncmVtb3ZlLXRlcm0nOlxuICAgICAgICAgIHRoaXMucmVtb3ZlQ29ubmVjdGlvbihldmVudC5kYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBkYXRlLWhpZXJhcmNoeSc6XG4gICAgICAgICAgdGhpcy5vcGVuT3JnYW5pemF0aW9uRGlhbG9nKHRoaXMubGlzdFt0aGlzLmxpc3QuZmluZEluZGV4KChpdGVtOmFueSkgPT4gaXRlbS5jb2RlID09PSBldmVudC5kYXRhLmNhdGVnb3J5KSArMV0sICcnLCAndXBkYXRlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWFuYWdlLW9yZyc6XG4gICAgICAgICAgICB0aGlzLm1hbmFnZU9yZy5lbWl0KGV2ZW50LmRhdGEuY2hpbGRyZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRDYXRlZ29yeU5hbWUoY29sdW1uOmFueSwgaW5kZXg6YW55KSB7XG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDYXRlZ29yeUVkaXRNb2R1bGVDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29sdW1uSW5mbzogY29sdW1uLFxuICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgIGNvbEluZGV4OiBpbmRleFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgcGFuZWxDbGFzczogJ2NhdGVnb3J5LWVkaXQtY29udGFpbmVyJyxcbiAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICB9KVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgIGNhdGVnb3J5Q29kZTogcmVzLmNvbHVtbi5jb2x1bW5EYXRhLmNvZGUsXG4gICAgICAgICAgY2F0ZWdvcnlOYW1lOiByZXMuY29sdW1uLmZvcm1EYXRhLmNhdGVnb3J5TmFtZSxcbiAgICAgICAgICBjYXRlZ29yeURlc2NyaXB0aW9uOiByZXMuY29sdW1uLmZvcm1EYXRhLmNhdGVnb3R5RGVzY3JpcHRpb24gfHwgJydcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUNhdGVnb3J5KHJlcXVlc3RCb2R5KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0U2VsZWN0ZWRUZXJtc0Fzc29jaWF0aW9uKGNhdGVnb3J5Q29kZTogc3RyaW5nKSB7XG4gICAgbGV0IHRlbXBEYXRhOiBhbnkgPSBbXTtcbiAgICBjb25zdCBjb21wbGV0ZURhdGEgPSBfLmNsb25lRGVlcCh0aGlzLmZyYW1ld29ya1NlcnZpY2UuY29tcGxldGVSZXNwb25zZSk7XG4gICAgaWYgKGNvbXBsZXRlRGF0YSAmJiBjb21wbGV0ZURhdGEuY2F0ZWdvcmllcyAmJiBjb21wbGV0ZURhdGEuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb21wbGV0ZURhdGEuY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeTogYW55LCBjYXRJbmRleDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjYXRlZ29yeS50ZXJtcyAmJiBjYXRlZ29yeS50ZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY2F0ZWdvcnkudGVybXMuZm9yRWFjaCgodGVybTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGVybS5jb2RlID09PSBjYXRlZ29yeUNvZGUpIHtcbiAgICAgICAgICAgICAgdGVtcERhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogdGVybS5uYW1lLFxuICAgICAgICAgICAgICAgIGNhdGVnb3J5OiB0ZXJtLmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgIGlkczogW3Rlcm0uY29kZV0sXG4gICAgICAgICAgICAgICAgbmV4dENhdGVnb3J5OiB0ZXJtLmNoaWxkcmVuID8gdGVybS5jaGlsZHJlblswXS5jYXRlZ29yeSA6ICcnLFxuICAgICAgICAgICAgICAgIGFzc29jSWRzOiBbXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHRlcm0uYXNzb2NpYXRpb25zICYmIHRlcm0uYXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZXJtLmFzc29jaWF0aW9ucy5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBnZXRJbmRleCA9IHRlbXBEYXRhLmZpbmRJbmRleCgoaXRlbTphbnkpID0+IGl0ZW0uaWRzICYmIGl0ZW0uaWRzLmluY2x1ZGVzKHRlcm0uY29kZSkpXG4gICAgICAgICAgICAgICAgICB0ZW1wRGF0YVtnZXRJbmRleF1bJ2Fzc29jSWRzJ10ucHVzaChhc3NvYy5jb2RlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBpZiAoY2F0SW5kZXggPiAwICYmIGNhdGVnb3J5LnRlcm1zICYmIGNhdGVnb3J5LnRlcm1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjYXRlZ29yeS50ZXJtcy5mb3JFYWNoKCh0ZXJtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRlbXBEYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS5uZXh0Q2F0ZWdvcnkgPT09IHRlcm0uY2F0ZWdvcnkgJiYgaXRlbS5hc3NvY0lkcy5pbmNsdWRlcyh0ZXJtLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHVzaERhdGE6YW55ID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogdGVybS5uYW1lLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHRlcm0uY2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBpZHM6IFt0ZXJtLmNvZGVdLFxuICAgICAgICAgICAgICAgICAgbmV4dENhdGVnb3J5OiB0ZXJtLmNoaWxkcmVuID8gdGVybS5jaGlsZHJlblswXS5jYXRlZ29yeSA6ICcnLFxuICAgICAgICAgICAgICAgICAgYXNzb2NJZHM6IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0ZXJtLmFzc29jaWF0aW9ucyAmJiB0ZXJtLmFzc29jaWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0ZXJtLmFzc29jaWF0aW9ucy5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hEYXRhWydhc3NvY0lkcyddLnB1c2goYXNzb2MuY29kZSlcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLnB1c2gocHVzaERhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGF0YTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUNhdGVnb3J5KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgY2F0ZWdvcnk6IHtcbiAgICAgICAgICBuYW1lOiBldmVudC5jYXRlZ29yeU5hbWUgfHwgJycsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmNhdGVnb3J5RGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZnJhbWV3b3JrT2JqID0ge1xuICAgICAgaWQ6IGV2ZW50LmZyYW1ld29ya0lkLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50LmNhdGVnb3J5Q29kZVxuICAgIH1cbiAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUodHJ1ZSk7ICAgIFxuICAgIGNvbnN0IHVwZGF0ZUNhdFJlcyA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy51cGRhdGVDYXRlZ29yeShyZXF1ZXN0Qm9keSwgZnJhbWV3b3JrT2JqKS50b1Byb21pc2UoKS5jYXRjaCgoX2VycjogYW55KSA9PiB7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgaWYgKF9lcnIgJiYgX2Vyci5lcnJvciAmJiBfZXJyLmVycm9yLnBhcmFtcyAmJiBfZXJyLmVycm9yLnBhcmFtcy5lcnJNc2cpIHtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgJHtfZXJyLmVycm9yLnBhcmFtcy5lcnJNc2d9YClcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICh1cGRhdGVDYXRSZXMgJiYgdXBkYXRlQ2F0UmVzLnBhcmFtcyAmJiB1cGRhdGVDYXRSZXMucGFyYW1zLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2Vzc2Z1bCcpIHtcbiAgICAgIGF3YWl0IHRoaXMucHVibGlzaEZyYW1ld29yayhmcmFtZXdvcmtPYmopXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlUGFyZW50QXNzb2NpYXRpb24oc2VsZWN0ZWRQYXJlbnQ6IGFueSwgY3VycmVudFRlcm06IGFueSkge1xuICAgIGNvbnN0IGZyYW13b3JrRGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlKTtcbiAgICBjb25zdCBwYXJlbnRDYXRlZ29yeURhdGEgPSBmcmFtd29ya0RhdGEuY2F0ZWdvcmllcy5maW5kKChjYXQ6IGFueSkgPT4gY2F0LmNvZGUgPT09IHNlbGVjdGVkUGFyZW50LmNhdGVnb3J5KTtcbiAgICBpZiAocGFyZW50Q2F0ZWdvcnlEYXRhICYmIHBhcmVudENhdGVnb3J5RGF0YS50ZXJtcyAmJiBwYXJlbnRDYXRlZ29yeURhdGEudGVybXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudFBhcmVudFRlcm0gPSBwYXJlbnRDYXRlZ29yeURhdGEudGVybXMuZmluZCgodGVybTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0ZXJtLmFzc29jaWF0aW9ucyAmJiB0ZXJtLmFzc29jaWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRlcm0uYXNzb2NpYXRpb25zLnNvbWUoKGFzc29jOiBhbnkpID0+IGFzc29jLmNvZGUgPT09IGN1cnJlbnRUZXJtLmNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjdXJyZW50UGFyZW50VGVybSkge1xuICAgICAgICBjb25zdCB1cGRhdGVPbGRQYXJlbnRBc3NvY2lhdGlvbjphbnkgPSB7XG4gICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgICBhc3NvY2lhdGlvbnM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRQYXJlbnRUZXJtLmFzc29jaWF0aW9ucy5mb3JFYWNoKChhc3NvYzogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGFzc29jLmNvZGUgIT09IGN1cnJlbnRUZXJtLmNvZGUpIHtcbiAgICAgICAgICAgIHVwZGF0ZU9sZFBhcmVudEFzc29jaWF0aW9uLnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7aWRlbnRpZmllcjogYXNzb2MuaWRlbnRpZmllcn0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUhpZXJhcmNoeUFzc29jaWNhdGlvbih1cGRhdGVPbGRQYXJlbnRBc3NvY2lhdGlvbiwgZnJhbXdvcmtEYXRhLmlkZW50aWZpZXIsIGN1cnJlbnRQYXJlbnRUZXJtKVxuICAgICAgfVxuICAgICAgc2VsZWN0ZWRQYXJlbnQgPSBwYXJlbnRDYXRlZ29yeURhdGEudGVybXMuZmluZCgodGVybTogYW55KSA9PiB0ZXJtLmNvZGUgPT09IHNlbGVjdGVkUGFyZW50LmNvZGUpO1xuICAgICAgY29uc3QgdXBkYXRlTmV3UGFyZW50QXNzb2NpYXRpb246YW55ID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgYXNzb2NpYXRpb25zOiBbXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlbGVjdGVkUGFyZW50ICYmIHNlbGVjdGVkUGFyZW50LmFzc29jaWF0aW9ucyAmJiBzZWxlY3RlZFBhcmVudC5hc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxlY3RlZFBhcmVudC5hc3NvY2lhdGlvbnMuZm9yRWFjaCgoYXNzb2M6IGFueSkgPT4ge1xuICAgICAgICAgIHVwZGF0ZU5ld1BhcmVudEFzc29jaWF0aW9uLnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7aWRlbnRpZmllcjogYXNzb2MuaWRlbnRpZmllcn0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB1cGRhdGVOZXdQYXJlbnRBc3NvY2lhdGlvbi5yZXF1ZXN0LnRlcm0uYXNzb2NpYXRpb25zLnB1c2goe2lkZW50aWZpZXI6IGN1cnJlbnRUZXJtLmlkZW50aWZpZXJ9KTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlSGllcmFyY2h5QXNzb2NpY2F0aW9uKHVwZGF0ZU5ld1BhcmVudEFzc29jaWF0aW9uLCBmcmFtd29ya0RhdGEuaWRlbnRpZmllciwgc2VsZWN0ZWRQYXJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUhpZXJhcmNoeUFzc29jaWNhdGlvbihyZXF1ZXN0Qm9keTogYW55LCBmcmFtZXdvcmtJZDogYW55LCB0ZXJtRGF0YTogYW55KSB7XG4gICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKHRydWUpO1xuICAgIGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy51cGRhdGVGcmFtZXdvcmtBc3NvY2lhdGlvbihyZXF1ZXN0Qm9keSwgeyBpZDogZnJhbWV3b3JrSWQsIGNhdGVnb3J5OiB0ZXJtRGF0YS5jYXRlZ29yeSB9LCB0ZXJtRGF0YS5jb2RlKS50b1Byb21pc2UoKS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHVwZGF0aW5nIGFzc29jaWF0aW9uJywgZXJyKTtcbiAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSk7XG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBFcnJvciBpbiB1cGRhdGluZyBhc3NvY2lhdGlvbmAsICdjYW5jZWwnKTtcbiAgICB9KTtcbiAgfVxufSIsIjwhLS0gPGRpdiBjbGFzcz1cImZsZXggZmxleC0xIGNvbm5lY3Rpb25TZXR0aW5nc1wiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwibmV3Q29ubmVjdGlvbigpXCI+XG4gICAgICAgIDxtYXQtaWNvbj57e2FwcF9zdHJpbmdzLmJ1aWxkfX08L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+IC0tPlxuXG48ZGl2ICpuZ0lmPVwibGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaGVpZ2h0Rml4IG92ZXJmbG93LWNvbnRhaW5lclwiIGlkPVwidHJlZVZpZXdDb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbGlzdDsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBmbGV4LWNvbCBjb2wtY29udGFpbmVyIGNvbnRhaW5lcnN7e2xpc3QubGVuZ3RofX1cIiBpZD1cImJveHt7aSsxfX1Db250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLXN0aWNreVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXRlZ29yeS1oZWFkZXInPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRlci1pdGVtcyB3LWZ1bGwgZmxleCBwYWRkaW5nLXJlbW92ZVwiIGlkPVwiYm94e3tpfX1IZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZ2FwLTEgbWF0LWJvZHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5jb25maWc/Lmljb25FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmNvbmZpZy5jb2xvcn1cIj57e2NvbHVtbi5jb25maWcuaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4ubmFtZX19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbj8uY29uZmlnPy5jYXRlZ29yeURpc3BsYXlOYW1lIHx8IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICE9IDAgJiYgY2F0ZWdvcnlMaXN0Py5sZW5ndGggPiAwOyBlbHNlIGZpcnN0Q29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmluZGV4ICE9PSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPih7e2dldENvdW50KGNvbHVtbi5jb2RlKX19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5sZXZlbE5hbWVFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJlZGl0LWJ0biBmbGV4XCIgKGNsaWNrKT1cImVkaXRDYXRlZ29yeU5hbWUoY29sdW1uLCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpcnN0Q29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT0gMFwiIGlkPVwiYm94e3tpKzF9fWNvdW50XCIgY2xhc3M9XCJjb3VudFwiPih7e2NvbHVtbi5jaGlsZHJlbi5sZW5ndGh9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiXCIgKm5nSWY9XCJjb2x1bW4/LmNvbmZpZz8uY3JlYXRlQnRuRW5hYmxlZCAmJiAhY29sdW1uPy5jb25maWc/LmFkZE9yZ0VuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0biBtYXJnaW4tbGVmdC1hdXRvXCIgW25nQ2xhc3NdPVwieydidXR0b24tZW5hYmxlZCc6IGNvbmZpZ0NvZGVCdG49PSBjb2x1bW4/LmNvZGUsICdidXR0b24tZGlzYWJsZWQnOiBjb25maWdDb2RlQnRuIT09IGNvbHVtbj8uY29kZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DcmVhdGVUZXJtRGlhbG9nKGNvbHVtbiwgaSlcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5hZGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5hZGRPcmdFbmFibGVkICYmICFjb2x1bW4/LmNvbmZpZz8uY3JlYXRlQnRuRW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJhZGQtYnRuIG1hcmdpbi1sZWZ0LWF1dG9cIiAoY2xpY2spPVwib3Blbk9yZ2FuaXphdGlvbkRpYWxvZyhjb2x1bW4sIGksICdhZGQnKVwiIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydidXR0b24tZW5hYmxlZCc6IGlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKSwgJ2J1dHRvbi1kaXNhYmxlZCc6ICFpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5hZGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93XCIgaWQ9XCJib3h7e2krMX19Y291bnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgUHV0IHNlYXJjaCBidXR0b24gaGVyZSBpbiBmdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGluZy14MiBjYXQtY29sdW1ucyBjb250YWluZXItYm94XCIgaWQ9XCJib3h7e2krMX19XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY2hpbGRyZW4gJiYgY29sdW1uPy5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItdHJlZS1jb2x1bW4tdmlldyAqbmdJZj1cImxvYWRlZFtjb2x1bW4uY29kZV1cIiAjc2VsZWN0ZWRUYXhvbm9teVRlcm0gW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVySWRdPVwiJ2JveCcrKGkrMSlcIiAodXBkYXRlVGF4b25vbXlUZXJtKT1cInVwZGF0ZVRheG9ub215VGVybSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHVwZGF0ZVRlcm1MaXN0KT1cInVwZGF0ZURyYWZ0U3RhdHVzVGVybXMoJGV2ZW50KVwiIChjYXJkc0NvdW50KT1cImdldE5vT2ZDYXJkcygkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgICAgIChyZXRpcmVUZXJtRGF0YSk9XCJyZW1vdmVDb25uZWN0aW9uKCRldmVudClcIiAoY2FyZEFjdGlvbik9XCJjYXJkQWN0aW9uRW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9saWItdHJlZS1jb2x1bW4tdmlldz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd1N2Z0JvcmRlcldyYXBwZXIoY29sdW1uLCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ZnLWJvcmRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzFCMjEzMzUyXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9XCIyMCwgMTBcIiByeD1cIjEwXCIgcnk9XCIxMFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQgZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmcmFjLW5vLWNvbm5lY3Rpb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgYW4gb3JnYW5pemF0aW9uIHRvIGFkZCBvciBzZWUgZnVydGhlciBjb25uZWN0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbiwgaSwgJ2FkZCcpXCIgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnV0dG9uLWVuYWJsZWQnOiBpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSksICdidXR0b24tZGlzYWJsZWQnOiAhaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwX3N0cmluZ3MuYWRkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bGliLWFjdGlvbi1iYXIgKm5nSWY9XCJzaG93QWN0aW9uQmFyXCIgW2FjdGlvblR5cGVdPVwiaXNBcHByb3ZhbFZpZXdcIiBbY29uZmlnVHlwZV09XCJ3b3JrRmxvd1N0YXR1c1wiXG4gICAgICAgIChzZW5kQXBwcm92YWwpPVwic2VuZEZvckFwcHJvdmFsKClcIiAoY2xvc2VBY3Rpb24pPVwiY2xvc2VBY3Rpb25CYXIoJGV2ZW50KVwiPjwvbGliLWFjdGlvbi1iYXI+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwICkgJiYgaXNGcmF3b3JrTG9hZGluZ1wiIGNsYXNzPVwiZmxleCBoZWlnaHRGaXggXCI+XG4gICAgPGgxIGkxOG4+e3thcHBfc3RyaW5ncy5sb2FkaW5nfX08L2gxPlxuPC9kaXY+Il19