@stemy/ngx-utils 13.4.3 → 13.5.1

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.
@@ -24,6 +24,7 @@ export class DynamicTableComponent {
24
24
  this.tableId = UniqueUtils.uuid();
25
25
  this.templates = {};
26
26
  this.filter = "";
27
+ this.testId = "table";
27
28
  this.orders = {};
28
29
  }
29
30
  get items() {
@@ -115,10 +116,10 @@ export class DynamicTableComponent {
115
116
  }
116
117
  }
117
118
  DynamicTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
118
- DynamicTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicTableComponent, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", components: [{ type: i1.PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }], directives: [{ type: i2.PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { type: i7.PaginationItemDirective, selector: "[paginationItem]" }], pipes: { "translate": i8.TranslatePipe } });
119
+ DynamicTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicTableComponent, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending", testId: "testId" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", components: [{ type: i1.PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }], directives: [{ type: i2.PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { type: i7.PaginationItemDirective, selector: "[paginationItem]" }], pipes: { "translate": i8.TranslatePipe } });
119
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicTableComponent, decorators: [{
120
121
  type: Component,
121
- args: [{ selector: "dynamic-table", template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n" }]
122
+ args: [{ selector: "dynamic-table", template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n" }]
122
123
  }], ctorParameters: function () { return []; }, propDecorators: { label: [{
123
124
  type: Input
124
125
  }], placeholder: [{
@@ -147,6 +148,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
147
148
  type: Input
148
149
  }], orderDescending: [{
149
150
  type: Input
151
+ }], testId: [{
152
+ type: Input
150
153
  }], rowTemplate: [{
151
154
  type: ContentChild,
152
155
  args: ["rowTemplate", { static: true }]
@@ -175,4 +178,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
175
178
  type: ContentChildren,
176
179
  args: [DynamicTableTemplateDirective]
177
180
  }] } });
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL2NvbXBvbmVudHMvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvY29tcG9uZW50cy9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLEtBQUssRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUgscUJBQXFCLEVBRXhCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQU1yRCxNQUFNLE9BQU8scUJBQXFCO0lBNEQ5QjtRQTZEQSxhQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsWUFBb0IsRUFBNEIsRUFBRTtZQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDO1FBL0RFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFD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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFhTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJM0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJL0MsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJOUMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJNUMsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJL0Msc0JBQXNCO3NCQURyQixTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJbkQscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJMUMsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxZQUFZO2dCQUlmLGtCQUFrQjtzQkFEekIsZUFBZTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICAgIElQYWdpbmF0aW9uRGF0YSxcclxuICAgIElUYWJsZUNvbHVtbnMsXHJcbiAgICBJVGFibGVUZW1wbGF0ZXMsXHJcbiAgICBQYWdpbmF0aW9uSXRlbUNvbnRleHQsXHJcbiAgICBUYWJsZURhdGFMb2FkZXJcclxufSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9vYmplY3QudXRpbHNcIjtcclxuaW1wb3J0IHtEeW5hbWljVGFibGVUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy10YWJsZS10ZW1wbGF0ZS5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtQYWdpbmF0aW9uRGlyZWN0aXZlfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9wYWdpbmF0aW9uLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1VuaXF1ZVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvdW5pcXVlLnV0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImR5bmFtaWMtdGFibGVcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGRhdGFMb2FkZXI6IFRhYmxlRGF0YUxvYWRlcjtcclxuICAgIEBJbnB1dCgpIGRhdGE6IGFueVtdO1xyXG4gICAgQElucHV0KCkgcGFyYWxsZWxEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IElUYWJsZUNvbHVtbnMgfCBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNob3dGaWx0ZXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpdGVtc1BlclBhZ2U6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHVwZGF0ZVRpbWU6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIG1heFBhZ2VzOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBkaXJlY3Rpb25MaW5rczogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGJvdW5kYXJ5TGlua3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBvcmRlckJ5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBvcmRlckRlc2NlbmRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgdGFibGVJZDogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGVzOiBJVGFibGVUZW1wbGF0ZXM7XHJcbiAgICBmaWx0ZXI6IHN0cmluZztcclxuICAgIG9yZGVyczogSVRhYmxlQ29sdW1ucztcclxuICAgIGNvbHM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGdldCBpdGVtcygpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnBhZ2luYXRpb24gPyBbXSA6IHRoaXMucGFnaW5hdGlvbi5pdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwicm93VGVtcGxhdGVcIiwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwid3JhcHBlclRlbXBsYXRlXCIsIHtzdGF0aWM6IHRydWV9KVxyXG4gICAgd3JhcHBlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoXCJmaWx0ZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJjb2x1bW5zVGVtcGxhdGVcIiwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgICBjb2x1bW5zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZChcImRlZmF1bHRSb3dUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRSb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwiZGVmYXVsdFdyYXBwZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRXcmFwcGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZChcImRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwicGFnaW5hdGlvblwiKVxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uRGlyZWN0aXZlO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY1RhYmxlVGVtcGxhdGVEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIHRlbXBsYXRlRGlyZWN0aXZlczogUXVlcnlMaXN0PER5bmFtaWNUYWJsZVRlbXBsYXRlRGlyZWN0aXZlPjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjb21wYXJlKG9yZGVyQnk6IHN0cmluZywgYTogUGFnaW5hdGlvbkl0ZW1Db250ZXh0LCBiOiBQYWdpbmF0aW9uSXRlbUNvbnRleHQpOiBudW1iZXIge1xyXG4gICAgICAgIGEgPSBhLml0ZW0gPyBhLml0ZW1bb3JkZXJCeV0gOiBudWxsO1xyXG4gICAgICAgIGIgPSBiLml0ZW0gPyBiLml0ZW1bb3JkZXJCeV0gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5jb21wYXJlKGEsIGIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUxvYWRlciA9IHRoaXMubG9hZExvY2FsRGF0YTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgICB0aGlzLnRhYmxlSWQgPSBVbmlxdWVVdGlscy51dWlkKCk7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5vcmRlcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB0aGlzLnRlbXBsYXRlRGlyZWN0aXZlcy5yZWR1Y2UoKHJlc3VsdCwgZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0FycmF5KGRpcmVjdGl2ZS5jb2x1bW4pKSB7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUuY29sdW1uLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbY29sdW1uXSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzU3RyaW5nKGRpcmVjdGl2ZS5jb2x1bW4pIHx8IGRpcmVjdGl2ZS5jb2x1bW4ubGVuZ3RoID09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIHJlc3VsdFtkaXJlY3RpdmUuY29sdW1uXSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucm93VGVtcGxhdGUgPSB0aGlzLnJvd1RlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdFJvd1RlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyVGVtcGxhdGUgPSB0aGlzLmZpbHRlclRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEZpbHRlclRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBjaGFuZ2VzLmNvbHVtbnMuY3VycmVudFZhbHVlIHx8IFtdO1xyXG4gICAgICAgICAgICB0aGlzLm9yZGVycyA9IE9iamVjdFV0aWxzLmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zLnJlZHVjZSgocmVzdWx0LCBjb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtjb2x1bW5dID0gY29sdW1uO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSwge30pIDogY29sdW1ucztcclxuICAgICAgICAgICAgdGhpcy5jb2xzID0gT2JqZWN0LmtleXModGhpcy5vcmRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLm9yZGVyQnkgaW4gdGhpcy5vcmRlcnMgPyB0aGlzLm9yZGVyQnkgOiB0aGlzLmNvbHVtbnNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzLm9yZGVyQnkgJiYgdGhpcy5vcmRlcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckJ5ID0gdGhpcy5vcmRlckJ5IGluIHRoaXMub3JkZXJzID8gdGhpcy5vcmRlckJ5IDogdGhpcy5jb2x1bW5zWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNoYW5nZXMuZGF0YSAmJiAhY2hhbmdlcy5wYXJhbGxlbERhdGEgJiYgIWNoYW5nZXMuaXRlbXNQZXJQYWdlICYmICFjaGFuZ2VzLm9yZGVyQnkgJiYgIWNoYW5nZXMub3JkZXJEZXNjZW5kaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RmlsdGVyKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0T3JkZXIoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9yZGVyRGVzY2VuZGluZyA9IGNvbHVtbiA9PSB0aGlzLm9yZGVyQnkgJiYgIXRoaXMub3JkZXJEZXNjZW5kaW5nO1xyXG4gICAgICAgIHRoaXMub3JkZXJCeSA9IGNvbHVtbjtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkRGF0YSA9IChwYWdlOiBudW1iZXIsIGl0ZW1zUGVyUGFnZTogbnVtYmVyKTogUHJvbWlzZTxJUGFnaW5hdGlvbkRhdGE+ID0+IHtcclxuICAgICAgICBjb25zdCBvcmRlckJ5ID0gdGhpcy5vcmRlcnNbdGhpcy5vcmRlckJ5XTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVyKHBhZ2UsIGl0ZW1zUGVyUGFnZSwgb3JkZXJCeSwgdGhpcy5vcmRlckRlc2NlbmRpbmcsIHRoaXMuZmlsdGVyKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTG9jYWxEYXRhKHBhZ2U6IG51bWJlciwgcm93c1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogc3RyaW5nLCBvcmRlckRlc2NlbmRpbmc6IGJvb2xlYW4sIGZpbHRlcjogc3RyaW5nKTogUHJvbWlzZTxJUGFnaW5hdGlvbkRhdGE+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb21wYXJlOiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlciA9IG9yZGVyRGVzY2VuZGluZ1xyXG4gICAgICAgICAgICA/IChhLCBiKSA9PiBEeW5hbWljVGFibGVDb21wb25lbnQuY29tcGFyZShvcmRlckJ5LCBiLCBhKVxyXG4gICAgICAgICAgICA6IChhLCBiKSA9PiBEeW5hbWljVGFibGVDb21wb25lbnQuY29tcGFyZShvcmRlckJ5LCBhLCBiKTtcclxuICAgICAgICBjb25zdCBmcm9tID0gKHBhZ2UgLSAxKSAqIHJvd3NQZXJQYWdlO1xyXG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKHJvd3NQZXJQYWdlLCBkYXRhTGVuZ3RoIC0gZnJvbSk7XHJcbiAgICAgICAgY29uc3QgcGFyYWxsZWxEYXRhID0gdGhpcy5wYXJhbGxlbERhdGEgfHwgW107XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEubWFwKChpdGVtLCBpeCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2luYXRpb25JdGVtQ29udGV4dChpdGVtLCBwYXJhbGxlbERhdGFbaXhdIHx8IHt9LCBkYXRhTGVuZ3RoLCBpeCwgaXgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc1N0cmluZyhmaWx0ZXIpICYmIGZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclJ4ID0gbmV3IFJlZ0V4cChmaWx0ZXIsIFwiZ2lcIik7XHJcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihjID0+IGMuZmlsdGVyKGZpbHRlclJ4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gb3JkZXJCeSA/IGRhdGEuc29ydChjb21wYXJlKS5zcGxpY2UoZnJvbSwgbGVuZ3RoKSA6IGRhdGEuc3BsaWNlKGZyb20sIGxlbmd0aCk7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoY29udGV4dCwgaXgpID0+IHtcclxuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGZyb20gKyBpeDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICAgICAgdG90YWw6IGRhdGFMZW5ndGgsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkeW5hbWljLXRhYmxlXCIgI3BhZ2luYXRpb249XCJwYWdpbmF0aW9uXCIgW3BhZ2luYXRpb25dPVwibG9hZERhdGFcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFt1cGRhdGVUaW1lXT1cInVwZGF0ZVRpbWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbHRlclRlbXBsYXRlIGxldC10YWJsZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtc2VhcmNoXCIgKm5nSWY9XCJ0YWJsZS5zaG93RmlsdGVyXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2F0dHIuZm9yXT1cInRhYmxlSWRcIj57eyBsYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJ0YWJsZUlkXCJcclxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWJsZS5maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGFibGUuc2V0RmlsdGVyKCRldmVudClcIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmd4VGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGUgfHwgZGVmYXVsdEZpbHRlclRlbXBsYXRlXCIgW2NvbnRleHRdPVwidGhpc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPHBhZ2luYXRpb24tbWVudSBbbWF4U2l6ZV09XCJtYXhQYWdlc1wiIFtkaXJlY3Rpb25MaW5rc109XCJkaXJlY3Rpb25MaW5rc1wiIFtib3VuZGFyeUxpbmtzXT1cImJvdW5kYXJ5TGlua3NcIj48L3BhZ2luYXRpb24tbWVudT5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uVGVtcGxhdGUgbGV0LWNvbnRleHQgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW1bY29sdW1uXSA9PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW5dID09IG51bGwgPyAnLScgOiBpdGVtW2NvbHVtbl0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHVyZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmd4VGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGUucmVmXCIgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwiJ2NvbHVtbi0nICsgY29sdW1uXCIgKm5nSWY9XCIhdGVtcGxhdGUgfHwgIXRlbXBsYXRlLnB1cmU7IGVsc2UgcHVyZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ3hUZW1wbGF0ZU91dGxldF09XCIhdGVtcGxhdGUgPyBkZWZhdWx0VGVtcGxhdGUgOiB0ZW1wbGF0ZS5yZWZcIiBbY29udGV4dF09XCJjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNjb2x1bW5zVGVtcGxhdGUgbGV0LWNvbnRleHQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmd4VGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsQ29udGV4dF09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVzW2NvbHVtbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRSb3dUZW1wbGF0ZSBsZXQtY29udGV4dD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmd4VGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uc1RlbXBsYXRlXCIgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFdyYXBwZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIiBbbmdDbGFzc109XCInY29sdW1uLScgKyBjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJvcmRlcnNbY29sdW1uXVwiIChjbGljayk9XCJzZXRPcmRlcihjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnbGFiZWwuJyArIGNvbHVtbiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwib3JkZXJCeSA9PSBjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwib3JkZXJEZXNjZW5kaW5nID8gJ3NvcnQtZGVzYycgOiAnc29ydC1hc2MnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9yZGVyQnkgPT0gY29sdW1uID8gKG9yZGVyRGVzY2VuZGluZyA/ICdzb3J0LWRlc2MnOiAnc29ydC1hc2MnKSA6ICcnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW9yZGVyc1tjb2x1bW5dXCI+e3sgJ2xhYmVsLicgKyBjb2x1bW4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcGFnaW5hdGlvbkl0ZW09XCJsZXQgY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ3hUZW1wbGF0ZU91dGxldF09XCJyb3dUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWRkaXRpb25hbENvbnRleHRdPVwidGhpc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ3hUZW1wbGF0ZU91dGxldF09XCJ3cmFwcGVyVGVtcGxhdGUgfHwgZGVmYXVsdFdyYXBwZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29udGV4dF09XCJ0aGlzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxwYWdpbmF0aW9uLW1lbnUgW21heFNpemVdPVwibWF4UGFnZXNcIiBbZGlyZWN0aW9uTGlua3NdPVwiZGlyZWN0aW9uTGlua3NcIiBbYm91bmRhcnlMaW5rc109XCJib3VuZGFyeUxpbmtzXCI+PC9wYWdpbmF0aW9uLW1lbnU+XHJcbjwvZGl2PlxyXG4iXX0=
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL2NvbXBvbmVudHMvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvY29tcG9uZW50cy9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLEtBQUssRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUgscUJBQXFCLEVBRXhCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQU1yRCxNQUFNLE9BQU8scUJBQXFCO0lBNkQ5QjtRQThEQSxhQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsWUFBb0IsRUFBNEIsRUFBRTtZQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDO1FBaEVFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFD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bEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBYU4sV0FBVztzQkFEVixZQUFZO3VCQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSTNDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSS9DLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSTlDLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSTVDLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSS9DLHNCQUFzQjtzQkFEckIsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSW5ELHFCQUFxQjtzQkFEcEIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSTFDLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsWUFBWTtnQkFJZixrQkFBa0I7c0JBRHpCLGVBQWU7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJUGFnaW5hdGlvbkRhdGEsXHJcbiAgICBJVGFibGVDb2x1bW5zLFxyXG4gICAgSVRhYmxlVGVtcGxhdGVzLFxyXG4gICAgUGFnaW5hdGlvbkl0ZW1Db250ZXh0LFxyXG4gICAgVGFibGVEYXRhTG9hZGVyXHJcbn0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvb2JqZWN0LnV0aWxzXCI7XHJcbmltcG9ydCB7RHluYW1pY1RhYmxlVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtdGFibGUtdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7UGFnaW5hdGlvbkRpcmVjdGl2ZX0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvcGFnaW5hdGlvbi5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtVbmlxdWVVdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL3VuaXF1ZS51dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJkeW5hbWljLXRhYmxlXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWxcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBkYXRhTG9hZGVyOiBUYWJsZURhdGFMb2FkZXI7XHJcbiAgICBASW5wdXQoKSBkYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIHBhcmFsbGVsRGF0YTogYW55W107XHJcbiAgICBASW5wdXQoKSBjb2x1bW5zOiBJVGFibGVDb2x1bW5zIHwgc3RyaW5nW107XHJcbiAgICBASW5wdXQoKSBzaG93RmlsdGVyOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaXRlbXNQZXJQYWdlOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSB1cGRhdGVUaW1lOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBtYXhQYWdlczogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgZGlyZWN0aW9uTGlua3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBib3VuZGFyeUxpbmtzOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgb3JkZXJCeTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgb3JkZXJEZXNjZW5kaW5nOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdGVzdElkOiBzdHJpbmc7XHJcblxyXG4gICAgdGFibGVJZDogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGVzOiBJVGFibGVUZW1wbGF0ZXM7XHJcbiAgICBmaWx0ZXI6IHN0cmluZztcclxuICAgIG9yZGVyczogSVRhYmxlQ29sdW1ucztcclxuICAgIGNvbHM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGdldCBpdGVtcygpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnBhZ2luYXRpb24gPyBbXSA6IHRoaXMucGFnaW5hdGlvbi5pdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwicm93VGVtcGxhdGVcIiwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwid3JhcHBlclRlbXBsYXRlXCIsIHtzdGF0aWM6IHRydWV9KVxyXG4gICAgd3JhcHBlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoXCJmaWx0ZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJjb2x1bW5zVGVtcGxhdGVcIiwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgICBjb2x1bW5zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZChcImRlZmF1bHRSb3dUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRSb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwiZGVmYXVsdFdyYXBwZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRXcmFwcGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZChcImRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwicGFnaW5hdGlvblwiKVxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uRGlyZWN0aXZlO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY1RhYmxlVGVtcGxhdGVEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIHRlbXBsYXRlRGlyZWN0aXZlczogUXVlcnlMaXN0PER5bmFtaWNUYWJsZVRlbXBsYXRlRGlyZWN0aXZlPjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjb21wYXJlKG9yZGVyQnk6IHN0cmluZywgYTogUGFnaW5hdGlvbkl0ZW1Db250ZXh0LCBiOiBQYWdpbmF0aW9uSXRlbUNvbnRleHQpOiBudW1iZXIge1xyXG4gICAgICAgIGEgPSBhLml0ZW0gPyBhLml0ZW1bb3JkZXJCeV0gOiBudWxsO1xyXG4gICAgICAgIGIgPSBiLml0ZW0gPyBiLml0ZW1bb3JkZXJCeV0gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5jb21wYXJlKGEsIGIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUxvYWRlciA9IHRoaXMubG9hZExvY2FsRGF0YTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgICB0aGlzLnRhYmxlSWQgPSBVbmlxdWVVdGlscy51dWlkKCk7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy50ZXN0SWQgPSBcInRhYmxlXCI7XHJcbiAgICAgICAgdGhpcy5vcmRlcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB0aGlzLnRlbXBsYXRlRGlyZWN0aXZlcy5yZWR1Y2UoKHJlc3VsdCwgZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0FycmF5KGRpcmVjdGl2ZS5jb2x1bW4pKSB7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUuY29sdW1uLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbY29sdW1uXSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzU3RyaW5nKGRpcmVjdGl2ZS5jb2x1bW4pIHx8IGRpcmVjdGl2ZS5jb2x1bW4ubGVuZ3RoID09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIHJlc3VsdFtkaXJlY3RpdmUuY29sdW1uXSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucm93VGVtcGxhdGUgPSB0aGlzLnJvd1RlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdFJvd1RlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyVGVtcGxhdGUgPSB0aGlzLmZpbHRlclRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEZpbHRlclRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBjaGFuZ2VzLmNvbHVtbnMuY3VycmVudFZhbHVlIHx8IFtdO1xyXG4gICAgICAgICAgICB0aGlzLm9yZGVycyA9IE9iamVjdFV0aWxzLmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zLnJlZHVjZSgocmVzdWx0LCBjb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtjb2x1bW5dID0gY29sdW1uO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSwge30pIDogY29sdW1ucztcclxuICAgICAgICAgICAgdGhpcy5jb2xzID0gT2JqZWN0LmtleXModGhpcy5vcmRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLm9yZGVyQnkgaW4gdGhpcy5vcmRlcnMgPyB0aGlzLm9yZGVyQnkgOiB0aGlzLmNvbHVtbnNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzLm9yZGVyQnkgJiYgdGhpcy5vcmRlcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckJ5ID0gdGhpcy5vcmRlckJ5IGluIHRoaXMub3JkZXJzID8gdGhpcy5vcmRlckJ5IDogdGhpcy5jb2x1bW5zWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNoYW5nZXMuZGF0YSAmJiAhY2hhbmdlcy5wYXJhbGxlbERhdGEgJiYgIWNoYW5nZXMuaXRlbXNQZXJQYWdlICYmICFjaGFuZ2VzLm9yZGVyQnkgJiYgIWNoYW5nZXMub3JkZXJEZXNjZW5kaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RmlsdGVyKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0T3JkZXIoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9yZGVyRGVzY2VuZGluZyA9IGNvbHVtbiA9PSB0aGlzLm9yZGVyQnkgJiYgIXRoaXMub3JkZXJEZXNjZW5kaW5nO1xyXG4gICAgICAgIHRoaXMub3JkZXJCeSA9IGNvbHVtbjtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkRGF0YSA9IChwYWdlOiBudW1iZXIsIGl0ZW1zUGVyUGFnZTogbnVtYmVyKTogUHJvbWlzZTxJUGFnaW5hdGlvbkRhdGE+ID0+IHtcclxuICAgICAgICBjb25zdCBvcmRlckJ5ID0gdGhpcy5vcmRlcnNbdGhpcy5vcmRlckJ5XTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVyKHBhZ2UsIGl0ZW1zUGVyUGFnZSwgb3JkZXJCeSwgdGhpcy5vcmRlckRlc2NlbmRpbmcsIHRoaXMuZmlsdGVyKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTG9jYWxEYXRhKHBhZ2U6IG51bWJlciwgcm93c1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogc3RyaW5nLCBvcmRlckRlc2NlbmRpbmc6IGJvb2xlYW4sIGZpbHRlcjogc3RyaW5nKTogUHJvbWlzZTxJUGFnaW5hdGlvbkRhdGE+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb21wYXJlOiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlciA9IG9yZGVyRGVzY2VuZGluZ1xyXG4gICAgICAgICAgICA/IChhLCBiKSA9PiBEeW5hbWljVGFibGVDb21wb25lbnQuY29tcGFyZShvcmRlckJ5LCBiLCBhKVxyXG4gICAgICAgICAgICA6IChhLCBiKSA9PiBEeW5hbWljVGFibGVDb21wb25lbnQuY29tcGFyZShvcmRlckJ5LCBhLCBiKTtcclxuICAgICAgICBjb25zdCBmcm9tID0gKHBhZ2UgLSAxKSAqIHJvd3NQZXJQYWdlO1xyXG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKHJvd3NQZXJQYWdlLCBkYXRhTGVuZ3RoIC0gZnJvbSk7XHJcbiAgICAgICAgY29uc3QgcGFyYWxsZWxEYXRhID0gdGhpcy5wYXJhbGxlbERhdGEgfHwgW107XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEubWFwKChpdGVtLCBpeCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2luYXRpb25JdGVtQ29udGV4dChpdGVtLCBwYXJhbGxlbERhdGFbaXhdIHx8IHt9LCBkYXRhTGVuZ3RoLCBpeCwgaXgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc1N0cmluZyhmaWx0ZXIpICYmIGZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclJ4ID0gbmV3IFJlZ0V4cChmaWx0ZXIsIFwiZ2lcIik7XHJcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihjID0+IGMuZmlsdGVyKGZpbHRlclJ4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gb3JkZXJCeSA/IGRhdGEuc29ydChjb21wYXJlKS5zcGxpY2UoZnJvbSwgbGVuZ3RoKSA6IGRhdGEuc3BsaWNlKGZyb20sIGxlbmd0aCk7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoY29udGV4dCwgaXgpID0+IHtcclxuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGZyb20gKyBpeDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICAgICAgdG90YWw6IGRhdGFMZW5ndGgsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkeW5hbWljLXRhYmxlXCIgI3BhZ2luYXRpb249XCJwYWdpbmF0aW9uXCIgW3BhZ2luYXRpb25dPVwibG9hZERhdGFcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFt1cGRhdGVUaW1lXT1cInVwZGF0ZVRpbWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbHRlclRlbXBsYXRlIGxldC10YWJsZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtc2VhcmNoXCIgKm5nSWY9XCJ0YWJsZS5zaG93RmlsdGVyXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2F0dHIuZm9yXT1cInRhYmxlSWRcIj57eyBsYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJ0YWJsZUlkXCJcclxuICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cInRlc3RJZCArICctZmlsdGVyLWlucHV0J1wiXHJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidGFibGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRhYmxlLnNldEZpbHRlcigkZXZlbnQpXCIvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy1jb250YWluZXIgW25neFRlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlIHx8IGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVwiIFtjb250ZXh0XT1cInRoaXNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxwYWdpbmF0aW9uLW1lbnUgW21heFNpemVdPVwibWF4UGFnZXNcIiBbZGlyZWN0aW9uTGlua3NdPVwiZGlyZWN0aW9uTGlua3NcIiBbYm91bmRhcnlMaW5rc109XCJib3VuZGFyeUxpbmtzXCI+PC9wYWdpbmF0aW9uLW1lbnU+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uVGVtcGxhdGUgbGV0LWNvbnRleHQgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW1bY29sdW1uXSA9PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW5dID09IG51bGwgPyAnLScgOiBpdGVtW2NvbHVtbl0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHVyZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmd4VGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGUucmVmXCIgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwiJ2NvbHVtbi0nICsgY29sdW1uXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cInRlc3RJZCArICctJyArIGNvbHVtbiArICctJyArIGNvbnRleHQucm93SW5kZXhcIiAqbmdJZj1cIiF0ZW1wbGF0ZSB8fCAhdGVtcGxhdGUucHVyZTsgZWxzZSBwdXJlVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25neFRlbXBsYXRlT3V0bGV0XT1cIiF0ZW1wbGF0ZSA/IGRlZmF1bHRUZW1wbGF0ZSA6IHRlbXBsYXRlLnJlZlwiIFtjb250ZXh0XT1cImNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2NvbHVtbnNUZW1wbGF0ZSBsZXQtY29udGV4dD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ3hUZW1wbGF0ZU91dGxldF09XCJjb2x1bW5UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FkZGl0aW9uYWxDb250ZXh0XT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZXNbY29sdW1uXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvd1RlbXBsYXRlIGxldC1jb250ZXh0PlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ3hUZW1wbGF0ZU91dGxldF09XCJjb2x1bW5zVGVtcGxhdGVcIiBbY29udGV4dF09XCJjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0V3JhcHBlclRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiIFtuZ0NsYXNzXT1cIidjb2x1bW4tJyArIGNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIm9yZGVyc1tjb2x1bW5dXCIgKGNsaWNrKT1cInNldE9yZGVyKGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdsYWJlbC4nICsgY29sdW1uIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJvcmRlckJ5ID09IGNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJvcmRlckRlc2NlbmRpbmcgPyAnc29ydC1kZXNjJyA6ICdzb3J0LWFzYydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwib3JkZXJCeSA9PSBjb2x1bW4gPyAob3JkZXJEZXNjZW5kaW5nID8gJ3NvcnQtZGVzYyc6ICdzb3J0LWFzYycpIDogJydcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhb3JkZXJzW2NvbHVtbl1cIj57eyAnbGFiZWwuJyArIGNvbHVtbiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpwYWdpbmF0aW9uSXRlbT1cImxldCBjb250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25neFRlbXBsYXRlT3V0bGV0XT1cInJvd1RlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsQ29udGV4dF09XCJ0aGlzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25neFRlbXBsYXRlT3V0bGV0XT1cIndyYXBwZXJUZW1wbGF0ZSB8fCBkZWZhdWx0V3JhcHBlclRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cInRoaXNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHBhZ2luYXRpb24tbWVudSBbbWF4U2l6ZV09XCJtYXhQYWdlc1wiIFtkaXJlY3Rpb25MaW5rc109XCJkaXJlY3Rpb25MaW5rc1wiIFtib3VuZGFyeUxpbmtzXT1cImJvdW5kYXJ5TGlua3NcIj48L3BhZ2luYXRpb24tbWVudT5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -16,8 +16,9 @@ export class PaginationItemDirective {
16
16
  }
17
17
  renderView() {
18
18
  this.viewContainer.clear();
19
- this.pagination.items.forEach((item) => {
19
+ this.pagination.items.forEach((item, ix) => {
20
20
  item.$implicit = item;
21
+ item.rowIndex = ix;
21
22
  this.viewContainer.createEmbeddedView(this.templateRef, item);
22
23
  });
23
24
  }
@@ -30,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
30
31
  selector: "[paginationItem]"
31
32
  }]
32
33
  }], ctorParameters: function () { return [{ type: i1.PaginationDirective }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvZGlyZWN0aXZlcy9wYWdpbmF0aW9uLWl0ZW0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXFCLFdBQVcsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBSzNELE1BQU0sT0FBTyx1QkFBdUI7SUFJaEMsWUFBb0IsVUFBK0IsRUFBVSxhQUErQixFQUFVLFdBQTZCO1FBQS9HLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBRW5JLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztvSEF0QlEsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1BhZ2luYXRpb25EaXJlY3RpdmV9IGZyb20gXCIuL3BhZ2luYXRpb24uZGlyZWN0aXZlXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiBcIltwYWdpbmF0aW9uSXRlbV1cIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkl0ZW1EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgcHJpdmF0ZSBvblJlZnJlc2g6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2luYXRpb246IFBhZ2luYXRpb25EaXJlY3RpdmUsIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uUmVmcmVzaCA9IHRoaXMucGFnaW5hdGlvbi5vblJlZnJlc2guc3Vic2NyaWJlKCgpID0+IHRoaXMucmVuZGVyVmlldygpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uUmVmcmVzaC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVuZGVyVmlldygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb24uaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uJGltcGxpY2l0ID0gaXRlbTtcclxuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLCBpdGVtKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvZGlyZWN0aXZlcy9wYWdpbmF0aW9uLWl0ZW0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXFCLFdBQVcsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBSzNELE1BQU0sT0FBTyx1QkFBdUI7SUFJaEMsWUFBb0IsVUFBK0IsRUFBVSxhQUErQixFQUFVLFdBQTZCO1FBQS9HLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBRW5JLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBVSxFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7b0hBdkJRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtpQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtQYWdpbmF0aW9uRGlyZWN0aXZlfSBmcm9tIFwiLi9wYWdpbmF0aW9uLmRpcmVjdGl2ZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogXCJbcGFnaW5hdGlvbkl0ZW1dXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25JdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIHByaXZhdGUgb25SZWZyZXNoOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uRGlyZWN0aXZlLCBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblJlZnJlc2ggPSB0aGlzLnBhZ2luYXRpb24ub25SZWZyZXNoLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlbmRlclZpZXcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbmRlclZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLml0ZW1zLmZvckVhY2goKGl0ZW06IGFueSwgaXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLiRpbXBsaWNpdCA9IGl0ZW07XHJcbiAgICAgICAgICAgIGl0ZW0ucm93SW5kZXggPSBpeDtcclxuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLCBpdGVtKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Inject, Injectable, Optional } from "@angular/core";
1
+ import { Inject, Injectable, Injector, Optional } from "@angular/core";
2
2
  import { HttpEventType } from "@angular/common/http";
3
3
  import { CONFIG_SERVICE, EXPRESS_REQUEST, HttpPromise, LANGUAGE_SERVICE, TOASTER_SERVICE } from "../common-types";
4
4
  import { ObjectUtils } from "../utils/object.utils";
@@ -11,7 +11,8 @@ import * as i0 from "@angular/core";
11
11
  import * as i1 from "./base-http.client";
12
12
  import * as i2 from "./storage.service";
13
13
  export class BaseHttpService {
14
- constructor(client, storage, language, toaster, configs, request = null) {
14
+ constructor(injector, client, storage, language, toaster, configs, request = null) {
15
+ this.injector = injector;
15
16
  this.client = client;
16
17
  this.storage = storage;
17
18
  this.language = language;
@@ -273,11 +274,14 @@ export class BaseHttpService {
273
274
  }
274
275
  }
275
276
  BaseHttpService.failedRequests = [];
276
- BaseHttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService, deps: [{ token: BaseHttpClient }, { token: StorageService }, { token: LANGUAGE_SERVICE }, { token: TOASTER_SERVICE }, { token: CONFIG_SERVICE }, { token: EXPRESS_REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
277
+ BaseHttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService, deps: [{ token: Injector }, { token: BaseHttpClient }, { token: StorageService }, { token: LANGUAGE_SERVICE }, { token: TOASTER_SERVICE }, { token: CONFIG_SERVICE }, { token: EXPRESS_REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
277
278
  BaseHttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService });
278
279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService, decorators: [{
279
280
  type: Injectable
280
- }], ctorParameters: function () { return [{ type: i1.BaseHttpClient, decorators: [{
281
+ }], ctorParameters: function () { return [{ type: i0.Injector, decorators: [{
282
+ type: Inject,
283
+ args: [Injector]
284
+ }] }, { type: i1.BaseHttpClient, decorators: [{
281
285
  type: Inject,
282
286
  args: [BaseHttpClient]
283
287
  }] }, { type: i2.StorageService, decorators: [{
@@ -298,4 +302,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
298
302
  type: Inject,
299
303
  args: [EXPRESS_REQUEST]
300
304
  }] }]; } });
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2Jhc2UtaHR0cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQW9CLGFBQWEsRUFBd0MsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RyxPQUFPLEVBQ0gsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBVVgsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7QUFHbEMsTUFBTSxPQUFPLGVBQWU7SUF5QnhCLFlBQTZDLE1BQXNCLEVBQ3RCLE9BQXVCLEVBQ3JCLFFBQTBCLEVBQzNCLE9BQXdCLEVBQ3pCLE9BQXVCLEVBQ1YsVUFBbUIsSUFBSTtRQUxwQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNWLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBRTdFLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxD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QixNQUFNOzJCQUFDLGNBQWM7OzBCQUNyQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1JlcXVlc3R9IGZyb20gXCJleHByZXNzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQ09ORklHX1NFUlZJQ0UsXHJcbiAgICBFWFBSRVNTX1JFUVVFU1QsXHJcbiAgICBIdHRwUHJvbWlzZSxcclxuICAgIElDb25maWdTZXJ2aWNlLFxyXG4gICAgSUh0dHBIZWFkZXJzLFxyXG4gICAgSUh0dHBQYXJhbXMsXHJcbiAgICBJSHR0cFNlcnZpY2UsXHJcbiAgICBJSXNzdWVDb250ZXh0LFxyXG4gICAgSUxhbmd1YWdlU2VydmljZSxcclxuICAgIElQYWdpbmF0aW9uRGF0YSxcclxuICAgIElSZXF1ZXN0T3B0aW9ucyxcclxuICAgIElUb2FzdGVyU2VydmljZSxcclxuICAgIExBTkdVQUdFX1NFUlZJQ0UsXHJcbiAgICBQcm9ncmVzc0xpc3RlbmVyLFxyXG4gICAgVE9BU1RFUl9TRVJWSUNFXHJcbn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4uL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5pbXBvcnQge01hdGhVdGlsc30gZnJvbSBcIi4uL3V0aWxzL21hdGgudXRpbHNcIjtcclxuXHJcbmltcG9ydCB7QmFzZUh0dHBDbGllbnR9IGZyb20gXCIuL2Jhc2UtaHR0cC5jbGllbnRcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHt0aW1lb3V0fSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtUaW1lb3V0RXJyb3J9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBCYXNlSHR0cFNlcnZpY2UgaW1wbGVtZW50cyBJSHR0cFNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCBzdGF0aWMgZmFpbGVkUmVxdWVzdHM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJiYXNlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCB3aXRoQ3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVxdWVzdEhlYWRlcnM6IElIdHRwSGVhZGVycztcclxuICAgIHJlcXVlc3RQYXJhbXM6IElIdHRwUGFyYW1zO1xyXG4gICAgY2FjaGU6IGFueTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJldHJ5RmFpbGVkUmVxdWVzdHMoKTogdm9pZCB7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLmZvckVhY2gociA9PiByKCkpO1xyXG4gICAgICAgIEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1bml2ZXJzYWwoKTogVW5pdmVyc2FsU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS51bml2ZXJzYWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChCYXNlSHR0cENsaWVudCkgcmVhZG9ubHkgY2xpZW50OiBCYXNlSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoU3RvcmFnZVNlcnZpY2UpIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChMQU5HVUFHRV9TRVJWSUNFKSByZWFkb25seSBsYW5ndWFnZTogSUxhbmd1YWdlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoVE9BU1RFUl9TRVJWSUNFKSByZWFkb25seSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KENPTkZJR19TRVJWSUNFKSByZWFkb25seSBjb25maWdzOiBJQ29uZmlnU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRVhQUkVTU19SRVFVRVNUKSByZWFkb25seSByZXF1ZXN0OiBSZXF1ZXN0ID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMucmVxdWVzdFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmluaXRTZXJ2aWNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlVXJsKHVybDogc3RyaW5nLCBwYXJhbXM6IElIdHRwUGFyYW1zKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBodHRwUGFyYW1zID0gdGhpcy5jbGllbnQubWFrZVBhcmFtcyhwYXJhbXMpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaHR0cFBhcmFtcy5rZXlzKCkubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7aHR0cFBhcmFtcy5nZXQoa2V5KX1gO1xyXG4gICAgICAgIH0pLmpvaW4oXCImXCIpO1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnVybCh1cmwpfT8ke3F1ZXJ5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUxpc3RQYXJhbXMocGFnZTogbnVtYmVyLCBpdGVtc1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogc3RyaW5nID0gbnVsbCwgb3JkZXJEZXNjZW5kaW5nOiBib29sZWFuID0gbnVsbCwgZmlsdGVyOiBzdHJpbmcgPSBudWxsKTogSUh0dHBQYXJhbXMge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogSUh0dHBQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSksXHJcbiAgICAgICAgICAgIGxpbWl0OiBpdGVtc1BlclBhZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQob3JkZXJCeSkgJiYgIU9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKG9yZGVyRGVzY2VuZGluZykpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSBgJHtvcmRlckRlc2NlbmRpbmcgPyBcIi1cIiA6IFwiXCJ9JHtvcmRlckJ5fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoZmlsdGVyKSkge1xyXG4gICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gZmlsdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiR0VUXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkZWxldGVQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiREVMRVRFXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwb3N0UHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHB1dFByb21pc2UodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMpOiBIdHRwUHJvbWlzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMubWFrZU9wdGlvbnMob3B0aW9ucywgXCJQVVRcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhdGNoUHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBBVENIXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGxvYWRQcm9taXNlKHVybDogc3RyaW5nLCBib2R5OiBhbnksIGxpc3RlbmVyPzogUHJvZ3Jlc3NMaXN0ZW5lciwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcclxuICAgICAgICAgICAgaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxyXG4gICAgICAgIH0sIG9wdGlvbnMpLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucywgbGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBsaXN0UHJvbWlzZSh1cmw6IHN0cmluZywgcGFyYW1zOiBJSHR0cFBhcmFtcyk6IFByb21pc2U8SVBhZ2luYXRpb25EYXRhPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElQYWdpbmF0aW9uRGF0YT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZSh1cmwsIHtwYXJhbXM6IHBhcmFtc30pLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLm1ldGE/LnRvdGFsIHx8IGRhdGE/LnRvdGFsIHx8IGRhdGEuaXRlbXM/Lmxlbmd0aCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IGRhdGEubWV0YSB8fCB7fVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTm90IGltcGxlbWVudGVkLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHt9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGhhbmRsZVVuYXV0aG9yaXplZEVycm9yKGFic29sdXRlVXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgcmVqZWN0OiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgaWYgKEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVc2VyIGF1dGggZXJyb3JcIiwgYWJzb2x1dGVVcmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b2FzdFdhcm5pbmcobWVzc2FnZTogc3RyaW5nLCBpc3N1ZUNvbnRleHQ6IElJc3N1ZUNvbnRleHQsIHJlYXNvbjogYW55LCBvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIud2FybmluZyhtZXNzYWdlLCB7aXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCwgcmVhc29uOiBhbnksIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci53YXJuaW5nKG1lc3NhZ2UsIHtpc3N1ZUNvbnRleHQsIHJlYXNvbiwgb3B0aW9uc30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b1Byb21pc2UodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgbGlzdGVuZXI/OiBQcm9ncmVzc0xpc3RlbmVyKTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCA9IHt1cmw6IFwiXCJ9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBQcm9taXNlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIllvdSBtYXkgbm90IG5lZWQgYSByZWplY3QgSGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0IVwiLCB0aGlzLm5hbWUsIHVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVhc29uID0gcmVzcG9uc2UuZXJyb3IgfHwge307XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0V2FybmluZyhgJHt1cmx9IGVuZHBvaW50IGlzIG5vdCBpbXBsZW1lbnRlZCEgQ2xpY2sgaGVyZSwgdG8gcXVpY2tseSBjcmVhdGUgYW4gaXNzdWUuYCwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gLygoRTExMDAwIGR1cGxpY2F0ZSBrZXkgZXJyb3IgY29sbGVjdGlvbjogKC4pK1xcLil8KF8xIGR1cCBrZXk6KC4pKykpL2c7XHJcbiAgICAgICAgICAgIGlmIChyZWFzb24ubWVzc2FnZSAmJiByZWdleC50ZXN0KHJlYXNvbi5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdEVycm9yKFwibWVzc2FnZS5kdXBsaWNhdGUta2V5LmVycm9yLlwiICsgcmVhc29uLm1lc3NhZ2UucmVwbGFjZShyZWdleCwgXCJcIikucmVwbGFjZShcIiBpbmRleDogXCIsIFwiLVwiKSwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RXYXJuaW5nKGAke3VybH0gZW5kcG9pbnQgZXJyb3IgaXMgbm90IGhhbmRsZWQgcHJvcGVybHkhIENsaWNrIGhlcmUsIHRvIHF1aWNrbHkgY3JlYXRlIGFuIGlzc3VlLmAsIGlzc3VlQ29udGV4dCwgcmVhc29uLCBvcHRpb25zKTtcclxuICAgICAgICB9LCAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVVcmwodXJsLCBvcHRpb25zKS50aGVuKGFic29sdXRlVXJsID0+IHtcclxuICAgICAgICAgICAgICAgIGlzc3VlQ29udGV4dC51cmwgPSBhYnNvbHV0ZVVybDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNsaWVudC5yZXF1ZXN0KG9wdGlvbnMubWV0aG9kLCBhYnNvbHV0ZVVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFJlcXVlc3QgPSBPYmplY3RVdGlscy5pc051bWJlcihvcHRpb25zLnRpbWVvdXQpICYmIG9wdGlvbnMudGltZW91dCA+IDBcclxuICAgICAgICAgICAgICAgICAgICA/IHJlcXVlc3QucGlwZSh0aW1lb3V0KG9wdGlvbnMudGltZW91dCkpIDogcmVxdWVzdDtcclxuICAgICAgICAgICAgICAgIGZpbmFsUmVxdWVzdC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXBvcnRQcm9ncmVzcyAmJiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZTogTWF0aFV0aWxzLnJvdW5kKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsLCAyLCAwLjAxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2ZW50LnRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIocHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnBhcnNlUmVzcG9uc2UoZXZlbnQsIHVybCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgYXMgSHR0cEhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0aEtleSA9IFwiQXV0aG9yaXphdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHVzZSB0b2tlbiBhdXRoXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jICYmIGhlYWRlcnMuaGFzKGF1dGhLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJUb2tlblRpbWUgPSB0aGlzLmdldFVzZXJUb2tlblRpbWUoKSB8fCBjdXJyZW50VGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIHRoZSBsYXN0IHJlcXVlc3Qgd2FzIGEgbG9uZy1sb25nIHRpbWUgYWdvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIDYwMDAwMCA+IHVzZXJUb2tlblRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlIHwgVGltZW91dEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgVGltZW91dEVycm9yIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAzMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhLZXkgPSBcIkF1dGhvcml6YXRpb25cIjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBhdXRob3JpemF0aW9uIGhlYWRlciBleGlzdHMsIGFuZCB3ZSBzdGlsbCBoYXZlIGFuIFVuYXV0aG9yaXplZCByZXNwb25zZSBwcm9tcHQgdGhlIHVzZXIgdG8gbG9nIGluIGFnYWluXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzKGF1dGhLZXkpICYmIHJlc3BvbnNlLnN0YXR1cyA9PSA0MDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHVzaGVkID0gdGhpcy5wdXNoRmFpbGVkUmVxdWVzdCh1cmwsIG9wdGlvbnMsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnMob3B0aW9ucy5vcmlnaW5hbEhlYWRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b1Byb21pc2UodXJsLCBvcHRpb25zLCBsaXN0ZW5lcikudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVVbmF1dGhvcml6ZWRFcnJvcihhYnNvbHV0ZVVybCwgb3B0aW9ucywgKCkgPT4gcmVqZWN0KHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0VXNlclRva2VuVGltZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KFwidXNlclRva2VuVGltZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHVzaEZhaWxlZFJlcXVlc3QodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgcmVxOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwidG9rZW5cIikgPj0gMCB8fCB1cmwgPT09IFwidXNlclwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLnB1c2gocmVxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2hlY2tIZWFkZXJzKGhlYWRlcnM6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaGVhZGVycyB8fCAhaGVhZGVycy5jb29raWUgfHwgIWhlYWRlcnMucmVmZXJlciB8fCAhaGVhZGVycy5ob3N0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhlYWRlcnMucmVmZXJlci5pbmRleE9mKGhlYWRlcnMuaG9zdCkgPj0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFrZU9wdGlvbnMob3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucywgbWV0aG9kOiBzdHJpbmcgPSBcIkdFVFwiLCBib2R5PzogYW55KTogSVJlcXVlc3RPcHRpb25zIHtcclxuICAgICAgICAvLyBTZXQgYmFzZSBvcHRpb25zXHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyB7Li4ub3B0aW9uc30gOiB7fTtcclxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IG1ldGhvZDtcclxuICAgICAgICBvcHRpb25zLm9ic2VydmUgPSBvcHRpb25zLm9ic2VydmUgfHwgXCJib2R5XCI7XHJcbiAgICAgICAgb3B0aW9ucy5vcmlnaW5hbEhlYWRlcnMgPSBvcHRpb25zLm9yaWdpbmFsSGVhZGVycyB8fCAob3B0aW9ucy5oZWFkZXJzIGFzIElIdHRwSGVhZGVycykgfHwge307XHJcbiAgICAgICAgb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgPSBPYmplY3RVdGlscy5pc0Jvb2xlYW4ob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpID8gb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgOiB0aGlzLndpdGhDcmVkZW50aWFscztcclxuICAgICAgICBvcHRpb25zLmJvZHkgPSBib2R5IHx8IHt9O1xyXG4gICAgICAgIC8vIFNldCBjb29raWVzIGZyb20gc2VydmVyIHNpZGUgcmVxdWVzdFxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSAhdGhpcy5yZXF1ZXN0ID8gbnVsbCA6IHRoaXMucmVxdWVzdC5oZWFkZXJzO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrSGVhZGVycyhoZWFkZXJzKSkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb29raWVcIl0gPSBoZWFkZXJzLmNvb2tpZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVycyhvcHRpb25zKTtcclxuICAgICAgICBvcHRpb25zLnBhcmFtcyA9IHRoaXMubWFrZVBhcmFtcyhvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFrZUhlYWRlcnMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogSHR0cEhlYWRlcnMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5tYWtlSGVhZGVycyhPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlcXVlc3RIZWFkZXJzLCBvcHRpb25zPy5oZWFkZXJzIHx8IHt9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1ha2VQYXJhbXMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogSHR0cFBhcmFtcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50Lm1ha2VQYXJhbXMoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXF1ZXN0UGFyYW1zLCBvcHRpb25zPy5wYXJhbXMgfHwge30pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZShyZXNwb25zZTogYW55LCB1cmw6IHN0cmluZywgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogYW55IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhcnNlVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwodXJsKS5yZXBsYWNlKC8oPzooKD8hOikuXFwvKVxcLykvZywgXCIkMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgYWJzb2x1dGVVcmwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VVcmwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXhwcmVzc1JlcXVlc3RVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHJlcSA9IHRoaXMucmVxdWVzdDtcclxuICAgICAgICBpZiAoIXJlcSB8fCAhdXJsIHx8IHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSB8fCB1cmwuc3RhcnRzV2l0aChcIi8vXCIpKSByZXR1cm4gdXJsO1xyXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHVybC5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIjtcclxuICAgICAgICByZXR1cm4gYCR7cmVxLnByb3RvY29sfTovLyR7cmVxLmdldChcImhvc3RcIil9JHtzZXBhcmF0b3J9JHt1cmx9YDtcclxuICAgIH1cclxufVxyXG4iXX0=
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2Jhc2UtaHR0cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFvQixhQUFhLEVBQXdDLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUNILGNBQWMsRUFDZCxlQUFlLEVBQ2YsV0FBVyxFQVVYLGdCQUFnQixFQUVoQixlQUFlLEVBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUU5QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7O0FBR2xDLE1BQU0sT0FBTyxlQUFlO0lBeUJ4QixZQUF1QyxRQUFrQixFQUNaLE1BQXNCLEVBQ3RCLE9BQXVCLEVBQ3JCLFFBQTBCLEVBQzNCLE9BQXdCLEVBQ3pCLE9BQXVCLEVBQ1YsVUFBbUIsSUFBSTtRQU4xQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDVixZQUFPLEdB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OzBCQUNyQixNQUFNOzJCQUFDLGNBQWM7OzBCQUNyQixNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ3ZCLE1BQU07MkJBQUMsZUFBZTs7MEJBQ3RCLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1JlcXVlc3R9IGZyb20gXCJleHByZXNzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQ09ORklHX1NFUlZJQ0UsXHJcbiAgICBFWFBSRVNTX1JFUVVFU1QsXHJcbiAgICBIdHRwUHJvbWlzZSxcclxuICAgIElDb25maWdTZXJ2aWNlLFxyXG4gICAgSUh0dHBIZWFkZXJzLFxyXG4gICAgSUh0dHBQYXJhbXMsXHJcbiAgICBJSHR0cFNlcnZpY2UsXHJcbiAgICBJSXNzdWVDb250ZXh0LFxyXG4gICAgSUxhbmd1YWdlU2VydmljZSxcclxuICAgIElQYWdpbmF0aW9uRGF0YSxcclxuICAgIElSZXF1ZXN0T3B0aW9ucyxcclxuICAgIElUb2FzdGVyU2VydmljZSxcclxuICAgIExBTkdVQUdFX1NFUlZJQ0UsXHJcbiAgICBQcm9ncmVzc0xpc3RlbmVyLFxyXG4gICAgVE9BU1RFUl9TRVJWSUNFXHJcbn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4uL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5pbXBvcnQge01hdGhVdGlsc30gZnJvbSBcIi4uL3V0aWxzL21hdGgudXRpbHNcIjtcclxuXHJcbmltcG9ydCB7QmFzZUh0dHBDbGllbnR9IGZyb20gXCIuL2Jhc2UtaHR0cC5jbGllbnRcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHt0aW1lb3V0fSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtUaW1lb3V0RXJyb3J9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBCYXNlSHR0cFNlcnZpY2UgaW1wbGVtZW50cyBJSHR0cFNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCBzdGF0aWMgZmFpbGVkUmVxdWVzdHM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJiYXNlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCB3aXRoQ3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVxdWVzdEhlYWRlcnM6IElIdHRwSGVhZGVycztcclxuICAgIHJlcXVlc3RQYXJhbXM6IElIdHRwUGFyYW1zO1xyXG4gICAgY2FjaGU6IGFueTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJldHJ5RmFpbGVkUmVxdWVzdHMoKTogdm9pZCB7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLmZvckVhY2gociA9PiByKCkpO1xyXG4gICAgICAgIEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1bml2ZXJzYWwoKTogVW5pdmVyc2FsU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS51bml2ZXJzYWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJbmplY3RvcikgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChCYXNlSHR0cENsaWVudCkgcmVhZG9ubHkgY2xpZW50OiBCYXNlSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoU3RvcmFnZVNlcnZpY2UpIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChMQU5HVUFHRV9TRVJWSUNFKSByZWFkb25seSBsYW5ndWFnZTogSUxhbmd1YWdlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoVE9BU1RFUl9TRVJWSUNFKSByZWFkb25seSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KENPTkZJR19TRVJWSUNFKSByZWFkb25seSBjb25maWdzOiBJQ29uZmlnU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRVhQUkVTU19SRVFVRVNUKSByZWFkb25seSByZXF1ZXN0OiBSZXF1ZXN0ID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMucmVxdWVzdFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmluaXRTZXJ2aWNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlVXJsKHVybDogc3RyaW5nLCBwYXJhbXM6IElIdHRwUGFyYW1zKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBodHRwUGFyYW1zID0gdGhpcy5jbGllbnQubWFrZVBhcmFtcyhwYXJhbXMpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaHR0cFBhcmFtcy5rZXlzKCkubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7aHR0cFBhcmFtcy5nZXQoa2V5KX1gO1xyXG4gICAgICAgIH0pLmpvaW4oXCImXCIpO1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnVybCh1cmwpfT8ke3F1ZXJ5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUxpc3RQYXJhbXMocGFnZTogbnVtYmVyLCBpdGVtc1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogc3RyaW5nID0gbnVsbCwgb3JkZXJEZXNjZW5kaW5nOiBib29sZWFuID0gbnVsbCwgZmlsdGVyOiBzdHJpbmcgPSBudWxsKTogSUh0dHBQYXJhbXMge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogSUh0dHBQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSksXHJcbiAgICAgICAgICAgIGxpbWl0OiBpdGVtc1BlclBhZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQob3JkZXJCeSkgJiYgIU9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKG9yZGVyRGVzY2VuZGluZykpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSBgJHtvcmRlckRlc2NlbmRpbmcgPyBcIi1cIiA6IFwiXCJ9JHtvcmRlckJ5fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoZmlsdGVyKSkge1xyXG4gICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gZmlsdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiR0VUXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkZWxldGVQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiREVMRVRFXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwb3N0UHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHB1dFByb21pc2UodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMpOiBIdHRwUHJvbWlzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMubWFrZU9wdGlvbnMob3B0aW9ucywgXCJQVVRcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhdGNoUHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBBVENIXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGxvYWRQcm9taXNlKHVybDogc3RyaW5nLCBib2R5OiBhbnksIGxpc3RlbmVyPzogUHJvZ3Jlc3NMaXN0ZW5lciwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcclxuICAgICAgICAgICAgaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxyXG4gICAgICAgIH0sIG9wdGlvbnMpLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucywgbGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBsaXN0UHJvbWlzZSh1cmw6IHN0cmluZywgcGFyYW1zOiBJSHR0cFBhcmFtcyk6IFByb21pc2U8SVBhZ2luYXRpb25EYXRhPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElQYWdpbmF0aW9uRGF0YT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZSh1cmwsIHtwYXJhbXM6IHBhcmFtc30pLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLm1ldGE/LnRvdGFsIHx8IGRhdGE/LnRvdGFsIHx8IGRhdGEuaXRlbXM/Lmxlbmd0aCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IGRhdGEubWV0YSB8fCB7fVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTm90IGltcGxlbWVudGVkLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHt9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGhhbmRsZVVuYXV0aG9yaXplZEVycm9yKGFic29sdXRlVXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgcmVqZWN0OiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgaWYgKEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVc2VyIGF1dGggZXJyb3JcIiwgYWJzb2x1dGVVcmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b2FzdFdhcm5pbmcobWVzc2FnZTogc3RyaW5nLCBpc3N1ZUNvbnRleHQ6IElJc3N1ZUNvbnRleHQsIHJlYXNvbjogYW55LCBvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIud2FybmluZyhtZXNzYWdlLCB7aXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCwgcmVhc29uOiBhbnksIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci53YXJuaW5nKG1lc3NhZ2UsIHtpc3N1ZUNvbnRleHQsIHJlYXNvbiwgb3B0aW9uc30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b1Byb21pc2UodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgbGlzdGVuZXI/OiBQcm9ncmVzc0xpc3RlbmVyKTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCA9IHt1cmw6IFwiXCJ9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBQcm9taXNlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIllvdSBtYXkgbm90IG5lZWQgYSByZWplY3QgSGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0IVwiLCB0aGlzLm5hbWUsIHVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVhc29uID0gcmVzcG9uc2UuZXJyb3IgfHwge307XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0V2FybmluZyhgJHt1cmx9IGVuZHBvaW50IGlzIG5vdCBpbXBsZW1lbnRlZCEgQ2xpY2sgaGVyZSwgdG8gcXVpY2tseSBjcmVhdGUgYW4gaXNzdWUuYCwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gLygoRTExMDAwIGR1cGxpY2F0ZSBrZXkgZXJyb3IgY29sbGVjdGlvbjogKC4pK1xcLil8KF8xIGR1cCBrZXk6KC4pKykpL2c7XHJcbiAgICAgICAgICAgIGlmIChyZWFzb24ubWVzc2FnZSAmJiByZWdleC50ZXN0KHJlYXNvbi5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdEVycm9yKFwibWVzc2FnZS5kdXBsaWNhdGUta2V5LmVycm9yLlwiICsgcmVhc29uLm1lc3NhZ2UucmVwbGFjZShyZWdleCwgXCJcIikucmVwbGFjZShcIiBpbmRleDogXCIsIFwiLVwiKSwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RXYXJuaW5nKGAke3VybH0gZW5kcG9pbnQgZXJyb3IgaXMgbm90IGhhbmRsZWQgcHJvcGVybHkhIENsaWNrIGhlcmUsIHRvIHF1aWNrbHkgY3JlYXRlIGFuIGlzc3VlLmAsIGlzc3VlQ29udGV4dCwgcmVhc29uLCBvcHRpb25zKTtcclxuICAgICAgICB9LCAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVVcmwodXJsLCBvcHRpb25zKS50aGVuKGFic29sdXRlVXJsID0+IHtcclxuICAgICAgICAgICAgICAgIGlzc3VlQ29udGV4dC51cmwgPSBhYnNvbHV0ZVVybDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNsaWVudC5yZXF1ZXN0KG9wdGlvbnMubWV0aG9kLCBhYnNvbHV0ZVVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFJlcXVlc3QgPSBPYmplY3RVdGlscy5pc051bWJlcihvcHRpb25zLnRpbWVvdXQpICYmIG9wdGlvbnMudGltZW91dCA+IDBcclxuICAgICAgICAgICAgICAgICAgICA/IHJlcXVlc3QucGlwZSh0aW1lb3V0KG9wdGlvbnMudGltZW91dCkpIDogcmVxdWVzdDtcclxuICAgICAgICAgICAgICAgIGZpbmFsUmVxdWVzdC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXBvcnRQcm9ncmVzcyAmJiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZTogTWF0aFV0aWxzLnJvdW5kKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsLCAyLCAwLjAxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2ZW50LnRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIocHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnBhcnNlUmVzcG9uc2UoZXZlbnQsIHVybCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgYXMgSHR0cEhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0aEtleSA9IFwiQXV0aG9yaXphdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHVzZSB0b2tlbiBhdXRoXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jICYmIGhlYWRlcnMuaGFzKGF1dGhLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJUb2tlblRpbWUgPSB0aGlzLmdldFVzZXJUb2tlblRpbWUoKSB8fCBjdXJyZW50VGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIHRoZSBsYXN0IHJlcXVlc3Qgd2FzIGEgbG9uZy1sb25nIHRpbWUgYWdvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIDYwMDAwMCA+IHVzZXJUb2tlblRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlIHwgVGltZW91dEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgVGltZW91dEVycm9yIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAzMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhLZXkgPSBcIkF1dGhvcml6YXRpb25cIjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBhdXRob3JpemF0aW9uIGhlYWRlciBleGlzdHMsIGFuZCB3ZSBzdGlsbCBoYXZlIGFuIFVuYXV0aG9yaXplZCByZXNwb25zZSBwcm9tcHQgdGhlIHVzZXIgdG8gbG9nIGluIGFnYWluXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzKGF1dGhLZXkpICYmIHJlc3BvbnNlLnN0YXR1cyA9PSA0MDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHVzaGVkID0gdGhpcy5wdXNoRmFpbGVkUmVxdWVzdCh1cmwsIG9wdGlvbnMsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnMob3B0aW9ucy5vcmlnaW5hbEhlYWRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b1Byb21pc2UodXJsLCBvcHRpb25zLCBsaXN0ZW5lcikudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVVbmF1dGhvcml6ZWRFcnJvcihhYnNvbHV0ZVVybCwgb3B0aW9ucywgKCkgPT4gcmVqZWN0KHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0VXNlclRva2VuVGltZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KFwidXNlclRva2VuVGltZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHVzaEZhaWxlZFJlcXVlc3QodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgcmVxOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwidG9rZW5cIikgPj0gMCB8fCB1cmwgPT09IFwidXNlclwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLnB1c2gocmVxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2hlY2tIZWFkZXJzKGhlYWRlcnM6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaGVhZGVycyB8fCAhaGVhZGVycy5jb29raWUgfHwgIWhlYWRlcnMucmVmZXJlciB8fCAhaGVhZGVycy5ob3N0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhlYWRlcnMucmVmZXJlci5pbmRleE9mKGhlYWRlcnMuaG9zdCkgPj0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFrZU9wdGlvbnMob3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucywgbWV0aG9kOiBzdHJpbmcgPSBcIkdFVFwiLCBib2R5PzogYW55KTogSVJlcXVlc3RPcHRpb25zIHtcclxuICAgICAgICAvLyBTZXQgYmFzZSBvcHRpb25zXHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyB7Li4ub3B0aW9uc30gOiB7fTtcclxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IG1ldGhvZDtcclxuICAgICAgICBvcHRpb25zLm9ic2VydmUgPSBvcHRpb25zLm9ic2VydmUgfHwgXCJib2R5XCI7XHJcbiAgICAgICAgb3B0aW9ucy5vcmlnaW5hbEhlYWRlcnMgPSBvcHRpb25zLm9yaWdpbmFsSGVhZGVycyB8fCAob3B0aW9ucy5oZWFkZXJzIGFzIElIdHRwSGVhZGVycykgfHwge307XHJcbiAgICAgICAgb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgPSBPYmplY3RVdGlscy5pc0Jvb2xlYW4ob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpID8gb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgOiB0aGlzLndpdGhDcmVkZW50aWFscztcclxuICAgICAgICBvcHRpb25zLmJvZHkgPSBib2R5IHx8IHt9O1xyXG4gICAgICAgIC8vIFNldCBjb29raWVzIGZyb20gc2VydmVyIHNpZGUgcmVxdWVzdFxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSAhdGhpcy5yZXF1ZXN0ID8gbnVsbCA6IHRoaXMucmVxdWVzdC5oZWFkZXJzO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrSGVhZGVycyhoZWFkZXJzKSkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb29raWVcIl0gPSBoZWFkZXJzLmNvb2tpZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVycyhvcHRpb25zKTtcclxuICAgICAgICBvcHRpb25zLnBhcmFtcyA9IHRoaXMubWFrZVBhcmFtcyhvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFrZUhlYWRlcnMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogSHR0cEhlYWRlcnMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5tYWtlSGVhZGVycyhPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlcXVlc3RIZWFkZXJzLCBvcHRpb25zPy5oZWFkZXJzIHx8IHt9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1ha2VQYXJhbXMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogSHR0cFBhcmFtcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50Lm1ha2VQYXJhbXMoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXF1ZXN0UGFyYW1zLCBvcHRpb25zPy5wYXJhbXMgfHwge30pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZShyZXNwb25zZTogYW55LCB1cmw6IHN0cmluZywgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogYW55IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhcnNlVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwodXJsKS5yZXBsYWNlKC8oPzooKD8hOikuXFwvKVxcLykvZywgXCIkMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgYWJzb2x1dGVVcmwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VVcmwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXhwcmVzc1JlcXVlc3RVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHJlcSA9IHRoaXMucmVxdWVzdDtcclxuICAgICAgICBpZiAoIXJlcSB8fCAhdXJsIHx8IHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSB8fCB1cmwuc3RhcnRzV2l0aChcIi8vXCIpKSByZXR1cm4gdXJsO1xyXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHVybC5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIjtcclxuICAgICAgICByZXR1cm4gYCR7cmVxLnByb3RvY29sfTovLyR7cmVxLmdldChcImhvc3RcIil9JHtzZXBhcmF0b3J9JHt1cmx9YDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -2373,7 +2373,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
2373
2373
  }], ctorParameters: function () { return [{ type: UniversalService }]; } });
2374
2374
 
2375
2375
  class BaseHttpService {
2376
- constructor(client, storage, language, toaster, configs, request = null) {
2376
+ constructor(injector, client, storage, language, toaster, configs, request = null) {
2377
+ this.injector = injector;
2377
2378
  this.client = client;
2378
2379
  this.storage = storage;
2379
2380
  this.language = language;
@@ -2638,12 +2639,15 @@ class BaseHttpService {
2638
2639
  }
2639
2640
  }
2640
2641
  BaseHttpService.failedRequests = [];
2641
- BaseHttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService, deps: [{ token: BaseHttpClient }, { token: StorageService }, { token: LANGUAGE_SERVICE }, { token: TOASTER_SERVICE }, { token: CONFIG_SERVICE }, { token: EXPRESS_REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
2642
+ BaseHttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService, deps: [{ token: Injector }, { token: BaseHttpClient }, { token: StorageService }, { token: LANGUAGE_SERVICE }, { token: TOASTER_SERVICE }, { token: CONFIG_SERVICE }, { token: EXPRESS_REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
2642
2643
  BaseHttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService });
2643
2644
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BaseHttpService, decorators: [{
2644
2645
  type: Injectable
2645
2646
  }], ctorParameters: function () {
2646
- return [{ type: BaseHttpClient, decorators: [{
2647
+ return [{ type: i0.Injector, decorators: [{
2648
+ type: Inject,
2649
+ args: [Injector]
2650
+ }] }, { type: BaseHttpClient, decorators: [{
2647
2651
  type: Inject,
2648
2652
  args: [BaseHttpClient]
2649
2653
  }] }, { type: StorageService, decorators: [{
@@ -4844,8 +4848,9 @@ class PaginationItemDirective {
4844
4848
  }
4845
4849
  renderView() {
4846
4850
  this.viewContainer.clear();
4847
- this.pagination.items.forEach((item) => {
4851
+ this.pagination.items.forEach((item, ix) => {
4848
4852
  item.$implicit = item;
4853
+ item.rowIndex = ix;
4849
4854
  this.viewContainer.createEmbeddedView(this.templateRef, item);
4850
4855
  });
4851
4856
  }
@@ -5239,6 +5244,7 @@ class DynamicTableComponent {
5239
5244
  this.tableId = UniqueUtils.uuid();
5240
5245
  this.templates = {};
5241
5246
  this.filter = "";
5247
+ this.testId = "table";
5242
5248
  this.orders = {};
5243
5249
  }
5244
5250
  get items() {
@@ -5330,10 +5336,10 @@ class DynamicTableComponent {
5330
5336
  }
5331
5337
  }
5332
5338
  DynamicTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5333
- DynamicTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicTableComponent, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", components: [{ type: PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }], directives: [{ type: PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { type: PaginationItemDirective, selector: "[paginationItem]" }], pipes: { "translate": TranslatePipe } });
5339
+ DynamicTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicTableComponent, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending", testId: "testId" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", components: [{ type: PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }], directives: [{ type: PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { type: PaginationItemDirective, selector: "[paginationItem]" }], pipes: { "translate": TranslatePipe } });
5334
5340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicTableComponent, decorators: [{
5335
5341
  type: Component,
5336
- args: [{ selector: "dynamic-table", template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n" }]
5342
+ args: [{ selector: "dynamic-table", template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n" }]
5337
5343
  }], ctorParameters: function () { return []; }, propDecorators: { label: [{
5338
5344
  type: Input
5339
5345
  }], placeholder: [{
@@ -5362,6 +5368,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
5362
5368
  type: Input
5363
5369
  }], orderDescending: [{
5364
5370
  type: Input
5371
+ }], testId: [{
5372
+ type: Input
5365
5373
  }], rowTemplate: [{
5366
5374
  type: ContentChild,
5367
5375
  args: ["rowTemplate", { static: true }]