tin-spa 2.4.4 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/esm2020/lib/classes/Classes.mjs +3 -1
  2. package/esm2020/lib/components/form/form.component.mjs +8 -8
  3. package/esm2020/lib/components/option/option.component.mjs +32 -14
  4. package/esm2020/lib/components/page/page.component.mjs +23 -34
  5. package/esm2020/lib/components/search/search.component.mjs +10 -5
  6. package/esm2020/lib/components/select/select.component.mjs +2 -6
  7. package/esm2020/lib/components/table/table.component.mjs +27 -11
  8. package/esm2020/lib/components/table-header/table-header.component.mjs +6 -4
  9. package/esm2020/lib/components/table-internal/table-internal.component.mjs +27 -11
  10. package/esm2020/lib/components/table-row/table-row.component.mjs +1 -1
  11. package/esm2020/lib/components/text/text.component.mjs +5 -6
  12. package/esm2020/lib/components/tiles/tiles.component.mjs +8 -3
  13. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
  14. package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
  15. package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
  16. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
  17. package/esm2020/lib/pages/login/login.component.mjs +1 -1
  18. package/esm2020/lib/pages/profile/profile.component.mjs +1 -1
  19. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
  20. package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
  21. package/esm2020/lib/pages/tenant-settings/inviteDialog.component.mjs +1 -1
  22. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +1 -1
  23. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
  24. package/esm2020/lib/pages/welcome/welcome.component.mjs +1 -1
  25. package/fesm2015/tin-spa.mjs +203 -153
  26. package/fesm2015/tin-spa.mjs.map +1 -1
  27. package/fesm2020/tin-spa.mjs +204 -162
  28. package/fesm2020/tin-spa.mjs.map +1 -1
  29. package/lib/classes/Classes.d.ts +2 -2
  30. package/lib/components/form/form.component.d.ts +0 -1
  31. package/lib/components/option/option.component.d.ts +8 -2
  32. package/lib/components/page/page.component.d.ts +7 -6
  33. package/lib/components/search/search.component.d.ts +3 -1
  34. package/lib/components/select/select.component.d.ts +1 -2
  35. package/lib/components/table/table.component.d.ts +1 -0
  36. package/lib/components/table-header/table-header.component.d.ts +2 -1
  37. package/lib/components/table-internal/table-internal.component.d.ts +1 -0
  38. package/lib/components/text/text.component.d.ts +1 -2
  39. package/lib/components/tiles/tiles.component.d.ts +2 -1
  40. package/package.json +1 -1
@@ -57,7 +57,7 @@ export class TableComponent {
57
57
  this.initializeComponent();
58
58
  }
59
59
  ngOnChanges() {
60
- if (!this.config.loadAction) {
60
+ if (!this.config.loadAction && !this.config.searchConfig) {
61
61
  this.dataSource = this.data;
62
62
  this.tableDataSource = new MatTableDataSource(this.dataSource);
63
63
  }
@@ -68,13 +68,20 @@ export class TableComponent {
68
68
  this.setupDataLoading();
69
69
  this.formDefaults();
70
70
  this.originalTableLoadAction = Core.getClone(this.config.loadAction);
71
+ this.dataSource = this.data;
72
+ this.tableDataSource = new MatTableDataSource(this.dataSource);
71
73
  }
72
74
  updateTableConfiguration() {
73
75
  this.elevation = this.getElevationClass(this.config?.elevation);
74
76
  this.displayedColumns = this.tableConfigService.setColumns(this.config, this.smallScreen);
75
77
  this.displayedButtons = this.buttonService.getDisplayedButtons(this.config?.buttons, this.smallScreen, this.config?.minButtons);
76
78
  this.actionsWidth = this.tableConfigService.getActionsWidth(this.displayedButtons);
77
- this.showFilterButton = !this.config?.searchConfig;
79
+ if (this.config?.searchConfig) {
80
+ this.showFilterButton = false;
81
+ }
82
+ if (this.config.showFilterButton === false) {
83
+ this.showFilterButton = false;
84
+ }
78
85
  if (this.displayedButtons?.length > 0 && !this.displayedColumns.includes('action')) {
79
86
  this.displayedColumns.push('action');
80
87
  }
@@ -92,18 +99,27 @@ export class TableComponent {
92
99
  }
93
100
  }
94
101
  loadData(action, data) {
102
+ //if searchConfig is set, use last search
103
+ if (action.method == 'post') {
104
+ if (this.config.searchConfig) {
105
+ if (!this.lastSearch)
106
+ return;
107
+ data = this.lastSearch;
108
+ }
109
+ }
95
110
  if (action) {
96
111
  this.dataService.CallApi(action, data).subscribe((apiResponse) => {
97
112
  if (this.config.logResponse) {
98
113
  console.log(apiResponse);
99
114
  }
100
- this.dataSource = apiResponse.data;
101
- this.tableDataSource = new MatTableDataSource(apiResponse.data);
102
- this.tableDataSource.paginator = this.tablePaginator;
103
115
  if (apiResponse.success) {
116
+ this.dataSource = apiResponse.data;
104
117
  this.tableDataSource = new MatTableDataSource(apiResponse.data);
105
118
  this.tableDataSource.paginator = this.tablePaginator;
106
119
  this.dataLoaded(apiResponse.data);
120
+ if (apiResponse.message != "success" && apiResponse.message != "") {
121
+ this.messageService.toast(apiResponse.message);
122
+ }
107
123
  }
108
124
  else {
109
125
  this.messageService.toast("Error: " + apiResponse.message);
@@ -179,12 +195,12 @@ export class TableComponent {
179
195
  const button = this.getButton(buttonName);
180
196
  return this.buttonService.testVisible(button, row);
181
197
  }
182
- //Events
183
198
  searchClicked(x) {
184
199
  this.searchClick.emit(x);
200
+ this.lastSearch = x;
185
201
  if (this.config.searchConfig.searchAction) {
186
- this.config.searchConfig.searchAction.method == 'post';
187
- this.loadData(this.config.searchConfig.searchAction, x);
202
+ this.config.loadAction = Core.getClone(this.config.searchConfig.searchAction);
203
+ this.loadData(this.config.loadAction, x);
188
204
  }
189
205
  }
190
206
  tileClicked(tile) {
@@ -385,10 +401,10 @@ export class TableComponent {
385
401
  }
386
402
  }
387
403
  TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, deps: [{ token: i1.DataServiceLib }, { token: i2.MessageService }, { token: i3.BreakpointObserver }, { token: i4.MatDialog }, { token: i5.ButtonService }, { token: i6.DialogService }, { token: i7.TableConfigService }, { token: i8.ConditionService }], target: i0.ɵɵFactoryTarget.Component });
388
- TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "spa-table", inputs: { hideTitle: "hideTitle", data: "data", tileData: "tileData", config: "config", reload: "reload" }, outputs: { dataLoad: "dataLoad", refreshClick: "refreshClick", searchClick: "searchClick", createClick: "createClick", actionClick: "actionClick", inputChange: "inputChange" }, viewQueries: [{ propertyName: "tablePaginator", first: true, predicate: ["tablePaginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<!-- Search -->\r\n<spa-search\r\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\r\n</spa-search>\r\n\r\n<!-- Header -->\r\n<app-table-header\r\n [config]=\"config\" [data]=\"dataSource\" [hideTitle]=\"false\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [smallScreen]=\"smallScreen\" [hideTitle]=\"hideTitle\"\r\n [tileReload]=\"tileReload\" [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\r\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\r\n</app-table-header>\r\n\r\n\r\n<!-- Table -->\r\n<div>\r\n\r\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\r\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\r\n\r\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\r\n\r\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\r\n\r\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\r\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\r\n\r\n <!-- Rows -->\r\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\"\r\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\r\n </app-table-row>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef> Action </th>\r\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\r\n <div class=\"action-buttons-container\">\r\n\r\n <!-- Actions -->\r\n <app-table-action\r\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\r\n </app-table-action>\r\n\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\r\n </table>\r\n\r\n </div>\r\n\r\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\r\n\r\n</div>\r\n\r\n<div class=\"tin-center\">\r\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\r\n</div>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i10.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i11.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i12.SearchComponent, selector: "spa-search", inputs: ["config"], outputs: ["searchClick"] }, { kind: "component", type: i13.TableHeaderComponent, selector: "app-table-header", inputs: ["config", "hideTitle", "tableDataSource", "tileConfig", "smallScreen", "tileReload", "showFilterButton", "data", "tileData"], outputs: ["createClick", "customClick", "refreshClick", "tileClick", "tileUnClick"] }, { kind: "component", type: i14.TableRowComponent, selector: "app-table-row", inputs: ["column", "row", "config"], outputs: ["actionClick", "columnClick", "showBannerEvent"] }, { kind: "component", type: i15.TableActionComponent, selector: "app-table-action", inputs: ["displayedButtons", "config", "row"], outputs: ["actionClick"] }, { kind: "pipe", type: i16.CamelToWordsPipe, name: "camelToWords" }] });
404
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "spa-table", inputs: { hideTitle: "hideTitle", data: "data", tileData: "tileData", config: "config", reload: "reload" }, outputs: { dataLoad: "dataLoad", refreshClick: "refreshClick", searchClick: "searchClick", createClick: "createClick", actionClick: "actionClick", inputChange: "inputChange" }, viewQueries: [{ propertyName: "tablePaginator", first: true, predicate: ["tablePaginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<!-- Search -->\r\n<spa-search\r\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" [smallScreen]=\"smallScreen\" [tableDataSource]=\"tableDataSource\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\r\n</spa-search>\r\n\r\n<!-- Header -->\r\n<app-table-header\r\n [config]=\"config\" [data]=\"dataSource\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [tileReload]=\"tileReload\" [lastSearch]=\"lastSearch\" [smallScreen]=\"smallScreen\" [hideTitle]=\"hideTitle\"\r\n [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\r\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\r\n</app-table-header>\r\n\r\n\r\n<!-- Table -->\r\n<div>\r\n\r\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\r\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\r\n\r\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\r\n\r\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\r\n\r\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\r\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\r\n\r\n <!-- Rows -->\r\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\"\r\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\r\n </app-table-row>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef> Action </th>\r\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\r\n <div class=\"action-buttons-container\">\r\n\r\n <!-- Actions -->\r\n <app-table-action\r\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\r\n </app-table-action>\r\n\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\r\n </table>\r\n\r\n </div>\r\n\r\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\r\n\r\n</div>\r\n\r\n<div class=\"tin-center\">\r\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\r\n</div>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i10.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i11.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i12.SearchComponent, selector: "spa-search", inputs: ["config", "smallScreen", "tableDataSource"], outputs: ["searchClick"] }, { kind: "component", type: i13.TableHeaderComponent, selector: "app-table-header", inputs: ["lastSearch", "config", "hideTitle", "tableDataSource", "tileConfig", "smallScreen", "tileReload", "showFilterButton", "data", "tileData"], outputs: ["createClick", "customClick", "refreshClick", "tileClick", "tileUnClick"] }, { kind: "component", type: i14.TableRowComponent, selector: "app-table-row", inputs: ["column", "row", "config"], outputs: ["actionClick", "columnClick", "showBannerEvent"] }, { kind: "component", type: i15.TableActionComponent, selector: "app-table-action", inputs: ["displayedButtons", "config", "row"], outputs: ["actionClick"] }, { kind: "pipe", type: i16.CamelToWordsPipe, name: "camelToWords" }] });
389
405
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, decorators: [{
390
406
  type: Component,
391
- args: [{ selector: 'spa-table', template: "\r\n<!-- Search -->\r\n<spa-search\r\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\r\n</spa-search>\r\n\r\n<!-- Header -->\r\n<app-table-header\r\n [config]=\"config\" [data]=\"dataSource\" [hideTitle]=\"false\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [smallScreen]=\"smallScreen\" [hideTitle]=\"hideTitle\"\r\n [tileReload]=\"tileReload\" [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\r\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\r\n</app-table-header>\r\n\r\n\r\n<!-- Table -->\r\n<div>\r\n\r\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\r\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\r\n\r\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\r\n\r\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\r\n\r\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\r\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\r\n\r\n <!-- Rows -->\r\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\"\r\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\r\n </app-table-row>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef> Action </th>\r\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\r\n <div class=\"action-buttons-container\">\r\n\r\n <!-- Actions -->\r\n <app-table-action\r\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\r\n </app-table-action>\r\n\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\r\n </table>\r\n\r\n </div>\r\n\r\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\r\n\r\n</div>\r\n\r\n<div class=\"tin-center\">\r\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\r\n</div>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"] }]
407
+ args: [{ selector: 'spa-table', template: "\r\n<!-- Search -->\r\n<spa-search\r\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" [smallScreen]=\"smallScreen\" [tableDataSource]=\"tableDataSource\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\r\n</spa-search>\r\n\r\n<!-- Header -->\r\n<app-table-header\r\n [config]=\"config\" [data]=\"dataSource\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [tileReload]=\"tileReload\" [lastSearch]=\"lastSearch\" [smallScreen]=\"smallScreen\" [hideTitle]=\"hideTitle\"\r\n [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\r\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\r\n</app-table-header>\r\n\r\n\r\n<!-- Table -->\r\n<div>\r\n\r\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\r\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\r\n\r\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\r\n\r\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\r\n\r\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\r\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\r\n\r\n <!-- Rows -->\r\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\"\r\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\r\n </app-table-row>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef> Action </th>\r\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\r\n <div class=\"action-buttons-container\">\r\n\r\n <!-- Actions -->\r\n <app-table-action\r\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\r\n </app-table-action>\r\n\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\r\n </table>\r\n\r\n </div>\r\n\r\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\r\n\r\n</div>\r\n\r\n<div class=\"tin-center\">\r\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\r\n</div>\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"] }]
392
408
  }], ctorParameters: function () { return [{ type: i1.DataServiceLib }, { type: i2.MessageService }, { type: i3.BreakpointObserver }, { type: i4.MatDialog }, { type: i5.ButtonService }, { type: i6.DialogService }, { type: i7.TableConfigService }, { type: i8.ConditionService }]; }, propDecorators: { tablePaginator: [{
393
409
  type: ViewChild,
394
410
  args: ['tablePaginator']
@@ -415,4 +431,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
415
431
  }], inputChange: [{
416
432
  type: Output
417
433
  }] } });
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFzRCxVQUFVLEVBQWtDLE1BQU0sdUJBQXVCLENBQUM7QUFJdkksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXL0IsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsV0FBMkIsRUFBVSxjQUE4QixFQUFVLGtCQUFzQyxFQUFTLE1BQWlCLEVBQ3ZKLGFBQTRCLEVBQVUsYUFBNEIsRUFBVSxrQkFBc0MsRUFBVSxnQkFBa0M7UUFEcEosZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDdkosa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFB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UTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEJ1dHRvbiwgQ29sb3IsIENvbHVtbiwgRGV0YWlsc0RpYWxvZ0NvbmZpZywgRm9ybUNvbmZpZywgSWNvbiwgVGFibGVDb25maWcsIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEZXRhaWxzRGlhbG9nIH0gZnJvbSAnLi9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSwgRGV0YWlsc0RpYWxvZ1Byb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25kaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZGl0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlciwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdGFibGVDb25maWdTZXJ2aWNlOiBUYWJsZUNvbmZpZ1NlcnZpY2UsIHByaXZhdGUgY29uZGl0aW9uU2VydmljZTogQ29uZGl0aW9uU2VydmljZSApXHJcbiAge1xyXG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcbiAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSByZXN1bHQubWF0Y2hlcztcclxuICAgICAgdGhpcy51cGRhdGVUYWJsZUNvbmZpZ3VyYXRpb24oKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5jb25maWcubG9hZEFjdGlvbikge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGE7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KHRoaXMuZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMudGFibGVEYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMudGFibGVQYWdpbmF0b3I7IH0sIDEwMDApXHJcbiAgfVxyXG5cclxuXHJcbiAgZWxldmF0aW9uID0gXCJtYXQtZWxldmF0aW9uLXo1XCI7XHJcbiAgYWN0aW9uc1dpZHRoID0gXCI1MHB4XCI7XHJcbiAgc2hvd0ZpbHRlckJ1dHRvbiA9IHRydWU7XHJcbiAgdGlsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHNtYWxsU2NyZWVuID0gZmFsc2VcclxuXHJcbiAgLy9UYWJsZVxyXG4gIHRhYmxlRGF0YVNvdXJjZTtcclxuICBkYXRhU291cmNlOiBhbnlbXTtcclxuICBkaXNwbGF5ZWRDb2x1bW5zID0gW11cclxuICBkaXNwbGF5ZWRCdXR0b25zID0gW11cclxuICBvcmlnaW5hbFRhYmxlTG9hZEFjdGlvbjogQWN0aW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlUGFnaW5hdG9yJykgdGFibGVQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuXHJcbiAgQElucHV0KCkgaGlkZVRpdGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGF0YTogYW55ID0gW107XHJcbiAgQElucHV0KCkgdGlsZURhdGE6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNvbmZpZzogVGFibGVDb25maWc7XHJcbiAgQElucHV0KCkgcmVsb2FkOiBTdWJqZWN0PGJvb2xlYW4+O1xyXG4gIEBPdXRwdXQoKSBkYXRhTG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmVmcmVzaENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY3JlYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29tcG9uZW50KCkge1xyXG4gICAgdGhpcy51cGRhdGVUYWJsZUNvbmZpZ3VyYXRpb24oKTtcclxuICAgIHRoaXMuc2V0dXBEYXRhTG9hZGluZygpO1xyXG4gICAgdGhpcy5mb3JtRGVmYXVsdHMoKTtcclxuICAgIHRoaXMub3JpZ2luYWxUYWJsZUxvYWRBY3Rpb24gPSBDb3JlLmdldENsb25lKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICB0aGlzLmVsZXZhdGlvbiA9IHRoaXMuZ2V0RWxldmF0aW9uQ2xhc3ModGhpcy5jb25maWc/LmVsZXZhdGlvbik7XHJcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLnRhYmxlQ29uZmlnU2VydmljZS5zZXRDb2x1bW5zKHRoaXMuY29uZmlnLCB0aGlzLnNtYWxsU2NyZWVuKTtcclxuICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXREaXNwbGF5ZWRCdXR0b25zKHRoaXMuY29uZmlnPy5idXR0b25zLCB0aGlzLnNtYWxsU2NyZWVuLCB0aGlzLmNvbmZpZz8ubWluQnV0dG9ucyk7XHJcbiAgICB0aGlzLmFjdGlvbnNXaWR0aCA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLmdldEFjdGlvbnNXaWR0aCh0aGlzLmRpc3BsYXllZEJ1dHRvbnMpO1xyXG4gICAgdGhpcy5zaG93RmlsdGVyQnV0dG9uID0gIXRoaXMuY29uZmlnPy5zZWFyY2hDb25maWc7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzcGxheWVkQnV0dG9ucz8ubGVuZ3RoID4gMCAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKCdhY3Rpb24nKSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgnYWN0aW9uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwRGF0YUxvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9hZEFjdGlvbikge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlbG9hZCkge1xyXG4gICAgICB0aGlzLnJlbG9hZC5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgaWYgKHYgJiYgdGhpcy5jb25maWc/LmxvYWRBY3Rpb24pIHtcclxuICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcubG9hZEFjdGlvbiwgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWREYXRhKGFjdGlvbjogQWN0aW9uLCBkYXRhOiBhbnkpIHtcclxuXHJcbiAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShhY3Rpb24sIGRhdGEpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2dSZXNwb25zZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYXBpUmVzcG9uc2UpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBhcGlSZXNwb25zZS5kYXRhXHJcblxyXG4gICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KGFwaVJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMudGFibGVQYWdpbmF0b3I7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoYXBpUmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnRhYmxlUGFnaW5hdG9yO1xyXG5cclxuICAgICAgICAgIHRoaXMuZGF0YUxvYWRlZChhcGlSZXNwb25zZS5kYXRhKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGlucHV0Q2hhbmdlZChldmVudCkge1xyXG4gICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHsgZmllbGQ6IGV2ZW50LmZpZWxkLCB2YWx1ZTogZXZlbnQudmFsdWUgfSlcclxuICB9XHJcblxyXG4gIGZvcm1EZWZhdWx0cygpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmZvcm1Db25maWcpIHtcclxuICAgICAgbGV0IGNvbmZpZyA9IG5ldyBGb3JtQ29uZmlnXHJcblxyXG4gICAgICBjb25maWcuZmllbGRzID0gW11cclxuXHJcbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG5cclxuICAgICAgICBsZXQgZmllbGQgPSB7IG5hbWU6IGNvbHVtbi5uYW1lLCB0eXBlOiBjb2x1bW4udHlwZSB9XHJcbiAgICAgICAgY29uZmlnLmZpZWxkcy5wdXNoKGZpZWxkKVxyXG5cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZy5mb3JtQ29uZmlnID0gY29uZmlnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Q29sdW1ucygpIHtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLnNldENvbHVtbnModGhpcy5jb25maWcsIHRoaXMuc21hbGxTY3JlZW4pO1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5idXR0b25TZXJ2aWNlLmdldERpc3BsYXllZEJ1dHRvbnModGhpcy5jb25maWcuYnV0dG9ucywgdGhpcy5zbWFsbFNjcmVlbiwgdGhpcy5jb25maWcubWluQnV0dG9ucyk7XHJcbiAgICB0aGlzLmFjdGlvbnNXaWR0aCA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLmdldEFjdGlvbnNXaWR0aCh0aGlzLmRpc3BsYXllZEJ1dHRvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRpc3BsYXllZEJ1dHRvbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKCdhY3Rpb24nKSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgnYWN0aW9uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRCdXR0b25zKCl7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJ1dHRvbnMpIHJldHVyblxyXG4gICAgaWYgKCF0aGlzLnNtYWxsU2NyZWVuKXtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucztcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmRpc3BsYXllZEJ1dHRvbnMgPSB0aGlzLmNvbmZpZy5idXR0b25zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uKG5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b24odGhpcy5jb25maWcuYnV0dG9ucywgbmFtZSk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKGJ1dHRvbk5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEljb24oYnV0dG9uLCB0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93KSB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KTtcclxuICB9XHJcblxyXG4gIGdldE9wdGlvbnMoY29sdW1uKXtcclxuICAgIGxldCB4ID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKG9wdCA9PiBvcHQubmFtZSA9PT0gY29sdW1uKTtcclxuICAgIHJldHVybiAgeFxyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3IodmFsdWU6IGFueSwgb3B0aW9uczogYW55W10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU2VydmljZS5nZXRDb2xvcih2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB0ZXN0SWNvbkNvbmRpdGlvbihyb3c6IGFueSwgaWNvbjogSWNvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU2VydmljZS50ZXN0SWNvbkNvbmRpdGlvbihpY29uLCByb3cpO1xyXG4gIH1cclxuXHJcbiAgdGVzdENvbG9yQ29uZGl0aW9uKHJvdzogYW55LCBjb2xvcjogQ29sb3IpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblNlcnZpY2UudGVzdENvbG9yQ29uZGl0aW9uKGNvbG9yLCByb3cpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0Jhbm5lcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIGlmIChtZXNzYWdlICYmIG1lc3NhZ2UgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mbyhtZXNzYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRlc3REaXNhYmxlZChyb3csIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3REaXNhYmxlZChidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuICB0ZXN0VmlzaWJsZShyb3csIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3RWaXNpYmxlKGJ1dHRvbiwgcm93KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy9FdmVudHNcclxuICBzZWFyY2hDbGlja2VkKHgpe1xyXG4gICAgdGhpcy5zZWFyY2hDbGljay5lbWl0KHgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5zZWFyY2hDb25maWcuc2VhcmNoQWN0aW9uKXtcclxuICAgICAgdGhpcy5jb25maWcuc2VhcmNoQ29uZmlnLnNlYXJjaEFjdGlvbi5tZXRob2QgPT0gJ3Bvc3QnXHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcuc2VhcmNoQ29uZmlnLnNlYXJjaEFjdGlvbiwgeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aWxlQ2xpY2tlZCh0aWxlKXtcclxuICAgIHRoaXMuY29uZmlnLmxvYWRBY3Rpb24gPSBDb3JlLmdldENsb25lKHRpbGUuZGF0YS5hY3Rpb24pO1xyXG4gICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xyXG4gIH1cclxuXHJcbiAgdGlsZVVuQ2xpY2tlZCh0aWxlKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5sb2FkQWN0aW9uID0gQ29yZS5nZXRDbG9uZSh0aGlzLm9yaWdpbmFsVGFibGVMb2FkQWN0aW9uKTtcclxuICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDbGlja2VkKCkge1xyXG4gICAgdGhpcy5yZWZyZXNoQ2xpY2suZW1pdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcubG9hZEFjdGlvbixcIlwiKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmRhdGFMb2FkLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGFMb2FkZWQoeCkge1xyXG4gICAgdGhpcy5kYXRhTG9hZC5lbWl0KHgpXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLnRpbGVDb25maWc/LmxvYWRBY3Rpb24pIHtcclxuICAgICAgdGhpcy50aWxlUmVsb2FkLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25DbGlja2VkKG5hbWU6IHN0cmluZywgcm93OiBhbnkpIHtcclxuICAgIGlmIChuYW1lID09PSAndmlldycpIHtcclxuICAgICAgdGhpcy52aWV3TW9kZWwocm93KTtcclxuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2VkaXQnKSB7XHJcbiAgICAgIHRoaXMuZWRpdE1vZGVsKHJvdyk7XHJcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdkZWxldGUnKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlTW9kZWwocm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tTW9kZWwobmFtZSwgcm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvL0RpYWxvZyBldmVudHNcclxuICBjb2x1bW5DbGlja2VkKGNvbHVtbiA6IENvbHVtbiwgcm93KXtcclxuICAgIGlmIChjb2x1bW4uZGV0YWlsc0NvbmZpZykge1xyXG4gICAgICB0aGlzLm9wZW4oY29sdW1uLm5hbWUsIHJvdywgY29sdW1uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoY29sdW1uLm5hbWUsIHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjdXN0b21Nb2RlbChuYW1lLCByb3cpIHtcclxuICAgIHRoaXMub3BlbihuYW1lLCByb3cpO1xyXG4gIH1cclxuXHJcblxyXG4gIGFjdGlvbkNsaWNrZWRFbWl0KG5hbWUsIHJvdykge1xyXG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHtuYW1lOm5hbWUsZGF0YSA6IHJvd30pO1xyXG4gIH1cclxuXHJcbiAgdmlld01vZGVsKHJvdykge1xyXG4gICAgdGhpcy5vcGVuKCd2aWV3Jywgcm93KTtcclxuICB9XHJcblxyXG4gIG5ld01vZGVsKCkge1xyXG4gICAgdGhpcy5vcGVuKCdjcmVhdGUnLCBudWxsKTtcclxuICB9XHJcblxyXG4gIGVkaXRNb2RlbChyb3cpIHtcclxuICAgIHRoaXMub3BlbignZWRpdCcsIHJvdyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW4oYnV0dG9uTmFtZTogc3RyaW5nLCByb3c6IGFueSB8IG51bGwsIGNvbHVtbj86IENvbHVtbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5Db25maWd1cmVkRGV0YWlsc0RpYWxvZyggYnV0dG9uTmFtZSwgcm93LCB0aGlzLmNvbmZpZywgRGV0YWlsc0RpYWxvZywgY29sdW1uICkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSAnZG9BY3Rpb24nKSB7XHJcbiAgICAgICAgdGhpcy5kb0FjdGlvbihyZXN1bHQubmFtZSwgcmVzdWx0LnJvdyk7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChyZXN1bHQubmFtZSwgcmVzdWx0LnJvdyk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ2lucHV0Q2hhbmdlJykge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKHJlc3VsdC5jaGFuZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5tZXNzYWdlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbk5hbWUsIHJlc3VsdC5kYXRhKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hDbGlja2VkKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdlbWl0Jykge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoYnV0dG9uTmFtZSwgcmVzdWx0LmRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlbkRldGFpbHNEaWFsb2coYnV0dG9uTmFtZTogc3RyaW5nLCByb3c6IGFueSB8IG51bGwsIGNvbHVtbj86IENvbHVtbik6IHZvaWQge1xyXG4gICAgY29uc3QgYnV0dG9uID0gY29sdW1uID8geyBuYW1lOiBjb2x1bW4ubmFtZSwgZGlhbG9nOiB0cnVlLCBkZXRhaWxzQ29uZmlnOiBjb2x1bW4uZGV0YWlsc0NvbmZpZyB9IDogdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xyXG5cclxuICAgIGlmICghYnV0dG9uLmRpYWxvZykge1xyXG4gICAgICB0aGlzLmRvQWN0aW9uKGJ1dHRvbi5uYW1lLCByb3cpXHJcbiAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoYnV0dG9uLm5hbWUsIHJvdyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmZvcm1Db25maWcgJiYgIWJ1dHRvbi5kZXRhaWxzQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgY29uZmlndXJlIGZvcm1cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29uZjogRGV0YWlsc0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZm9ybUNvbmZpZzogdGhpcy5jb25maWcuZm9ybUNvbmZpZyxcclxuICAgICAgYnV0dG9uczogdGhpcy5jb25maWcuYnV0dG9ucyxcclxuICAgICAgZGV0YWlsczogcm93LFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoYnV0dG9uLmRldGFpbHNDb25maWcpIHtcclxuICAgICAgY29uZiA9IGJ1dHRvbk5hbWUgPT09ICdjcmVhdGUnXHJcbiAgICAgICAgPyBidXR0b24uZGV0YWlsc0NvbmZpZ1xyXG4gICAgICAgIDogRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5wcm9jZXNzRGV0YWlsc0NvbmZpZyhidXR0b24uZGV0YWlsc0NvbmZpZywgcm93KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKGJ1dHRvbi5kZXRhaWxzQ29uZmlnICYmIGJ1dHRvbi5kZXRhaWxzQ29uZmlnLm1vZGUpIHtcclxuICAgICAgY29uZi5mb3JtQ29uZmlnLm1vZGUgPSBidXR0b24uZGV0YWlsc0NvbmZpZy5tb2RlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbmYuZm9ybUNvbmZpZy5tb2RlID0gYnV0dG9uTmFtZSA9PT0gJ2NyZWF0ZScgPyAnY3JlYXRlJyA6IChidXR0b25OYW1lID09PSAnZWRpdCcgPyAnZWRpdCcgOiAndmlldycpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoY29uZi5mb3JtQ29uZmlnLm1vZGUgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAgIGNvbmYuaGVyb0ZpZWxkID0gdGhpcy5jb25maWc/Lmhlcm9GaWVsZDtcclxuICAgICAgY29uZi5oZXJvVmFsdWUgPSB0aGlzLmNvbmZpZz8uaGVyb1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuRGV0YWlsc0RpYWxvZyhjb25mLCBEZXRhaWxzRGlhbG9nKTtcclxuXHJcbiAgICBpZiAoYnV0dG9uTmFtZSA9PT0gJ2VkaXQnKSB7XHJcbiAgICAgIGRpYWxvZ1Jlc3VsdC5pbnB1dENoYW5nZS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlZCh4KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlhbG9nUmVzdWx0LmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChidXR0b24ubmFtZSwgcmVzdWx0LmRhdGEpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQubWVzc2FnZSA9PT0gJ2VtaXQnKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChidXR0b24ubmFtZSwgcmVzdWx0LmRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZU1vZGVsKHJvdykge1xyXG5cclxuICAgIGxldCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbignZGVsZXRlJyk7XHJcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShgREVMRVRFID9gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KCdkZWxldGUnLCByb3cpXHJcbiAgICAgICAgdGhpcy5kb0FjdGlvbihidXR0b24ubmFtZSxyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9BY3Rpb25zXHJcbiAgZG9BY3Rpb24oYnV0dG9uTmFtZTogc3RyaW5nLCByb3cpIHtcclxuXHJcbiAgICBsZXQgYiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpXHJcblxyXG4gICAgaWYgKCFiKSByZXR1cm47XHJcbiAgICBpZiAoIWIuYWN0aW9uKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGIuc2V0SGVyb0ZpZWxkICYmIHRoaXMuY29uZmlnLmhlcm9WYWx1ZSkge1xyXG4gICAgICByb3dbdGhpcy5jb25maWcuaGVyb0ZpZWxkXSA9IHRoaXMuY29uZmlnLmhlcm9WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYi5jb25maXJtKXtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGAke2IuY29uZmlybS5tZXNzYWdlfWApLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWNBY3Rpb24oYixyb3cpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmV4ZWNBY3Rpb24oYiwgcm93KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGV4ZWNBY3Rpb24oYjogQnV0dG9uLCByb3cpe1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGIuYWN0aW9uLCByb3cpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKGIuYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGIuYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlVwZGF0ZWRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlZnJlc2hDbGlja2VkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vTWlzY1xyXG4gIHByaXZhdGUgZ2V0RWxldmF0aW9uQ2xhc3MoZWxldmF0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGlmIChlbGV2YXRpb24gPT0gXCJub25lXCIpe1xyXG4gICAgICByZXR1cm4gXCJcIlxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZWxldmF0aW9uID09IFwibG93XCIpe1xyXG4gICAgICByZXR1cm4gXCJtYXQtZWxldmF0aW9uLXoxXCJcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVsZXZhdGlvbiA9PSBcIm1lZGl1bVwiKXtcclxuICAgICAgcmV0dXJuIFwibWF0LWVsZXZhdGlvbi16NVwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlbGV2YXRpb24gPT0gXCJoaWdoXCIpe1xyXG4gICAgICByZXR1cm4gXCJtYXQtZWxldmF0aW9uLXo5XCJcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejVcIlxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG59XHJcbiIsIlxyXG48IS0tIFNlYXJjaCAtLT5cclxuPHNwYS1zZWFyY2hcclxuICAqbmdJZj1cImNvbmZpZy5zZWFyY2hDb25maWdcIiBbY29uZmlnXT1cImNvbmZpZy5zZWFyY2hDb25maWdcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7XCIgKHNlYXJjaENsaWNrKT1cInNlYXJjaENsaWNrZWQoJGV2ZW50KVwiPlxyXG48L3NwYS1zZWFyY2g+XHJcblxyXG48IS0tIEhlYWRlciAtLT5cclxuPGFwcC10YWJsZS1oZWFkZXJcclxuICBbY29uZmlnXT1cImNvbmZpZ1wiIFtkYXRhXT1cImRhdGFTb3VyY2VcIiBbaGlkZVRpdGxlXT1cImZhbHNlXCIgW3RhYmxlRGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiBbdGlsZUNvbmZpZ109XCJjb25maWcudGlsZUNvbmZpZ1wiIFt0aWxlRGF0YV09XCJ0aWxlRGF0YVwiIFtzbWFsbFNjcmVlbl09XCJzbWFsbFNjcmVlblwiIFtoaWRlVGl0bGVdPVwiaGlkZVRpdGxlXCJcclxuICBbdGlsZVJlbG9hZF09XCJ0aWxlUmVsb2FkXCIgW3Nob3dGaWx0ZXJCdXR0b25dPVwic2hvd0ZpbHRlckJ1dHRvblwiIChjcmVhdGVDbGljayk9XCJuZXdNb2RlbCgpXCIgKGN1c3RvbUNsaWNrKT1cImN1c3RvbU1vZGVsKCRldmVudCxudWxsKVwiXHJcbiAgKHJlZnJlc2hDbGljayk9XCJyZWZyZXNoQ2xpY2tlZCgpXCIgKHRpbGVDbGljayk9XCJ0aWxlQ2xpY2tlZCgkZXZlbnQpXCIgKHRpbGVVbkNsaWNrKT1cInRpbGVVbkNsaWNrZWQoJGV2ZW50KVwiPlxyXG48L2FwcC10YWJsZS1oZWFkZXI+XHJcblxyXG5cclxuPCEtLSBUYWJsZSAtLT5cclxuPGRpdj5cclxuXHJcbiAgPHAgKm5nSWY9XCIhY29uZmlnXCI+PGVtPkNvbmZpZ3VyZSBUYWJsZTwvZW0+PC9wPlxyXG4gIDxwICpuZ0lmPVwiIWRhdGFTb3VyY2VcIj48ZW0+TG9hZGluZy4uLjwvZW0+PC9wPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiAoIXNtYWxsU2NyZWVuIHx8IChzbWFsbFNjcmVlbiAmJiBkYXRhU291cmNlPy5sZW5ndGggPiAwKSlcIj5cclxuXHJcbiAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInRhYmxlRGF0YVNvdXJjZVwiICBbbmdDbGFzc109XCJlbGV2YXRpb25cIj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb25maWcuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIj5cclxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmID57eyBjb2x1bW4uYWxpYXMgPz8gY29sdW1uLm5hbWUgfCBjYW1lbFRvV29yZHMgfX08L3RoPlxyXG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7XCIgY2xhc3M9XCJyaWdodC1wYWRkaW5nXCIgPlxyXG5cclxuICAgICAgICAgIDwhLS0gUm93cyAtLT5cclxuICAgICAgICAgIDxhcHAtdGFibGUtcm93IFtjb2x1bW5dPVwiY29sdW1uXCIgW3Jvd109XCJyb3dcIiBbY29uZmlnXT1cImNvbmZpZ1wiXHJcbiAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGlja2VkKGNvbHVtbi5uYW1lLCByb3cpXCIgKGNvbHVtbkNsaWNrKT1cImNvbHVtbkNsaWNrZWQoY29sdW1uLCByb3cpXCIgKHNob3dCYW5uZXJFdmVudCk9XCJzaG93QmFubmVyKCRldmVudClcIj5cclxuICAgICAgICAgIDwvYXBwLXRhYmxlLXJvdz5cclxuXHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvblwiPlxyXG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IEFjdGlvbiA8L3RoPlxyXG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbbmdTdHlsZV09XCJ7d2lkdGg6ZmFsc2UgPyAnNTBweCcgOiBhY3Rpb25zV2lkdGh9XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMtY29udGFpbmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgICAgICAgICAgIDxhcHAtdGFibGUtYWN0aW9uXHJcbiAgICAgICAgICAgICAgW2Rpc3BsYXllZEJ1dHRvbnNdPVwiZGlzcGxheWVkQnV0dG9uc1wiIFtjb25maWddPVwiY29uZmlnXCIgW3Jvd109XCJyb3dcIiAoYWN0aW9uQ2xpY2spPVwiYWN0aW9uQ2xpY2tlZCgkZXZlbnQubmFtZSwgJGV2ZW50LnJvdylcIj5cclxuICAgICAgICAgICAgPC9hcHAtdGFibGUtYWN0aW9uPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiIFtuZ0NsYXNzXT1cInsnbWFrZS1ncmF5JzogY29uZmlnLmdyZXlPdXQgJiYgY29uZmlnLmdyZXlPdXQocm93KX1cIj48L3RyPlxyXG4gICAgPC90YWJsZT5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiAoIXNtYWxsU2NyZWVuIHx8IChzbWFsbFNjcmVlbiAmJiBkYXRhU291cmNlPy5sZW5ndGggPiAwKSlcIiAjdGFibGVQYWdpbmF0b3IgW3BhZ2VTaXplT3B0aW9uc109XCJjb25maWcucGFnZVNpemVzID8/IFsxMCwgMjAsIDUwXVwiIHNob3dGaXJzdExhc3RCdXR0b25zPjwvbWF0LXBhZ2luYXRvcj5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInRpbi1jZW50ZXJcIj5cclxuICA8cCAqbmdJZj1cImRhdGFTb3VyY2U/Lmxlbmd0aCA9PSAwXCI+PGVtPnt7Y29uZmlnLm5vRGF0YU1lc3NhZ2UgPz8gJ05vIERhdGEnfX08L2VtPjwvcD5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcbiJdfQ==
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFzRCxVQUFVLEVBQWtDLE1BQU0sdUJBQXVCLENBQUM7QUFJdkksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXL0IsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsV0FBMkIsRUFBVSxjQUE4QixFQUFVLGtCQUFzQyxFQUFTLE1BQWlCLEVBQ3ZKLGFBQTRCLEVBQVUsYUFBNEIsRUFBVSxrQkFBc0MsRUFBVSxnQkFBa0M7UUFEcEosZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDdkosa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFB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QUFpQjtRQUV6QyxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUM7WUFDdEIsT0FBTyxFQUFFLENBQUE7U0FDVjthQUNJLElBQUksU0FBUyxJQUFJLEtBQUssRUFBQztZQUMxQixPQUFPLGtCQUFrQixDQUFBO1NBQzFCO2FBQ0ksSUFBSSxTQUFTLElBQUksUUFBUSxFQUFDO1lBQzdCLE9BQU8sa0JBQWtCLENBQUE7U0FDMUI7YUFDSSxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUM7WUFDM0IsT0FBTyxrQkFBa0IsQ0FBQTtTQUMxQjthQUNHO1lBQ0YsT0FBTyxrQkFBa0IsQ0FBQTtTQUMxQjtJQUVILENBQUM7OzJHQWxkVSxjQUFjOytGQUFkLGNBQWMscWRDckIzQixzN0ZBbUVBOzJGRDlDYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7bVRBNkNRLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUVsQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEJ1dHRvbiwgQ29sb3IsIENvbHVtbiwgRGV0YWlsc0RpYWxvZ0NvbmZpZywgRm9ybUNvbmZpZywgSWNvbiwgVGFibGVDb25maWcsIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEZXRhaWxzRGlhbG9nIH0gZnJvbSAnLi9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSwgRGV0YWlsc0RpYWxvZ1Byb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25kaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZGl0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlciwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdGFibGVDb25maWdTZXJ2aWNlOiBUYWJsZUNvbmZpZ1NlcnZpY2UsIHByaXZhdGUgY29uZGl0aW9uU2VydmljZTogQ29uZGl0aW9uU2VydmljZSApXHJcbiAge1xyXG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcbiAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSByZXN1bHQubWF0Y2hlcztcclxuICAgICAgdGhpcy51cGRhdGVUYWJsZUNvbmZpZ3VyYXRpb24oKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5jb25maWcubG9hZEFjdGlvbiAmJiAhdGhpcy5jb25maWcuc2VhcmNoQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YTtcclxuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4odGhpcy5kYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy50YWJsZVBhZ2luYXRvcjsgfSwgMTAwMClcclxuICB9XHJcblxyXG5cclxuICBlbGV2YXRpb24gPSBcIm1hdC1lbGV2YXRpb24tejVcIjtcclxuICBhY3Rpb25zV2lkdGggPSBcIjUwcHhcIjtcclxuICBzaG93RmlsdGVyQnV0dG9uID0gdHJ1ZTtcclxuICB0aWxlUmVsb2FkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgc21hbGxTY3JlZW4gPSBmYWxzZVxyXG5cclxuICAvL1RhYmxlXHJcbiAgdGFibGVEYXRhU291cmNlO1xyXG4gIGRhdGFTb3VyY2U6IGFueVtdO1xyXG4gIGRpc3BsYXllZENvbHVtbnMgPSBbXVxyXG4gIGRpc3BsYXllZEJ1dHRvbnMgPSBbXVxyXG4gIG9yaWdpbmFsVGFibGVMb2FkQWN0aW9uOiBBY3Rpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGVQYWdpbmF0b3InKSB0YWJsZVBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICBASW5wdXQoKSBoaWRlVGl0bGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSB0aWxlRGF0YTogYW55ID0gW107XHJcbiAgQElucHV0KCkgY29uZmlnOiBUYWJsZUNvbmZpZztcclxuICBASW5wdXQoKSByZWxvYWQ6IFN1YmplY3Q8Ym9vbGVhbj47XHJcbiAgQE91dHB1dCgpIGRhdGFMb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByZWZyZXNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlYXJjaENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVDb21wb25lbnQoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVRhYmxlQ29uZmlndXJhdGlvbigpO1xyXG4gICAgdGhpcy5zZXR1cERhdGFMb2FkaW5nKCk7XHJcbiAgICB0aGlzLmZvcm1EZWZhdWx0cygpO1xyXG4gICAgdGhpcy5vcmlnaW5hbFRhYmxlTG9hZEFjdGlvbiA9IENvcmUuZ2V0Q2xvbmUodGhpcy5jb25maWcubG9hZEFjdGlvbik7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGE7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55Pih0aGlzLmRhdGFTb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICB0aGlzLmVsZXZhdGlvbiA9IHRoaXMuZ2V0RWxldmF0aW9uQ2xhc3ModGhpcy5jb25maWc/LmVsZXZhdGlvbik7XHJcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLnRhYmxlQ29uZmlnU2VydmljZS5zZXRDb2x1bW5zKHRoaXMuY29uZmlnLCB0aGlzLnNtYWxsU2NyZWVuKTtcclxuICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXREaXNwbGF5ZWRCdXR0b25zKHRoaXMuY29uZmlnPy5idXR0b25zLCB0aGlzLnNtYWxsU2NyZWVuLCB0aGlzLmNvbmZpZz8ubWluQnV0dG9ucyk7XHJcbiAgICB0aGlzLmFjdGlvbnNXaWR0aCA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLmdldEFjdGlvbnNXaWR0aCh0aGlzLmRpc3BsYXllZEJ1dHRvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlckJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5zaG93RmlsdGVyQnV0dG9uID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXJCdXR0b24gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuZGlzcGxheWVkQnV0dG9ucz8ubGVuZ3RoID4gMCAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKCdhY3Rpb24nKSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgnYWN0aW9uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwRGF0YUxvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9hZEFjdGlvbikge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlbG9hZCkge1xyXG4gICAgICB0aGlzLnJlbG9hZC5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgaWYgKHYgJiYgdGhpcy5jb25maWc/LmxvYWRBY3Rpb24pIHtcclxuICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcubG9hZEFjdGlvbiwgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWREYXRhKGFjdGlvbjogQWN0aW9uLCBkYXRhOiBhbnkpIHtcclxuXHJcbiAgICAvL2lmIHNlYXJjaENvbmZpZyBpcyBzZXQsIHVzZSBsYXN0IHNlYXJjaFxyXG5cclxuXHJcbiAgICBpZiAoYWN0aW9uLm1ldGhvZCA9PSAncG9zdCcpIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNlYXJjaENvbmZpZykge1xyXG4gICAgICAgIGlmICghdGhpcy5sYXN0U2VhcmNoKSByZXR1cm47XHJcbiAgICAgICAgZGF0YSA9IHRoaXMubGFzdFNlYXJjaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoYWN0aW9uKSB7XHJcblxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYWN0aW9uLCBkYXRhKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWcubG9nUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGFwaVJlc3BvbnNlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGFwaVJlc3BvbnNlLmRhdGFcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShhcGlSZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMudGFibGVQYWdpbmF0b3I7XHJcblxyXG4gICAgICAgICAgdGhpcy5kYXRhTG9hZGVkKGFwaVJlc3BvbnNlLmRhdGEpO1xyXG5cclxuICAgICAgICAgIGlmIChhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwic3VjY2Vzc1wiICYmIGFwaVJlc3BvbnNlLm1lc3NhZ2UgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBpbnB1dENoYW5nZWQoZXZlbnQpIHtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh7IGZpZWxkOiBldmVudC5maWVsZCwgdmFsdWU6IGV2ZW50LnZhbHVlIH0pXHJcbiAgfVxyXG5cclxuICBmb3JtRGVmYXVsdHMoKSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5mb3JtQ29uZmlnKSB7XHJcbiAgICAgIGxldCBjb25maWcgPSBuZXcgRm9ybUNvbmZpZ1xyXG5cclxuICAgICAgY29uZmlnLmZpZWxkcyA9IFtdXHJcblxyXG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGZpZWxkID0geyBuYW1lOiBjb2x1bW4ubmFtZSwgdHlwZTogY29sdW1uLnR5cGUgfVxyXG4gICAgICAgIGNvbmZpZy5maWVsZHMucHVzaChmaWVsZClcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb25maWcuZm9ybUNvbmZpZyA9IGNvbmZpZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLnRhYmxlQ29uZmlnU2VydmljZS5zZXRDb2x1bW5zKHRoaXMuY29uZmlnLCB0aGlzLnNtYWxsU2NyZWVuKTtcclxuICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXREaXNwbGF5ZWRCdXR0b25zKHRoaXMuY29uZmlnLmJ1dHRvbnMsIHRoaXMuc21hbGxTY3JlZW4sIHRoaXMuY29uZmlnLm1pbkJ1dHRvbnMpO1xyXG4gICAgdGhpcy5hY3Rpb25zV2lkdGggPSB0aGlzLnRhYmxlQ29uZmlnU2VydmljZS5nZXRBY3Rpb25zV2lkdGgodGhpcy5kaXNwbGF5ZWRCdXR0b25zKTtcclxuXHJcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRCdXR0b25zLmxlbmd0aCA+IDAgJiYgIXRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmNsdWRlcygnYWN0aW9uJykpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ2FjdGlvbicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0QnV0dG9ucygpe1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5idXR0b25zKSByZXR1cm5cclxuICAgIGlmICghdGhpcy5zbWFsbFNjcmVlbil7XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuY29uZmlnLmJ1dHRvbnM7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0QnV0dG9uKHRoaXMuY29uZmlnLmJ1dHRvbnMsIG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbihidXR0b25OYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRJY29uKGJ1dHRvbiwgdGhpcy5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRPcHRpb25zKGNvbHVtbil7XHJcbiAgICBsZXQgeCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChvcHQgPT4gb3B0Lm5hbWUgPT09IGNvbHVtbik7XHJcbiAgICByZXR1cm4gIHhcclxuICB9XHJcblxyXG4gIGdldENvbG9yKHZhbHVlOiBhbnksIG9wdGlvbnM6IGFueVtdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblNlcnZpY2UuZ2V0Q29sb3IodmFsdWUsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdGVzdEljb25Db25kaXRpb24ocm93OiBhbnksIGljb246IEljb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblNlcnZpY2UudGVzdEljb25Db25kaXRpb24oaWNvbiwgcm93KTtcclxuICB9XHJcblxyXG4gIHRlc3RDb2xvckNvbmRpdGlvbihyb3c6IGFueSwgY29sb3I6IENvbG9yKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TZXJ2aWNlLnRlc3RDb2xvckNvbmRpdGlvbihjb2xvciwgcm93KTtcclxuICB9XHJcblxyXG4gIHNob3dCYW5uZXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICBpZiAobWVzc2FnZSAmJiBtZXNzYWdlICE9PSAnJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm8obWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFZpc2libGUocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZShidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vRXZlbnRzXHJcbiAgbGFzdFNlYXJjaFxyXG4gIHNlYXJjaENsaWNrZWQoeCl7XHJcbiAgICB0aGlzLnNlYXJjaENsaWNrLmVtaXQoeCk7XHJcbiAgICB0aGlzLmxhc3RTZWFyY2ggPSB4O1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5zZWFyY2hDb25maWcuc2VhcmNoQWN0aW9uKXtcclxuICAgICAgdGhpcy5jb25maWcubG9hZEFjdGlvbiA9IENvcmUuZ2V0Q2xvbmUodGhpcy5jb25maWcuc2VhcmNoQ29uZmlnLnNlYXJjaEFjdGlvbik7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcubG9hZEFjdGlvbiwgeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aWxlQ2xpY2tlZCh0aWxlKXtcclxuICAgIHRoaXMuY29uZmlnLmxvYWRBY3Rpb24gPSBDb3JlLmdldENsb25lKHRpbGUuZGF0YS5hY3Rpb24pO1xyXG4gICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xyXG4gIH1cclxuXHJcbiAgdGlsZVVuQ2xpY2tlZCh0aWxlKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5sb2FkQWN0aW9uID0gQ29yZS5nZXRDbG9uZSh0aGlzLm9yaWdpbmFsVGFibGVMb2FkQWN0aW9uKTtcclxuICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDbGlja2VkKCkge1xyXG4gICAgdGhpcy5yZWZyZXNoQ2xpY2suZW1pdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKSB7XHJcblxyXG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sXCJcIik7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kYXRhTG9hZC5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRhTG9hZGVkKHgpIHtcclxuICAgIHRoaXMuZGF0YUxvYWQuZW1pdCh4KVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy50aWxlQ29uZmlnPy5sb2FkQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMudGlsZVJlbG9hZC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFjdGlvbkNsaWNrZWQobmFtZTogc3RyaW5nLCByb3c6IGFueSkge1xyXG4gICAgaWYgKG5hbWUgPT09ICd2aWV3Jykge1xyXG4gICAgICB0aGlzLnZpZXdNb2RlbChyb3cpO1xyXG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnZWRpdCcpIHtcclxuICAgICAgdGhpcy5lZGl0TW9kZWwocm93KTtcclxuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2RlbGV0ZScpIHtcclxuICAgICAgdGhpcy5kZWxldGVNb2RlbChyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXN0b21Nb2RlbChuYW1lLCByb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vRGlhbG9nIGV2ZW50c1xyXG4gIGNvbHVtbkNsaWNrZWQoY29sdW1uIDogQ29sdW1uLCByb3cpe1xyXG4gICAgaWYgKGNvbHVtbi5kZXRhaWxzQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMub3Blbihjb2x1bW4ubmFtZSwgcm93LCBjb2x1bW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChjb2x1bW4ubmFtZSwgcm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGN1c3RvbU1vZGVsKG5hbWUsIHJvdykge1xyXG4gICAgdGhpcy5vcGVuKG5hbWUsIHJvdyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWN0aW9uQ2xpY2tlZEVtaXQobmFtZSwgcm93KSB7XHJcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoe25hbWU6bmFtZSxkYXRhIDogcm93fSk7XHJcbiAgfVxyXG5cclxuICB2aWV3TW9kZWwocm93KSB7XHJcbiAgICB0aGlzLm9wZW4oJ3ZpZXcnLCByb3cpO1xyXG4gIH1cclxuXHJcbiAgbmV3TW9kZWwoKSB7XHJcbiAgICB0aGlzLm9wZW4oJ2NyZWF0ZScsIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgZWRpdE1vZGVsKHJvdykge1xyXG4gICAgdGhpcy5vcGVuKCdlZGl0Jywgcm93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlbihidXR0b25OYW1lOiBzdHJpbmcsIHJvdzogYW55IHwgbnVsbCwgY29sdW1uPzogQ29sdW1uKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyZWREZXRhaWxzRGlhbG9nKCBidXR0b25OYW1lLCByb3csIHRoaXMuY29uZmlnLCBEZXRhaWxzRGlhbG9nLCBjb2x1bW4gKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT09ICdkb0FjdGlvbicpIHtcclxuICAgICAgICB0aGlzLmRvQWN0aW9uKHJlc3VsdC5uYW1lLCByZXN1bHQucm93KTtcclxuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KHJlc3VsdC5uYW1lLCByZXN1bHQucm93KTtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuYWN0aW9uID09PSAnaW5wdXRDaGFuZ2UnKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZWQocmVzdWx0LmNoYW5nZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoYnV0dG9uTmFtZSwgcmVzdWx0LmRhdGEpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQubWVzc2FnZSA9PT0gJ2VtaXQnKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChidXR0b25OYW1lLCByZXN1bHQuZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRGV0YWlsc0RpYWxvZyhidXR0b25OYW1lOiBzdHJpbmcsIHJvdzogYW55IHwgbnVsbCwgY29sdW1uPzogQ29sdW1uKTogdm9pZCB7XHJcbiAgICBjb25zdCBidXR0b24gPSBjb2x1bW4gPyB7IG5hbWU6IGNvbHVtbi5uYW1lLCBkaWFsb2c6IHRydWUsIGRldGFpbHNDb25maWc6IGNvbHVtbi5kZXRhaWxzQ29uZmlnIH0gOiB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFidXR0b24uZGlhbG9nKSB7XHJcbiAgICAgIHRoaXMuZG9BY3Rpb24oYnV0dG9uLm5hbWUsIHJvdylcclxuICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChidXR0b24ubmFtZSwgcm93KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5jb25maWcuZm9ybUNvbmZpZyAmJiAhYnV0dG9uLmRldGFpbHNDb25maWcpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBsZWFzZSBjb25maWd1cmUgZm9ybVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb25mOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICBmb3JtQ29uZmlnOiB0aGlzLmNvbmZpZy5mb3JtQ29uZmlnLFxyXG4gICAgICBidXR0b25zOiB0aGlzLmNvbmZpZy5idXR0b25zLFxyXG4gICAgICBkZXRhaWxzOiByb3csXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChidXR0b24uZGV0YWlsc0NvbmZpZykge1xyXG4gICAgICBjb25mID0gYnV0dG9uTmFtZSA9PT0gJ2NyZWF0ZSdcclxuICAgICAgICA/IGJ1dHRvbi5kZXRhaWxzQ29uZmlnXHJcbiAgICAgICAgOiBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLnByb2Nlc3NEZXRhaWxzQ29uZmlnKGJ1dHRvbi5kZXRhaWxzQ29uZmlnLCByb3cpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoYnV0dG9uLmRldGFpbHNDb25maWcgJiYgYnV0dG9uLmRldGFpbHNDb25maWcubW9kZSkge1xyXG4gICAgICBjb25mLmZvcm1Db25maWcubW9kZSA9IGJ1dHRvbi5kZXRhaWxzQ29uZmlnLm1vZGU7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uZi5mb3JtQ29uZmlnLm1vZGUgPSBidXR0b25OYW1lID09PSAnY3JlYXRlJyA/ICdjcmVhdGUnIDogKGJ1dHRvbk5hbWUgPT09ICdlZGl0JyA/ICdlZGl0JyA6ICd2aWV3Jyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmIChjb25mLmZvcm1Db25maWcubW9kZSA9PT0gJ2NyZWF0ZScpIHtcclxuICAgICAgY29uZi5oZXJvRmllbGQgPSB0aGlzLmNvbmZpZz8uaGVyb0ZpZWxkO1xyXG4gICAgICBjb25mLmhlcm9WYWx1ZSA9IHRoaXMuY29uZmlnPy5oZXJvVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVzdWx0ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5EZXRhaWxzRGlhbG9nKGNvbmYsIERldGFpbHNEaWFsb2cpO1xyXG5cclxuICAgIGlmIChidXR0b25OYW1lID09PSAnZWRpdCcpIHtcclxuICAgICAgZGlhbG9nUmVzdWx0LmlucHV0Q2hhbmdlLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKHgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaWFsb2dSZXN1bHQuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbi5uYW1lLCByZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5tZXNzYWdlID09PSAnZW1pdCcpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbi5uYW1lLCByZXN1bHQuZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTW9kZWwocm93KSB7XHJcblxyXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCdkZWxldGUnKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGBERUxFVEUgP2ApLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoJ2RlbGV0ZScsIHJvdylcclxuICAgICAgICB0aGlzLmRvQWN0aW9uKGJ1dHRvbi5uYW1lLHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvL0FjdGlvbnNcclxuICBkb0FjdGlvbihidXR0b25OYW1lOiBzdHJpbmcsIHJvdykge1xyXG5cclxuICAgIGxldCBiID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSlcclxuXHJcbiAgICBpZiAoIWIpIHJldHVybjtcclxuICAgIGlmICghYi5hY3Rpb24pIHJldHVybjtcclxuXHJcbiAgICBpZiAoYi5zZXRIZXJvRmllbGQgJiYgdGhpcy5jb25maWcuaGVyb1ZhbHVlKSB7XHJcbiAgICAgIHJvd1t0aGlzLmNvbmZpZy5oZXJvRmllbGRdID0gdGhpcy5jb25maWcuaGVyb1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiLmNvbmZpcm0pe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYCR7Yi5jb25maXJtLm1lc3NhZ2V9YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcclxuICAgICAgICAgIHRoaXMuZXhlY0FjdGlvbihiLHJvdylcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZXhlY0FjdGlvbihiLCByb3cpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZXhlY0FjdGlvbihiOiBCdXR0b24sIHJvdyl7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYi5hY3Rpb24sIHJvdykuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICBpZiAoYi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiVXBkYXRlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9NaXNjXHJcbiAgcHJpdmF0ZSBnZXRFbGV2YXRpb25DbGFzcyhlbGV2YXRpb246IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKGVsZXZhdGlvbiA9PSBcIm5vbmVcIil7XHJcbiAgICAgIHJldHVybiBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlbGV2YXRpb24gPT0gXCJsb3dcIil7XHJcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejFcIlxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZWxldmF0aW9uID09IFwibWVkaXVtXCIpe1xyXG4gICAgICByZXR1cm4gXCJtYXQtZWxldmF0aW9uLXo1XCJcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVsZXZhdGlvbiA9PSBcImhpZ2hcIil7XHJcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejlcIlxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIFwibWF0LWVsZXZhdGlvbi16NVwiXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcbjwhLS0gU2VhcmNoIC0tPlxyXG48c3BhLXNlYXJjaFxyXG4gICpuZ0lmPVwiY29uZmlnLnNlYXJjaENvbmZpZ1wiIFtjb25maWddPVwiY29uZmlnLnNlYXJjaENvbmZpZ1wiIFtzbWFsbFNjcmVlbl09XCJzbWFsbFNjcmVlblwiIFt0YWJsZURhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMHB4O1wiIChzZWFyY2hDbGljayk9XCJzZWFyY2hDbGlja2VkKCRldmVudClcIj5cclxuPC9zcGEtc2VhcmNoPlxyXG5cclxuPCEtLSBIZWFkZXIgLS0+XHJcbjxhcHAtdGFibGUtaGVhZGVyXHJcbiAgW2NvbmZpZ109XCJjb25maWdcIiBbZGF0YV09XCJkYXRhU291cmNlXCIgW3RhYmxlRGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiBbdGlsZUNvbmZpZ109XCJjb25maWcudGlsZUNvbmZpZ1wiIFt0aWxlRGF0YV09XCJ0aWxlRGF0YVwiIFt0aWxlUmVsb2FkXT1cInRpbGVSZWxvYWRcIiBbbGFzdFNlYXJjaF09XCJsYXN0U2VhcmNoXCIgW3NtYWxsU2NyZWVuXT1cInNtYWxsU2NyZWVuXCIgW2hpZGVUaXRsZV09XCJoaWRlVGl0bGVcIlxyXG4gIFtzaG93RmlsdGVyQnV0dG9uXT1cInNob3dGaWx0ZXJCdXR0b25cIiAoY3JlYXRlQ2xpY2spPVwibmV3TW9kZWwoKVwiIChjdXN0b21DbGljayk9XCJjdXN0b21Nb2RlbCgkZXZlbnQsbnVsbClcIlxyXG4gIChyZWZyZXNoQ2xpY2spPVwicmVmcmVzaENsaWNrZWQoKVwiICh0aWxlQ2xpY2spPVwidGlsZUNsaWNrZWQoJGV2ZW50KVwiICh0aWxlVW5DbGljayk9XCJ0aWxlVW5DbGlja2VkKCRldmVudClcIj5cclxuPC9hcHAtdGFibGUtaGVhZGVyPlxyXG5cclxuXHJcbjwhLS0gVGFibGUgLS0+XHJcbjxkaXY+XHJcblxyXG4gIDxwICpuZ0lmPVwiIWNvbmZpZ1wiPjxlbT5Db25maWd1cmUgVGFibGU8L2VtPjwvcD5cclxuICA8cCAqbmdJZj1cIiFkYXRhU291cmNlXCI+PGVtPkxvYWRpbmcuLi48L2VtPjwvcD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UgJiYgKCFzbWFsbFNjcmVlbiB8fCAoc21hbGxTY3JlZW4gJiYgZGF0YVNvdXJjZT8ubGVuZ3RoID4gMCkpXCI+XHJcblxyXG4gICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiAgW25nQ2xhc3NdPVwiZWxldmF0aW9uXCI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29uZmlnLmNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCI+XHJcbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiA+e3sgY29sdW1uLmFsaWFzID8/IGNvbHVtbi5uYW1lIHwgY2FtZWxUb1dvcmRzIH19PC90aD5cclxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O1wiIGNsYXNzPVwicmlnaHQtcGFkZGluZ1wiID5cclxuXHJcbiAgICAgICAgICA8IS0tIFJvd3MgLS0+XHJcbiAgICAgICAgICA8YXBwLXRhYmxlLXJvdyBbY29sdW1uXT1cImNvbHVtblwiIFtyb3ddPVwicm93XCIgW2NvbmZpZ109XCJjb25maWdcIlxyXG4gICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwiYWN0aW9uQ2xpY2tlZChjb2x1bW4ubmFtZSwgcm93KVwiIChjb2x1bW5DbGljayk9XCJjb2x1bW5DbGlja2VkKGNvbHVtbiwgcm93KVwiIChzaG93QmFubmVyRXZlbnQpPVwic2hvd0Jhbm5lcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L2FwcC10YWJsZS1yb3c+XHJcblxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25cIj5cclxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBBY3Rpb24gPC90aD5cclxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW25nU3R5bGVdPVwie3dpZHRoOmZhbHNlID8gJzUwcHgnIDogYWN0aW9uc1dpZHRofVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zLWNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBBY3Rpb25zIC0tPlxyXG4gICAgICAgICAgICA8YXBwLXRhYmxlLWFjdGlvblxyXG4gICAgICAgICAgICAgIFtkaXNwbGF5ZWRCdXR0b25zXT1cImRpc3BsYXllZEJ1dHRvbnNcIiBbY29uZmlnXT1cImNvbmZpZ1wiIFtyb3ddPVwicm93XCIgKGFjdGlvbkNsaWNrKT1cImFjdGlvbkNsaWNrZWQoJGV2ZW50Lm5hbWUsICRldmVudC5yb3cpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLXRhYmxlLWFjdGlvbj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxyXG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBbbmdDbGFzc109XCJ7J21ha2UtZ3JheSc6IGNvbmZpZy5ncmV5T3V0ICYmIGNvbmZpZy5ncmV5T3V0KHJvdyl9XCI+PC90cj5cclxuICAgIDwvdGFibGU+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cImRhdGFTb3VyY2UgJiYgKCFzbWFsbFNjcmVlbiB8fCAoc21hbGxTY3JlZW4gJiYgZGF0YVNvdXJjZT8ubGVuZ3RoID4gMCkpXCIgI3RhYmxlUGFnaW5hdG9yIFtwYWdlU2l6ZU9wdGlvbnNdPVwiY29uZmlnLnBhZ2VTaXplcyA/PyBbMTAsIDIwLCA1MF1cIiBzaG93Rmlyc3RMYXN0QnV0dG9ucz48L21hdC1wYWdpbmF0b3I+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJ0aW4tY2VudGVyXCI+XHJcbiAgPHAgKm5nSWY9XCJkYXRhU291cmNlPy5sZW5ndGggPT0gMFwiPjxlbT57e2NvbmZpZy5ub0RhdGFNZXNzYWdlID8/ICdObyBEYXRhJ319PC9lbT48L3A+XHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG4iXX0=
@@ -111,11 +111,13 @@ export class TableHeaderComponent {
111
111
  }
112
112
  }
113
113
  TableHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableHeaderComponent, deps: [{ token: i1.ButtonService }, { token: i2.DialogService }, { token: i3.MessageService }, { token: i4.CsvService }], target: i0.ɵɵFactoryTarget.Component });
114
- TableHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableHeaderComponent, selector: "app-table-header", inputs: { config: "config", hideTitle: "hideTitle", tableDataSource: "tableDataSource", tileConfig: "tileConfig", smallScreen: "smallScreen", tileReload: "tileReload", showFilterButton: "showFilterButton", data: "data", tileData: "tileData" }, outputs: { createClick: "createClick", customClick: "customClick", refreshClick: "refreshClick", tileClick: "tileClick", tileUnClick: "tileUnClick" }, ngImport: i0, template: "<div class=\"top\">\r\n\r\n <!-- buttons -->\r\n <div class=\"tin-row\" style=\"margin-right: 10px;\" *ngIf=\"getHeaderButtons().length > 0\" >\r\n\r\n <ng-container *ngFor=\"let button of getHeaderButtons()\">\r\n <ng-container *ngIf=\"testVisible(button)\" >\r\n <button *ngIf=\"!config.flatButtons\" mat-raised-button color=\"primary\" [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" >\r\n {{button.display}}\r\n </button>\r\n <button *ngIf=\"config.flatButtons\" mat-stroked-button [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" [ngStyle]=\"{'color': getButtonColor(button, config.parentData)}\">\r\n {{button.display}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"getHeaderButtons().length == 0 && config.holdHeaderButtonSpace || getHeaderButtons().length == 0 && !config.tileConfig\"></div>\r\n\r\n <!-- tiles -->\r\n <div *ngIf=\"config.tileConfig && !smallScreen\" style=\"min-width: 75%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" (tileClick)=\"onTileClick($event)\" (tileUnClick)=\"onTileUnClick($event)\"></spa-tiles>\r\n </div>\r\n\r\n <!-- filter -->\r\n <div class=\"tin-row d-flex justify-content-end\" >\r\n\r\n <button *ngIf=\"config.download && testVisibleHeaderButton(config.download)\" mat-icon-button matTooltip=\"Download\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onDownloadClick()\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"config.upload && testVisibleHeaderButton(config.upload)\" mat-icon-button matTooltip=\"Upload\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onUploadClick()\">\r\n <mat-icon>upload</mat-icon>\r\n </button>\r\n\r\n <div *ngIf=\"config.showFilter\" >\r\n <spa-filter [showText]=\"!smallScreen || (smallScreen && tableDataSource?.length > 10)\" [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" [flatButtons]=\"config.flatButtons\" (refreshClick)=\"onRefreshClick()\"></spa-filter>\r\n </div>\r\n <div *ngIf=\"!config.showFilter && config.holdFilterSpace\"></div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"config.tileConfig && smallScreen\" style=\"width: 100%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" (tileClick)=\"onTileClick($event)\"></spa-tiles>\r\n</div>\r\n\r\n<div *ngIf=\"config.title && !hideTitle\" class=\"title\">\r\n {{config.title | camelToWords}}\r\n</div>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.tin-row{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i9.FilterComponent, selector: "spa-filter", inputs: ["flatButtons", "showText", "showButton", "data"], outputs: ["refreshClick"] }, { kind: "component", type: i10.TilesComponent, selector: "spa-tiles", inputs: ["config", "data", "reload"], outputs: ["tileActionSelected", "tileClick", "tileUnClick"] }, { kind: "pipe", type: i11.CamelToWordsPipe, name: "camelToWords" }] });
114
+ TableHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableHeaderComponent, selector: "app-table-header", inputs: { lastSearch: "lastSearch", config: "config", hideTitle: "hideTitle", tableDataSource: "tableDataSource", tileConfig: "tileConfig", smallScreen: "smallScreen", tileReload: "tileReload", showFilterButton: "showFilterButton", data: "data", tileData: "tileData" }, outputs: { createClick: "createClick", customClick: "customClick", refreshClick: "refreshClick", tileClick: "tileClick", tileUnClick: "tileUnClick" }, ngImport: i0, template: "<div class=\"top\">\r\n\r\n <!-- buttons -->\r\n <div class=\"tin-row\" style=\"margin-right: 10px;\" *ngIf=\"getHeaderButtons().length > 0\" >\r\n\r\n <ng-container *ngFor=\"let button of getHeaderButtons()\">\r\n <ng-container *ngIf=\"testVisible(button)\" >\r\n <button *ngIf=\"!config.flatButtons\" mat-raised-button color=\"primary\" [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" >\r\n {{button.display}}\r\n </button>\r\n <button *ngIf=\"config.flatButtons\" mat-stroked-button [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" [ngStyle]=\"{'color': getButtonColor(button, config.parentData)}\">\r\n {{button.display}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"getHeaderButtons().length == 0 && config.holdHeaderButtonSpace || getHeaderButtons().length == 0 && !config.tileConfig\"></div>\r\n\r\n <!-- tiles -->\r\n <div *ngIf=\"config.tileConfig && !smallScreen\" style=\"min-width: 75%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" [lastSearch]=\"lastSearch\" (tileClick)=\"onTileClick($event)\" (tileUnClick)=\"onTileUnClick($event)\"></spa-tiles>\r\n </div>\r\n\r\n <!-- filter -->\r\n <div class=\"tin-row d-flex justify-content-end\" >\r\n\r\n <button *ngIf=\"config.download && testVisibleHeaderButton(config.download)\" mat-icon-button matTooltip=\"Download\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onDownloadClick()\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"config.upload && testVisibleHeaderButton(config.upload)\" mat-icon-button matTooltip=\"Upload\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onUploadClick()\">\r\n <mat-icon>upload</mat-icon>\r\n </button>\r\n\r\n <div *ngIf=\"config.showFilter\" >\r\n <spa-filter [showText]=\"!smallScreen || (smallScreen && tableDataSource?.length > 10)\" [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" [flatButtons]=\"config.flatButtons\" (refreshClick)=\"onRefreshClick()\"></spa-filter>\r\n </div>\r\n <div *ngIf=\"!config.showFilter && config.holdFilterSpace\"></div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"config.tileConfig && smallScreen\" style=\"width: 100%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" (tileClick)=\"onTileClick($event)\"></spa-tiles>\r\n</div>\r\n\r\n<div *ngIf=\"config.title && !hideTitle\" class=\"title\">\r\n {{config.title | camelToWords}}\r\n</div>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.tin-row{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i9.FilterComponent, selector: "spa-filter", inputs: ["flatButtons", "showText", "showButton", "data"], outputs: ["refreshClick"] }, { kind: "component", type: i10.TilesComponent, selector: "spa-tiles", inputs: ["config", "lastSearch", "data", "reload"], outputs: ["tileActionSelected", "tileClick", "tileUnClick"] }, { kind: "pipe", type: i11.CamelToWordsPipe, name: "camelToWords" }] });
115
115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableHeaderComponent, decorators: [{
116
116
  type: Component,
117
- args: [{ selector: 'app-table-header', template: "<div class=\"top\">\r\n\r\n <!-- buttons -->\r\n <div class=\"tin-row\" style=\"margin-right: 10px;\" *ngIf=\"getHeaderButtons().length > 0\" >\r\n\r\n <ng-container *ngFor=\"let button of getHeaderButtons()\">\r\n <ng-container *ngIf=\"testVisible(button)\" >\r\n <button *ngIf=\"!config.flatButtons\" mat-raised-button color=\"primary\" [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" >\r\n {{button.display}}\r\n </button>\r\n <button *ngIf=\"config.flatButtons\" mat-stroked-button [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" [ngStyle]=\"{'color': getButtonColor(button, config.parentData)}\">\r\n {{button.display}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"getHeaderButtons().length == 0 && config.holdHeaderButtonSpace || getHeaderButtons().length == 0 && !config.tileConfig\"></div>\r\n\r\n <!-- tiles -->\r\n <div *ngIf=\"config.tileConfig && !smallScreen\" style=\"min-width: 75%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" (tileClick)=\"onTileClick($event)\" (tileUnClick)=\"onTileUnClick($event)\"></spa-tiles>\r\n </div>\r\n\r\n <!-- filter -->\r\n <div class=\"tin-row d-flex justify-content-end\" >\r\n\r\n <button *ngIf=\"config.download && testVisibleHeaderButton(config.download)\" mat-icon-button matTooltip=\"Download\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onDownloadClick()\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"config.upload && testVisibleHeaderButton(config.upload)\" mat-icon-button matTooltip=\"Upload\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onUploadClick()\">\r\n <mat-icon>upload</mat-icon>\r\n </button>\r\n\r\n <div *ngIf=\"config.showFilter\" >\r\n <spa-filter [showText]=\"!smallScreen || (smallScreen && tableDataSource?.length > 10)\" [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" [flatButtons]=\"config.flatButtons\" (refreshClick)=\"onRefreshClick()\"></spa-filter>\r\n </div>\r\n <div *ngIf=\"!config.showFilter && config.holdFilterSpace\"></div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"config.tileConfig && smallScreen\" style=\"width: 100%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" (tileClick)=\"onTileClick($event)\"></spa-tiles>\r\n</div>\r\n\r\n<div *ngIf=\"config.title && !hideTitle\" class=\"title\">\r\n {{config.title | camelToWords}}\r\n</div>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.tin-row{display:flex;align-items:center}\n"] }]
118
- }], ctorParameters: function () { return [{ type: i1.ButtonService }, { type: i2.DialogService }, { type: i3.MessageService }, { type: i4.CsvService }]; }, propDecorators: { config: [{
117
+ args: [{ selector: 'app-table-header', template: "<div class=\"top\">\r\n\r\n <!-- buttons -->\r\n <div class=\"tin-row\" style=\"margin-right: 10px;\" *ngIf=\"getHeaderButtons().length > 0\" >\r\n\r\n <ng-container *ngFor=\"let button of getHeaderButtons()\">\r\n <ng-container *ngIf=\"testVisible(button)\" >\r\n <button *ngIf=\"!config.flatButtons\" mat-raised-button color=\"primary\" [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" >\r\n {{button.display}}\r\n </button>\r\n <button *ngIf=\"config.flatButtons\" mat-stroked-button [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" [ngStyle]=\"{'color': getButtonColor(button, config.parentData)}\">\r\n {{button.display}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"getHeaderButtons().length == 0 && config.holdHeaderButtonSpace || getHeaderButtons().length == 0 && !config.tileConfig\"></div>\r\n\r\n <!-- tiles -->\r\n <div *ngIf=\"config.tileConfig && !smallScreen\" style=\"min-width: 75%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" [lastSearch]=\"lastSearch\" (tileClick)=\"onTileClick($event)\" (tileUnClick)=\"onTileUnClick($event)\"></spa-tiles>\r\n </div>\r\n\r\n <!-- filter -->\r\n <div class=\"tin-row d-flex justify-content-end\" >\r\n\r\n <button *ngIf=\"config.download && testVisibleHeaderButton(config.download)\" mat-icon-button matTooltip=\"Download\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onDownloadClick()\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"config.upload && testVisibleHeaderButton(config.upload)\" mat-icon-button matTooltip=\"Upload\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onUploadClick()\">\r\n <mat-icon>upload</mat-icon>\r\n </button>\r\n\r\n <div *ngIf=\"config.showFilter\" >\r\n <spa-filter [showText]=\"!smallScreen || (smallScreen && tableDataSource?.length > 10)\" [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" [flatButtons]=\"config.flatButtons\" (refreshClick)=\"onRefreshClick()\"></spa-filter>\r\n </div>\r\n <div *ngIf=\"!config.showFilter && config.holdFilterSpace\"></div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"config.tileConfig && smallScreen\" style=\"width: 100%;\">\r\n <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" (tileClick)=\"onTileClick($event)\"></spa-tiles>\r\n</div>\r\n\r\n<div *ngIf=\"config.title && !hideTitle\" class=\"title\">\r\n {{config.title | camelToWords}}\r\n</div>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.tin-row{display:flex;align-items:center}\n"] }]
118
+ }], ctorParameters: function () { return [{ type: i1.ButtonService }, { type: i2.DialogService }, { type: i3.MessageService }, { type: i4.CsvService }]; }, propDecorators: { lastSearch: [{
119
+ type: Input
120
+ }], config: [{
119
121
  type: Input
120
122
  }], hideTitle: [{
121
123
  type: Input
@@ -144,4 +146,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
144
146
  }], tileUnClick: [{
145
147
  type: Output
146
148
  }] } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWhlYWRlci90YWJsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtaGVhZGVyL3RhYmxlLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRzNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU83QyxNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLFlBQW9CLGFBQTRCLEVBQVUsYUFBNEIsRUFBVSxjQUE4QixFQUFVLFVBQXNCO1FBQTFJLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBdUJySixTQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ2YsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUVsQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHbkQsd0JBQW1CLEdBQXlCO1lBRTFD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RCxjQUFjLENBQUMsTUFBYyxFQUFFLEdBQVE7UUFDckMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7aUhBbElVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLG1jQ2ZqQyw4aUZBbURBOzJGRHBDYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO3NMQXNCbkIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcsIEJ1dHRvbiwgVGlsZUNvbmZpZywgRGV0YWlsc0RpYWxvZ0NvbmZpZywgQWN0aW9uLCBBcGlSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGV0YWlsc0RpYWxvZ0ludGVybmFsIH0gZnJvbSAnLi4vdGFibGUtaW50ZXJuYWwvZGV0YWlsc0RpYWxvZy1pbnRlcm5hbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENzdlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jc3Yuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RpbkNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtaGVhZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1oZWFkZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUhlYWRlckNvbXBvbmVudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSwgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBjc3ZTZXJ2aWNlOiBDc3ZTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXRDcmVhdGVCdXR0b24odGhpcy5jb25maWc/LmJ1dHRvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy51cGxvYWQpe1xyXG5cclxuICAgICAgbGV0IHVwbG9hZEFjdGlvbiA6IEFjdGlvbiA9IHsgLi4udGhpcy5jb25maWcudXBsb2FkLmFjdGlvbiwgbWV0aG9kIDogJ3Bvc3QnLCBpc0Zvcm1EYXRhOiB0cnVlIH1cclxuXHJcbiAgICAgIHRoaXMudXBsb2FkRGV0YWlsc0RpYWxvZy5idXR0b25zLmZpbmQoYiA9PiBiLm5hbWUgPT0gXCJjcmVhdGVcIikuYWN0aW9uID0gdXBsb2FkQWN0aW9uO1xyXG4gICAgICB0aGlzLnVwbG9hZERldGFpbHNEaWFsb2cuZm9ybUNvbmZpZy5hbGVydE1lc3NhZ2VzLm1lc3NhZ2VzID0gdGhpcy5jb25maWcudXBsb2FkLm1lc3NhZ2VzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQnV0dG9uOiBCdXR0b247XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZzogVGFibGVDb25maWc7XHJcbiAgQElucHV0KCkgaGlkZVRpdGxlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRhYmxlRGF0YVNvdXJjZTogYW55O1xyXG4gIEBJbnB1dCgpIHRpbGVDb25maWc6IFRpbGVDb25maWc7XHJcbiAgQElucHV0KCkgc21hbGxTY3JlZW46IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdGlsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPjtcclxuICBASW5wdXQoKSBzaG93RmlsdGVyQnV0dG9uOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIHRpbGVEYXRhOiBhbnkgPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIGNyZWF0ZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBjdXN0b21DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmVmcmVzaENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSB0aWxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgdGlsZVVuQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblxyXG4gIHVwbG9hZERldGFpbHNEaWFsb2cgOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG5cclxuICAgIGZvcm1Db25maWcgOiB7XHJcbiAgICAgIHRpdGxlOiBcIlVwbG9hZFwiLFxyXG4gICAgICBmaXhlZFRpdGxlIDogdHJ1ZSxcclxuICAgICAgYWxlcnRNZXNzYWdlczoge1xyXG4gICAgICAgIG1lc3NhZ2VzOiBbXSxcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG1vZGU6ICdjcmVhdGUnLFxyXG4gICAgICBmaWVsZHM6IFtcclxuICAgICAgICB7IG5hbWU6IFwiZmlsZVwiLCB0eXBlOiBcImZpbGVcIiwgcmVxdWlyZWQ6IHRydWUsIHNwYW4gOiB0cnVlIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6IFwiY3JlYXRlXCIsIGNvbG9yOiBcInByaW1hcnlcIiwgZGlhbG9nOiB0cnVlLCBpbkRpYWxvZyA6IHRydWUgfSxcclxuICAgIF1cclxuXHJcbiAgfVxyXG5cclxuICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogQnV0dG9uKSB7XHJcbiAgICBpZiAoYnV0dG9uLm5hbWUgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ2xpY2suZW1pdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXN0b21DbGljay5lbWl0KGJ1dHRvbi5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRG93bmxvYWRDbGljaygpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRvd25sb2FkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgZGF0YT9cIikuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT0gJ3llcycpIHtcclxuICAgICAgICB0aGlzLmN1c3RvbUNsaWNrLmVtaXQoXCJkb3dubG9hZFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5jc3ZTZXJ2aWNlLmdlbmVyYXRlQ3N2KHRoaXMuZGF0YSwgdGhpcy5jb25maWcuZG93bmxvYWQuY29sdW1ucywgdGhpcy5jb25maWcuZG93bmxvYWQuZmlsZU5hbWUsIHRoaXMuY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIG9uVXBsb2FkQ2xpY2soKSB7XHJcbiAgICB0aGlzLmN1c3RvbUNsaWNrLmVtaXQoXCJ1cGxvYWRcIik7XHJcblxyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5EZXRhaWxzRGlhbG9nKHRoaXMudXBsb2FkRGV0YWlsc0RpYWxvZywgRGV0YWlsc0RpYWxvZ0ludGVybmFsICkuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKHJlc3VsdD0+IHtcclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlID09ICdzdWNjZXNzJyl7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ2xpY2suZW1pdCgpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGxvYWQgc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25SZWZyZXNoQ2xpY2soKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hDbGljay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvblRpbGVDbGljayh0aWxlKSB7XHJcbiAgICB0aGlzLnRpbGVDbGljay5lbWl0KHRpbGUpO1xyXG4gIH1cclxuXHJcbiAgb25UaWxlVW5DbGljayh0aWxlKSB7XHJcbiAgICB0aGlzLnRpbGVVbkNsaWNrLmVtaXQodGlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJCdXR0b25zKCk6IEJ1dHRvbltdIHtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWc/LmJ1dHRvbnMgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb25maWc/LmJ1dHRvbnMpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmJ1dHRvbnMuZmlsdGVyKGIgPT4gYi5uYW1lID09ICdjcmVhdGUnIHx8IGIuaW5IZWFkZXIpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFZpc2libGVIZWFkZXJCdXR0b24oYnRuKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQ29yZS50ZXN0VmlzaWJsZUhlYWRlckJ1dHRvbih0aGlzLmNvbmZpZy5wYXJlbnREYXRhLGJ0bik7XHJcbiAgfVxyXG4gIHRlc3RWaXNpYmxlKGJ1dHRvbjogQnV0dG9uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3RWaXNpYmxlKGJ1dHRvbiwgdGhpcy5jb25maWcucGFyZW50RGF0YSk7XHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQoYnV0dG9uOiBCdXR0b24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UudGVzdERpc2FibGVkKGJ1dHRvbiwgdGhpcy5jb25maWcucGFyZW50RGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRvcFwiPlxyXG5cclxuICAgIDwhLS0gYnV0dG9ucyAtLT5cclxuICA8ZGl2IGNsYXNzPVwidGluLXJvd1wiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4O1wiICpuZ0lmPVwiZ2V0SGVhZGVyQnV0dG9ucygpLmxlbmd0aCA+IDBcIiA+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGdldEhlYWRlckJ1dHRvbnMoKVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVzdFZpc2libGUoYnV0dG9uKVwiID5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWNvbmZpZy5mbGF0QnV0dG9uc1wiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQoYnV0dG9uKVwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbilcIiA+XHJcbiAgICAgICAgICB7e2J1dHRvbi5kaXNwbGF5fX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLmZsYXRCdXR0b25zXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQoYnV0dG9uKVwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbilcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0QnV0dG9uQ29sb3IoYnV0dG9uLCBjb25maWcucGFyZW50RGF0YSl9XCI+XHJcbiAgICAgICAgICB7e2J1dHRvbi5kaXNwbGF5fX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cImdldEhlYWRlckJ1dHRvbnMoKS5sZW5ndGggPT0gMCAmJiBjb25maWcuaG9sZEhlYWRlckJ1dHRvblNwYWNlIHx8IGdldEhlYWRlckJ1dHRvbnMoKS5sZW5ndGggPT0gMCAmJiAhY29uZmlnLnRpbGVDb25maWdcIj48L2Rpdj5cclxuXHJcbiAgPCEtLSB0aWxlcyAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbGVDb25maWcgJiYgIXNtYWxsU2NyZWVuXCIgc3R5bGU9XCJtaW4td2lkdGg6IDc1JTtcIj5cclxuICAgIDxzcGEtdGlsZXMgW2NvbmZpZ109XCJjb25maWcudGlsZUNvbmZpZ1wiIFtyZWxvYWRdPVwidGlsZVJlbG9hZFwiIFtkYXRhXT1cInRpbGVEYXRhXCIgKHRpbGVDbGljayk9XCJvblRpbGVDbGljaygkZXZlbnQpXCIgKHRpbGVVbkNsaWNrKT1cIm9uVGlsZVVuQ2xpY2soJGV2ZW50KVwiPjwvc3BhLXRpbGVzPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGZpbHRlciAtLT5cclxuICA8ZGl2IGNsYXNzPVwidGluLXJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiID5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLmRvd25sb2FkICYmIHRlc3RWaXNpYmxlSGVhZGVyQnV0dG9uKGNvbmZpZy5kb3dubG9hZClcIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkRvd25sb2FkXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25Eb3dubG9hZENsaWNrKClcIj5cclxuICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gKm5nSWY9XCJjb25maWcudXBsb2FkICYmIHRlc3RWaXNpYmxlSGVhZGVyQnV0dG9uKGNvbmZpZy51cGxvYWQpXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJVcGxvYWRcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwib25VcGxvYWRDbGljaygpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj51cGxvYWQ8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zaG93RmlsdGVyXCIgPlxyXG4gICAgICA8c3BhLWZpbHRlciBbc2hvd1RleHRdPVwiIXNtYWxsU2NyZWVuIHx8IChzbWFsbFNjcmVlbiAmJiB0YWJsZURhdGFTb3VyY2U/Lmxlbmd0aCA+IDEwKVwiIFtzaG93QnV0dG9uXT1cInNob3dGaWx0ZXJCdXR0b25cIiBbZGF0YV09XCJ0YWJsZURhdGFTb3VyY2VcIiBbZmxhdEJ1dHRvbnNdPVwiY29uZmlnLmZsYXRCdXR0b25zXCIgKHJlZnJlc2hDbGljayk9XCJvblJlZnJlc2hDbGljaygpXCI+PC9zcGEtZmlsdGVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZy5zaG93RmlsdGVyICYmIGNvbmZpZy5ob2xkRmlsdGVyU3BhY2VcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJjb25maWcudGlsZUNvbmZpZyAmJiBzbWFsbFNjcmVlblwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgPHNwYS10aWxlcyBbY29uZmlnXT1cImNvbmZpZy50aWxlQ29uZmlnXCIgW3JlbG9hZF09XCJ0aWxlUmVsb2FkXCIgW2RhdGFdPVwidGlsZURhdGFcIiAodGlsZUNsaWNrKT1cIm9uVGlsZUNsaWNrKCRldmVudClcIj48L3NwYS10aWxlcz5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiY29uZmlnLnRpdGxlICYmICFoaWRlVGl0bGVcIiBjbGFzcz1cInRpdGxlXCI+XHJcbiAge3tjb25maWcudGl0bGUgfCBjYW1lbFRvV29yZHN9fVxyXG48L2Rpdj5cclxuIl19
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWhlYWRlci90YWJsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtaGVhZGVyL3RhYmxlLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRzNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU83QyxNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLFlBQW9CLGFBQTRCLEVBQVUsYUFBNEIsRUFBVSxjQUE4QixFQUFVLFVBQXNCO1FBQTFJLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBd0JySixTQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ2YsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUVsQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHbkQsd0JBQW1CLEdBQXlCO1lBRTFD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RCxjQUFjLENBQUMsTUFBYyxFQUFFLEdBQVE7UUFDckMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7aUhBbklVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDZkQ2ZqQywwa0ZBbURBOzJGRHBDYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO3NMQXNCbkIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZywgQnV0dG9uLCBUaWxlQ29uZmlnLCBEZXRhaWxzRGlhbG9nQ29uZmlnLCBBY3Rpb24sIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEZXRhaWxzRGlhbG9nSW50ZXJuYWwgfSBmcm9tICcuLi90YWJsZS1pbnRlcm5hbC9kZXRhaWxzRGlhbG9nLWludGVybmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3N2U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nzdi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10YWJsZS1oZWFkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWhlYWRlci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlSGVhZGVyQ29tcG9uZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGNzdlNlcnZpY2U6IENzdlNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlQnV0dG9uID0gdGhpcy5idXR0b25TZXJ2aWNlLmdldENyZWF0ZUJ1dHRvbih0aGlzLmNvbmZpZz8uYnV0dG9ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLnVwbG9hZCl7XHJcblxyXG4gICAgICBsZXQgdXBsb2FkQWN0aW9uIDogQWN0aW9uID0geyAuLi50aGlzLmNvbmZpZy51cGxvYWQuYWN0aW9uLCBtZXRob2QgOiAncG9zdCcsIGlzRm9ybURhdGE6IHRydWUgfVxyXG5cclxuICAgICAgdGhpcy51cGxvYWREZXRhaWxzRGlhbG9nLmJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PSBcImNyZWF0ZVwiKS5hY3Rpb24gPSB1cGxvYWRBY3Rpb247XHJcbiAgICAgIHRoaXMudXBsb2FkRGV0YWlsc0RpYWxvZy5mb3JtQ29uZmlnLmFsZXJ0TWVzc2FnZXMubWVzc2FnZXMgPSB0aGlzLmNvbmZpZy51cGxvYWQubWVzc2FnZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVCdXR0b246IEJ1dHRvbjtcclxuXHJcbiAgQElucHV0KCkgbGFzdFNlYXJjaDtcclxuICBASW5wdXQoKSBjb25maWc6IFRhYmxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGhpZGVUaXRsZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSB0YWJsZURhdGFTb3VyY2U6IGFueTtcclxuICBASW5wdXQoKSB0aWxlQ29uZmlnOiBUaWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIHNtYWxsU2NyZWVuOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRpbGVSZWxvYWQ6IFN1YmplY3Q8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgc2hvd0ZpbHRlckJ1dHRvbjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSB0aWxlRGF0YTogYW55ID0gW107XHJcblxyXG4gIEBPdXRwdXQoKSBjcmVhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgY3VzdG9tQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlZnJlc2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgdGlsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHRpbGVVbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cclxuICB1cGxvYWREZXRhaWxzRGlhbG9nIDogRGV0YWlsc0RpYWxvZ0NvbmZpZyA9IHtcclxuXHJcbiAgICBmb3JtQ29uZmlnIDoge1xyXG4gICAgICB0aXRsZTogXCJVcGxvYWRcIixcclxuICAgICAgZml4ZWRUaXRsZSA6IHRydWUsXHJcbiAgICAgIGFsZXJ0TWVzc2FnZXM6IHtcclxuICAgICAgICBtZXNzYWdlczogW10sXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBtb2RlOiAnY3JlYXRlJyxcclxuICAgICAgZmllbGRzOiBbXHJcbiAgICAgICAgeyBuYW1lOiBcImZpbGVcIiwgdHlwZTogXCJmaWxlXCIsIHJlcXVpcmVkOiB0cnVlLCBzcGFuIDogdHJ1ZSB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcblxyXG5cclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiBcImNyZWF0ZVwiLCBjb2xvcjogXCJwcmltYXJ5XCIsIGRpYWxvZzogdHJ1ZSwgaW5EaWFsb2cgOiB0cnVlIH0sXHJcbiAgICBdXHJcblxyXG4gIH1cclxuXHJcbiAgb25CdXR0b25DbGljayhidXR0b246IEJ1dHRvbikge1xyXG4gICAgaWYgKGJ1dHRvbi5uYW1lID09PSAnY3JlYXRlJykge1xyXG4gICAgICB0aGlzLmNyZWF0ZUNsaWNrLmVtaXQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ2xpY2suZW1pdChidXR0b24ubmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRvd25sb2FkQ2xpY2soKSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kb3dubG9hZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzIGRhdGE/XCIpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09ICd5ZXMnKSB7XHJcbiAgICAgICAgdGhpcy5jdXN0b21DbGljay5lbWl0KFwiZG93bmxvYWRcIik7XHJcblxyXG4gICAgICAgIHRoaXMuY3N2U2VydmljZS5nZW5lcmF0ZUNzdih0aGlzLmRhdGEsIHRoaXMuY29uZmlnLmRvd25sb2FkLmNvbHVtbnMsIHRoaXMuY29uZmlnLmRvd25sb2FkLmZpbGVOYW1lLCB0aGlzLmNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBvblVwbG9hZENsaWNrKCkge1xyXG4gICAgdGhpcy5jdXN0b21DbGljay5lbWl0KFwidXBsb2FkXCIpO1xyXG5cclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuRGV0YWlsc0RpYWxvZyh0aGlzLnVwbG9hZERldGFpbHNEaWFsb2csIERldGFpbHNEaWFsb2dJbnRlcm5hbCApLmFmdGVyQ2xvc2VkLnN1YnNjcmliZShyZXN1bHQ9PiB7XHJcblxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgIGlmIChyZXN1bHQubWVzc2FnZSA9PSAnc3VjY2Vzcycpe1xyXG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrLmVtaXQoKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiVXBsb2FkIHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUmVmcmVzaENsaWNrKCkge1xyXG4gICAgdGhpcy5yZWZyZXNoQ2xpY2suZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25UaWxlQ2xpY2sodGlsZSkge1xyXG4gICAgdGhpcy50aWxlQ2xpY2suZW1pdCh0aWxlKTtcclxuICB9XHJcblxyXG4gIG9uVGlsZVVuQ2xpY2sodGlsZSkge1xyXG4gICAgdGhpcy50aWxlVW5DbGljay5lbWl0KHRpbGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGVhZGVyQnV0dG9ucygpOiBCdXR0b25bXSB7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnPy5idXR0b25zID09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnPy5idXR0b25zKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5idXR0b25zLmZpbHRlcihiID0+IGIubmFtZSA9PSAnY3JlYXRlJyB8fCBiLmluSGVhZGVyKTtcclxuICB9XHJcblxyXG4gIHRlc3RWaXNpYmxlSGVhZGVyQnV0dG9uKGJ0bik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIENvcmUudGVzdFZpc2libGVIZWFkZXJCdXR0b24odGhpcy5jb25maWcucGFyZW50RGF0YSxidG4pO1xyXG4gIH1cclxuICB0ZXN0VmlzaWJsZShidXR0b246IEJ1dHRvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZShidXR0b24sIHRoaXMuY29uZmlnLnBhcmVudERhdGEpO1xyXG4gIH1cclxuXHJcbiAgdGVzdERpc2FibGVkKGJ1dHRvbjogQnV0dG9uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3REaXNhYmxlZChidXR0b24sIHRoaXMuY29uZmlnLnBhcmVudERhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0QnV0dG9uQ29sb3IoYnV0dG9uLCByb3cpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0b3BcIj5cclxuXHJcbiAgICA8IS0tIGJ1dHRvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInRpbi1yb3dcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweDtcIiAqbmdJZj1cImdldEhlYWRlckJ1dHRvbnMoKS5sZW5ndGggPiAwXCIgPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBnZXRIZWFkZXJCdXR0b25zKClcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlc3RWaXNpYmxlKGJ1dHRvbilcIiA+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFjb25maWcuZmxhdEJ1dHRvbnNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwidGVzdERpc2FibGVkKGJ1dHRvbilcIiAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24pXCIgPlxyXG4gICAgICAgICAge3tidXR0b24uZGlzcGxheX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZy5mbGF0QnV0dG9uc1wiIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwidGVzdERpc2FibGVkKGJ1dHRvbilcIiAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24pXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgY29uZmlnLnBhcmVudERhdGEpfVwiPlxyXG4gICAgICAgICAge3tidXR0b24uZGlzcGxheX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJnZXRIZWFkZXJCdXR0b25zKCkubGVuZ3RoID09IDAgJiYgY29uZmlnLmhvbGRIZWFkZXJCdXR0b25TcGFjZSB8fCBnZXRIZWFkZXJCdXR0b25zKCkubGVuZ3RoID09IDAgJiYgIWNvbmZpZy50aWxlQ29uZmlnXCI+PC9kaXY+XHJcblxyXG4gIDwhLS0gdGlsZXMgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImNvbmZpZy50aWxlQ29uZmlnICYmICFzbWFsbFNjcmVlblwiIHN0eWxlPVwibWluLXdpZHRoOiA3NSU7XCI+XHJcbiAgICA8c3BhLXRpbGVzIFtjb25maWddPVwiY29uZmlnLnRpbGVDb25maWdcIiBbcmVsb2FkXT1cInRpbGVSZWxvYWRcIiBbZGF0YV09XCJ0aWxlRGF0YVwiIFtsYXN0U2VhcmNoXT1cImxhc3RTZWFyY2hcIiAodGlsZUNsaWNrKT1cIm9uVGlsZUNsaWNrKCRldmVudClcIiAodGlsZVVuQ2xpY2spPVwib25UaWxlVW5DbGljaygkZXZlbnQpXCI+PC9zcGEtdGlsZXM+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gZmlsdGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJ0aW4tcm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgPlxyXG5cclxuICAgIDxidXR0b24gKm5nSWY9XCJjb25maWcuZG93bmxvYWQgJiYgdGVzdFZpc2libGVIZWFkZXJCdXR0b24oY29uZmlnLmRvd25sb2FkKVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiRG93bmxvYWRcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkRvd25sb2FkQ2xpY2soKVwiPlxyXG4gICAgICA8bWF0LWljb24+ZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZy51cGxvYWQgJiYgdGVzdFZpc2libGVIZWFkZXJCdXR0b24oY29uZmlnLnVwbG9hZClcIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIlVwbG9hZFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJvblVwbG9hZENsaWNrKClcIj5cclxuICAgICAgPG1hdC1pY29uPnVwbG9hZDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnNob3dGaWx0ZXJcIiA+XHJcbiAgICAgIDxzcGEtZmlsdGVyIFtzaG93VGV4dF09XCIhc21hbGxTY3JlZW4gfHwgKHNtYWxsU2NyZWVuICYmIHRhYmxlRGF0YVNvdXJjZT8ubGVuZ3RoID4gMTApXCIgW3Nob3dCdXR0b25dPVwic2hvd0ZpbHRlckJ1dHRvblwiIFtkYXRhXT1cInRhYmxlRGF0YVNvdXJjZVwiIFtmbGF0QnV0dG9uc109XCJjb25maWcuZmxhdEJ1dHRvbnNcIiAocmVmcmVzaENsaWNrKT1cIm9uUmVmcmVzaENsaWNrKClcIj48L3NwYS1maWx0ZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhY29uZmlnLnNob3dGaWx0ZXIgJiYgY29uZmlnLmhvbGRGaWx0ZXJTcGFjZVwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImNvbmZpZy50aWxlQ29uZmlnICYmIHNtYWxsU2NyZWVuXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICA8c3BhLXRpbGVzIFtjb25maWddPVwiY29uZmlnLnRpbGVDb25maWdcIiBbcmVsb2FkXT1cInRpbGVSZWxvYWRcIiBbZGF0YV09XCJ0aWxlRGF0YVwiICh0aWxlQ2xpY2spPVwib25UaWxlQ2xpY2soJGV2ZW50KVwiPjwvc3BhLXRpbGVzPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJjb25maWcudGl0bGUgJiYgIWhpZGVUaXRsZVwiIGNsYXNzPVwidGl0bGVcIj5cclxuICB7e2NvbmZpZy50aXRsZSB8IGNhbWVsVG9Xb3Jkc319XHJcbjwvZGl2PlxyXG4iXX0=