@porscheinformatik/material-addons 17.4.5 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/esm2022/lib/alert/alert.component.mjs +4 -4
  2. package/esm2022/lib/button/button.module.mjs +4 -4
  3. package/esm2022/lib/button/danger-button/danger-button.component.mjs +4 -6
  4. package/esm2022/lib/button/flat-button/link-button.component.mjs +4 -6
  5. package/esm2022/lib/button/icon-button/icon-button.component.mjs +4 -6
  6. package/esm2022/lib/button/mad-basic-button.mjs +4 -4
  7. package/esm2022/lib/button/mad-button/mad-button.directive.mjs +4 -4
  8. package/esm2022/lib/button/mad-button-group/mad-button-group.component.mjs +3 -3
  9. package/esm2022/lib/button/outline-button/outline-button.component.mjs +4 -6
  10. package/esm2022/lib/button/primary-button/primary-button.component.mjs +4 -6
  11. package/esm2022/lib/card/card.component.mjs +5 -5
  12. package/esm2022/lib/card/card.module.mjs +4 -4
  13. package/esm2022/lib/data-table/data-table-columns-modal/data-table-columns-modal.component.mjs +5 -5
  14. package/esm2022/lib/data-table/data-table-filter/data-table-filter-component/data-table-filter-dialog/data-table-filter-dialog.component.mjs +3 -3
  15. package/esm2022/lib/data-table/data-table-filter/data-table-filter-component/data-table-filter.component.mjs +4 -4
  16. package/esm2022/lib/data-table/data-table-filter/data-table-filter-header.directive.mjs +4 -4
  17. package/esm2022/lib/data-table/data-table-filter/data-table-filter.directive.mjs +4 -4
  18. package/esm2022/lib/data-table/data-table-persistence.service.mjs +4 -4
  19. package/esm2022/lib/data-table/data-table-template/data-table-template-cell-definition.directive.mjs +3 -3
  20. package/esm2022/lib/data-table/data-table-template/data-table-template-column-definition.directive.mjs +3 -3
  21. package/esm2022/lib/data-table/data-table-template/data-table-template-expandable-cell-definition.directive.mjs +3 -3
  22. package/esm2022/lib/data-table/data-table-template/data-table-template-expandable-column-definition.directive.mjs +3 -3
  23. package/esm2022/lib/data-table/data-table.component.mjs +4 -4
  24. package/esm2022/lib/data-table/util/data-table-action-util.mjs +1 -1
  25. package/esm2022/lib/data-table/util/data-table-data-util.mjs +1 -1
  26. package/esm2022/lib/data-table/util/data-table-sort-util.mjs +1 -1
  27. package/esm2022/lib/file-upload/drag-and-drop-directive.directive.mjs +4 -4
  28. package/esm2022/lib/file-upload/file-upload.component.mjs +4 -4
  29. package/esm2022/lib/layout/content-panel/content-header/content-header.component.mjs +3 -3
  30. package/esm2022/lib/layout/content-panel/content-panel-container/content-panel-container.component.mjs +4 -4
  31. package/esm2022/lib/layout/content-panel/content-panel-container-content/content-panel-container-content.component.mjs +3 -3
  32. package/esm2022/lib/layout/content-panel/content-panel-container-footer/content-panel-container-footer.component.mjs +4 -4
  33. package/esm2022/lib/layout/content-panel/content-panel-container-sidebar/content-panel-container-sidebar.component.mjs +3 -3
  34. package/esm2022/lib/layout/content-panel/content-panel.module.mjs +4 -4
  35. package/esm2022/lib/layout/content-panel/main-container/main-container.component.mjs +3 -3
  36. package/esm2022/lib/layout/flowbar/flowbar.component.mjs +4 -4
  37. package/esm2022/lib/layout/flowbar/flowbar.module.mjs +4 -4
  38. package/esm2022/lib/layout/sidebar/sidebar-item/sidebar-item.component.mjs +3 -3
  39. package/esm2022/lib/layout/sidebar/sidebar.component.mjs +3 -3
  40. package/esm2022/lib/layout/sidebar/sidebar.module.mjs +4 -4
  41. package/esm2022/lib/layout/sidebar-layout/sidebar-layout.component.mjs +3 -3
  42. package/esm2022/lib/layout/toolbar/toolbar.component.mjs +5 -5
  43. package/esm2022/lib/layout/toolbar/toolbar.module.mjs +4 -4
  44. package/esm2022/lib/layout/toolbar/toolbar.service.mjs +4 -4
  45. package/esm2022/lib/material-action-button/material-action-button.component.mjs +4 -4
  46. package/esm2022/lib/material-action-button/material-action-button.module.mjs +4 -4
  47. package/esm2022/lib/material-addons.module.mjs +4 -4
  48. package/esm2022/lib/numeric-field/number-format.service.mjs +4 -4
  49. package/esm2022/lib/numeric-field/numeric-field.directive.mjs +4 -4
  50. package/esm2022/lib/numeric-field/numeric-field.module.mjs +4 -4
  51. package/esm2022/lib/quick-list/base-quick-list.component.mjs +4 -4
  52. package/esm2022/lib/quick-list/quick-list-compact/quick-list-compact.component.mjs +3 -3
  53. package/esm2022/lib/quick-list/quick-list.component.mjs +3 -3
  54. package/esm2022/lib/quick-list/quick-list.module.mjs +4 -4
  55. package/esm2022/lib/quick-list/reactive-form-quick-list/reactive-form-quick-list.component.mjs +3 -3
  56. package/esm2022/lib/quick-list/reactive-form-quick-list-compact/reactive-form-quick-list-compact.component.mjs +3 -3
  57. package/esm2022/lib/readonly/readonly-form-field/readonly-form-field.component.mjs +5 -5
  58. package/esm2022/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.mjs +4 -4
  59. package/esm2022/lib/readonly/readonly-form-field.module.mjs +4 -4
  60. package/esm2022/lib/stepper/step-header/step-header.component.mjs +5 -5
  61. package/esm2022/lib/stepper/stepper.component.mjs +8 -8
  62. package/esm2022/lib/stepper/stepper.module.mjs +4 -4
  63. package/esm2022/lib/table/table.component.mjs +4 -4
  64. package/esm2022/lib/table/table.module.mjs +4 -4
  65. package/esm2022/lib/throttle-click/throttle-click.directive.mjs +3 -3
  66. package/esm2022/lib/throttle-click/throttle-click.module.mjs +4 -4
  67. package/fesm2022/porscheinformatik-material-addons.mjs +216 -226
  68. package/fesm2022/porscheinformatik-material-addons.mjs.map +1 -1
  69. package/lib/button/danger-button/danger-button.component.d.ts.map +1 -1
  70. package/lib/button/flat-button/link-button.component.d.ts.map +1 -1
  71. package/lib/button/icon-button/icon-button.component.d.ts.map +1 -1
  72. package/lib/button/outline-button/outline-button.component.d.ts.map +1 -1
  73. package/lib/button/primary-button/primary-button.component.d.ts.map +1 -1
  74. package/package.json +3 -2
  75. package/themes/common/styles.scss +3 -3
  76. package/themes/common/theme.scss +6 -6
@@ -590,8 +590,8 @@ export class DataTableComponent {
590
590
  }
591
591
  });
592
592
  }
593
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: MAD_DATA_TABLE_PERSISTENCE_SERVICE }, { token: MAD_DATA_TABLE_GLOBAL_CONFIGURATION }], target: i0.ɵɵFactoryTarget.Component }); }
594
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: DataTableComponent, isStandalone: true, selector: "mad-data-table", inputs: { id: "id", filterLabel: "filterLabel", filterPlaceholder: "filterPlaceholder", filterColumnsLabel: "filterColumnsLabel", filterColumnsPlaceHolder: "filterColumnsPlaceHolder", showEmptyTable: "showEmptyTable", noDataText: "noDataText", columnSettingsModalTitleLabel: "columnSettingsModalTitleLabel", selectedLabel: "selectedLabel", availableLabel: "availableLabel", saveLabel: "saveLabel", deleteLabel: "deleteLabel", cancelLabel: "cancelLabel", infoTextLabel: "infoTextLabel", tableClass: "tableClass", translateLabels: "translateLabels", useAsync: "useAsync", stateful: "stateful", persistenceConfig: "persistenceConfig", loading: "loading", tableData: "tableData", idGenerator: "idGenerator", parentIdGenerator: "parentIdGenerator", defaultSort: "defaultSort", externalFilter: "externalFilter", paginationEnabled: "paginationEnabled", page: "page", pageSizeOptions: "pageSizeOptions", actions: "actions", selectionEmitType: "selectionEmitType", showDeleteFilterAction: "showDeleteFilterAction", disableRowClick: "disableRowClick", deleteDefinitionAllowed: "deleteDefinitionAllowed", selection: "selection", filterEnabled: "filterEnabled", filterMode: "filterMode", filterValue: "filterValue", externalPaginator: "externalPaginator", defaultPageSize: "defaultPageSize", selectionEmitMode: "selectionEmitMode", forceMode: "forceMode", forceSelectionMode: "forceSelectionMode", displayedColumns: "displayedColumns", displayedColumnDefinition: "displayedColumnDefinition", columnDefinitions: "columnDefinitions", allColumns: "allColumns" }, outputs: { actionEvent: "actionEvent", selectionEvent: "selectionEvent", sortEvent: "sortEvent", filterEvent: "filterEvent", pageEvent: "pageEvent", allColumnsEvent: "allColumnsEvent", columnDefinitionChangeEvent: "columnDefinitionChangeEvent", viewDefinitionChangeEvent: "viewDefinitionChangeEvent" }, providers: [DATA_TABLE_PERSISTENCE_SERVICE_PROVIDER, MAD_DATA_TABL_GLOBAL_CONFIGURATION_PROVIDER], queries: [{ propertyName: "expandableDef", first: true, predicate: DataTableTemplateExpandableCellDefinition, descendants: true }, { propertyName: "columnDefs", predicate: DataTableTemplateColumnDefinition }], viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true }, { propertyName: "filter", first: true, predicate: DataTableFilter, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div data-cy=\"table-action-bar\" class=\"mad-datatable-action-bar\">\n <!-- Table actions: displayed before the table -->\n <div *ngIf=\"tableActions?.length || (filterMode === 'COLUMN_BASED' && showDeleteFilterAction)\">\n <mad-button-group *ngFor=\"let actionGroup of tableActions\" class=\"table-action-group\">\n <mad-outline-button\n [hidden]=\"isHidden(tableAction)\"\n [disabled]=\"isDisabled(tableAction)\"\n *ngFor=\"let tableAction of actionGroup\"\n (click)=\"onActionEvent(tableAction)\"\n >\n {{ translateLabels ? (tableAction.label | translate) : tableAction.label }}\n {{ getSelectedCount(tableAction.type) }}\n </mad-outline-button>\n </mad-button-group>\n </div>\n <ng-container *ngIf=\"filterMode === 'COLUMN_BASED' && showDeleteFilterAction\">\n <mat-icon fontSet=\"material-icons-outlined\" class=\"delete-filter-action\" color=\"primary\" (click)=\"onDeleteFilter()\"\n >filter_alt_off</mat-icon\n >\n </ng-container>\n <mat-form-field data-cy=\"filter-input\" *ngIf=\"filterMode === 'TABLE_BASED'\">\n <mat-label>{{ translateLabels ? (filterLabel | translate) : filterLabel }}</mat-label>\n <input matInput autocomplete=\"off\" (keyup)=\"onTableBasedFilterEvent($event)\" placeholder=\"{{ filterPlaceholder }}\" />\n </mat-form-field>\n</div>\n\n<!-- Row action menu -->\n<mat-menu #rowActionMenu=\"matMenu\">\n <ng-template matMenuContent let-element=\"element\">\n <ng-container *ngFor=\"let rowAction of rowActions\">\n <button\n data-cy=\"row-action-menu-button\"\n *ngIf=\"!isHidden(rowAction)\"\n mat-menu-item\n class=\"row-action\"\n (click)=\"onRowEvent($event, element, rowAction)\"\n [disabled]=\"isDisabled(rowAction)\"\n >\n {{ translateLabels ? (rowAction.label | translate) : rowAction.label }}\n </button>\n </ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- editable definition menu -->\n<mat-menu #editableDefinitionMenu=\"matMenu\">\n <ng-template matMenuContent>\n <button\n *ngFor=\"let definition of editableColumnDefinitions\"\n mat-menu-item\n class=\"row-action\"\n (click)=\"onColumnSettings(definition)\"\n [ngClass]=\"{ 'active-column-definition': isCurrentDefinition(definition) }\"\n >\n {{ translateLabels ? (definition.label | translate) : definition.label }}\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- viewable definition menu -->\n<mat-menu #viewableDefinitionMenu=\"matMenu\">\n <ng-template matMenuContent>\n <button\n *ngFor=\"let definition of viewableColumnDefinitions\"\n mat-menu-item\n class=\"row-action\"\n (click)=\"onViewDefinition(definition)\"\n [ngClass]=\"{ 'active-column-definition': isCurrentDefinition(definition) }\"\n >\n {{ translateLabels ? (definition.label | translate) : definition.label }}\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Table -->\n<div\n *ngIf=\"filterMode === 'COLUMN_BASED' || showEmptyTable || !!dataSource.filteredData?.length; else noData\"\n class=\"datatable\"\n [class]=\"tableClass\"\n>\n <div class=\"mad-datatable-spinner-wrapper\" *ngIf=\"loading\">\n <mat-spinner [diameter]=\"50\" [strokeWidth]=\"3\"></mat-spinner>\n </div>\n <table\n [id]=\"id\"\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"onSortingEvent($event)\"\n madFilter\n (madFilterChange)=\"onColumnBasedFilterEvent($event)\"\n [multiTemplateDataRows]=\"!!expandableDef\"\n >\n <!-- Row actions column-->\n <ng-container [matColumnDef]=\"ACTION_COLUMN_NAME\">\n <th scope=\"col\" mat-header-cell *matHeaderCellDef [ngClass]=\"showActionColumn ? 'row-action-cell' : 'no-action-cell'\">\n <!-- BATCH: master checkbox -->\n <div *ngIf=\"selectionEmitMode !== 'NONE' && selectionMode === 'BATCH'\" class=\"mad-datatable-checkbox-container\">\n <mat-checkbox (change)=\"onToggleSelectAll()\" [checked]=\"allSelected\"> </mat-checkbox>\n </div>\n <!-- SINGLE / NONE: nothing in header row -->\n </th>\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"showActionColumn ? 'row-action-cell' : 'no-action-cell'\">\n <!-- BATCH: row checkbox -->\n <div *ngIf=\"showCheckbox(element)\" class=\"mad-datatable-checkbox-container\" (click)=\"onRowEvent($event, element)\">\n <mat-checkbox class=\"no-pointer-events\" [checked]=\"isSelected(element.rowId)\"> </mat-checkbox>\n </div>\n <!-- SINGLE: row action menu icon -->\n <mad-icon-button data-cy=\"row-action-button\"\n *ngIf=\"showRowActionIcon(element) && hasVisibleRowActions(element)\"\n [matMenuTriggerData]=\"{ element: element }\"\n [matMenuTriggerFor]=\"rowActionMenu\"\n (click)=\"onSelectionEvent(element.rowId)\"\n >\n <mat-icon>more_vert</mat-icon>\n </mad-icon-button>\n <!-- SINGLE: row radio button -->\n <div *ngIf=\"showRadioButton(element)\" class=\"mad-datatable-checkbox-container\" (click)=\"onRowEvent($event, element)\">\n <mat-radio-button class=\"no-pointer-events\" [checked]=\"isSelected(element.rowId)\"> </mat-radio-button>\n </div>\n <!-- EXPANDABLE: row is expandable/collapsable -->\n <mad-icon-button *ngIf=\"showExpandableButton(element)\" (click)=\"onExpand($event, element)\">\n <mat-icon *ngIf=\"expandedElement !== element\">keyboard_arrow_down</mat-icon>\n <mat-icon *ngIf=\"expandedElement === element\">keyboard_arrow_up</mat-icon>\n </mad-icon-button>\n <!-- NONE: nothing -->\n </td>\n </ng-container>\n <!-- Cell definitions and rows with injected cells -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.id\">\n <!-- header cell to be injected -->\n <ng-container [ngSwitch]=\"getDataTableHeaderType(column)\">\n <ng-container *ngSwitchCase=\"'SORT'\">\n <th\n scope=\"col\"\n mat-header-cell\n *matHeaderCellDef\n [class.text-right]=\"column.isRightAligned\"\n mat-sort-header=\"{{ column.orderByName ? column.orderByName : column.dataPropertyName }}\"\n [arrowPosition]=\"column.isRightAligned ? 'before' : 'after'\"\n >\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n <ng-container *ngSwitchCase=\"'FILTER'\">\n <th\n scope=\"col\"\n mat-header-cell\n *matHeaderCellDef\n [class.text-right]=\"column.isRightAligned\"\n mad-filter-header=\"{{ column.dataPropertyName }}\"\n [madFilterColumnRightAligned]=\"column.isRightAligned\"\n [madFilterOptions]=\"column.filterParams?.filterOptions\"\n >\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n <ng-container *ngSwitchCase=\"'SORT_AND_FILTER'\">\n <th\n scope=\"col\"\n mat-header-cell\n *matHeaderCellDef\n [class.text-right]=\"column.isRightAligned\"\n mat-sort-header=\"{{ column.orderByName ? column.orderByName : column.dataPropertyName }}\"\n [arrowPosition]=\"column.isRightAligned ? 'before' : 'after'\"\n mad-filter-header=\"{{ column.dataPropertyName }}\"\n [madFilterColumnRightAligned]=\"column.isRightAligned\"\n [madFilterOptions]=\"column.filterParams?.filterOptions\"\n >\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <th scope=\"col\" mat-header-cell *matHeaderCellDef [class.text-right]=\"column.isRightAligned\">\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n </ng-container>\n\n <!-- data cell to be injected -->\n <td\n mat-cell\n *matCellDef=\"let element\"\n [class.text-right]=\"column.isRightAligned\"\n [class.mad-dt-child-cell]=\"element.parentId\"\n [ngSwitch]=\"column.transformer\"\n (click)=\"!disableRowClick && onRowEvent($event, element)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n getCustomCellTemplate(column.id) || defaultCellTemplate;\n context: { column: column, element: element, $implicit: element }\n \"\n ></ng-container>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The row is made up of this one column that spans across all columns -->\n <ng-container *ngIf=\"!!expandableDef\" [matColumnDef]=\"expandableColumnDef\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"columns.length + 1\">\n <div class=\"mad-data-table-expandable-area\" [@detailExpand]=\"element === expandedElement ? 'expanded' : 'collapsed'\">\n <ng-container\n *ngTemplateOutlet=\"\n getCustomExpandableTemplate() || defaultCellTemplate;\n context: { column: element, element: element, $implicit: element }\n \"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- header row where cells will be injected -->\n <tr mat-header-row *matHeaderRowDef=\"columnIds\"></tr>\n <!-- data row where cells will be injected -->\n <tr\n mat-row\n [class.clickable-table-row]=\"!row.parentId && selectionEmitMode !== 'NONE'\"\n *matRowDef=\"let row; columns: columnIds\"\n (click)=\"onExpand($event, row)\"\n ></tr>\n <ng-container *ngIf=\"!!expandableDef\">\n <tr mat-row *matRowDef=\"let element; columns: [expandableColumnDef]\" class=\"mad-data-table-expandable-row\"></tr>\n </ng-container>\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell noDataText columnBasedFilter\" [attr.colspan]=\"columnIds.length\">\n {{ translateLabels ? (noDataText | translate) : noDataText }}\n </td>\n </tr>\n </table>\n</div>\n<div data-cy=\"table-bottom-area\" class=\"mad-data-table-bottom-area\">\n <div data-cy=\"definition-button-block\" class=\"mad-data-table-bottom-info-area\">\n <!-- column settings: 1 definition -->\n <mad-icon-button *ngIf=\"editableColumnDefinitions?.length === 1\" (click)=\"onColumnSettings()\">\n <mat-icon class=\"material-icons-outlined\">view_column</mat-icon>\n </mad-icon-button>\n <!-- column settings: multiple definitions -->\n <mad-icon-button *ngIf=\"(editableColumnDefinitions?.length || 0) > 0\" [matMenuTriggerFor]=\"editableDefinitionMenu\">\n <mat-icon>view_column</mat-icon>\n </mad-icon-button>\n <!-- column view: multiple definitions -->\n <mad-icon-button *ngIf=\"(viewableColumnDefinitions?.length || 0) > 0\" [matMenuTriggerFor]=\"viewableDefinitionMenu\">\n <mat-icon>preview</mat-icon>\n </mad-icon-button>\n </div>\n\n <!-- Pagination -->\n <mat-paginator\n [style.display]=\"paginationEnabled ? 'block' : 'none'\"\n [length]=\"pageLength\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPageEvent($event)\"\n showFirstLastButtons\n >\n </mat-paginator>\n</div>\n\n<!-- No data alert -->\n<ng-template #noData>\n <div data-cy=\"no-data-block\" class=\"noDataText\">\n <div class=\"mad-datatable-spinner-wrapper\" *ngIf=\"loading\">\n <mat-spinner [diameter]=\"50\" [strokeWidth]=\"3\"></mat-spinner>\n </div>\n {{ translateLabels ? (noDataText | translate) : noDataText }}\n </div>\n</ng-template>\n\n<!-- default cell template -->\n<ng-template #defaultCellTemplate let-element=\"element\" let-column=\"column\">\n <span>\n {{ element[column.dataPropertyName] }}\n </span>\n</ng-template>\n\n<!-- custom cell templates injected from parent -->\n<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:column;min-height:112px;flex:1 1 auto;background-color:#fff}.datatable-vertical-stretch-to-parent{flex:1;max-height:100%;width:100%;display:flex;flex-direction:column}.datatable-max-height-500{max-height:500px}.datatable-max-height-300{max-height:300px}.datatable-max-height,.datatable-max-height-500,.datatable-max-height-300{flex:1;width:100%;display:flex;flex-direction:column}.datatable{overflow:auto;flex:1 1 auto;height:100%;position:relative;width:100%}.datatable table{width:100%;min-height:140px;max-height:100%}.datatable table th,.datatable table td{width:auto;text-overflow:ellipsis;white-space:nowrap}.datatable table th{overflow:visible}.datatable table td{overflow:hidden}.layout-fixed table{table-layout:fixed}.layout-fixed table th{font-weight:700}.layout-fixed table td{white-space:normal;word-wrap:break-word}.text-right{text-align:right!important;padding-right:24px!important}.table-action-group{margin-right:.5em;margin-bottom:.5em}.row-action-cell{width:48px!important;padding-left:8px!important}.no-action-cell{width:8px!important;padding:0}.noDataText{width:100%;text-align:center;position:relative}.noDataText.columnBasedFilter{padding-top:10px}.mad-datatable-action-bar{display:flex;justify-content:space-between;align-items:baseline}.mad-datatable-checkbox-container{margin-right:8px;margin-left:8px}.mad-datatable-spinner-wrapper{background-color:#fff;opacity:.8;position:absolute;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;z-index:99999;pointer-events:unset}.mad-data-table-expandable-row{height:0;display:contents;padding:0}.mad-data-table-expandable-row td{border-top-color:transparent;border-bottom-color:transparent}.mad-data-table-expandable-area{overflow:hidden;display:flex;width:100%}.mad-data-table-bottom-area{display:flex;flex-direction:row}.mad-data-table-bottom-area .mad-data-table-bottom-info-area{display:flex;flex:1}.mat-mdc-header-row th{position:sticky;top:0;background-color:#fff;z-index:1}.no-pointer-events{pointer-events:none}.active-column-definition{color:#000;background-color:#f5f5f5}.mad-dt-child-cell{color:#0009}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled", "color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i9.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i11.OutlineButtonComponent, selector: "mad-outline-button", inputs: ["type", "disabled", "title", "color"] }, { kind: "component", type: i12.IconButtonComponent, selector: "mad-icon-button", inputs: ["type", "disabled", "title"] }, { kind: "component", type: i13.MadButtonGroupComponent, selector: "mad-button-group" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i15.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "component", type: i16.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex", "id", "name", "aria-label", "aria-labelledby", "aria-describedby", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: DataTableFilterHeader, selector: "th[mad-filter-header]", inputs: ["mad-filter-header", "madFilterColumnRightAligned", "madFilterOptions"] }, { kind: "directive", type: DataTableFilter, selector: "[madFilter]", outputs: ["madFilterChange"] }], animations: [
593
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: MAD_DATA_TABLE_PERSISTENCE_SERVICE }, { token: MAD_DATA_TABLE_GLOBAL_CONFIGURATION }], target: i0.ɵɵFactoryTarget.Component }); }
594
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: DataTableComponent, isStandalone: true, selector: "mad-data-table", inputs: { id: "id", filterLabel: "filterLabel", filterPlaceholder: "filterPlaceholder", filterColumnsLabel: "filterColumnsLabel", filterColumnsPlaceHolder: "filterColumnsPlaceHolder", showEmptyTable: "showEmptyTable", noDataText: "noDataText", columnSettingsModalTitleLabel: "columnSettingsModalTitleLabel", selectedLabel: "selectedLabel", availableLabel: "availableLabel", saveLabel: "saveLabel", deleteLabel: "deleteLabel", cancelLabel: "cancelLabel", infoTextLabel: "infoTextLabel", tableClass: "tableClass", translateLabels: "translateLabels", useAsync: "useAsync", stateful: "stateful", persistenceConfig: "persistenceConfig", loading: "loading", tableData: "tableData", idGenerator: "idGenerator", parentIdGenerator: "parentIdGenerator", defaultSort: "defaultSort", externalFilter: "externalFilter", paginationEnabled: "paginationEnabled", page: "page", pageSizeOptions: "pageSizeOptions", actions: "actions", selectionEmitType: "selectionEmitType", showDeleteFilterAction: "showDeleteFilterAction", disableRowClick: "disableRowClick", deleteDefinitionAllowed: "deleteDefinitionAllowed", selection: "selection", filterEnabled: "filterEnabled", filterMode: "filterMode", filterValue: "filterValue", externalPaginator: "externalPaginator", defaultPageSize: "defaultPageSize", selectionEmitMode: "selectionEmitMode", forceMode: "forceMode", forceSelectionMode: "forceSelectionMode", displayedColumns: "displayedColumns", displayedColumnDefinition: "displayedColumnDefinition", columnDefinitions: "columnDefinitions", allColumns: "allColumns" }, outputs: { actionEvent: "actionEvent", selectionEvent: "selectionEvent", sortEvent: "sortEvent", filterEvent: "filterEvent", pageEvent: "pageEvent", allColumnsEvent: "allColumnsEvent", columnDefinitionChangeEvent: "columnDefinitionChangeEvent", viewDefinitionChangeEvent: "viewDefinitionChangeEvent" }, providers: [DATA_TABLE_PERSISTENCE_SERVICE_PROVIDER, MAD_DATA_TABL_GLOBAL_CONFIGURATION_PROVIDER], queries: [{ propertyName: "expandableDef", first: true, predicate: DataTableTemplateExpandableCellDefinition, descendants: true }, { propertyName: "columnDefs", predicate: DataTableTemplateColumnDefinition }], viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true }, { propertyName: "filter", first: true, predicate: DataTableFilter, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div data-cy=\"table-action-bar\" class=\"mad-datatable-action-bar\">\n <!-- Table actions: displayed before the table -->\n <div *ngIf=\"tableActions?.length || (filterMode === 'COLUMN_BASED' && showDeleteFilterAction)\">\n <mad-button-group *ngFor=\"let actionGroup of tableActions\" class=\"table-action-group\">\n <mad-outline-button\n [hidden]=\"isHidden(tableAction)\"\n [disabled]=\"isDisabled(tableAction)\"\n *ngFor=\"let tableAction of actionGroup\"\n (click)=\"onActionEvent(tableAction)\"\n >\n {{ translateLabels ? (tableAction.label | translate) : tableAction.label }}\n {{ getSelectedCount(tableAction.type) }}\n </mad-outline-button>\n </mad-button-group>\n </div>\n <ng-container *ngIf=\"filterMode === 'COLUMN_BASED' && showDeleteFilterAction\">\n <mat-icon fontSet=\"material-icons-outlined\" class=\"delete-filter-action\" color=\"primary\" (click)=\"onDeleteFilter()\"\n >filter_alt_off</mat-icon\n >\n </ng-container>\n <mat-form-field data-cy=\"filter-input\" *ngIf=\"filterMode === 'TABLE_BASED'\">\n <mat-label>{{ translateLabels ? (filterLabel | translate) : filterLabel }}</mat-label>\n <input matInput autocomplete=\"off\" (keyup)=\"onTableBasedFilterEvent($event)\" placeholder=\"{{ filterPlaceholder }}\" />\n </mat-form-field>\n</div>\n\n<!-- Row action menu -->\n<mat-menu #rowActionMenu=\"matMenu\">\n <ng-template matMenuContent let-element=\"element\">\n <ng-container *ngFor=\"let rowAction of rowActions\">\n <button\n data-cy=\"row-action-menu-button\"\n *ngIf=\"!isHidden(rowAction)\"\n mat-menu-item\n class=\"row-action\"\n (click)=\"onRowEvent($event, element, rowAction)\"\n [disabled]=\"isDisabled(rowAction)\"\n >\n {{ translateLabels ? (rowAction.label | translate) : rowAction.label }}\n </button>\n </ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- editable definition menu -->\n<mat-menu #editableDefinitionMenu=\"matMenu\">\n <ng-template matMenuContent>\n <button\n *ngFor=\"let definition of editableColumnDefinitions\"\n mat-menu-item\n class=\"row-action\"\n (click)=\"onColumnSettings(definition)\"\n [ngClass]=\"{ 'active-column-definition': isCurrentDefinition(definition) }\"\n >\n {{ translateLabels ? (definition.label | translate) : definition.label }}\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- viewable definition menu -->\n<mat-menu #viewableDefinitionMenu=\"matMenu\">\n <ng-template matMenuContent>\n <button\n *ngFor=\"let definition of viewableColumnDefinitions\"\n mat-menu-item\n class=\"row-action\"\n (click)=\"onViewDefinition(definition)\"\n [ngClass]=\"{ 'active-column-definition': isCurrentDefinition(definition) }\"\n >\n {{ translateLabels ? (definition.label | translate) : definition.label }}\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Table -->\n<div\n *ngIf=\"filterMode === 'COLUMN_BASED' || showEmptyTable || !!dataSource.filteredData?.length; else noData\"\n class=\"datatable\"\n [class]=\"tableClass\"\n>\n <div class=\"mad-datatable-spinner-wrapper\" *ngIf=\"loading\">\n <mat-spinner [diameter]=\"50\" [strokeWidth]=\"3\"></mat-spinner>\n </div>\n <table\n [id]=\"id\"\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"onSortingEvent($event)\"\n madFilter\n (madFilterChange)=\"onColumnBasedFilterEvent($event)\"\n [multiTemplateDataRows]=\"!!expandableDef\"\n >\n <!-- Row actions column-->\n <ng-container [matColumnDef]=\"ACTION_COLUMN_NAME\">\n <th scope=\"col\" mat-header-cell *matHeaderCellDef [ngClass]=\"showActionColumn ? 'row-action-cell' : 'no-action-cell'\">\n <!-- BATCH: master checkbox -->\n <div *ngIf=\"selectionEmitMode !== 'NONE' && selectionMode === 'BATCH'\" class=\"mad-datatable-checkbox-container\">\n <mat-checkbox (change)=\"onToggleSelectAll()\" [checked]=\"allSelected\"> </mat-checkbox>\n </div>\n <!-- SINGLE / NONE: nothing in header row -->\n </th>\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"showActionColumn ? 'row-action-cell' : 'no-action-cell'\">\n <!-- BATCH: row checkbox -->\n <div *ngIf=\"showCheckbox(element)\" class=\"mad-datatable-checkbox-container\" (click)=\"onRowEvent($event, element)\">\n <mat-checkbox class=\"no-pointer-events\" [checked]=\"isSelected(element.rowId)\"> </mat-checkbox>\n </div>\n <!-- SINGLE: row action menu icon -->\n <mad-icon-button data-cy=\"row-action-button\"\n *ngIf=\"showRowActionIcon(element) && hasVisibleRowActions(element)\"\n [matMenuTriggerData]=\"{ element: element }\"\n [matMenuTriggerFor]=\"rowActionMenu\"\n (click)=\"onSelectionEvent(element.rowId)\"\n >\n <mat-icon>more_vert</mat-icon>\n </mad-icon-button>\n <!-- SINGLE: row radio button -->\n <div *ngIf=\"showRadioButton(element)\" class=\"mad-datatable-checkbox-container\" (click)=\"onRowEvent($event, element)\">\n <mat-radio-button class=\"no-pointer-events\" [checked]=\"isSelected(element.rowId)\"> </mat-radio-button>\n </div>\n <!-- EXPANDABLE: row is expandable/collapsable -->\n <mad-icon-button *ngIf=\"showExpandableButton(element)\" (click)=\"onExpand($event, element)\">\n <mat-icon *ngIf=\"expandedElement !== element\">keyboard_arrow_down</mat-icon>\n <mat-icon *ngIf=\"expandedElement === element\">keyboard_arrow_up</mat-icon>\n </mad-icon-button>\n <!-- NONE: nothing -->\n </td>\n </ng-container>\n <!-- Cell definitions and rows with injected cells -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.id\">\n <!-- header cell to be injected -->\n <ng-container [ngSwitch]=\"getDataTableHeaderType(column)\">\n <ng-container *ngSwitchCase=\"'SORT'\">\n <th\n scope=\"col\"\n mat-header-cell\n *matHeaderCellDef\n [class.text-right]=\"column.isRightAligned\"\n mat-sort-header=\"{{ column.orderByName ? column.orderByName : column.dataPropertyName }}\"\n [arrowPosition]=\"column.isRightAligned ? 'before' : 'after'\"\n >\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n <ng-container *ngSwitchCase=\"'FILTER'\">\n <th\n scope=\"col\"\n mat-header-cell\n *matHeaderCellDef\n [class.text-right]=\"column.isRightAligned\"\n mad-filter-header=\"{{ column.dataPropertyName }}\"\n [madFilterColumnRightAligned]=\"column.isRightAligned\"\n [madFilterOptions]=\"column.filterParams?.filterOptions\"\n >\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n <ng-container *ngSwitchCase=\"'SORT_AND_FILTER'\">\n <th\n scope=\"col\"\n mat-header-cell\n *matHeaderCellDef\n [class.text-right]=\"column.isRightAligned\"\n mat-sort-header=\"{{ column.orderByName ? column.orderByName : column.dataPropertyName }}\"\n [arrowPosition]=\"column.isRightAligned ? 'before' : 'after'\"\n mad-filter-header=\"{{ column.dataPropertyName }}\"\n [madFilterColumnRightAligned]=\"column.isRightAligned\"\n [madFilterOptions]=\"column.filterParams?.filterOptions\"\n >\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <th scope=\"col\" mat-header-cell *matHeaderCellDef [class.text-right]=\"column.isRightAligned\">\n {{ translateLabels ? (column.label | translate) : column.label }}\n </th>\n </ng-container>\n </ng-container>\n\n <!-- data cell to be injected -->\n <td\n mat-cell\n *matCellDef=\"let element\"\n [class.text-right]=\"column.isRightAligned\"\n [class.mad-dt-child-cell]=\"element.parentId\"\n [ngSwitch]=\"column.transformer\"\n (click)=\"!disableRowClick && onRowEvent($event, element)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n getCustomCellTemplate(column.id) || defaultCellTemplate;\n context: { column: column, element: element, $implicit: element }\n \"\n ></ng-container>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The row is made up of this one column that spans across all columns -->\n <ng-container *ngIf=\"!!expandableDef\" [matColumnDef]=\"expandableColumnDef\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"columns.length + 1\">\n <div class=\"mad-data-table-expandable-area\" [@detailExpand]=\"element === expandedElement ? 'expanded' : 'collapsed'\">\n <ng-container\n *ngTemplateOutlet=\"\n getCustomExpandableTemplate() || defaultCellTemplate;\n context: { column: element, element: element, $implicit: element }\n \"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- header row where cells will be injected -->\n <tr mat-header-row *matHeaderRowDef=\"columnIds\"></tr>\n <!-- data row where cells will be injected -->\n <tr\n mat-row\n [class.clickable-table-row]=\"!row.parentId && selectionEmitMode !== 'NONE'\"\n *matRowDef=\"let row; columns: columnIds\"\n (click)=\"onExpand($event, row)\"\n ></tr>\n <ng-container *ngIf=\"!!expandableDef\">\n <tr mat-row *matRowDef=\"let element; columns: [expandableColumnDef]\" class=\"mad-data-table-expandable-row\"></tr>\n </ng-container>\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell noDataText columnBasedFilter\" [attr.colspan]=\"columnIds.length\">\n {{ translateLabels ? (noDataText | translate) : noDataText }}\n </td>\n </tr>\n </table>\n</div>\n<div data-cy=\"table-bottom-area\" class=\"mad-data-table-bottom-area\">\n <div data-cy=\"definition-button-block\" class=\"mad-data-table-bottom-info-area\">\n <!-- column settings: 1 definition -->\n <mad-icon-button *ngIf=\"editableColumnDefinitions?.length === 1\" (click)=\"onColumnSettings()\">\n <mat-icon class=\"material-icons-outlined\">view_column</mat-icon>\n </mad-icon-button>\n <!-- column settings: multiple definitions -->\n <mad-icon-button *ngIf=\"(editableColumnDefinitions?.length || 0) > 0\" [matMenuTriggerFor]=\"editableDefinitionMenu\">\n <mat-icon>view_column</mat-icon>\n </mad-icon-button>\n <!-- column view: multiple definitions -->\n <mad-icon-button *ngIf=\"(viewableColumnDefinitions?.length || 0) > 0\" [matMenuTriggerFor]=\"viewableDefinitionMenu\">\n <mat-icon>preview</mat-icon>\n </mad-icon-button>\n </div>\n\n <!-- Pagination -->\n <mat-paginator\n [style.display]=\"paginationEnabled ? 'block' : 'none'\"\n [length]=\"pageLength\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPageEvent($event)\"\n showFirstLastButtons\n >\n </mat-paginator>\n</div>\n\n<!-- No data alert -->\n<ng-template #noData>\n <div data-cy=\"no-data-block\" class=\"noDataText\">\n <div class=\"mad-datatable-spinner-wrapper\" *ngIf=\"loading\">\n <mat-spinner [diameter]=\"50\" [strokeWidth]=\"3\"></mat-spinner>\n </div>\n {{ translateLabels ? (noDataText | translate) : noDataText }}\n </div>\n</ng-template>\n\n<!-- default cell template -->\n<ng-template #defaultCellTemplate let-element=\"element\" let-column=\"column\">\n <span>\n {{ element[column.dataPropertyName] }}\n </span>\n</ng-template>\n\n<!-- custom cell templates injected from parent -->\n<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:column;min-height:112px;flex:1 1 auto;background-color:#fff}.datatable-vertical-stretch-to-parent{flex:1;max-height:100%;width:100%;display:flex;flex-direction:column}.datatable-max-height-500{max-height:500px}.datatable-max-height-300{max-height:300px}.datatable-max-height,.datatable-max-height-500,.datatable-max-height-300{flex:1;width:100%;display:flex;flex-direction:column}.datatable{overflow:auto;flex:1 1 auto;height:100%;position:relative;width:100%}.datatable table{width:100%;min-height:140px;max-height:100%}.datatable table th,.datatable table td{width:auto;text-overflow:ellipsis;white-space:nowrap}.datatable table th{overflow:visible}.datatable table td{overflow:hidden}.layout-fixed table{table-layout:fixed}.layout-fixed table th{font-weight:700}.layout-fixed table td{white-space:normal;word-wrap:break-word}.text-right{text-align:right!important;padding-right:24px!important}.table-action-group{margin-right:.5em;margin-bottom:.5em}.row-action-cell{width:48px!important;padding-left:8px!important}.no-action-cell{width:8px!important;padding:0}.noDataText{width:100%;text-align:center;position:relative}.noDataText.columnBasedFilter{padding-top:10px}.mad-datatable-action-bar{display:flex;justify-content:space-between;align-items:baseline}.mad-datatable-checkbox-container{margin-right:8px;margin-left:8px}.mad-datatable-spinner-wrapper{background-color:#fff;opacity:.8;position:absolute;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;z-index:99999;pointer-events:unset}.mad-data-table-expandable-row{height:0;display:contents;padding:0}.mad-data-table-expandable-row td{border-top-color:transparent;border-bottom-color:transparent}.mad-data-table-expandable-area{overflow:hidden;display:flex;width:100%}.mad-data-table-bottom-area{display:flex;flex-direction:row}.mad-data-table-bottom-area .mad-data-table-bottom-info-area{display:flex;flex:1}.mat-mdc-header-row th{position:sticky;top:0;background-color:#fff;z-index:1}.no-pointer-events{pointer-events:none}.active-column-definition{color:#000;background-color:#f5f5f5}.mad-dt-child-cell{color:#0009}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i9.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i11.OutlineButtonComponent, selector: "mad-outline-button", inputs: ["type", "disabled", "title", "color"] }, { kind: "component", type: i12.IconButtonComponent, selector: "mad-icon-button", inputs: ["type", "disabled", "title"] }, { kind: "component", type: i13.MadButtonGroupComponent, selector: "mad-button-group" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i15.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "component", type: i16.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: DataTableFilterHeader, selector: "th[mad-filter-header]", inputs: ["mad-filter-header", "madFilterColumnRightAligned", "madFilterOptions"] }, { kind: "directive", type: DataTableFilter, selector: "[madFilter]", outputs: ["madFilterChange"] }], animations: [
595
595
  trigger('detailExpand', [
596
596
  state('collapsed,void', style({ height: '0px', minHeight: '0' })),
597
597
  state('expanded', style({ height: '*' })),
@@ -599,7 +599,7 @@ export class DataTableComponent {
599
599
  ]),
600
600
  ] }); }
601
601
  }
602
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: DataTableComponent, decorators: [{
602
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DataTableComponent, decorators: [{
603
603
  type: Component,
604
604
  args: [{ selector: 'mad-data-table', animations: [
605
605
  trigger('detailExpand', [
@@ -762,4 +762,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
762
762
  type: ContentChild,
763
763
  args: [DataTableTemplateExpandableCellDefinition]
764
764
  }] } });
765
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQVUvRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FB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S0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFFTyxTQUFTO3NCQUFyQixLQUFLO2dCQVNPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBS08sVUFBVTtzQkFBdEIsS0FBSztnQkFLTyxXQUFXO3NCQUF2QixLQUFLO2dCQUtPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQU9PLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFhTyxTQUFTO3NCQUFyQixLQUFLO2dCQVFPLGtCQUFrQjtzQkFBOUIsS0FBSztnQkFLTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBUU8seUJBQXlCO3NCQUFyQyxLQUFLO2dCQU9PLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFjTyxVQUFVO3NCQUF0QixLQUFLO2dCQU9JLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBRWtCLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFFQyxPQUFPO3NCQUE5QixTQUFTO3VCQUFDLE9BQU87Z0JBSVUsTUFBTTtzQkFBakMsU0FBUzt1QkFBQyxlQUFlO2dCQUd0QixVQUFVO3NCQURiLGVBQWU7dUJBQUMsaUNBQWlDO2dCQVc5QyxhQUFhO3NCQURoQixZQUFZO3VCQUFDLHlDQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UsIE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBNYXRQYWdpbmF0b3JNb2R1bGUsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0LCBNYXRTb3J0TW9kdWxlLCBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgRGF0YVRhYmxlQWN0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtYWN0aW9uJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW5zTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2RhdGEtdGFibGUtY29sdW1ucy1tb2RhbC9kYXRhLXRhYmxlLWNvbHVtbnMtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb24sXG4gIERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb25DaGFuZ2UsXG4gIERhdGFUYWJsZURpYWxvZ0RhdGEsXG59IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWNvbHVtbi1kZWZpbml0aW9uJztcbmltcG9ydCB7IERhdGFUYWJsZVJvdyB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLXJvdyc7XG5pbXBvcnQgeyBEYXRhVGFibGVIZWFkZXJUeXBlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtaGVhZGVyLXR5cGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyTW9kZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWZpbHRlci1tb2RlJztcbmltcG9ydCB7IERhdGFUYWJsZUZpbHRlck9iamVjdCB9IGZyb20gJy4vZGF0YS10YWJsZS1maWx0ZXIvZGF0YS10YWJsZS1maWx0ZXItb2JqZWN0JztcbmltcG9ydCB7IERhdGFUYWJsZUZpbHRlciB9IGZyb20gJy4vZGF0YS10YWJsZS1maWx0ZXIvZGF0YS10YWJsZS1maWx0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRUeXBlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtc2VsZWN0aW9uLWVtaXQtdHlwZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVTZWxlY3Rpb25FbWl0TW9kZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLXNlbGVjdGlvbi1lbWl0LW1vZGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLXNlbGVjdGlvbi1tb2RlJztcbmltcG9ydCB7IERhdGFUYWJsZVNvcnRVdGlsIH0gZnJvbSAnLi91dGlsL2RhdGEtdGFibGUtc29ydC11dGlsJztcbmltcG9ydCB7IERhdGFUYWJsZUFjdGlvblV0aWwgfSBmcm9tICcuL3V0aWwvZGF0YS10YWJsZS1hY3Rpb24tdXRpbCc7XG5pbXBvcnQgeyBEYXRhVGFibGVEYXRhVXRpbCB9IGZyb20gJy4vdXRpbC9kYXRhLXRhYmxlLWRhdGEtdXRpbCc7XG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJVdGlsIH0gZnJvbSAnLi91dGlsL2RhdGEtdGFibGUtZmlsdGVyLXV0aWwnO1xuaW1wb3J0IHtcbiAgREFUQV9UQUJMRV9QRVJTSVNURU5DRV9TRVJWSUNFX1BST1ZJREVSLFxuICBEYXRhVGFibGVQZXJzaXN0ZW5jZVNlcnZpY2UsXG4gIE1BRF9EQVRBX1RBQkxFX1BFUlNJU1RFTkNFX1NFUlZJQ0UsXG59IGZyb20gJy4vZGF0YS10YWJsZS1wZXJzaXN0ZW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1BRF9EQVRBX1RBQkxFX0dMT0JBTF9DT05GSUdVUkFUSU9OLFxuICBEYXRhVGFibGVHbG9iYWxDb25maWd1cmF0aW9uLFxuICBNQURfREFUQV9UQUJMX0dMT0JBTF9DT05GSUdVUkFUSU9OX1BST1ZJREVSLFxufSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1nbG9iYWwtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVySGVhZGVyIH0gZnJvbSAnLi9kYXRhLXRhYmxlLWZpbHRlci9kYXRhLXRhYmxlLWZpbHRlci1oZWFkZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVRlbXBsYXRlQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJy4vZGF0YS10YWJsZS10ZW1wbGF0ZS9kYXRhLXRhYmxlLXRlbXBsYXRlLWNvbHVtbi1kZWZpbml0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVUZW1wbGF0ZUNlbGxEZWZpbml0aW9uIH0gZnJvbSAnLi9kYXRhLXRhYmxlLXRlbXBsYXRlL2RhdGEtdGFibGUtdGVtcGxhdGUtY2VsbC1kZWZpbml0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVUZW1wbGF0ZUV4cGFuZGFibGVDZWxsRGVmaW5pdGlvbiB9IGZyb20gJy4vZGF0YS10YWJsZS10ZW1wbGF0ZS9kYXRhLXRhYmxlLXRlbXBsYXRlLWV4cGFuZGFibGUtY2VsbC1kZWZpbml0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVUZW1wbGF0ZUV4cGFuZGFibGVDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAnLi9kYXRhLXRhYmxlLXRlbXBsYXRlL2RhdGEtdGFibGUtdGVtcGxhdGUtZXhwYW5kYWJsZS1jb2x1bW4tZGVmaW5pdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlUGVyc2lzdGVuY2VDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtcGVyc2lzdGVuY2UtY29uZmlndXJhdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkLHZvaWQnLCBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnIH0pKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICBdKSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgTWF0U29ydE1vZHVsZSxcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRSYWRpb01vZHVsZSxcbiAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEYXRhVGFibGVGaWx0ZXJIZWFkZXIsXG4gICAgRGF0YVRhYmxlRmlsdGVyLFxuICAgIERhdGFUYWJsZVRlbXBsYXRlQ29sdW1uRGVmaW5pdGlvbixcbiAgICBEYXRhVGFibGVUZW1wbGF0ZUNlbGxEZWZpbml0aW9uLFxuICAgIERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNvbHVtbkRlZmluaXRpb24sXG4gICAgRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ2VsbERlZmluaXRpb24sXG4gIF0sXG4gIHByb3ZpZGVyczogW0RBVEFfVEFCTEVfUEVSU0lTVEVOQ0VfU0VSVklDRV9QUk9WSURFUiwgTUFEX0RBVEFfVEFCTF9HTE9CQUxfQ09ORklHVVJBVElPTl9QUk9WSURFUl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG5cbiAgLy8gVHJhbnNsYXRpb25zXG4gIEBJbnB1dCgpIGZpbHRlckxhYmVsID0gJ2NvbW1vbi5maWx0ZXInO1xuICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zTGFiZWwgPSAnRmlsdGVyJztcbiAgQElucHV0KCkgZmlsdGVyQ29sdW1uc1BsYWNlSG9sZGVyID0gJ0ZpbHRlciBhdmFpbGFibGUgY29sdW1ucyc7XG4gIEBJbnB1dCgpIHNob3dFbXB0eVRhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG5vRGF0YVRleHQgPSAnTm8gbWF0Y2hpbmcgZGF0YSBmb3VuZCc7XG4gIEBJbnB1dCgpIGNvbHVtblNldHRpbmdzTW9kYWxUaXRsZUxhYmVsID0gJ0NvbHVtbiBzZXR0aW5ncyc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkTGFiZWwgPSAnU2VsZWN0ZWQgY29sdW1ucyc7XG4gIEBJbnB1dCgpIGF2YWlsYWJsZUxhYmVsID0gJ0F2YWlsYWJsZSBjb2x1bW5zJztcbiAgQElucHV0KCkgc2F2ZUxhYmVsID0gJ1NhdmUnO1xuICBASW5wdXQoKSBkZWxldGVMYWJlbCA9ICdEZWxldGUnO1xuICBASW5wdXQoKSBjYW5jZWxMYWJlbCA9ICdDYW5jZWwnO1xuICBASW5wdXQoKSBpbmZvVGV4dExhYmVsID0gJ0RyYWcgYW5kIGRyb3AgYSBjb2x1bW4gdG8gc2VsZWN0IG9yIHJlb3JkZXIgaXQuJztcbiAgQElucHV0KCkgdGFibGVDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRyYW5zbGF0ZUxhYmVscyA9IHRydWU7XG5cbiAgQElucHV0KCkgc2V0IHVzZUFzeW5jKHVzZUFzeW5jOiBib29sZWFuKSB7XG4gICAgdGhpcy5fdXNlQXN5bmMgPSB1c2VBc3luYztcbiAgICB0aGlzLmFwcGx5U29ydERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBQbGVhc2UgdXNlIHRoZSBtb3JlIHNwZWNpZmljIHBlcnNpc3RlbmNlQ29uZmlnIGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpIHNldCBzdGF0ZWZ1bChzdGF0ZWZ1bDogYm9vbGVhbikge1xuICAgIHRoaXMucGVyc2lzdGVuY2VDb25maWcgPSB7XG4gICAgICBwZXJzaXN0U29ydDogc3RhdGVmdWwsXG4gICAgICBwZXJzaXN0RmlsdGVyOiBzdGF0ZWZ1bCxcbiAgICAgIHBlcnNpc3RQYWdlU2l6ZTogc3RhdGVmdWwsXG4gICAgfTtcbiAgfVxuXG4gIEBJbnB1dCgpIHBlcnNpc3RlbmNlQ29uZmlnOiBEYXRhVGFibGVQZXJzaXN0ZW5jZUNvbmZpZ3VyYXRpb24gPSB7XG4gICAgcGVyc2lzdFNvcnQ6IGZhbHNlLFxuICAgIHBlcnNpc3RGaWx0ZXI6IGZhbHNlLFxuICAgIHBlcnNpc3RQYWdlU2l6ZTogZmFsc2UsXG4gIH07XG5cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHRhYmxlRGF0YTogYW55O1xuICBASW5wdXQoKSBpZEdlbmVyYXRvcjogYW55O1xuICBASW5wdXQoKSBwYXJlbnRJZEdlbmVyYXRvcjogYW55O1xuXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0OiBTb3J0O1xuICBASW5wdXQoKSBleHRlcm5hbEZpbHRlcjogYW55O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwYWdlOiBQYWdlRXZlbnQgPSB7IHBhZ2VJbmRleDogMCwgcGFnZVNpemU6IDUwLCBsZW5ndGg6IDAgfTtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zID0gWzUsIDEwLCAxNV07XG5cbiAgQElucHV0KCkgYWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0aW9uRW1pdFR5cGU6IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRUeXBlID0gJ0lEJztcbiAgQElucHV0KCkgc2hvd0RlbGV0ZUZpbHRlckFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGRpc2FibGVSb3dDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGRlbGV0ZURlZmluaXRpb25BbGxvd2VkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbihzZWxlY3Rpb246IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Nb2RlbChzZWxlY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIFBsZWFzZSB1c2UgXCJmaWx0ZXJNb2RlXCIgaW5zdGVhZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGZpbHRlckVuYWJsZWQoaXNGaWx0ZXJFbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZmlsdGVyTW9kZSA9IGlzRmlsdGVyRW5hYmxlZCA/ICdUQUJMRV9CQVNFRCcgOiAnTk9ORSc7XG4gICAgdGhpcy5hcHBseUZpbHRlclByZWRpY2F0ZSgpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlck1vZGUoZmlsdGVyTW9kZTogRGF0YVRhYmxlRmlsdGVyTW9kZSkge1xuICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBmaWx0ZXJNb2RlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJQcmVkaWNhdGUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXJWYWx1ZShmaWx0ZXJWYWx1ZTogc3RyaW5nIHwgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZmlsdGVyVmFsdWUgPSBmaWx0ZXJWYWx1ZTtcbiAgICB0aGlzLmFwcGx5RmlsdGVyVmFsdWUodGhpcy5fZmlsdGVyVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGV4dGVybmFsUGFnaW5hdG9yKHBhZ2luYXRvcjogYW55KSB7XG4gICAgdGhpcy5leHRQYWdpbmF0b3IgPSBwYWdpbmF0b3I7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGVmYXVsdFBhZ2VTaXplKGRlZmF1bHRTaXplOiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2UgPSB7XG4gICAgICAuLi50aGlzLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogZGVmYXVsdFNpemUsXG4gICAgfTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb25FbWl0TW9kZShzZWxlY3Rpb25FbWl0TW9kZTogRGF0YVRhYmxlU2VsZWN0aW9uRW1pdE1vZGUpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25FbWl0TW9kZSA9IHNlbGVjdGlvbkVtaXRNb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIFRoaXMgZnVuY3Rpb24gbWl4ZXMgdXAgMiByZXNwb25zaWJpbGl0aWVzOlxuICAgKiAgLSBkZXRlcm1pbmluZyBpZiBhY3Rpb25zIHNob3VsZCBiZSBkaXNwbGF5ZWQgLyBoYW5kbGVkXG4gICAqICAtIGRldGVybWluaW5nIHdoZXRoZXIgYWN0aW9ucyBhcmUgcm93IGJhc2VkIChzaW5nbGUpIG9yIHRhYmxlIGJhc2VkIChiYXRjaClcbiAgICogUGxlYXNlIHVzZSBhIGNvbWJpbmF0aW9uIG9mIFwic2VsZWN0aW9uRW1pdE1vZGVcIiBhbmQgXCJzZWxlY3Rpb25Nb2RlXCIgaW5zdGVhZDpcbiAgICogIC0gc2VsZWN0aW9uRW1pdE1vZGUgZGV0ZXJtaW5lcyBob3cgc2VsZWN0ZWQgaXRlbXMgYXJlIGhhbmRsZWQgKGFzIHBhcnQgb2YgYWN0aW9ucywgYXMgc2VsZWN0aW9ucyBvciBub3QgYXQgYWxsKVxuICAgKiAgLSBzZWxlY3Rpb25Nb2RlIGRldGVybWluZXMgaWYgc2VsZWN0ZWQgaXRlbXMgYXJlIHRyZWF0ZWQgc2VwYXJhdGVseSAoc2luZ2xlKSBvciB0b2dldGhlciAoYmF0Y2gpXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZm9yY2VNb2RlKHNlbGVjdGlvbk1vZGU6IHN0cmluZykge1xuICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnU0lOR0xFJyB8fCBzZWxlY3Rpb25Nb2RlID09PSAnQkFUQ0gnKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25FbWl0TW9kZSA9ICdPTl9BQ1RJT04nO1xuICAgICAgdGhpcy5fZm9yY2VTZWxlY3Rpb25Nb2RlID0gPERhdGFUYWJsZVNlbGVjdGlvbk1vZGU+c2VsZWN0aW9uTW9kZTtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcmNlU2VsZWN0aW9uTW9kZShzZWxlY3Rpb25Nb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlKSB7XG4gICAgdGhpcy5fZm9yY2VTZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZTtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRpc3BsYXllZENvbHVtbnMoY29sczogRGF0YVRhYmxlQ29sdW1uW10pIHtcbiAgICBpZiAoIXRoaXMuZGlzcGxheWVkQ29sdW1uRGVmaW5pdGlvbikge1xuICAgICAgdGhpcy5jb2x1bW5zID0gY29scyA/IFsuLi5jb2xzXSA6IFtdO1xuICAgICAgdGhpcy5jb2x1bW5JZHMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5pZCk7XG4gICAgICB0aGlzLmNvbHVtbklkcy51bnNoaWZ0KHRoaXMuQUNUSU9OX0NPTFVNTl9OQU1FKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGlzcGxheWVkQ29sdW1uRGVmaW5pdGlvbihkZWY6IERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb24pIHtcbiAgICB0aGlzLmNvbHVtbnMgPSBkZWYuZGlzcGxheWVkQ29sdW1ucztcbiAgICB0aGlzLmNvbHVtbklkcyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKTtcbiAgICB0aGlzLmNvbHVtbklkcy51bnNoaWZ0KHRoaXMuQUNUSU9OX0NPTFVNTl9OQU1FKTtcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24gPSBkZWY7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgY29sdW1uRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnM6IERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb25bXSkge1xuICAgIHRoaXMuZWRpdGFibGVDb2x1bW5EZWZpbml0aW9ucyA9IFtdO1xuICAgIHRoaXMudmlld2FibGVDb2x1bW5EZWZpbml0aW9ucyA9IFtdO1xuICAgIHRoaXMuX2FsbENvbHVtbkRlZmluaXRpb25zID0gWy4uLmRlZmluaXRpb25zXTtcbiAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgZGVmaW5pdGlvbnMpIHtcbiAgICAgIGlmIChkZWZpbml0aW9uLmVkaXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5EZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluaXRpb24uZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnMucHVzaChkZWZpbml0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzZXQgYWxsQ29sdW1ucyhhbGxDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2FsbEF2YWlsYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zO1xuICAgIGlmIChhbGxDb2x1bW5zICYmIHRoaXMuX3Nob3dDb2x1bW5Nb2RhbCkge1xuICAgICAgdGhpcy5vcGVuQ29sdW1uTW9kYWwoKTtcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCkgYWN0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUFjdGlvbj4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICBAT3V0cHV0KCkgc29ydEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xuICBAT3V0cHV0KCkgZmlsdGVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZD4oKTtcbiAgQE91dHB1dCgpIHBhZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKSBhbGxDb2x1bW5zRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5EZWZpbml0aW9uQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb25DaGFuZ2U+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RGVmaW5pdGlvbkNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uPigpO1xuXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgLy8gd2UgbmVlZCB0byBoYXZlIHRoaXMgYXMgYSBzZXR0ZXIgZHVlIHRvIHRoZSAqbmdJZiBpdCBpcyBpblxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNldCBtYXRTb3J0KG1hdFNvcnQ6IE1hdFNvcnQpIHtcbiAgICB0aGlzLl9zb3J0ID0gbWF0U29ydDtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuX3NvcnQ7XG4gIH1cbiAgQFZpZXdDaGlsZChEYXRhVGFibGVGaWx0ZXIpIGZpbHRlcjogRGF0YVRhYmxlRmlsdGVyO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0YVRhYmxlVGVtcGxhdGVDb2x1bW5EZWZpbml0aW9uKVxuICBzZXQgY29sdW1uRGVmcyhjb2x1bW5EZWZzOiBRdWVyeUxpc3Q8RGF0YVRhYmxlVGVtcGxhdGVDb2x1bW5EZWZpbml0aW9uPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbHVtbkRlZnMgPSBjb2x1bW5EZWZzO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbkRlZnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkRlZnM7XG4gIH1cblxuICBAQ29udGVudENoaWxkKERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNlbGxEZWZpbml0aW9uKVxuICBzZXQgZXhwYW5kYWJsZURlZihleHBhbmRhYmxlRGVmOiBEYXRhVGFibGVUZW1wbGF0ZUV4cGFuZGFibGVDZWxsRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2V4cGFuZGFibGVEZWYgPSBleHBhbmRhYmxlRGVmO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGV4cGFuZGFibGVEZWYoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGFuZGFibGVEZWY7XG4gIH1cblxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55W10+O1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIGV4dFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIHJlYWRvbmx5IEFDVElPTl9DT0xVTU5fTkFNRSA9ICdfX2FjdGlvbl9fJztcbiAgdGFibGVBY3Rpb25zOiBEYXRhVGFibGVBY3Rpb25bXVtdID0gW107XG4gIHJvd0FjdGlvbnM6IERhdGFUYWJsZUFjdGlvbltdID0gW107XG5cbiAgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10gPSBbXTtcbiAgY29sdW1uSWRzOiBzdHJpbmdbXTtcblxuICBleHBhbmRlZEVsZW1lbnQ6IERhdGFUYWJsZUNvbHVtbiB8IG51bGw7XG5cbiAgZWRpdGFibGVDb2x1bW5EZWZpbml0aW9uczogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbltdO1xuICB2aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uW107XG5cbiAgcHJpdmF0ZSBfdXNlQXN5bmM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9yb3dNYXAgPSBuZXcgTWFwPHN0cmluZywgRGF0YVRhYmxlUm93PigpO1xuICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KHRydWUpO1xuICBwcml2YXRlIF9zZWxlY3Rpb246IHN0cmluZ1tdIHwgYW55W107XG5cbiAgcHJpdmF0ZSBfc29ydDogTWF0U29ydDtcblxuICBwcml2YXRlIF9mb3JjZVNlbGVjdGlvbk1vZGU6IERhdGFUYWJsZVNlbGVjdGlvbk1vZGU7XG4gIHByaXZhdGUgX3NlbGVjdGlvbkVtaXRNb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25FbWl0TW9kZSA9ICdOT05FJztcbiAgcHJpdmF0ZSBfZmlsdGVyTW9kZTogRGF0YVRhYmxlRmlsdGVyTW9kZSA9ICdOT05FJztcbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWU6IHN0cmluZyB8IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9hbGxDb2x1bW5EZWZpbml0aW9uczogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbltdID0gW107XG4gIHByaXZhdGUgX2FsbEF2YWlsYWJsZUNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdO1xuICBwcml2YXRlIF9zZWxlY3RlZENvbHVtbkRlZmluaXRpb246IERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb247XG4gIHByaXZhdGUgX3Nob3dDb2x1bW5Nb2RhbCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2NvbHVtbkRlZnM6IFF1ZXJ5TGlzdDxEYXRhVGFibGVUZW1wbGF0ZUNvbHVtbkRlZmluaXRpb24+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9leHBhbmRhYmxlRGVmOiBEYXRhVGFibGVUZW1wbGF0ZUV4cGFuZGFibGVDZWxsRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIEBJbmplY3QoTUFEX0RBVEFfVEFCTEVfUEVSU0lTVEVOQ0VfU0VSVklDRSkgcHJpdmF0ZSBwZXJzaXN0ZW5jZVNlcnZpY2U6IERhdGFUYWJsZVBlcnNpc3RlbmNlU2VydmljZSxcbiAgICBASW5qZWN0KE1BRF9EQVRBX1RBQkxFX0dMT0JBTF9DT05GSUdVUkFUSU9OKSBwcml2YXRlIGRhdGFUYWJsZUdsb2JhbENvbmZpZzogRGF0YVRhYmxlR2xvYmFsQ29uZmlndXJhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl91c2VBc3luYykge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLl9zb3J0O1xuICAgIH1cbiAgICB0aGlzLmFwcGx5U29ydERhdGEoKTtcbiAgICB0aGlzLmluaXRTdGF0ZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgndGFibGVEYXRhJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFUYWJsZURhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uTW9kZWwodGhpcy5nZXRTZWxlY3Rpb24oJ0lEJykubGVuZ3RoID8gdGhpcy5nZXRTZWxlY3Rpb24oJ0lEJykgOiB0aGlzLl9zZWxlY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuc2hvd0FsbCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRvcigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ2lkR2VuZXJhdG9yJyBpbiBjaGFuZ2VzIHx8ICdkaXNwbGF5ZWRDb2x1bW5zJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFUYWJsZURhdGEoKTtcbiAgICB9XG5cbiAgICAvLyBwZXJmb3JtYW5jZSByZWFzb25zIChzYW1lIGJlaGF2aW91ciBjb3VsZCBiZSBhY2hpdmVkIGluIGdldHRlcnMpXG4gICAgaWYgKCdmb3JjZU1vZGUnIGluIGNoYW5nZXMgfHwgJ2ZvcmNlU2VsZWN0aW9uTW9kZScgaW4gY2hhbmdlcyB8fCAnYWN0aW9ucycgaW4gY2hhbmdlcykge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IERhdGFUYWJsZUFjdGlvblV0aWwuZ2V0RGlzcGxheUFjdGlvbnModGhpcy5hY3Rpb25zLCB0aGlzLnNlbGVjdGlvbk1vZGUpO1xuICAgICAgdGhpcy5yb3dBY3Rpb25zID0gYWN0aW9ucy5yb3dBY3Rpb25zO1xuICAgICAgdGhpcy50YWJsZUFjdGlvbnMgPSBhY3Rpb25zLmdyb3VwZWRUYWJsZUFjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRBQkxFIERJU1BMQVkgSEFORExJTkcgKi9cblxuICBwdWJsaWMgZ2V0RGF0YVRhYmxlSGVhZGVyVHlwZShjb2x1bW46IERhdGFUYWJsZUNvbHVtbik6IERhdGFUYWJsZUhlYWRlclR5cGUge1xuICAgIGlmIChjb2x1bW4uaXNTb3J0YWJsZSAmJiAhY29sdW1uLmlzRmlsdGVyYWJsZSkge1xuICAgICAgcmV0dXJuICdTT1JUJztcbiAgICB9XG4gICAgaWYgKCFjb2x1bW4uaXNTb3J0YWJsZSAmJiBjb2x1bW4uaXNGaWx0ZXJhYmxlKSB7XG4gICAgICByZXR1cm4gJ0ZJTFRFUic7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uaXNTb3J0YWJsZSAmJiBjb2x1bW4uaXNGaWx0ZXJhYmxlKSB7XG4gICAgICByZXR1cm4gJ1NPUlRfQU5EX0ZJTFRFUic7XG4gICAgfVxuICAgIHJldHVybiAnUExBSU4nO1xuICB9XG5cbiAgcHVibGljIGdldEN1c3RvbUNlbGxUZW1wbGF0ZShjb2x1bW5JZDogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIGNvbnN0IGNvbHVtbkRlZiA9IHRoaXMuX2NvbHVtbkRlZnM/LmZpbmQoKGl0KSA9PiBpdC5tYWRDb2x1bW5EZWYgPT09IGNvbHVtbklkKTtcbiAgICByZXR1cm4gY29sdW1uRGVmICYmIGNvbHVtbkRlZi5jZWxsRGVmID8gY29sdW1uRGVmLmNlbGxEZWYuZ2V0Q2VsbFRlbXBsYXRlKCkgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldEN1c3RvbUV4cGFuZGFibGVUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGFuZGFibGVEZWY/LmdldENlbGxUZW1wbGF0ZSgpIHx8IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4cGFuZGFibGVDb2x1bW5EZWYoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGFuZGFibGVEZWY/LmNvbHVtbkRlZi5tYWRFeHBhbmRhYmxlQ29sdW1uRGVmIHx8ICcnO1xuICB9XG5cbiAgcHVibGljIG9uRXhwYW5kKGV2ZW50OiBNb3VzZUV2ZW50LCBlbGVtZW50OiBEYXRhVGFibGVDb2x1bW4pIHtcbiAgICB0aGlzLmV4cGFuZGVkRWxlbWVudCA9IHRoaXMuZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50ID8gbnVsbCA6IGVsZW1lbnQ7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKiogQUNUSU9OIEJVVFRPTiBESVNQTEFZIEhBTkRMSU5HICovXG5cbiAgcHVibGljIGhhc1Zpc2libGVSb3dBY3Rpb25zKGRpc3BsYXllZERhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5yb3dBY3Rpb25zLmV2ZXJ5KChhY3Rpb24pID0+IHRoaXMuaXNIaWRkZW5Gb3JEYXRhKGFjdGlvbiwgW3RoaXMuX3Jvd01hcC5nZXQoZGlzcGxheWVkRGF0YS5yb3dJZCk/LmFjdHVhbERhdGFdKSk7XG4gIH1cblxuICBwdWJsaWMgaXNIaWRkZW4oYWN0aW9uOiBEYXRhVGFibGVBY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0hpZGRlbkZvckRhdGEoYWN0aW9uLCB0aGlzLmdldFNlbGVjdGlvbignREFUQScpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNIaWRkZW5Gb3JEYXRhKGFjdGlvbjogRGF0YVRhYmxlQWN0aW9uLCBkYXRhOiBhbnlbXSkge1xuICAgIHJldHVybiAhIWFjdGlvbi5pc0hpZGRlbiAmJiBhY3Rpb24uaXNIaWRkZW4oZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgaXNEaXNhYmxlZChhY3Rpb246IERhdGFUYWJsZUFjdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWRGb3JBY3Rpb25UeXBlKGFjdGlvbi50eXBlKSB8fCAoISFhY3Rpb24uaXNEaXNhYmxlZCAmJiBhY3Rpb24uaXNEaXNhYmxlZCh0aGlzLmdldFNlbGVjdGlvbignREFUQScpKSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZWRGb3JBY3Rpb25UeXBlKGFjdGlvblR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoYWN0aW9uVHlwZSkge1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3VudCAhPT0gMTtcbiAgICAgIGNhc2UgJ0JBVENIJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3VudCA8IDE7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQ291bnQoYWN0aW9uVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuc2VsZWN0ZWRDb3VudDtcbiAgICBpZiAoYWN0aW9uVHlwZSAhPT0gJ0JBVENIJyB8fCBjb3VudCA8IDIpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGAgKCR7Y291bnR9KWA7XG4gIH1cblxuICBwcml2YXRlIGdldCBzZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsPy5zZWxlY3RlZCA/IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aCA6IDA7XG4gIH1cblxuICAvKiogVEFCTEUgREFUQSBDSEFOR0UgSEFORExJTkcgKi9cblxuICBwcml2YXRlIHVwZGF0ZURhdGFUYWJsZURhdGEoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90IG1ha2UgdGhpcyBmdW5jdGlvbiBpbW11dGFibGUgLSB3ZSBkZXNwYXJhdGVseSBuZWVkIHRoZSByZWZlcmVuY2Ugb2Ygcm93TWFwIHRvIHN0YXkgdGhlIHNhbWVcbiAgICBEYXRhVGFibGVEYXRhVXRpbC51cGRhdGVSb3dNYXAodGhpcy5fcm93TWFwLCB0aGlzLnRhYmxlRGF0YSwgdGhpcy5jb2x1bW5zLCB0aGlzLmlkR2VuZXJhdG9yLCB0aGlzLnBhcmVudElkR2VuZXJhdG9yKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IEFycmF5LmZyb20odGhpcy5fcm93TWFwLnZhbHVlcygpKS5tYXAoKGl0KSA9PiBpdC5kaXNwbGF5ZWREYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uTW9kZWwoc2VsZWN0aW9uOiBzdHJpbmdbXSB8IGFueVtdKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICBzZWxlY3Rpb24/LmZvckVhY2goKGl0KSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fcm93TWFwLmdldChpdCkgfHwgWy4uLnRoaXMuX3Jvd01hcC52YWx1ZXMoKV0uZmluZCgocm93KSA9PiByb3cuYWN0dWFsRGF0YSA9PT0gaXQpO1xuICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uRXZlbnQoaXRlbS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICAvKiogQUNUSU9OICYgU0VMRUNUSU9OIEhBTkRMSU5HICovXG5cbiAgcHVibGljIGdldCBzZWxlY3Rpb25FbWl0TW9kZSgpOiBEYXRhVGFibGVTZWxlY3Rpb25FbWl0TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkVtaXRNb2RlID09PSAnTk9ORScgJiYgISF0aGlzLmFjdGlvbnMubGVuZ3RoID8gJ09OX0FDVElPTicgOiB0aGlzLl9zZWxlY3Rpb25FbWl0TW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9uTW9kZSgpOiBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlIHtcbiAgICByZXR1cm4gISF0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgPyB0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgOiB0aGlzLmFjdGlvbnMuZmluZCgoaXQpID0+IGl0LnR5cGUgPT09ICdCQVRDSCcpID8gJ0JBVENIJyA6ICdTSU5HTEUnO1xuICB9XG5cbiAgLy8gZ2V0IGZpbHRlcmVkICYgc29ydGVkIGRhdGEgb2YgdGhlIGN1cnJlbnQgcGFnZVxuICBwdWJsaWMgZ2V0IGRpc3BsYXllZERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2U/Ll9wYWdlRGF0YSh0aGlzLmRhdGFTb3VyY2U/LnNvcnREYXRhKHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEsIHRoaXMuZGF0YVNvdXJjZS5zb3J0KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dBY3Rpb25Db2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodGhpcy5zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ05PTkUnIHx8IHRoaXMuaGlkZUFjdGlvbkNvbHVtbikgfHwgISF0aGlzLl9leHBhbmRhYmxlRGVmO1xuICB9XG5cbiAgcHVibGljIHNob3dDaGVja2JveChkaXNwbGF5ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWRpc3BsYXllZERhdGEucGFyZW50SWQgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnQkFUQ0gnICYmICF0aGlzLmhpZGVBY3Rpb25Db2x1bW47XG4gIH1cblxuICBwdWJsaWMgc2hvd1Jvd0FjdGlvbkljb24oZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFkaXNwbGF5ZWREYXRhLnBhcmVudElkICYmIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9BQ1RJT04nICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ1NJTkdMRScgJiYgIXRoaXMuaGlkZUFjdGlvbkNvbHVtbjtcbiAgfVxuXG4gIHB1YmxpYyBzaG93UmFkaW9CdXR0b24oZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFkaXNwbGF5ZWREYXRhLnBhcmVudElkICYmIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9TRUxFQ1RJT04nICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ1NJTkdMRSc7XG4gIH1cblxuICBwdWJsaWMgc2hvd0V4cGFuZGFibGVCdXR0b24oZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFkaXNwbGF5ZWREYXRhLnBhcmVudElkICYmICEhdGhpcy5fZXhwYW5kYWJsZURlZjtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKHJvd0lkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyb3dJZCk7XG4gIH1cblxuICBwdWJsaWMgb25Ub2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgLy8gY2xlYXIgYWxsIHNlbGVjdGlvbiBmaXJzdFxuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgLy8gdG9nZ2xlIGFsbCBjaGVja2JveFxuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSAhdGhpcy5hbGxTZWxlY3RlZDtcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCkge1xuICAgICAgLy8gc2VsZWN0IGFsbCByb3dzIG9mIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgIHRoaXMuZGlzcGxheWVkRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKCFyb3cucGFyZW50SWQpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qocm93LnJvd0lkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uQWN0aW9uRXZlbnQoYWN0aW9uOiBEYXRhVGFibGVBY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBlbWl0QWN0aW9uID0geyAuLi5hY3Rpb24gfTtcbiAgICBpZiAoISFlbWl0QWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgIT09ICdOT05FJykge1xuICAgICAgZW1pdEFjdGlvbi5zZWxlY3RlZCA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uRW1pdFR5cGUpO1xuICAgICAgdGhpcy5hY3Rpb25FdmVudC5lbWl0KGVtaXRBY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGlvbkV2ZW50KGlkOiBhbnkpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uTW9kZSkge1xuICAgICAgY2FzZSAnQkFUQ0gnOlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGUoaWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NJTkdMRSc6XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblJvd0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50LCByb3c6IGFueSwgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdOT05FJyB8fCByb3c/LnBhcmVudElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vblNlbGVjdGlvbkV2ZW50KHJvdy5yb3dJZCk7XG4gICAgdGhpcy5wcm9jZXNzU2VsZWN0aW9uKGV2ZW50LCBhY3Rpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEFjdGlvbigpOiBEYXRhVGFibGVBY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlICE9PSAnTk9ORScgPyB0aGlzLnJvd0FjdGlvbnNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBoaWRlQWN0aW9uQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fQUNUSU9OJyAmJiB0aGlzLmFjdGlvbnMuZXZlcnkoKGl0KSA9PiBpdC50eXBlID09PSAnTk9ORScpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2VsZWN0aW9uKGV2ZW50OiBNb3VzZUV2ZW50LCBhY3Rpb24/OiBEYXRhVGFibGVBY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fQUNUSU9OJyAmJlxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnU0lOR0xFJyAmJlxuICAgICAgISFhY3Rpb24gJiZcbiAgICAgICFEYXRhVGFibGVDb21wb25lbnQuaXNDbGlja09uUm93TWVudUljb24oZXZlbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQWN0aW9uRXZlbnQoYWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ09OX1NFTEVDVElPTicpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uRXZlbnQuZW1pdCh0aGlzLmdldFNlbGVjdGlvbih0aGlzLnNlbGVjdGlvbkVtaXRUeXBlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3Rpb24oc2VsZWN0aW9uRW1pdFR5cGU6IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRUeXBlKTogYW55W10ge1xuICAgIGNvbnN0IHNlbGVjdGlvbjogYW55W10gPSBbXTtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5mb3JFYWNoKChpdCkgPT5cbiAgICAgIC8vIGlmIElELWdlbmVyYXRvciBpcyBwcm92aWRlZCwgcmV0dXJuIHRoZSBJRCwgZWxzZSByZXR1cm4gdGhlIEFDVFVBTCBkYXRhXG4gICAgICBzZWxlY3Rpb24ucHVzaCh0aGlzLmlkR2VuZXJhdG9yICYmIHNlbGVjdGlvbkVtaXRUeXBlID09PSAnSUQnID8gaXQgOiB0aGlzLl9yb3dNYXAuZ2V0KGl0KT8uYWN0dWFsRGF0YSksXG4gICAgKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0NsaWNrT25Sb3dNZW51SWNvbihldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmNsYXNzTGlzdC5jb250YWlucygnbWF0LWljb24nKTtcbiAgfVxuXG4gIC8qKiBTT1JUIEhBTkRMSU5HICovXG5cbiAgb25Tb3J0aW5nRXZlbnQoc29ydDogU29ydCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91c2VBc3luYykge1xuICAgICAgdGhpcy5zb3J0RXZlbnQuZW1pdChzb3J0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZUNvbmZpZy5wZXJzaXN0U29ydCkge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2Uuc2F2ZVNvcnQodGhpcy5pZCwgc29ydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNvcnREYXRhKCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSA9IHRoaXMuX3VzZUFzeW5jXG4gICAgICA/IERhdGFUYWJsZVNvcnRVdGlsLnNvcnROb3RoaW5nKClcbiAgICAgIDogRGF0YVRhYmxlU29ydFV0aWwuc29ydERhdGEoWy4uLnRoaXMuZGF0YVRhYmxlR2xvYmFsQ29uZmlnLmRhdGVUaW1lRm9ybWF0XSwgdGhpcy5kYXRhVGFibGVHbG9iYWxDb25maWcubnVtYmVyRm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBGSUxURVIgSEFORExJTkcgKi9cblxuICBwdWJsaWMgZ2V0IGZpbHRlck1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZUFzeW5jICYmIHRoaXMuX2ZpbHRlck1vZGUgPT09ICdUQUJMRV9CQVNFRCcgPyAnTk9ORScgOiB0aGlzLl9maWx0ZXJNb2RlO1xuICB9XG5cbiAgcHVibGljIG9uVGFibGVCYXNlZEZpbHRlckV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJpbmdFdmVudCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbHVtbkJhc2VkRmlsdGVyRXZlbnQoZmlsdGVyOiBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uRmlsdGVyaW5nRXZlbnQoZmlsdGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlbGV0ZUZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLm9uRmlsdGVyaW5nRXZlbnQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmZpbHRlci51cGRhdGVGaWx0ZXJhYmxlcyh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbHRlcmluZ0V2ZW50KGZpbHRlcjogc3RyaW5nIHwgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLmZpbHRlckV2ZW50LmVtaXQoZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQ29uZmlnLnBlcnNpc3RGaWx0ZXIpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnNhdmVGaWx0ZXIodGhpcy5pZCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyUHJlZGljYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPVxuICAgICAgdGhpcy5maWx0ZXJNb2RlID09PSAnQ09MVU1OX0JBU0VEJ1xuICAgICAgICA/IERhdGFUYWJsZUZpbHRlclV0aWwuY29sdW1uQmFzZWRGaWx0ZXJQcmVkaWNhdGUodGhpcy5fcm93TWFwKVxuICAgICAgICA6IERhdGFUYWJsZUZpbHRlclV0aWwudGFibGVCYXNlZEZpbHRlclByZWRpY2F0ZSgpO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJWYWx1ZSh0aGlzLl9maWx0ZXJWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZyB8IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHRoaXMuX2ZpbHRlclZhbHVlID09PSAnc3RyaW5nJztcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gISF2YWx1ZSA/IChpc1N0cmluZyA/IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpKSA6ICcnO1xuICB9XG5cbiAgLyoqIFBBR0lOQVRJT04gSEFORExJTkcgKi9cblxuICBvblBhZ2VFdmVudChldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLnBhZ2VFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZUNvbmZpZy5wZXJzaXN0UGFnZVNpemUpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnNhdmVQYWdlU2l6ZSh0aGlzLmlkLCBldmVudC5wYWdlU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGwgPyAwIDogdGhpcy5wYWdlLnBhZ2VJbmRleDtcbiAgfVxuXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGwgPyB0aGlzLmRhdGFMZW5ndGggOiB0aGlzLnBhZ2UucGFnZVNpemU7XG4gIH1cblxuICBnZXQgcGFnZUxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGwgPyB0aGlzLmRhdGFMZW5ndGggOiB0aGlzLnBhZ2UubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0b3IoKSB7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlLmVtaXQodGhpcy5wYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBkYXRhTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5kYXRhPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNob3dBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl91c2VBc3luYyAmJiAhdGhpcy5wYWdpbmF0aW9uRW5hYmxlZDtcbiAgfVxuXG4gIC8qKiBJTklUIFNUQVRFICovXG5cbiAgcHJpdmF0ZSBpbml0U3RhdGUoKTogdm9pZCB7XG4gICAgLy8gb25seSBzZXQgZGVmYXVsdCBzb3J0IGlmIHRoZXJlIGlzIG5vIG90aGVyIHNvcnQgcGVyc2lzdGVkXG4gICAgaWYgKCEhdGhpcy5kZWZhdWx0U29ydCAmJiAhdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UubG9hZFNvcnQodGhpcy5pZCk/LmRpcmVjdGlvbikge1xuICAgICAgdGhpcy5zZXRTb3J0KHRoaXMuZGVmYXVsdFNvcnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQ29uZmlnLnBlcnNpc3RTb3J0KSB7XG4gICAgICB0aGlzLmluaXRTb3J0U3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVyc2lzdGVuY2VDb25maWcucGVyc2lzdEZpbHRlcikge1xuICAgICAgdGhpcy5pbml0RmlsdGVyU3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVyc2lzdGVuY2VDb25maWcucGVyc2lzdFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLmluaXRQYWdpbmF0b3JTdGF0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U29ydFN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkU29ydCh0aGlzLmlkKTtcbiAgICBpZiAoISFzb3J0KSB7XG4gICAgICB0aGlzLnNldFNvcnQoc29ydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRTb3J0KHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zb3J0LmFjdGl2ZSA9IHNvcnQuYWN0aXZlO1xuICAgIHRoaXMuX3NvcnQuZGlyZWN0aW9uID0gc29ydC5kaXJlY3Rpb247XG4gICAgdGhpcy5fc29ydC5zb3J0Q2hhbmdlLmVtaXQoc29ydCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWx0ZXJTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkRmlsdGVyKHRoaXMuaWQpO1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZUZpbHRlcmFibGVzKGZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGluaXRQYWdpbmF0b3JTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2UgPSB7XG4gICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UubG9hZFBhZ2VTaXplKHRoaXMuaWQpIHx8IHRoaXMucGFnZVNpemUsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yKCk7XG4gIH1cblxuICAvKiogQ09MVU1OIEhBTkRMSU5HICovXG5cbiAgcHVibGljIG9uVmlld0RlZmluaXRpb24oZGVmaW5pdGlvbjogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG4gICAgdGhpcy52aWV3RGVmaW5pdGlvbkNoYW5nZUV2ZW50LmVtaXQoZGVmaW5pdGlvbik7XG4gIH1cblxuICBwdWJsaWMgb25Db2x1bW5TZXR0aW5ncyhkZWZpbml0aW9uPzogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3Nob3dDb2x1bW5Nb2RhbCA9IHRydWU7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uID0gZGVmaW5pdGlvbiA/IGRlZmluaXRpb24gOiB0aGlzLl9hbGxDb2x1bW5EZWZpbml0aW9uc1swXTtcbiAgICBpZiAodGhpcy5fYWxsQXZhaWxhYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy5vcGVuQ29sdW1uTW9kYWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgbm8gY29tcGxldGUgZGVmaW5pdGlvbnMgaGF2ZSBiZWVuIGxvYWRlZCB5ZXQgc2VuZCBhbiBldmVudCBzbyB0aGUgYXBwIGNhbiBsb2FkIGl0XG4gICAgICB0aGlzLmFsbENvbHVtbnNFdmVudC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQ3VycmVudERlZmluaXRpb24oZGVmaW5pdGlvbjogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24gJiYgdGhpcy5fc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uLmlkID09PSBkZWZpbml0aW9uLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ29sdW1uTW9kYWwoKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nRGF0YTogRGF0YVRhYmxlRGlhbG9nRGF0YSA9IHtcbiAgICAgIGFsbENvbHVtbnM6IHRoaXMuX2FsbEF2YWlsYWJsZUNvbHVtbnMsXG4gICAgICBkZWZpbml0aW9uOiB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24sXG4gICAgICBkZWxldGVEZWZpbml0aW9uQWxsb3dlZDogdGhpcy5kZWxldGVEZWZpbml0aW9uQWxsb3dlZCxcbiAgICAgIGZpbHRlckNvbHVtbnNMYWJlbDogdGhpcy5maWx0ZXJDb2x1bW5zTGFiZWwsXG4gICAgICBmaWx0ZXJDb2x1bW5zUGxhY2VIb2xkZXI6IHRoaXMuZmlsdGVyQ29sdW1uc1BsYWNlSG9sZGVyLFxuICAgICAgbm9EYXRhVGV4dDogdGhpcy5ub0RhdGFUZXh0LFxuICAgICAgdGl0bGVMYWJlbDogdGhpcy5jb2x1bW5TZXR0aW5nc01vZGFsVGl0bGVMYWJlbCxcbiAgICAgIHNlbGVjdGVkTGFiZWw6IHRoaXMuc2VsZWN0ZWRMYWJlbCxcbiAgICAgIGF2YWlsYWJsZUxhYmVsOiB0aGlzLmF2YWlsYWJsZUxhYmVsLFxuICAgICAgc2F2ZUxhYmVsOiB0aGlzLnNhdmVMYWJlbCxcbiAgICAgIGRlbGV0ZUxhYmVsOiB0aGlzLmRlbGV0ZUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IHRoaXMuY2FuY2VsTGFiZWwsXG4gICAgICBpbmZvVGV4dExhYmVsOiB0aGlzLmluZm9UZXh0TGFiZWwsXG4gICAgfTtcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLm1hdERpYWxvZy5vcGVuKERhdGFUYWJsZUNvbHVtbnNNb2RhbENvbXBvbmVudCwgeyBkYXRhOiBkaWFsb2dEYXRhIH0pO1xuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAvLyBubyBldmVudCBvbiBDQU5DRUxcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZpbml0aW9uQ2hhbmdlRXZlbnQuZW1pdChyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGRhdGEtY3k9XCJ0YWJsZS1hY3Rpb24tYmFyXCIgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWFjdGlvbi1iYXJcIj5cbiAgPCEtLSBUYWJsZSBhY3Rpb25zOiBkaXNwbGF5ZWQgYmVmb3JlIHRoZSB0YWJsZSAtLT5cbiAgPGRpdiAqbmdJZj1cInRhYmxlQWN0aW9ucz8ubGVuZ3RoIHx8IChmaWx0ZXJNb2RlID09PSAnQ09MVU1OX0JBU0VEJyAmJiBzaG93RGVsZXRlRmlsdGVyQWN0aW9uKVwiPlxuICAgIDxtYWQtYnV0dG9uLWdyb3VwICpuZ0Zvcj1cImxldCBhY3Rpb25Hcm91cCBvZiB0YWJsZUFjdGlvbnNcIiBjbGFzcz1cInRhYmxlLWFjdGlvbi1ncm91cFwiPlxuICAgICAgPG1hZC1vdXRsaW5lLWJ1dHRvblxuICAgICAgICBbaGlkZGVuXT1cImlzSGlkZGVuKHRhYmxlQWN0aW9uKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKHRhYmxlQWN0aW9uKVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWJsZUFjdGlvbiBvZiBhY3Rpb25Hcm91cFwiXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbkV2ZW50KHRhYmxlQWN0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/ICh0YWJsZUFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiB0YWJsZUFjdGlvbi5sYWJlbCB9fVxuICAgICAgICB7eyBnZXRTZWxlY3RlZENvdW50KHRhYmxlQWN0aW9uLnR5cGUpIH19XG4gICAgICA8L21hZC1vdXRsaW5lLWJ1dHRvbj5cbiAgICA8L21hZC1idXR0b24tZ3JvdXA+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyTW9kZSA9PT0gJ0NPTFVNTl9CQVNFRCcgJiYgc2hvd0RlbGV0ZUZpbHRlckFjdGlvblwiPlxuICAgIDxtYXQtaWNvbiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBjbGFzcz1cImRlbGV0ZS1maWx0ZXItYWN0aW9uXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uRGVsZXRlRmlsdGVyKClcIlxuICAgICAgPmZpbHRlcl9hbHRfb2ZmPC9tYXQtaWNvblxuICAgID5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtZm9ybS1maWVsZCBkYXRhLWN5PVwiZmlsdGVyLWlucHV0XCIgKm5nSWY9XCJmaWx0ZXJNb2RlID09PSAnVEFCTEVfQkFTRUQnXCI+XG4gICAgPG1hdC1sYWJlbD57eyB0cmFuc2xhdGVMYWJlbHMgPyAoZmlsdGVyTGFiZWwgfCB0cmFuc2xhdGUpIDogZmlsdGVyTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXVwKT1cIm9uVGFibGVCYXNlZEZpbHRlckV2ZW50KCRldmVudClcIiBwbGFjZWhvbGRlcj1cInt7IGZpbHRlclBsYWNlaG9sZGVyIH19XCIgLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuXG48IS0tIFJvdyBhY3Rpb24gbWVudSAtLT5cbjxtYXQtbWVudSAjcm93QWN0aW9uTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1lbGVtZW50PVwiZWxlbWVudFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0FjdGlvbiBvZiByb3dBY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGRhdGEtY3k9XCJyb3ctYWN0aW9uLW1lbnUtYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCIhaXNIaWRkZW4ocm93QWN0aW9uKVwiXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgY2xhc3M9XCJyb3ctYWN0aW9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUm93RXZlbnQoJGV2ZW50LCBlbGVtZW50LCByb3dBY3Rpb24pXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQocm93QWN0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChyb3dBY3Rpb24ubGFiZWwgfCB0cmFuc2xhdGUpIDogcm93QWN0aW9uLmxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gZWRpdGFibGUgZGVmaW5pdGlvbiBtZW51IC0tPlxuPG1hdC1tZW51ICNlZGl0YWJsZURlZmluaXRpb25NZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQ+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IGRlZmluaXRpb24gb2YgZWRpdGFibGVDb2x1bW5EZWZpbml0aW9uc1wiXG4gICAgICBtYXQtbWVudS1pdGVtXG4gICAgICBjbGFzcz1cInJvdy1hY3Rpb25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uU2V0dGluZ3MoZGVmaW5pdGlvbilcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnYWN0aXZlLWNvbHVtbi1kZWZpbml0aW9uJzogaXNDdXJyZW50RGVmaW5pdGlvbihkZWZpbml0aW9uKSB9XCJcbiAgICA+XG4gICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAoZGVmaW5pdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBkZWZpbml0aW9uLmxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48IS0tIHZpZXdhYmxlIGRlZmluaXRpb24gbWVudSAtLT5cbjxtYXQtbWVudSAjdmlld2FibGVEZWZpbml0aW9uTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBkZWZpbml0aW9uIG9mIHZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnNcIlxuICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgY2xhc3M9XCJyb3ctYWN0aW9uXCJcbiAgICAgIChjbGljayk9XCJvblZpZXdEZWZpbml0aW9uKGRlZmluaXRpb24pXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZS1jb2x1bW4tZGVmaW5pdGlvbic6IGlzQ3VycmVudERlZmluaXRpb24oZGVmaW5pdGlvbikgfVwiXG4gICAgPlxuICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKGRlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUpIDogZGVmaW5pdGlvbi5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPCEtLSBUYWJsZSAtLT5cbjxkaXZcbiAgKm5nSWY9XCJmaWx0ZXJNb2RlID09PSAnQ09MVU1OX0JBU0VEJyB8fCBzaG93RW1wdHlUYWJsZSB8fCAhIWRhdGFTb3VyY2UuZmlsdGVyZWREYXRhPy5sZW5ndGg7IGVsc2Ugbm9EYXRhXCJcbiAgY2xhc3M9XCJkYXRhdGFibGVcIlxuICBbY2xhc3NdPVwidGFibGVDbGFzc1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLXNwaW5uZXItd3JhcHBlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNTBcIiBbc3Ryb2tlV2lkdGhdPVwiM1wiPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PlxuICA8dGFibGVcbiAgICBbaWRdPVwiaWRcIlxuICAgIG1hdC10YWJsZVxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgIG1hdFNvcnRcbiAgICAobWF0U29ydENoYW5nZSk9XCJvblNvcnRpbmdFdmVudCgkZXZlbnQpXCJcbiAgICBtYWRGaWx0ZXJcbiAgICAobWFkRmlsdGVyQ2hhbmdlKT1cIm9uQ29sdW1uQmFzZWRGaWx0ZXJFdmVudCgkZXZlbnQpXCJcbiAgICBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cIiEhZXhwYW5kYWJsZURlZlwiXG4gID5cbiAgICA8IS0tIFJvdyBhY3Rpb25zIGNvbHVtbi0tPlxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJBQ1RJT05fQ09MVU1OX05BTUVcIj5cbiAgICAgIDx0aCBzY29wZT1cImNvbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbmdDbGFzc109XCJzaG93QWN0aW9uQ29sdW1uID8gJ3Jvdy1hY3Rpb24tY2VsbCcgOiAnbm8tYWN0aW9uLWNlbGwnXCI+XG4gICAgICAgIDwhLS0gQkFUQ0g6IG1hc3RlciBjaGVja2JveCAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGlvbkVtaXRNb2RlICE9PSAnTk9ORScgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ0JBVENIJ1wiIGNsYXNzPVwibWFkLWRhdGF0YWJsZS1jaGVja2JveC1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwib25Ub2dnbGVTZWxlY3RBbGwoKVwiIFtjaGVja2VkXT1cImFsbFNlbGVjdGVkXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBTSU5HTEUgLyBOT05FOiBub3RoaW5nIGluIGhlYWRlciByb3cgLS0+XG4gICAgICA8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbbmdDbGFzc109XCJzaG93QWN0aW9uQ29sdW1uID8gJ3Jvdy1hY3Rpb24tY2VsbCcgOiAnbm8tYWN0aW9uLWNlbGwnXCI+XG4gICAgICAgIDwhLS0gQkFUQ0g6IHJvdyBjaGVja2JveCAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dDaGVja2JveChlbGVtZW50KVwiIGNsYXNzPVwibWFkLWRhdGF0YWJsZS1jaGVja2JveC1jb250YWluZXJcIiAoY2xpY2spPVwib25Sb3dFdmVudCgkZXZlbnQsIGVsZW1lbnQpXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cIm5vLXBvaW50ZXItZXZlbnRzXCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChlbGVtZW50LnJvd0lkKVwiPiA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gU0lOR0xFOiByb3cgYWN0aW9uIG1lbnUgaWNvbiAtLT5cbiAgICAgICAgPG1hZC1pY29uLWJ1dHRvbiBkYXRhLWN5PVwicm93LWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwic2hvd1Jvd0FjdGlvbkljb24oZWxlbWVudCkgJiYgaGFzVmlzaWJsZVJvd0FjdGlvbnMoZWxlbWVudClcIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwieyBlbGVtZW50OiBlbGVtZW50IH1cIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJyb3dBY3Rpb25NZW51XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3Rpb25FdmVudChlbGVtZW50LnJvd0lkKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYWQtaWNvbi1idXR0b24+XG4gICAgICAgIDwhLS0gU0lOR0xFOiByb3cgcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1JhZGlvQnV0dG9uKGVsZW1lbnQpXCIgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWNoZWNrYm94LWNvbnRhaW5lclwiIChjbGljayk9XCJvblJvd0V2ZW50KCRldmVudCwgZWxlbWVudClcIj5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm5vLXBvaW50ZXItZXZlbnRzXCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChlbGVtZW50LnJvd0lkKVwiPiA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEVYUEFOREFCTEU6IHJvdyBpcyBleHBhbmRhYmxlL2NvbGxhcHNhYmxlIC0tPlxuICAgICAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwic2hvd0V4cGFuZGFibGVCdXR0b24oZWxlbWVudClcIiAoY2xpY2spPVwib25FeHBhbmQoJGV2ZW50LCBlbGVtZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCAhPT0gZWxlbWVudFwiPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudFwiPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYWQtaWNvbi1idXR0b24+XG4gICAgICAgIDwhLS0gTk9ORTogbm90aGluZyAtLT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBDZWxsIGRlZmluaXRpb25zIGFuZCByb3dzIHdpdGggaW5qZWN0ZWQgY2VsbHMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZFwiPlxuICAgICAgPCEtLSBoZWFkZXIgY2VsbCB0byBiZSBpbmplY3RlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImdldERhdGFUYWJsZUhlYWRlclR5cGUoY29sdW1uKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU09SVCdcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LXJpZ2h0XT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgICAgICBtYXQtc29ydC1oZWFkZXI9XCJ7eyBjb2x1bW4ub3JkZXJCeU5hbWUgPyBjb2x1bW4ub3JkZXJCeU5hbWUgOiBjb2x1bW4uZGF0YVByb3BlcnR5TmFtZSB9fVwiXG4gICAgICAgICAgICBbYXJyb3dQb3NpdGlvbl09XCJjb2x1bW4uaXNSaWdodEFsaWduZWQgPyAnYmVmb3JlJyA6ICdhZnRlcidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidGSUxURVInXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICAgICAgbWFkLWZpbHRlci1oZWFkZXI9XCJ7eyBjb2x1bW4uZGF0YVByb3BlcnR5TmFtZSB9fVwiXG4gICAgICAgICAgICBbbWFkRmlsdGVyQ29sdW1uUmlnaHRBbGlnbmVkXT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgICAgICBbbWFkRmlsdGVyT3B0aW9uc109XCJjb2x1bW4uZmlsdGVyUGFyYW1zPy5maWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAoY29sdW1uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IGNvbHVtbi5sYWJlbCB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU09SVF9BTkRfRklMVEVSJ1wiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtcmlnaHRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlcj1cInt7IGNvbHVtbi5vcmRlckJ5TmFtZSA/IGNvbHVtbi5vcmRlckJ5TmFtZSA6IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZCA/ICdiZWZvcmUnIDogJ2FmdGVyJ1wiXG4gICAgICAgICAgICBtYWQtZmlsdGVyLWhlYWRlcj1cInt7IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJDb2x1bW5SaWdodEFsaWduZWRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJPcHRpb25zXT1cImNvbHVtbi5maWx0ZXJQYXJhbXM/LmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLnRleHQtcmlnaHRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCI+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAoY29sdW1uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IGNvbHVtbi5sYWJlbCB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gZGF0YSBjZWxsIHRvIGJlIGluamVjdGVkIC0tPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIlxuICAgICAgICBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICBbY2xhc3MubWFkLWR0LWNoaWxkLWNlbGxdPVwiZWxlbWVudC5wYXJlbnRJZFwiXG4gICAgICAgIFtuZ1N3aXRjaF09XCJjb2x1bW4udHJhbnNmb3JtZXJcIlxuICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVSb3dDbGljayAmJiBvblJvd0V2ZW50KCRldmVudCwgZWxlbWVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGdldEN1c3RvbUNlbGxUZW1wbGF0ZShjb2x1bW4uaWQpIHx8IGRlZmF1bHRDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGNvbHVtbjogY29sdW1uLCBlbGVtZW50OiBlbGVtZW50LCAkaW1wbGljaXQ6IGVsZW1lbnQgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgQ29sdW1uIC0gVGhlIHJvdyBpcyBtYWRlIHVwIG9mIHRoaXMgb25lIGNvbHVtbiB0aGF0IHNwYW5zIGFjcm9zcyBhbGwgY29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFleHBhbmRhYmxlRGVmXCIgW21hdENvbHVtbkRlZl09XCJleHBhbmRhYmxlQ29sdW1uRGVmXCI+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAxXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWQtZGF0YS10YWJsZS1leHBhbmRhYmxlLWFyZWFcIiBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50ID09PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBnZXRDdXN0b21FeHBhbmRhYmxlVGVtcGxhdGUoKSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGNvbHVtbjogZWxlbWVudCwgZWxlbWVudDogZWxlbWVudCwgJGltcGxpY2l0OiBlbGVtZW50IH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIGhlYWRlciByb3cgd2hlcmUgY2VsbHMgd2lsbCBiZSBpbmplY3RlZCAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbklkc1wiPjwvdHI+XG4gICAgPCEtLSBkYXRhIHJvdyB3aGVyZSBjZWxscyB3aWxsIGJlIGluamVjdGVkIC0tPlxuICAgIDx0clxuICAgICAgbWF0LXJvd1xuICAgICAgW2NsYXNzLmNsaWNrYWJsZS10YWJsZS1yb3ddPVwiIXJvdy5wYXJlbnRJZCAmJiBzZWxlY3Rpb25FbWl0TW9kZSAhPT0gJ05PTkUnXCJcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5JZHNcIlxuICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kKCRldmVudCwgcm93KVwiXG4gICAgPjwvdHI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhZXhwYW5kYWJsZURlZlwiPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCBlbGVtZW50OyBjb2x1bW5zOiBbZXhwYW5kYWJsZUNvbHVtbkRlZl1cIiBjbGFzcz1cIm1hZC1kYXRhLXRhYmxlLWV4cGFuZGFibGUtcm93XCI+PC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIG5vRGF0YVRleHQgY29sdW1uQmFzZWRGaWx0ZXJcIiBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbklkcy5sZW5ndGhcIj5cbiAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKG5vRGF0YVRleHQgfCB0cmFuc2xhdGUpIDogbm9EYXRhVGV4dCB9fVxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3RhYmxlPlxuPC9kaXY+XG48ZGl2IGRhdGEtY3k9XCJ0YWJsZS1ib3R0b20tYXJlYVwiIGNsYXNzPVwibWFkLWRhdGEtdGFibGUtYm90dG9tLWFyZWFcIj5cbiAgPGRpdiBkYXRhLWN5PVwiZGVmaW5pdGlvbi1idXR0b24tYmxvY2tcIiBjbGFzcz1cIm1hZC1kYXRhLXRhYmxlLWJvdHRvbS1pbmZvLWFyZWFcIj5cbiAgICA8IS0tIGNvbHVtbiBzZXR0aW5nczogMSBkZWZpbml0aW9uIC0tPlxuICAgIDxtYWQtaWNvbi1idXR0b24gKm5nSWY9XCJlZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zPy5sZW5ndGggPT09IDFcIiAoY2xpY2spPVwib25Db2x1bW5TZXR0aW5ncygpXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnZpZXdfY29sdW1uPC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICA8IS0tIGNvbHVtbiBzZXR0aW5nczogbXVsdGlwbGUgZGVmaW5pdGlvbnMgLS0+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIihlZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zPy5sZW5ndGggfHwgMCkgPiAwXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImVkaXRhYmxlRGVmaW5pdGlvbk1lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj52aWV3X2NvbHVtbjwvbWF0LWljb24+XG4gICAgPC9tYWQtaWNvbi1idXR0b24+XG4gICAgPCEtLSBjb2x1bW4gdmlldzogbXVsdGlwbGUgZGVmaW5pdGlvbnMgLS0+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIih2aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zPy5sZW5ndGggfHwgMCkgPiAwXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInZpZXdhYmxlRGVmaW5pdGlvbk1lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj5wcmV2aWV3PC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQYWdpbmF0aW9uIC0tPlxuICA8bWF0LXBhZ2luYXRvclxuICAgIFtzdHlsZS5kaXNwbGF5XT1cInBhZ2luYXRpb25FbmFibGVkID8gJ2Jsb2NrJyA6ICdub25lJ1wiXG4gICAgW2xlbmd0aF09XCJwYWdlTGVuZ3RoXCJcbiAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgKHBhZ2UpPVwib25QYWdlRXZlbnQoJGV2ZW50KVwiXG4gICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgPlxuICA8L21hdC1wYWdpbmF0b3I+XG48L2Rpdj5cblxuPCEtLSBObyBkYXRhIGFsZXJ0IC0tPlxuPG5nLXRlbXBsYXRlICNub0RhdGE+XG4gIDxkaXYgZGF0YS1jeT1cIm5vLWRhdGEtYmxvY2tcIiBjbGFzcz1cIm5vRGF0YVRleHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWFkLWRhdGF0YWJsZS1zcGlubmVyLXdyYXBwZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgIDxtYXQtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNTBcIiBbc3Ryb2tlV2lkdGhdPVwiM1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgPC9kaXY+XG4gICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKG5vRGF0YVRleHQgfCB0cmFuc2xhdGUpIDogbm9EYXRhVGV4dCB9fVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gZGVmYXVsdCBjZWxsIHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbFRlbXBsYXRlIGxldC1lbGVtZW50PVwiZWxlbWVudFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPHNwYW4+XG4gICAge3sgZWxlbWVudFtjb2x1bW4uZGF0YVByb3BlcnR5TmFtZV0gfX1cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBjdXN0b20gY2VsbCB0ZW1wbGF0ZXMgaW5qZWN0ZWQgZnJvbSBwYXJlbnQgLS0+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
765
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQVUvRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FB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LE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFFa0IsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUVDLE9BQU87c0JBQTlCLFNBQVM7dUJBQUMsT0FBTztnQkFJVSxNQUFNO3NCQUFqQyxTQUFTO3VCQUFDLGVBQWU7Z0JBR3RCLFVBQVU7c0JBRGIsZUFBZTt1QkFBQyxpQ0FBaUM7Z0JBVzlDLGFBQWE7c0JBRGhCLFlBQVk7dUJBQUMseUNBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIE1hdFBhZ2luYXRvck1vZHVsZSwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRNb2R1bGUsIFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBEYXRhVGFibGVBY3Rpb24gfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1hY3Rpb24nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbnNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS10YWJsZS1jb2x1bW5zLW1vZGFsL2RhdGEtdGFibGUtY29sdW1ucy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbkNoYW5nZSxcbiAgRGF0YVRhYmxlRGlhbG9nRGF0YSxcbn0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtY29sdW1uLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgRGF0YVRhYmxlUm93IH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtcm93JztcbmltcG9ydCB7IERhdGFUYWJsZUhlYWRlclR5cGUgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1oZWFkZXItdHlwZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJNb2RlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtZmlsdGVyLW1vZGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IH0gZnJvbSAnLi9kYXRhLXRhYmxlLWZpbHRlci9kYXRhLXRhYmxlLWZpbHRlci1vYmplY3QnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyIH0gZnJvbSAnLi9kYXRhLXRhYmxlLWZpbHRlci9kYXRhLXRhYmxlLWZpbHRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlU2VsZWN0aW9uRW1pdFR5cGUgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1zZWxlY3Rpb24tZW1pdC10eXBlJztcbmltcG9ydCB7IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRNb2RlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtc2VsZWN0aW9uLWVtaXQtbW9kZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uL2RhdGEtdGFibGUtc2VsZWN0aW9uLW1vZGUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlU29ydFV0aWwgfSBmcm9tICcuL3V0aWwvZGF0YS10YWJsZS1zb3J0LXV0aWwnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQWN0aW9uVXRpbCB9IGZyb20gJy4vdXRpbC9kYXRhLXRhYmxlLWFjdGlvbi11dGlsJztcbmltcG9ydCB7IERhdGFUYWJsZURhdGFVdGlsIH0gZnJvbSAnLi91dGlsL2RhdGEtdGFibGUtZGF0YS11dGlsJztcbmltcG9ydCB7IERhdGFUYWJsZUZpbHRlclV0aWwgfSBmcm9tICcuL3V0aWwvZGF0YS10YWJsZS1maWx0ZXItdXRpbCc7XG5pbXBvcnQge1xuICBEQVRBX1RBQkxFX1BFUlNJU1RFTkNFX1NFUlZJQ0VfUFJPVklERVIsXG4gIERhdGFUYWJsZVBlcnNpc3RlbmNlU2VydmljZSxcbiAgTUFEX0RBVEFfVEFCTEVfUEVSU0lTVEVOQ0VfU0VSVklDRSxcbn0gZnJvbSAnLi9kYXRhLXRhYmxlLXBlcnNpc3RlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTUFEX0RBVEFfVEFCTEVfR0xPQkFMX0NPTkZJR1VSQVRJT04sXG4gIERhdGFUYWJsZUdsb2JhbENvbmZpZ3VyYXRpb24sXG4gIE1BRF9EQVRBX1RBQkxfR0xPQkFMX0NPTkZJR1VSQVRJT05fUFJPVklERVIsXG59IGZyb20gJy4vY29uZmlndXJhdGlvbi9kYXRhLXRhYmxlLWdsb2JhbC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLm1vZHVsZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJIZWFkZXIgfSBmcm9tICcuL2RhdGEtdGFibGUtZmlsdGVyL2RhdGEtdGFibGUtZmlsdGVyLWhlYWRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlVGVtcGxhdGVDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAnLi9kYXRhLXRhYmxlLXRlbXBsYXRlL2RhdGEtdGFibGUtdGVtcGxhdGUtY29sdW1uLWRlZmluaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVRlbXBsYXRlQ2VsbERlZmluaXRpb24gfSBmcm9tICcuL2RhdGEtdGFibGUtdGVtcGxhdGUvZGF0YS10YWJsZS10ZW1wbGF0ZS1jZWxsLWRlZmluaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNlbGxEZWZpbml0aW9uIH0gZnJvbSAnLi9kYXRhLXRhYmxlLXRlbXBsYXRlL2RhdGEtdGFibGUtdGVtcGxhdGUtZXhwYW5kYWJsZS1jZWxsLWRlZmluaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNvbHVtbkRlZmluaXRpb24gfSBmcm9tICcuL2RhdGEtdGFibGUtdGVtcGxhdGUvZGF0YS10YWJsZS10ZW1wbGF0ZS1leHBhbmRhYmxlLWNvbHVtbi1kZWZpbml0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVQZXJzaXN0ZW5jZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vZGF0YS10YWJsZS1wZXJzaXN0ZW5jZS1jb25maWd1cmF0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWFkLWRhdGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQsdm9pZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICBNYXRTb3J0TW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIE1hdFJhZGlvTW9kdWxlLFxuICAgIE1hdEJhZGdlTW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIERhdGFUYWJsZUZpbHRlckhlYWRlcixcbiAgICBEYXRhVGFibGVGaWx0ZXIsXG4gICAgRGF0YVRhYmxlVGVtcGxhdGVDb2x1bW5EZWZpbml0aW9uLFxuICAgIERhdGFUYWJsZVRlbXBsYXRlQ2VsbERlZmluaXRpb24sXG4gICAgRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ29sdW1uRGVmaW5pdGlvbixcbiAgICBEYXRhVGFibGVUZW1wbGF0ZUV4cGFuZGFibGVDZWxsRGVmaW5pdGlvbixcbiAgXSxcbiAgcHJvdmlkZXJzOiBbREFUQV9UQUJMRV9QRVJTSVNURU5DRV9TRVJWSUNFX1BST1ZJREVSLCBNQURfREFUQV9UQUJMX0dMT0JBTF9DT05GSUdVUkFUSU9OX1BST1ZJREVSXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcblxuICAvLyBUcmFuc2xhdGlvbnNcbiAgQElucHV0KCkgZmlsdGVyTGFiZWwgPSAnY29tbW9uLmZpbHRlcic7XG4gIEBJbnB1dCgpIGZpbHRlclBsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIGZpbHRlckNvbHVtbnNMYWJlbCA9ICdGaWx0ZXInO1xuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zUGxhY2VIb2xkZXIgPSAnRmlsdGVyIGF2YWlsYWJsZSBjb2x1bW5zJztcbiAgQElucHV0KCkgc2hvd0VtcHR5VGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbm9EYXRhVGV4dCA9ICdObyBtYXRjaGluZyBkYXRhIGZvdW5kJztcbiAgQElucHV0KCkgY29sdW1uU2V0dGluZ3NNb2RhbFRpdGxlTGFiZWwgPSAnQ29sdW1uIHNldHRpbmdzJztcbiAgQElucHV0KCkgc2VsZWN0ZWRMYWJlbCA9ICdTZWxlY3RlZCBjb2x1bW5zJztcbiAgQElucHV0KCkgYXZhaWxhYmxlTGFiZWwgPSAnQXZhaWxhYmxlIGNvbHVtbnMnO1xuICBASW5wdXQoKSBzYXZlTGFiZWwgPSAnU2F2ZSc7XG4gIEBJbnB1dCgpIGRlbGV0ZUxhYmVsID0gJ0RlbGV0ZSc7XG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsID0gJ0NhbmNlbCc7XG4gIEBJbnB1dCgpIGluZm9UZXh0TGFiZWwgPSAnRHJhZyBhbmQgZHJvcCBhIGNvbHVtbiB0byBzZWxlY3Qgb3IgcmVvcmRlciBpdC4nO1xuICBASW5wdXQoKSB0YWJsZUNsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdHJhbnNsYXRlTGFiZWxzID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzZXQgdXNlQXN5bmModXNlQXN5bmM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl91c2VBc3luYyA9IHVzZUFzeW5jO1xuICAgIHRoaXMuYXBwbHlTb3J0RGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIFBsZWFzZSB1c2UgdGhlIG1vcmUgc3BlY2lmaWMgcGVyc2lzdGVuY2VDb25maWcgaW5zdGVhZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHN0YXRlZnVsKHN0YXRlZnVsOiBib29sZWFuKSB7XG4gICAgdGhpcy5wZXJzaXN0ZW5jZUNvbmZpZyA9IHtcbiAgICAgIHBlcnNpc3RTb3J0OiBzdGF0ZWZ1bCxcbiAgICAgIHBlcnNpc3RGaWx0ZXI6IHN0YXRlZnVsLFxuICAgICAgcGVyc2lzdFBhZ2VTaXplOiBzdGF0ZWZ1bCxcbiAgICB9O1xuICB9XG5cbiAgQElucHV0KCkgcGVyc2lzdGVuY2VDb25maWc6IERhdGFUYWJsZVBlcnNpc3RlbmNlQ29uZmlndXJhdGlvbiA9IHtcbiAgICBwZXJzaXN0U29ydDogZmFsc2UsXG4gICAgcGVyc2lzdEZpbHRlcjogZmFsc2UsXG4gICAgcGVyc2lzdFBhZ2VTaXplOiBmYWxzZSxcbiAgfTtcblxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdGFibGVEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGlkR2VuZXJhdG9yOiBhbnk7XG4gIEBJbnB1dCgpIHBhcmVudElkR2VuZXJhdG9yOiBhbnk7XG5cbiAgQElucHV0KCkgZGVmYXVsdFNvcnQ6IFNvcnQ7XG4gIEBJbnB1dCgpIGV4dGVybmFsRmlsdGVyOiBhbnk7XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhZ2U6IFBhZ2VFdmVudCA9IHsgcGFnZUluZGV4OiAwLCBwYWdlU2l6ZTogNTAsIGxlbmd0aDogMCB9O1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1XTtcblxuICBASW5wdXQoKSBhY3Rpb25zOiBEYXRhVGFibGVBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3Rpb25FbWl0VHlwZTogRGF0YVRhYmxlU2VsZWN0aW9uRW1pdFR5cGUgPSAnSUQnO1xuICBASW5wdXQoKSBzaG93RGVsZXRlRmlsdGVyQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzYWJsZVJvd0NsaWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGVsZXRlRGVmaW5pdGlvbkFsbG93ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbjogc3RyaW5nW10gfCBhbnlbXSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogUGxlYXNlIHVzZSBcImZpbHRlck1vZGVcIiBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZmlsdGVyRW5hYmxlZChpc0ZpbHRlckVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9maWx0ZXJNb2RlID0gaXNGaWx0ZXJFbmFibGVkID8gJ1RBQkxFX0JBU0VEJyA6ICdOT05FJztcbiAgICB0aGlzLmFwcGx5RmlsdGVyUHJlZGljYXRlKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmlsdGVyTW9kZShmaWx0ZXJNb2RlOiBEYXRhVGFibGVGaWx0ZXJNb2RlKSB7XG4gICAgdGhpcy5fZmlsdGVyTW9kZSA9IGZpbHRlck1vZGU7XG4gICAgdGhpcy5hcHBseUZpbHRlclByZWRpY2F0ZSgpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlclZhbHVlKGZpbHRlclZhbHVlOiBzdHJpbmcgfCBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9maWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJWYWx1ZSh0aGlzLl9maWx0ZXJWYWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZXh0ZXJuYWxQYWdpbmF0b3IocGFnaW5hdG9yOiBhbnkpIHtcbiAgICB0aGlzLmV4dFBhZ2luYXRvciA9IHBhZ2luYXRvcjtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkZWZhdWx0UGFnZVNpemUoZGVmYXVsdFNpemU6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IHtcbiAgICAgIC4uLnRoaXMucGFnZSxcbiAgICAgIHBhZ2VTaXplOiBkZWZhdWx0U2l6ZSxcbiAgICB9O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbkVtaXRNb2RlKHNlbGVjdGlvbkVtaXRNb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25FbWl0TW9kZSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkVtaXRNb2RlID0gc2VsZWN0aW9uRW1pdE1vZGU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVGhpcyBmdW5jdGlvbiBtaXhlcyB1cCAyIHJlc3BvbnNpYmlsaXRpZXM6XG4gICAqICAtIGRldGVybWluaW5nIGlmIGFjdGlvbnMgc2hvdWxkIGJlIGRpc3BsYXllZCAvIGhhbmRsZWRcbiAgICogIC0gZGV0ZXJtaW5pbmcgd2hldGhlciBhY3Rpb25zIGFyZSByb3cgYmFzZWQgKHNpbmdsZSkgb3IgdGFibGUgYmFzZWQgKGJhdGNoKVxuICAgKiBQbGVhc2UgdXNlIGEgY29tYmluYXRpb24gb2YgXCJzZWxlY3Rpb25FbWl0TW9kZVwiIGFuZCBcInNlbGVjdGlvbk1vZGVcIiBpbnN0ZWFkOlxuICAgKiAgLSBzZWxlY3Rpb25FbWl0TW9kZSBkZXRlcm1pbmVzIGhvdyBzZWxlY3RlZCBpdGVtcyBhcmUgaGFuZGxlZCAoYXMgcGFydCBvZiBhY3Rpb25zLCBhcyBzZWxlY3Rpb25zIG9yIG5vdCBhdCBhbGwpXG4gICAqICAtIHNlbGVjdGlvbk1vZGUgZGV0ZXJtaW5lcyBpZiBzZWxlY3RlZCBpdGVtcyBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5IChzaW5nbGUpIG9yIHRvZ2V0aGVyIChiYXRjaClcbiAgICovXG4gIEBJbnB1dCgpIHNldCBmb3JjZU1vZGUoc2VsZWN0aW9uTW9kZTogc3RyaW5nKSB7XG4gICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnIHx8IHNlbGVjdGlvbk1vZGUgPT09ICdCQVRDSCcpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkVtaXRNb2RlID0gJ09OX0FDVElPTic7XG4gICAgICB0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgPSA8RGF0YVRhYmxlU2VsZWN0aW9uTW9kZT5zZWxlY3Rpb25Nb2RlO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZm9yY2VTZWxlY3Rpb25Nb2RlKHNlbGVjdGlvbk1vZGU6IERhdGFUYWJsZVNlbGVjdGlvbk1vZGUpIHtcbiAgICB0aGlzLl9mb3JjZVNlbGVjdGlvbk1vZGUgPSBzZWxlY3Rpb25Nb2RlO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGlzcGxheWVkQ29sdW1ucyhjb2xzOiBEYXRhVGFibGVDb2x1bW5bXSkge1xuICAgIGlmICghdGhpcy5kaXNwbGF5ZWRDb2x1bW5EZWZpbml0aW9uKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSBjb2xzID8gWy4uLmNvbHNdIDogW107XG4gICAgICB0aGlzLmNvbHVtbklkcyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKTtcbiAgICAgIHRoaXMuY29sdW1uSWRzLnVuc2hpZnQodGhpcy5BQ1RJT05fQ09MVU1OX05BTUUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkaXNwbGF5ZWRDb2x1bW5EZWZpbml0aW9uKGRlZjogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIHRoaXMuY29sdW1ucyA9IGRlZi5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgIHRoaXMuY29sdW1uSWRzID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpO1xuICAgIHRoaXMuY29sdW1uSWRzLnVuc2hpZnQodGhpcy5BQ1RJT05fQ09MVU1OX05BTUUpO1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbiA9IGRlZjtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5EZWZpbml0aW9ucyhkZWZpbml0aW9uczogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbltdKSB7XG4gICAgdGhpcy5lZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zID0gW107XG4gICAgdGhpcy52aWV3YWJsZUNvbHVtbkRlZmluaXRpb25zID0gW107XG4gICAgdGhpcy5fYWxsQ29sdW1uRGVmaW5pdGlvbnMgPSBbLi4uZGVmaW5pdGlvbnNdO1xuICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiBkZWZpbml0aW9ucykge1xuICAgICAgaWYgKGRlZmluaXRpb24uZWRpdGFibGUpIHtcbiAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zLnB1c2goZGVmaW5pdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoZGVmaW5pdGlvbi5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudmlld2FibGVDb2x1bW5EZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBhbGxDb2x1bW5zKGFsbENvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fYWxsQXZhaWxhYmxlQ29sdW1ucyA9IGFsbENvbHVtbnM7XG4gICAgaWYgKGFsbENvbHVtbnMgJiYgdGhpcy5fc2hvd0NvbHVtbk1vZGFsKSB7XG4gICAgICB0aGlzLm9wZW5Db2x1bW5Nb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBhY3Rpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlQWN0aW9uPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIEBPdXRwdXQoKSBzb3J0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IHwgdW5kZWZpbmVkPigpO1xuICBAT3V0cHV0KCkgcGFnZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpIGFsbENvbHVtbnNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbkRlZmluaXRpb25DaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbkNoYW5nZT4oKTtcbiAgQE91dHB1dCgpIHZpZXdEZWZpbml0aW9uQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb24+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICAvLyB3ZSBuZWVkIHRvIGhhdmUgdGhpcyBhcyBhIHNldHRlciBkdWUgdG8gdGhlICpuZ0lmIGl0IGlzIGluXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc2V0IG1hdFNvcnQobWF0U29ydDogTWF0U29ydCkge1xuICAgIHRoaXMuX3NvcnQgPSBtYXRTb3J0O1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5fc29ydDtcbiAgfVxuICBAVmlld0NoaWxkKERhdGFUYWJsZUZpbHRlcikgZmlsdGVyOiBEYXRhVGFibGVGaWx0ZXI7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRhVGFibGVUZW1wbGF0ZUNvbHVtbkRlZmluaXRpb24pXG4gIHNldCBjb2x1bW5EZWZzKGNvbHVtbkRlZnM6IFF1ZXJ5TGlzdDxEYXRhVGFibGVUZW1wbGF0ZUNvbHVtbkRlZmluaXRpb24+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29sdW1uRGVmcyA9IGNvbHVtbkRlZnM7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgY29sdW1uRGVmcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uRGVmcztcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YVRhYmxlVGVtcGxhdGVFeHBhbmRhYmxlQ2VsbERlZmluaXRpb24pXG4gIHNldCBleHBhbmRhYmxlRGVmKGV4cGFuZGFibGVEZWY6IERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNlbGxEZWZpbml0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZXhwYW5kYWJsZURlZiA9IGV4cGFuZGFibGVEZWY7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgZXhwYW5kYWJsZURlZigpIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kYWJsZURlZjtcbiAgfVxuXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnlbXT47XG4gIGFsbFNlbGVjdGVkID0gZmFsc2U7XG5cbiAgZXh0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgcmVhZG9ubHkgQUNUSU9OX0NPTFVNTl9OQU1FID0gJ19fYWN0aW9uX18nO1xuICB0YWJsZUFjdGlvbnM6IERhdGFUYWJsZUFjdGlvbltdW10gPSBbXTtcbiAgcm93QWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW10gPSBbXTtcblxuICBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdO1xuICBjb2x1bW5JZHM6IHN0cmluZ1tdO1xuXG4gIGV4cGFuZGVkRWxlbWVudDogRGF0YVRhYmxlQ29sdW1uIHwgbnVsbDtcblxuICBlZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uW107XG4gIHZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnM6IERhdGFUYWJsZUNvbHVtbkRlZmluaXRpb25bXTtcblxuICBwcml2YXRlIF91c2VBc3luYzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3Jvd01hcCA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhVGFibGVSb3c+KCk7XG4gIHByaXZhdGUgX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSk7XG4gIHByaXZhdGUgX3NlbGVjdGlvbjogc3RyaW5nW10gfCBhbnlbXTtcblxuICBwcml2YXRlIF9zb3J0OiBNYXRTb3J0O1xuXG4gIHByaXZhdGUgX2ZvcmNlU2VsZWN0aW9uTW9kZTogRGF0YVRhYmxlU2VsZWN0aW9uTW9kZTtcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uRW1pdE1vZGU6IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRNb2RlID0gJ05PTkUnO1xuICBwcml2YXRlIF9maWx0ZXJNb2RlOiBEYXRhVGFibGVGaWx0ZXJNb2RlID0gJ05PTkUnO1xuICBwcml2YXRlIF9maWx0ZXJWYWx1ZTogc3RyaW5nIHwgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgX2FsbENvbHVtbkRlZmluaXRpb25zOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxsQXZhaWxhYmxlQ29sdW1uczogRGF0YVRhYmxlQ29sdW1uW107XG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbjogRGF0YVRhYmxlQ29sdW1uRGVmaW5pdGlvbjtcbiAgcHJpdmF0ZSBfc2hvd0NvbHVtbk1vZGFsID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY29sdW1uRGVmczogUXVlcnlMaXN0PERhdGFUYWJsZVRlbXBsYXRlQ29sdW1uRGVmaW5pdGlvbj4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2V4cGFuZGFibGVEZWY6IERhdGFUYWJsZVRlbXBsYXRlRXhwYW5kYWJsZUNlbGxEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgbWF0RGlhbG9nOiBNYXREaWFsb2csXG4gICAgQEluamVjdChNQURfREFUQV9UQUJMRV9QRVJTSVNURU5DRV9TRVJWSUNFKSBwcml2YXRlIHBlcnNpc3RlbmNlU2VydmljZTogRGF0YVRhYmxlUGVyc2lzdGVuY2VTZXJ2aWNlLFxuICAgIEBJbmplY3QoTUFEX0RBVEFfVEFCTEVfR0xPQkFMX0NPTkZJR1VSQVRJT04pIHByaXZhdGUgZGF0YVRhYmxlR2xvYmFsQ29uZmlnOiBEYXRhVGFibGVHbG9iYWxDb25maWd1cmF0aW9uLFxuICApIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuX3NvcnQ7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlTb3J0RGF0YSgpO1xuICAgIHRoaXMuaW5pdFN0YXRlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCd0YWJsZURhdGEnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRhYmxlRGF0YSgpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Nb2RlbCh0aGlzLmdldFNlbGVjdGlvbignSUQnKS5sZW5ndGggPyB0aGlzLmdldFNlbGVjdGlvbignSUQnKSA6IHRoaXMuX3NlbGVjdGlvbik7XG4gICAgICBpZiAodGhpcy5zaG93QWxsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgnaWRHZW5lcmF0b3InIGluIGNoYW5nZXMgfHwgJ2Rpc3BsYXllZENvbHVtbnMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRhYmxlRGF0YSgpO1xuICAgIH1cblxuICAgIC8vIHBlcmZvcm1hbmNlIHJlYXNvbnMgKHNhbWUgYmVoYXZpb3VyIGNvdWxkIGJlIGFjaGl2ZWQgaW4gZ2V0dGVycylcbiAgICBpZiAoJ2ZvcmNlTW9kZScgaW4gY2hhbmdlcyB8fCAnZm9yY2VTZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzIHx8ICdhY3Rpb25zJyBpbiBjaGFuZ2VzKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gRGF0YVRhYmxlQWN0aW9uVXRpbC5nZXREaXNwbGF5QWN0aW9ucyh0aGlzLmFjdGlvbnMsIHRoaXMuc2VsZWN0aW9uTW9kZSk7XG4gICAgICB0aGlzLnJvd0FjdGlvbnMgPSBhY3Rpb25zLnJvd0FjdGlvbnM7XG4gICAgICB0aGlzLnRhYmxlQWN0aW9ucyA9IGFjdGlvbnMuZ3JvdXBlZFRhYmxlQWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvKiogVEFCTEUgRElTUExBWSBIQU5ETElORyAqL1xuXG4gIHB1YmxpYyBnZXREYXRhVGFibGVIZWFkZXJUeXBlKGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uKTogRGF0YVRhYmxlSGVhZGVyVHlwZSB7XG4gICAgaWYgKGNvbHVtbi5pc1NvcnRhYmxlICYmICFjb2x1bW4uaXNGaWx0ZXJhYmxlKSB7XG4gICAgICByZXR1cm4gJ1NPUlQnO1xuICAgIH1cbiAgICBpZiAoIWNvbHVtbi5pc1NvcnRhYmxlICYmIGNvbHVtbi5pc0ZpbHRlcmFibGUpIHtcbiAgICAgIHJldHVybiAnRklMVEVSJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5pc1NvcnRhYmxlICYmIGNvbHVtbi5pc0ZpbHRlcmFibGUpIHtcbiAgICAgIHJldHVybiAnU09SVF9BTkRfRklMVEVSJztcbiAgICB9XG4gICAgcmV0dXJuICdQTEFJTic7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tQ2VsbFRlbXBsYXRlKGNvbHVtbklkOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3QgY29sdW1uRGVmID0gdGhpcy5fY29sdW1uRGVmcz8uZmluZCgoaXQpID0+IGl0Lm1hZENvbHVtbkRlZiA9PT0gY29sdW1uSWQpO1xuICAgIHJldHVybiBjb2x1bW5EZWYgJiYgY29sdW1uRGVmLmNlbGxEZWYgPyBjb2x1bW5EZWYuY2VsbERlZi5nZXRDZWxsVGVtcGxhdGUoKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tRXhwYW5kYWJsZVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kYWJsZURlZj8uZ2V0Q2VsbFRlbXBsYXRlKCkgfHwgbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwYW5kYWJsZUNvbHVtbkRlZigpIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kYWJsZURlZj8uY29sdW1uRGVmLm1hZEV4cGFuZGFibGVDb2x1bW5EZWYgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgb25FeHBhbmQoZXZlbnQ6IE1vdXNlRXZlbnQsIGVsZW1lbnQ6IERhdGFUYWJsZUNvbHVtbikge1xuICAgIHRoaXMuZXhwYW5kZWRFbGVtZW50ID0gdGhpcy5leHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnQgPyBudWxsIDogZWxlbWVudDtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKiBBQ1RJT04gQlVUVE9OIERJU1BMQVkgSEFORExJTkcgKi9cblxuICBwdWJsaWMgaGFzVmlzaWJsZVJvd0FjdGlvbnMoZGlzcGxheWVkRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnJvd0FjdGlvbnMuZXZlcnkoKGFjdGlvbikgPT4gdGhpcy5pc0hpZGRlbkZvckRhdGEoYWN0aW9uLCBbdGhpcy5fcm93TWFwLmdldChkaXNwbGF5ZWREYXRhLnJvd0lkKT8uYWN0dWFsRGF0YV0pKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0hpZGRlbihhY3Rpb246IERhdGFUYWJsZUFjdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzSGlkZGVuRm9yRGF0YShhY3Rpb24sIHRoaXMuZ2V0U2VsZWN0aW9uKCdEQVRBJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0hpZGRlbkZvckRhdGEoYWN0aW9uOiBEYXRhVGFibGVBY3Rpb24sIGRhdGE6IGFueVtdKSB7XG4gICAgcmV0dXJuICEhYWN0aW9uLmlzSGlkZGVuICYmIGFjdGlvbi5pc0hpZGRlbihkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Rpc2FibGVkKGFjdGlvbjogRGF0YVRhYmxlQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZEZvckFjdGlvblR5cGUoYWN0aW9uLnR5cGUpIHx8ICghIWFjdGlvbi5pc0Rpc2FibGVkICYmIGFjdGlvbi5pc0Rpc2FibGVkKHRoaXMuZ2V0U2VsZWN0aW9uKCdEQVRBJykpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNhYmxlZEZvckFjdGlvblR5cGUoYWN0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChhY3Rpb25UeXBlKSB7XG4gICAgICBjYXNlICdTSU5HTEUnOlxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENvdW50ICE9PSAxO1xuICAgICAgY2FzZSAnQkFUQ0gnOlxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENvdW50IDwgMTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRDb3VudChhY3Rpb25UeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5zZWxlY3RlZENvdW50O1xuICAgIGlmIChhY3Rpb25UeXBlICE9PSAnQkFUQ0gnIHx8IGNvdW50IDwgMikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gYCAoJHtjb3VudH0pYDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkID8gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubGVuZ3RoIDogMDtcbiAgfVxuXG4gIC8qKiBUQUJMRSBEQVRBIENIQU5HRSBIQU5ETElORyAqL1xuXG4gIHByaXZhdGUgdXBkYXRlRGF0YVRhYmxlRGF0YSgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3QgbWFrZSB0aGlzIGZ1bmN0aW9uIGltbXV0YWJsZSAtIHdlIGRlc3BhcmF0ZWx5IG5lZWQgdGhlIHJlZmVyZW5jZSBvZiByb3dNYXAgdG8gc3RheSB0aGUgc2FtZVxuICAgIERhdGFUYWJsZURhdGFVdGlsLnVwZGF0ZVJvd01hcCh0aGlzLl9yb3dNYXAsIHRoaXMudGFibGVEYXRhLCB0aGlzLmNvbHVtbnMsIHRoaXMuaWRHZW5lcmF0b3IsIHRoaXMucGFyZW50SWRHZW5lcmF0b3IpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gQXJyYXkuZnJvbSh0aGlzLl9yb3dNYXAudmFsdWVzKCkpLm1hcCgoaXQpID0+IGl0LmRpc3BsYXllZERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb25Nb2RlbChzZWxlY3Rpb246IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgIHNlbGVjdGlvbj8uZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9yb3dNYXAuZ2V0KGl0KSB8fCBbLi4udGhpcy5fcm93TWFwLnZhbHVlcygpXS5maW5kKChyb3cpID0+IHJvdy5hY3R1YWxEYXRhID09PSBpdCk7XG4gICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25FdmVudChpdGVtLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIC8qKiBBQ1RJT04gJiBTRUxFQ1RJT04gSEFORExJTkcgKi9cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGlvbkVtaXRNb2RlKCk6IERhdGFUYWJsZVNlbGVjdGlvbkVtaXRNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdOT05FJyAmJiAhIXRoaXMuYWN0aW9ucy5sZW5ndGggPyAnT05fQUNUSU9OJyA6IHRoaXMuX3NlbGVjdGlvbkVtaXRNb2RlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3Rpb25Nb2RlKCk6IERhdGFUYWJsZVNlbGVjdGlvbk1vZGUge1xuICAgIHJldHVybiAhIXRoaXMuX2ZvcmNlU2VsZWN0aW9uTW9kZSA/IHRoaXMuX2ZvcmNlU2VsZWN0aW9uTW9kZSA6IHRoaXMuYWN0aW9ucy5maW5kKChpdCkgPT4gaXQudHlwZSA9PT0gJ0JBVENIJykgPyAnQkFUQ0gnIDogJ1NJTkdMRSc7XG4gIH1cblxuICAvLyBnZXQgZmlsdGVyZWQgJiBzb3J0ZWQgZGF0YSBvZiB0aGUgY3VycmVudCBwYWdlXG4gIHB1YmxpYyBnZXQgZGlzcGxheWVkRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZT8uX3BhZ2VEYXRhKHRoaXMuZGF0YVNvdXJjZT8uc29ydERhdGEodGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YSwgdGhpcy5kYXRhU291cmNlLnNvcnQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd0FjdGlvbkNvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnTk9ORScgfHwgdGhpcy5oaWRlQWN0aW9uQ29sdW1uKSB8fCAhIXRoaXMuX2V4cGFuZGFibGVEZWY7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NoZWNrYm94KGRpc3BsYXllZERhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhZGlzcGxheWVkRGF0YS5wYXJlbnRJZCAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdCQVRDSCcgJiYgIXRoaXMuaGlkZUFjdGlvbkNvbHVtbjtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Um93QWN0aW9uSWNvbihkaXNwbGF5ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWRpc3BsYXllZERhdGEucGFyZW50SWQgJiYgdGhpcy5zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ09OX0FDVElPTicgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnU0lOR0xFJyAmJiAhdGhpcy5oaWRlQWN0aW9uQ29sdW1uO1xuICB9XG5cbiAgcHVibGljIHNob3dSYWRpb0J1dHRvbihkaXNwbGF5ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWRpc3BsYXllZERhdGEucGFyZW50SWQgJiYgdGhpcy5zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ09OX1NFTEVDVElPTicgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnU0lOR0xFJztcbiAgfVxuXG4gIHB1YmxpYyBzaG93RXhwYW5kYWJsZUJ1dHRvbihkaXNwbGF5ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWRpc3BsYXllZERhdGEucGFyZW50SWQgJiYgISF0aGlzLl9leHBhbmRhYmxlRGVmO1xuICB9XG5cbiAgcHVibGljIGlzU2VsZWN0ZWQocm93SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJvd0lkKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRvZ2dsZVNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAvLyBjbGVhciBhbGwgc2VsZWN0aW9uIGZpcnN0XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAvLyB0b2dnbGUgYWxsIGNoZWNrYm94XG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9ICF0aGlzLmFsbFNlbGVjdGVkO1xuICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKSB7XG4gICAgICAvLyBzZWxlY3QgYWxsIHJvd3Mgb2YgdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgdGhpcy5kaXNwbGF5ZWREYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAoIXJvdy5wYXJlbnRJZCkge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChyb3cucm93SWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25BY3Rpb25FdmVudChhY3Rpb246IERhdGFUYWJsZUFjdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGVtaXRBY3Rpb24gPSB7IC4uLmFjdGlvbiB9O1xuICAgIGlmICghIWVtaXRBY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb25FbWl0TW9kZSAhPT0gJ05PTkUnKSB7XG4gICAgICBlbWl0QWN0aW9uLnNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb25FbWl0VHlwZSk7XG4gICAgICB0aGlzLmFjdGlvbkV2ZW50LmVtaXQoZW1pdEFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0aW9uRXZlbnQoaWQ6IGFueSk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICBjYXNlICdCQVRDSCc6XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlKGlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUm93RXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogYW55LCBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25FbWl0TW9kZSA9PT0gJ05PTkUnIHx8IHJvdz8ucGFyZW50SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uU2VsZWN0aW9uRXZlbnQocm93LnJvd0lkKTtcbiAgICB0aGlzLnByb2Nlc3NTZWxlY3Rpb24oZXZlbnQsIGFjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0QWN0aW9uKCk6IERhdGFUYWJsZUFjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgIT09ICdOT05FJyA/IHRoaXMucm93QWN0aW9uc1swXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhpZGVBY3Rpb25Db2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9BQ1RJT04nICYmIHRoaXMuYWN0aW9ucy5ldmVyeSgoaXQpID0+IGl0LnR5cGUgPT09ICdOT05FJyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTZWxlY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQsIGFjdGlvbj86IERhdGFUYWJsZUFjdGlvbik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0aW9uRW1pdE1vZGUgPT09ICdPTl9BQ1RJT04nICYmXG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnICYmXG4gICAgICAhIWFjdGlvbiAmJlxuICAgICAgIURhdGFUYWJsZUNvbXBvbmVudC5pc0NsaWNrT25Sb3dNZW51SWNvbihldmVudClcbiAgICApIHtcbiAgICAgIHRoaXMub25BY3Rpb25FdmVudChhY3Rpb24pO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkVtaXRNb2RlID09PSAnT05fU0VMRUNUSU9OJykge1xuICAgICAgdGhpcy5zZWxlY3Rpb25FdmVudC5lbWl0KHRoaXMuZ2V0U2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uRW1pdFR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGlvbihzZWxlY3Rpb25FbWl0VHlwZTogRGF0YVRhYmxlU2VsZWN0aW9uRW1pdFR5cGUpOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnlbXSA9IFtdO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goKGl0KSA9PlxuICAgICAgLy8gaWYgSUQtZ2VuZXJhdG9yIGlzIHByb3ZpZGVkLCByZXR1cm4gdGhlIElELCBlbHNlIHJldHVybiB0aGUgQUNUVUFMIGRhdGFcbiAgICAgIHNlbGVjdGlvbi5wdXNoKHRoaXMuaWRHZW5lcmF0b3IgJiYgc2VsZWN0aW9uRW1pdFR5cGUgPT09ICdJRCcgPyBpdCA6IHRoaXMuX3Jvd01hcC5nZXQoaXQpPy5hY3R1YWxEYXRhKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzQ2xpY2tPblJvd01lbnVJY29uKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtaWNvbicpO1xuICB9XG5cbiAgLyoqIFNPUlQgSEFORExJTkcgKi9cblxuICBvblNvcnRpbmdFdmVudChzb3J0OiBTb3J0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VzZUFzeW5jKSB7XG4gICAgICB0aGlzLnNvcnRFdmVudC5lbWl0KHNvcnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQ29uZmlnLnBlcnNpc3RTb3J0KSB7XG4gICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5zYXZlU29ydCh0aGlzLmlkLCBzb3J0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U29ydERhdGEoKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnREYXRhID0gdGhpcy5fdXNlQXN5bmNcbiAgICAgID8gRGF0YVRhYmxlU29ydFV0aWwuc29ydE5vdGhpbmcoKVxuICAgICAgOiBEYXRhVGFibGVTb3J0VXRpbC5zb3J0RGF0YShbLi4udGhpcy5kYXRhVGFibGVHbG9iYWxDb25maWcuZGF0ZVRpbWVGb3JtYXRdLCB0aGlzLmRhdGFUYWJsZUdsb2JhbENvbmZpZy5udW1iZXJGb3JtYXQpO1xuICB9XG5cbiAgLyoqIEZJTFRFUiBIQU5ETElORyAqL1xuXG4gIHB1YmxpYyBnZXQgZmlsdGVyTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlQXN5bmMgJiYgdGhpcy5fZmlsdGVyTW9kZSA9PT0gJ1RBQkxFX0JBU0VEJyA/ICdOT05FJyA6IHRoaXMuX2ZpbHRlck1vZGU7XG4gIH1cblxuICBwdWJsaWMgb25UYWJsZUJhc2VkRmlsdGVyRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkZpbHRlcmluZ0V2ZW50KChldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9uQ29sdW1uQmFzZWRGaWx0ZXJFdmVudChmaWx0ZXI6IERhdGFUYWJsZUZpbHRlck9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJpbmdFdmVudChmaWx0ZXIpO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJpbmdFdmVudCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZUZpbHRlcmFibGVzKHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsdGVyaW5nRXZlbnQoZmlsdGVyOiBzdHJpbmcgfCBEYXRhVGFibGVGaWx0ZXJPYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdXNlQXN5bmMpIHtcbiAgICAgIHRoaXMuZmlsdGVyRXZlbnQuZW1pdChmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlclZhbHVlKGZpbHRlcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGVyc2lzdGVuY2VDb25maWcucGVyc2lzdEZpbHRlcikge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2Uuc2F2ZUZpbHRlcih0aGlzLmlkLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJQcmVkaWNhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9XG4gICAgICB0aGlzLmZpbHRlck1vZGUgPT09ICdDT0xVTU5fQkFTRUQnXG4gICAgICAgID8gRGF0YVRhYmxlRmlsdGVyVXRpbC5jb2x1bW5CYXNlZEZpbHRlclByZWRpY2F0ZSh0aGlzLl9yb3dNYXApXG4gICAgICAgIDogRGF0YVRhYmxlRmlsdGVyVXRpbC50YWJsZUJhc2VkRmlsdGVyUHJlZGljYXRlKCk7XG4gICAgdGhpcy5hcHBseUZpbHRlclZhbHVlKHRoaXMuX2ZpbHRlclZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0YVRhYmxlRmlsdGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdGhpcy5fZmlsdGVyVmFsdWUgPT09ICdzdHJpbmcnO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAhIXZhbHVlID8gKGlzU3RyaW5nID8gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIDogJyc7XG4gIH1cblxuICAvKiogUEFHSU5BVElPTiBIQU5ETElORyAqL1xuXG4gIG9uUGFnZUV2ZW50KGV2ZW50OiBQYWdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdXNlQXN5bmMpIHtcbiAgICAgIHRoaXMucGFnZUV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQ29uZmlnLnBlcnNpc3RQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2Uuc2F2ZVBhZ2VTaXplKHRoaXMuaWQsIGV2ZW50LnBhZ2VTaXplKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbCA/IDAgOiB0aGlzLnBhZ2UucGFnZUluZGV4O1xuICB9XG5cbiAgZ2V0IHBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbCA/IHRoaXMuZGF0YUxlbmd0aCA6IHRoaXMucGFnZS5wYWdlU2l6ZTtcbiAgfVxuXG4gIGdldCBwYWdlTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbCA/IHRoaXMuZGF0YUxlbmd0aCA6IHRoaXMucGFnZS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRvcigpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UuZW1pdCh0aGlzLnBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRhdGFMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmRhdGE/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc2hvd0FsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX3VzZUFzeW5jICYmICF0aGlzLnBhZ2luYXRpb25FbmFibGVkO1xuICB9XG5cbiAgLyoqIElOSVQgU1RBVEUgKi9cblxuICBwcml2YXRlIGluaXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAvLyBvbmx5IHNldCBkZWZhdWx0IHNvcnQgaWYgdGhlcmUgaXMgbm8gb3RoZXIgc29ydCBwZXJzaXN0ZWRcbiAgICBpZiAoISF0aGlzLmRlZmF1bHRTb3J0ICYmICF0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkU29ydCh0aGlzLmlkKT8uZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnNldFNvcnQodGhpcy5kZWZhdWx0U29ydCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGVyc2lzdGVuY2VDb25maWcucGVyc2lzdFNvcnQpIHtcbiAgICAgIHRoaXMuaW5pdFNvcnRTdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZUNvbmZpZy5wZXJzaXN0RmlsdGVyKSB7XG4gICAgICB0aGlzLmluaXRGaWx0ZXJTdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZUNvbmZpZy5wZXJzaXN0UGFnZVNpemUpIHtcbiAgICAgIHRoaXMuaW5pdFBhZ2luYXRvclN0YXRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTb3J0U3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmxvYWRTb3J0KHRoaXMuaWQpO1xuICAgIGlmICghIXNvcnQpIHtcbiAgICAgIHRoaXMuc2V0U29ydChzb3J0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNvcnQoc29ydDogU29ydCk6IHZvaWQge1xuICAgIHRoaXMuX3NvcnQuYWN0aXZlID0gc29ydC5hY3RpdmU7XG4gICAgdGhpcy5fc29ydC5kaXJlY3Rpb24gPSBzb3J0LmRpcmVjdGlvbjtcbiAgICB0aGlzLl9zb3J0LnNvcnRDaGFuZ2UuZW1pdChzb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZpbHRlclN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmxvYWRGaWx0ZXIodGhpcy5pZCk7XG4gICAgdGhpcy5maWx0ZXIudXBkYXRlRmlsdGVyYWJsZXMoZmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFBhZ2luYXRvclN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMucGFnZSA9IHtcbiAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5sb2FkUGFnZVNpemUodGhpcy5pZCkgfHwgdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGxlbmd0aDogMCxcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0b3IoKTtcbiAgfVxuXG4gIC8qKiBDT0xVTU4gSEFORExJTkcgKi9cblxuICBwdWJsaWMgb25WaWV3RGVmaW5pdGlvbihkZWZpbml0aW9uOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5EZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgICB0aGlzLnZpZXdEZWZpbml0aW9uQ2hhbmdlRXZlbnQuZW1pdChkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbHVtblNldHRpbmdzKGRlZmluaXRpb24/OiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fc2hvd0NvbHVtbk1vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24gPSBkZWZpbml0aW9uID8gZGVmaW5pdGlvbiA6IHRoaXMuX2FsbENvbHVtbkRlZmluaXRpb25zWzBdO1xuICAgIGlmICh0aGlzLl9hbGxBdmFpbGFibGVDb2x1bW5zKSB7XG4gICAgICB0aGlzLm9wZW5Db2x1bW5Nb2RhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBubyBjb21wbGV0ZSBkZWZpbml0aW9ucyBoYXZlIGJlZW4gbG9hZGVkIHlldCBzZW5kIGFuIGV2ZW50IHNvIHRoZSBhcHAgY2FuIGxvYWQgaXRcbiAgICAgIHRoaXMuYWxsQ29sdW1uc0V2ZW50LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNDdXJyZW50RGVmaW5pdGlvbihkZWZpbml0aW9uOiBEYXRhVGFibGVDb2x1bW5EZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbiAmJiB0aGlzLl9zZWxlY3RlZENvbHVtbkRlZmluaXRpb24uaWQgPT09IGRlZmluaXRpb24uaWQ7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Db2x1bW5Nb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dEYXRhOiBEYXRhVGFibGVEaWFsb2dEYXRhID0ge1xuICAgICAgYWxsQ29sdW1uczogdGhpcy5fYWxsQXZhaWxhYmxlQ29sdW1ucyxcbiAgICAgIGRlZmluaXRpb246IHRoaXMuX3NlbGVjdGVkQ29sdW1uRGVmaW5pdGlvbixcbiAgICAgIGRlbGV0ZURlZmluaXRpb25BbGxvd2VkOiB0aGlzLmRlbGV0ZURlZmluaXRpb25BbGxvd2VkLFxuICAgICAgZmlsdGVyQ29sdW1uc0xhYmVsOiB0aGlzLmZpbHRlckNvbHVtbnNMYWJlbCxcbiAgICAgIGZpbHRlckNvbHVtbnNQbGFjZUhvbGRlcjogdGhpcy5maWx0ZXJDb2x1bW5zUGxhY2VIb2xkZXIsXG4gICAgICBub0RhdGFUZXh0OiB0aGlzLm5vRGF0YVRleHQsXG4gICAgICB0aXRsZUxhYmVsOiB0aGlzLmNvbHVtblNldHRpbmdzTW9kYWxUaXRsZUxhYmVsLFxuICAgICAgc2VsZWN0ZWRMYWJlbDogdGhpcy5zZWxlY3RlZExhYmVsLFxuICAgICAgYXZhaWxhYmxlTGFiZWw6IHRoaXMuYXZhaWxhYmxlTGFiZWwsXG4gICAgICBzYXZlTGFiZWw6IHRoaXMuc2F2ZUxhYmVsLFxuICAgICAgZGVsZXRlTGFiZWw6IHRoaXMuZGVsZXRlTGFiZWwsXG4gICAgICBjYW5jZWxMYWJlbDogdGhpcy5jYW5jZWxMYWJlbCxcbiAgICAgIGluZm9UZXh0TGFiZWw6IHRoaXMuaW5mb1RleHRMYWJlbCxcbiAgICB9O1xuICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMubWF0RGlhbG9nLm9wZW4oRGF0YVRhYmxlQ29sdW1uc01vZGFsQ29tcG9uZW50LCB7IGRhdGE6IGRpYWxvZ0RhdGEgfSk7XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIC8vIG5vIGV2ZW50IG9uIENBTkNFTFxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmNvbHVtbkRlZmluaXRpb25DaGFuZ2VFdmVudC5lbWl0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgZGF0YS1jeT1cInRhYmxlLWFjdGlvbi1iYXJcIiBjbGFzcz1cIm1hZC1kYXRhdGFibGUtYWN0aW9uLWJhclwiPlxuICA8IS0tIFRhYmxlIGFjdGlvbnM6IGRpc3BsYXllZCBiZWZvcmUgdGhlIHRhYmxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwidGFibGVBY3Rpb25zPy5sZW5ndGggfHwgKGZpbHRlck1vZGUgPT09ICdDT0xVTU5fQkFTRUQnICYmIHNob3dEZWxldGVGaWx0ZXJBY3Rpb24pXCI+XG4gICAgPG1hZC1idXR0b24tZ3JvdXAgKm5nRm9yPVwibGV0IGFjdGlvbkdyb3VwIG9mIHRhYmxlQWN0aW9uc1wiIGNsYXNzPVwidGFibGUtYWN0aW9uLWdyb3VwXCI+XG4gICAgICA8bWFkLW91dGxpbmUtYnV0dG9uXG4gICAgICAgIFtoaWRkZW5dPVwiaXNIaWRkZW4odGFibGVBY3Rpb24pXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQodGFibGVBY3Rpb24pXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYmxlQWN0aW9uIG9mIGFjdGlvbkdyb3VwXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uRXZlbnQodGFibGVBY3Rpb24pXCJcbiAgICAgID5cbiAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKHRhYmxlQWN0aW9uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IHRhYmxlQWN0aW9uLmxhYmVsIH19XG4gICAgICAgIHt7IGdldFNlbGVjdGVkQ291bnQodGFibGVBY3Rpb24udHlwZSkgfX1cbiAgICAgIDwvbWFkLW91dGxpbmUtYnV0dG9uPlxuICAgIDwvbWFkLWJ1dHRvbi1ncm91cD5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJNb2RlID09PSAnQ09MVU1OX0JBU0VEJyAmJiBzaG93RGVsZXRlRmlsdGVyQWN0aW9uXCI+XG4gICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIGNsYXNzPVwiZGVsZXRlLWZpbHRlci1hY3Rpb25cIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25EZWxldGVGaWx0ZXIoKVwiXG4gICAgICA+ZmlsdGVyX2FsdF9vZmY8L21hdC1pY29uXG4gICAgPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG1hdC1mb3JtLWZpZWxkIGRhdGEtY3k9XCJmaWx0ZXItaW5wdXRcIiAqbmdJZj1cImZpbHRlck1vZGUgPT09ICdUQUJMRV9CQVNFRCdcIj5cbiAgICA8bWF0LWxhYmVsPnt7IHRyYW5zbGF0ZUxhYmVscyA/IChmaWx0ZXJMYWJlbCB8IHRyYW5zbGF0ZSkgOiBmaWx0ZXJMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5dXApPVwib25UYWJsZUJhc2VkRmlsdGVyRXZlbnQoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwie3sgZmlsdGVyUGxhY2Vob2xkZXIgfX1cIiAvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG5cbjwhLS0gUm93IGFjdGlvbiBtZW51IC0tPlxuPG1hdC1tZW51ICNyb3dBY3Rpb25NZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWVsZW1lbnQ9XCJlbGVtZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93QWN0aW9uIG9mIHJvd0FjdGlvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgZGF0YS1jeT1cInJvdy1hY3Rpb24tbWVudS1idXR0b25cIlxuICAgICAgICAqbmdJZj1cIiFpc0hpZGRlbihyb3dBY3Rpb24pXCJcbiAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICBjbGFzcz1cInJvdy1hY3Rpb25cIlxuICAgICAgICAoY2xpY2spPVwib25Sb3dFdmVudCgkZXZlbnQsIGVsZW1lbnQsIHJvd0FjdGlvbilcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChyb3dBY3Rpb24pXCJcbiAgICAgID5cbiAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKHJvd0FjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiByb3dBY3Rpb24ubGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPCEtLSBlZGl0YWJsZSBkZWZpbml0aW9uIG1lbnUgLS0+XG48bWF0LW1lbnUgI2VkaXRhYmxlRGVmaW5pdGlvbk1lbnU9XCJtYXRNZW51XCI+XG4gIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudD5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdGb3I9XCJsZXQgZGVmaW5pdGlvbiBvZiBlZGl0YWJsZUNvbHVtbkRlZmluaXRpb25zXCJcbiAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgIGNsYXNzPVwicm93LWFjdGlvblwiXG4gICAgICAoY2xpY2spPVwib25Db2x1bW5TZXR0aW5ncyhkZWZpbml0aW9uKVwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdhY3RpdmUtY29sdW1uLWRlZmluaXRpb24nOiBpc0N1cnJlbnREZWZpbml0aW9uKGRlZmluaXRpb24pIH1cIlxuICAgID5cbiAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChkZWZpbml0aW9uLmxhYmVsIHwgdHJhbnNsYXRlKSA6IGRlZmluaXRpb24ubGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gdmlld2FibGUgZGVmaW5pdGlvbiBtZW51IC0tPlxuPG1hdC1tZW51ICN2aWV3YWJsZURlZmluaXRpb25NZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQ+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IGRlZmluaXRpb24gb2Ygdmlld2FibGVDb2x1bW5EZWZpbml0aW9uc1wiXG4gICAgICBtYXQtbWVudS1pdGVtXG4gICAgICBjbGFzcz1cInJvdy1hY3Rpb25cIlxuICAgICAgKGNsaWNrKT1cIm9uVmlld0RlZmluaXRpb24oZGVmaW5pdGlvbilcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnYWN0aXZlLWNvbHVtbi1kZWZpbml0aW9uJzogaXNDdXJyZW50RGVmaW5pdGlvbihkZWZpbml0aW9uKSB9XCJcbiAgICA+XG4gICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAoZGVmaW5pdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBkZWZpbml0aW9uLmxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48IS0tIFRhYmxlIC0tPlxuPGRpdlxuICAqbmdJZj1cImZpbHRlck1vZGUgPT09ICdDT0xVTU5fQkFTRUQnIHx8IHNob3dFbXB0eVRhYmxlIHx8ICEhZGF0YVNvdXJjZS5maWx0ZXJlZERhdGE/Lmxlbmd0aDsgZWxzZSBub0RhdGFcIlxuICBjbGFzcz1cImRhdGF0YWJsZVwiXG4gIFtjbGFzc109XCJ0YWJsZUNsYXNzXCJcbj5cbiAgPGRpdiBjbGFzcz1cIm1hZC1kYXRhdGFibGUtc3Bpbm5lci13cmFwcGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCI1MFwiIFtzdHJva2VXaWR0aF09XCIzXCI+PC9tYXQtc3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDx0YWJsZVxuICAgIFtpZF09XCJpZFwiXG4gICAgbWF0LXRhYmxlXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgbWF0U29ydFxuICAgIChtYXRTb3J0Q2hhbmdlKT1cIm9uU29ydGluZ0V2ZW50KCRldmVudClcIlxuICAgIG1hZEZpbHRlclxuICAgIChtYWRGaWx0ZXJDaGFuZ2UpPVwib25Db2x1bW5CYXNlZEZpbHRlckV2ZW50KCRldmVudClcIlxuICAgIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwiISFleHBhbmRhYmxlRGVmXCJcbiAgPlxuICAgIDwhLS0gUm93IGFjdGlvbnMgY29sdW1uLS0+XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIkFDVElPTl9DT0xVTU5fTkFNRVwiPlxuICAgICAgPHRoIHNjb3BlPVwiY29sXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cInNob3dBY3Rpb25Db2x1bW4gPyAncm93LWFjdGlvbi1jZWxsJyA6ICduby1hY3Rpb24tY2VsbCdcIj5cbiAgICAgICAgPCEtLSBCQVRDSDogbWFzdGVyIGNoZWNrYm94IC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0aW9uRW1pdE1vZGUgIT09ICdOT05FJyAmJiBzZWxlY3Rpb25Nb2RlID09PSAnQkFUQ0gnXCIgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWNoZWNrYm94LWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVNlbGVjdEFsbCgpXCIgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIj4gPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIFNJTkdMRSAvIE5PTkU6IG5vdGhpbmcgaW4gaGVhZGVyIHJvdyAtLT5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFtuZ0NsYXNzXT1cInNob3dBY3Rpb25Db2x1bW4gPyAncm93LWFjdGlvbi1jZWxsJyA6ICduby1hY3Rpb24tY2VsbCdcIj5cbiAgICAgICAgPCEtLSBCQVRDSDogcm93IGNoZWNrYm94IC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NoZWNrYm94KGVsZW1lbnQpXCIgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLWNoZWNrYm94LWNvbnRhaW5lclwiIChjbGljayk9XCJvblJvd0V2ZW50KCRldmVudCwgZWxlbWVudClcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwibm8tcG9pbnRlci1ldmVudHNcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGVsZW1lbnQucm93SWQpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBTSU5HTEU6IHJvdyBhY3Rpb24gbWVudSBpY29uIC0tPlxuICAgICAgICA8bWFkLWljb24tYnV0dG9uIGRhdGEtY3k9XCJyb3ctYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgKm5nSWY9XCJzaG93Um93QWN0aW9uSWNvbihlbGVtZW50KSAmJiBoYXNWaXNpYmxlUm93QWN0aW9ucyhlbGVtZW50KVwiXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7IGVsZW1lbnQ6IGVsZW1lbnQgfVwiXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInJvd0FjdGlvbk1lbnVcIlxuICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdGlvbkV2ZW50KGVsZW1lbnQucm93SWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICAgICAgPCEtLSBTSU5HTEU6IHJvdyByYWRpbyBidXR0b24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmFkaW9CdXR0b24oZWxlbWVudClcIiBjbGFzcz1cIm1hZC1kYXRhdGFibGUtY2hlY2tib3gtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9uUm93RXZlbnQoJGV2ZW50LCBlbGVtZW50KVwiPlxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibm8tcG9pbnRlci1ldmVudHNcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGVsZW1lbnQucm93SWQpXCI+IDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gRVhQQU5EQUJMRTogcm93IGlzIGV4cGFuZGFibGUvY29sbGFwc2FibGUgLS0+XG4gICAgICAgIDxtYWQtaWNvbi1idXR0b24gKm5nSWY9XCJzaG93RXhwYW5kYWJsZUJ1dHRvbihlbGVtZW50KVwiIChjbGljayk9XCJvbkV4cGFuZCgkZXZlbnQsIGVsZW1lbnQpXCI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZXhwYW5kZWRFbGVtZW50ICE9PSBlbGVtZW50XCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50XCI+a2V5Ym9hcmRfYXJyb3dfdXA8L21hdC1pY29uPlxuICAgICAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICAgICAgPCEtLSBOT05FOiBub3RoaW5nIC0tPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIENlbGwgZGVmaW5pdGlvbnMgYW5kIHJvd3Mgd2l0aCBpbmplY3RlZCBjZWxscyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmlkXCI+XG4gICAgICA8IS0tIGhlYWRlciBjZWxsIHRvIGJlIGluamVjdGVkIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZ2V0RGF0YVRhYmxlSGVhZGVyVHlwZShjb2x1bW4pXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTT1JUJ1wiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtcmlnaHRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlcj1cInt7IGNvbHVtbi5vcmRlckJ5TmFtZSA/IGNvbHVtbi5vcmRlckJ5TmFtZSA6IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZCA/ICdiZWZvcmUnIDogJ2FmdGVyJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKGNvbHVtbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0ZJTFRFUidcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LXJpZ2h0XT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgICAgICBtYWQtZmlsdGVyLWhlYWRlcj1cInt7IGNvbHVtbi5kYXRhUHJvcGVydHlOYW1lIH19XCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJDb2x1bW5SaWdodEFsaWduZWRdPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkXCJcbiAgICAgICAgICAgIFttYWRGaWx0ZXJPcHRpb25zXT1cImNvbHVtbi5maWx0ZXJQYXJhbXM/LmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTT1JUX0FORF9GSUxURVInXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyPVwie3sgY29sdW1uLm9yZGVyQnlOYW1lID8gY29sdW1uLm9yZGVyQnlOYW1lIDogY29sdW1uLmRhdGFQcm9wZXJ0eU5hbWUgfX1cIlxuICAgICAgICAgICAgW2Fycm93UG9zaXRpb25dPVwiY29sdW1uLmlzUmlnaHRBbGlnbmVkID8gJ2JlZm9yZScgOiAnYWZ0ZXInXCJcbiAgICAgICAgICAgIG1hZC1maWx0ZXItaGVhZGVyPVwie3sgY29sdW1uLmRhdGFQcm9wZXJ0eU5hbWUgfX1cIlxuICAgICAgICAgICAgW21hZEZpbHRlckNvbHVtblJpZ2h0QWxpZ25lZF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIlxuICAgICAgICAgICAgW21hZEZpbHRlck9wdGlvbnNdPVwiY29sdW1uLmZpbHRlclBhcmFtcz8uZmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzID8gKGNvbHVtbi5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MudGV4dC1yaWdodF09XCJjb2x1bW4uaXNSaWdodEFsaWduZWRcIj5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyA/IChjb2x1bW4ubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBkYXRhIGNlbGwgdG8gYmUgaW5qZWN0ZWQgLS0+XG4gICAgICA8dGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiXG4gICAgICAgIFtjbGFzcy50ZXh0LXJpZ2h0XT1cImNvbHVtbi5pc1JpZ2h0QWxpZ25lZFwiXG4gICAgICAgIFtjbGFzcy5tYWQtZHQtY2hpbGQtY2VsbF09XCJlbGVtZW50LnBhcmVudElkXCJcbiAgICAgICAgW25nU3dpdGNoXT1cImNvbHVtbi50cmFuc2Zvcm1lclwiXG4gICAgICAgIChjbGljayk9XCIhZGlzYWJsZVJvd0NsaWNrICYmIG9uUm93RXZlbnQoJGV2ZW50LCBlbGVtZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgZ2V0Q3VzdG9tQ2VsbFRlbXBsYXRlKGNvbHVtbi5pZCkgfHwgZGVmYXVsdENlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4sIGVsZW1lbnQ6IGVsZW1lbnQsICRpbXBsaWNpdDogZWxlbWVudCB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLSBUaGUgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWV4cGFuZGFibGVEZWZcIiBbbWF0Q29sdW1uRGVmXT1cImV4cGFuZGFibGVDb2x1bW5EZWZcIj5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hZC1kYXRhLXRhYmxlLWV4cGFuZGFibGUtYXJlYVwiIFtAZGV0YWlsRXhwYW5kXT1cImVsZW1lbnQgPT09IGV4cGFuZGVkRWxlbWVudCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGdldEN1c3RvbUV4cGFuZGFibGVUZW1wbGF0ZSgpIHx8IGRlZmF1bHRDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgY29sdW1uOiBlbGVtZW50LCBlbGVtZW50OiBlbGVtZW50LCAkaW1wbGljaXQ6IGVsZW1lbnQgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gaGVhZGVyIHJvdyB3aGVyZSBjZWxscyB3aWxsIGJlIGluamVjdGVkIC0tPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiY29sdW1uSWRzXCI+PC90cj5cbiAgICA8IS0tIGRhdGEgcm93IHdoZXJlIGNlbGxzIHdpbGwgYmUgaW5qZWN0ZWQgLS0+XG4gICAgPHRyXG4gICAgICBtYXQtcm93XG4gICAgICBbY2xhc3MuY2xpY2thYmxlLXRhYmxlLXJvd109XCIhcm93LnBhcmVudElkICYmIHNlbGVjdGlvbkVtaXRNb2RlICE9PSAnTk9ORSdcIlxuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtbklkc1wiXG4gICAgICAoY2xpY2spPVwib25FeHBhbmQoJGV2ZW50LCByb3cpXCJcbiAgICA+PC90cj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFleHBhbmRhYmxlRGVmXCI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IGVsZW1lbnQ7IGNvbHVtbnM6IFtleHBhbmRhYmxlQ29sdW1uRGVmXVwiIGNsYXNzPVwibWFkLWRhdGEtdGFibGUtZXhwYW5kYWJsZS1yb3dcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbWF0Tm9EYXRhUm93PlxuICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGwgbm9EYXRhVGV4dCBjb2x1bW5CYXNlZEZpbHRlclwiIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uSWRzLmxlbmd0aFwiPlxuICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAobm9EYXRhVGV4dCB8IHRyYW5zbGF0ZSkgOiBub0RhdGFUZXh0IH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGFibGU+XG48L2Rpdj5cbjxkaXYgZGF0YS1jeT1cInRhYmxlLWJvdHRvbS1hcmVhXCIgY2xhc3M9XCJtYWQtZGF0YS10YWJsZS1ib3R0b20tYXJlYVwiPlxuICA8ZGl2IGRhdGEtY3k9XCJkZWZpbml0aW9uLWJ1dHRvbi1ibG9ja1wiIGNsYXNzPVwibWFkLWRhdGEtdGFibGUtYm90dG9tLWluZm8tYXJlYVwiPlxuICAgIDwhLS0gY29sdW1uIHNldHRpbmdzOiAxIGRlZmluaXRpb24gLS0+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlQ29sdW1uRGVmaW5pdGlvbnM/Lmxlbmd0aCA9PT0gMVwiIChjbGljayk9XCJvbkNvbHVtblNldHRpbmdzKClcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+dmlld19jb2x1bW48L21hdC1pY29uPlxuICAgIDwvbWFkLWljb24tYnV0dG9uPlxuICAgIDwhLS0gY29sdW1uIHNldHRpbmdzOiBtdWx0aXBsZSBkZWZpbml0aW9ucyAtLT5cbiAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwiKGVkaXRhYmxlQ29sdW1uRGVmaW5pdGlvbnM/Lmxlbmd0aCB8fCAwKSA+IDBcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZWRpdGFibGVEZWZpbml0aW9uTWVudVwiPlxuICAgICAgPG1hdC1pY29uPnZpZXdfY29sdW1uPC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICA8IS0tIGNvbHVtbiB2aWV3OiBtdWx0aXBsZSBkZWZpbml0aW9ucyAtLT5cbiAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwiKHZpZXdhYmxlQ29sdW1uRGVmaW5pdGlvbnM/Lmxlbmd0aCB8fCAwKSA+IDBcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidmlld2FibGVEZWZpbml0aW9uTWVudVwiPlxuICAgICAgPG1hdC1pY29uPnByZXZpZXc8L21hdC1pY29uPlxuICAgIDwvbWFkLWljb24tYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gIDxtYXQtcGFnaW5hdG9yXG4gICAgW3N0eWxlLmRpc3BsYXldPVwicGFnaW5hdGlvbkVuYWJsZWQgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgICBbbGVuZ3RoXT1cInBhZ2VMZW5ndGhcIlxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcbiAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAocGFnZSk9XCJvblBhZ2VFdmVudCgkZXZlbnQpXCJcbiAgICBzaG93Rmlyc3RMYXN0QnV0dG9uc1xuICA+XG4gIDwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PlxuXG48IS0tIE5vIGRhdGEgYWxlcnQgLS0+XG48bmctdGVtcGxhdGUgI25vRGF0YT5cbiAgPGRpdiBkYXRhLWN5PVwibm8tZGF0YS1ibG9ja1wiIGNsYXNzPVwibm9EYXRhVGV4dFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYWQtZGF0YXRhYmxlLXNwaW5uZXItd3JhcHBlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCI1MFwiIFtzdHJva2VXaWR0aF09XCIzXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICB7eyB0cmFuc2xhdGVMYWJlbHMgPyAobm9EYXRhVGV4dCB8IHRyYW5zbGF0ZSkgOiBub0RhdGFUZXh0IH19XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBkZWZhdWx0IGNlbGwgdGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LWVsZW1lbnQ9XCJlbGVtZW50XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8c3Bhbj5cbiAgICB7eyBlbGVtZW50W2NvbHVtbi5kYXRhUHJvcGVydHlOYW1lXSB9fVxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIGN1c3RvbSBjZWxsIHRlbXBsYXRlcyBpbmplY3RlZCBmcm9tIHBhcmVudCAtLT5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
@@ -37,4 +37,4 @@ export class DataTableActionUtil {
37
37
  }, {}));
38
38
  }
39
39
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1hY3Rpb24tdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL2RhdGEtdGFibGUvdXRpbC9kYXRhLXRhYmxlLWFjdGlvbi11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxtQkFBbUI7SUFDdkIsTUFBTSxDQUFDLGlCQUFpQixDQUM3QixPQUEwQixFQUMxQixhQUFxQztRQUtyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzVCLElBQUksYUFBYSxLQUFLLE1BQU0sQ0FBQyxZQUFZLEVBQUU7Z0JBQ3pDLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDbkIsS0FBSyxRQUFRO3dCQUNYLElBQUksYUFBYSxLQUFLLFFBQVEsRUFBRTs0QkFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDekI7NkJBQU07NEJBQ0wsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDM0I7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLE9BQU87d0JBQ1YsSUFBSSxhQUFhLEtBQUssUUFBUSxFQUFFOzRCQUM5QixZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUMzQjt3QkFDRCxNQUFNO29CQUNSO3dCQUNFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzdCO2FBQ0Y7U0FDRjtRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsVUFBVTtZQUN0QixtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUM7U0FDOUUsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsc0JBQXNCLENBQUMsWUFBK0I7UUFDbkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBNEMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQzdELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUMxRSxDQUFDO1lBQ0YsTUFBTSxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUNuRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDUCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVRhYmxlQWN0aW9uLCBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vZGF0YS10YWJsZSc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVBY3Rpb25VdGlsIHtcbiAgcHVibGljIHN0YXRpYyBnZXREaXNwbGF5QWN0aW9ucyhcbiAgICBhY3Rpb25zOiBEYXRhVGFibGVBY3Rpb25bXSxcbiAgICBzZWxlY3Rpb25Nb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlLFxuICApOiB7XG4gICAgcm93QWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW107XG4gICAgZ3JvdXBlZFRhYmxlQWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW11bXTtcbiAgfSB7XG4gICAgY29uc3Qgcm93QWN0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgIGlmIChzZWxlY3Rpb25Nb2RlICE9PSBhY3Rpb24uaGlkZGVuSW5Nb2RlKSB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdTSU5HTEUnOlxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnKSB7XG4gICAgICAgICAgICAgIHJvd0FjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFibGVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0JBVENIJzpcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Nb2RlICE9PSAnU0lOR0xFJykge1xuICAgICAgICAgICAgICB0YWJsZUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRhYmxlQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm93QWN0aW9uczogcm93QWN0aW9ucyxcbiAgICAgIGdyb3VwZWRUYWJsZUFjdGlvbnM6IERhdGFUYWJsZUFjdGlvblV0aWwuZ2V0R3JvdXBlZFRhYmxlQWN0aW9ucyh0YWJsZUFjdGlvbnMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRHcm91cGVkVGFibGVBY3Rpb25zKHRhYmxlQWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW10pOiBEYXRhVGFibGVBY3Rpb25bXVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHRhYmxlQWN0aW9ucy5yZWR1Y2UoKHJlc3VsdDogeyBba2V5OiBudW1iZXJdOiBEYXRhVGFibGVBY3Rpb25bXSB9LCBjdXJyZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5maW5kSW5kZXgoKFssIGFjdGlvbnNdKSA9PlxuICAgICAgICAgIGFjdGlvbnMuZmluZCgoaXQpID0+ICEhY3VycmVudC5ncm91cElkICYmIGl0Lmdyb3VwSWQgPT09IGN1cnJlbnQuZ3JvdXBJZCksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGluZGV4ICE9PSAtMSA/IGluZGV4IDogT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggfHwgMDtcbiAgICAgICAgKHJlc3VsdFtrZXldID0gcmVzdWx0W2tleV0gfHwgW10pLnB1c2goY3VycmVudCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCB7fSksXG4gICAgKTtcbiAgfVxufVxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1hY3Rpb24tdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL2RhdGEtdGFibGUvdXRpbC9kYXRhLXRhYmxlLWFjdGlvbi11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxtQkFBbUI7SUFDdkIsTUFBTSxDQUFDLGlCQUFpQixDQUM3QixPQUEwQixFQUMxQixhQUFxQztRQUtyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxhQUFhLEtBQUssTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMxQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDcEIsS0FBSyxRQUFRO3dCQUNYLElBQUksYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDOzRCQUMvQixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQixDQUFDOzZCQUFNLENBQUM7NEJBQ04sWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUIsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssT0FBTzt3QkFDVixJQUFJLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQzs0QkFDL0IsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUIsQ0FBQzt3QkFDRCxNQUFNO29CQUNSO3dCQUNFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsVUFBVTtZQUN0QixtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUM7U0FDOUUsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsc0JBQXNCLENBQUMsWUFBK0I7UUFDbkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBNEMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQzdELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUMxRSxDQUFDO1lBQ0YsTUFBTSxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUNuRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDUCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVRhYmxlQWN0aW9uLCBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vZGF0YS10YWJsZSc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVBY3Rpb25VdGlsIHtcbiAgcHVibGljIHN0YXRpYyBnZXREaXNwbGF5QWN0aW9ucyhcbiAgICBhY3Rpb25zOiBEYXRhVGFibGVBY3Rpb25bXSxcbiAgICBzZWxlY3Rpb25Nb2RlOiBEYXRhVGFibGVTZWxlY3Rpb25Nb2RlLFxuICApOiB7XG4gICAgcm93QWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW107XG4gICAgZ3JvdXBlZFRhYmxlQWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW11bXTtcbiAgfSB7XG4gICAgY29uc3Qgcm93QWN0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgIGlmIChzZWxlY3Rpb25Nb2RlICE9PSBhY3Rpb24uaGlkZGVuSW5Nb2RlKSB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdTSU5HTEUnOlxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdTSU5HTEUnKSB7XG4gICAgICAgICAgICAgIHJvd0FjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFibGVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0JBVENIJzpcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Nb2RlICE9PSAnU0lOR0xFJykge1xuICAgICAgICAgICAgICB0YWJsZUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRhYmxlQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm93QWN0aW9uczogcm93QWN0aW9ucyxcbiAgICAgIGdyb3VwZWRUYWJsZUFjdGlvbnM6IERhdGFUYWJsZUFjdGlvblV0aWwuZ2V0R3JvdXBlZFRhYmxlQWN0aW9ucyh0YWJsZUFjdGlvbnMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRHcm91cGVkVGFibGVBY3Rpb25zKHRhYmxlQWN0aW9uczogRGF0YVRhYmxlQWN0aW9uW10pOiBEYXRhVGFibGVBY3Rpb25bXVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHRhYmxlQWN0aW9ucy5yZWR1Y2UoKHJlc3VsdDogeyBba2V5OiBudW1iZXJdOiBEYXRhVGFibGVBY3Rpb25bXSB9LCBjdXJyZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5maW5kSW5kZXgoKFssIGFjdGlvbnNdKSA9PlxuICAgICAgICAgIGFjdGlvbnMuZmluZCgoaXQpID0+ICEhY3VycmVudC5ncm91cElkICYmIGl0Lmdyb3VwSWQgPT09IGN1cnJlbnQuZ3JvdXBJZCksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGluZGV4ICE9PSAtMSA/IGluZGV4IDogT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggfHwgMDtcbiAgICAgICAgKHJlc3VsdFtrZXldID0gcmVzdWx0W2tleV0gfHwgW10pLnB1c2goY3VycmVudCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCB7fSksXG4gICAgKTtcbiAgfVxufVxuIl19