igniteui-angular 16.1.6 → 16.1.7

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 (43) hide show
  1. package/esm2022/lib/grids/filtering/excel-style/common.mjs +6 -1
  2. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +2 -2
  3. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +148 -6
  4. package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +2 -2
  5. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +2 -2
  6. package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +2 -2
  7. package/esm2022/lib/list/list-item.component.mjs +9 -4
  8. package/esm2022/lib/list/list.component.mjs +10 -4
  9. package/fesm2022/igniteui-angular.mjs +215 -58
  10. package/fesm2022/igniteui-angular.mjs.map +1 -1
  11. package/lib/core/styles/components/list/_list-component.scss +5 -0
  12. package/lib/core/styles/components/list/_list-theme.scss +10 -0
  13. package/lib/grids/filtering/excel-style/common.d.ts +8 -0
  14. package/lib/grids/filtering/excel-style/excel-style-search.component.d.ts +25 -3
  15. package/lib/list/list-item.component.d.ts +5 -3
  16. package/lib/list/list.component.d.ts +4 -2
  17. package/package.json +1 -1
  18. package/styles/igniteui-angular-dark.css +1 -1
  19. package/styles/igniteui-angular.css +1 -1
  20. package/styles/igniteui-bootstrap-dark.css +1 -1
  21. package/styles/igniteui-bootstrap-light.css +1 -1
  22. package/styles/igniteui-dark-green.css +1 -1
  23. package/styles/igniteui-fluent-dark-excel.css +1 -1
  24. package/styles/igniteui-fluent-dark-word.css +1 -1
  25. package/styles/igniteui-fluent-dark.css +1 -1
  26. package/styles/igniteui-fluent-light-excel.css +1 -1
  27. package/styles/igniteui-fluent-light-word.css +1 -1
  28. package/styles/igniteui-fluent-light.css +1 -1
  29. package/styles/igniteui-indigo-dark.css +1 -1
  30. package/styles/igniteui-indigo-light.css +1 -1
  31. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  32. package/styles/maps/igniteui-angular.css.map +1 -1
  33. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  34. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  35. package/styles/maps/igniteui-dark-green.css.map +1 -1
  36. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  37. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  38. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  39. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  40. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  41. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  42. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  43. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -500,7 +500,7 @@ export class IgxPivotDataSelectorComponent {
500
500
  }
501
501
  }
502
502
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxPivotDataSelectorComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
503
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxPivotDataSelectorComponent, isStandalone: true, selector: "igx-pivot-data-selector", inputs: { columnsExpanded: "columnsExpanded", rowsExpanded: "rowsExpanded", filtersExpanded: "filtersExpanded", valuesExpanded: "valuesExpanded", grid: "grid" }, outputs: { columnsExpandedChange: "columnsExpandedChange", rowsExpandedChange: "rowsExpandedChange", filtersExpandedChange: "filtersExpandedChange", valuesExpandedChange: "valuesExpandedChange" }, host: { properties: { "class.igx-pivot-data-selector": "this.cssClass" } }, ngImport: i0, template: "<div class=\"igx-pivot-data-selector__filter\">\n <igx-input-group type=\"box\" [displayDensity]=\"displayDensity\">\n <igx-icon igxPrefix>search</igx-icon>\n <input\n #input\n igxInput\n tabindex=\"0\"\n placeholder=\"Search\"\n autocomplete=\"off\"\n />\n </igx-input-group>\n <igx-list [displayDensity]=\"displayDensity\">\n <igx-list-item\n *ngFor=\"\n let item of dims\n | filterPivotItems: input.value:grid?.pipeTrigger\n \"\n [id]=\"item.memberName\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.memberName\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.memberName }}</span>\n </igx-list-item>\n <igx-list-item\n *ngFor=\"\n let item of values\n | filterPivotItems: input.value:grid?.pipeTrigger\n \"\n [id]=\"item.member\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.member\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.displayName || item.member }}</span>\n </igx-list-item>\n </igx-list>\n</div>\n\n<igx-accordion>\n <igx-expansion-panel\n *ngFor=\"let panel of _panels\"\n [animationSettings]=\"animationSettings\"\n [collapsed]=\"getPanelCollapsed(panel.type)\"\n (collapsedChange)=\"onCollapseChange($event, panel.type)\"\n >\n <igx-expansion-panel-header\n iconPosition=\"left\"\n [disabled]=\"false\"\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-expansion-panel-title class=\"igx-pivot-data-selector__header\">\n <h6 class=\"igx-pivot-data-selector__header-title\">\n {{ grid?.resourceStrings[panel.i18n] }}\n </h6>\n <div class=\"igx-pivot-data-selector__header-extra\">\n <igx-icon>{{ panel.icon }}</igx-icon>\n <igx-chip>{{ this.grid ? this.grid[panel.dataKey].length : 0 }}</igx-chip>\n </div>\n </igx-expansion-panel-title>\n </igx-expansion-panel-header>\n <igx-expansion-panel-body\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-list\n *ngIf=\"this.grid && this.grid[panel.dataKey].length > 0\"\n [displayDensity]=\"displayDensity\"\n >\n <igx-list-item\n igxDrop\n [igxDrag]=\"{ gridID: grid.id, selectorChannels: panel.dragChannels }\"\n [ghostTemplate]=\"itemGhost\"\n (ghostCreate)=\"ghostCreated($event, item[panel.itemKey])\"\n (over)=\"onItemDragOver($event)\"\n (leave)=\"onItemDragLeave($event)\"\n (dragMove)=\"onItemDragMove($event)\"\n (dragEnd)=\"onItemDragEnd($event)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n *ngFor=\"\n let item of this.grid[panel.dataKey];\n let index\n \"\n [id]=\"item[panel.itemKey]\"\n >\n <div class=\"igx-pivot-data-selector__item\">\n <div\n class=\"igx-pivot-data-selector__item-start\"\n (click)=\"onItemSort($event, item, panel.type)\"\n [class.igx-pivot-data-selector__action-sort]=\"\n panel.sortable\n \"\n >\n <div class=\"igx-pivot-data-selector__item-text\">\n <span *ngIf=\"panel.type === null\">{{\n item.aggregate.key\n }}</span>\n <span *ngIf=\"panel.type === null\">(</span>\n <span>{{ item[panel.displayKey] || item[panel.itemKey] }}</span>\n <span *ngIf=\"panel.type === null\">)</span>\n </div>\n <igx-icon\n class=\"igx-pivot-data-selector__action-sort\"\n *ngIf=\"panel.sortable && item.sortDirection\"\n >\n {{\n item.sortDirection < 2\n ? \"arrow_upward\"\n : \"arrow_downward\"\n }}\n </igx-icon>\n </div>\n <div class=\"igx-pivot-data-selector__item-end\">\n <igx-icon\n class=\"igx-pivot-data-selector__action-filter\"\n *ngIf=\"panel.type !== null\"\n (pointerdown)=\"\n onFilteringIconPointerDown($event)\n \"\n (click)=\"onFilteringIconClick($event, item)\"\n >filter_list\n </igx-icon>\n <igx-icon\n class=\"igx-pivot-data-selector__action-summary\"\n *ngIf=\"panel.type === null\"\n (click)=\"onSummaryClick($event, item, dropdown)\"\n [igxDropDownItemNavigation]=\"dropdown\"\n >\n functions\n </igx-icon>\n <igx-icon\n igxDragHandle\n class=\"igx-pivot-data-selector__action-move\"\n *ngIf=\"panel.dragChannels.length > 0\"\n >drag_handle</igx-icon\n >\n </div>\n </div>\n </igx-list-item>\n </igx-list>\n <div\n class=\"igx-pivot-data-selector__empty\"\n *ngIf=\"this.grid && this.grid[panel.dataKey].length === 0\"\n >\n {{ grid?.resourceStrings.igx_grid_pivot_selector_panel_empty }}\n </div>\n </igx-expansion-panel-body>\n </igx-expansion-panel>\n</igx-accordion>\n\n<igx-drop-down #dropdown (selectionChanging)=\"onAggregationChange($event)\">\n <igx-drop-down-item\n *ngFor=\"let item of aggregateList\"\n [selected]=\"isSelected(item)\"\n [value]=\"item\"\n >\n {{ item.label }}\n </igx-drop-down-item>\n</igx-drop-down>\n\n<ng-template #itemGhost>\n <div\n class=\"igx-pivot-data-selector__item-ghost\"\n [style.width.px]=\"ghostWidth\"\n [class.igx-pivot-data-selector__item-ghost--no-drop]=\"!dropAllowed\"\n >\n <div class=\"igx-pivot-data-selector__item-ghost-text\">\n <igx-icon>unfold_more</igx-icon>\n <span>{{ ghostText }}</span>\n </div>\n <igx-icon>drag_handle</igx-icon>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: IgxPrefixDirective, selector: "igx-prefix,[igxPrefix],[igxStart]" }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "component", type: IgxListComponent, selector: "igx-list", inputs: ["panEndTriggeringThreshold", "id", "allowLeftPanning", "allowRightPanning", "isLoading", "resourceStrings"], outputs: ["leftPan", "rightPan", "startPan", "endPan", "resetPan", "panStateChange", "itemClicked"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxListItemComponent, selector: "igx-list-item", inputs: ["isHeader", "hidden", "index"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"], outputs: ["change"] }, { kind: "component", type: IgxAccordionComponent, selector: "igx-accordion", inputs: ["id", "animationSettings", "singleBranchExpand"], outputs: ["panelExpanding", "panelExpanded", "panelCollapsing", "panelCollapsed"] }, { kind: "component", type: IgxExpansionPanelComponent, selector: "igx-expansion-panel", inputs: ["animationSettings", "id", "collapsed"], outputs: ["collapsedChange", "contentCollapsing", "contentCollapsed", "contentExpanding", "contentExpanded"] }, { kind: "component", type: IgxExpansionPanelHeaderComponent, selector: "igx-expansion-panel-header", inputs: ["lv", "role", "iconPosition", "disabled"], outputs: ["interaction"] }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "directive", type: IgxExpansionPanelTitleDirective, selector: "igx-expansion-panel-title" }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxExpansionPanelBodyComponent, selector: "igx-expansion-panel-body", inputs: ["role", "label", "labelledBy"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxDragDirective, selector: "[igxDrag]", inputs: ["igxDrag", "dragTolerance", "dragDirection", "dragChannel", "ghost", "ghostClass", "ghostStyle", "ghostTemplate", "ghostHost", "scrollContainer", "ghostOffsetX", "ghostOffsetY"], outputs: ["dragStart", "dragMove", "dragEnd", "dragClick", "ghostCreate", "ghostDestroy", "transitioned"], exportAs: ["drag"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxDragHandleDirective, selector: "[igxDragHandle]" }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "pipe", type: IgxFilterPivotItemsPipe, name: "filterPivotItems" }] }); }
503
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxPivotDataSelectorComponent, isStandalone: true, selector: "igx-pivot-data-selector", inputs: { columnsExpanded: "columnsExpanded", rowsExpanded: "rowsExpanded", filtersExpanded: "filtersExpanded", valuesExpanded: "valuesExpanded", grid: "grid" }, outputs: { columnsExpandedChange: "columnsExpandedChange", rowsExpandedChange: "rowsExpandedChange", filtersExpandedChange: "filtersExpandedChange", valuesExpandedChange: "valuesExpandedChange" }, host: { properties: { "class.igx-pivot-data-selector": "this.cssClass" } }, ngImport: i0, template: "<div class=\"igx-pivot-data-selector__filter\">\n <igx-input-group type=\"box\" [displayDensity]=\"displayDensity\">\n <igx-icon igxPrefix>search</igx-icon>\n <input\n #input\n igxInput\n tabindex=\"0\"\n placeholder=\"Search\"\n autocomplete=\"off\"\n />\n </igx-input-group>\n <igx-list [displayDensity]=\"displayDensity\">\n <igx-list-item\n *ngFor=\"\n let item of dims\n | filterPivotItems: input.value:grid?.pipeTrigger\n \"\n [id]=\"item.memberName\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.memberName\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.memberName }}</span>\n </igx-list-item>\n <igx-list-item\n *ngFor=\"\n let item of values\n | filterPivotItems: input.value:grid?.pipeTrigger\n \"\n [id]=\"item.member\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.member\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.displayName || item.member }}</span>\n </igx-list-item>\n </igx-list>\n</div>\n\n<igx-accordion>\n <igx-expansion-panel\n *ngFor=\"let panel of _panels\"\n [animationSettings]=\"animationSettings\"\n [collapsed]=\"getPanelCollapsed(panel.type)\"\n (collapsedChange)=\"onCollapseChange($event, panel.type)\"\n >\n <igx-expansion-panel-header\n iconPosition=\"left\"\n [disabled]=\"false\"\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-expansion-panel-title class=\"igx-pivot-data-selector__header\">\n <h6 class=\"igx-pivot-data-selector__header-title\">\n {{ grid?.resourceStrings[panel.i18n] }}\n </h6>\n <div class=\"igx-pivot-data-selector__header-extra\">\n <igx-icon>{{ panel.icon }}</igx-icon>\n <igx-chip>{{ this.grid ? this.grid[panel.dataKey].length : 0 }}</igx-chip>\n </div>\n </igx-expansion-panel-title>\n </igx-expansion-panel-header>\n <igx-expansion-panel-body\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-list\n *ngIf=\"this.grid && this.grid[panel.dataKey].length > 0\"\n [displayDensity]=\"displayDensity\"\n >\n <igx-list-item\n igxDrop\n [igxDrag]=\"{ gridID: grid.id, selectorChannels: panel.dragChannels }\"\n [ghostTemplate]=\"itemGhost\"\n (ghostCreate)=\"ghostCreated($event, item[panel.itemKey])\"\n (over)=\"onItemDragOver($event)\"\n (leave)=\"onItemDragLeave($event)\"\n (dragMove)=\"onItemDragMove($event)\"\n (dragEnd)=\"onItemDragEnd($event)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n *ngFor=\"\n let item of this.grid[panel.dataKey];\n let index\n \"\n [id]=\"item[panel.itemKey]\"\n >\n <div class=\"igx-pivot-data-selector__item\">\n <div\n class=\"igx-pivot-data-selector__item-start\"\n (click)=\"onItemSort($event, item, panel.type)\"\n [class.igx-pivot-data-selector__action-sort]=\"\n panel.sortable\n \"\n >\n <div class=\"igx-pivot-data-selector__item-text\">\n <span *ngIf=\"panel.type === null\">{{\n item.aggregate.key\n }}</span>\n <span *ngIf=\"panel.type === null\">(</span>\n <span>{{ item[panel.displayKey] || item[panel.itemKey] }}</span>\n <span *ngIf=\"panel.type === null\">)</span>\n </div>\n <igx-icon\n class=\"igx-pivot-data-selector__action-sort\"\n *ngIf=\"panel.sortable && item.sortDirection\"\n >\n {{\n item.sortDirection < 2\n ? \"arrow_upward\"\n : \"arrow_downward\"\n }}\n </igx-icon>\n </div>\n <div class=\"igx-pivot-data-selector__item-end\">\n <igx-icon\n class=\"igx-pivot-data-selector__action-filter\"\n *ngIf=\"panel.type !== null\"\n (pointerdown)=\"\n onFilteringIconPointerDown($event)\n \"\n (click)=\"onFilteringIconClick($event, item)\"\n >filter_list\n </igx-icon>\n <igx-icon\n class=\"igx-pivot-data-selector__action-summary\"\n *ngIf=\"panel.type === null\"\n (click)=\"onSummaryClick($event, item, dropdown)\"\n [igxDropDownItemNavigation]=\"dropdown\"\n >\n functions\n </igx-icon>\n <igx-icon\n igxDragHandle\n class=\"igx-pivot-data-selector__action-move\"\n *ngIf=\"panel.dragChannels.length > 0\"\n >drag_handle</igx-icon\n >\n </div>\n </div>\n </igx-list-item>\n </igx-list>\n <div\n class=\"igx-pivot-data-selector__empty\"\n *ngIf=\"this.grid && this.grid[panel.dataKey].length === 0\"\n >\n {{ grid?.resourceStrings.igx_grid_pivot_selector_panel_empty }}\n </div>\n </igx-expansion-panel-body>\n </igx-expansion-panel>\n</igx-accordion>\n\n<igx-drop-down #dropdown (selectionChanging)=\"onAggregationChange($event)\">\n <igx-drop-down-item\n *ngFor=\"let item of aggregateList\"\n [selected]=\"isSelected(item)\"\n [value]=\"item\"\n >\n {{ item.label }}\n </igx-drop-down-item>\n</igx-drop-down>\n\n<ng-template #itemGhost>\n <div\n class=\"igx-pivot-data-selector__item-ghost\"\n [style.width.px]=\"ghostWidth\"\n [class.igx-pivot-data-selector__item-ghost--no-drop]=\"!dropAllowed\"\n >\n <div class=\"igx-pivot-data-selector__item-ghost-text\">\n <igx-icon>unfold_more</igx-icon>\n <span>{{ ghostText }}</span>\n </div>\n <igx-icon>drag_handle</igx-icon>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: IgxPrefixDirective, selector: "igx-prefix,[igxPrefix],[igxStart]" }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "component", type: IgxListComponent, selector: "igx-list", inputs: ["panEndTriggeringThreshold", "id", "allowLeftPanning", "allowRightPanning", "isLoading", "resourceStrings", "role"], outputs: ["leftPan", "rightPan", "startPan", "endPan", "resetPan", "panStateChange", "itemClicked"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxListItemComponent, selector: "igx-list-item", inputs: ["isHeader", "hidden", "index", "role"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"], outputs: ["change"] }, { kind: "component", type: IgxAccordionComponent, selector: "igx-accordion", inputs: ["id", "animationSettings", "singleBranchExpand"], outputs: ["panelExpanding", "panelExpanded", "panelCollapsing", "panelCollapsed"] }, { kind: "component", type: IgxExpansionPanelComponent, selector: "igx-expansion-panel", inputs: ["animationSettings", "id", "collapsed"], outputs: ["collapsedChange", "contentCollapsing", "contentCollapsed", "contentExpanding", "contentExpanded"] }, { kind: "component", type: IgxExpansionPanelHeaderComponent, selector: "igx-expansion-panel-header", inputs: ["lv", "role", "iconPosition", "disabled"], outputs: ["interaction"] }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "directive", type: IgxExpansionPanelTitleDirective, selector: "igx-expansion-panel-title" }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxExpansionPanelBodyComponent, selector: "igx-expansion-panel-body", inputs: ["role", "label", "labelledBy"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxDragDirective, selector: "[igxDrag]", inputs: ["igxDrag", "dragTolerance", "dragDirection", "dragChannel", "ghost", "ghostClass", "ghostStyle", "ghostTemplate", "ghostHost", "scrollContainer", "ghostOffsetX", "ghostOffsetY"], outputs: ["dragStart", "dragMove", "dragEnd", "dragClick", "ghostCreate", "ghostDestroy", "transitioned"], exportAs: ["drag"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxDragHandleDirective, selector: "[igxDragHandle]" }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "pipe", type: IgxFilterPivotItemsPipe, name: "filterPivotItems" }] }); }
504
504
  }
505
505
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxPivotDataSelectorComponent, decorators: [{
506
506
  type: Component,
@@ -527,4 +527,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
527
527
  }], grid: [{
528
528
  type: Input
529
529
  }] } });
530
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1kYXRhLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWRhdGEtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBOEcsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUV4TyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUdwQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBSUgsa0JBQWtCLEVBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMxRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQWNqRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFPSCxNQUFNLE9BQU8sNkJBQTZCO0lBbUp0Qyx3QkFBd0I7SUFDeEIsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELHdCQUF3QjtJQUN4QixJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBb0IsUUFBbUIsRUFBVSxHQUFzQjtRQUFuRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUExSnZFOzs7Ozs7Ozs7Ozs7Ozs7V0FlRztRQUVJLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTlCOztXQUVHO1FBRUksMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUUzRDs7Ozs7Ozs7Ozs7Ozs7O1dBZUc7UUFFSSxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUUzQjs7V0FFRztRQUVJLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFeEQ7Ozs7Ozs7Ozs7Ozs7OztXQWVHO1FBRUksb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFOUI7O1dBRUc7UUFFSSwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTNEOzs7Ozs7Ozs7Ozs7Ozs7V0FlRztRQUVJLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTdCOztXQUVHO1FBRUkseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUdsRCxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLHlCQUF5QjtRQUVsQixhQUFRLEdBQUcseUJBQXlCLENBQUM7UUFJcEMsNkJBQXdCLEdBQXFCO1lBQ2pELGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLE1BQU07WUFDNUMsY0FBYyxFQUFFLFNBQVM7U0FDNUIsQ0FBQztRQUVNLDRCQUF1QixHQUFvQjtZQUMvQyxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLEtBQUssRUFBRSxLQUFLO1lBQ1osZ0JBQWdCLEVBQUUsSUFBSSxvQkFBb0IsQ0FDdEMsSUFBSSxDQUFDLHdCQUF3QixDQUNoQztZQUNELGNBQWMsRUFBRSxJQUFJLHNCQUFzQixFQUFFO1NBQy9DLENBQUM7UUFDSyxzQkFBaUIsR0FBRztZQUN2QixjQUFjLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRTtnQkFDbEMsTUFBTSxFQUFFO29CQUNKLFFBQVEsRUFBRSxLQUFLO2lCQUNsQjthQUNKLENBQUM7WUFDRixhQUFhLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDaEMsTUFBTSxFQUFFO29CQUNKLFFBQVEsRUFBRSxLQUFLO2lCQUNsQjthQUNKLENBQUM7U0FDTCxDQUFDO1FBRUYsd0JBQXdCO1FBQ2pCLGtCQUFhLEdBQXVCLEVBQUUsQ0FBQztRQW9COUM7O1dBRUc7UUFDSSxZQUFPLEdBQXlCO1lBQ25DO2dCQUNJLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxpQ0FBaUM7Z0JBQ3ZDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO2dCQUMvQixPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFlBQVksRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDO2FBQy9DO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE1BQU07Z0JBQy9CLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLElBQUksRUFBRSxhQUFhO2dCQUNuQixPQUFPLEVBQUUsWUFBWTtnQkFDckIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsWUFBWSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7YUFDL0M7WUFDRDtnQkFDSSxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsOEJBQThCO2dCQUNwQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsR0FBRztnQkFDNUIsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLElBQUksRUFBRSxZQUFZO2dCQUNsQixPQUFPLEVBQUUsWUFBWTtnQkFDckIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsWUFBWSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7YUFDL0M7WUFDRDtnQkFDSSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsZ0NBQWdDO2dCQUN0QyxJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsUUFBUTtnQkFDakIsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixVQUFVLEVBQUUsYUFBYTtnQkFDekIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQzNCO1NBQ0osQ0FBQztJQS9Dd0UsQ0FBQztJQWlEM0U7O09BRUc7SUFDSCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNXLElBQUksQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVUsQ0FDYixDQUFRLEVBQ1IsU0FBMEIsRUFDMUIsYUFBaUM7UUFFakMsSUFDSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNkLENBQUMsS0FBeUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLENBQzlELENBQUMsUUFBUTtZQUVWLE9BQU87UUFFWCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsYUFBYSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUN4RSxNQUFNLFNBQVMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFELGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLDBCQUEwQixDQUFDLEtBQW1CO1FBQ2pELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG9CQUFvQixDQUFDLEtBQWlCLEVBQUUsU0FBMEI7UUFDckUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFDcEIsSUFBSSxHQUFlLENBQUM7UUFFcEIsT0FBTyxHQUFHLEVBQUU7WUFDUixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQ3JDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQ3BDLENBQUM7WUFDRixJQUFJLEdBQUcsRUFBRTtnQkFDTCxNQUFNO2FBQ1Q7aUJBQU07Z0JBQ0gsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7YUFDeEI7U0FDSjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ08saUJBQWlCLENBQUMsYUFBaUM7UUFDekQsUUFBUSxhQUFhLEVBQUU7WUFDbkIsS0FBSyxrQkFBa0IsQ0FBQyxHQUFHO2dCQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ25DLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RDLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RDO2dCQUNJLE9BQU8sSUFBSSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGFBQWEsQ0FBQyxNQUFjO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1FBQ3hELE1BQU0sVUFBVSxHQUNaLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQztZQUNwRCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLGFBQWEsR0FDZixVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFeEUsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FDcEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUN6RCxDQUFDO1FBRUYsSUFBSSxlQUFlLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTthQUM5QyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhLENBQ2hCLEtBQTRCLEVBQzVCLGFBQWlDO1FBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxNQUFNLGFBQWEsR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sU0FBUyxHQUNYLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQztZQUN0RCxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBRXZGLE1BQU0sT0FBTyxHQUNULGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDO1lBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxXQUFXLEdBQ1gsUUFBUSxLQUFLLEVBQUU7WUFDWCxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUM7WUFDeEQsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7UUFFNUIsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7UUFFRCxJQUFJLE9BQU8sRUFBRTtZQUNULFdBQVc7Z0JBQ1AsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3RFO2FBQU07WUFDSCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUM1QixVQUFVLEVBQUUsU0FBUztZQUNyQix1QkFBdUIsRUFBRSxhQUFhO1NBQ3pDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDTyxjQUFjLENBQ3BCLEtBQWtCLEVBQ2xCLFFBQThCO1FBRTlCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQ2pCLEtBQWlCLEVBQ2pCLEtBQWtCLEVBQ2xCLFFBQThCO1FBRTlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9CLEtBQUssQ0FBQyxhQUE0QixDQUFDO1FBRXZDLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBQ0gsMEJBQTBCO1lBQzFCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksbUJBQW1CLENBQUMsS0FBMEI7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxHQUFxQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsS0FBOEIsRUFBRSxLQUFhO1FBQzdELE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQ3RCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ2pDLFVBQVUsRUFDVixVQUFVLENBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ2pDLFlBQVksRUFDWixRQUFRLENBQ1gsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBbUM7UUFDakQsSUFBSSxJQUFtQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQW1CLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksSUFBdUIsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUF1QixDQUFDLENBQUM7U0FDdEQ7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWSxDQUFDLEtBQXlCLEVBQUUsS0FBYTtRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUM5RixDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FDekMsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsS0FBeUI7UUFDM0MsTUFBTSxVQUFVLEdBQ1osS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN4QixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ3ZELENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLEtBQXlCO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ2pDLFVBQVUsRUFDVixRQUFRLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ2pDLFlBQVksRUFDWixTQUFTLENBQ1osQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsS0FBeUI7UUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ2pDLGdCQUFnQixDQUNuQixDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLEtBQXlCO1FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDckIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUNqQyxnQkFBZ0IsQ0FDbkIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQixDQUFDLFNBQTZCO1FBQ2xELFFBQU8sU0FBUyxFQUFFO1lBQ2QsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNqQyxLQUFLLGtCQUFrQixDQUFDLE1BQU07Z0JBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ2pDLEtBQUssa0JBQWtCLENBQUMsR0FBRztnQkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDOUI7Z0JBQ0ksT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsS0FBYyxFQUFFLFNBQTZCO1FBQ2pFLFFBQU8sU0FBUyxFQUFFO1lBQ2QsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUM5QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLGtCQUFrQixDQUFDLEdBQUc7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRCxNQUFNO1lBQ1Y7Z0JBQ0ksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7U0FDMUQ7SUFDTCxDQUFDOzhHQWxrQlEsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsc2dCQ3RGMUMsMHRQQXNMQSw0Q0RsR2Msc0JBQXNCLG9JQUFFLGdCQUFnQiwyRkFBRSxrQkFBa0IsOEVBQUUsaUJBQWlCLDBIQUFFLGdCQUFnQixnUkFBRSxLQUFLLG1IQUFFLG9CQUFvQixtR0FBRSxvQkFBb0IsMFNBQUUscUJBQXFCLHdNQUFFLDBCQUEwQixnT0FBRSxnQ0FBZ0MscUpBQUUsZ0JBQWdCLDhLQUFFLCtCQUErQixzRUFBRSxnQkFBZ0IsMmJBQUUsOEJBQThCLDhHQUFFLElBQUksNkZBQUUsZ0JBQWdCLGlYQUFFLGtDQUFrQywrR0FBRSxzQkFBc0IsNERBQUUsb0JBQW9CLDBKQUFFLHdCQUF3QiwwREFBRSx1QkFBdUI7OzJGQUU1ZSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0kseUJBQXlCLGNBRXZCLElBQUksV0FDUCxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxnQ0FBZ0MsRUFBRSxnQkFBZ0IsRUFBRSwrQkFBK0IsRUFBRSxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsa0NBQWtDLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLENBQUM7Z0lBcUIvZSxlQUFlO3NCQURyQixLQUFLO2dCQU9DLHFCQUFxQjtzQkFEM0IsTUFBTTtnQkFvQkEsWUFBWTtzQkFEbEIsS0FBSztnQkFPQyxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBb0JBLGVBQWU7c0JBRHJCLEtBQUs7Z0JBT0MscUJBQXFCO3NCQUQzQixNQUFNO2dCQW9CQSxjQUFjO3NCQURwQixLQUFLO2dCQU9DLG9CQUFvQjtzQkFEMUIsTUFBTTtnQkFRQSxRQUFRO3NCQURkLFdBQVc7dUJBQUMsK0JBQStCO2dCQThHakMsSUFBSTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQW5pbWF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSBcIi4uLy4uL2FuaW1hdGlvbnMvZmFkZVwiO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tIFwiLi4vLi4vY29yZS9kZW5zaXR5XCI7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSBcIi4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5XCI7XG5pbXBvcnQgeyBJRHJhZ0Jhc2VFdmVudEFyZ3MsIElEcmFnR2hvc3RCYXNlRXZlbnRBcmdzLCBJRHJhZ01vdmVFdmVudEFyZ3MsIElEcm9wQmFzZUV2ZW50QXJncywgSURyb3BEcm9wcGVkRXZlbnRBcmdzLCBJZ3hEcm9wRGlyZWN0aXZlLCBJZ3hEcmFnRGlyZWN0aXZlLCBJZ3hEcmFnSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tIFwiLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb25cIjtcbmltcG9ydCB7IElneERyb3BEb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICAgIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheVNldHRpbmdzLFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsXG4gICAgVmVydGljYWxBbGlnbm1lbnRcbn0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3B1YmxpY19hcGlcIjtcbmltcG9ydCB7IENvbHVtblR5cGUsIFBpdm90R3JpZFR5cGUgfSBmcm9tIFwiLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlXCI7XG5pbXBvcnQge1xuICAgIElQaXZvdEFnZ3JlZ2F0b3IsXG4gICAgSVBpdm90RGltZW5zaW9uLFxuICAgIElQaXZvdFZhbHVlLFxuICAgIFBpdm90RGltZW5zaW9uVHlwZVxufSBmcm9tIFwiLi9waXZvdC1ncmlkLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC11dGlsJztcbmltcG9ydCB7IElneEZpbHRlclBpdm90SXRlbXNQaXBlIH0gZnJvbSBcIi4vcGl2b3QtZ3JpZC5waXBlc1wiO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24taXRlbS5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1uYXZpZ2F0aW9uLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwtYm9keS5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneENoaXBDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY2hpcHMvY2hpcC5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsVGl0bGVEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5kaXJlY3RpdmVzXCI7XG5pbXBvcnQgeyBJZ3hFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9leHBhbnNpb24tcGFuZWwvZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJZ3hBY2NvcmRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSWd4TGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vbGlzdC9saXN0LWl0ZW0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IElneExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vbGlzdC9saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElneFByZWZpeERpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL3ByZWZpeC9wcmVmaXguZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2ljb24vaWNvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50XCI7XG5cbmludGVyZmFjZSBJRGF0YVNlbGVjdG9yUGFuZWwge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpMThuOiBzdHJpbmc7XG4gICAgdHlwZT86IFBpdm90RGltZW5zaW9uVHlwZTtcbiAgICBkYXRhS2V5OiBzdHJpbmc7XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIGl0ZW1LZXk6IHN0cmluZztcbiAgICBkaXNwbGF5S2V5Pzogc3RyaW5nO1xuICAgIHNvcnRhYmxlOiBib29sZWFuO1xuICAgIGRyYWdDaGFubmVsczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUGl2b3QgRGF0YSBTZWxlY3RvciBwcm92aWRlcyBtZWFucyB0byBjb25maWd1cmUgdGhlIHBpdm90IHN0YXRlIG9mIHRoZSBQaXZvdCBHcmlkIHZpYSBhIHZlcnRpY2FsIHBhbmVsIFVJXG4gKlxuICogQGlneE1vZHVsZSBJZ3hQaXZvdEdyaWRNb2R1bGVcbiAqIEBpZ3hHcm91cCBHcmlkcyAmIExpc3RzXG4gKiBAaWd4S2V5d29yZHMgZGF0YSBzZWxlY3RvciwgcGl2b3QsIGdyaWRcbiAqIEBpZ3hUaGVtZSBwaXZvdC1kYXRhLXNlbGVjdG9yLXRoZW1lXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBEYXRhIFNlbGVjdG9yIGhhcyBhIHNlYXJjaGFibGUgbGlzdCB3aXRoIHRoZSBncmlkIGRhdGEgY29sdW1ucyxcbiAqIHRoZXJlIGFyZSBhbHNvIGZvdXIgZXhwYW5kYWJsZSBhcmVhcyB1bmRlcm5lYXRoIGZvciBmaWx0ZXJzLCByb3dzLCBjb2x1bW5zLCBhbmQgdmFsdWVzXG4gKiBpcyB1c2VkIGZvciBncm91cGluZyBhbmQgYWdncmVnYXRpbmcgc2ltcGxlIGZsYXQgZGF0YSBpbnRvIGEgcGl2b3QgdGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1waXZvdC1ncmlkICNncmlkMSBbZGF0YV09XCJkYXRhXCIgW3Bpdm90Q29uZmlndXJhdGlvbl09XCJjb25maWd1cmF0aW9uXCI+XG4gKiA8L2lneC1waXZvdC1ncmlkPlxuICogPGlneC1waXZvdC1kYXRhLXNlbGVjdG9yIFtncmlkXT1cImdyaWQxXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneElucHV0R3JvdXBDb21wb25lbnQsIElneEljb25Db21wb25lbnQsIElneFByZWZpeERpcmVjdGl2ZSwgSWd4SW5wdXREaXJlY3RpdmUsIElneExpc3RDb21wb25lbnQsIE5nRm9yLCBJZ3hMaXN0SXRlbUNvbXBvbmVudCwgSWd4Q2hlY2tib3hDb21wb25lbnQsIElneEFjY29yZGlvbkNvbXBvbmVudCwgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQsIElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50LCBJZ3hEcm9wRGlyZWN0aXZlLCBJZ3hFeHBhbnNpb25QYW5lbFRpdGxlRGlyZWN0aXZlLCBJZ3hDaGlwQ29tcG9uZW50LCBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQsIE5nSWYsIElneERyYWdEaXJlY3RpdmUsIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsIElneERyYWdIYW5kbGVEaXJlY3RpdmUsIElneERyb3BEb3duQ29tcG9uZW50LCBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnQsIElneEZpbHRlclBpdm90SXRlbXNQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdERhdGFTZWxlY3RvckNvbXBvbmVudCB7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgY29sdW1ucyBwYW5lbCBpcyBleHBhbmRlZFxuICAgICAqIEdldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY29sdW1uc1BhbmVsU3RhdGU6IGJvb2xlYW4gPSB0aGlzLmRhdGFTZWxlY3Rvci5jb2x1bW5zRXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvciBbZ3JpZF09XCJncmlkMVwiIFtjb2x1bW5zRXhwYW5kZWRdPVwiY29sdW1uc1BhbmVsU3RhdGVcIj48L2lneC1waXZvdC1kYXRhLXNlbGVjdG9yPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmc6XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvciBbZ3JpZF09XCJncmlkMVwiIFsoY29sdW1uc0V4cGFuZGVkKV09XCJjb2x1bW5zUGFuZWxTdGF0ZVwiPjwvaWd4LXBpdm90LWRhdGEtc2VsZWN0b3I+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sdW1uc0V4cGFuZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY29sdW1uc0V4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHdoZXRoZXIgdGhlIHJvd3MgcGFuZWwgaXMgZXhwYW5kZWRcbiAgICAgKiBHZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IHJvd3NQYW5lbFN0YXRlOiBib29sZWFuID0gdGhpcy5kYXRhU2VsZWN0b3Iucm93c0V4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWRhdGEtc2VsZWN0b3IgW2dyaWRdPVwiZ3JpZDFcIiBbcm93c0V4cGFuZGVkXT1cInJvd3NQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nOlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWRhdGEtc2VsZWN0b3IgW2dyaWRdPVwiZ3JpZDFcIiBbKHJvd3NFeHBhbmRlZCldPVwicm93c1BhbmVsU3RhdGVcIj48L2lneC1waXZvdC1kYXRhLXNlbGVjdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd3NFeHBhbmRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJvd3NFeHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSBmaWx0ZXJzIHBhbmVsIGlzIGV4cGFuZGVkXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBmaWx0ZXJzUGFuZWxTdGF0ZTogYm9vbGVhbiA9IHRoaXMuZGF0YVNlbGVjdG9yLmZpbHRlcnNFeHBhbmRlZDtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1kYXRhLXNlbGVjdG9yIFtncmlkXT1cImdyaWQxXCIgW2ZpbHRlcnNFeHBhbmRlZF09XCJmaWx0ZXJzUGFuZWxTdGF0ZVwiPjwvaWd4LXBpdm90LWRhdGEtc2VsZWN0b3I+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZzpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1kYXRhLXNlbGVjdG9yIFtncmlkXT1cImdyaWQxXCIgWyhmaWx0ZXJzRXhwYW5kZWQpXT1cImZpbHRlcnNQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJzRXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJzRXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgdmFsdWVzIHBhbmVsIGlzIGV4cGFuZGVkXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCB2YWx1ZXNQYW5lbFN0YXRlOiBib29sZWFuID0gdGhpcy5kYXRhU2VsZWN0b3IudmFsdWVzRXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvciBbZ3JpZF09XCJncmlkMVwiIFt2YWx1ZXNFeHBhbmRlZF09XCJ2YWx1ZXNQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nOlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWRhdGEtc2VsZWN0b3IgW2dyaWRdPVwiZ3JpZDFcIiBbKHZhbHVlc0V4cGFuZGVkKV09XCJ2YWx1ZXNQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZXNFeHBhbmRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlc0V4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBfZ3JpZDogUGl2b3RHcmlkVHlwZTtcbiAgICBwcml2YXRlIF9kcm9wRGVsdGEgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICoqL1xuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmlneC1waXZvdC1kYXRhLXNlbGVjdG9yXCIpXG4gICAgcHVibGljIGNzc0NsYXNzID0gXCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvclwiO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqKi9cbiAgICBwdWJsaWMgZGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW107XG5cbiAgICBwcml2YXRlIF9zdWJNZW51UG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgIGNsb3NlQW5pbWF0aW9uOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIHByaXZhdGUgX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koXG4gICAgICAgICAgICB0aGlzLl9zdWJNZW51UG9zaXRpb25TZXR0aW5nc1xuICAgICAgICApLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICB9O1xuICAgIHB1YmxpYyBhbmltYXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VBbmltYXRpb246IHVzZUFuaW1hdGlvbihmYWRlT3V0LCB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogXCIwbXNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBvcGVuQW5pbWF0aW9uOiB1c2VBbmltYXRpb24oZmFkZUluLCB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogXCIwbXNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgYWdncmVnYXRlTGlzdDogSVBpdm90QWdncmVnYXRvcltdID0gW107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHZhbHVlOiBJUGl2b3RWYWx1ZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2hvc3RUZXh0OiBzdHJpbmc7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdob3N0V2lkdGg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZHJvcEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBkaW1zKCkgOiBJUGl2b3REaW1lbnNpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmlkPy5hbGxEaW1lbnNpb25zIHx8IFtdO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlcygpOiBJUGl2b3RWYWx1ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWQ/LnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMgfHwgW107XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBfcGFuZWxzOiBJRGF0YVNlbGVjdG9yUGFuZWxbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJGaWx0ZXJzXCIsXG4gICAgICAgICAgICBpMThuOiAnaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3JfZmlsdGVycycsXG4gICAgICAgICAgICB0eXBlOiBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyLFxuICAgICAgICAgICAgZGF0YUtleTogXCJmaWx0ZXJEaW1lbnNpb25zXCIsXG4gICAgICAgICAgICBpY29uOiBcImZpbHRlcl9saXN0XCIsXG4gICAgICAgICAgICBpdGVtS2V5OiBcIm1lbWJlck5hbWVcIixcbiAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRyYWdDaGFubmVsczogW1wiRmlsdGVyc1wiLCBcIkNvbHVtbnNcIiwgXCJSb3dzXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29sdW1uc1wiLFxuICAgICAgICAgICAgaTE4bjogJ2lneF9ncmlkX3Bpdm90X3NlbGVjdG9yX2NvbHVtbnMnLFxuICAgICAgICAgICAgdHlwZTogUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbixcbiAgICAgICAgICAgIGRhdGFLZXk6IFwiY29sdW1uRGltZW5zaW9uc1wiLFxuICAgICAgICAgICAgaWNvbjogXCJ2aWV3X2NvbHVtblwiLFxuICAgICAgICAgICAgaXRlbUtleTogXCJtZW1iZXJOYW1lXCIsXG4gICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGRyYWdDaGFubmVsczogW1wiRmlsdGVyc1wiLCBcIkNvbHVtbnNcIiwgXCJSb3dzXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiUm93c1wiLFxuICAgICAgICAgICAgaTE4bjogJ2lneF9ncmlkX3Bpdm90X3NlbGVjdG9yX3Jvd3MnLFxuICAgICAgICAgICAgdHlwZTogUGl2b3REaW1lbnNpb25UeXBlLlJvdyxcbiAgICAgICAgICAgIGRhdGFLZXk6IFwicm93RGltZW5zaW9uc1wiLFxuICAgICAgICAgICAgaWNvbjogXCJ0YWJsZV9yb3dzXCIsXG4gICAgICAgICAgICBpdGVtS2V5OiBcIm1lbWJlck5hbWVcIixcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZHJhZ0NoYW5uZWxzOiBbXCJGaWx0ZXJzXCIsIFwiQ29sdW1uc1wiLCBcIlJvd3NcIl1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJWYWx1ZXNcIixcbiAgICAgICAgICAgIGkxOG46ICdpZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl92YWx1ZXMnLFxuICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgIGRhdGFLZXk6IFwidmFsdWVzXCIsXG4gICAgICAgICAgICBpY29uOiBcImZ1bmN0aW9uc1wiLFxuICAgICAgICAgICAgaXRlbUtleTogXCJtZW1iZXJcIixcbiAgICAgICAgICAgIGRpc3BsYXlLZXk6ICdkaXNwbGF5TmFtZScsXG4gICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIlZhbHVlc1wiXVxuICAgICAgICB9LFxuICAgIF07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzcGxheURlbnNpdHkoKTogRGlzcGxheURlbnNpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkPy5kaXNwbGF5RGVuc2l0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBncmlkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBncmlkKHZhbHVlOiBQaXZvdEdyaWRUeXBlKSB7XG4gICAgICAgIHRoaXMuX2dyaWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBncmlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JpZCgpOiBQaXZvdEdyaWRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1Tb3J0KFxuICAgICAgICBfOiBFdmVudCxcbiAgICAgICAgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sXG4gICAgICAgIGRpbWVuc2lvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZVxuICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5fcGFuZWxzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhbmVsOiBJRGF0YVNlbGVjdG9yUGFuZWwpID0+IHBhbmVsLnR5cGUgPT09IGRpbWVuc2lvblR5cGVcbiAgICAgICAgICAgICkuc29ydGFibGVcbiAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0RGlyZWN0aW9uID0gZGltZW5zaW9uLnNvcnREaXJlY3Rpb24gfHwgU29ydGluZ0RpcmVjdGlvbi5Ob25lO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBzdGFydERpcmVjdGlvbiArIDEgPiBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgP1xuICAgICAgICAgICAgU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogc3RhcnREaXJlY3Rpb24gKyAxO1xuICAgICAgICB0aGlzLmdyaWQuc29ydERpbWVuc2lvbihkaW1lbnNpb24sIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZpbHRlcmluZ0ljb25Qb2ludGVyRG93bihldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25GaWx0ZXJpbmdJY29uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBkaW0gPSBkaW1lbnNpb247XG4gICAgICAgIGxldCBjb2w6IENvbHVtblR5cGU7XG5cbiAgICAgICAgd2hpbGUgKGRpbSkge1xuICAgICAgICAgICAgY29sID0gdGhpcy5ncmlkLmRpbWVuc2lvbkRhdGFDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgKHgpID0+IHguZmllbGQgPT09IGRpbS5tZW1iZXJOYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNvbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaW0gPSBkaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnRvZ2dsZUZpbHRlckRyb3Bkb3duKGV2ZW50LnRhcmdldCwgY29sKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldERpbWVuc2lvblN0YXRlKGRpbWVuc2lvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKGRpbWVuc2lvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLlJvdzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0RpbWVuc2lvbnM7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5jb2x1bW5EaW1lbnNpb25zO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZmlsdGVyRGltZW5zaW9ucztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1vdmVWYWx1ZUl0ZW0oaXRlbUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb24gPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcztcbiAgICAgICAgY29uc3QgdmFsdWVJbmRleCA9XG4gICAgICAgICAgICBhZ2dyZWdhdGlvbi5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyID09PSBpdGVtSWQpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gYWdncmVnYXRpb24/LmZpbmRJbmRleCgoeCkgPT4geC5tZW1iZXIgPT09IGl0ZW1JZClcbiAgICAgICAgICAgICAgICA6IGFnZ3JlZ2F0aW9uLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVJbmRleCA9XG4gICAgICAgICAgICB2YWx1ZUluZGV4ICsgdGhpcy5fZHJvcERlbHRhIDwgMCA/IDAgOiB2YWx1ZUluZGV4ICsgdGhpcy5fZHJvcERlbHRhO1xuXG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9uSXRlbSA9IGFnZ3JlZ2F0aW9uLmZpbmQoXG4gICAgICAgICAgICAoeCkgPT4geC5tZW1iZXIgPT09IGl0ZW1JZCB8fCB4LmRpc3BsYXlOYW1lID09PSBpdGVtSWRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYWdncmVnYXRpb25JdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQubW92ZVZhbHVlKGFnZ3JlZ2F0aW9uSXRlbSwgbmV3VmFsdWVJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudmFsdWVzQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlczogdGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJvcHBlZChcbiAgICAgICAgZXZlbnQ6IElEcm9wRHJvcHBlZEV2ZW50QXJncyxcbiAgICAgICAgZGltZW5zaW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5kcm9wQWxsb3dlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5ncmlkLmdldERpbWVuc2lvbnNCeVR5cGUoZGltZW5zaW9uVHlwZSk7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvblN0YXRlID0gdGhpcy5nZXREaW1lbnNpb25TdGF0ZShkaW1lbnNpb25UeXBlKTtcbiAgICAgICAgY29uc3QgaXRlbUlkID0gZXZlbnQuZHJhZy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgIGNvbnN0IHRhcmdldElkID0gZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmlkO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25JdGVtID0gZGltZW5zaW9uPy5maW5kKCh4KSA9PiB4Lm1lbWJlck5hbWUgPT09IGl0ZW1JZCk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9XG4gICAgICAgICAgICBkaW1lbnNpb24/LmZpbmRJbmRleCgoeCkgPT4geD8ubWVtYmVyTmFtZSA9PT0gaXRlbUlkKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IGRpbWVuc2lvbj8uZmluZEluZGV4KCh4KSA9PiB4Lm1lbWJlck5hbWUgPT09IGl0ZW1JZClcbiAgICAgICAgICAgICAgICA6IGRpbWVuc2lvbj8ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnMuZmlsdGVyKCh4KSA9PiB4ICYmIHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKTtcblxuICAgICAgICBjb25zdCByZW9yZGVyID1cbiAgICAgICAgICAgIGRpbWVuc2lvblN0YXRlPy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubWVtYmVyTmFtZSA9PT0gaXRlbUlkKSAhPT1cbiAgICAgICAgICAgIC0xO1xuXG4gICAgICAgIGxldCB0YXJnZXRJbmRleCA9XG4gICAgICAgICAgICB0YXJnZXRJZCAhPT0gXCJcIlxuICAgICAgICAgICAgICAgID8gZGltZW5zaW9uPy5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gdGFyZ2V0SWQpXG4gICAgICAgICAgICAgICAgOiBkaW1lbnNpb24/Lmxlbmd0aDtcblxuICAgICAgICBpZiAoIWRpbWVuc2lvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVmFsdWVJdGVtKGl0ZW1JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVvcmRlcikge1xuICAgICAgICAgICAgdGFyZ2V0SW5kZXggPVxuICAgICAgICAgICAgICAgIGl0ZW1JbmRleCArIHRoaXMuX2Ryb3BEZWx0YSA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbUluZGV4ICsgdGhpcy5fZHJvcERlbHRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpbWVuc2lvbkl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlRGltZW5zaW9uKGRpbWVuc2lvbkl0ZW0sIGRpbWVuc2lvblR5cGUsIHRhcmdldEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RpbSA9IGRpbWVuc2lvbnMuZmluZCgoeCkgPT4geC5tZW1iZXJOYW1lID09PSBpdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm1vdmVEaW1lbnNpb24obmV3RGltLCBkaW1lbnNpb25UeXBlLCB0YXJnZXRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IGRpbWVuc2lvbixcbiAgICAgICAgICAgIGRpbWVuc2lvbkNvbGxlY3Rpb25UeXBlOiBkaW1lbnNpb25UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZURyb3BEb3duKFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGRyb3Bkb3duLndpZHRoID0gXCIyMDBweFwiO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUxpc3QgPSBQaXZvdFV0aWwuZ2V0QWdncmVnYXRlTGlzdCh2YWx1ZSwgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkcm9wZG93bi5vcGVuKHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdW1tYXJ5Q2xpY2soXG4gICAgICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzLnRhcmdldCA9XG4gICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChkcm9wZG93bi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRHJvcERvd24odmFsdWUsIGRyb3Bkb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsb3NlIGZvciBwcmV2aW91cyBjaGlwXG4gICAgICAgICAgICBkcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgZHJvcGRvd24uY2xvc2VkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyb3BEb3duKHZhbHVlLCBkcm9wZG93bik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BZ2dyZWdhdGlvbkNoYW5nZShldmVudDogSVNlbGVjdGlvbkV2ZW50QXJncykge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChldmVudC5uZXdTZWxlY3Rpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmFnZ3JlZ2F0ZSA9IGV2ZW50Lm5ld1NlbGVjdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZCh2YWw6IElQaXZvdEFnZ3JlZ2F0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuYWdncmVnYXRlLmtleSA9PT0gdmFsLmtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdob3N0Q3JlYXRlZChldmVudDogSURyYWdHaG9zdEJhc2VFdmVudEFyZ3MsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogaXRlbVdpZHRoIH0gPVxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLmdob3N0V2lkdGggPSBpdGVtV2lkdGg7XG4gICAgICAgIHRoaXMuZ2hvc3RUZXh0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInBvc2l0aW9uXCIsXG4gICAgICAgICAgICBcImFic29sdXRlXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiLFxuICAgICAgICAgICAgXCJoaWRkZW5cIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlSXRlbShpdGVtOiBJUGl2b3REaW1lbnNpb24gfCBJUGl2b3RWYWx1ZSkge1xuICAgICAgICBpZiAoaXRlbSBhcyBJUGl2b3RWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRvZ2dsZVZhbHVlKGl0ZW0gYXMgSVBpdm90VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudG9nZ2xlRGltZW5zaW9uKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QYW5lbEVudHJ5KGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MsIHBhbmVsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kcm9wQWxsb3dlZCA9IGV2ZW50LmRyYWdEYXRhLmdyaWRJRCA9PT0gdGhpcy5ncmlkLmlkICYmIGV2ZW50LmRyYWdEYXRhLnNlbGVjdG9yQ2hhbm5lbHM/LnNvbWUoXG4gICAgICAgICAgICAoY2hhbm5lbDogc3RyaW5nKSA9PiBjaGFubmVsID09PSBwYW5lbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ01vdmUoZXZlbnQ6IElEcmFnTW92ZUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID1cbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fZHJvcERlbHRhID0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgIChldmVudC5uZXh0UGFnZVkgLSBldmVudC5zdGFydFkpIC8gY2xpZW50UmVjdC5oZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSXRlbURyYWdFbmQoZXZlbnQ6IElEcmFnQmFzZUV2ZW50QXJncykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgXCJwb3NpdGlvblwiLFxuICAgICAgICAgICAgXCJzdGF0aWNcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgICAgICBcInZpc2libGVcIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ092ZXIoZXZlbnQ6IElEcm9wQmFzZUV2ZW50QXJncykge1xuICAgICAgICBpZiAodGhpcy5kcm9wQWxsb3dlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgXCJpZ3gtZHJhZy0tcHVzaFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1EcmFnTGVhdmUoZXZlbnQ6IElEcm9wQmFzZUV2ZW50QXJncykge1xuICAgICAgICBpZiAodGhpcy5kcm9wQWxsb3dlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgXCJpZ3gtZHJhZy0tcHVzaFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYW5lbENvbGxhcHNlZChwYW5lbFR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2gocGFuZWxUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW46XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNvbHVtbnNFeHBhbmRlZDtcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuZmlsdGVyc0V4cGFuZGVkO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5yb3dzRXhwYW5kZWQ7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy52YWx1ZXNFeHBhbmRlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db2xsYXBzZUNoYW5nZSh2YWx1ZTogYm9vbGVhbiwgcGFuZWxUeXBlOiBQaXZvdERpbWVuc2lvblR5cGUpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoKHBhbmVsVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uOlxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0V4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5jb2x1bW5zRXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0V4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzRXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIHRoaXMucm93c0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c0V4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5yb3dzRXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzRXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlc0V4cGFuZGVkKVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19maWx0ZXJcIj5cbiAgICA8aWd4LWlucHV0LWdyb3VwIHR5cGU9XCJib3hcIiBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgPGlneC1pY29uIGlneFByZWZpeD5zZWFyY2g8L2lneC1pY29uPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAvPlxuICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDxpZ3gtbGlzdCBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgPGlneC1saXN0LWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIGRpbXNcbiAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJQaXZvdEl0ZW1zOiBpbnB1dC52YWx1ZTpncmlkPy5waXBlVHJpZ2dlclxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpZF09XCJpdGVtLm1lbWJlck5hbWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxsZWRieV09XCJpdGVtLm1lbWJlck5hbWVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0uZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgPjwvaWd4LWNoZWNrYm94PlxuICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5tZW1iZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICA8L2lneC1saXN0LWl0ZW0+XG4gICAgICAgIDxpZ3gtbGlzdC1pdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJQaXZvdEl0ZW1zOiBpbnB1dC52YWx1ZTpncmlkPy5waXBlVHJpZ2dlclxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpZF09XCJpdGVtLm1lbWJlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0ubWVtYmVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgID48L2lneC1jaGVja2JveD5cbiAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0uZGlzcGxheU5hbWUgfHwgaXRlbS5tZW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvaWd4LWxpc3QtaXRlbT5cbiAgICA8L2lneC1saXN0PlxuPC9kaXY+XG5cbjxpZ3gtYWNjb3JkaW9uPlxuICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsXG4gICAgICAgICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBfcGFuZWxzXCJcbiAgICAgICAgW2FuaW1hdGlvblNldHRpbmdzXT1cImFuaW1hdGlvblNldHRpbmdzXCJcbiAgICAgICAgW2NvbGxhcHNlZF09XCJnZXRQYW5lbENvbGxhcHNlZChwYW5lbC50eXBlKVwiXG4gICAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwib25Db2xsYXBzZUNoYW5nZSgkZXZlbnQsIHBhbmVsLnR5cGUpXCJcbiAgICA+XG4gICAgICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclxuICAgICAgICAgICAgaWNvblBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgaWd4RHJvcFxuICAgICAgICAgICAgKGVudGVyKT1cIm9uUGFuZWxFbnRyeSgkZXZlbnQsIHBhbmVsLm5hbWUpXCJcbiAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uSXRlbURyb3BwZWQoJGV2ZW50LCBwYW5lbC50eXBlKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLXRpdGxlIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ3JpZD8ucmVzb3VyY2VTdHJpbmdzW3BhbmVsLmkxOG5dIH19XG4gICAgICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2hlYWRlci1leHRyYVwiPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+e3sgcGFuZWwuaWNvbiB9fTwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcD57eyB0aGlzLmdyaWQgPyB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoIDogMCB9fTwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2lneC1leHBhbnNpb24tcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWJvZHlcbiAgICAgICAgICAgIGlneERyb3BcbiAgICAgICAgICAgIChlbnRlcik9XCJvblBhbmVsRW50cnkoJGV2ZW50LCBwYW5lbC5uYW1lKVwiXG4gICAgICAgICAgICAoZHJvcHBlZCk9XCJvbkl0ZW1Ecm9wcGVkKCRldmVudCwgcGFuZWwudHlwZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWxpc3RcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuZ3JpZCAmJiB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICBpZ3hEcm9wXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hEcmFnXT1cInsgZ3JpZElEOiBncmlkLmlkLCBzZWxlY3RvckNoYW5uZWxzOiBwYW5lbC5kcmFnQ2hhbm5lbHMgfVwiXG4gICAgICAgICAgICAgICAgICAgIFtnaG9zdFRlbXBsYXRlXT1cIml0ZW1HaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIChnaG9zdENyZWF0ZSk9XCJnaG9zdENyZWF0ZWQoJGV2ZW50LCBpdGVtW3BhbmVsLml0ZW1LZXldKVwiXG4gICAgICAgICAgICAgICAgICAgIChvdmVyKT1cIm9uSXRlbURyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAobGVhdmUpPVwib25JdGVtRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJhZ01vdmUpPVwib25JdGVtRHJhZ01vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uSXRlbURyYWdFbmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uSXRlbURyb3BwZWQoJGV2ZW50LCBwYW5lbC50eXBlKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgdGhpcy5ncmlkW3BhbmVsLmRhdGFLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtW3BhbmVsLml0ZW1LZXldXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1Tb3J0KCRldmVudCwgaXRlbSwgcGFuZWwudHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLXNvcnRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLnNvcnRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZ2dyZWdhdGUua2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIj4oPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtW3BhbmVsLmRpc3BsYXlLZXldIHx8IGl0ZW1bcGFuZWwuaXRlbUtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFuZWwudHlwZSA9PT0gbnVsbFwiPik8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1zb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYW5lbC5zb3J0YWJsZSAmJiBpdGVtLnNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc29ydERpcmVjdGlvbiA8IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYXJyb3dfdXB3YXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYXJyb3dfZG93bndhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFuZWwudHlwZSAhPT0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyaW5nSWNvblBvaW50ZXJEb3duKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsdGVyaW5nSWNvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ZmlsdGVyX2xpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19hY3Rpb24tc3VtbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFuZWwudHlwZSA9PT0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1bW1hcnlDbGljaygkZXZlbnQsIGl0ZW0sIGRyb3Bkb3duKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlneERyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhbmVsLmRyYWdDaGFubmVscy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmRyYWdfaGFuZGxlPC9pZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2lneC1saXN0LWl0ZW0+XG4gICAgICAgICAgICA8L2lneC1saXN0PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2VtcHR5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuZ3JpZCAmJiB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3JfcGFuZWxfZW1wdHkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2lneC1leHBhbnNpb24tcGFuZWwtYm9keT5cbiAgICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG48L2lneC1hY2NvcmRpb24+XG5cbjxpZ3gtZHJvcC1kb3duICNkcm9wZG93biAoc2VsZWN0aW9uQ2hhbmdpbmcpPVwib25BZ2dyZWdhdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPGlneC1kcm9wLWRvd24taXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhZ2dyZWdhdGVMaXN0XCJcbiAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgPlxuICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgPC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG48L2lneC1kcm9wLWRvd24+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbUdob3N0PlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbS1naG9zdFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJnaG9zdFdpZHRoXCJcbiAgICAgICAgW2NsYXNzLmlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLWdob3N0LS1uby1kcm9wXT1cIiFkcm9wQWxsb3dlZFwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tZ2hvc3QtdGV4dFwiPlxuICAgICAgICAgICAgPGlneC1pY29uPnVuZm9sZF9tb3JlPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGdob3N0VGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpZ3gtaWNvbj5kcmFnX2hhbmRsZTwvaWd4LWljb24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1kYXRhLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWRhdGEtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBOEcsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUV4TyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUdwQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBSUgsa0JBQWtCLEVBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztB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QURkLFdBQVc7dUJBQUMsK0JBQStCO2dCQThHakMsSUFBSTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQW5pbWF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSBcIi4uLy4uL2FuaW1hdGlvbnMvZmFkZVwiO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tIFwiLi4vLi4vY29yZS9kZW5zaXR5XCI7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSBcIi4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5XCI7XG5pbXBvcnQgeyBJRHJhZ0Jhc2VFdmVudEFyZ3MsIElEcmFnR2hvc3RCYXNlRXZlbnRBcmdzLCBJRHJhZ01vdmVFdmVudEFyZ3MsIElEcm9wQmFzZUV2ZW50QXJncywgSURyb3BEcm9wcGVkRXZlbnRBcmdzLCBJZ3hEcm9wRGlyZWN0aXZlLCBJZ3hEcmFnRGlyZWN0aXZlLCBJZ3hEcmFnSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tIFwiLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb25cIjtcbmltcG9ydCB7IElneERyb3BEb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICAgIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheVNldHRpbmdzLFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsXG4gICAgVmVydGljYWxBbGlnbm1lbnRcbn0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3B1YmxpY19hcGlcIjtcbmltcG9ydCB7IENvbHVtblR5cGUsIFBpdm90R3JpZFR5cGUgfSBmcm9tIFwiLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlXCI7XG5pbXBvcnQge1xuICAgIElQaXZvdEFnZ3JlZ2F0b3IsXG4gICAgSVBpdm90RGltZW5zaW9uLFxuICAgIElQaXZvdFZhbHVlLFxuICAgIFBpdm90RGltZW5zaW9uVHlwZVxufSBmcm9tIFwiLi9waXZvdC1ncmlkLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC11dGlsJztcbmltcG9ydCB7IElneEZpbHRlclBpdm90SXRlbXNQaXBlIH0gZnJvbSBcIi4vcGl2b3QtZ3JpZC5waXBlc1wiO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24taXRlbS5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1uYXZpZ2F0aW9uLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwtYm9keS5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneENoaXBDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY2hpcHMvY2hpcC5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsVGl0bGVEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5kaXJlY3RpdmVzXCI7XG5pbXBvcnQgeyBJZ3hFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9leHBhbnNpb24tcGFuZWwvZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJZ3hBY2NvcmRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSWd4TGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vbGlzdC9saXN0LWl0ZW0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IElneExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vbGlzdC9saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElneFByZWZpeERpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL3ByZWZpeC9wcmVmaXguZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2ljb24vaWNvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50XCI7XG5cbmludGVyZmFjZSBJRGF0YVNlbGVjdG9yUGFuZWwge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpMThuOiBzdHJpbmc7XG4gICAgdHlwZT86IFBpdm90RGltZW5zaW9uVHlwZTtcbiAgICBkYXRhS2V5OiBzdHJpbmc7XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIGl0ZW1LZXk6IHN0cmluZztcbiAgICBkaXNwbGF5S2V5Pzogc3RyaW5nO1xuICAgIHNvcnRhYmxlOiBib29sZWFuO1xuICAgIGRyYWdDaGFubmVsczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUGl2b3QgRGF0YSBTZWxlY3RvciBwcm92aWRlcyBtZWFucyB0byBjb25maWd1cmUgdGhlIHBpdm90IHN0YXRlIG9mIHRoZSBQaXZvdCBHcmlkIHZpYSBhIHZlcnRpY2FsIHBhbmVsIFVJXG4gKlxuICogQGlneE1vZHVsZSBJZ3hQaXZvdEdyaWRNb2R1bGVcbiAqIEBpZ3hHcm91cCBHcmlkcyAmIExpc3RzXG4gKiBAaWd4S2V5d29yZHMgZGF0YSBzZWxlY3RvciwgcGl2b3QsIGdyaWRcbiAqIEBpZ3hUaGVtZSBwaXZvdC1kYXRhLXNlbGVjdG9yLXRoZW1lXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBEYXRhIFNlbGVjdG9yIGhhcyBhIHNlYXJjaGFibGUgbGlzdCB3aXRoIHRoZSBncmlkIGRhdGEgY29sdW1ucyxcbiAqIHRoZXJlIGFyZSBhbHNvIGZvdXIgZXhwYW5kYWJsZSBhcmVhcyB1bmRlcm5lYXRoIGZvciBmaWx0ZXJzLCByb3dzLCBjb2x1bW5zLCBhbmQgdmFsdWVzXG4gKiBpcyB1c2VkIGZvciBncm91cGluZyBhbmQgYWdncmVnYXRpbmcgc2ltcGxlIGZsYXQgZGF0YSBpbnRvIGEgcGl2b3QgdGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1waXZvdC1ncmlkICNncmlkMSBbZGF0YV09XCJkYXRhXCIgW3Bpdm90Q29uZmlndXJhdGlvbl09XCJjb25maWd1cmF0aW9uXCI+XG4gKiA8L2lneC1waXZvdC1ncmlkPlxuICogPGlneC1waXZvdC1kYXRhLXNlbGVjdG9yIFtncmlkXT1cImdyaWQxXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneElucHV0R3JvdXBDb21wb25lbnQsIElneEljb25Db21wb25lbnQsIElneFByZWZpeERpcmVjdGl2ZSwgSWd4SW5wdXREaXJlY3RpdmUsIElneExpc3RDb21wb25lbnQsIE5nRm9yLCBJZ3hMaXN0SXRlbUNvbXBvbmVudCwgSWd4Q2hlY2tib3hDb21wb25lbnQsIElneEFjY29yZGlvbkNvbXBvbmVudCwgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQsIElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50LCBJZ3hEcm9wRGlyZWN0aXZlLCBJZ3hFeHBhbnNpb25QYW5lbFRpdGxlRGlyZWN0aXZlLCBJZ3hDaGlwQ29tcG9uZW50LCBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQsIE5nSWYsIElneERyYWdEaXJlY3RpdmUsIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsIElneERyYWdIYW5kbGVEaXJlY3RpdmUsIElneERyb3BEb3duQ29tcG9uZW50LCBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnQsIElneEZpbHRlclBpdm90SXRlbXNQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdERhdGFTZWxlY3RvckNvbXBvbmVudCB7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgY29sdW1ucyBwYW5lbCBpcyBleHBhbmRlZFxuICAgICAqIEdldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY29sdW1uc1BhbmVsU3RhdGU6IGJvb2xlYW4gPSB0aGlzLmRhdGFTZWxlY3Rvci5jb2x1bW5zRXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvciBbZ3JpZF09XCJncmlkMVwiIFtjb2x1bW5zRXhwYW5kZWRdPVwiY29sdW1uc1BhbmVsU3RhdGVcIj48L2lneC1waXZvdC1kYXRhLXNlbGVjdG9yPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmc6XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvciBbZ3JpZF09XCJncmlkMVwiIFsoY29sdW1uc0V4cGFuZGVkKV09XCJjb2x1bW5zUGFuZWxTdGF0ZVwiPjwvaWd4LXBpdm90LWRhdGEtc2VsZWN0b3I+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sdW1uc0V4cGFuZGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY29sdW1uc0V4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHdoZXRoZXIgdGhlIHJvd3MgcGFuZWwgaXMgZXhwYW5kZWRcbiAgICAgKiBHZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IHJvd3NQYW5lbFN0YXRlOiBib29sZWFuID0gdGhpcy5kYXRhU2VsZWN0b3Iucm93c0V4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWRhdGEtc2VsZWN0b3IgW2dyaWRdPVwiZ3JpZDFcIiBbcm93c0V4cGFuZGVkXT1cInJvd3NQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nOlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWRhdGEtc2VsZWN0b3IgW2dyaWRdPVwiZ3JpZDFcIiBbKHJvd3NFeHBhbmRlZCldPVwicm93c1BhbmVsU3RhdGVcIj48L2lneC1waXZvdC1kYXRhLXNlbGVjdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd3NFeHBhbmRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJvd3NFeHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSBmaWx0ZXJzIHBhbmVsIGlzIGV4cGFuZGVkXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBmaWx0ZXJzUGFuZWxTdGF0ZTogYm9vbGVhbiA9IHRoaXMuZGF0YVNlbGVjdG9yLmZpbHRlcnNFeHBhbmRlZDtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1kYXRhLXNlbGVjdG9yIFtncmlkXT1cImdyaWQxXCIgW2ZpbHRlcnNFeHBhbmRlZF09XCJmaWx0ZXJzUGFuZWxTdGF0ZVwiPjwvaWd4LXBpdm90LWRhdGEtc2VsZWN0b3I+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZzpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1kYXRhLXNlbGVjdG9yIFtncmlkXT1cImdyaWQxXCIgWyhmaWx0ZXJzRXhwYW5kZWQpXT1cImZpbHRlcnNQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJzRXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJzRXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgdmFsdWVzIHBhbmVsIGlzIGV4cGFuZGVkXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCB2YWx1ZXNQYW5lbFN0YXRlOiBib29sZWFuID0gdGhpcy5kYXRhU2VsZWN0b3IudmFsdWVzRXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvciBbZ3JpZF09XCJncmlkMVwiIFt2YWx1ZXNFeHBhbmRlZF09XCJ2YWx1ZXNQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nOlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWRhdGEtc2VsZWN0b3IgW2dyaWRdPVwiZ3JpZDFcIiBbKHZhbHVlc0V4cGFuZGVkKV09XCJ2YWx1ZXNQYW5lbFN0YXRlXCI+PC9pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZXNFeHBhbmRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlc0V4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBfZ3JpZDogUGl2b3RHcmlkVHlwZTtcbiAgICBwcml2YXRlIF9kcm9wRGVsdGEgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICoqL1xuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmlneC1waXZvdC1kYXRhLXNlbGVjdG9yXCIpXG4gICAgcHVibGljIGNzc0NsYXNzID0gXCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvclwiO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqKi9cbiAgICBwdWJsaWMgZGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW107XG5cbiAgICBwcml2YXRlIF9zdWJNZW51UG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgIGNsb3NlQW5pbWF0aW9uOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIHByaXZhdGUgX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koXG4gICAgICAgICAgICB0aGlzLl9zdWJNZW51UG9zaXRpb25TZXR0aW5nc1xuICAgICAgICApLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICB9O1xuICAgIHB1YmxpYyBhbmltYXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VBbmltYXRpb246IHVzZUFuaW1hdGlvbihmYWRlT3V0LCB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogXCIwbXNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBvcGVuQW5pbWF0aW9uOiB1c2VBbmltYXRpb24oZmFkZUluLCB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogXCIwbXNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgYWdncmVnYXRlTGlzdDogSVBpdm90QWdncmVnYXRvcltdID0gW107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHZhbHVlOiBJUGl2b3RWYWx1ZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2hvc3RUZXh0OiBzdHJpbmc7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdob3N0V2lkdGg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZHJvcEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBkaW1zKCkgOiBJUGl2b3REaW1lbnNpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmlkPy5hbGxEaW1lbnNpb25zIHx8IFtdO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlcygpOiBJUGl2b3RWYWx1ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWQ/LnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMgfHwgW107XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBfcGFuZWxzOiBJRGF0YVNlbGVjdG9yUGFuZWxbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJGaWx0ZXJzXCIsXG4gICAgICAgICAgICBpMThuOiAnaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3JfZmlsdGVycycsXG4gICAgICAgICAgICB0eXBlOiBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyLFxuICAgICAgICAgICAgZGF0YUtleTogXCJmaWx0ZXJEaW1lbnNpb25zXCIsXG4gICAgICAgICAgICBpY29uOiBcImZpbHRlcl9saXN0XCIsXG4gICAgICAgICAgICBpdGVtS2V5OiBcIm1lbWJlck5hbWVcIixcbiAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRyYWdDaGFubmVsczogW1wiRmlsdGVyc1wiLCBcIkNvbHVtbnNcIiwgXCJSb3dzXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29sdW1uc1wiLFxuICAgICAgICAgICAgaTE4bjogJ2lneF9ncmlkX3Bpdm90X3NlbGVjdG9yX2NvbHVtbnMnLFxuICAgICAgICAgICAgdHlwZTogUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbixcbiAgICAgICAgICAgIGRhdGFLZXk6IFwiY29sdW1uRGltZW5zaW9uc1wiLFxuICAgICAgICAgICAgaWNvbjogXCJ2aWV3X2NvbHVtblwiLFxuICAgICAgICAgICAgaXRlbUtleTogXCJtZW1iZXJOYW1lXCIsXG4gICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGRyYWdDaGFubmVsczogW1wiRmlsdGVyc1wiLCBcIkNvbHVtbnNcIiwgXCJSb3dzXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiUm93c1wiLFxuICAgICAgICAgICAgaTE4bjogJ2lneF9ncmlkX3Bpdm90X3NlbGVjdG9yX3Jvd3MnLFxuICAgICAgICAgICAgdHlwZTogUGl2b3REaW1lbnNpb25UeXBlLlJvdyxcbiAgICAgICAgICAgIGRhdGFLZXk6IFwicm93RGltZW5zaW9uc1wiLFxuICAgICAgICAgICAgaWNvbjogXCJ0YWJsZV9yb3dzXCIsXG4gICAgICAgICAgICBpdGVtS2V5OiBcIm1lbWJlck5hbWVcIixcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZHJhZ0NoYW5uZWxzOiBbXCJGaWx0ZXJzXCIsIFwiQ29sdW1uc1wiLCBcIlJvd3NcIl1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJWYWx1ZXNcIixcbiAgICAgICAgICAgIGkxOG46ICdpZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl92YWx1ZXMnLFxuICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgIGRhdGFLZXk6IFwidmFsdWVzXCIsXG4gICAgICAgICAgICBpY29uOiBcImZ1bmN0aW9uc1wiLFxuICAgICAgICAgICAgaXRlbUtleTogXCJtZW1iZXJcIixcbiAgICAgICAgICAgIGRpc3BsYXlLZXk6ICdkaXNwbGF5TmFtZScsXG4gICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIlZhbHVlc1wiXVxuICAgICAgICB9LFxuICAgIF07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzcGxheURlbnNpdHkoKTogRGlzcGxheURlbnNpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkPy5kaXNwbGF5RGVuc2l0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBncmlkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBncmlkKHZhbHVlOiBQaXZvdEdyaWRUeXBlKSB7XG4gICAgICAgIHRoaXMuX2dyaWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBncmlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JpZCgpOiBQaXZvdEdyaWRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1Tb3J0KFxuICAgICAgICBfOiBFdmVudCxcbiAgICAgICAgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sXG4gICAgICAgIGRpbWVuc2lvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZVxuICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5fcGFuZWxzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhbmVsOiBJRGF0YVNlbGVjdG9yUGFuZWwpID0+IHBhbmVsLnR5cGUgPT09IGRpbWVuc2lvblR5cGVcbiAgICAgICAgICAgICkuc29ydGFibGVcbiAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0RGlyZWN0aW9uID0gZGltZW5zaW9uLnNvcnREaXJlY3Rpb24gfHwgU29ydGluZ0RpcmVjdGlvbi5Ob25lO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBzdGFydERpcmVjdGlvbiArIDEgPiBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgP1xuICAgICAgICAgICAgU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogc3RhcnREaXJlY3Rpb24gKyAxO1xuICAgICAgICB0aGlzLmdyaWQuc29ydERpbWVuc2lvbihkaW1lbnNpb24sIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZpbHRlcmluZ0ljb25Qb2ludGVyRG93bihldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25GaWx0ZXJpbmdJY29uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBkaW0gPSBkaW1lbnNpb247XG4gICAgICAgIGxldCBjb2w6IENvbHVtblR5cGU7XG5cbiAgICAgICAgd2hpbGUgKGRpbSkge1xuICAgICAgICAgICAgY29sID0gdGhpcy5ncmlkLmRpbWVuc2lvbkRhdGFDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgKHgpID0+IHguZmllbGQgPT09IGRpbS5tZW1iZXJOYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNvbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaW0gPSBkaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnRvZ2dsZUZpbHRlckRyb3Bkb3duKGV2ZW50LnRhcmdldCwgY29sKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldERpbWVuc2lvblN0YXRlKGRpbWVuc2lvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKGRpbWVuc2lvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLlJvdzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0RpbWVuc2lvbnM7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5jb2x1bW5EaW1lbnNpb25zO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZmlsdGVyRGltZW5zaW9ucztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1vdmVWYWx1ZUl0ZW0oaXRlbUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb24gPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcztcbiAgICAgICAgY29uc3QgdmFsdWVJbmRleCA9XG4gICAgICAgICAgICBhZ2dyZWdhdGlvbi5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyID09PSBpdGVtSWQpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gYWdncmVnYXRpb24/LmZpbmRJbmRleCgoeCkgPT4geC5tZW1iZXIgPT09IGl0ZW1JZClcbiAgICAgICAgICAgICAgICA6IGFnZ3JlZ2F0aW9uLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVJbmRleCA9XG4gICAgICAgICAgICB2YWx1ZUluZGV4ICsgdGhpcy5fZHJvcERlbHRhIDwgMCA/IDAgOiB2YWx1ZUluZGV4ICsgdGhpcy5fZHJvcERlbHRhO1xuXG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9uSXRlbSA9IGFnZ3JlZ2F0aW9uLmZpbmQoXG4gICAgICAgICAgICAoeCkgPT4geC5tZW1iZXIgPT09IGl0ZW1JZCB8fCB4LmRpc3BsYXlOYW1lID09PSBpdGVtSWRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYWdncmVnYXRpb25JdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQubW92ZVZhbHVlKGFnZ3JlZ2F0aW9uSXRlbSwgbmV3VmFsdWVJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudmFsdWVzQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlczogdGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJvcHBlZChcbiAgICAgICAgZXZlbnQ6IElEcm9wRHJvcHBlZEV2ZW50QXJncyxcbiAgICAgICAgZGltZW5zaW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5kcm9wQWxsb3dlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5ncmlkLmdldERpbWVuc2lvbnNCeVR5cGUoZGltZW5zaW9uVHlwZSk7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvblN0YXRlID0gdGhpcy5nZXREaW1lbnNpb25TdGF0ZShkaW1lbnNpb25UeXBlKTtcbiAgICAgICAgY29uc3QgaXRlbUlkID0gZXZlbnQuZHJhZy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgIGNvbnN0IHRhcmdldElkID0gZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmlkO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25JdGVtID0gZGltZW5zaW9uPy5maW5kKCh4KSA9PiB4Lm1lbWJlck5hbWUgPT09IGl0ZW1JZCk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9XG4gICAgICAgICAgICBkaW1lbnNpb24/LmZpbmRJbmRleCgoeCkgPT4geD8ubWVtYmVyTmFtZSA9PT0gaXRlbUlkKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IGRpbWVuc2lvbj8uZmluZEluZGV4KCh4KSA9PiB4Lm1lbWJlck5hbWUgPT09IGl0ZW1JZClcbiAgICAgICAgICAgICAgICA6IGRpbWVuc2lvbj8ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnMuZmlsdGVyKCh4KSA9PiB4ICYmIHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKTtcblxuICAgICAgICBjb25zdCByZW9yZGVyID1cbiAgICAgICAgICAgIGRpbWVuc2lvblN0YXRlPy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubWVtYmVyTmFtZSA9PT0gaXRlbUlkKSAhPT1cbiAgICAgICAgICAgIC0xO1xuXG4gICAgICAgIGxldCB0YXJnZXRJbmRleCA9XG4gICAgICAgICAgICB0YXJnZXRJZCAhPT0gXCJcIlxuICAgICAgICAgICAgICAgID8gZGltZW5zaW9uPy5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gdGFyZ2V0SWQpXG4gICAgICAgICAgICAgICAgOiBkaW1lbnNpb24/Lmxlbmd0aDtcblxuICAgICAgICBpZiAoIWRpbWVuc2lvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVmFsdWVJdGVtKGl0ZW1JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVvcmRlcikge1xuICAgICAgICAgICAgdGFyZ2V0SW5kZXggPVxuICAgICAgICAgICAgICAgIGl0ZW1JbmRleCArIHRoaXMuX2Ryb3BEZWx0YSA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbUluZGV4ICsgdGhpcy5fZHJvcERlbHRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpbWVuc2lvbkl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlRGltZW5zaW9uKGRpbWVuc2lvbkl0ZW0sIGRpbWVuc2lvblR5cGUsIHRhcmdldEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RpbSA9IGRpbWVuc2lvbnMuZmluZCgoeCkgPT4geC5tZW1iZXJOYW1lID09PSBpdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm1vdmVEaW1lbnNpb24obmV3RGltLCBkaW1lbnNpb25UeXBlLCB0YXJnZXRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IGRpbWVuc2lvbixcbiAgICAgICAgICAgIGRpbWVuc2lvbkNvbGxlY3Rpb25UeXBlOiBkaW1lbnNpb25UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZURyb3BEb3duKFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGRyb3Bkb3duLndpZHRoID0gXCIyMDBweFwiO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUxpc3QgPSBQaXZvdFV0aWwuZ2V0QWdncmVnYXRlTGlzdCh2YWx1ZSwgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkcm9wZG93bi5vcGVuKHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdW1tYXJ5Q2xpY2soXG4gICAgICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzLnRhcmdldCA9XG4gICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChkcm9wZG93bi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRHJvcERvd24odmFsdWUsIGRyb3Bkb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsb3NlIGZvciBwcmV2aW91cyBjaGlwXG4gICAgICAgICAgICBkcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgZHJvcGRvd24uY2xvc2VkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyb3BEb3duKHZhbHVlLCBkcm9wZG93bik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BZ2dyZWdhdGlvbkNoYW5nZShldmVudDogSVNlbGVjdGlvbkV2ZW50QXJncykge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChldmVudC5uZXdTZWxlY3Rpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmFnZ3JlZ2F0ZSA9IGV2ZW50Lm5ld1NlbGVjdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZCh2YWw6IElQaXZvdEFnZ3JlZ2F0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuYWdncmVnYXRlLmtleSA9PT0gdmFsLmtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdob3N0Q3JlYXRlZChldmVudDogSURyYWdHaG9zdEJhc2VFdmVudEFyZ3MsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogaXRlbVdpZHRoIH0gPVxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLmdob3N0V2lkdGggPSBpdGVtV2lkdGg7XG4gICAgICAgIHRoaXMuZ2hvc3RUZXh0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInBvc2l0aW9uXCIsXG4gICAgICAgICAgICBcImFic29sdXRlXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiLFxuICAgICAgICAgICAgXCJoaWRkZW5cIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlSXRlbShpdGVtOiBJUGl2b3REaW1lbnNpb24gfCBJUGl2b3RWYWx1ZSkge1xuICAgICAgICBpZiAoaXRlbSBhcyBJUGl2b3RWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRvZ2dsZVZhbHVlKGl0ZW0gYXMgSVBpdm90VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudG9nZ2xlRGltZW5zaW9uKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QYW5lbEVudHJ5KGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MsIHBhbmVsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kcm9wQWxsb3dlZCA9IGV2ZW50LmRyYWdEYXRhLmdyaWRJRCA9PT0gdGhpcy5ncmlkLmlkICYmIGV2ZW50LmRyYWdEYXRhLnNlbGVjdG9yQ2hhbm5lbHM/LnNvbWUoXG4gICAgICAgICAgICAoY2hhbm5lbDogc3RyaW5nKSA9PiBjaGFubmVsID09PSBwYW5lbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ01vdmUoZXZlbnQ6IElEcmFnTW92ZUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID1cbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fZHJvcERlbHRhID0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgIChldmVudC5uZXh0UGFnZVkgLSBldmVudC5zdGFydFkpIC8gY2xpZW50UmVjdC5oZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSXRlbURyYWdFbmQoZXZlbnQ6IElEcmFnQmFzZUV2ZW50QXJncykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgXCJwb3NpdGlvblwiLFxuICAgICAgICAgICAgXCJzdGF0aWNcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgICAgICBcInZpc2libGVcIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ092ZXIoZXZlbnQ6IElEcm9wQmFzZUV2ZW50QXJncykge1xuICAgICAgICBpZiAodGhpcy5kcm9wQWxsb3dlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgXCJpZ3gtZHJhZy0tcHVzaFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1EcmFnTGVhdmUoZXZlbnQ6IElEcm9wQmFzZUV2ZW50QXJncykge1xuICAgICAgICBpZiAodGhpcy5kcm9wQWxsb3dlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgXCJpZ3gtZHJhZy0tcHVzaFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYW5lbENvbGxhcHNlZChwYW5lbFR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2gocGFuZWxUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW46XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNvbHVtbnNFeHBhbmRlZDtcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuZmlsdGVyc0V4cGFuZGVkO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5yb3dzRXhwYW5kZWQ7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy52YWx1ZXNFeHBhbmRlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db2xsYXBzZUNoYW5nZSh2YWx1ZTogYm9vbGVhbiwgcGFuZWxUeXBlOiBQaXZvdERpbWVuc2lvblR5cGUpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoKHBhbmVsVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uOlxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0V4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5jb2x1bW5zRXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0V4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzRXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIHRoaXMucm93c0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c0V4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5yb3dzRXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc0V4cGFuZGVkID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzRXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlc0V4cGFuZGVkKVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19maWx0ZXJcIj5cbiAgICA8aWd4LWlucHV0LWdyb3VwIHR5cGU9XCJib3hcIiBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgPGlneC1pY29uIGlneFByZWZpeD5zZWFyY2g8L2lneC1pY29uPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAvPlxuICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDxpZ3gtbGlzdCBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgPGlneC1saXN0LWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIGRpbXNcbiAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJQaXZvdEl0ZW1zOiBpbnB1dC52YWx1ZTpncmlkPy5waXBlVHJpZ2dlclxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpZF09XCJpdGVtLm1lbWJlck5hbWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxsZWRieV09XCJpdGVtLm1lbWJlck5hbWVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0uZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgPjwvaWd4LWNoZWNrYm94PlxuICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5tZW1iZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICA8L2lneC1saXN0LWl0ZW0+XG4gICAgICAgIDxpZ3gtbGlzdC1pdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJQaXZvdEl0ZW1zOiBpbnB1dC52YWx1ZTpncmlkPy5waXBlVHJpZ2dlclxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpZF09XCJpdGVtLm1lbWJlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0ubWVtYmVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgID48L2lneC1jaGVja2JveD5cbiAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0uZGlzcGxheU5hbWUgfHwgaXRlbS5tZW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvaWd4LWxpc3QtaXRlbT5cbiAgICA8L2lneC1saXN0PlxuPC9kaXY+XG5cbjxpZ3gtYWNjb3JkaW9uPlxuICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsXG4gICAgICAgICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBfcGFuZWxzXCJcbiAgICAgICAgW2FuaW1hdGlvblNldHRpbmdzXT1cImFuaW1hdGlvblNldHRpbmdzXCJcbiAgICAgICAgW2NvbGxhcHNlZF09XCJnZXRQYW5lbENvbGxhcHNlZChwYW5lbC50eXBlKVwiXG4gICAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwib25Db2xsYXBzZUNoYW5nZSgkZXZlbnQsIHBhbmVsLnR5cGUpXCJcbiAgICA+XG4gICAgICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclxuICAgICAgICAgICAgaWNvblBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgaWd4RHJvcFxuICAgICAgICAgICAgKGVudGVyKT1cIm9uUGFuZWxFbnRyeSgkZXZlbnQsIHBhbmVsLm5hbWUpXCJcbiAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uSXRlbURyb3BwZWQoJGV2ZW50LCBwYW5lbC50eXBlKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLXRpdGxlIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ3JpZD8ucmVzb3VyY2VTdHJpbmdzW3BhbmVsLmkxOG5dIH19XG4gICAgICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2hlYWRlci1leHRyYVwiPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+e3sgcGFuZWwuaWNvbiB9fTwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcD57eyB0aGlzLmdyaWQgPyB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoIDogMCB9fTwvaWd4LWNoaXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2lneC1leHBhbnNpb24tcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWJvZHlcbiAgICAgICAgICAgIGlneERyb3BcbiAgICAgICAgICAgIChlbnRlcik9XCJvblBhbmVsRW50cnkoJGV2ZW50LCBwYW5lbC5uYW1lKVwiXG4gICAgICAgICAgICAoZHJvcHBlZCk9XCJvbkl0ZW1Ecm9wcGVkKCRldmVudCwgcGFuZWwudHlwZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWxpc3RcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuZ3JpZCAmJiB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICBpZ3hEcm9wXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hEcmFnXT1cInsgZ3JpZElEOiBncmlkLmlkLCBzZWxlY3RvckNoYW5uZWxzOiBwYW5lbC5kcmFnQ2hhbm5lbHMgfVwiXG4gICAgICAgICAgICAgICAgICAgIFtnaG9zdFRlbXBsYXRlXT1cIml0ZW1HaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIChnaG9zdENyZWF0ZSk9XCJnaG9zdENyZWF0ZWQoJGV2ZW50LCBpdGVtW3BhbmVsLml0ZW1LZXldKVwiXG4gICAgICAgICAgICAgICAgICAgIChvdmVyKT1cIm9uSXRlbURyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAobGVhdmUpPVwib25JdGVtRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJhZ01vdmUpPVwib25JdGVtRHJhZ01vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uSXRlbURyYWdFbmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uSXRlbURyb3BwZWQoJGV2ZW50LCBwYW5lbC50eXBlKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgdGhpcy5ncmlkW3BhbmVsLmRhdGFLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtW3BhbmVsLml0ZW1LZXldXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1Tb3J0KCRldmVudCwgaXRlbSwgcGFuZWwudHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLXNvcnRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLnNvcnRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZ2dyZWdhdGUua2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIj4oPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtW3BhbmVsLmRpc3BsYXlLZXldIHx8IGl0ZW1bcGFuZWwuaXRlbUtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFuZWwudHlwZSA9PT0gbnVsbFwiPik8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1zb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYW5lbC5zb3J0YWJsZSAmJiBpdGVtLnNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc29ydERpcmVjdGlvbiA8IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYXJyb3dfdXB3YXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYXJyb3dfZG93bndhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFuZWwudHlwZSAhPT0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyaW5nSWNvblBvaW50ZXJEb3duKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsdGVyaW5nSWNvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ZmlsdGVyX2xpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19hY3Rpb24tc3VtbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFuZWwudHlwZSA9PT0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1bW1hcnlDbGljaygkZXZlbnQsIGl0ZW0sIGRyb3Bkb3duKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlneERyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhbmVsLmRyYWdDaGFubmVscy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmRyYWdfaGFuZGxlPC9pZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2lneC1saXN0LWl0ZW0+XG4gICAgICAgICAgICA8L2lneC1saXN0PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2VtcHR5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuZ3JpZCAmJiB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3JfcGFuZWxfZW1wdHkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2lneC1leHBhbnNpb24tcGFuZWwtYm9keT5cbiAgICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG48L2lneC1hY2NvcmRpb24+XG5cbjxpZ3gtZHJvcC1kb3duICNkcm9wZG93biAoc2VsZWN0aW9uQ2hhbmdpbmcpPVwib25BZ2dyZWdhdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPGlneC1kcm9wLWRvd24taXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhZ2dyZWdhdGVMaXN0XCJcbiAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgPlxuICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgPC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG48L2lneC1kcm9wLWRvd24+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbUdob3N0PlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbS1naG9zdFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJnaG9zdFdpZHRoXCJcbiAgICAgICAgW2NsYXNzLmlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLWdob3N0LS1uby1kcm9wXT1cIiFkcm9wQWxsb3dlZFwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tZ2hvc3QtdGV4dFwiPlxuICAgICAgICAgICAgPGlneC1pY29uPnVuZm9sZF9tb3JlPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGdob3N0VGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpZ3gtaWNvbj5kcmFnX2hhbmRsZTwvaWd4LWljb24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19