ngx-histaff-alpha 0.4.0 → 0.4.2

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.
@@ -58,7 +58,7 @@ export class CoreButtonGroupVnsComponent extends BaseComponent {
58
58
  this.currentFunctionAssigmentDone = true;
59
59
  if (!!this.forHeader) {
60
60
  if (!!this.isRootUser || !!this.isAdminUser) {
61
- this.buttons = CORE_VNS_BUTTONS.filter(x => !!!x.hidden).filter(button => {
61
+ this.buttons = CORE_VNS_BUTTONS.filter(x => !x.hidden).filter(button => {
62
62
  if (!!this.function) {
63
63
  return this.function.actionCodes.indexOf(button.code) >= 0 && button.isHeader;
64
64
  }
@@ -150,7 +150,7 @@ export class CoreButtonGroupVnsComponent extends BaseComponent {
150
150
  this.coreButtonGroupService.instances = newInstances;
151
151
  }
152
152
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreButtonGroupVnsComponent, deps: [{ token: i1.MultiLanguageService }, { token: i2.Router }, { token: i3.AuthService }, { token: i4.RoutingService }, { token: i5.AlertService }, { token: i6.CoreButtonGroupService }], target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreButtonGroupVnsComponent, isStandalone: true, selector: "core-button-group-vns", inputs: { height: "height", instanceNumber: "instanceNumber", forHeader: "forHeader", shownItems: "shownItems", showCaption: "showCaption" }, outputs: { buttonClick: "buttonClick" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-button-group-vns-container\" [ngStyle]=\"{ height: height + 'px' }\">\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"setting-trigger d-flex d-flex-center\"\r\n *ngIf=\"!!isRootUser && !!forHeader\" (click)=\"onMapperClick()\"\r\n [appTooltip]=\"'UI_BUTTON_GROUP_SETTING_ADD_REMOVE_ACTION_ITEM_FOR_THIS_SCREEN' | translate : lang\"\r\n position=\"left\">\r\n <i class=\"feather-settings\"></i>\r\n </div>\r\n\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"separator\" *ngIf=\"!!isRootUser && !!forHeader\"></div>\r\n\r\n <ng-container *ngFor=\"let button of buttons\">\r\n <ng-container *ngIf=\"!button.hidden\">\r\n <core-button-vns [showCaption]=\"showCaption\" [data]=\"button\" [instanceNumber]=\"instanceNumber\"\r\n (buttonClick)=\"onButtonClick($event)\"></core-button-vns>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <span *ngIf=\"!!isRootUser && !!forHeader && !!!buttons.length\">{{ currentFunctionAssigmentDone ?\r\n ('UI_BUTTON_GROUP_NO_ITEM_AVAILABLE_YET' | translate : lang) : '' }}</span>\r\n</div>", styles: [".core-button-group-vns-container{height:30px;line-height:30px;box-sizing:border-box;margin:5px;display:flex;position:relative}@keyframes slideIn{0%{transform:translate(50px)}to{transform:translate(0)}}.core-button-group-vns-container>*{display:inline-block;height:30px;line-height:30px}.core-button-group-vns-container .setting-trigger{color:#464646;margin-top:3px;background-color:#fff;cursor:pointer;height:28px;width:28px;font-size:15px;border-radius:50px;transition:0s!important;display:flex;align-items:center;justify-content:center}.core-button-group-vns-container .setting-trigger:hover{background-color:#e7e7e7}.core-button-group-vns-container .setting-trigger i{color:#464646}.core-button-group-vns-container .separator{width:1px;height:30px;background-color:#d9d9d9;margin:0 10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CoreButtonVnsComponent, selector: "core-button-vns", inputs: ["height", "data", "instanceNumber", "disabled", "showCaption"], outputs: ["buttonClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
153
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreButtonGroupVnsComponent, isStandalone: true, selector: "core-button-group-vns", inputs: { height: "height", instanceNumber: "instanceNumber", forHeader: "forHeader", shownItems: "shownItems", showCaption: "showCaption" }, outputs: { buttonClick: "buttonClick" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-button-group-vns-container\" [ngStyle]=\"{ height: height + 'px' }\">\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"setting-trigger d-flex d-flex-center\"\r\n *ngIf=\"!!isRootUser && !!forHeader\" (click)=\"onMapperClick()\"\r\n [appTooltip]=\"'UI_BUTTON_GROUP_SETTING_ADD_REMOVE_ACTION_ITEM_FOR_THIS_SCREEN' | translate : lang\"\r\n position=\"left\">\r\n <i class=\"feather-settings\"></i>\r\n </div>\r\n\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"separator\" *ngIf=\"!!isRootUser && !!forHeader\"></div>\r\n\r\n <ng-container *ngFor=\"let button of buttons\">\r\n <ng-container *ngIf=\"!button.hidden\">\r\n <core-button-vns [showCaption]=\"showCaption\" [data]=\"button\" [instanceNumber]=\"instanceNumber\"\r\n (buttonClick)=\"onButtonClick($event)\"></core-button-vns>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <span *ngIf=\"!!isRootUser && !!forHeader && !!!buttons.length\">{{ currentFunctionAssigmentDone ?\r\n ('UI_BUTTON_GROUP_NO_ITEM_AVAILABLE_YET' | translate : lang) : '' }}</span>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CoreButtonVnsComponent, selector: "core-button-vns", inputs: ["height", "data", "instanceNumber", "disabled", "showCaption"], outputs: ["buttonClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
154
154
  }
155
155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreButtonGroupVnsComponent, decorators: [{
156
156
  type: Component,
@@ -160,7 +160,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
160
160
  MapAvatarToServerPipe,
161
161
  TranslatePipe,
162
162
  TooltipDirective
163
- ], template: "<div class=\"core-button-group-vns-container\" [ngStyle]=\"{ height: height + 'px' }\">\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"setting-trigger d-flex d-flex-center\"\r\n *ngIf=\"!!isRootUser && !!forHeader\" (click)=\"onMapperClick()\"\r\n [appTooltip]=\"'UI_BUTTON_GROUP_SETTING_ADD_REMOVE_ACTION_ITEM_FOR_THIS_SCREEN' | translate : lang\"\r\n position=\"left\">\r\n <i class=\"feather-settings\"></i>\r\n </div>\r\n\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"separator\" *ngIf=\"!!isRootUser && !!forHeader\"></div>\r\n\r\n <ng-container *ngFor=\"let button of buttons\">\r\n <ng-container *ngIf=\"!button.hidden\">\r\n <core-button-vns [showCaption]=\"showCaption\" [data]=\"button\" [instanceNumber]=\"instanceNumber\"\r\n (buttonClick)=\"onButtonClick($event)\"></core-button-vns>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <span *ngIf=\"!!isRootUser && !!forHeader && !!!buttons.length\">{{ currentFunctionAssigmentDone ?\r\n ('UI_BUTTON_GROUP_NO_ITEM_AVAILABLE_YET' | translate : lang) : '' }}</span>\r\n</div>", styles: [".core-button-group-vns-container{height:30px;line-height:30px;box-sizing:border-box;margin:5px;display:flex;position:relative}@keyframes slideIn{0%{transform:translate(50px)}to{transform:translate(0)}}.core-button-group-vns-container>*{display:inline-block;height:30px;line-height:30px}.core-button-group-vns-container .setting-trigger{color:#464646;margin-top:3px;background-color:#fff;cursor:pointer;height:28px;width:28px;font-size:15px;border-radius:50px;transition:0s!important;display:flex;align-items:center;justify-content:center}.core-button-group-vns-container .setting-trigger:hover{background-color:#e7e7e7}.core-button-group-vns-container .setting-trigger i{color:#464646}.core-button-group-vns-container .separator{width:1px;height:30px;background-color:#d9d9d9;margin:0 10px}\n"] }]
163
+ ], template: "<div class=\"core-button-group-vns-container\" [ngStyle]=\"{ height: height + 'px' }\">\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"setting-trigger d-flex d-flex-center\"\r\n *ngIf=\"!!isRootUser && !!forHeader\" (click)=\"onMapperClick()\"\r\n [appTooltip]=\"'UI_BUTTON_GROUP_SETTING_ADD_REMOVE_ACTION_ITEM_FOR_THIS_SCREEN' | translate : lang\"\r\n position=\"left\">\r\n <i class=\"feather-settings\"></i>\r\n </div>\r\n\r\n <div [ngStyle]=\"{ height: height + 'px' }\" class=\"separator\" *ngIf=\"!!isRootUser && !!forHeader\"></div>\r\n\r\n <ng-container *ngFor=\"let button of buttons\">\r\n <ng-container *ngIf=\"!button.hidden\">\r\n <core-button-vns [showCaption]=\"showCaption\" [data]=\"button\" [instanceNumber]=\"instanceNumber\"\r\n (buttonClick)=\"onButtonClick($event)\"></core-button-vns>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <span *ngIf=\"!!isRootUser && !!forHeader && !!!buttons.length\">{{ currentFunctionAssigmentDone ?\r\n ('UI_BUTTON_GROUP_NO_ITEM_AVAILABLE_YET' | translate : lang) : '' }}</span>\r\n</div>" }]
164
164
  }], ctorParameters: () => [{ type: i1.MultiLanguageService }, { type: i2.Router }, { type: i3.AuthService }, { type: i4.RoutingService }, { type: i5.AlertService }, { type: i6.CoreButtonGroupService }], propDecorators: { height: [{
165
165
  type: Input
166
166
  }], instanceNumber: [{
@@ -174,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
174
174
  }], buttonClick: [{
175
175
  type: Output
176
176
  }] } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF5QixNQUFNLEVBQXVDLE1BQU0sZUFBZSxDQUFDO0FBR25JLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxn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MUJES0YsWUFBWSxxVkFDWixzQkFBc0IsMEpBRXRCLGFBQWEsa0RBQ2IsZ0JBQWdCOzsyRkFLUCwyQkFBMkI7a0JBYnZDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHNCQUFzQjt3QkFDdEIscUJBQXFCO3dCQUNyQixhQUFhO3dCQUNiLGdCQUFnQjtxQkFDakI7cU9BTVEsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4vRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Jhc2UtY29tcG9uZW50L2Jhc2UvYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwU2VydmljZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IElGdW5jdGlvbldpdGhGdWxsQWN0aW9ucywgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXBBdmF0YXJUb1NlcnZlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvbWFwLWF2YXRhci10by1zZXJ2ZXIucGlwZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlQnV0dG9uVm5zQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1idXR0b24tdm5zL2NvcmUtYnV0dG9uLXZucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENPUkVfVk5TX0JVVFRPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvQ09SRV9WTlNfQlVUVE9OUyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtYnV0dG9uLWdyb3VwLXZucycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBDb3JlQnV0dG9uVm5zQ29tcG9uZW50LFxyXG4gICAgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlLFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICAgIFRvb2x0aXBEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtYnV0dG9uLWdyb3VwLXZucy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlQnV0dG9uR3JvdXBWbnNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGhlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBpbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuICBASW5wdXQoKSBmb3JIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3duSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBzaG93Q2FwdGlvbiE6IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuICBidXR0b25zOiBJQ29yZUJ1dHRvblZOU1tdID0gW107XHJcblxyXG4gIGlzUm9vdFVzZXIhOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIGlzQWRtaW5Vc2VyITogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICBmdW5jdGlvbiE6IElGdW5jdGlvbldpdGhGdWxsQWN0aW9ucyB8IHVuZGVmaW5lZDtcclxuICBjdXJyZW50RnVuY3Rpb25Bc3NpZ21lbnREb25lITogYm9vbGVhbjtcclxuXHJcblxyXG4gIC8qIELhu5kgYmEgY8OhYyBuw7p0IGTGsOG7m2kgxJHDonkgY+G6p24g4bqpbi9oaeG7h24gdGhlbyB0w6xuaCBodeG7kW5nICovXHJcbiAgaGVhZGVyRWRpdCE6IElDb3JlQnV0dG9uVk5TW107XHJcbiAgaGVhZGVyU2F2ZSE6IElDb3JlQnV0dG9uVk5TW107XHJcbiAgaGVhZGVyQ2FuY2VsITogSUNvcmVCdXR0b25WTlNbXTtcclxuICAvKioqICovXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIG92ZXJyaWRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRpbmdTZXJ2aWNlOiBSb3V0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVCdXR0b25Hcm91cFNlcnZpY2U6IENvcmVCdXR0b25Hcm91cFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKG1scyk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmNvcmVCdXR0b25Hcm91cFNlcnZpY2UuaW5zdGFuY2VzLnB1c2goe1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5pbnN0YW5jZU51bWJlcixcclxuICAgICAgbXVzdEJlSGlkZGVuJDogbmV3IEJlaGF2aW9yU3ViamVjdDxFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXT4oW10pXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLmlzUm9vdFVzZXIgPSB4Py5pc1Jvb3Q7XHJcbiAgICAgICAgdGhpcy5pc0FkbWluVXNlciA9IHg/LmlzQWRtaW47XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhlOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCFlWydoZWlnaHQnXT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIC8vIGZhbGxiYWNrXHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gMzA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICghIWVbJ3Nob3duSXRlbXMnXT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9ucyA9IENPUkVfVk5TX0JVVFRPTlMuZmlsdGVyKHggPT4gdGhpcy5zaG93bkl0ZW1zLmluY2x1ZGVzKHguY29kZSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yb3V0aW5nU2VydmljZS5jdXJyZW50RnVuY3Rpb24kLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMuZnVuY3Rpb24gPSB4O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RnVuY3Rpb25Bc3NpZ21lbnREb25lID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghIXRoaXMuZm9ySGVhZGVyKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuaXNSb290VXNlciB8fCAhIXRoaXMuaXNBZG1pblVzZXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMgPSBDT1JFX1ZOU19CVVRUT05TLmZpbHRlcih4ID0+ICEhIXguaGlkZGVuKS5maWx0ZXIoYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghIXRoaXMuZnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnVuY3Rpb24hLmFjdGlvbkNvZGVzIS5pbmRleE9mKGJ1dHRvbi5jb2RlKSA+PSAwICYmIGJ1dHRvbi5pc0hlYWRlclxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25GaWx0ZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlIS5wZXJtaXNzaW9uQWN0aW9ucy5maWx0ZXIocGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhLmZ1bmN0aW9uSWQgPT09IHRoaXMuZnVuY3Rpb24/LmlkXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBhbGxvd2VkQWN0aW9uQ29kZXMgfSA9IGZ1bmN0aW9uRmlsdGVyWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25zID0gQ09SRV9WTlNfQlVUVE9OUy5maWx0ZXIoeCA9PiAhISF4LmhpZGRlbikuZmlsdGVyKGJ1dHRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvd2VkQWN0aW9uQ29kZXMhLmluZGV4T2YoYnV0dG9uLmNvZGUpID49IDAgJiYgYnV0dG9uLmlzSGVhZGVyXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFRvIGJlIGltcHJvdmVkXHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLnNob3duSXRlbXMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMgPSBDT1JFX1ZOU19CVVRUT05TLmZpbHRlcih4ID0+ICEhIXguaXNIZWFkZXIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5idXR0b25zID0gQ09SRV9WTlNfQlVUVE9OUy5maWx0ZXIoeCA9PiB0aGlzLnNob3duSXRlbXMuaW5jbHVkZXMoeC5jb2RlKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuY29yZUJ1dHRvbkdyb3VwU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5pbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghIWZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIGZpbHRlclswXS5tdXN0QmVIaWRkZW4kLnN1YnNjcmliZShtYmggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnMubWFwKGIgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChtYmguaW5jbHVkZXMoYi5jb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgYi5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBiLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2FybihcIktow7RuZyB0w6xtIHRo4bqleSBpbnN0YW5jZSBudW1iZXIgY+G7p2EgbmjDs20gbsO6dFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICovXHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHN3YXBUcmlvRWRpdFNhdmVDYW5jZWwoZWRpdEFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJFZGl0ID0gdGhpcy5idXR0b25zLmZpbHRlcih4ID0+IHguY29kZSA9PT0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElUKTtcclxuICAgIHRoaXMuaGVhZGVyU2F2ZSA9IHRoaXMuYnV0dG9ucy5maWx0ZXIoeCA9PiB4LmNvZGUgPT09IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRSk7XHJcbiAgICB0aGlzLmhlYWRlckNhbmNlbCA9IHRoaXMuYnV0dG9ucy5maWx0ZXIoeCA9PiB4LmNvZGUgPT09IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ0FOQ0VMKTtcclxuICAgIGlmIChlZGl0QWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyRWRpdFswXS5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLmhlYWRlclNhdmVbMF0uaGlkZGVuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGVhZGVyQ2FuY2VsWzBdLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oZWFkZXJFZGl0WzBdLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhlYWRlclNhdmVbMF0uaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5oZWFkZXJDYW5jZWxbMF0uaGlkZGVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQ2xpY2soZTogSUNvcmVCdXR0b25WTlMpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiYnV0dG9uLWdyb3VwIG9uQnV0dG9uQ2xpY2tcIiwgZSlcclxuICAgIHRoaXMuYnV0dG9uQ2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uTWFwcGVyQ2xpY2soKTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLmZ1bmN0aW9uKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICcvcm9vdCcsXHJcbiAgICAgICAgICAnYWN0aW9uLW1hcHBlcicsXHJcbiAgICAgICAgXVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyh0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5LlJPT1RfTUFQUEVSX1VQREFURV9GVU5DVElPTl9JRF9GT1JfVEhFX01FTlVfSVRFTSksIGFsZXJ0T3B0aW9ucylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgY29uc3QgbmV3SW5zdGFuY2VzID0gdGhpcy5jb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoeCA9PiB4Lmluc3RhbmNlTnVtYmVyICE9PSB0aGlzLmluc3RhbmNlTnVtYmVyKTtcclxuICAgIHRoaXMuY29yZUJ1dHRvbkdyb3VwU2VydmljZS5pbnN0YW5jZXMgPSBuZXdJbnN0YW5jZXM7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29yZS1idXR0b24tZ3JvdXAtdm5zLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgKyAncHgnIH1cIj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCArICdweCcgfVwiIGNsYXNzPVwic2V0dGluZy10cmlnZ2VyIGQtZmxleCBkLWZsZXgtY2VudGVyXCJcclxuICAgICAgICAqbmdJZj1cIiEhaXNSb290VXNlciAmJiAhIWZvckhlYWRlclwiIChjbGljayk9XCJvbk1hcHBlckNsaWNrKClcIlxyXG4gICAgICAgIFthcHBUb29sdGlwXT1cIidVSV9CVVRUT05fR1JPVVBfU0VUVElOR19BRERfUkVNT1ZFX0FDVElPTl9JVEVNX0ZPUl9USElTX1NDUkVFTicgfCB0cmFuc2xhdGUgOiBsYW5nXCJcclxuICAgICAgICBwb3NpdGlvbj1cImxlZnRcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItc2V0dGluZ3NcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgKyAncHgnIH1cIiBjbGFzcz1cInNlcGFyYXRvclwiICpuZ0lmPVwiISFpc1Jvb3RVc2VyICYmICEhZm9ySGVhZGVyXCI+PC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJ1dHRvbi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgPGNvcmUtYnV0dG9uLXZucyBbc2hvd0NhcHRpb25dPVwic2hvd0NhcHRpb25cIiBbZGF0YV09XCJidXR0b25cIiBbaW5zdGFuY2VOdW1iZXJdPVwiaW5zdGFuY2VOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1idXR0b24tdm5zPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHNwYW4gKm5nSWY9XCIhIWlzUm9vdFVzZXIgJiYgISFmb3JIZWFkZXIgJiYgISEhYnV0dG9ucy5sZW5ndGhcIj57eyBjdXJyZW50RnVuY3Rpb25Bc3NpZ21lbnREb25lID9cclxuICAgICAgICAoJ1VJX0JVVFRPTl9HUk9VUF9OT19JVEVNX0FWQUlMQUJMRV9ZRVQnIHwgdHJhbnNsYXRlIDogbGFuZykgOiAnJyB9fTwvc3Bhbj5cclxuPC9kaXY+Il19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF5QixNQUFNLEVBQXVDLE1BQU0sZUFBZSxDQUFDO0FBR25JLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7QUFldkUsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGFBQWE7SUFxQjVELE9BQU87SUFFUCxZQUNrQixHQUF5QixFQUNqQyxNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsc0JBQThDO1FBRXRELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQVBLLFFBQUcsR0FBSCxHQUFHLENBQXNCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQXRCOUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUUzRCxZQUFPLEdBQXFCLEVBQUUsQ0FBQztJQXVCL0IsQ0FBQztJQUVRLFFBQVE7UUFFZixJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN6QyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsYUFBYSxFQUFFLElBQUksZUFBZSxDQUEwQixFQUFFLENBQUM7U0FDaEUsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7WUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUNILENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FDN0MsQ0FBQTtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBZ0I7UUFFMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUU7WUFDOUIsV0FBVztZQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFBRTtZQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1NBQzlFO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztnQkFFekMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTt3QkFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7NEJBQ3JFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVMsQ0FBQyxXQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQTs2QkFDaEY7aUNBQU07Z0NBQ0wsT0FBTyxLQUFLLENBQUM7NkJBQ2Q7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7eUJBQU07d0JBQ0wsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTs0QkFDakYsT0FBTyxFQUFFLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFBO3dCQUM1QyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUU7NEJBQ3pCLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dDQUN2RSxPQUFPLGtCQUFtQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUE7NEJBQ3pFLENBQUMsQ0FBQyxDQUFBO3lCQUNIOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO3lCQUNuQjtxQkFDRjtpQkFDRjtxQkFBTTtvQkFDTCxpQkFBaUI7b0JBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7cUJBQzNEO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7cUJBQzlFO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtZQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBbUJFO1FBRUosQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsc0JBQXNCLENBQUMsVUFBbUI7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0YsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNyQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQWlCO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNsQjtnQkFDRSxPQUFPO2dCQUNQLGVBQWU7YUFDaEIsQ0FDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGdEQUFnRCxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUE7U0FDeEg7SUFDSCxDQUFDO0lBRVEsV0FBVztRQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakgsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFDdkQsQ0FBQzs4R0F0S1UsMkJBQTJCO2tHQUEzQiwyQkFBMkIsb1RDakN4Qyw2bkNBbUJNLHlEREtGLFlBQVkscVZBQ1osc0JBQXNCLDBKQUV0QixhQUFhLGtEQUNiLGdCQUFnQjs7MkZBS1AsMkJBQTJCO2tCQWJ2QyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsYUFBYTt3QkFDYixnQkFBZ0I7cUJBQ2pCO3FPQU1RLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvblZOUyB9IGZyb20gJy4vSUNvcmVCdXR0b25WTlMnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYXNlLWNvbXBvbmVudC9iYXNlL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBJRnVuY3Rpb25XaXRoRnVsbEFjdGlvbnMsIFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcm91dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL21hcC1hdmF0YXItdG8tc2VydmVyLnBpcGUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL3RyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvblZuc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLXZucy9jb3JlLWJ1dHRvbi12bnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDT1JFX1ZOU19CVVRUT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL0NPUkVfVk5TX0JVVFRPTlMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWJ1dHRvbi1ncm91cC12bnMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgQ29yZUJ1dHRvblZuc0NvbXBvbmVudCxcclxuICAgIE1hcEF2YXRhclRvU2VydmVyUGlwZSxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBoZWlnaHQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZm9ySGVhZGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93bkl0ZW1zITogRW51bUNvcmVCdXR0b25WTlNDb2RlW107XHJcbiAgQElucHV0KCkgc2hvd0NhcHRpb24hOiBib29sZWFuO1xyXG4gIEBPdXRwdXQoKSBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvcmVCdXR0b25WTlM+KCk7XHJcbiAgXHJcbiAgYnV0dG9uczogSUNvcmVCdXR0b25WTlNbXSA9IFtdO1xyXG5cclxuICBpc1Jvb3RVc2VyITogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICBpc0FkbWluVXNlciE6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgZnVuY3Rpb24hOiBJRnVuY3Rpb25XaXRoRnVsbEFjdGlvbnMgfCB1bmRlZmluZWQ7XHJcbiAgY3VycmVudEZ1bmN0aW9uQXNzaWdtZW50RG9uZSE6IGJvb2xlYW47XHJcblxyXG5cclxuICAvKiBC4buZIGJhIGPDoWMgbsO6dCBkxrDhu5tpIMSRw6J5IGPhuqduIOG6qW4vaGnhu4duIHRoZW8gdMOsbmggaHXhu5FuZyAqL1xyXG4gIGhlYWRlckVkaXQhOiBJQ29yZUJ1dHRvblZOU1tdO1xyXG4gIGhlYWRlclNhdmUhOiBJQ29yZUJ1dHRvblZOU1tdO1xyXG4gIGhlYWRlckNhbmNlbCE6IElDb3JlQnV0dG9uVk5TW107XHJcbiAgLyoqKiAqL1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBvdmVycmlkZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQnV0dG9uR3JvdXBTZXJ2aWNlOiBDb3JlQnV0dG9uR3JvdXBTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihtbHMpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5jb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLmluc3RhbmNlcy5wdXNoKHtcclxuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuaW5zdGFuY2VOdW1iZXIsXHJcbiAgICAgIG11c3RCZUhpZGRlbiQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8RW51bUNvcmVCdXR0b25WTlNDb2RlW10+KFtdKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5kYXRhJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1Jvb3RVc2VyID0geD8uaXNSb290O1xyXG4gICAgICAgIHRoaXMuaXNBZG1pblVzZXIgPSB4Py5pc0FkbWluO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoZTogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmICghZVsnaGVpZ2h0J10/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAvLyBmYWxsYmFja1xyXG4gICAgICB0aGlzLmhlaWdodCA9IDMwO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoISFlWydzaG93bkl0ZW1zJ10/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmJ1dHRvbnMgPSBDT1JFX1ZOU19CVVRUT05TLmZpbHRlcih4ID0+IHRoaXMuc2hvd25JdGVtcy5pbmNsdWRlcyh4LmNvZGUpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZ1bmN0aW9uID0geDtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEZ1bmN0aW9uQXNzaWdtZW50RG9uZSA9IHRydWU7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICghIXRoaXMuZm9ySGVhZGVyKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuaXNSb290VXNlciB8fCAhIXRoaXMuaXNBZG1pblVzZXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMgPSBDT1JFX1ZOU19CVVRUT05TLmZpbHRlcih4ID0+ICF4LmhpZGRlbikuZmlsdGVyKGJ1dHRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLmZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uIS5hY3Rpb25Db2RlcyEuaW5kZXhPZihidXR0b24uY29kZSkgPj0gMCAmJiBidXR0b24uaXNIZWFkZXJcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uRmlsdGVyID0gdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZSEucGVybWlzc2lvbkFjdGlvbnMuZmlsdGVyKHBhID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYS5mdW5jdGlvbklkID09PSB0aGlzLmZ1bmN0aW9uPy5pZFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmIChmdW5jdGlvbkZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWxsb3dlZEFjdGlvbkNvZGVzIH0gPSBmdW5jdGlvbkZpbHRlclswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucyA9IENPUkVfVk5TX0JVVFRPTlMuZmlsdGVyKHggPT4gISEheC5oaWRkZW4pLmZpbHRlcihidXR0b24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb3dlZEFjdGlvbkNvZGVzIS5pbmRleE9mKGJ1dHRvbi5jb2RlKSA+PSAwICYmIGJ1dHRvbi5pc0hlYWRlclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25zID0gW107XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBUbyBiZSBpbXByb3ZlZFxyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5zaG93bkl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5idXR0b25zID0gQ09SRV9WTlNfQlVUVE9OUy5maWx0ZXIoeCA9PiAhISF4LmlzSGVhZGVyKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYnV0dG9ucyA9IENPUkVfVk5TX0JVVFRPTlMuZmlsdGVyKHggPT4gdGhpcy5zaG93bkl0ZW1zLmluY2x1ZGVzKHguY29kZSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICAvKlxyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmNvcmVCdXR0b25Hcm91cFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuaW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICBmaWx0ZXJbMF0ubXVzdEJlSGlkZGVuJC5zdWJzY3JpYmUobWJoID0+IHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zLm1hcChiID0+IHtcclxuICAgICAgICAgICAgICBpZiAobWJoLmluY2x1ZGVzKGIuY29kZSkpIHtcclxuICAgICAgICAgICAgICAgIGIuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYi5oaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJLaMO0bmcgdMOsbSB0aOG6pXkgaW5zdGFuY2UgbnVtYmVyIGPhu6dhIG5ow7NtIG7DunRcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAqL1xyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzd2FwVHJpb0VkaXRTYXZlQ2FuY2VsKGVkaXRBY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaGVhZGVyRWRpdCA9IHRoaXMuYnV0dG9ucy5maWx0ZXIoeCA9PiB4LmNvZGUgPT09IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCk7XHJcbiAgICB0aGlzLmhlYWRlclNhdmUgPSB0aGlzLmJ1dHRvbnMuZmlsdGVyKHggPT4geC5jb2RlID09PSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUpO1xyXG4gICAgdGhpcy5oZWFkZXJDYW5jZWwgPSB0aGlzLmJ1dHRvbnMuZmlsdGVyKHggPT4geC5jb2RlID09PSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTCk7XHJcbiAgICBpZiAoZWRpdEFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmhlYWRlckVkaXRbMF0uaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5oZWFkZXJTYXZlWzBdLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhlYWRlckNhbmNlbFswXS5oaWRkZW4gPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyRWRpdFswXS5oaWRkZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5oZWFkZXJTYXZlWzBdLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuaGVhZGVyQ2FuY2VsWzBdLmhpZGRlbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJ1dHRvbkNsaWNrKGU6IElDb3JlQnV0dG9uVk5TKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcImJ1dHRvbi1ncm91cCBvbkJ1dHRvbkNsaWNrXCIsIGUpXHJcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvbk1hcHBlckNsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5mdW5jdGlvbikge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICBbXHJcbiAgICAgICAgICAnL3Jvb3QnLFxyXG4gICAgICAgICAgJ2FjdGlvbi1tYXBwZXInLFxyXG4gICAgICAgIF1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5ST09UX01BUFBFUl9VUERBVEVfRlVOQ1RJT05fSURfRk9SX1RIRV9NRU5VX0lURU0pLCBhbGVydE9wdGlvbnMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoeCA9PiB4Py51bnN1YnNjcmliZSgpKTtcclxuICAgIGNvbnN0IG5ld0luc3RhbmNlcyA9IHRoaXMuY29yZUJ1dHRvbkdyb3VwU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciAhPT0gdGhpcy5pbnN0YW5jZU51bWJlcik7XHJcbiAgICB0aGlzLmNvcmVCdXR0b25Hcm91cFNlcnZpY2UuaW5zdGFuY2VzID0gbmV3SW5zdGFuY2VzO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvcmUtYnV0dG9uLWdyb3VwLXZucy1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGhlaWdodDogaGVpZ2h0ICsgJ3B4JyB9XCI+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgKyAncHgnIH1cIiBjbGFzcz1cInNldHRpbmctdHJpZ2dlciBkLWZsZXggZC1mbGV4LWNlbnRlclwiXHJcbiAgICAgICAgKm5nSWY9XCIhIWlzUm9vdFVzZXIgJiYgISFmb3JIZWFkZXJcIiAoY2xpY2spPVwib25NYXBwZXJDbGljaygpXCJcclxuICAgICAgICBbYXBwVG9vbHRpcF09XCInVUlfQlVUVE9OX0dST1VQX1NFVFRJTkdfQUREX1JFTU9WRV9BQ1RJT05fSVRFTV9GT1JfVEhJU19TQ1JFRU4nIHwgdHJhbnNsYXRlIDogbGFuZ1wiXHJcbiAgICAgICAgcG9zaXRpb249XCJsZWZ0XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXNldHRpbmdzXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBbbmdTdHlsZV09XCJ7IGhlaWdodDogaGVpZ2h0ICsgJ3B4JyB9XCIgY2xhc3M9XCJzZXBhcmF0b3JcIiAqbmdJZj1cIiEhaXNSb290VXNlciAmJiAhIWZvckhlYWRlclwiPjwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFidXR0b24uaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi12bnMgW3Nob3dDYXB0aW9uXT1cInNob3dDYXB0aW9uXCIgW2RhdGFdPVwiYnV0dG9uXCIgW2luc3RhbmNlTnVtYmVyXT1cImluc3RhbmNlTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIChidXR0b25DbGljayk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIj48L2NvcmUtYnV0dG9uLXZucz5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxzcGFuICpuZ0lmPVwiISFpc1Jvb3RVc2VyICYmICEhZm9ySGVhZGVyICYmICEhIWJ1dHRvbnMubGVuZ3RoXCI+e3sgY3VycmVudEZ1bmN0aW9uQXNzaWdtZW50RG9uZSA/XHJcbiAgICAgICAgKCdVSV9CVVRUT05fR1JPVVBfTk9fSVRFTV9BVkFJTEFCTEVfWUVUJyB8IHRyYW5zbGF0ZSA6IGxhbmcpIDogJycgfX08L3NwYW4+XHJcbjwvZGl2PiJdfQ==
@@ -191,7 +191,7 @@ export class CoreFormComponent {
191
191
  this.buttonClick.emit(e);
192
192
  }
193
193
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormComponent, deps: [{ token: i1.CoreControlService }, { token: i2.MultiLanguageService }, { token: i3.AlertService }, { token: i4.CoreFormService }, { token: i5.AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
194
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreFormComponent, isStandalone: true, selector: "core-form", inputs: { formName: "formName", submitText: "submitText", leftInputSections: "leftInputSections", leftInputSectionsFlexSize: "leftInputSectionsFlexSize", inputSections: "inputSections", mode$: "mode$", bottomTemplateRef: "bottomTemplateRef", customFormButtonItems: "customFormButtonItems", showCaptionButton: "showCaptionButton", checkError$: "checkError$" }, outputs: { onFormCreated: "onFormCreated", onFormRefCreated: "onFormRefCreated", onSubmit: "onSubmit", onSave: "onSave", onCancal: "onCancal", buttonClick: "buttonClick" }, viewQueries: [{ propertyName: "formRef", first: true, predicate: ["formRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"core-form-container\" *ngIf=\"!!form\">\r\n\r\n <form #formRef (ngSubmit)=\"onFormSubmit()\" [formGroup]=\"form\" autocomplete=\"off\">\r\n\r\n <div class=\"row\">\r\n\r\n <div [class]=\"'col-md-' + (leftInputSectionsFlexSize || 0)\" *ngIf=\"!!leftInputSections\">\r\n\r\n <div *ngFor=\"let section of leftInputSections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div [class]=\"'col-md-' + (12 - (leftInputSectionsFlexSize || 0))\">\r\n\r\n <div *ngFor=\"let section of sections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <ng-container *ngIf=\"!!bottomTemplateRef\">\r\n <ng-container *ngTemplateOutlet=\"bottomTemplateRef\"></ng-container>\r\n </ng-container>\r\n\r\n\r\n <div class=\"h10\"></div>\r\n\r\n <div class=\"form-row\">\r\n\r\n <core-button-group-vns [showCaption]=\"showCaptionButton\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"buttonItems\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n <div class=\"form-row\" *ngIf=\"isDevMode\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updatePayload()\">Show\r\n values</button>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updateValidorOverview()\">Show\r\n validators</button>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"!!payLoad && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current values</strong><br>{{payLoad}}\r\n </div>\r\n <div *ngIf=\"!!validatorOverview && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current errors</strong><br>{{validatorOverview}}\r\n </div>\r\n\r\n</div>", styles: [".core-form-container>form .section .section-header-label{display:block;height:34px;line-height:34px;margin-bottom:15px;margin-left:12px}.core-form-container>form .section .section-header-label .section-img-wrapper{position:relative}.core-form-container>form .section .section-header-label .section-img-wrapper .section-img{position:absolute;width:34px;height:34px;border-radius:50%;background-color:#d3d3d3;float:left;background-image:url(/assets/images/info.svg);background-repeat:no-repeat;background-position:center}.core-form-container>form .section .section-header-label .section-caption{padding-left:40px;font-weight:700;color:#696969}.core-form-container .row{margin-left:var(--size-layout-block-cell-spacing) 0px;margin-right:var(--size-layout-block-cell-spacing) 0px}.core-form-container .row .grid-buffer{border:dotted 2px darkgray}.core-form-container .row .button-control{display:flex;align-items:flex-end}.core-form-container .form-row{margin:var(--size-layout-block-cell-spacing) 0px;display:flex;align-items:center;justify-content:center}.core-form-container .form-row>button{cursor:pointer}.core-form-container .form-row>button:not(:first-child){margin-left:var(--size-layout-block-cell-spacing)}.core-form-container .payload-preview{display:block;width:100%;height:200px;white-space:pre-wrap;overflow-x:hidden;overflow-y:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: CoreControlComponent, selector: "core-control", inputs: ["control", "form", "checkError$", "rangeLimit"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CoreButtonGroupVnsComponent, selector: "core-button-group-vns", inputs: ["height", "instanceNumber", "forHeader", "shownItems", "showCaption"], outputs: ["buttonClick"] }] }); }
194
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreFormComponent, isStandalone: true, selector: "core-form", inputs: { formName: "formName", submitText: "submitText", leftInputSections: "leftInputSections", leftInputSectionsFlexSize: "leftInputSectionsFlexSize", inputSections: "inputSections", mode$: "mode$", bottomTemplateRef: "bottomTemplateRef", customFormButtonItems: "customFormButtonItems", showCaptionButton: "showCaptionButton", checkError$: "checkError$" }, outputs: { onFormCreated: "onFormCreated", onFormRefCreated: "onFormRefCreated", onSubmit: "onSubmit", onSave: "onSave", onCancal: "onCancal", buttonClick: "buttonClick" }, viewQueries: [{ propertyName: "formRef", first: true, predicate: ["formRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"core-form-container\" *ngIf=\"!!form\">\r\n\r\n <form #formRef (ngSubmit)=\"onFormSubmit()\" [formGroup]=\"form\" autocomplete=\"off\">\r\n\r\n <div class=\"row\">\r\n\r\n <div [class]=\"'col-md-' + (leftInputSectionsFlexSize || 0)\" *ngIf=\"!!leftInputSections\">\r\n\r\n <div *ngFor=\"let section of leftInputSections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div [class]=\"'col-md-' + (12 - (leftInputSectionsFlexSize || 0))\">\r\n\r\n <div *ngFor=\"let section of sections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <ng-container *ngIf=\"!!bottomTemplateRef\">\r\n <ng-container *ngTemplateOutlet=\"bottomTemplateRef\"></ng-container>\r\n </ng-container>\r\n\r\n\r\n <div class=\"h10\"></div>\r\n\r\n <div class=\"form-row\">\r\n\r\n <core-button-group-vns [showCaption]=\"showCaptionButton\" [forHeader]=\"false\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"buttonItems\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n <div class=\"form-row\" *ngIf=\"isDevMode\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updatePayload()\">Show\r\n values</button>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updateValidorOverview()\">Show\r\n validators</button>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"!!payLoad && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current values</strong><br>{{payLoad}}\r\n </div>\r\n <div *ngIf=\"!!validatorOverview && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current errors</strong><br>{{validatorOverview}}\r\n </div>\r\n\r\n</div>", styles: [".core-form-container>form .section .section-header-label{display:block;height:34px;line-height:34px;margin-bottom:15px;margin-left:12px}.core-form-container>form .section .section-header-label .section-img-wrapper{position:relative}.core-form-container>form .section .section-header-label .section-img-wrapper .section-img{position:absolute;width:34px;height:34px;border-radius:50%;background-color:#d3d3d3;float:left;background-image:url(/assets/images/info.svg);background-repeat:no-repeat;background-position:center}.core-form-container>form .section .section-header-label .section-caption{padding-left:40px;font-weight:700;color:#696969}.core-form-container .row{margin-left:var(--size-layout-block-cell-spacing) 0px;margin-right:var(--size-layout-block-cell-spacing) 0px}.core-form-container .row .grid-buffer{border:dotted 2px darkgray}.core-form-container .row .button-control{display:flex;align-items:flex-end}.core-form-container .form-row{margin:var(--size-layout-block-cell-spacing) 0px;display:flex;align-items:center;justify-content:center}.core-form-container .form-row>button{cursor:pointer}.core-form-container .form-row>button:not(:first-child){margin-left:var(--size-layout-block-cell-spacing)}.core-form-container .payload-preview{display:block;width:100%;height:200px;white-space:pre-wrap;overflow-x:hidden;overflow-y:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: CoreControlComponent, selector: "core-control", inputs: ["control", "form", "checkError$", "rangeLimit"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CoreButtonGroupVnsComponent, selector: "core-button-group-vns", inputs: ["height", "instanceNumber", "forHeader", "shownItems", "showCaption"], outputs: ["buttonClick"] }] }); }
195
195
  }
196
196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormComponent, decorators: [{
197
197
  type: Component,
@@ -202,7 +202,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
202
202
  CoreControlComponent,
203
203
  TranslatePipe,
204
204
  CoreButtonGroupVnsComponent
205
- ], template: "<div class=\"core-form-container\" *ngIf=\"!!form\">\r\n\r\n <form #formRef (ngSubmit)=\"onFormSubmit()\" [formGroup]=\"form\" autocomplete=\"off\">\r\n\r\n <div class=\"row\">\r\n\r\n <div [class]=\"'col-md-' + (leftInputSectionsFlexSize || 0)\" *ngIf=\"!!leftInputSections\">\r\n\r\n <div *ngFor=\"let section of leftInputSections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div [class]=\"'col-md-' + (12 - (leftInputSectionsFlexSize || 0))\">\r\n\r\n <div *ngFor=\"let section of sections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <ng-container *ngIf=\"!!bottomTemplateRef\">\r\n <ng-container *ngTemplateOutlet=\"bottomTemplateRef\"></ng-container>\r\n </ng-container>\r\n\r\n\r\n <div class=\"h10\"></div>\r\n\r\n <div class=\"form-row\">\r\n\r\n <core-button-group-vns [showCaption]=\"showCaptionButton\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"buttonItems\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n <div class=\"form-row\" *ngIf=\"isDevMode\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updatePayload()\">Show\r\n values</button>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updateValidorOverview()\">Show\r\n validators</button>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"!!payLoad && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current values</strong><br>{{payLoad}}\r\n </div>\r\n <div *ngIf=\"!!validatorOverview && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current errors</strong><br>{{validatorOverview}}\r\n </div>\r\n\r\n</div>", styles: [".core-form-container>form .section .section-header-label{display:block;height:34px;line-height:34px;margin-bottom:15px;margin-left:12px}.core-form-container>form .section .section-header-label .section-img-wrapper{position:relative}.core-form-container>form .section .section-header-label .section-img-wrapper .section-img{position:absolute;width:34px;height:34px;border-radius:50%;background-color:#d3d3d3;float:left;background-image:url(/assets/images/info.svg);background-repeat:no-repeat;background-position:center}.core-form-container>form .section .section-header-label .section-caption{padding-left:40px;font-weight:700;color:#696969}.core-form-container .row{margin-left:var(--size-layout-block-cell-spacing) 0px;margin-right:var(--size-layout-block-cell-spacing) 0px}.core-form-container .row .grid-buffer{border:dotted 2px darkgray}.core-form-container .row .button-control{display:flex;align-items:flex-end}.core-form-container .form-row{margin:var(--size-layout-block-cell-spacing) 0px;display:flex;align-items:center;justify-content:center}.core-form-container .form-row>button{cursor:pointer}.core-form-container .form-row>button:not(:first-child){margin-left:var(--size-layout-block-cell-spacing)}.core-form-container .payload-preview{display:block;width:100%;height:200px;white-space:pre-wrap;overflow-x:hidden;overflow-y:auto}\n"] }]
205
+ ], template: "<div class=\"core-form-container\" *ngIf=\"!!form\">\r\n\r\n <form #formRef (ngSubmit)=\"onFormSubmit()\" [formGroup]=\"form\" autocomplete=\"off\">\r\n\r\n <div class=\"row\">\r\n\r\n <div [class]=\"'col-md-' + (leftInputSectionsFlexSize || 0)\" *ngIf=\"!!leftInputSections\">\r\n\r\n <div *ngFor=\"let section of leftInputSections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div [class]=\"'col-md-' + (12 - (leftInputSectionsFlexSize || 0))\">\r\n\r\n <div *ngFor=\"let section of sections\" class=\"section\"\r\n [class.d-none]=\"(!!isUpdateMode && section.addModeOnly) || (!!!isUpdateMode && section.updateModeOnly) || !!section.hidden\">\r\n\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n <div class=\"section-caption\">{{ section.caption | translate: lang }}</div>\r\n </div>\r\n\r\n <div *ngFor=\"let row of section.rows\" class=\"row mb15\">\r\n <div *ngFor=\"let col of row\" [class]=\"'col-md-' + col.flexSize\"\r\n [class.grid-buffer]=\"col.controlType==='GRIDBUFFER'\"\r\n [class.button-control]=\"col.controlType==='BUTTON'\">\r\n <core-control [control]=\"col\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <ng-container *ngIf=\"!!bottomTemplateRef\">\r\n <ng-container *ngTemplateOutlet=\"bottomTemplateRef\"></ng-container>\r\n </ng-container>\r\n\r\n\r\n <div class=\"h10\"></div>\r\n\r\n <div class=\"form-row\">\r\n\r\n <core-button-group-vns [showCaption]=\"showCaptionButton\" [forHeader]=\"false\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"buttonItems\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n <div class=\"form-row\" *ngIf=\"isDevMode\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updatePayload()\">Show\r\n values</button>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"updateValidorOverview()\">Show\r\n validators</button>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"!!payLoad && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current values</strong><br>{{payLoad}}\r\n </div>\r\n <div *ngIf=\"!!validatorOverview && isDevMode\" class=\"form-row payload-preview\">\r\n <strong>Current errors</strong><br>{{validatorOverview}}\r\n </div>\r\n\r\n</div>", styles: [".core-form-container>form .section .section-header-label{display:block;height:34px;line-height:34px;margin-bottom:15px;margin-left:12px}.core-form-container>form .section .section-header-label .section-img-wrapper{position:relative}.core-form-container>form .section .section-header-label .section-img-wrapper .section-img{position:absolute;width:34px;height:34px;border-radius:50%;background-color:#d3d3d3;float:left;background-image:url(/assets/images/info.svg);background-repeat:no-repeat;background-position:center}.core-form-container>form .section .section-header-label .section-caption{padding-left:40px;font-weight:700;color:#696969}.core-form-container .row{margin-left:var(--size-layout-block-cell-spacing) 0px;margin-right:var(--size-layout-block-cell-spacing) 0px}.core-form-container .row .grid-buffer{border:dotted 2px darkgray}.core-form-container .row .button-control{display:flex;align-items:flex-end}.core-form-container .form-row{margin:var(--size-layout-block-cell-spacing) 0px;display:flex;align-items:center;justify-content:center}.core-form-container .form-row>button{cursor:pointer}.core-form-container .form-row>button:not(:first-child){margin-left:var(--size-layout-block-cell-spacing)}.core-form-container .payload-preview{display:block;width:100%;height:200px;white-space:pre-wrap;overflow-x:hidden;overflow-y:auto}\n"] }]
206
206
  }], ctorParameters: () => [{ type: i1.CoreControlService }, { type: i2.MultiLanguageService }, { type: i3.AlertService }, { type: i4.CoreFormService }, { type: i5.AppConfigService }], propDecorators: { formName: [{
207
207
  type: Input
208
208
  }], submitText: [{
@@ -239,4 +239,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
239
239
  type: ViewChild,
240
240
  args: ['formRef']
241
241
  }] } });
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0vY29yZS1mb3JtL2NvcmUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtL2NvcmUtZm9ybS9jb3JlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUE4QixTQUFTLEVBQUUsU0FBUyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ25MLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlGLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBR2hILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUZBQW1GLENBQUM7Ozs7Ozs7OztBQXNCaEksTUFBTSxPQUFPLGlCQUFpQjtJQW1DNUIsWUFDVSxrQkFBc0MsRUFD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QUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgaXNEZXZNb2RlLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElDb3JlRm9ybVNlY3Rpb24gfSBmcm9tICcuL2VudW0taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvcmVDb250cm9sU2VydmljZSB9IGZyb20gJy4uL2NvcmUtY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1Db3JlUGFnZUVkaXRNb2RlIH0gZnJvbSAnLi4vLi4vY29yZS1wYWdlLWVkaXQvRW51bUNvcmVQYWdlRWRpdE1vZGUnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jb250cm9sL2NvcmUtY29udHJvbC9jb3JlLWNvbnRyb2wuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm1FbWl0T25Gb3JtQ3JlYXRlZCB7XHJcbiAgZm9ybU5hbWU6IHN0cmluZztcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUNvbnRyb2xDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGZvcm1OYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN1Ym1pdFRleHQhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIGxlZnRJbnB1dFNlY3Rpb25zITogSUNvcmVGb3JtU2VjdGlvbltdO1xyXG4gIEBJbnB1dCgpIGxlZnRJbnB1dFNlY3Rpb25zRmxleFNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5wdXRTZWN0aW9ucyE6IElDb3JlRm9ybVNlY3Rpb25bXTtcclxuICBASW5wdXQoKSBtb2RlJCE6IEJlaGF2aW9yU3ViamVjdDxFbnVtQ29yZVBhZ2VFZGl0TW9kZT47XHJcbiAgQElucHV0KCkgYm90dG9tVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUZvcm1CdXR0b25JdGVtcyE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdOyAvLyBPcHRpb25hbFxyXG4gIEBJbnB1dCgpIHNob3dDYXB0aW9uQnV0dG9uITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjaGVja0Vycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBAT3V0cHV0KCkgb25Gb3JtQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtRW1pdE9uRm9ybUNyZWF0ZWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRm9ybVJlZkNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVsZW1lbnRSZWY8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DYW5jYWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1SZWYnKSBmb3JtUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgYnV0dG9uSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBzZWN0aW9ucyE6IElDb3JlRm9ybVNlY3Rpb25bXTtcclxuICBsYW5nITogc3RyaW5nO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHBheUxvYWQgPSAnJztcclxuICB2YWxpZGF0b3JPdmVydmlldzogYW55O1xyXG4gIGlzRGV2TW9kZSE6IGJvb2xlYW47XHJcbiAgaXNVcGRhdGVNb2RlITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcmVDb250cm9sU2VydmljZTogQ29yZUNvbnRyb2xTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtdWx0aUxhbmd1YWdlU2VydmljZTogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRm9ybVNlcnZpY2U6IENvcmVGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5pc0Rldk1vZGUgPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5hcHBDb25maWdTZXJ2aWNlLkFQUF9UWVBFID09PSBcIldFQkFQUFwiKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uSXRlbXMgPSBbXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX1NBVkUsXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX0NBTkNFTCxcclxuICAgICAgXVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQVBQX1RZUEUgPT09IFwiUE9SVEFMXCIpIHtcclxuICAgICAgdGhpcy5idXR0b25JdGVtcyA9IFtcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuU0VORCxcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuQ0FOQ0VMLFxyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5TQVZFLFxyXG4gICAgICBdXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9ucyhuZXdTZWN0aW9uczogSUNvcmVGb3JtU2VjdGlvbltdKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIHNlY3Rpb25JbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBuZXdTZWN0aW9uID0gbmV3U2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcclxuICAgICAgc2VjdGlvbi5yb3dzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IG5ld1NlY3Rpb24ucm93c1tyb3dJbmRleF07XHJcbiAgICAgICAgcm93Lm1hcCgoY29udHJvbCwgY29udHJvbEluZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdDb250cm9sID0gbmV3Um93W2NvbnRyb2xJbmRleF07XHJcblxyXG4gICAgICAgICAgLyogVEhFIE9OTFkgUFJPUCBUTyBCRSBVREFURUQgSVMgJ2hpZGRlbicsIFRIRSBPVEhFUlMgU0hPVUxEIEJFIE1BTklQVUxBVEVEIFRIUk9VR0ggdGhpcy5mb3JtLmdldChZT1VSX0NPTlRST0xfTkFNRSkuLi4gKi9cclxuICAgICAgICAgIGNvbnRyb2wuaGlkZGVuID0gbmV3Q29udHJvbD8uaGlkZGVuO1xyXG4gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvKiAjcmVnaW9uIE9jdCB0aGUgMTF0aCAyMDIzICovXHJcbiAgICAgIC8qIFNvbWUgc2VjdGlvbnMgd2FzIHBvc2libHkgaGF2ZSByZW5kZXJPZmY9dHJ1ZSBmcm9tIHByZXZpb3VzIHN0YXRlIGFuZCB0aGVpciBjb250cm9scyBtdXN0IGJlIGNyZWF0ZWQvcmVtb3ZlICovXHJcbiAgICAgIC8qXHJcbiAgICAgIEJVVCBUSElTIFRBU0sgSVMgSEFSRCBTTyBGQVJcclxuICAgICAgKi9cclxuICAgICAgLyogI2VuZHJlZ2lvbiBPY3QgdGhlIDExdGggMjAyMyAqL1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydpbnB1dFNlY3Rpb25zJ10pIHtcclxuICAgICAgbGV0IG5ld1NlY3Rpb25zOiBJQ29yZUZvcm1TZWN0aW9uW10gPVxyXG4gICAgICAgIGNoYW5nZXNbJ2lucHV0U2VjdGlvbnMnXS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAoISEhdGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IG5ld1NlY3Rpb25zO1xyXG5cclxuICAgICAgICBsZXQgbGVmdEdyb3VwO1xyXG4gICAgICAgIGxldCBmb3JtOiBGb3JtR3JvdXA8YW55PjtcclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkdyb3VwID0gdGhpcy5jb3JlQ29udHJvbFNlcnZpY2UudG9Hcm91cCh0aGlzLnNlY3Rpb25zKTtcclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5sZWZ0SW5wdXRTZWN0aW9ucykge1xyXG4gICAgICAgICAgbGVmdEdyb3VwID0gdGhpcy5jb3JlQ29udHJvbFNlcnZpY2UudG9Hcm91cCh0aGlzLmxlZnRJbnB1dFNlY3Rpb25zKTtcclxuICAgICAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHsgLi4ubGVmdEdyb3VwLCAuLi5tYWluR3JvdXAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKG1haW5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlY3Rpb25zKG5ld1NlY3Rpb25zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vbkZvcm1DcmVhdGVkLmVtaXQoe1xyXG4gICAgICAgIGZvcm1OYW1lOiB0aGlzLmZvcm1OYW1lLFxyXG4gICAgICAgIGZvcm1Hcm91cDogdGhpcy5mb3JtLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGlmICghIXRoaXMuY3VzdG9tRm9ybUJ1dHRvbkl0ZW1zKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uSXRlbXMgPSB0aGlzLmN1c3RvbUZvcm1CdXR0b25JdGVtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tb2RlJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHgpID0+ICh0aGlzLmlzVXBkYXRlTW9kZSA9IHggPT09IEVudW1Db3JlUGFnZUVkaXRNb2RlLlVQREFURSlcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLm1vZGUkKTtcclxuXHJcbiAgICAvKiBTVEFSVDogQ2hlY2sgaWYgaWQgZmllbGQgaXMgYXZhaWxhYmxlICovXHJcbiAgICBpZiAoISEhdGhpcy5mb3JtLmdldCgnaWQnKSAmJiBpc0Rldk1vZGUoKSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICBgXHJcbiAgICAgICAgICAgIENvbnRyb2wgXCJpZFwiIGlzIG1hbmRhdG9yeS4gUGxlYXNlIGRlZmluZSBvbmUgaW4geW91ciBidXNzaW5lc3MgY29tcG9uZW50LiBZb3UgY2FuIGFzc2lnbiBpdHMgXCJoaWRkZW5cIiBwcm9wZXJ0eSB0byB0cnVlIGlmIG5lZWRlZC5cclxuICAgICAgICAgIGAsXHJcbiAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qIEVORDogQ2hlY2sgaWYgaWQgZmllbGQgaXMgYXZhaWxhYmxlICovXHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIC8qIFNUQVJUOiBDaGVjayBpZiBlYWNoIGZpZWxkIGlzIHVuaXF1ZSAqL1xyXG5cclxuICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5jb3JlRm9ybVNlcnZpY2UuZ2V0QWxsRm9ybUJhc2VDb250cm9sTmFtZXMoXHJcbiAgICAgICAgdGhpcy5zZWN0aW9uc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgZmllbGRzLnJlZHVjZSgocCwgYykgPT4ge1xyXG4gICAgICAgIGlmIChjID09PSAnJykge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGb3JtIGNvbnRyb2wgbmFtZSBtdXN0IGJlIGRlZmluZGVkLCAnJHtjfScgaXMgaW52YWxpZCBmb3JtIGNvbnRyb2wgbmFtZSEhIWAsXHJcbiAgICAgICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocCA9PT0gYykge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICBgRHVwbGljYXRlIGZvcm0gY29udHJvbCBuYW1lOiAnJHtjfScuIENvbnNpZGVyIHRvIHByZWRlZmluZSBvbmUgT05MWSEhIS5gLFxyXG4gICAgICAgICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjO1xyXG4gICAgICB9KTtcclxuICAgICAgLyogRU5EOiBDaGVjayBpZiBlYWNoIGZpZWxkIGlzIHVuaXF1ZSAqL1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm11bHRpTGFuZ3VhZ2VTZXJ2aWNlLmxhbmckLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMubGFuZyA9IHgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub25Gb3JtUmVmQ3JlYXRlZC5lbWl0KHRoaXMuZm9ybVJlZik7XHJcbiAgfVxyXG5cclxuICBvbkZvcm1TdWJtaXQoKSB7XHJcbiAgICB0aGlzLmNoZWNrRXJyb3IkLm5leHQodHJ1ZSk7XHJcbiAgICBpZiAoISF0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgdGhpcy5wYXlMb2FkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtPy5nZXRSYXdWYWx1ZSgpLCBudWxsLCAyKTtcclxuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMuZm9ybT8uZ2V0UmF3VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvcm1TYXZlKCkge1xyXG4gICAgdGhpcy5jaGVja0Vycm9yJC5uZXh0KHRydWUpO1xyXG4gICAgaWYgKCEhdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMucGF5TG9hZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybT8uZ2V0UmF3VmFsdWUoKSwgbnVsbCwgMik7XHJcbiAgICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5mb3JtPy5nZXRSYXdWYWx1ZSgpKTtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja0Vycm9yJC5uZXh0KGZhbHNlKSwgMzAwMCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbExvY2FsKCkge1xyXG4gICAgdGhpcy5vbkNhbmNhbC5lbWl0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGF5bG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGF5TG9hZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybT8uZ2V0UmF3VmFsdWUoKSwgbnVsbCwgMik7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWxpZG9yT3ZlcnZpZXcoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXN1bHQ6IHsga2V5OiBzdHJpbmc7IGVycm9yczogYW55W10gfVtdID0gW107XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSkhO1xyXG4gICAgICBjb25zdCBlcnJvcnM6IGFueVtdID0gW107XHJcbiAgICAgIGlmICghIWNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuZXJyb3JzISkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICBlcnJvcnMucHVzaChrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgZXJyb3JzLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWxpZGF0b3JPdmVydmlldyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMik7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgb25CdXR0b25DbGljayhlOiBJQ29yZUJ1dHRvblZOUyk6IHZvaWQge1xyXG5cclxuICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX0NBTkNFTDpcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuQ0FOQ0VMOlxyXG4gICAgICAgIHRoaXMub25DYW5jZWxMb2NhbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5OT05FX0hFQURFUl9TQVZFOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5TRU5EOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5OT05FX0hFQURFUl9ERUxFVEU6XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX0xJUVVJREFURV9DT05UUkFDVDpcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuT05GT1JNREVMRVRFOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5TQVZFX1BBU1NXT1JEOlxyXG4gICAgICAgIHRoaXMub25Gb3JtU3VibWl0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLlNBVkU6XHJcbiAgICAgICAgdGhpcy5vbkZvcm1TYXZlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb3JlLWZvcm0tY29udGFpbmVyXCIgKm5nSWY9XCIhIWZvcm1cIj5cclxuXHJcbiAgICA8Zm9ybSAjZm9ybVJlZiAobmdTdWJtaXQpPVwib25Gb3JtU3VibWl0KClcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgKGxlZnRJbnB1dFNlY3Rpb25zRmxleFNpemUgfHwgMClcIiAqbmdJZj1cIiEhbGVmdElucHV0U2VjdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGxlZnRJbnB1dFNlY3Rpb25zXCIgY2xhc3M9XCJzZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ub25lXT1cIighIWlzVXBkYXRlTW9kZSAmJiBzZWN0aW9uLmFkZE1vZGVPbmx5KSB8fCAoISEhaXNVcGRhdGVNb2RlICYmIHNlY3Rpb24udXBkYXRlTW9kZU9ubHkpIHx8ICEhc2VjdGlvbi5oaWRkZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWxhYmVsXCIgKm5nSWY9XCJzZWN0aW9uLmNhcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taW1nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FwdGlvblwiPnt7IHNlY3Rpb24uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VjdGlvbi5yb3dzXCIgY2xhc3M9XCJyb3cgbWIxNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93XCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIGNvbC5mbGV4U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZ3JpZC1idWZmZXJdPVwiY29sLmNvbnRyb2xUeXBlPT09J0dSSURCVUZGRVInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idXR0b24tY29udHJvbF09XCJjb2wuY29udHJvbFR5cGU9PT0nQlVUVE9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY29udHJvbCBbY29udHJvbF09XCJjb2xcIiBbZm9ybV09XCJmb3JtXCIgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCI+PC9jb3JlLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyAoMTIgLSAobGVmdElucHV0U2VjdGlvbnNGbGV4U2l6ZSB8fCAwKSlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNlY3Rpb25zXCIgY2xhc3M9XCJzZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ub25lXT1cIighIWlzVXBkYXRlTW9kZSAmJiBzZWN0aW9uLmFkZE1vZGVPbmx5KSB8fCAoISEhaXNVcGRhdGVNb2RlICYmIHNlY3Rpb24udXBkYXRlTW9kZU9ubHkpIHx8ICEhc2VjdGlvbi5oaWRkZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWxhYmVsXCIgKm5nSWY9XCJzZWN0aW9uLmNhcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taW1nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FwdGlvblwiPnt7IHNlY3Rpb24uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VjdGlvbi5yb3dzXCIgY2xhc3M9XCJyb3cgbWIxNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93XCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIGNvbC5mbGV4U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZ3JpZC1idWZmZXJdPVwiY29sLmNvbnRyb2xUeXBlPT09J0dSSURCVUZGRVInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idXR0b24tY29udHJvbF09XCJjb2wuY29udHJvbFR5cGU9PT0nQlVUVE9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY29udHJvbCBbY29udHJvbF09XCJjb2xcIiBbZm9ybV09XCJmb3JtXCIgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCI+PC9jb3JlLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhYm90dG9tVGVtcGxhdGVSZWZcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvdHRvbVRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaDEwXCI+PC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG5cclxuICAgICAgICAgICAgPGNvcmUtYnV0dG9uLWdyb3VwLXZucyBbc2hvd0NhcHRpb25dPVwic2hvd0NhcHRpb25CdXR0b25cIiAoYnV0dG9uQ2xpY2spPVwib25CdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtzaG93bkl0ZW1zXT1cImJ1dHRvbkl0ZW1zXCIgY2xhc3M9XCJidXR0b25Hcm91cEN1c3RvbVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiICpuZ0lmPVwiaXNEZXZNb2RlXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdGV4dFwiIChjbGljayk9XCJ1cGRhdGVQYXlsb2FkKClcIj5TaG93XHJcbiAgICAgICAgICAgICAgICB2YWx1ZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSB0ZXh0XCIgKGNsaWNrKT1cInVwZGF0ZVZhbGlkb3JPdmVydmlldygpXCI+U2hvd1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yczwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhIXBheUxvYWQgJiYgaXNEZXZNb2RlXCIgY2xhc3M9XCJmb3JtLXJvdyBwYXlsb2FkLXByZXZpZXdcIj5cclxuICAgICAgICA8c3Ryb25nPkN1cnJlbnQgdmFsdWVzPC9zdHJvbmc+PGJyPnt7cGF5TG9hZH19XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhIXZhbGlkYXRvck92ZXJ2aWV3ICYmIGlzRGV2TW9kZVwiIGNsYXNzPVwiZm9ybS1yb3cgcGF5bG9hZC1wcmV2aWV3XCI+XHJcbiAgICAgICAgPHN0cm9uZz5DdXJyZW50IGVycm9yczwvc3Ryb25nPjxicj57e3ZhbGlkYXRvck92ZXJ2aWV3fX1cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+Il19
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0vY29yZS1mb3JtL2NvcmUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtL2NvcmUtZm9ybS9jb3JlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUE4QixTQUFTLEVBQUUsU0FBUyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ25MLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlGLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBR2hILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUZBQW1GLENBQUM7Ozs7Ozs7OztBQXNCaEksTUFBTSxPQUFPLGlCQUFpQjtJQW1DNUIsWUFDVSxrQkFBc0MsRUFDdEMsb0JBQTBDLEVBQzFDLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLGdCQUFrQztRQUpsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUE3Qm5DLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFakQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBaUMsQ0FBQztRQUNsRSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN2RCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBVTNELGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBWVgsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUU3QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUc7Z0JBQ2pCLHFCQUFxQixDQUFDLGdCQUFnQjtnQkFDdEMscUJBQXFCLENBQUMsa0JBQWtCO2FBQ3pDLENBQUE7U0FDRjthQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRztnQkFDakIscUJBQXFCLENBQUMsSUFBSTtnQkFDMUIscUJBQXFCLENBQUMsTUFBTTtnQkFDNUIscUJBQXFCLENBQUMsSUFBSTthQUMzQixDQUFBO1NBQ0Y7SUFFSCxDQUFDO0lBRU8sY0FBYyxDQUFDLFdBQStCO1FBRXBELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFO1lBQzFDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDakMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRTtvQkFDaEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUV4QywwSEFBMEg7b0JBQzFILE9BQU8sQ0FBQyxNQUFNLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQztvQkFDcEMsMEhBQTBIO2dCQUM1SCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsK0JBQStCO1lBQy9CLGlIQUFpSDtZQUNqSDs7Y0FFRTtZQUNGLGtDQUFrQztRQUVwQyxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDNUIsSUFBSSxXQUFXLEdBQ2IsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUV4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO2dCQUU1QixJQUFJLFNBQVMsQ0FBQztnQkFDZCxJQUFJLElBQW9CLENBQUM7Z0JBRXpCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVqRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7b0JBQzVCLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUNwRSxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUM7aUJBQ3REO3FCQUFNO29CQUNMLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDakM7Z0JBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7YUFFbEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsQztZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSTthQUNyQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUNsQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBSyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FDL0QsQ0FDRixDQUFDO1FBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQ3JCOztXQUVHLEVBQ0gsMEJBQTBCLENBQzNCLENBQUM7U0FDSDtRQUNELHlDQUF5QztRQUV6QyxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsMENBQTBDO1lBRTFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQzVELElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztZQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDckIsd0NBQXdDLENBQUMsbUNBQW1DLEVBQzVFLDBCQUEwQixDQUMzQixDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDckIsaUNBQWlDLENBQUMsdUNBQXVDLEVBQ3pFLDBCQUEwQixDQUMzQixDQUFDO3FCQUNIO2lCQUNGO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7WUFDSCx3Q0FBd0M7U0FDekM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sTUFBTSxHQUFxQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlDLE1BQU0sT0FBTyxHQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztZQUNyRCxNQUFNLE1BQU0sR0FBVSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLEdBQUc7Z0JBQ0gsTUFBTTthQUNQLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQWlCO1FBRTdCLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNkLEtBQUsscUJBQXFCLENBQUMsa0JBQWtCLENBQUM7WUFDOUMsS0FBSyxxQkFBcUIsQ0FBQyxNQUFNO2dCQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU07WUFDUixLQUFLLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDO1lBQzVDLEtBQUsscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQ2hDLEtBQUsscUJBQXFCLENBQUMsa0JBQWtCLENBQUM7WUFDOUMsS0FBSyxxQkFBcUIsQ0FBQyw4QkFBOEIsQ0FBQztZQUMxRCxLQUFLLHFCQUFxQixDQUFDLFlBQVksQ0FBQztZQUN4QyxLQUFLLHFCQUFxQixDQUFDLGFBQWE7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEIsTUFBTTtZQUNSLEtBQUsscUJBQXFCLENBQUMsSUFBSTtnQkFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs4R0F2UFUsaUJBQWlCO2tHQUFqQixpQkFBaUIsbXRCQ3RDOUIsaWdJQW9GTSwwM0NEeERGLFlBQVksc2FBQ1osV0FBVyxtU0FDWCxtQkFBbUIsZ0xBQ25CLG9CQUFvQiw4R0FDcEIsYUFBYSxrREFDYiwyQkFBMkI7OzJGQUtsQixpQkFBaUI7a0JBZDdCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2IsMkJBQTJCO3FCQUM1QjtrTkFNUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFHZSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgaXNEZXZNb2RlLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElDb3JlRm9ybVNlY3Rpb24gfSBmcm9tICcuL2VudW0taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvcmVDb250cm9sU2VydmljZSB9IGZyb20gJy4uL2NvcmUtY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1Db3JlUGFnZUVkaXRNb2RlIH0gZnJvbSAnLi4vLi4vY29yZS1wYWdlLWVkaXQvRW51bUNvcmVQYWdlRWRpdE1vZGUnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jb250cm9sL2NvcmUtY29udHJvbC9jb3JlLWNvbnRyb2wuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHluYW1pY0Zvcm1FbWl0T25Gb3JtQ3JlYXRlZCB7XHJcbiAgZm9ybU5hbWU6IHN0cmluZztcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUNvbnRyb2xDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGZvcm1OYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN1Ym1pdFRleHQhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIGxlZnRJbnB1dFNlY3Rpb25zITogSUNvcmVGb3JtU2VjdGlvbltdO1xyXG4gIEBJbnB1dCgpIGxlZnRJbnB1dFNlY3Rpb25zRmxleFNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5wdXRTZWN0aW9ucyE6IElDb3JlRm9ybVNlY3Rpb25bXTtcclxuICBASW5wdXQoKSBtb2RlJCE6IEJlaGF2aW9yU3ViamVjdDxFbnVtQ29yZVBhZ2VFZGl0TW9kZT47XHJcbiAgQElucHV0KCkgYm90dG9tVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUZvcm1CdXR0b25JdGVtcyE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdOyAvLyBPcHRpb25hbFxyXG4gIEBJbnB1dCgpIHNob3dDYXB0aW9uQnV0dG9uITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjaGVja0Vycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBAT3V0cHV0KCkgb25Gb3JtQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUR5bmFtaWNGb3JtRW1pdE9uRm9ybUNyZWF0ZWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRm9ybVJlZkNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVsZW1lbnRSZWY8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DYW5jYWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1SZWYnKSBmb3JtUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgYnV0dG9uSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBzZWN0aW9ucyE6IElDb3JlRm9ybVNlY3Rpb25bXTtcclxuICBsYW5nITogc3RyaW5nO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHBheUxvYWQgPSAnJztcclxuICB2YWxpZGF0b3JPdmVydmlldzogYW55O1xyXG4gIGlzRGV2TW9kZSE6IGJvb2xlYW47XHJcbiAgaXNVcGRhdGVNb2RlITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcmVDb250cm9sU2VydmljZTogQ29yZUNvbnRyb2xTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtdWx0aUxhbmd1YWdlU2VydmljZTogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRm9ybVNlcnZpY2U6IENvcmVGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5pc0Rldk1vZGUgPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5hcHBDb25maWdTZXJ2aWNlLkFQUF9UWVBFID09PSBcIldFQkFQUFwiKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uSXRlbXMgPSBbXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX1NBVkUsXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX0NBTkNFTCxcclxuICAgICAgXVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQVBQX1RZUEUgPT09IFwiUE9SVEFMXCIpIHtcclxuICAgICAgdGhpcy5idXR0b25JdGVtcyA9IFtcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuU0VORCxcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuQ0FOQ0VMLFxyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5TQVZFLFxyXG4gICAgICBdXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9ucyhuZXdTZWN0aW9uczogSUNvcmVGb3JtU2VjdGlvbltdKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIHNlY3Rpb25JbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBuZXdTZWN0aW9uID0gbmV3U2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcclxuICAgICAgc2VjdGlvbi5yb3dzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IG5ld1NlY3Rpb24ucm93c1tyb3dJbmRleF07XHJcbiAgICAgICAgcm93Lm1hcCgoY29udHJvbCwgY29udHJvbEluZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdDb250cm9sID0gbmV3Um93W2NvbnRyb2xJbmRleF07XHJcblxyXG4gICAgICAgICAgLyogVEhFIE9OTFkgUFJPUCBUTyBCRSBVREFURUQgSVMgJ2hpZGRlbicsIFRIRSBPVEhFUlMgU0hPVUxEIEJFIE1BTklQVUxBVEVEIFRIUk9VR0ggdGhpcy5mb3JtLmdldChZT1VSX0NPTlRST0xfTkFNRSkuLi4gKi9cclxuICAgICAgICAgIGNvbnRyb2wuaGlkZGVuID0gbmV3Q29udHJvbD8uaGlkZGVuO1xyXG4gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvKiAjcmVnaW9uIE9jdCB0aGUgMTF0aCAyMDIzICovXHJcbiAgICAgIC8qIFNvbWUgc2VjdGlvbnMgd2FzIHBvc2libHkgaGF2ZSByZW5kZXJPZmY9dHJ1ZSBmcm9tIHByZXZpb3VzIHN0YXRlIGFuZCB0aGVpciBjb250cm9scyBtdXN0IGJlIGNyZWF0ZWQvcmVtb3ZlICovXHJcbiAgICAgIC8qXHJcbiAgICAgIEJVVCBUSElTIFRBU0sgSVMgSEFSRCBTTyBGQVJcclxuICAgICAgKi9cclxuICAgICAgLyogI2VuZHJlZ2lvbiBPY3QgdGhlIDExdGggMjAyMyAqL1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydpbnB1dFNlY3Rpb25zJ10pIHtcclxuICAgICAgbGV0IG5ld1NlY3Rpb25zOiBJQ29yZUZvcm1TZWN0aW9uW10gPVxyXG4gICAgICAgIGNoYW5nZXNbJ2lucHV0U2VjdGlvbnMnXS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAoISEhdGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IG5ld1NlY3Rpb25zO1xyXG5cclxuICAgICAgICBsZXQgbGVmdEdyb3VwO1xyXG4gICAgICAgIGxldCBmb3JtOiBGb3JtR3JvdXA8YW55PjtcclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkdyb3VwID0gdGhpcy5jb3JlQ29udHJvbFNlcnZpY2UudG9Hcm91cCh0aGlzLnNlY3Rpb25zKTtcclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5sZWZ0SW5wdXRTZWN0aW9ucykge1xyXG4gICAgICAgICAgbGVmdEdyb3VwID0gdGhpcy5jb3JlQ29udHJvbFNlcnZpY2UudG9Hcm91cCh0aGlzLmxlZnRJbnB1dFNlY3Rpb25zKTtcclxuICAgICAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHsgLi4ubGVmdEdyb3VwLCAuLi5tYWluR3JvdXAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKG1haW5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlY3Rpb25zKG5ld1NlY3Rpb25zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vbkZvcm1DcmVhdGVkLmVtaXQoe1xyXG4gICAgICAgIGZvcm1OYW1lOiB0aGlzLmZvcm1OYW1lLFxyXG4gICAgICAgIGZvcm1Hcm91cDogdGhpcy5mb3JtLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGlmICghIXRoaXMuY3VzdG9tRm9ybUJ1dHRvbkl0ZW1zKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uSXRlbXMgPSB0aGlzLmN1c3RvbUZvcm1CdXR0b25JdGVtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tb2RlJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHgpID0+ICh0aGlzLmlzVXBkYXRlTW9kZSA9IHggPT09IEVudW1Db3JlUGFnZUVkaXRNb2RlLlVQREFURSlcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLm1vZGUkKTtcclxuXHJcbiAgICAvKiBTVEFSVDogQ2hlY2sgaWYgaWQgZmllbGQgaXMgYXZhaWxhYmxlICovXHJcbiAgICBpZiAoISEhdGhpcy5mb3JtLmdldCgnaWQnKSAmJiBpc0Rldk1vZGUoKSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICBgXHJcbiAgICAgICAgICAgIENvbnRyb2wgXCJpZFwiIGlzIG1hbmRhdG9yeS4gUGxlYXNlIGRlZmluZSBvbmUgaW4geW91ciBidXNzaW5lc3MgY29tcG9uZW50LiBZb3UgY2FuIGFzc2lnbiBpdHMgXCJoaWRkZW5cIiBwcm9wZXJ0eSB0byB0cnVlIGlmIG5lZWRlZC5cclxuICAgICAgICAgIGAsXHJcbiAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qIEVORDogQ2hlY2sgaWYgaWQgZmllbGQgaXMgYXZhaWxhYmxlICovXHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIC8qIFNUQVJUOiBDaGVjayBpZiBlYWNoIGZpZWxkIGlzIHVuaXF1ZSAqL1xyXG5cclxuICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5jb3JlRm9ybVNlcnZpY2UuZ2V0QWxsRm9ybUJhc2VDb250cm9sTmFtZXMoXHJcbiAgICAgICAgdGhpcy5zZWN0aW9uc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgZmllbGRzLnJlZHVjZSgocCwgYykgPT4ge1xyXG4gICAgICAgIGlmIChjID09PSAnJykge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGb3JtIGNvbnRyb2wgbmFtZSBtdXN0IGJlIGRlZmluZGVkLCAnJHtjfScgaXMgaW52YWxpZCBmb3JtIGNvbnRyb2wgbmFtZSEhIWAsXHJcbiAgICAgICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocCA9PT0gYykge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICBgRHVwbGljYXRlIGZvcm0gY29udHJvbCBuYW1lOiAnJHtjfScuIENvbnNpZGVyIHRvIHByZWRlZmluZSBvbmUgT05MWSEhIS5gLFxyXG4gICAgICAgICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjO1xyXG4gICAgICB9KTtcclxuICAgICAgLyogRU5EOiBDaGVjayBpZiBlYWNoIGZpZWxkIGlzIHVuaXF1ZSAqL1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm11bHRpTGFuZ3VhZ2VTZXJ2aWNlLmxhbmckLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMubGFuZyA9IHgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub25Gb3JtUmVmQ3JlYXRlZC5lbWl0KHRoaXMuZm9ybVJlZik7XHJcbiAgfVxyXG5cclxuICBvbkZvcm1TdWJtaXQoKSB7XHJcbiAgICB0aGlzLmNoZWNrRXJyb3IkLm5leHQodHJ1ZSk7XHJcbiAgICBpZiAoISF0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgdGhpcy5wYXlMb2FkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtPy5nZXRSYXdWYWx1ZSgpLCBudWxsLCAyKTtcclxuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMuZm9ybT8uZ2V0UmF3VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvcm1TYXZlKCkge1xyXG4gICAgdGhpcy5jaGVja0Vycm9yJC5uZXh0KHRydWUpO1xyXG4gICAgaWYgKCEhdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMucGF5TG9hZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybT8uZ2V0UmF3VmFsdWUoKSwgbnVsbCwgMik7XHJcbiAgICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5mb3JtPy5nZXRSYXdWYWx1ZSgpKTtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja0Vycm9yJC5uZXh0KGZhbHNlKSwgMzAwMCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbExvY2FsKCkge1xyXG4gICAgdGhpcy5vbkNhbmNhbC5lbWl0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGF5bG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGF5TG9hZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybT8uZ2V0UmF3VmFsdWUoKSwgbnVsbCwgMik7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWxpZG9yT3ZlcnZpZXcoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXN1bHQ6IHsga2V5OiBzdHJpbmc7IGVycm9yczogYW55W10gfVtdID0gW107XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSkhO1xyXG4gICAgICBjb25zdCBlcnJvcnM6IGFueVtdID0gW107XHJcbiAgICAgIGlmICghIWNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuZXJyb3JzISkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICBlcnJvcnMucHVzaChrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgZXJyb3JzLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWxpZGF0b3JPdmVydmlldyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMik7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgb25CdXR0b25DbGljayhlOiBJQ29yZUJ1dHRvblZOUyk6IHZvaWQge1xyXG5cclxuICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX0NBTkNFTDpcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuQ0FOQ0VMOlxyXG4gICAgICAgIHRoaXMub25DYW5jZWxMb2NhbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5OT05FX0hFQURFUl9TQVZFOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5TRU5EOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5OT05FX0hFQURFUl9ERUxFVEU6XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLk5PTkVfSEVBREVSX0xJUVVJREFURV9DT05UUkFDVDpcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuT05GT1JNREVMRVRFOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5TQVZFX1BBU1NXT1JEOlxyXG4gICAgICAgIHRoaXMub25Gb3JtU3VibWl0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLlNBVkU6XHJcbiAgICAgICAgdGhpcy5vbkZvcm1TYXZlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb3JlLWZvcm0tY29udGFpbmVyXCIgKm5nSWY9XCIhIWZvcm1cIj5cclxuXHJcbiAgICA8Zm9ybSAjZm9ybVJlZiAobmdTdWJtaXQpPVwib25Gb3JtU3VibWl0KClcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgKGxlZnRJbnB1dFNlY3Rpb25zRmxleFNpemUgfHwgMClcIiAqbmdJZj1cIiEhbGVmdElucHV0U2VjdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGxlZnRJbnB1dFNlY3Rpb25zXCIgY2xhc3M9XCJzZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ub25lXT1cIighIWlzVXBkYXRlTW9kZSAmJiBzZWN0aW9uLmFkZE1vZGVPbmx5KSB8fCAoISEhaXNVcGRhdGVNb2RlICYmIHNlY3Rpb24udXBkYXRlTW9kZU9ubHkpIHx8ICEhc2VjdGlvbi5oaWRkZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWxhYmVsXCIgKm5nSWY9XCJzZWN0aW9uLmNhcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taW1nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FwdGlvblwiPnt7IHNlY3Rpb24uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VjdGlvbi5yb3dzXCIgY2xhc3M9XCJyb3cgbWIxNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93XCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIGNvbC5mbGV4U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZ3JpZC1idWZmZXJdPVwiY29sLmNvbnRyb2xUeXBlPT09J0dSSURCVUZGRVInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idXR0b24tY29udHJvbF09XCJjb2wuY29udHJvbFR5cGU9PT0nQlVUVE9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY29udHJvbCBbY29udHJvbF09XCJjb2xcIiBbZm9ybV09XCJmb3JtXCIgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCI+PC9jb3JlLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyAoMTIgLSAobGVmdElucHV0U2VjdGlvbnNGbGV4U2l6ZSB8fCAwKSlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNlY3Rpb25zXCIgY2xhc3M9XCJzZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ub25lXT1cIighIWlzVXBkYXRlTW9kZSAmJiBzZWN0aW9uLmFkZE1vZGVPbmx5KSB8fCAoISEhaXNVcGRhdGVNb2RlICYmIHNlY3Rpb24udXBkYXRlTW9kZU9ubHkpIHx8ICEhc2VjdGlvbi5oaWRkZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWxhYmVsXCIgKm5nSWY9XCJzZWN0aW9uLmNhcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taW1nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FwdGlvblwiPnt7IHNlY3Rpb24uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VjdGlvbi5yb3dzXCIgY2xhc3M9XCJyb3cgbWIxNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93XCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIGNvbC5mbGV4U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZ3JpZC1idWZmZXJdPVwiY29sLmNvbnRyb2xUeXBlPT09J0dSSURCVUZGRVInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idXR0b24tY29udHJvbF09XCJjb2wuY29udHJvbFR5cGU9PT0nQlVUVE9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY29udHJvbCBbY29udHJvbF09XCJjb2xcIiBbZm9ybV09XCJmb3JtXCIgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCI+PC9jb3JlLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhYm90dG9tVGVtcGxhdGVSZWZcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvdHRvbVRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaDEwXCI+PC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG5cclxuICAgICAgICAgICAgPGNvcmUtYnV0dG9uLWdyb3VwLXZucyBbc2hvd0NhcHRpb25dPVwic2hvd0NhcHRpb25CdXR0b25cIiBbZm9ySGVhZGVyXT1cImZhbHNlXCIgKGJ1dHRvbkNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbc2hvd25JdGVtc109XCJidXR0b25JdGVtc1wiIGNsYXNzPVwiYnV0dG9uR3JvdXBDdXN0b21cIj48L2NvcmUtYnV0dG9uLWdyb3VwLXZucz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIiAqbmdJZj1cImlzRGV2TW9kZVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHRleHRcIiAoY2xpY2spPVwidXBkYXRlUGF5bG9hZCgpXCI+U2hvd1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdGV4dFwiIChjbGljayk9XCJ1cGRhdGVWYWxpZG9yT3ZlcnZpZXcoKVwiPlNob3dcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiISFwYXlMb2FkICYmIGlzRGV2TW9kZVwiIGNsYXNzPVwiZm9ybS1yb3cgcGF5bG9hZC1wcmV2aWV3XCI+XHJcbiAgICAgICAgPHN0cm9uZz5DdXJyZW50IHZhbHVlczwvc3Ryb25nPjxicj57e3BheUxvYWR9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiISF2YWxpZGF0b3JPdmVydmlldyAmJiBpc0Rldk1vZGVcIiBjbGFzcz1cImZvcm0tcm93IHBheWxvYWQtcHJldmlld1wiPlxyXG4gICAgICAgIDxzdHJvbmc+Q3VycmVudCBlcnJvcnM8L3N0cm9uZz48YnI+e3t2YWxpZGF0b3JPdmVydmlld319XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==