igniteui-angular 17.2.9 → 17.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +3 -6
  2. package/esm2022/lib/data-operations/filtering-expressions-tree.mjs +3 -3
  3. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +5 -1
  4. package/esm2022/lib/directives/for-of/for_of.directive.mjs +3 -3
  5. package/esm2022/lib/drop-down/drop-down-item.base.mjs +3 -3
  6. package/esm2022/lib/drop-down/drop-down.base.mjs +2 -2
  7. package/esm2022/lib/drop-down/drop-down.common.mjs +1 -1
  8. package/esm2022/lib/drop-down/drop-down.component.mjs +26 -11
  9. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +17 -4
  10. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +14 -9
  11. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +8 -5
  12. package/esm2022/lib/grids/headers/grid-header.component.mjs +8 -2
  13. package/esm2022/lib/grids/selection/selection.service.mjs +6 -4
  14. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +27 -3
  15. package/esm2022/lib/services/excel/excel-strings.mjs +2 -2
  16. package/fesm2022/igniteui-angular.mjs +110 -43
  17. package/fesm2022/igniteui-angular.mjs.map +1 -1
  18. package/lib/core/styles/components/grid/_excel-filtering-component.scss +5 -0
  19. package/lib/core/styles/components/grid/_excel-filtering-theme.scss +5 -0
  20. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-component.scss +0 -4
  21. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss +0 -15
  22. package/lib/drop-down/drop-down-item.base.d.ts +1 -1
  23. package/lib/drop-down/drop-down.base.d.ts +1 -1
  24. package/lib/drop-down/drop-down.common.d.ts +1 -1
  25. package/lib/drop-down/drop-down.component.d.ts +13 -8
  26. package/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.d.ts +5 -0
  27. package/lib/grids/headers/grid-header.component.d.ts +1 -0
  28. package/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.d.ts +12 -1
  29. package/package.json +1 -1
  30. package/styles/igniteui-angular-dark.css +1 -1
  31. package/styles/igniteui-angular.css +1 -1
  32. package/styles/igniteui-bootstrap-dark.css +1 -1
  33. package/styles/igniteui-bootstrap-light.css +1 -1
  34. package/styles/igniteui-dark-green.css +1 -1
  35. package/styles/igniteui-fluent-dark-excel.css +1 -1
  36. package/styles/igniteui-fluent-dark-word.css +1 -1
  37. package/styles/igniteui-fluent-dark.css +1 -1
  38. package/styles/igniteui-fluent-light-excel.css +1 -1
  39. package/styles/igniteui-fluent-light-word.css +1 -1
  40. package/styles/igniteui-fluent-light.css +1 -1
  41. package/styles/igniteui-indigo-dark.css +1 -1
  42. package/styles/igniteui-indigo-light.css +1 -1
  43. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  44. package/styles/maps/igniteui-angular.css.map +1 -1
  45. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  46. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  47. package/styles/maps/igniteui-dark-green.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  50. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  51. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  52. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  53. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  54. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  55. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -171,8 +171,11 @@ export class IgxGridHeaderGroupComponent {
171
171
  * @hidden
172
172
  */
173
173
  onMouseDown(event) {
174
- // hack for preventing text selection in IE and Edge while dragging the resize element
175
- event.preventDefault();
174
+ if (!this.grid.allowFiltering ||
175
+ (event.composedPath().findIndex(el => el.tagName?.toLowerCase() === 'igx-grid-filtering-cell') < 1)) {
176
+ // Hack for preventing text selection in IE and Edge while dragging the resize element
177
+ event.preventDefault();
178
+ }
176
179
  }
177
180
  /**
178
181
  * @hidden
@@ -257,11 +260,11 @@ export class IgxGridHeaderGroupComponent {
257
260
  };
258
261
  }
259
262
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxGridHeaderGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: IGX_GRID_BASE }, { token: i0.ElementRef }, { token: i1.IgxColumnResizingService }, { token: i2.IgxFilteringService }, { token: i3.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
260
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxGridHeaderGroupComponent, isStandalone: true, selector: "igx-grid-header-group", inputs: { column: "column" }, host: { listeners: { "mousedown": "onMouseDown($event)" }, properties: { "style.grid-row-end": "this.rowEnd", "style.grid-column-end": "this.colEnd", "style.grid-row-start": "this.rowStart", "style.grid-column-start": "this.colStart", "attr.id": "this.headerID", "class.igx-grid-th--active": "this.active", "class.igx-grid-thead__item": "this.defaultCss", "class.igx-grid-th--pinned": "this.pinnedCss", "class.igx-grid-th--pinned-last": "this.pinnedLastCss", "class.igx-grid-th--pinned-first": "this.pinnedFirstCSS", "class.igx-grid__drag-col-header": "this.headerDragCss", "class.igx-grid-th--filtering": "this.filteringCss", "style.z-index": "this.zIndex", "style.display": "this.groupDisplayStyle" } }, viewQueries: [{ propertyName: "header", first: true, predicate: IgxGridHeaderComponent, descendants: true }, { propertyName: "filter", first: true, predicate: IgxGridFilteringCellComponent, descendants: true }, { propertyName: "children", predicate: i0.forwardRef(() => IgxGridHeaderGroupComponent), descendants: true, read: IgxGridHeaderGroupComponent }], ngImport: i0, template: "<ng-container *ngIf=\"grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__group igx-grid__mrl-block\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn\n }\"\n [ngStyle]=\"{'grid-template-rows':column.getGridTemplate(true),\n 'grid-template-columns':column.getGridTemplate(false)}\">\n <ng-container *ngFor=\"let child of column.children\" >\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\"\n [igxColumnMovingDrag]=\"child\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"child\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n\n<ng-template #defaultColumn>\n <span class=\"igx-grid-th__group-title\" [title]=\"title\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n <igx-icon>{{column.expanded ? 'expand_more' : 'chevron_right'}} </igx-icon>\n</ng-template>\n\n<ng-container *ngIf=\"!grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__title\"\n role=\"columnheader\"\n [attr.aria-label]=\"column.header || column.field\"\n [attr.aria-expanded]=\"column.expanded\"\n [attr.aria-selected]=\"column.selected\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn,\n 'igx-grid-th--collapsible': column.collapsible,\n 'igx-grid-th--selectable': selectable,\n 'igx-grid-th--selected': selected,\n 'igx-grid-th--active': activeGroup}\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"column\"\n (pointerdown)=\"pointerdown($event)\"\n (click)=\"groupClicked($event)\"\n (pointerenter)=\"onPinterEnter()\"\n (pointerleave)=\"onPointerLeave()\"\n >\n <ng-container *ngIf=\"column.collapsible\">\n <div class=\"igx-grid-th__expander\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"toggleExpandState($event)\">\n <ng-container\n *ngTemplateOutlet=\"column.collapsibleIndicatorTemplate ? column.collapsibleIndicatorTemplate : defaultCollapseIndicator; context: {$implicit: column, column: column}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n </ng-container>\n </div>\n <div class=\"igx-grid-thead__group\" *ngIf='!grid.isPivot'>\n <ng-container *ngFor=\"let child of column.children\">\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\"\n [style.min-width]=\"child.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\"\n [style.flex-basis]=\"child.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <igx-grid-header\n role=\"columnheader\"\n class=\"igx-grid-th--fw\"\n [id]=\"grid.id + '_' + column.field\"\n [ngClass]=\"column.headerClasses\"\n [ngStyle]=\"column.headerStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n (pointerdown)=\"activate()\"\n [igxColumnMovingDrop]=\"column\"\n [column]=\"column\"\n [density]=\"grid.displayDensity\"\n >\n </igx-grid-header>\n <igx-grid-filtering-cell *ngIf=\"grid.allowFiltering && grid.filterMode === 'quickFilter'\" [column]=\"column\" [attr.draggable]=\"false\"></igx-grid-filtering-cell>\n <span *ngIf=\"!column.columnGroup && column.resizable\" class=\"igx-grid-th__resize-handle\"\n [igxResizeHandle]=\"column\"\n [attr.draggable]=\"false\"\n [style.cursor]=\"colResizingService.resizeCursor\">\n </span>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n", dependencies: [{ kind: "component", type: IgxGridHeaderGroupComponent, selector: "igx-grid-header-group", inputs: ["column"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IgxColumnMovingDragDirective, selector: "[igxColumnMovingDrag]", inputs: ["igxColumnMovingDrag"] }, { kind: "directive", type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxGridHeaderComponent, selector: "igx-grid-header", inputs: ["column", "density"] }, { kind: "component", type: IgxGridFilteringCellComponent, selector: "igx-grid-filtering-cell", inputs: ["column"] }, { kind: "directive", type: IgxResizeHandleDirective, selector: "[igxResizeHandle]", inputs: ["igxResizeHandle"] }, { kind: "pipe", type: IgxHeaderGroupWidthPipe, name: "igxHeaderGroupWidth" }, { kind: "pipe", type: IgxHeaderGroupStylePipe, name: "igxHeaderGroupStyle" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
263
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxGridHeaderGroupComponent, isStandalone: true, selector: "igx-grid-header-group", inputs: { column: "column" }, host: { listeners: { "mousedown": "onMouseDown($event)" }, properties: { "style.grid-row-end": "this.rowEnd", "style.grid-column-end": "this.colEnd", "style.grid-row-start": "this.rowStart", "style.grid-column-start": "this.colStart", "attr.id": "this.headerID", "class.igx-grid-th--active": "this.active", "class.igx-grid-thead__item": "this.defaultCss", "class.igx-grid-th--pinned": "this.pinnedCss", "class.igx-grid-th--pinned-last": "this.pinnedLastCss", "class.igx-grid-th--pinned-first": "this.pinnedFirstCSS", "class.igx-grid__drag-col-header": "this.headerDragCss", "class.igx-grid-th--filtering": "this.filteringCss", "style.z-index": "this.zIndex", "style.display": "this.groupDisplayStyle" } }, viewQueries: [{ propertyName: "header", first: true, predicate: IgxGridHeaderComponent, descendants: true }, { propertyName: "filter", first: true, predicate: IgxGridFilteringCellComponent, descendants: true }, { propertyName: "children", predicate: i0.forwardRef(() => IgxGridHeaderGroupComponent), descendants: true, read: IgxGridHeaderGroupComponent }], ngImport: i0, template: "<ng-container *ngIf=\"grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__group igx-grid__mrl-block\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn\n }\"\n [ngStyle]=\"{'grid-template-rows':column.getGridTemplate(true),\n 'grid-template-columns':column.getGridTemplate(false)}\">\n <ng-container *ngFor=\"let child of column.children\" >\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n\n<ng-template #defaultColumn>\n <span class=\"igx-grid-th__group-title\" [title]=\"title\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n <igx-icon>{{column.expanded ? 'expand_more' : 'chevron_right'}} </igx-icon>\n</ng-template>\n\n<ng-container *ngIf=\"!grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__title\"\n role=\"columnheader\"\n [attr.aria-label]=\"column.header || column.field\"\n [attr.aria-expanded]=\"column.expanded\"\n [attr.aria-selected]=\"column.selected\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn,\n 'igx-grid-th--collapsible': column.collapsible,\n 'igx-grid-th--selectable': selectable,\n 'igx-grid-th--selected': selected,\n 'igx-grid-th--active': activeGroup}\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"column\"\n (pointerdown)=\"pointerdown($event)\"\n (click)=\"groupClicked($event)\"\n (pointerenter)=\"onPinterEnter()\"\n (pointerleave)=\"onPointerLeave()\"\n >\n <ng-container *ngIf=\"column.collapsible\">\n <div class=\"igx-grid-th__expander\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"toggleExpandState($event)\">\n <ng-container\n *ngTemplateOutlet=\"column.collapsibleIndicatorTemplate ? column.collapsibleIndicatorTemplate : defaultCollapseIndicator; context: {$implicit: column, column: column}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n </ng-container>\n </div>\n <div class=\"igx-grid-thead__group\" *ngIf='!grid.isPivot'>\n <ng-container *ngFor=\"let child of column.children\">\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\"\n [style.min-width]=\"child.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\"\n [style.flex-basis]=\"child.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <igx-grid-header\n role=\"columnheader\"\n class=\"igx-grid-th--fw\"\n [id]=\"grid.id + '_' + column.field\"\n [ngClass]=\"column.headerClasses\"\n [ngStyle]=\"column.headerStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n (pointerdown)=\"activate()\"\n [igxColumnMovingDrop]=\"column\"\n [column]=\"column\"\n [density]=\"grid.displayDensity\"\n >\n </igx-grid-header>\n <igx-grid-filtering-cell *ngIf=\"grid.allowFiltering && grid.filterMode === 'quickFilter'\" [column]=\"column\" [attr.draggable]=\"false\"></igx-grid-filtering-cell>\n <span *ngIf=\"!column.columnGroup && column.resizable\" class=\"igx-grid-th__resize-handle\"\n [igxResizeHandle]=\"column\"\n [attr.draggable]=\"false\"\n [style.cursor]=\"colResizingService.resizeCursor\">\n </span>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n", dependencies: [{ kind: "component", type: IgxGridHeaderGroupComponent, selector: "igx-grid-header-group", inputs: ["column"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IgxColumnMovingDragDirective, selector: "[igxColumnMovingDrag]", inputs: ["igxColumnMovingDrag"] }, { kind: "directive", type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxGridHeaderComponent, selector: "igx-grid-header", inputs: ["column", "density"] }, { kind: "component", type: IgxGridFilteringCellComponent, selector: "igx-grid-filtering-cell", inputs: ["column"] }, { kind: "directive", type: IgxResizeHandleDirective, selector: "[igxResizeHandle]", inputs: ["igxResizeHandle"] }, { kind: "pipe", type: IgxHeaderGroupWidthPipe, name: "igxHeaderGroupWidth" }, { kind: "pipe", type: IgxHeaderGroupStylePipe, name: "igxHeaderGroupStyle" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
261
264
  }
262
265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxGridHeaderGroupComponent, decorators: [{
263
266
  type: Component,
264
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-header-group', standalone: true, imports: [NgIf, NgClass, NgStyle, NgFor, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxIconComponent, NgTemplateOutlet, IgxGridHeaderComponent, IgxGridFilteringCellComponent, IgxResizeHandleDirective, IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe], template: "<ng-container *ngIf=\"grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__group igx-grid__mrl-block\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn\n }\"\n [ngStyle]=\"{'grid-template-rows':column.getGridTemplate(true),\n 'grid-template-columns':column.getGridTemplate(false)}\">\n <ng-container *ngFor=\"let child of column.children\" >\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\"\n [igxColumnMovingDrag]=\"child\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"child\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n\n<ng-template #defaultColumn>\n <span class=\"igx-grid-th__group-title\" [title]=\"title\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n <igx-icon>{{column.expanded ? 'expand_more' : 'chevron_right'}} </igx-icon>\n</ng-template>\n\n<ng-container *ngIf=\"!grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__title\"\n role=\"columnheader\"\n [attr.aria-label]=\"column.header || column.field\"\n [attr.aria-expanded]=\"column.expanded\"\n [attr.aria-selected]=\"column.selected\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn,\n 'igx-grid-th--collapsible': column.collapsible,\n 'igx-grid-th--selectable': selectable,\n 'igx-grid-th--selected': selected,\n 'igx-grid-th--active': activeGroup}\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"column\"\n (pointerdown)=\"pointerdown($event)\"\n (click)=\"groupClicked($event)\"\n (pointerenter)=\"onPinterEnter()\"\n (pointerleave)=\"onPointerLeave()\"\n >\n <ng-container *ngIf=\"column.collapsible\">\n <div class=\"igx-grid-th__expander\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"toggleExpandState($event)\">\n <ng-container\n *ngTemplateOutlet=\"column.collapsibleIndicatorTemplate ? column.collapsibleIndicatorTemplate : defaultCollapseIndicator; context: {$implicit: column, column: column}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n </ng-container>\n </div>\n <div class=\"igx-grid-thead__group\" *ngIf='!grid.isPivot'>\n <ng-container *ngFor=\"let child of column.children\">\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\"\n [style.min-width]=\"child.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\"\n [style.flex-basis]=\"child.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <igx-grid-header\n role=\"columnheader\"\n class=\"igx-grid-th--fw\"\n [id]=\"grid.id + '_' + column.field\"\n [ngClass]=\"column.headerClasses\"\n [ngStyle]=\"column.headerStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n (pointerdown)=\"activate()\"\n [igxColumnMovingDrop]=\"column\"\n [column]=\"column\"\n [density]=\"grid.displayDensity\"\n >\n </igx-grid-header>\n <igx-grid-filtering-cell *ngIf=\"grid.allowFiltering && grid.filterMode === 'quickFilter'\" [column]=\"column\" [attr.draggable]=\"false\"></igx-grid-filtering-cell>\n <span *ngIf=\"!column.columnGroup && column.resizable\" class=\"igx-grid-th__resize-handle\"\n [igxResizeHandle]=\"column\"\n [attr.draggable]=\"false\"\n [style.cursor]=\"colResizingService.resizeCursor\">\n </span>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n" }]
267
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-header-group', standalone: true, imports: [NgIf, NgClass, NgStyle, NgFor, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxIconComponent, NgTemplateOutlet, IgxGridHeaderComponent, IgxGridFilteringCellComponent, IgxResizeHandleDirective, IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe], template: "<ng-container *ngIf=\"grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__group igx-grid__mrl-block\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn\n }\"\n [ngStyle]=\"{'grid-template-rows':column.getGridTemplate(true),\n 'grid-template-columns':column.getGridTemplate(false)}\">\n <ng-container *ngFor=\"let child of column.children\" >\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n\n<ng-template #defaultColumn>\n <span class=\"igx-grid-th__group-title\" [title]=\"title\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n <igx-icon>{{column.expanded ? 'expand_more' : 'chevron_right'}} </igx-icon>\n</ng-template>\n\n<ng-container *ngIf=\"!grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <div class=\"igx-grid-thead__title\"\n role=\"columnheader\"\n [attr.aria-label]=\"column.header || column.field\"\n [attr.aria-expanded]=\"column.expanded\"\n [attr.aria-selected]=\"column.selected\"\n [ngClass]=\"{\n 'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n 'igx-grid-th--pinned-first': hasFirstPinnedChildColumn,\n 'igx-grid-th--collapsible': column.collapsible,\n 'igx-grid-th--selectable': selectable,\n 'igx-grid-th--selected': selected,\n 'igx-grid-th--active': activeGroup}\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"column\"\n (pointerdown)=\"pointerdown($event)\"\n (click)=\"groupClicked($event)\"\n (pointerenter)=\"onPinterEnter()\"\n (pointerleave)=\"onPointerLeave()\"\n >\n <ng-container *ngIf=\"column.collapsible\">\n <div class=\"igx-grid-th__expander\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"toggleExpandState($event)\">\n <ng-container\n *ngTemplateOutlet=\"column.collapsibleIndicatorTemplate ? column.collapsibleIndicatorTemplate : defaultCollapseIndicator; context: {$implicit: column, column: column}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n </ng-container>\n </div>\n <div class=\"igx-grid-thead__group\" *ngIf='!grid.isPivot'>\n <ng-container *ngFor=\"let child of column.children\">\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid-thead__subgroup\"\n [ngClass]=\"child.headerGroupClasses\"\n [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n [column]=\"child\"\n [style.min-width]=\"child.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\"\n [style.flex-basis]=\"child.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.columnGroup\">\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-left\"></span>\n <igx-grid-header\n role=\"columnheader\"\n class=\"igx-grid-th--fw\"\n [id]=\"grid.id + '_' + column.field\"\n [ngClass]=\"column.headerClasses\"\n [ngStyle]=\"column.headerStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outlet.nativeElement\"\n [attr.droppable]=\"true\"\n (pointerdown)=\"activate()\"\n [igxColumnMovingDrop]=\"column\"\n [column]=\"column\"\n [density]=\"grid.displayDensity\"\n >\n </igx-grid-header>\n <igx-grid-filtering-cell *ngIf=\"grid.allowFiltering && grid.filterMode === 'quickFilter'\" [column]=\"column\" [attr.draggable]=\"false\"></igx-grid-filtering-cell>\n <span *ngIf=\"!column.columnGroup && column.resizable\" class=\"igx-grid-th__resize-handle\"\n [igxResizeHandle]=\"column\"\n [attr.draggable]=\"false\"\n [style.cursor]=\"colResizingService.resizeCursor\">\n </span>\n <span *ngIf=\"grid.moving\" class=\"igx-grid-th__drop-indicator-right\"></span>\n</ng-container>\n" }]
265
268
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
266
269
  type: Inject,
267
270
  args: [IGX_GRID_BASE]
@@ -322,4 +325,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
322
325
  type: HostListener,
323
326
  args: ['mousedown', ['$event']]
324
327
  }] } });
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBR1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBd0IsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JB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MkIsRUFBRTtnQkFhM0YsVUFBVTtzQkFEaEIsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBVzlCLFNBQVM7c0JBRG5CLFdBQVc7dUJBQUMsMkJBQTJCO2dCQU03QixhQUFhO3NCQUR2QixXQUFXO3VCQUFDLGdDQUFnQztnQkFNbEMsY0FBYztzQkFEeEIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBTW5DLGFBQWE7c0JBRHZCLFdBQVc7dUJBQUMsaUNBQWlDO2dCQU1uQyxZQUFZO3NCQUR0QixXQUFXO3VCQUFDLDhCQUE4QjtnQkFTaEMsTUFBTTtzQkFEaEIsV0FBVzt1QkFBQyxlQUFlO2dCQWtDakIsaUJBQWlCO3NCQUQzQixXQUFXO3VCQUFDLGVBQWU7Z0JBNkVyQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyaW5nL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJpbmcvYmFzZS9ncmlkLWZpbHRlcmluZy1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEhlYWRlckdyb3VwV2lkdGhQaXBlLCBJZ3hIZWFkZXJHcm91cFN0eWxlUGlwZSB9IGZyb20gJy4vcGlwZXMnO1xuaW1wb3J0IHsgSWd4UmVzaXplSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uTW92aW5nRHJvcERpcmVjdGl2ZSB9IGZyb20gJy4uL21vdmluZy9tb3ZpbmcuZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uTW92aW5nRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL21vdmluZy9tb3ZpbmcuZHJhZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdTdHlsZSwgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5jb25zdCBaX0lOREVYID0gOTk5OTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtaGVhZGVyLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nQ2xhc3MsIE5nU3R5bGUsIE5nRm9yLCBJZ3hDb2x1bW5Nb3ZpbmdEcmFnRGlyZWN0aXZlLCBJZ3hDb2x1bW5Nb3ZpbmdEcm9wRGlyZWN0aXZlLCBJZ3hJY29uQ29tcG9uZW50LCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50LCBJZ3hHcmlkRmlsdGVyaW5nQ2VsbENvbXBvbmVudCwgSWd4UmVzaXplSGFuZGxlRGlyZWN0aXZlLCBJZ3hIZWFkZXJHcm91cFdpZHRoUGlwZSwgSWd4SGVhZGVyR3JvdXBTdHlsZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2sge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLXJvdy1lbmQnKVxuICAgIHB1YmxpYyBnZXQgcm93RW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5yb3dFbmQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLWNvbHVtbi1lbmQnKVxuICAgIHB1YmxpYyBnZXQgY29sRW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xFbmQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLXJvdy1zdGFydCcpXG4gICAgcHVibGljIGdldCByb3dTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93U3RhcnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLWNvbHVtbi1zdGFydCcpXG4gICAgcHVibGljIGdldCBjb2xTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uY29sU3RhcnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgZ2V0IGhlYWRlcklEKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ncmlkLmlkfV8tMV8ke3RoaXMuY29sdW1uLmxldmVsfV8ke3RoaXMuY29sdW1uLnZpc2libGVJbmRleH1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgtLWFjdGl2ZScpXG4gICAgcHVibGljIGdldCBhY3RpdmUoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlO1xuICAgICAgICByZXR1cm4gbm9kZSAmJiAhdGhpcy5jb2x1bW4uY29sdW1uR3JvdXAgP1xuICAgICAgICAgICAgbm9kZS5yb3cgPT09IC0xICYmIG5vZGUuY29sdW1uID09PSB0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXggJiYgbm9kZS5sZXZlbCA9PT0gdGhpcy5jb2x1bW4ubGV2ZWwgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZUdyb3VwKCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLnJvdyA9PT0gLTEgJiYgbm9kZS5jb2x1bW4gPT09IHRoaXMuY29sdW1uLnZpc2libGVJbmRleCAmJiBub2RlLmxldmVsID09PSB0aGlzLmNvbHVtbi5sZXZlbCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKElneEdyaWRIZWFkZXJDb21wb25lbnQpXG4gICAgcHVibGljIGhlYWRlcjogSWd4R3JpZEhlYWRlckNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50KVxuICAgIHB1YmxpYyBmaWx0ZXI6IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQpLCB7IHJlYWQ6IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjaGlsZHJlbjogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0SGVhZGVyR3JvdXBXaWR0aCh0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aGVhZF9faXRlbScpXG4gICAgcHVibGljIGRlZmF1bHRDc3MgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KElHWF9HUklEX0JBU0UpIHB1YmxpYyBncmlkOiBHcmlkVHlwZSxcbiAgICAgICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwdWJsaWMgY29sUmVzaXppbmdTZXJ2aWNlOiBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCkgeyB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1waW5uZWQnKVxuICAgIHB1YmxpYyBnZXQgcGlubmVkQ3NzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1Bpbm5lZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1waW5uZWQtbGFzdCcpXG4gICAgcHVibGljIGdldCBwaW5uZWRMYXN0Q3NzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xhc3RQaW5uZWQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tcGlubmVkLWZpcnN0JylcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZEZpcnN0Q1NTKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpcnN0UGlubmVkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX2RyYWctY29sLWhlYWRlcicpXG4gICAgcHVibGljIGdldCBoZWFkZXJEcmFnQ3NzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hlYWRlckRyYWdnZWQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tZmlsdGVyaW5nJylcbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmluZ0NzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaWx0ZXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS56LWluZGV4JylcbiAgICBwdWJsaWMgZ2V0IHpJbmRleCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbi5waW5uZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBaX0lOREVYIC0gdGhpcy5ncmlkLnBpbm5lZENvbHVtbnMuaW5kZXhPZih0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgYmVsb25ncyB0byBhIGNvbHVtbiB0aGF0IGlzIGZpbHRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNGaWx0ZXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJlZENvbHVtbiA9PT0gdGhpcy5jb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgaXMgc3RvcmVkIGluIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgcGlubmVkIGFyZWEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xhc3RQaW5uZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMgPyB0aGlzLmNvbHVtbi5pc0xhc3RQaW5uZWQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBpcyBzdG9yZWQgaW4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgcmlnaHQgcGlubmVkIGFyZWEuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0ZpcnN0UGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzID8gdGhpcy5jb2x1bW4uaXNGaXJzdFBpbm5lZCA6IGZhbHNlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpXG4gICAgcHVibGljIGdldCBncm91cERpc3BsYXlTdHlsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMgJiYgdGhpcy5jb2x1bW4uY2hpbGRyZW4gPyAnZmxleCcgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBpcyBzdG9yZWQgaW4gYSBwaW5uZWQgY29sdW1uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNQaW5uZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5waW5uZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgYmVsb25ncyB0byBhIGNvbHVtbiB0aGF0IGlzIG1vdmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNIZWFkZXJEcmFnZ2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbkluRHJhZyA9PT0gdGhpcy5jb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uYWxsQ2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5pc0xhc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0ZpcnN0UGlubmVkQ2hpbGRDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5hbGxDaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLmlzRmlyc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGFibGUoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGVDaGlsZHJlbiA9IHRoaXMuY29sdW1uLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiBjLnNlbGVjdGFibGUgJiYgIWMuY29sdW1uR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSAmJlxuICAgICAgICAgICAgdGhpcy5jb2x1bW4uYXBwbHlTZWxlY3RhYmxlQ2xhc3NcbiAgICAgICAgICAgICYmICF0aGlzLnNlbGVjdGVkICYmIHNlbGVjdGFibGVDaGlsZHJlbi5sZW5ndGggPiAwXG4gICAgICAgICAgICAmJiAhdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnRpdGxlIHx8IHRoaXMuY29sdW1uLmhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBoYWNrIGZvciBwcmV2ZW50aW5nIHRleHQgc2VsZWN0aW9uIGluIElFIGFuZCBFZGdlIHdoaWxlIGRyYWdnaW5nIHRoZSByZXNpemUgZWxlbWVudFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ3JvdXBDbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNUb1NlbGVjdCA9IHRoaXMuY29sdW1uLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiBjLnNlbGVjdGFibGUgJiYgIWMuY29sdW1uR3JvdXApLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZVxuICAgICAgICAgICAgJiYgY29sdW1uc1RvU2VsZWN0Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSkge1xuICAgICAgICAgICAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5zaW5nbGUgfHwgIWV2ZW50LmN0cmxLZXk7XG4gICAgICAgICAgICBjb25zdCByYW5nZVNlbGVjdGlvbiA9IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlICYmIGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1ucyhjb2x1bW5zVG9TZWxlY3QsIGNsZWFyU2VsZWN0aW9uLCByYW5nZVNlbGVjdGlvbiwgZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIGlmICgoc2VsZWN0ZWRGaWVsZHMubGVuZ3RoID09PSBjb2x1bW5zVG9TZWxlY3QubGVuZ3RoKSAmJiBzZWxlY3RlZEZpZWxkcy5ldmVyeShlbCA9PiBjb2x1bW5zVG9TZWxlY3QuaW5jbHVkZXMoZWwpKVxuICAgICAgICAgICAgICAgICAgICB8fCAhY2xlYXJTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENvbHVtbnMoY29sdW1uc1RvU2VsZWN0LCBjbGVhclNlbGVjdGlvbiwgcmFuZ2VTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duSW5kaWNhdG9yKGV2ZW50KSB7XG4gICAgICAgIC8vIFN0b3AgcHJvcGFnYXRpb24gb2YgcG9pbnRlciBldmVudHMgdG8gbm93IGFsbG93IGNvbHVtbiBkcmFnZ2luZyB1c2luZyB0aGUgaGVhZGVyIGluZGljYXRvcnMuXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuZFN0YXRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNvbHVtbi5leHBhbmRlZCA9ICF0aGlzLmNvbHVtbi5leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBwb2ludGVyZG93bihldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuZ3JpZC50aGVhZFJvdy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBuZWNlc3NhcnkgZHVlIHRvIHNvbWUgc3BlY2lmaWNzIHJlbGF0ZWQgd2l0aCBpbXBsZW1lbnRhdGlvbiBvZiBjb2x1bW4gbW92aW5nXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmF0ZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh0aGlzLmFjdGl2ZU5vZGUpO1xuICAgICAgICB0aGlzLmdyaWQudGhlYWRSb3cubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uUGludGVyRW50ZXIoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uLmFwcGx5U2VsZWN0YWJsZUNsYXNzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uUG9pbnRlckxlYXZlKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi5hcHBseVNlbGVjdGFibGVDbGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvdzogLTEsIGNvbHVtbjogdGhpcy5jb2x1bW4udmlzaWJsZUluZGV4LCBsZXZlbDogdGhpcy5jb2x1bW4ubGV2ZWwsXG4gICAgICAgICAgICBtY2hDYWNoZTogeyBsZXZlbDogdGhpcy5jb2x1bW4ubGV2ZWwsIHZpc2libGVJbmRleDogdGhpcy5jb2x1bW4udmlzaWJsZUluZGV4IH0sXG4gICAgICAgICAgICBsYXlvdXQ6IHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmNvbHVtbi5yb3dTdGFydCxcbiAgICAgICAgICAgICAgICBjb2xTdGFydDogdGhpcy5jb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiB0aGlzLmNvbHVtbi5yb3dFbmQsXG4gICAgICAgICAgICAgICAgY29sRW5kOiB0aGlzLmNvbHVtbi5jb2xFbmQsXG4gICAgICAgICAgICAgICAgY29sdW1uVmlzaWJsZUluZGV4OiB0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXhcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWQuaGFzQ29sdW1uTGF5b3V0cyAmJiBjb2x1bW4uY29sdW1uR3JvdXBcIj5cbiAgICA8c3BhbiAqbmdJZj1cImdyaWQubW92aW5nXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aF9fZHJvcC1pbmRpY2F0b3ItbGVmdFwiPjwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRfX2dyb3VwIGlneC1ncmlkX19tcmwtYmxvY2tcIlxuICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAnaWd4LWdyaWQtdGgtLXBpbm5lZC1sYXN0JzogaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uLFxuICAgICAgICAgJ2lneC1ncmlkLXRoLS1waW5uZWQtZmlyc3QnOiBoYXNGaXJzdFBpbm5lZENoaWxkQ29sdW1uXG4gICAgICAgIH1cIlxuICAgICBbbmdTdHlsZV09XCJ7J2dyaWQtdGVtcGxhdGUtcm93cyc6Y29sdW1uLmdldEdyaWRUZW1wbGF0ZSh0cnVlKSxcbiAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6Y29sdW1uLmdldEdyaWRUZW1wbGF0ZShmYWxzZSl9XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbHVtbi5jaGlsZHJlblwiID5cbiAgICAgICAgICAgIDxpZ3gtZ3JpZC1oZWFkZXItZ3JvdXAgKm5nSWY9XCIhY2hpbGQuaGlkZGVuXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZF9fc3ViZ3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNoaWxkLmhlYWRlckdyb3VwQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY2hpbGQuaGVhZGVyR3JvdXBTdHlsZXMgfCBpZ3hIZWFkZXJHcm91cFN0eWxlOmNoaWxkOmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcmFnXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICBbZ2hvc3RIb3N0XT1cImdyaWQub3V0bGV0Lm5hdGl2ZUVsZW1lbnRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJjaGlsZFwiPlxuICAgICAgICAgICAgPC9pZ3gtZ3JpZC1oZWFkZXItZ3JvdXA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiZ3JpZC5tb3ZpbmdcIiBjbGFzcz1cImlneC1ncmlkLXRoX19kcm9wLWluZGljYXRvci1yaWdodFwiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuXG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbHVtbj5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkLXRoX19ncm91cC10aXRsZVwiIFt0aXRsZV09XCJ0aXRsZVwiPnt7Y29sdW1uLmhlYWRlcn19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29sbGFwc2VJbmRpY2F0b3I+XG4gICAgPGlneC1pY29uPnt7Y29sdW1uLmV4cGFuZGVkID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J319IDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWdyaWQuaGFzQ29sdW1uTGF5b3V0cyAmJiBjb2x1bW4uY29sdW1uR3JvdXBcIj5cbiAgICA8c3BhbiAqbmdJZj1cImdyaWQubW92aW5nXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aF9fZHJvcC1pbmRpY2F0b3ItbGVmdFwiPjwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRfX3RpdGxlXCJcbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImNvbHVtbi5leHBhbmRlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiY29sdW1uLnNlbGVjdGVkXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2lneC1ncmlkLXRoLS1waW5uZWQtbGFzdCc6IGhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbixcbiAgICAgICAgICAgICdpZ3gtZ3JpZC10aC0tcGlubmVkLWZpcnN0JzogaGFzRmlyc3RQaW5uZWRDaGlsZENvbHVtbixcbiAgICAgICAgICAgICdpZ3gtZ3JpZC10aC0tY29sbGFwc2libGUnOiBjb2x1bW4uY29sbGFwc2libGUsXG4gICAgICAgICAgICAnaWd4LWdyaWQtdGgtLXNlbGVjdGFibGUnOiBzZWxlY3RhYmxlLFxuICAgICAgICAgICAgJ2lneC1ncmlkLXRoLS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgJ2lneC1ncmlkLXRoLS1hY3RpdmUnOiBhY3RpdmVHcm91cH1cIlxuICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJhZ109XCJjb2x1bW5cIlxuICAgICAgICBbZ2hvc3RIb3N0XT1cImdyaWQub3V0bGV0Lm5hdGl2ZUVsZW1lbnRcIlxuICAgICAgICBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImNvbHVtblwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJwb2ludGVyZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImdyb3VwQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgKHBvaW50ZXJlbnRlcik9XCJvblBpbnRlckVudGVyKClcIlxuICAgICAgICAocG9pbnRlcmxlYXZlKT1cIm9uUG9pbnRlckxlYXZlKClcIlxuICAgICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uY29sbGFwc2libGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZC10aF9fZXhwYW5kZXJcIiAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bkluZGljYXRvcigkZXZlbnQpXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZFN0YXRlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLmNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGUgPyBjb2x1bW4uY29sbGFwc2libGVJbmRpY2F0b3JUZW1wbGF0ZSA6IGRlZmF1bHRDb2xsYXBzZUluZGljYXRvcjsgY29udGV4dDogeyRpbXBsaWNpdDogY29sdW1uLCBjb2x1bW46IGNvbHVtbn1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZSA/IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRDb2x1bW47IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4sIGNvbHVtbjogY29sdW1ufVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRfX2dyb3VwXCIgKm5nSWY9JyFncmlkLmlzUGl2b3QnPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBjb2x1bW4uY2hpbGRyZW5cIj5cbiAgICAgICAgICAgIDxpZ3gtZ3JpZC1oZWFkZXItZ3JvdXAgKm5nSWY9XCIhY2hpbGQuaGlkZGVuXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZF9fc3ViZ3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNoaWxkLmhlYWRlckdyb3VwQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY2hpbGQuaGVhZGVyR3JvdXBTdHlsZXMgfCBpZ3hIZWFkZXJHcm91cFN0eWxlOmNoaWxkOmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY2hpbGQuY2FsY1dpZHRoIHwgaWd4SGVhZGVyR3JvdXBXaWR0aDpncmlkLmRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOmdyaWQuaGFzQ29sdW1uTGF5b3V0c1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXNdPVwiY2hpbGQuY2FsY1dpZHRoIHwgaWd4SGVhZGVyR3JvdXBXaWR0aDpncmlkLmRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOmdyaWQuaGFzQ29sdW1uTGF5b3V0c1wiPlxuICAgICAgICAgICAgPC9pZ3gtZ3JpZC1oZWFkZXItZ3JvdXA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiZ3JpZC5tb3ZpbmdcIiBjbGFzcz1cImlneC1ncmlkLXRoX19kcm9wLWluZGljYXRvci1yaWdodFwiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5jb2x1bW5Hcm91cFwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZ3JpZC5tb3ZpbmdcIiBjbGFzcz1cImlneC1ncmlkLXRoX19kcm9wLWluZGljYXRvci1sZWZ0XCI+PC9zcGFuPlxuICAgIDxpZ3gtZ3JpZC1oZWFkZXJcbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWdyaWQtdGgtLWZ3XCJcbiAgICAgICAgW2lkXT1cImdyaWQuaWQgKyAnXycgKyBjb2x1bW4uZmllbGRcIlxuICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyQ2xhc3Nlc1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5oZWFkZXJTdHlsZXMgfCBpZ3hIZWFkZXJHcm91cFN0eWxlOmNvbHVtbjpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgW2lneENvbHVtbk1vdmluZ0RyYWddPVwiY29sdW1uXCJcbiAgICAgICAgW2dob3N0SG9zdF09XCJncmlkLm91dGxldC5uYXRpdmVFbGVtZW50XCJcbiAgICAgICAgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwiYWN0aXZhdGUoKVwiXG4gICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImNvbHVtblwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgW2RlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiXG4gICAgPlxuICAgIDwvaWd4LWdyaWQtaGVhZGVyPlxuICAgIDxpZ3gtZ3JpZC1maWx0ZXJpbmctY2VsbCAqbmdJZj1cImdyaWQuYWxsb3dGaWx0ZXJpbmcgJiYgZ3JpZC5maWx0ZXJNb2RlID09PSAncXVpY2tGaWx0ZXInXCIgW2NvbHVtbl09XCJjb2x1bW5cIiBbYXR0ci5kcmFnZ2FibGVdPVwiZmFsc2VcIj48L2lneC1ncmlkLWZpbHRlcmluZy1jZWxsPlxuICAgIDxzcGFuICpuZ0lmPVwiIWNvbHVtbi5jb2x1bW5Hcm91cCAmJiBjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aF9fcmVzaXplLWhhbmRsZVwiXG4gICAgICAgIFtpZ3hSZXNpemVIYW5kbGVdPVwiY29sdW1uXCJcbiAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJjb2xSZXNpemluZ1NlcnZpY2UucmVzaXplQ3Vyc29yXCI+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZ3JpZC5tb3ZpbmdcIiBjbGFzcz1cImlneC1ncmlkLXRoX19kcm9wLWluZGljYXRvci1yaWdodFwiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuIl19
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBR1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBd0IsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JB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QUFXO3VCQUFDLDJCQUEyQjtnQkFnQmpDLE1BQU07c0JBRFosU0FBUzt1QkFBQyxzQkFBc0I7Z0JBTzFCLE1BQU07c0JBRFosU0FBUzt1QkFBQyw2QkFBNkI7Z0JBT2pDLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRTtnQkFhM0YsVUFBVTtzQkFEaEIsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBVzlCLFNBQVM7c0JBRG5CLFdBQVc7dUJBQUMsMkJBQTJCO2dCQU03QixhQUFhO3NCQUR2QixXQUFXO3VCQUFDLGdDQUFnQztnQkFNbEMsY0FBYztzQkFEeEIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBTW5DLGFBQWE7c0JBRHZCLFdBQVc7dUJBQUMsaUNBQWlDO2dCQU1uQyxZQUFZO3NCQUR0QixXQUFXO3VCQUFDLDhCQUE4QjtnQkFTaEMsTUFBTTtzQkFEaEIsV0FBVzt1QkFBQyxlQUFlO2dCQWtDakIsaUJBQWlCO3NCQUQzQixXQUFXO3VCQUFDLGVBQWU7Z0JBNkVyQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyaW5nL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJpbmcvYmFzZS9ncmlkLWZpbHRlcmluZy1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEhlYWRlckdyb3VwV2lkdGhQaXBlLCBJZ3hIZWFkZXJHcm91cFN0eWxlUGlwZSB9IGZyb20gJy4vcGlwZXMnO1xuaW1wb3J0IHsgSWd4UmVzaXplSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uTW92aW5nRHJvcERpcmVjdGl2ZSB9IGZyb20gJy4uL21vdmluZy9tb3ZpbmcuZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uTW92aW5nRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL21vdmluZy9tb3ZpbmcuZHJhZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdTdHlsZSwgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5jb25zdCBaX0lOREVYID0gOTk5OTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtaGVhZGVyLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nQ2xhc3MsIE5nU3R5bGUsIE5nRm9yLCBJZ3hDb2x1bW5Nb3ZpbmdEcmFnRGlyZWN0aXZlLCBJZ3hDb2x1bW5Nb3ZpbmdEcm9wRGlyZWN0aXZlLCBJZ3hJY29uQ29tcG9uZW50LCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50LCBJZ3hHcmlkRmlsdGVyaW5nQ2VsbENvbXBvbmVudCwgSWd4UmVzaXplSGFuZGxlRGlyZWN0aXZlLCBJZ3hIZWFkZXJHcm91cFdpZHRoUGlwZSwgSWd4SGVhZGVyR3JvdXBTdHlsZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2sge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLXJvdy1lbmQnKVxuICAgIHB1YmxpYyBnZXQgcm93RW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5yb3dFbmQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLWNvbHVtbi1lbmQnKVxuICAgIHB1YmxpYyBnZXQgY29sRW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xFbmQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLXJvdy1zdGFydCcpXG4gICAgcHVibGljIGdldCByb3dTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93U3RhcnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5ncmlkLWNvbHVtbi1zdGFydCcpXG4gICAgcHVibGljIGdldCBjb2xTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uY29sU3RhcnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgZ2V0IGhlYWRlcklEKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ncmlkLmlkfV8tMV8ke3RoaXMuY29sdW1uLmxldmVsfV8ke3RoaXMuY29sdW1uLnZpc2libGVJbmRleH1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgtLWFjdGl2ZScpXG4gICAgcHVibGljIGdldCBhY3RpdmUoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlO1xuICAgICAgICByZXR1cm4gbm9kZSAmJiAhdGhpcy5jb2x1bW4uY29sdW1uR3JvdXAgP1xuICAgICAgICAgICAgbm9kZS5yb3cgPT09IC0xICYmIG5vZGUuY29sdW1uID09PSB0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXggJiYgbm9kZS5sZXZlbCA9PT0gdGhpcy5jb2x1bW4ubGV2ZWwgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZUdyb3VwKCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLnJvdyA9PT0gLTEgJiYgbm9kZS5jb2x1bW4gPT09IHRoaXMuY29sdW1uLnZpc2libGVJbmRleCAmJiBub2RlLmxldmVsID09PSB0aGlzLmNvbHVtbi5sZXZlbCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKElneEdyaWRIZWFkZXJDb21wb25lbnQpXG4gICAgcHVibGljIGhlYWRlcjogSWd4R3JpZEhlYWRlckNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50KVxuICAgIHB1YmxpYyBmaWx0ZXI6IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQpLCB7IHJlYWQ6IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjaGlsZHJlbjogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0SGVhZGVyR3JvdXBXaWR0aCh0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aGVhZF9faXRlbScpXG4gICAgcHVibGljIGRlZmF1bHRDc3MgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KElHWF9HUklEX0JBU0UpIHB1YmxpYyBncmlkOiBHcmlkVHlwZSxcbiAgICAgICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwdWJsaWMgY29sUmVzaXppbmdTZXJ2aWNlOiBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCkgeyB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1waW5uZWQnKVxuICAgIHB1YmxpYyBnZXQgcGlubmVkQ3NzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1Bpbm5lZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1waW5uZWQtbGFzdCcpXG4gICAgcHVibGljIGdldCBwaW5uZWRMYXN0Q3NzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xhc3RQaW5uZWQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tcGlubmVkLWZpcnN0JylcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZEZpcnN0Q1NTKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpcnN0UGlubmVkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX2RyYWctY29sLWhlYWRlcicpXG4gICAgcHVibGljIGdldCBoZWFkZXJEcmFnQ3NzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hlYWRlckRyYWdnZWQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tZmlsdGVyaW5nJylcbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmluZ0NzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaWx0ZXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS56LWluZGV4JylcbiAgICBwdWJsaWMgZ2V0IHpJbmRleCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbi5waW5uZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBaX0lOREVYIC0gdGhpcy5ncmlkLnBpbm5lZENvbHVtbnMuaW5kZXhPZih0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgYmVsb25ncyB0byBhIGNvbHVtbiB0aGF0IGlzIGZpbHRlcmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNGaWx0ZXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJlZENvbHVtbiA9PT0gdGhpcy5jb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgaXMgc3RvcmVkIGluIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgcGlubmVkIGFyZWEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xhc3RQaW5uZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMgPyB0aGlzLmNvbHVtbi5pc0xhc3RQaW5uZWQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBpcyBzdG9yZWQgaW4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgcmlnaHQgcGlubmVkIGFyZWEuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0ZpcnN0UGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzID8gdGhpcy5jb2x1bW4uaXNGaXJzdFBpbm5lZCA6IGZhbHNlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpXG4gICAgcHVibGljIGdldCBncm91cERpc3BsYXlTdHlsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMgJiYgdGhpcy5jb2x1bW4uY2hpbGRyZW4gPyAnZmxleCcgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBpcyBzdG9yZWQgaW4gYSBwaW5uZWQgY29sdW1uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNQaW5uZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5waW5uZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgYmVsb25ncyB0byBhIGNvbHVtbiB0aGF0IGlzIG1vdmVkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNIZWFkZXJEcmFnZ2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbkluRHJhZyA9PT0gdGhpcy5jb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uYWxsQ2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5pc0xhc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0ZpcnN0UGlubmVkQ2hpbGRDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5hbGxDaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLmlzRmlyc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGFibGUoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGVDaGlsZHJlbiA9IHRoaXMuY29sdW1uLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiBjLnNlbGVjdGFibGUgJiYgIWMuY29sdW1uR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSAmJlxuICAgICAgICAgICAgdGhpcy5jb2x1bW4uYXBwbHlTZWxlY3RhYmxlQ2xhc3NcbiAgICAgICAgICAgICYmICF0aGlzLnNlbGVjdGVkICYmIHNlbGVjdGFibGVDaGlsZHJlbi5sZW5ndGggPiAwXG4gICAgICAgICAgICAmJiAhdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnRpdGxlIHx8IHRoaXMuY29sdW1uLmhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5hbGxvd0ZpbHRlcmluZyB8fCBcbiAgICAgICAgICAgIChldmVudC5jb21wb3NlZFBhdGgoKS5maW5kSW5kZXgoZWwgPT5cbiAgICAgICAgICAgICAgICAoZWwgYXMgRWxlbWVudCkudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2lneC1ncmlkLWZpbHRlcmluZy1jZWxsJykgPCAxKSkge1xuICAgICAgICAgICAgICAgIC8vIEhhY2sgZm9yIHByZXZlbnRpbmcgdGV4dCBzZWxlY3Rpb24gaW4gSUUgYW5kIEVkZ2Ugd2hpbGUgZHJhZ2dpbmcgdGhlIHJlc2l6ZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ3JvdXBDbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNUb1NlbGVjdCA9IHRoaXMuY29sdW1uLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiBjLnNlbGVjdGFibGUgJiYgIWMuY29sdW1uR3JvdXApLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZVxuICAgICAgICAgICAgJiYgY29sdW1uc1RvU2VsZWN0Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSkge1xuICAgICAgICAgICAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5zaW5nbGUgfHwgIWV2ZW50LmN0cmxLZXk7XG4gICAgICAgICAgICBjb25zdCByYW5nZVNlbGVjdGlvbiA9IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlICYmIGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1ucyhjb2x1bW5zVG9TZWxlY3QsIGNsZWFyU2VsZWN0aW9uLCByYW5nZVNlbGVjdGlvbiwgZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIGlmICgoc2VsZWN0ZWRGaWVsZHMubGVuZ3RoID09PSBjb2x1bW5zVG9TZWxlY3QubGVuZ3RoKSAmJiBzZWxlY3RlZEZpZWxkcy5ldmVyeShlbCA9PiBjb2x1bW5zVG9TZWxlY3QuaW5jbHVkZXMoZWwpKVxuICAgICAgICAgICAgICAgICAgICB8fCAhY2xlYXJTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENvbHVtbnMoY29sdW1uc1RvU2VsZWN0LCBjbGVhclNlbGVjdGlvbiwgcmFuZ2VTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duSW5kaWNhdG9yKGV2ZW50KSB7XG4gICAgICAgIC8vIFN0b3AgcHJvcGFnYXRpb24gb2YgcG9pbnRlciBldmVudHMgdG8gbm93IGFsbG93IGNvbHVtbiBkcmFnZ2luZyB1c2luZyB0aGUgaGVhZGVyIGluZGljYXRvcnMuXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuZFN0YXRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNvbHVtbi5leHBhbmRlZCA9ICF0aGlzLmNvbHVtbi5leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBwb2ludGVyZG93bihldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuZ3JpZC50aGVhZFJvdy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBuZWNlc3NhcnkgZHVlIHRvIHNvbWUgc3BlY2lmaWNzIHJlbGF0ZWQgd2l0aCBpbXBsZW1lbnRhdGlvbiBvZiBjb2x1bW4gbW92aW5nXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmF0ZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh0aGlzLmFjdGl2ZU5vZGUpO1xuICAgICAgICB0aGlzLmdyaWQudGhlYWRSb3cubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uUGludGVyRW50ZXIoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uLmFwcGx5U2VsZWN0YWJsZUNsYXNzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uUG9pbnRlckxlYXZlKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi5hcHBseVNlbGVjdGFibGVDbGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvdzogLTEsIGNvbHVtbjogdGhpcy5jb2x1bW4udmlzaWJsZUluZGV4LCBsZXZlbDogdGhpcy5jb2x1bW4ubGV2ZWwsXG4gICAgICAgICAgICBtY2hDYWNoZTogeyBsZXZlbDogdGhpcy5jb2x1bW4ubGV2ZWwsIHZpc2libGVJbmRleDogdGhpcy5jb2x1bW4udmlzaWJsZUluZGV4IH0sXG4gICAgICAgICAgICBsYXlvdXQ6IHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmNvbHVtbi5yb3dTdGFydCxcbiAgICAgICAgICAgICAgICBjb2xTdGFydDogdGhpcy5jb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiB0aGlzLmNvbHVtbi5yb3dFbmQsXG4gICAgICAgICAgICAgICAgY29sRW5kOiB0aGlzLmNvbHVtbi5jb2xFbmQsXG4gICAgICAgICAgICAgICAgY29sdW1uVmlzaWJsZUluZGV4OiB0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXhcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWQuaGFzQ29sdW1uTGF5b3V0cyAmJiBjb2x1bW4uY29sdW1uR3JvdXBcIj5cbiAgICA8c3BhbiAqbmdJZj1cImdyaWQubW92aW5nXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aF9fZHJvcC1pbmRpY2F0b3ItbGVmdFwiPjwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRfX2dyb3VwIGlneC1ncmlkX19tcmwtYmxvY2tcIlxuICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAnaWd4LWdyaWQtdGgtLXBpbm5lZC1sYXN0JzogaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uLFxuICAgICAgICAgJ2lneC1ncmlkLXRoLS1waW5uZWQtZmlyc3QnOiBoYXNGaXJzdFBpbm5lZENoaWxkQ29sdW1uXG4gICAgICAgIH1cIlxuICAgICBbbmdTdHlsZV09XCJ7J2dyaWQtdGVtcGxhdGUtcm93cyc6Y29sdW1uLmdldEdyaWRUZW1wbGF0ZSh0cnVlKSxcbiAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6Y29sdW1uLmdldEdyaWRUZW1wbGF0ZShmYWxzZSl9XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbHVtbi5jaGlsZHJlblwiID5cbiAgICAgICAgICAgIDxpZ3gtZ3JpZC1oZWFkZXItZ3JvdXAgKm5nSWY9XCIhY2hpbGQuaGlkZGVuXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZF9fc3ViZ3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNoaWxkLmhlYWRlckdyb3VwQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY2hpbGQuaGVhZGVyR3JvdXBTdHlsZXMgfCBpZ3hIZWFkZXJHcm91cFN0eWxlOmNoaWxkOmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY2hpbGRcIj5cbiAgICAgICAgICAgIDwvaWd4LWdyaWQtaGVhZGVyLWdyb3VwPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cImdyaWQubW92aW5nXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aF9fZHJvcC1pbmRpY2F0b3ItcmlnaHRcIj48L3NwYW4+XG48L25nLWNvbnRhaW5lcj5cblxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2x1bW4+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZC10aF9fZ3JvdXAtdGl0bGVcIiBbdGl0bGVdPVwidGl0bGVcIj57e2NvbHVtbi5oZWFkZXJ9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbGxhcHNlSW5kaWNhdG9yPlxuICAgIDxpZ3gtaWNvbj57e2NvbHVtbi5leHBhbmRlZCA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCd9fSA8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncmlkLmhhc0NvbHVtbkxheW91dHMgJiYgY29sdW1uLmNvbHVtbkdyb3VwXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJncmlkLm1vdmluZ1wiIGNsYXNzPVwiaWd4LWdyaWQtdGhfX2Ryb3AtaW5kaWNhdG9yLWxlZnRcIj48L3NwYW4+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkLXRoZWFkX190aXRsZVwiXG4gICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbHVtbi5oZWFkZXIgfHwgY29sdW1uLmZpZWxkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJjb2x1bW4uZXhwYW5kZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImNvbHVtbi5zZWxlY3RlZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdpZ3gtZ3JpZC10aC0tcGlubmVkLWxhc3QnOiBoYXNMYXN0UGlubmVkQ2hpbGRDb2x1bW4sXG4gICAgICAgICAgICAnaWd4LWdyaWQtdGgtLXBpbm5lZC1maXJzdCc6IGhhc0ZpcnN0UGlubmVkQ2hpbGRDb2x1bW4sXG4gICAgICAgICAgICAnaWd4LWdyaWQtdGgtLWNvbGxhcHNpYmxlJzogY29sdW1uLmNvbGxhcHNpYmxlLFxuICAgICAgICAgICAgJ2lneC1ncmlkLXRoLS1zZWxlY3RhYmxlJzogc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICdpZ3gtZ3JpZC10aC0tc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICdpZ3gtZ3JpZC10aC0tYWN0aXZlJzogYWN0aXZlR3JvdXB9XCJcbiAgICAgICAgW2lneENvbHVtbk1vdmluZ0RyYWddPVwiY29sdW1uXCJcbiAgICAgICAgW2dob3N0SG9zdF09XCJncmlkLm91dGxldC5uYXRpdmVFbGVtZW50XCJcbiAgICAgICAgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIlxuICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJjb2x1bW5cIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwicG9pbnRlcmRvd24oJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJncm91cENsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgIChwb2ludGVyZW50ZXIpPVwib25QaW50ZXJFbnRlcigpXCJcbiAgICAgICAgKHBvaW50ZXJsZWF2ZSk9XCJvblBvaW50ZXJMZWF2ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmNvbGxhcHNpYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhfX2V4cGFuZGVyXCIgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd25JbmRpY2F0b3IoJGV2ZW50KVwiIChjbGljayk9XCJ0b2dnbGVFeHBhbmRTdGF0ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5jb2xsYXBzaWJsZUluZGljYXRvclRlbXBsYXRlID8gY29sdW1uLmNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGUgOiBkZWZhdWx0Q29sbGFwc2VJbmRpY2F0b3I7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNvbHVtbiwgY29sdW1uOiBjb2x1bW59XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGUgPyBjb2x1bW4uaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0Q29sdW1uOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uLCBjb2x1bW46IGNvbHVtbn1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkLXRoZWFkX19ncm91cFwiICpuZ0lmPSchZ3JpZC5pc1Bpdm90Jz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sdW1uLmNoaWxkcmVuXCI+XG4gICAgICAgICAgICA8aWd4LWdyaWQtaGVhZGVyLWdyb3VwICpuZ0lmPVwiIWNoaWxkLmhpZGRlblwiIGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRfX3N1Ymdyb3VwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjaGlsZC5oZWFkZXJHcm91cENsYXNzZXNcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNoaWxkLmhlYWRlckdyb3VwU3R5bGVzIHwgaWd4SGVhZGVyR3JvdXBTdHlsZTpjaGlsZDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNoaWxkLnJlc29sdmVkV2lkdGggfCBpZ3hIZWFkZXJHcm91cFdpZHRoOmdyaWQuZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6Z3JpZC5oYXNDb2x1bW5MYXlvdXRzXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpc109XCJjaGlsZC5yZXNvbHZlZFdpZHRoIHwgaWd4SGVhZGVyR3JvdXBXaWR0aDpncmlkLmRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOmdyaWQuaGFzQ29sdW1uTGF5b3V0c1wiPlxuICAgICAgICAgICAgPC9pZ3gtZ3JpZC1oZWFkZXItZ3JvdXA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiZ3JpZC5tb3ZpbmdcIiBjbGFzcz1cImlneC1ncmlkLXRoX19kcm9wLWluZGljYXRvci1yaWdodFwiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5jb2x1bW5Hcm91cFwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZ3JpZC5tb3ZpbmdcIiBjbGFzcz1cImlneC1ncmlkLXRoX19kcm9wLWluZGljYXRvci1sZWZ0XCI+PC9zcGFuPlxuICAgIDxpZ3gtZ3JpZC1oZWFkZXJcbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWdyaWQtdGgtLWZ3XCJcbiAgICAgICAgW2lkXT1cImdyaWQuaWQgKyAnXycgKyBjb2x1bW4uZmllbGRcIlxuICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyQ2xhc3Nlc1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5oZWFkZXJTdHlsZXMgfCBpZ3hIZWFkZXJHcm91cFN0eWxlOmNvbHVtbjpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgW2lneENvbHVtbk1vdmluZ0RyYWddPVwiY29sdW1uXCJcbiAgICAgICAgW2dob3N0SG9zdF09XCJncmlkLm91dGxldC5uYXRpdmVFbGVtZW50XCJcbiAgICAgICAgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwiYWN0aXZhdGUoKVwiXG4gICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImNvbHVtblwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgW2RlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiXG4gICAgPlxuICAgIDwvaWd4LWdyaWQtaGVhZGVyPlxuICAgIDxpZ3gtZ3JpZC1maWx0ZXJpbmctY2VsbCAqbmdJZj1cImdyaWQuYWxsb3dGaWx0ZXJpbmcgJiYgZ3JpZC5maWx0ZXJNb2RlID09PSAncXVpY2tGaWx0ZXInXCIgW2NvbHVtbl09XCJjb2x1bW5cIiBbYXR0ci5kcmFnZ2FibGVdPVwiZmFsc2VcIj48L2lneC1ncmlkLWZpbHRlcmluZy1jZWxsPlxuICAgIDxzcGFuICpuZ0lmPVwiIWNvbHVtbi5jb2x1bW5Hcm91cCAmJiBjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJpZ3gtZ3JpZC10aF9fcmVzaXplLWhhbmRsZVwiXG4gICAgICAgIFtpZ3hSZXNpemVIYW5kbGVdPVwiY29sdW1uXCJcbiAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJjb2xSZXNpemluZ1NlcnZpY2UucmVzaXplQ3Vyc29yXCI+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZ3JpZC5tb3ZpbmdcIiBjbGFzcz1cImlneC1ncmlkLXRoX19kcm9wLWluZGljYXRvci1yaWdodFwiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -103,7 +103,7 @@ export class IgxGridHeaderComponent {
103
103
  return this.sortDirection !== SortingDirection.None;
104
104
  }
105
105
  get filterIconClassName() {
106
- return this.column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
106
+ return this.column.filteringExpressionsTree || this.isAdvancedFilterApplied() ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
107
107
  }
108
108
  get selectable() {
109
109
  return this.grid.columnSelection !== GridSelectionMode.none &&
@@ -205,6 +205,12 @@ export class IgxGridHeaderComponent {
205
205
  const expr = this.grid.sortingExpressions.find((x) => x.fieldName === this.column.field);
206
206
  this.sortDirection = expr ? expr.dir : SortingDirection.None;
207
207
  }
208
+ isAdvancedFilterApplied() {
209
+ if (!this.grid.advancedFilteringExpressionsTree) {
210
+ return false;
211
+ }
212
+ return !!this.grid.advancedFilteringExpressionsTree.find(this.column.field);
213
+ }
208
214
  triggerSort() {
209
215
  const groupingExpr = this.grid.groupingExpressions ?
210
216
  this.grid.groupingExpressions.find((expr) => expr.fieldName === this.column.field) :
@@ -286,4 +292,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
286
292
  type: HostListener,
287
293
  args: ['pointerleave']
288
294
  }] } });
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQXdCLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFFN0Q7O0dBRUc7QUFRSCxNQUFNLE9BQU8sc0JBQXNCO0lBb0IvQjs7T0FFRztJQUNILElBQ1csWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNXLGdCQUFnQjtRQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFDVyxrQkFBa0I7UUFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFDVyxtQkFBbUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFDVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssa0JBQWtCLENBQUMsTUFBTSxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUNXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFDVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFDVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztJQUNuRixDQUFDO0lBRUQsSUFDVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFDVyxNQUFNO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzFILENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDO0lBQ3ZGLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUNsRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssZ0JBQWdCLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDakcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDO1NBQ3BEO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFO1lBQ25HLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztTQUNyRDthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNqRSxJQUFJLFNBQVMsRUFBRSxXQUFXLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkksT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztJQUNoSCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssaUJBQWlCLENBQUMsSUFBSTtZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQjtZQUNoQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUNyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2VBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFDbEMsQ0FBQztJQUtELFlBQ2tDLElBQWMsRUFDckMsa0JBQTRDLEVBQzVDLEdBQXNCLEVBQ3JCLEdBQTRCO1FBSE4sU0FBSSxHQUFKLElBQUksQ0FBVTtRQUNyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQTBCO1FBQzVDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBUGpDLGtCQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQ3JDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBT3ZDLENBQUM7SUFHRSxPQUFPLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRTtZQUUzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUU7Z0JBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQy9CLE9BQU87aUJBQ1Y7Z0JBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztvQkFDbEQsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUMzRDthQUNKO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssaUJBQWlCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO2dCQUN2RixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNoRyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFFbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksY0FBYyxDQUFDLEVBQUU7b0JBQ3pHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3JHO3FCQUFNO29CQUNILElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN2RTthQUNKO1NBQ0o7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBRUksYUFBYTtRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFFSSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLHNCQUFzQixDQUFDLEtBQUs7UUFDL0IsK0ZBQStGO1FBQy9GLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxLQUFLO1FBQzdCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQixDQUFDLEtBQUs7UUFDM0IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUNqRSxDQUFDO0lBRU8sV0FBVztRQUNmLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwSSxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSTtZQUM3RixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1gsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQjtZQUNoRyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1NBQ3JDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBL1FRLHNCQUFzQixrQkFvS25CLGFBQWE7a0dBcEtoQixzQkFBc0IsNitCQVdvQixXQUFXLHVKQU1WLFdBQVcsMkNDcERuRSxzcERBaUNBLDRDREFjLGdCQUFnQiwyRkFBRSxnQkFBZ0Isb0pBQUUsSUFBSSw2RkFBRSxPQUFPLCtFQUFFLGdCQUFnQjs7MkZBRXBFLHNCQUFzQjtrQkFQbEMsU0FBUztzQ0FDVyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLGlCQUFpQixjQUVmLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7OzBCQXNLekUsTUFBTTsyQkFBQyxhQUFhO3lJQWpLbEIsTUFBTTtzQkFEWixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFPSSw0QkFBNEI7c0JBRHJDLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT3BFLDZCQUE2QjtzQkFEdEMsU0FBUzt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPcEUsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBTXRCLGdCQUFnQjtzQkFEMUIsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBVXJCLFNBQVM7c0JBRG5CLFdBQVc7dUJBQUMseUJBQXlCO2dCQVUzQixZQUFZO3NCQUR0QixXQUFXO3VCQUFDLDRCQUE0QjtnQkFNOUIsa0JBQWtCO3NCQUQ1QixXQUFXO3VCQUFDLFdBQVc7Z0JBTWIsbUJBQW1CO3NCQUQ3QixXQUFXO3VCQUFDLFlBQVk7Z0JBTWQsV0FBVztzQkFEckIsV0FBVzt1QkFBQywyQkFBMkI7Z0JBTTdCLGFBQWE7c0JBRHZCLFdBQVc7dUJBQUMsNkJBQTZCO2dCQU0vQixlQUFlO3NCQUR6QixXQUFXO3VCQUFDLCtCQUErQjtnQkFNakMsZUFBZTtzQkFEekIsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBTWhDLFdBQVc7c0JBRHJCLFdBQVc7dUJBQUMsMkJBQTJCO2dCQU03QixhQUFhO3NCQUR2QixXQUFXO3VCQUFDLDZCQUE2QjtnQkFNL0IsTUFBTTtzQkFEaEIsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBZ0Z4QixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdDMUIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxjQUFjO2dCQVNyQixjQUFjO3NCQURwQixZQUFZO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbHVtblR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBTb3J0aW5nSW5kZXhQaXBlIH0gZnJvbSAnLi9waXBlcyc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2dyaWQtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hJY29uQ29tcG9uZW50LCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0NsYXNzLCBTb3J0aW5nSW5kZXhQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFU0ZIZWFkZXJJY29uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEVTRkhlYWRlckljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0U29ydEhlYWRlckljb25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0U29ydEhlYWRlckljb25UZW1wbGF0ZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBhcmlhLXNlbGVjdGVkYCBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnNlbGVjdGVkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgnKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uR3JvdXBTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tY29zeScpXG4gICAgcHVibGljIGdldCBjb3N5U3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbnNpdHkgPT09ICdjb3N5JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBjb21wYWN0U3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbnNpdHkgPT09ICdjb21wYWN0JztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFzYycpXG4gICAgcHVibGljIGdldCBzb3J0QXNjZW5kaW5nU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnREaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uQXNjO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGVzYycpXG4gICAgcHVibGljIGdldCBzb3J0RGVzY2VuZGluZ1N0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3J0RGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkRlc2M7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tbnVtYmVyJylcbiAgICBwdWJsaWMgZ2V0IG51bWJlclN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tc29ydGFibGUnKVxuICAgIHB1YmxpYyBnZXQgc29ydGFibGVTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnNvcnRhYmxlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgtLXNlbGVjdGFibGUnKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0YWJsZVN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgtLWZpbHRyYWJsZScpXG4gICAgcHVibGljIGdldCBmaWx0ZXJhYmxlU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJhYmxlICYmIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1zb3J0ZWQnKVxuICAgIHB1YmxpYyBnZXQgc29ydGVkU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRlZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1zZWxlY3RlZCcpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZFN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodC5yZW0nKVxuICAgIHB1YmxpYyBnZXQgaGVpZ2h0KCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMgfHwgdGhpcy5ncmlkLmlzUGl2b3QpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLmdyaWQubWF4TGV2ZWxIZWFkZXJEZXB0aCArIDEgLSB0aGlzLmNvbHVtbi5sZXZlbCkgKiB0aGlzLmdyaWQuZGVmYXVsdFJvd0hlaWdodCAvIHRoaXMuZ3JpZC5fYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVzZkljb25UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leGNlbFN0eWxlSGVhZGVySWNvblRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEVTRkhlYWRlckljb25UZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzb3J0SWNvblRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5zb3J0RGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgJiYgdGhpcy5ncmlkLnNvcnRIZWFkZXJJY29uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuc29ydEhlYWRlckljb25UZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNvcnREaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uQXNjICYmIHRoaXMuZ3JpZC5zb3J0QXNjZW5kaW5nSGVhZGVySWNvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnNvcnRBc2NlbmRpbmdIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3J0RGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgJiYgdGhpcy5ncmlkLnNvcnREZXNjZW5kaW5nSGVhZGVySWNvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnNvcnREZXNjZW5kaW5nSGVhZGVySWNvblRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFNvcnRIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwQXJlYSA9IHRoaXMuZ3JpZC5ncm91cEFyZWEgfHwgdGhpcy5ncmlkLnRyZWVHcm91cEFyZWE7XG4gICAgICAgIGlmIChncm91cEFyZWE/LmV4cHJlc3Npb25zICYmIGdyb3VwQXJlYS5leHByZXNzaW9ucy5sZW5ndGggJiYgZ3JvdXBBcmVhLmV4cHJlc3Npb25zLm1hcChnID0+IGcuZmllbGROYW1lKS5pbmNsdWRlcyh0aGlzLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbiAhPT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVySWNvbkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA/ICdpZ3gtZXhjZWwtZmlsdGVyX19pY29uLS1maWx0ZXJlZCcgOiAnaWd4LWV4Y2VsLWZpbHRlcl9faWNvbic7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3RhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSAmJlxuICAgICAgICAgICAgdGhpcy5jb2x1bW4uYXBwbHlTZWxlY3RhYmxlQ2xhc3MgJiZcbiAgICAgICAgICAgICF0aGlzLmNvbHVtbi5zZWxlY3RlZCAmJlxuICAgICAgICAgICAgIXRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uc2VsZWN0ZWRcbiAgICAgICAgICAgICYmICghdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlIHx8IHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcmVkQ29sdW1uICE9PSB0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnRpdGxlIHx8IHRoaXMuY29sdW1uLmhlYWRlciB8fCB0aGlzLmNvbHVtbi5maWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0RGlyZWN0aW9uID0gU29ydGluZ0RpcmVjdGlvbi5Ob25lO1xuICAgIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9HUklEX0JBU0UpIHB1YmxpYyBncmlkOiBHcmlkVHlwZSxcbiAgICAgICAgcHVibGljIGNvbFJlc2l6aW5nU2VydmljZTogSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICAgKSB7IH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sUmVzaXppbmdTZXJ2aWNlLmlzQ29sdW1uUmVzaXppbmcpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1Jvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmZpbHRlcmFibGUgJiYgIXRoaXMuY29sdW1uLmNvbHVtbkdyb3VwICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5pc0ZpbHRlckNvbXBsZXgodGhpcy5jb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcmVkQ29sdW1uID0gdGhpcy5jb2x1bW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5ub25lICYmIHRoaXMuY29sdW1uLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhclNlbGVjdGlvbiA9IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZSB8fCAhZXZlbnQuY3RybEtleTtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZVNlbGVjdGlvbiA9IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlICYmIGV2ZW50LnNoaWZ0S2V5O1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbHVtbi5zZWxlY3RlZCB8fCAodGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkubGVuZ3RoID4gMSAmJiBjbGVhclNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1uKHRoaXMuY29sdW1uLmZpZWxkLCBjbGVhclNlbGVjdGlvbiwgcmFuZ2VTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdENvbHVtbih0aGlzLmNvbHVtbi5maWVsZCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQudGhlYWRSb3cubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdwb2ludGVyZW50ZXInKVxuICAgIHB1YmxpYyBvblBpbnRlckVudGVyKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi5hcHBseVNlbGVjdGFibGVDbGFzcyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScpXG4gICAgcHVibGljIG9uUG9pbnRlckxlYXZlKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi5hcHBseVNlbGVjdGFibGVDbGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5nZXRTb3J0RGlyZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUG9pbnRlckRvd25JbmRpY2F0b3IoZXZlbnQpIHtcbiAgICAgICAgLy8gU3RvcCBwcm9wYWdhdGlvbiBvZiBwb2ludGVyIGV2ZW50cyB0byBub3cgYWxsb3cgY29sdW1uIGRyYWdnaW5nIHVzaW5nIHRoZSBoZWFkZXIgaW5kaWNhdG9ycy5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25GaWx0ZXJpbmdJY29uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnRvZ2dsZUZpbHRlckRyb3Bkb3duKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU29ydGluZ0ljb25DbGljayhldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyU29ydCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRTb3J0RGlyZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBleHByID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5maW5kKCh4KSA9PiB4LmZpZWxkTmFtZSA9PT0gdGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBleHByID8gZXhwci5kaXIgOiBTb3J0aW5nRGlyZWN0aW9uLk5vbmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyU29ydCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdFeHByID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMuZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IHRoaXMuY29sdW1uLmZpZWxkKSA6XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBBcmVhPy5leHByZXNzaW9ucyA/IHRoaXMuZ3JpZC5ncm91cEFyZWE/LmV4cHJlc3Npb25zLmZpbmQoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSB0aGlzLmNvbHVtbi5maWVsZCkgOiBudWxsO1xuICAgICAgICBjb25zdCBzb3J0RGlyID0gZ3JvdXBpbmdFeHByID9cbiAgICAgICAgICAgIHRoaXMuc29ydERpcmVjdGlvbiArIDEgPiBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgPyBTb3J0aW5nRGlyZWN0aW9uLkFzYyA6IFNvcnRpbmdEaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgOiB0aGlzLnNvcnREaXJlY3Rpb24gKyAxID4gU29ydGluZ0RpcmVjdGlvbi5EZXNjID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogdGhpcy5zb3J0RGlyZWN0aW9uICsgMTtcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gc29ydERpcjtcbiAgICAgICAgdGhpcy5ncmlkLnNvcnQoe1xuICAgICAgICAgICAgZmllbGROYW1lOiB0aGlzLmNvbHVtbi5maWVsZCwgZGlyOiB0aGlzLnNvcnREaXJlY3Rpb24sIGlnbm9yZUNhc2U6IHRoaXMuY29sdW1uLnNvcnRpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgc3RyYXRlZ3k6IHRoaXMuY29sdW1uLnNvcnRTdHJhdGVneVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRDb2x1bW4+XG4gICAgPHNwYW4gW3RpdGxlXT1cInRpdGxlXCI+e3sgY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGQgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRFU0ZIZWFkZXJJY29uVGVtcGxhdGU+XG4gICAgPGlneC1pY29uPm1vcmVfdmVydDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRTb3J0SGVhZGVySWNvblRlbXBsYXRlPlxuICAgIDxpZ3gtaWNvbj57eyBzb3J0RGlyZWN0aW9uIDwgMiA/ICdhcnJvd191cHdhcmQnIDogJ2Fycm93X2Rvd253YXJkJyB9fTwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48c3BhbiBjbGFzcz1cImlneC1ncmlkLXRoX190aXRsZVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGUgPyBjb2x1bW4uaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0Q29sdW1uOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uLCBjb2x1bW46IGNvbHVtbn1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvc3Bhbj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLmNvbHVtbkdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkLXRoX19pY29uc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlICYmICFkaXNhYmxlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtaWNvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1zb3J0SW5kZXhdPVwiKGdyaWQuc29ydGluZ09wdGlvbnMubW9kZSA9PT0gJ3NpbmdsZScgJiYgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoIDw9MSkgPyBudWxsIDogY29sdW1uLmZpZWxkIHwgc29ydGluZ0luZGV4OmdyaWQuc29ydGluZ0V4cHJlc3Npb25zXCJcbiAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bkluZGljYXRvcigkZXZlbnQpXCIgKGNsaWNrKT1cIm9uU29ydGluZ0ljb25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvcnRJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAgdGhpcyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkLmFsbG93RmlsdGVyaW5nICYmIGNvbHVtbi5maWx0ZXJhYmxlICYmIGdyaWQuZmlsdGVyTW9kZSA9PT0gJ2V4Y2VsU3R5bGVGaWx0ZXInXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImZpbHRlckljb25DbGFzc05hbWVcIiAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bkluZGljYXRvcigkZXZlbnQpXCIgKGNsaWNrKT1cIm9uRmlsdGVyaW5nSWNvbkNsaWNrKCRldmVudClcIiA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVzZkljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6ICB0aGlzIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hlYWRlcnMvZ3JpZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQXdCLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFFN0Q7O0dBRUc7QUFRSCxNQUFNLE9BQU8sc0JBQXNCO0lBb0IvQjs7T0FFRztJQUNILElBQ1csWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNXLGdC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O3VCQUFDLFlBQVk7Z0JBTWQsV0FBVztzQkFEckIsV0FBVzt1QkFBQywyQkFBMkI7Z0JBTTdCLGFBQWE7c0JBRHZCLFdBQVc7dUJBQUMsNkJBQTZCO2dCQU0vQixlQUFlO3NCQUR6QixXQUFXO3VCQUFDLCtCQUErQjtnQkFNakMsZUFBZTtzQkFEekIsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBTWhDLFdBQVc7c0JBRHJCLFdBQVc7dUJBQUMsMkJBQTJCO2dCQU03QixhQUFhO3NCQUR2QixXQUFXO3VCQUFDLDZCQUE2QjtnQkFNL0IsTUFBTTtzQkFEaEIsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBZ0Z4QixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdDMUIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxjQUFjO2dCQVNyQixjQUFjO3NCQURwQixZQUFZO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbHVtblR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBTb3J0aW5nSW5kZXhQaXBlIH0gZnJvbSAnLi9waXBlcyc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2dyaWQtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hJY29uQ29tcG9uZW50LCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0NsYXNzLCBTb3J0aW5nSW5kZXhQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFU0ZIZWFkZXJJY29uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEVTRkhlYWRlckljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0U29ydEhlYWRlckljb25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0U29ydEhlYWRlckljb25UZW1wbGF0ZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBhcmlhLXNlbGVjdGVkYCBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnNlbGVjdGVkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgnKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uR3JvdXBTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tY29zeScpXG4gICAgcHVibGljIGdldCBjb3N5U3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbnNpdHkgPT09ICdjb3N5JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBjb21wYWN0U3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbnNpdHkgPT09ICdjb21wYWN0JztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFzYycpXG4gICAgcHVibGljIGdldCBzb3J0QXNjZW5kaW5nU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnREaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uQXNjO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGVzYycpXG4gICAgcHVibGljIGdldCBzb3J0RGVzY2VuZGluZ1N0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3J0RGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkRlc2M7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tbnVtYmVyJylcbiAgICBwdWJsaWMgZ2V0IG51bWJlclN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZC10aC0tc29ydGFibGUnKVxuICAgIHB1YmxpYyBnZXQgc29ydGFibGVTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnNvcnRhYmxlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgtLXNlbGVjdGFibGUnKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0YWJsZVN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGgtLWZpbHRyYWJsZScpXG4gICAgcHVibGljIGdldCBmaWx0ZXJhYmxlU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJhYmxlICYmIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1zb3J0ZWQnKVxuICAgIHB1YmxpYyBnZXQgc29ydGVkU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRlZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXRoLS1zZWxlY3RlZCcpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZFN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodC5yZW0nKVxuICAgIHB1YmxpYyBnZXQgaGVpZ2h0KCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMgfHwgdGhpcy5ncmlkLmlzUGl2b3QpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLmdyaWQubWF4TGV2ZWxIZWFkZXJEZXB0aCArIDEgLSB0aGlzLmNvbHVtbi5sZXZlbCkgKiB0aGlzLmdyaWQuZGVmYXVsdFJvd0hlaWdodCAvIHRoaXMuZ3JpZC5fYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVzZkljb25UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leGNlbFN0eWxlSGVhZGVySWNvblRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEVTRkhlYWRlckljb25UZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzb3J0SWNvblRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5zb3J0RGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgJiYgdGhpcy5ncmlkLnNvcnRIZWFkZXJJY29uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuc29ydEhlYWRlckljb25UZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNvcnREaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uQXNjICYmIHRoaXMuZ3JpZC5zb3J0QXNjZW5kaW5nSGVhZGVySWNvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnNvcnRBc2NlbmRpbmdIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3J0RGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgJiYgdGhpcy5ncmlkLnNvcnREZXNjZW5kaW5nSGVhZGVySWNvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnNvcnREZXNjZW5kaW5nSGVhZGVySWNvblRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFNvcnRIZWFkZXJJY29uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwQXJlYSA9IHRoaXMuZ3JpZC5ncm91cEFyZWEgfHwgdGhpcy5ncmlkLnRyZWVHcm91cEFyZWE7XG4gICAgICAgIGlmIChncm91cEFyZWE/LmV4cHJlc3Npb25zICYmIGdyb3VwQXJlYS5leHByZXNzaW9ucy5sZW5ndGggJiYgZ3JvdXBBcmVhLmV4cHJlc3Npb25zLm1hcChnID0+IGcuZmllbGROYW1lKS5pbmNsdWRlcyh0aGlzLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbiAhPT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVySWNvbkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB8fCB0aGlzLmlzQWR2YW5jZWRGaWx0ZXJBcHBsaWVkKCkgPyAnaWd4LWV4Y2VsLWZpbHRlcl9faWNvbi0tZmlsdGVyZWQnIDogJ2lneC1leGNlbC1maWx0ZXJfX2ljb24nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gIT09IEdyaWRTZWxlY3Rpb25Nb2RlLm5vbmUgJiZcbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmFwcGx5U2VsZWN0YWJsZUNsYXNzICYmXG4gICAgICAgICAgICAhdGhpcy5jb2x1bW4uc2VsZWN0ZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5pc0ZpbHRlclJvd1Zpc2libGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnNlbGVjdGVkXG4gICAgICAgICAgICAmJiAoIXRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSB8fCB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJlZENvbHVtbiAhPT0gdGhpcy5jb2x1bW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi50aXRsZSB8fCB0aGlzLmNvbHVtbi5oZWFkZXIgfHwgdGhpcy5jb2x1bW4uZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydERpcmVjdGlvbiA9IFNvcnRpbmdEaXJlY3Rpb24uTm9uZTtcbiAgICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHB1YmxpYyBjb2xSZXNpemluZ1NlcnZpY2U6IElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICAgICkgeyB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbFJlc2l6aW5nU2VydmljZS5pc0NvbHVtblJlc2l6aW5nKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5pc0ZpbHRlclJvd1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyQ2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdSb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJhYmxlICYmICF0aGlzLmNvbHVtbi5jb2x1bW5Hcm91cCAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJDb21wbGV4KHRoaXMuY29sdW1uLmZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJlZENvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSAmJiB0aGlzLmNvbHVtbi5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5zaW5nbGUgfHwgIWV2ZW50LmN0cmxLZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VTZWxlY3Rpb24gPSB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZSAmJiBldmVudC5zaGlmdEtleTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb2x1bW4uc2VsZWN0ZWQgfHwgKHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkQ29sdW1ucygpLmxlbmd0aCA+IDEgJiYgY2xlYXJTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENvbHVtbih0aGlzLmNvbHVtbi5maWVsZCwgY2xlYXJTZWxlY3Rpb24sIHJhbmdlU2VsZWN0aW9uLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW4odGhpcy5jb2x1bW4uZmllbGQsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLnRoZWFkUm93Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmVudGVyJylcbiAgICBwdWJsaWMgb25QaW50ZXJFbnRlcigpIHtcbiAgICAgICAgdGhpcy5jb2x1bW4uYXBwbHlTZWxlY3RhYmxlQ2xhc3MgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdwb2ludGVybGVhdmUnKVxuICAgIHB1YmxpYyBvblBvaW50ZXJMZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW4uYXBwbHlTZWxlY3RhYmxlQ2xhc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuZ2V0U29ydERpcmVjdGlvbigpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duSW5kaWNhdG9yKGV2ZW50KSB7XG4gICAgICAgIC8vIFN0b3AgcHJvcGFnYXRpb24gb2YgcG9pbnRlciBldmVudHMgdG8gbm93IGFsbG93IGNvbHVtbiBkcmFnZ2luZyB1c2luZyB0aGUgaGVhZGVyIGluZGljYXRvcnMuXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uRmlsdGVyaW5nSWNvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS50b2dnbGVGaWx0ZXJEcm9wZG93bih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY29sdW1uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblNvcnRpbmdJY29uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclNvcnQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U29ydERpcmVjdGlvbigpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMuZmluZCgoeCkgPT4geC5maWVsZE5hbWUgPT09IHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gZXhwciA/IGV4cHIuZGlyIDogU29ydGluZ0RpcmVjdGlvbi5Ob25lO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0FkdmFuY2VkRmlsdGVyQXBwbGllZCgpIHtcbiAgICAgICAgaWYoIXRoaXMuZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maW5kKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJTb3J0KCkge1xuICAgICAgICBjb25zdCBncm91cGluZ0V4cHIgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gdGhpcy5jb2x1bW4uZmllbGQpIDpcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cEFyZWE/LmV4cHJlc3Npb25zID8gdGhpcy5ncmlkLmdyb3VwQXJlYT8uZXhwcmVzc2lvbnMuZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IHRoaXMuY29sdW1uLmZpZWxkKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHNvcnREaXIgPSBncm91cGluZ0V4cHIgP1xuICAgICAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uICsgMSA+IFNvcnRpbmdEaXJlY3Rpb24uRGVzYyA/IFNvcnRpbmdEaXJlY3Rpb24uQXNjIDogU29ydGluZ0RpcmVjdGlvbi5EZXNjXG4gICAgICAgICAgICA6IHRoaXMuc29ydERpcmVjdGlvbiArIDEgPiBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgPyBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiB0aGlzLnNvcnREaXJlY3Rpb24gKyAxO1xuICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBzb3J0RGlyO1xuICAgICAgICB0aGlzLmdyaWQuc29ydCh7XG4gICAgICAgICAgICBmaWVsZE5hbWU6IHRoaXMuY29sdW1uLmZpZWxkLCBkaXI6IHRoaXMuc29ydERpcmVjdGlvbiwgaWdub3JlQ2FzZTogdGhpcy5jb2x1bW4uc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICBzdHJhdGVneTogdGhpcy5jb2x1bW4uc29ydFN0cmF0ZWd5XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbHVtbj5cbiAgICA8c3BhbiBbdGl0bGVdPVwidGl0bGVcIj57eyBjb2x1bW4uaGVhZGVyIHx8IGNvbHVtbi5maWVsZCB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVTRkhlYWRlckljb25UZW1wbGF0ZT5cbiAgICA8aWd4LWljb24+bW9yZV92ZXJ0PC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNvcnRIZWFkZXJJY29uVGVtcGxhdGU+XG4gICAgPGlneC1pY29uPnt7IHNvcnREaXJlY3Rpb24gPCAyID8gJ2Fycm93X3Vwd2FyZCcgOiAnYXJyb3dfZG93bndhcmQnIH19PC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxzcGFuIGNsYXNzPVwiaWd4LWdyaWQtdGhfX3RpdGxlXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZSA/IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRDb2x1bW47IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4sIGNvbHVtbjogY29sdW1ufVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9zcGFuPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uY29sdW1uR3JvdXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWQtdGhfX2ljb25zXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uc29ydGFibGUgJiYgIWRpc2FibGVkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1pY29uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXNvcnRJbmRleF09XCIoZ3JpZC5zb3J0aW5nT3B0aW9ucy5tb2RlID09PSAnc2luZ2xlJyAmJiBncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPD0xKSA/IG51bGwgOiBjb2x1bW4uZmllbGQgfCBzb3J0aW5nSW5kZXg6Z3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNcIlxuICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duSW5kaWNhdG9yKCRldmVudClcIiAoY2xpY2spPVwib25Tb3J0aW5nSWNvbkNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic29ydEljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6ICB0aGlzIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWQuYWxsb3dGaWx0ZXJpbmcgJiYgY29sdW1uLmZpbHRlcmFibGUgJiYgZ3JpZC5maWx0ZXJNb2RlID09PSAnZXhjZWxTdHlsZUZpbHRlcidcIj5cbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZmlsdGVySWNvbkNsYXNzTmFtZVwiIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duSW5kaWNhdG9yKCRldmVudClcIiAoY2xpY2spPVwib25GaWx0ZXJpbmdJY29uQ2xpY2soJGV2ZW50KVwiID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXNmSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogIHRoaXMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=