{"version":3,"file":"finastra-angular-components-table.mjs","sources":["../tmp-esm2022/table/src/table.models.js","../tmp-esm2022/table/src/table.component.js","../tmp-esm2022/table/finastra-angular-components-table.js"],"sourcesContent":["export var UxgColumnType;\n(function (UxgColumnType) {\n    UxgColumnType[\"string\"] = \"string\";\n    UxgColumnType[\"number\"] = \"number\";\n    UxgColumnType[\"date\"] = \"date\";\n    UxgColumnType[\"typedouble\"] = \"typedouble\";\n    UxgColumnType[\"cellTemplate\"] = \"cellTemplate\";\n})(UxgColumnType || (UxgColumnType = {}));\nexport var UxgActionColumnPosition;\n(function (UxgActionColumnPosition) {\n    UxgActionColumnPosition[\"start\"] = \"start\";\n    UxgActionColumnPosition[\"end\"] = \"end\";\n})(UxgActionColumnPosition || (UxgActionColumnPosition = {}));\nexport const UxgDefaultPaging = {\n    disabled: false,\n    pageIndex: 0,\n    length: 0,\n    hidePageSize: false,\n    pageSizeOptions: [5, 10],\n    pageSize: 5,\n    showFirstLastButtons: true\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvdGFibGUvc3JjL3RhYmxlLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsTUFBTSxDQUFOLElBQVksYUFNWDtBQU5ELFdBQVksYUFBYTtJQUN2QixrQ0FBaUIsQ0FBQTtJQUNqQixrQ0FBaUIsQ0FBQTtJQUNqQiw4QkFBYSxDQUFBO0lBQ2IsMENBQXlCLENBQUE7SUFDekIsOENBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQU5XLGFBQWEsS0FBYixhQUFhLFFBTXhCO0FBRUQsTUFBTSxDQUFOLElBQVksdUJBR1g7QUFIRCxXQUFZLHVCQUF1QjtJQUNqQywwQ0FBZSxDQUFBO0lBQ2Ysc0NBQVcsQ0FBQTtBQUNiLENBQUMsRUFIVyx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBR2xDO0FBZ0JELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFZO0lBQ3ZDLFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLENBQUM7SUFDWixNQUFNLEVBQUUsQ0FBQztJQUNULFlBQVksRUFBRSxLQUFLO0lBQ25CLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDeEIsUUFBUSxFQUFFLENBQUM7SUFDWCxvQkFBb0IsRUFBRSxJQUFJO0NBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuZXhwb3J0IGludGVyZmFjZSBVeGdTb3J0IGV4dGVuZHMgU29ydCB7XG4gIGFjdGl2ZTogc3RyaW5nO1xuICBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXhnQ29sdW1uIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZzsgLy8gY29sdW1uIG5hbWVcbiAgdHlwZTogVXhnQ29sdW1uVHlwZTsgLy8gdGhlIGRhdGEgdHlwZSBvZiB0aGlzIGNvbHVtbiA9PiBjYW4gYXBwbHkgZGlmZmVyZW50IHRlbXBsYXRlIHRvIHRoaXMgY29sdW1uXG4gIGFsaWduPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInOyAvLyB0ZXh0IGFsaWduIGluIGNlbGxcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGNlbGxUZW1wbGF0ZT86IGFueTtcbiAgY2VsbFRlbXBsYXRlRW1pdGVyPzogRXZlbnRFbWl0dGVyPGFueT47XG4gIGNlbGxFZGl0VGVtcGxhdGU/OiBhbnk7XG4gIGZpbHRlcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIFV4Z0NvbHVtblR5cGUge1xuICBzdHJpbmcgPSAnc3RyaW5nJyxcbiAgbnVtYmVyID0gJ251bWJlcicsXG4gIGRhdGUgPSAnZGF0ZScsXG4gIHR5cGVkb3VibGUgPSAndHlwZWRvdWJsZScsXG4gIGNlbGxUZW1wbGF0ZSA9ICdjZWxsVGVtcGxhdGUnXG59XG5cbmV4cG9ydCBlbnVtIFV4Z0FjdGlvbkNvbHVtblBvc2l0aW9uIHtcbiAgc3RhcnQgPSAnc3RhcnQnLFxuICBlbmQgPSAnZW5kJ1xufVxuZXhwb3J0IGludGVyZmFjZSBVeGdQYWdlIHtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIGhpZGVQYWdlU2l6ZT86IGJvb2xlYW47XG4gIHNob3dGaXJzdExhc3RCdXR0b25zPzogYm9vbGVhbjtcbiAgcGFnZUluZGV4PzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgcGFnZVNpemVPcHRpb25zPzogbnVtYmVyW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXhnVGFibGVTZWxlY3RFdmVudCB7XG4gIHNpbmdsZVNlbGVjdDogYm9vbGVhbjtcbiAgZGF0YTogYW55W107IC8vc2VsZWN0ZWQgcm93IGRhdGFcbn1cblxuZXhwb3J0IGNvbnN0IFV4Z0RlZmF1bHRQYWdpbmc6IFV4Z1BhZ2UgPSB7XG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgcGFnZUluZGV4OiAwLFxuICBsZW5ndGg6IDAsXG4gIGhpZGVQYWdlU2l6ZTogZmFsc2UsXG4gIHBhZ2VTaXplT3B0aW9uczogWzUsIDEwXSxcbiAgcGFnZVNpemU6IDUsXG4gIHNob3dGaXJzdExhc3RCdXR0b25zOiB0cnVlXG59O1xuIl19","import { CdkDrag, CdkDropList, CdkDropListGroup, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormGroup, FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTable, MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport isEqual from 'lodash-es/isEqual';\nimport { UxgActionColumnPosition, UxgColumnType, UxgDefaultPaging } from './table.models';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/material/table\";\nimport * as i2 from \"@angular/material/sort\";\nimport * as i3 from \"@angular/material/checkbox\";\nimport * as i4 from \"@angular/material/icon\";\nimport * as i5 from \"@angular/material/input\";\nimport * as i6 from \"@angular/forms\";\nimport * as i7 from \"@angular/material/button\";\nimport * as i8 from \"@angular/material/paginator\";\nimport * as i9 from \"@angular/material/menu\";\nexport class TableComponent {\n    get data() {\n        return this._data;\n    }\n    set data(data) {\n        this._data = data;\n        this.dataToComponent.data = data;\n        if (this.pageEnable && !this.pageChanged) {\n            if (this.paging) {\n                this.applyPaging();\n            }\n            else {\n                this.applyDefaultPaging();\n            }\n            if (this.paginator) {\n                this.paginator.firstPage();\n            }\n        }\n        this.applySort();\n    }\n    get columnsToDisplay() {\n        return this._columnsToDisplay;\n    }\n    set columnsToDisplay(columnsToDisplay) {\n        this._columnsToDisplay = columnsToDisplay;\n        this.columnsToDisplayToComponent = columnsToDisplay;\n        if (this.multiSelect && this.columnsToDisplayToComponent.indexOf(this.uxgMultiSelectColumn[0]) < 0) {\n            this.columnsToDisplayToComponent = this.uxgMultiSelectColumn.concat(this.columnsToDisplayToComponent);\n        }\n        if ((this.enableEdit || this.enableDelete) && this.columnsToDisplayToComponent.indexOf(this.uxgTableActionColumn[0]) < 0) {\n            this.addOrUpdateActionColumnToColumnsToDisplay();\n        }\n    }\n    get sort() {\n        return this._sort;\n    }\n    set sort(sort) {\n        this._sort = sort;\n        this.applySort();\n    }\n    get selectedKeys() {\n        return this._selectedIndex;\n    }\n    set selectedKeys(selectedIndex) {\n        this._selectedIndex = selectedIndex;\n        if (this.singleSelect && selectedIndex && selectedIndex.length > 0) {\n            if (this.isRowSelected(this.data[selectedIndex[0]])) {\n                this.selections.push(this.data[selectedIndex[0]]);\n            }\n        }\n        if (!this.singleSelect && this.multiSelect) {\n            this.selections.length = 0;\n            selectedIndex.forEach((sIndex) => {\n                if (!this.isRowSelected(this.data[sIndex])) {\n                    this.selections.push(this.data[sIndex]);\n                }\n            });\n        }\n    }\n    constructor() {\n        this.columns = []; // columns definitions\n        this.showTotalRows = false;\n        this.showTableHeader = true;\n        this.totalData = null;\n        this._sort = { active: '', direction: 'asc' };\n        // table config\n        this.stickyHeader = true;\n        this.stickyFooter = false;\n        this.columnDragEnable = false;\n        this.uxgMultiSelectColumn = ['uxg-table-select-row'];\n        this._selectedIndex = [];\n        this.singleSelect = false;\n        this.multiSelect = false;\n        this.selectChanged = new EventEmitter();\n        this.multiSelectSingleRowClicked = new EventEmitter();\n        this.sortChanged = new EventEmitter();\n        //paginator data\n        this.pageEnable = false;\n        this.pageChanged = new EventEmitter();\n        this.enableEdit = false;\n        this.enableDelete = false;\n        this.enableSend = false;\n        this.actionColumnPosition = UxgActionColumnPosition.end;\n        this.rowRemoved = new EventEmitter();\n        this.rowUpdated = new EventEmitter();\n        this.rowSend = new EventEmitter();\n        this.selections = [];\n        this.dataToComponent = new MatTableDataSource([]);\n        this.columnsToDisplayToComponent = [];\n        //filter part\n        this.columnFilters = {};\n        this.filterForm = new FormGroup({});\n        //local variable\n        this.previousIndex = -1; // used for column drag drop\n        //table data\n        this._data = [];\n        this._columnsToDisplay = [];\n        this.uxgTableEdit = false;\n        //edit part\n        this.uxgTableActionColumn = ['uxg-table-action-row'];\n        this.dataToComponent.filterPredicate = (data, filter) => {\n            const filters = JSON.parse(filter);\n            return Object.keys(filters).every((key) => {\n                return data[key].toString().toLowerCase().includes(filters[key]);\n            });\n        };\n    }\n    ngOnInit() {\n        if (this.singleSelect && this.multiSelect) {\n            this.multiSelect = false;\n        }\n        if (this.multiSelect && this.columnsToDisplayToComponent.indexOf(this.uxgMultiSelectColumn[0]) < 0) {\n            this.columnsToDisplayToComponent = this.uxgMultiSelectColumn.concat(this.columnsToDisplay);\n        }\n        if ((this.enableEdit || this.enableDelete) && this.columnsToDisplayToComponent.indexOf(this.uxgTableActionColumn[0]) < 0) {\n            this.addOrUpdateActionColumnToColumnsToDisplay();\n        }\n        if (this.pageEnable && !this.paging) {\n            this.applyDefaultPaging();\n        }\n        this.applySort();\n    }\n    applySort() {\n        if (this.sort && this.sort.active.length) {\n            this.sortData(this.sort, false);\n        }\n    }\n    ngOnChanges(changes) {\n        if (changes.data && !changes.data.isFirstChange()) {\n            this.table.renderRows();\n            if (this.pageEnable && !this.paging) {\n                this.applyDefaultPaging();\n            }\n            this.applySort();\n        }\n        if (changes.pageEnable && !changes.pageEnable.isFirstChange()) {\n            if (changes.pageEnable.currentValue === false) {\n                this.dataToComponent.data = this.data;\n                this.paging = undefined;\n            }\n            else {\n                if (!this.paging) {\n                    this.applyDefaultPaging();\n                }\n            }\n        }\n        if (changes.paging && !changes.paging.isFirstChange()) {\n            if (changes.paging.currentValue === null) {\n                this.applyDefaultPaging();\n            }\n        }\n        if (changes.multiSelect && !changes.multiSelect.isFirstChange()) {\n            this.columnsToDisplayToComponent = this.columnsToDisplay;\n            if (this.multiSelect) {\n                this.columnsToDisplayToComponent = this.uxgMultiSelectColumn.concat(this.columnsToDisplay);\n            }\n            this.emitSelectEvent();\n        }\n        if (changes.singleSelect && !changes.singleSelect.isFirstChange()) {\n            if (this.singleSelect) {\n                this.columnsToDisplayToComponent = this.columnsToDisplay;\n                if (this.selections.length > 1)\n                    this.selections.splice(1, this.selections.length);\n            }\n            this.emitSelectEvent();\n        }\n        if (changes.enableEdit && !changes.enableEdit.isFirstChange()) {\n            this.resetActionRow();\n        }\n        if (changes.enableDelete && !changes.enableDelete.isFirstChange()) {\n            this.resetActionRow();\n        }\n        if (changes.enableSend && !changes.enableSend.isFirstChange()) {\n            this.resetActionRow();\n        }\n        if (changes.actionColumnPosition && !changes.actionColumnPosition.isFirstChange()) {\n            this.addOrUpdateActionColumnToColumnsToDisplay();\n        }\n    }\n    applyFilter(value, column) {\n        this.columnFilters[column] = value.trim().toLowerCase();\n        this.dataToComponent.filter = JSON.stringify(this.columnFilters);\n    }\n    clearFilter(event, inputVal, column) {\n        this.stopPropagation(event);\n        inputVal.value = '';\n        this.applyFilter(inputVal.value, column.name);\n    }\n    stopPropagation(event) {\n        event.stopPropagation();\n    }\n    sortData($event, emit = true) {\n        if (this.sortChanged.observers.length > 0 && emit) {\n            this.sortChanged.emit($event);\n        }\n        else {\n            this.dataToComponent.data = this.localSort($event);\n        }\n    }\n    singleSelectRowClick(row) {\n        if (this.uxgTableEdit)\n            return;\n        this.dataToComponent.data.forEach((item) => delete item.uxgTableEdit);\n        if (this.singleSelect) {\n            if (!this.isRowSelected(row)) {\n                this.selections = [row];\n            }\n            else {\n                this.selections = [];\n            }\n            this.emitSelectEvent();\n            return;\n        }\n        if (!this.singleSelect && this.multiSelect) {\n            this.emitClickEvent(row);\n            return;\n        }\n    }\n    multiSelectRowClick(row) {\n        if (this.uxgTableEdit)\n            return;\n        if (!this.multiSelect) {\n            return;\n        }\n        if (!this.isRowSelected(row)) {\n            this.selections.push(row);\n        }\n        else {\n            this.selections.splice(this.getSelectedIndex(row), 1);\n        }\n        this.emitSelectEvent();\n    }\n    multiSelectAllRows($event) {\n        if ($event.checked) {\n            this.selections = [...this.dataToComponent.data];\n        }\n        else {\n            this.selections = [];\n        }\n        this.emitSelectEvent();\n    }\n    applyPageChanges($event) {\n        if (this.pageChanged.observers.length > 0) {\n            this.pageChanged.emit($event);\n        }\n        else {\n            this.localPaging($event);\n        }\n    }\n    getTotalRowCell(column) {\n        if (this.totalData && this.totalData[column.name]) {\n            return this.totalData[column.name];\n        }\n        else {\n            if (column.type === UxgColumnType.number) {\n                return this.dataToComponent.data.reduce((sum, current) => sum + current[column.name], 0);\n            }\n            else {\n                return '';\n            }\n        }\n    }\n    emitSelectEvent() {\n        this.selectChanged.emit({\n            singleSelect: this.singleSelect ? true : false,\n            data: this.selections\n        });\n    }\n    emitClickEvent(data) {\n        this.multiSelectSingleRowClicked.emit({\n            data: data\n        });\n    }\n    // @ts-expect-error: Argument $event is not used\n    columnDragStarted($event, index) {\n        index = this.resetIndexWithMultiSelectRow(index);\n        this.previousIndex = index;\n    }\n    columnDropped($event) {\n        const index = this.resetIndexWithMultiSelectRow($event.currentIndex);\n        if ($event) {\n            moveItemInArray(this.columnsToDisplayToComponent, this.previousIndex, index);\n        }\n    }\n    rowEditClick(row) {\n        this.dataToComponent.data.forEach((item) => {\n            delete item.uxgTableEdit;\n        });\n        this.editRowOrigin = { ...row };\n        row.uxgTableEdit = true;\n        this.uxgTableEdit = true;\n    }\n    rowSendTriggered(row) {\n        this.rowSend.emit({\n            data: row\n        });\n    }\n    rowEditConfirm(newRow) {\n        delete newRow.uxgTableEdit;\n        this.uxgTableEdit = false;\n        this.rowUpdated.emit({\n            data: newRow\n        });\n    }\n    rowEditCancel(row) {\n        delete row.uxgTableEdit;\n        this.uxgTableEdit = false;\n        Object.keys(row).forEach((key) => {\n            row[key] = this.editRowOrigin[key];\n        });\n    }\n    rowDelete(row) {\n        const rowIndex = this.dataToComponent.data.findIndex((item) => item === row);\n        this.dataToComponent.data.splice(rowIndex, 1);\n        this.dataToComponent.data = this.dataToComponent.data.slice();\n        this.rowRemoved.emit({\n            data: row\n        });\n    }\n    rowNo(row) {\n        const rowIndex = this.dataToComponent.data.findIndex((item) => item === row);\n        return rowIndex + 1;\n    }\n    ngOnDestroy() { }\n    //local functions\n    applyDefaultPaging() {\n        const defaultPaging = { ...UxgDefaultPaging, ...{ length: this.dataToComponent.data.length } };\n        this.paging = defaultPaging;\n        this.applyPaging();\n    }\n    applyPaging() {\n        if (!this.paging) {\n            return;\n        }\n        this.localPaging({\n            pageIndex: this.paging.pageIndex || 0,\n            pageSize: this.paging.pageSize || 5,\n            length: this.data.length\n        });\n    }\n    localSort(sort) {\n        return this.dataToComponent.data.slice().sort((a, b) => {\n            let comparison = 0;\n            switch (this.getSortColumnType(sort.active)) {\n                case 'number':\n                    comparison = a[sort.active] - b[sort.active];\n                    break;\n                default:\n                    if (a[sort.active].toUpperCase() > b[sort.active].toUpperCase()) {\n                        comparison = 1;\n                    }\n                    else {\n                        comparison = -1;\n                    }\n            }\n            if (sort.direction === 'asc') {\n                return comparison;\n            }\n            else {\n                return -comparison;\n            }\n        });\n    }\n    getSortColumnType(columnName) {\n        const column = this.columns.find((item) => {\n            return item.name === columnName;\n        });\n        return column ? column.type : undefined;\n    }\n    localPaging(page) {\n        const offset = page.pageIndex * page.pageSize;\n        this.dataToComponent.data = this.data.slice(offset, offset + page.pageSize);\n    }\n    resetIndexWithMultiSelectRow(index) {\n        return this.multiSelect ? index + 1 : index;\n    }\n    resetActionRow() {\n        if ((this.enableDelete || this.enableEdit || this.enableSend) &&\n            this.columnsToDisplayToComponent.indexOf(this.uxgTableActionColumn[0]) < 0) {\n            this.addOrUpdateActionColumnToColumnsToDisplay();\n        }\n        if (!this.enableSend &&\n            !this.enableDelete &&\n            !this.enableEdit &&\n            this.columnsToDisplayToComponent.indexOf(this.uxgTableActionColumn[0]) > -1) {\n            this.removeActionColumnsFromColumnsToDisplay();\n        }\n    }\n    isRowSelected(row) {\n        return this.getSelectedIndex(row) > -1 ? true : false;\n    }\n    getSelectedIndex(row) {\n        const rowIdx = this.selections.findIndex((item) => {\n            return isEqual(item, row);\n        });\n        return rowIdx > -1 ? rowIdx : -1;\n    }\n    addOrUpdateActionColumnToColumnsToDisplay() {\n        if (this.columnsToDisplayToComponent.indexOf(this.uxgTableActionColumn[0]) > -1) {\n            this.removeActionColumnsFromColumnsToDisplay();\n        }\n        if (!this.actionColumnPosition || this.actionColumnPosition === UxgActionColumnPosition.end) {\n            this.columnsToDisplayToComponent = this.columnsToDisplayToComponent.concat(this.uxgTableActionColumn);\n        }\n        if (this.actionColumnPosition === UxgActionColumnPosition.start) {\n            this.columnsToDisplayToComponent = this.uxgTableActionColumn.concat(this.columnsToDisplayToComponent);\n        }\n    }\n    removeActionColumnsFromColumnsToDisplay() {\n        if (this.columnsToDisplayToComponent.indexOf(this.uxgTableActionColumn[0]) > -1)\n            this.columnsToDisplayToComponent.splice(this.columnsToDisplayToComponent.indexOf(this.uxgTableActionColumn[0]), 1);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: TableComponent, isStandalone: true, selector: \"uxg-table\", inputs: { data: \"data\", columnsToDisplay: \"columnsToDisplay\", columns: \"columns\", showTotalRows: \"showTotalRows\", showTableHeader: \"showTableHeader\", totalData: \"totalData\", sort: \"sort\", stickyHeader: \"stickyHeader\", stickyFooter: \"stickyFooter\", columnDragEnable: \"columnDragEnable\", selectedKeys: \"selectedKeys\", singleSelect: \"singleSelect\", multiSelect: \"multiSelect\", pageEnable: \"pageEnable\", paging: \"paging\", enableEdit: \"enableEdit\", enableDelete: \"enableDelete\", enableSend: \"enableSend\", actionColumnPosition: \"actionColumnPosition\" }, outputs: { selectChanged: \"selectChanged\", multiSelectSingleRowClicked: \"multiSelectSingleRowClicked\", sortChanged: \"sortChanged\", pageChanged: \"pageChanged\", rowRemoved: \"rowRemoved\", rowUpdated: \"rowUpdated\", rowSend: \"rowSend\" }, viewQueries: [{ propertyName: \"table\", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: \"paginator\", first: true, predicate: MatPaginator, descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<div class=\\\"uxg-data-table\\\">\\n  <table\\n    mat-table\\n    matSort\\n    cdkDropListGroup\\n    [dataSource]=\\\"dataToComponent\\\"\\n    [matSortActive]=\\\"sort.active\\\"\\n    [matSortDirection]=\\\"sort.direction\\\"\\n    (matSortChange)=\\\"sortData($event)\\\"\\n    class=\\\"mat-elevation-z8 main-data-table\\\"\\n  >\\n    @if (multiSelect) {\\n      <ng-container matColumnDef=\\\"uxg-table-select-row\\\">\\n        <th mat-header-cell *matHeaderCellDef>\\n          <mat-checkbox\\n            (change)=\\\"multiSelectAllRows($event)\\\"\\n            [checked]=\\\"selections.length !== 0 && selections.length === this.dataToComponent.data.length\\\"\\n            [indeterminate]=\\\"selections.length !== 0 && selections.length !== this.dataToComponent.data.length\\\"\\n            color=\\\"primary\\\"\\n            aria-label=\\\"Select all rows\\\"\\n          >\\n          </mat-checkbox>\\n        </th>\\n        <td mat-cell *matCellDef=\\\"let row\\\">\\n          <mat-checkbox\\n            (click)=\\\"$event.stopPropagation()\\\"\\n            (change)=\\\"multiSelectRowClick(row)\\\"\\n            [checked]=\\\"isRowSelected(row)\\\"\\n            color=\\\"primary\\\"\\n            [attr.aria-label]=\\\"'Select row ' + rowNo(row)\\\"\\n          >\\n          </mat-checkbox>\\n        </td>\\n        <td mat-footer-cell *matFooterCellDef></td>\\n      </ng-container>\\n    }\\n    @for (column of columns; track columnIndex; let columnIndex = $index) {\\n      <ng-container matColumnDef=\\\"{{ column.name }}\\\">\\n        <th\\n          mat-header-cell\\n          *matHeaderCellDef\\n          mat-sort-header\\n          cdkDropList\\n          cdkDropListLockAxis=\\\"x\\\"\\n          cdkDropListOrientation=\\\"horizontal\\\"\\n          (cdkDropListDropped)=\\\"columnDropped($event)\\\"\\n          cdkDrag\\n          (cdkDragStarted)=\\\"columnDragStarted($event, columnIndex)\\\"\\n          [cdkDragDisabled]=\\\"!columnDragEnable\\\"\\n          [ngClass]=\\\"{\\n            'uxg-table-cell-left': column.align === 'left',\\n            'uxg-table-cell-center': column.align === 'center',\\n            'uxg-table-cell-right': column.align === 'right'\\n          }\\\"\\n        >\\n          {{ column.displayName ? column.displayName : column.name }}\\n          <!--filter table based on column search-->\\n          @if (column.filter) {\\n            <div class=\\\"filter-wrapper\\\">\\n              <button\\n                mat-icon-button\\n                class=\\\"filter-button\\\"\\n                [matMenuTriggerFor]=\\\"filterMenu\\\"\\n                (click)=\\\"stopPropagation($event)\\\"\\n                (menuOpened)=\\\"inputVal.focus()\\\"\\n                aria-label=\\\"Filter list icon-button with a menu\\\"\\n              >\\n                @if (inputVal.value) {\\n                  <mat-icon class=\\\"filter-icon\\\">filter_list_alt</mat-icon>\\n                } @else {\\n                  <mat-icon>filter_list_alt</mat-icon>\\n                }\\n              </button>\\n              <mat-menu #filterMenu=\\\"matMenu\\\" yPosition=\\\"above\\\" class=\\\"filter-menu\\\">\\n                <mat-form-field appearance=\\\"outline\\\" floatLabel=\\\"auto\\\" dense (click)=\\\"stopPropagation($event)\\\">\\n                  <mat-icon color=\\\"primary\\\" matPrefix>search</mat-icon>\\n                  <input\\n                    #searchInput=\\\"matInput\\\"\\n                    matInput\\n                    #inputVal\\n                    placeholder=\\\"{{ column.displayName ? column.displayName : column.name }}\\\"\\n                    (keyup)=\\\"applyFilter(inputVal.value, column.name)\\\"\\n                    aria-label=\\\"Search input\\\"\\n                  />\\n                  @if (inputVal.value) {\\n                    <button (click)=\\\"clearFilter($event, inputVal, column)\\\" matSuffix mat-icon-button aria-label=\\\"Clear\\\">\\n                      <mat-icon color=\\\"primary\\\">clear</mat-icon>\\n                    </button>\\n                  }\\n                </mat-form-field>\\n              </mat-menu>\\n            </div>\\n          }\\n        </th>\\n        <td\\n          mat-cell\\n          *matCellDef=\\\"let element\\\"\\n          [ngClass]=\\\"{\\n            'uxg-table-cell-left': column.align === 'left',\\n            'uxg-table-cell-center': column.align === 'center',\\n            'uxg-table-cell-right': column.align === 'right'\\n          }\\\"\\n        >\\n          <!-- view cell, display data cell according to the type -->\\n          <div class=\\\"uxg-table-row-view\\\" [ngClass]=\\\"{ 'uxg-cell-hidden': element.uxgTableEdit }\\\">\\n            @switch (column.type) {\\n              @case ('date') {\\n                <div class=\\\"uxg-table-row-date\\\">\\n                  <mat-icon>date_range</mat-icon>\\n                  {{ element[column.name] }}\\n                </div>\\n              }\\n              @case ('cellTemplate') {\\n                <div>\\n                  <ng-template\\n                    [ngTemplateOutletContext]=\\\"{\\n                      element: element,\\n                      column: column,\\n                      emiter: column.cellTemplateEmiter\\n                    }\\\"\\n                    [ngTemplateOutlet]=\\\"column.cellTemplate\\\"\\n                  >\\n                  </ng-template>\\n                </div>\\n              }\\n              @default {\\n                <div>{{ element[column.name] }}</div>\\n              }\\n            }\\n          </div>\\n          <!-- edit cell -->\\n          <div class=\\\"uxg-table-row-edit\\\" [ngClass]=\\\"{ 'uxg-cell-hidden': !element.uxgTableEdit }\\\">\\n            <div>\\n              @switch (column.type) {\\n                @case ('cellTemplate') {\\n                  <div>\\n                    <ng-template\\n                      [ngTemplateOutletContext]=\\\"{\\n                        element: element,\\n                        column: column,\\n                        emiter: column.cellTemplateEmiter\\n                      }\\\"\\n                      [ngTemplateOutlet]=\\\"column.cellEditTemplate\\\"\\n                    >\\n                    </ng-template>\\n                  </div>\\n                }\\n                @default {\\n                  <div>\\n                    <input\\n                      matInput\\n                      [attr.aria-label]=\\\"'Input ' + element[column.name]\\\"\\n                      placeholder=\\\"{{ element[column.name] }}\\\"\\n                      (click)=\\\"$event.stopPropagation()\\\"\\n                      [(ngModel)]=\\\"element[column.name]\\\"\\n                    />\\n                  </div>\\n                }\\n              }\\n            </div>\\n          </div>\\n        </td>\\n        <td\\n          mat-footer-cell\\n          *matFooterCellDef\\n          [ngClass]=\\\"{\\n            'uxg-table-cell-left': column.align === 'left',\\n            'uxg-table-cell-center': column.align === 'center',\\n            'uxg-table-cell-right': column.align === 'right'\\n          }\\\"\\n        >\\n          {{ getTotalRowCell(column) }}\\n        </td>\\n      </ng-container>\\n    }\\n    @if (enableEdit || enableDelete || enableSend) {\\n      <ng-container matColumnDef=\\\"uxg-table-action-row\\\">\\n        <th mat-header-cell *matHeaderCellDef class=\\\"uxg-table-action-column-header\\\">Actions</th>\\n        <td mat-cell *matCellDef=\\\"let row\\\" class=\\\"uxg-table-action-column-cell\\\">\\n          @if (!row.uxgTableEdit && enableEdit) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Edit row ' + rowNo(row)\\\" (click)=\\\"rowEditClick(row); $event.stopPropagation()\\\">\\n              <mat-icon class=\\\"material-icons-outlined\\\">edit_outline</mat-icon>\\n            </button>\\n          }\\n          @if (!row.uxgTableEdit && enableDelete) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Delete row ' + rowNo(row)\\\" (click)=\\\"rowDelete(row); $event.stopPropagation()\\\">\\n              <mat-icon>delete_outline</mat-icon>\\n            </button>\\n          }\\n          @if (!row.uxgTableEdit && enableSend) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Send row ' + rowNo(row)\\\" (click)=\\\"rowSendTriggered(row); $event.stopPropagation()\\\">\\n              <mat-icon class=\\\"material-icons-outlined\\\">send_outline</mat-icon>\\n            </button>\\n          }\\n          @if (row.uxgTableEdit) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Cancel row ' + rowNo(row)\\\" (click)=\\\"rowEditConfirm(row); $event.stopPropagation()\\\">\\n              <mat-icon>done</mat-icon>\\n            </button>\\n          }\\n          @if (row.uxgTableEdit) {\\n            <button mat-icon-button (click)=\\\"rowEditCancel(row); $event.stopPropagation()\\\">\\n              <mat-icon class=\\\"material-icons-outlined\\\">cancel</mat-icon>\\n            </button>\\n          }\\n        </td>\\n        <td mat-footer-cell *matFooterCellDef></td>\\n      </ng-container>\\n    }\\n\\n    <tr\\n      mat-header-row\\n      *matHeaderRowDef=\\\"columnsToDisplayToComponent; sticky: stickyHeader\\\"\\n      [ngClass]=\\\"showTableHeader ? '' : 'uxg-table-no-header'\\\"\\n    ></tr>\\n    <tr\\n      mat-row\\n      *matRowDef=\\\"let row; columns: columnsToDisplayToComponent\\\"\\n      (click)=\\\"singleSelectRowClick(row)\\\"\\n      [ngClass]=\\\"[isRowSelected(row) ? 'selected' : '', row._class ? row._class : '']\\\"\\n    ></tr>\\n    <tr\\n      mat-footer-row\\n      *matFooterRowDef=\\\"columnsToDisplayToComponent; sticky: stickyFooter\\\"\\n      [ngClass]=\\\"showTotalRows ? '' : 'hidden-total'\\\"\\n    ></tr>\\n    <tr class=\\\"mat-row no-records\\\" *matNoDataRow>\\n      <td class=\\\"mat-cell\\\" [attr.colspan]=\\\"columnsToDisplayToComponent.length\\\">\\n        <div class=\\\"mat-wrap\\\">\\n          <span>No data available</span>\\n        </div>\\n      </td>\\n    </tr>\\n  </table>\\n</div>\\n\\n@if (pageEnable) {\\n  <mat-paginator\\n    [disabled]=\\\"paging?.disabled\\\"\\n    [length]=\\\"paging?.length\\\"\\n    [hidePageSize]=\\\"paging?.hidePageSize\\\"\\n    [pageIndex]=\\\"paging?.pageIndex\\\"\\n    [pageSize]=\\\"paging?.pageSize\\\"\\n    [pageSizeOptions]=\\\"paging?.pageSizeOptions ?? []\\\"\\n    [showFirstLastButtons]=\\\"paging?.showFirstLastButtons\\\"\\n    (page)=\\\"applyPageChanges($event)\\\"\\n  >\\n  </mat-paginator>\\n}\\n\", styles: [\"uxg-table{display:flex;-webkit-box-flex:1;flex:1;overflow:hidden;flex-direction:column;justify-content:space-between;height:100%}uxg-table .uxg-data-table{max-width:inherit;max-height:none;overflow:auto}uxg-table .mat-mdc-table{width:100%}uxg-table .mat-mdc-table tr td{position:relative;overflow:hidden;box-sizing:border-box}uxg-table .mat-mdc-table tr td .uxg-cell-hidden{display:none!important;width:0px;height:0px}uxg-table .mat-mdc-table tr td .uxg-table-row-display{position:absolute}uxg-table .mat-mdc-table tr td .uxg-table-row-date{display:flex!important;vertical-align:center;flex-direction:row;flex-wrap:wrap;align-content:center;justify-content:center;align-items:flex-end}uxg-table .mat-mdc-table tr td .uxg-table-row-date mat-icon{margin-right:4px}uxg-table .mat-mdc-table tr td .uxg-table-row-edit{position:absolute;top:13%;bottom:13%;display:flex!important;align-items:center;overflow:hidden;justify-content:center;height:32px}uxg-table .mat-mdc-table tr td .uxg-table-row-edit.uxg-table-row-edit input{width:90%;height:24px}uxg-table .mat-mdc-table tr td.uxg-table-action-column-cell{text-align:center}uxg-table .mat-mdc-table tr td.uxg-table-cell-left{text-align:left}uxg-table .mat-mdc-table tr td.uxg-table-cell-right{text-align:right}uxg-table .mat-mdc-table tr td.uxg-table-cell-center{text-align:center}uxg-table .mat-mdc-table tr td.uxg-table-cell-right div{float:right;display:block}uxg-table .mat-mdc-table tr td.uxg-table-cell-left div{float:left;display:block}uxg-table .mat-mdc-table tr td.uxg-table-cell-center div{float:center;display:block}uxg-table .mat-mdc-table thead tr.uxg-table-no-header{display:none}uxg-table .mat-mdc-table thead tr th.uxg-table-action-column-header{text-align:center}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-right div{display:flex;flex-direction:row-reverse;place-content:center flex-start;align-items:center}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-right div .mat-sort-header-arrow{margin-left:0;margin-right:6px}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-left div{display:flex;place-content:center flex-start;align-items:center}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-center div{display:flex;place-content:center;align-items:center}uxg-table .mat-mdc-table tfoot .hidden-total{display:none}uxg-table .mat-mdc-text-field-wrapper{height:40px}.filter-wrapper .filter-button{padding-top:20px}.filter-wrapper .filter-button .mat-mdc-button-persistent-ripple,.filter-wrapper .filter-button .mat-mdc-icon-button .mat-mdc-button-ripple{display:none}.filter-wrapper .filter-button mat-icon{font-size:.938rem}.filter-wrapper .filter-button mat-icon.filter-icon{color:#694ed6}.filter-wrapper .mat-mdc-icon-button .mat-mdc-button-ripple,.filter-menu .mat-mdc-form-field-subscript-wrapper{display:none}.filter-menu .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{opacity:0}.filter-menu .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{opacity:0}.filter-menu .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-icon-prefix.mat-mdc-form-field-icon-prefix,.filter-menu .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-icon-suffix.mat-mdc-form-field-icon-suffix{top:1px;margin-right:5px}.filter-menu .mat-mdc-menu-content{display:flex;justify-content:center;align-items:center;padding:0;overflow:hidden}.filter-menu .mat-mdc-menu-content .clear-button{display:flex;border:none;background:none;cursor:pointer;padding-left:0}.filter-menu .mat-mdc-menu-content .clear-button mat-icon{font-size:1.25rem;color:#616161}.no-records{text-align:center}.no-records td{padding:10px;font-weight:400}.no-records td .mat-wrap{display:flex;justify-content:center;gap:10px;align-items:center}.no-records td .mat-wrap mat-icon{height:20px;width:20px;font-size:20px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: MatTableModule }, { kind: \"component\", type: i1.MatTable, selector: \"mat-table, table[mat-table]\", exportAs: [\"matTable\"] }, { kind: \"directive\", type: i1.MatHeaderCellDef, selector: \"[matHeaderCellDef]\" }, { kind: \"directive\", type: i1.MatHeaderRowDef, selector: \"[matHeaderRowDef]\", inputs: [\"matHeaderRowDef\", \"matHeaderRowDefSticky\"] }, { kind: \"directive\", type: i1.MatColumnDef, selector: \"[matColumnDef]\", inputs: [\"matColumnDef\"] }, { kind: \"directive\", type: i1.MatCellDef, selector: \"[matCellDef]\" }, { kind: \"directive\", type: i1.MatRowDef, selector: \"[matRowDef]\", inputs: [\"matRowDefColumns\", \"matRowDefWhen\"] }, { kind: \"directive\", type: i1.MatFooterCellDef, selector: \"[matFooterCellDef]\" }, { kind: \"directive\", type: i1.MatFooterRowDef, selector: \"[matFooterRowDef]\", inputs: [\"matFooterRowDef\", \"matFooterRowDefSticky\"] }, { kind: \"directive\", type: i1.MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\" }, { kind: \"directive\", type: i1.MatCell, selector: \"mat-cell, td[mat-cell]\" }, { kind: \"directive\", type: i1.MatFooterCell, selector: \"mat-footer-cell, td[mat-footer-cell]\" }, { kind: \"component\", type: i1.MatHeaderRow, selector: \"mat-header-row, tr[mat-header-row]\", exportAs: [\"matHeaderRow\"] }, { kind: \"component\", type: i1.MatRow, selector: \"mat-row, tr[mat-row]\", exportAs: [\"matRow\"] }, { kind: \"component\", type: i1.MatFooterRow, selector: \"mat-footer-row, tr[mat-footer-row]\", exportAs: [\"matFooterRow\"] }, { kind: \"directive\", type: i1.MatNoDataRow, selector: \"ng-template[matNoDataRow]\" }, { kind: \"ngmodule\", type: MatSortModule }, { kind: \"directive\", type: i2.MatSort, selector: \"[matSort]\", inputs: [\"matSortActive\", \"matSortStart\", \"matSortDirection\", \"matSortDisableClear\", \"matSortDisabled\"], outputs: [\"matSortChange\"], exportAs: [\"matSort\"] }, { kind: \"component\", type: i2.MatSortHeader, selector: \"[mat-sort-header]\", inputs: [\"mat-sort-header\", \"arrowPosition\", \"start\", \"disabled\", \"sortActionDescription\", \"disableClear\"], exportAs: [\"matSortHeader\"] }, { kind: \"directive\", type: CdkDropListGroup, selector: \"[cdkDropListGroup]\", inputs: [\"cdkDropListGroupDisabled\"], exportAs: [\"cdkDropListGroup\"] }, { kind: \"ngmodule\", type: MatCheckboxModule }, { kind: \"component\", type: i3.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-expanded\", \"aria-controls\", \"aria-owns\", \"id\", \"required\", \"labelPosition\", \"name\", \"value\", \"disableRipple\", \"tabIndex\", \"color\", \"disabledInteractive\", \"checked\", \"disabled\", \"indeterminate\"], outputs: [\"change\", \"indeterminateChange\"], exportAs: [\"matCheckbox\"] }, { kind: \"directive\", type: CdkDropList, selector: \"[cdkDropList], cdk-drop-list\", inputs: [\"cdkDropListConnectedTo\", \"cdkDropListData\", \"cdkDropListOrientation\", \"id\", \"cdkDropListLockAxis\", \"cdkDropListDisabled\", \"cdkDropListSortingDisabled\", \"cdkDropListEnterPredicate\", \"cdkDropListSortPredicate\", \"cdkDropListAutoScrollDisabled\", \"cdkDropListAutoScrollStep\", \"cdkDropListElementContainer\"], outputs: [\"cdkDropListDropped\", \"cdkDropListEntered\", \"cdkDropListExited\", \"cdkDropListSorted\"], exportAs: [\"cdkDropList\"] }, { kind: \"directive\", type: CdkDrag, selector: \"[cdkDrag]\", inputs: [\"cdkDragData\", \"cdkDragLockAxis\", \"cdkDragRootElement\", \"cdkDragBoundary\", \"cdkDragStartDelay\", \"cdkDragFreeDragPosition\", \"cdkDragDisabled\", \"cdkDragConstrainPosition\", \"cdkDragPreviewClass\", \"cdkDragPreviewContainer\", \"cdkDragScale\"], outputs: [\"cdkDragStarted\", \"cdkDragReleased\", \"cdkDragEnded\", \"cdkDragEntered\", \"cdkDragExited\", \"cdkDragDropped\", \"cdkDragMoved\"], exportAs: [\"cdkDrag\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: MatIconModule }, { kind: \"component\", type: i4.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { 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\", \"disabledInteractive\"], exportAs: [\"matInput\"] }, { kind: \"component\", type: i5.MatFormField, selector: \"mat-form-field\", inputs: [\"hideRequiredMarker\", \"color\", \"floatLabel\", \"appearance\", \"subscriptSizing\", \"hintLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i5.MatPrefix, selector: \"[matPrefix], [matIconPrefix], [matTextPrefix]\", inputs: [\"matTextPrefix\"] }, { kind: \"directive\", type: i5.MatSuffix, selector: \"[matSuffix], [matIconSuffix], [matTextSuffix]\", inputs: [\"matTextSuffix\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i6.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i6.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i6.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: MatButtonModule }, { kind: \"component\", type: i7.MatIconButton, selector: \"button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]\", exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"ngmodule\", type: MatPaginatorModule }, { kind: \"component\", type: i8.MatPaginator, selector: \"mat-paginator\", inputs: [\"color\", \"pageIndex\", \"length\", \"pageSize\", \"pageSizeOptions\", \"hidePageSize\", \"showFirstLastButtons\", \"selectConfig\", \"disabled\"], outputs: [\"page\"], exportAs: [\"matPaginator\"] }, { kind: \"ngmodule\", type: MatMenuModule }, { kind: \"component\", type: i9.MatMenu, selector: \"mat-menu\", inputs: [\"backdropClass\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"xPosition\", \"yPosition\", \"overlapTrigger\", \"hasBackdrop\", \"class\", \"classList\"], outputs: [\"closed\", \"close\"], exportAs: [\"matMenu\"] }, { kind: \"directive\", type: i9.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: MatFormFieldModule }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: TableComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'uxg-table', encapsulation: ViewEncapsulation.None, standalone: true, imports: [\n                        MatTableModule,\n                        MatSortModule,\n                        CdkDropListGroup,\n                        MatCheckboxModule,\n                        CdkDropList,\n                        CdkDrag,\n                        NgClass,\n                        MatIconModule,\n                        NgTemplateOutlet,\n                        MatInputModule,\n                        FormsModule,\n                        MatButtonModule,\n                        MatPaginatorModule,\n                        MatMenuModule,\n                        MatFormFieldModule\n                    ], template: \"<div class=\\\"uxg-data-table\\\">\\n  <table\\n    mat-table\\n    matSort\\n    cdkDropListGroup\\n    [dataSource]=\\\"dataToComponent\\\"\\n    [matSortActive]=\\\"sort.active\\\"\\n    [matSortDirection]=\\\"sort.direction\\\"\\n    (matSortChange)=\\\"sortData($event)\\\"\\n    class=\\\"mat-elevation-z8 main-data-table\\\"\\n  >\\n    @if (multiSelect) {\\n      <ng-container matColumnDef=\\\"uxg-table-select-row\\\">\\n        <th mat-header-cell *matHeaderCellDef>\\n          <mat-checkbox\\n            (change)=\\\"multiSelectAllRows($event)\\\"\\n            [checked]=\\\"selections.length !== 0 && selections.length === this.dataToComponent.data.length\\\"\\n            [indeterminate]=\\\"selections.length !== 0 && selections.length !== this.dataToComponent.data.length\\\"\\n            color=\\\"primary\\\"\\n            aria-label=\\\"Select all rows\\\"\\n          >\\n          </mat-checkbox>\\n        </th>\\n        <td mat-cell *matCellDef=\\\"let row\\\">\\n          <mat-checkbox\\n            (click)=\\\"$event.stopPropagation()\\\"\\n            (change)=\\\"multiSelectRowClick(row)\\\"\\n            [checked]=\\\"isRowSelected(row)\\\"\\n            color=\\\"primary\\\"\\n            [attr.aria-label]=\\\"'Select row ' + rowNo(row)\\\"\\n          >\\n          </mat-checkbox>\\n        </td>\\n        <td mat-footer-cell *matFooterCellDef></td>\\n      </ng-container>\\n    }\\n    @for (column of columns; track columnIndex; let columnIndex = $index) {\\n      <ng-container matColumnDef=\\\"{{ column.name }}\\\">\\n        <th\\n          mat-header-cell\\n          *matHeaderCellDef\\n          mat-sort-header\\n          cdkDropList\\n          cdkDropListLockAxis=\\\"x\\\"\\n          cdkDropListOrientation=\\\"horizontal\\\"\\n          (cdkDropListDropped)=\\\"columnDropped($event)\\\"\\n          cdkDrag\\n          (cdkDragStarted)=\\\"columnDragStarted($event, columnIndex)\\\"\\n          [cdkDragDisabled]=\\\"!columnDragEnable\\\"\\n          [ngClass]=\\\"{\\n            'uxg-table-cell-left': column.align === 'left',\\n            'uxg-table-cell-center': column.align === 'center',\\n            'uxg-table-cell-right': column.align === 'right'\\n          }\\\"\\n        >\\n          {{ column.displayName ? column.displayName : column.name }}\\n          <!--filter table based on column search-->\\n          @if (column.filter) {\\n            <div class=\\\"filter-wrapper\\\">\\n              <button\\n                mat-icon-button\\n                class=\\\"filter-button\\\"\\n                [matMenuTriggerFor]=\\\"filterMenu\\\"\\n                (click)=\\\"stopPropagation($event)\\\"\\n                (menuOpened)=\\\"inputVal.focus()\\\"\\n                aria-label=\\\"Filter list icon-button with a menu\\\"\\n              >\\n                @if (inputVal.value) {\\n                  <mat-icon class=\\\"filter-icon\\\">filter_list_alt</mat-icon>\\n                } @else {\\n                  <mat-icon>filter_list_alt</mat-icon>\\n                }\\n              </button>\\n              <mat-menu #filterMenu=\\\"matMenu\\\" yPosition=\\\"above\\\" class=\\\"filter-menu\\\">\\n                <mat-form-field appearance=\\\"outline\\\" floatLabel=\\\"auto\\\" dense (click)=\\\"stopPropagation($event)\\\">\\n                  <mat-icon color=\\\"primary\\\" matPrefix>search</mat-icon>\\n                  <input\\n                    #searchInput=\\\"matInput\\\"\\n                    matInput\\n                    #inputVal\\n                    placeholder=\\\"{{ column.displayName ? column.displayName : column.name }}\\\"\\n                    (keyup)=\\\"applyFilter(inputVal.value, column.name)\\\"\\n                    aria-label=\\\"Search input\\\"\\n                  />\\n                  @if (inputVal.value) {\\n                    <button (click)=\\\"clearFilter($event, inputVal, column)\\\" matSuffix mat-icon-button aria-label=\\\"Clear\\\">\\n                      <mat-icon color=\\\"primary\\\">clear</mat-icon>\\n                    </button>\\n                  }\\n                </mat-form-field>\\n              </mat-menu>\\n            </div>\\n          }\\n        </th>\\n        <td\\n          mat-cell\\n          *matCellDef=\\\"let element\\\"\\n          [ngClass]=\\\"{\\n            'uxg-table-cell-left': column.align === 'left',\\n            'uxg-table-cell-center': column.align === 'center',\\n            'uxg-table-cell-right': column.align === 'right'\\n          }\\\"\\n        >\\n          <!-- view cell, display data cell according to the type -->\\n          <div class=\\\"uxg-table-row-view\\\" [ngClass]=\\\"{ 'uxg-cell-hidden': element.uxgTableEdit }\\\">\\n            @switch (column.type) {\\n              @case ('date') {\\n                <div class=\\\"uxg-table-row-date\\\">\\n                  <mat-icon>date_range</mat-icon>\\n                  {{ element[column.name] }}\\n                </div>\\n              }\\n              @case ('cellTemplate') {\\n                <div>\\n                  <ng-template\\n                    [ngTemplateOutletContext]=\\\"{\\n                      element: element,\\n                      column: column,\\n                      emiter: column.cellTemplateEmiter\\n                    }\\\"\\n                    [ngTemplateOutlet]=\\\"column.cellTemplate\\\"\\n                  >\\n                  </ng-template>\\n                </div>\\n              }\\n              @default {\\n                <div>{{ element[column.name] }}</div>\\n              }\\n            }\\n          </div>\\n          <!-- edit cell -->\\n          <div class=\\\"uxg-table-row-edit\\\" [ngClass]=\\\"{ 'uxg-cell-hidden': !element.uxgTableEdit }\\\">\\n            <div>\\n              @switch (column.type) {\\n                @case ('cellTemplate') {\\n                  <div>\\n                    <ng-template\\n                      [ngTemplateOutletContext]=\\\"{\\n                        element: element,\\n                        column: column,\\n                        emiter: column.cellTemplateEmiter\\n                      }\\\"\\n                      [ngTemplateOutlet]=\\\"column.cellEditTemplate\\\"\\n                    >\\n                    </ng-template>\\n                  </div>\\n                }\\n                @default {\\n                  <div>\\n                    <input\\n                      matInput\\n                      [attr.aria-label]=\\\"'Input ' + element[column.name]\\\"\\n                      placeholder=\\\"{{ element[column.name] }}\\\"\\n                      (click)=\\\"$event.stopPropagation()\\\"\\n                      [(ngModel)]=\\\"element[column.name]\\\"\\n                    />\\n                  </div>\\n                }\\n              }\\n            </div>\\n          </div>\\n        </td>\\n        <td\\n          mat-footer-cell\\n          *matFooterCellDef\\n          [ngClass]=\\\"{\\n            'uxg-table-cell-left': column.align === 'left',\\n            'uxg-table-cell-center': column.align === 'center',\\n            'uxg-table-cell-right': column.align === 'right'\\n          }\\\"\\n        >\\n          {{ getTotalRowCell(column) }}\\n        </td>\\n      </ng-container>\\n    }\\n    @if (enableEdit || enableDelete || enableSend) {\\n      <ng-container matColumnDef=\\\"uxg-table-action-row\\\">\\n        <th mat-header-cell *matHeaderCellDef class=\\\"uxg-table-action-column-header\\\">Actions</th>\\n        <td mat-cell *matCellDef=\\\"let row\\\" class=\\\"uxg-table-action-column-cell\\\">\\n          @if (!row.uxgTableEdit && enableEdit) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Edit row ' + rowNo(row)\\\" (click)=\\\"rowEditClick(row); $event.stopPropagation()\\\">\\n              <mat-icon class=\\\"material-icons-outlined\\\">edit_outline</mat-icon>\\n            </button>\\n          }\\n          @if (!row.uxgTableEdit && enableDelete) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Delete row ' + rowNo(row)\\\" (click)=\\\"rowDelete(row); $event.stopPropagation()\\\">\\n              <mat-icon>delete_outline</mat-icon>\\n            </button>\\n          }\\n          @if (!row.uxgTableEdit && enableSend) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Send row ' + rowNo(row)\\\" (click)=\\\"rowSendTriggered(row); $event.stopPropagation()\\\">\\n              <mat-icon class=\\\"material-icons-outlined\\\">send_outline</mat-icon>\\n            </button>\\n          }\\n          @if (row.uxgTableEdit) {\\n            <button mat-icon-button [attr.aria-label]=\\\"'Cancel row ' + rowNo(row)\\\" (click)=\\\"rowEditConfirm(row); $event.stopPropagation()\\\">\\n              <mat-icon>done</mat-icon>\\n            </button>\\n          }\\n          @if (row.uxgTableEdit) {\\n            <button mat-icon-button (click)=\\\"rowEditCancel(row); $event.stopPropagation()\\\">\\n              <mat-icon class=\\\"material-icons-outlined\\\">cancel</mat-icon>\\n            </button>\\n          }\\n        </td>\\n        <td mat-footer-cell *matFooterCellDef></td>\\n      </ng-container>\\n    }\\n\\n    <tr\\n      mat-header-row\\n      *matHeaderRowDef=\\\"columnsToDisplayToComponent; sticky: stickyHeader\\\"\\n      [ngClass]=\\\"showTableHeader ? '' : 'uxg-table-no-header'\\\"\\n    ></tr>\\n    <tr\\n      mat-row\\n      *matRowDef=\\\"let row; columns: columnsToDisplayToComponent\\\"\\n      (click)=\\\"singleSelectRowClick(row)\\\"\\n      [ngClass]=\\\"[isRowSelected(row) ? 'selected' : '', row._class ? row._class : '']\\\"\\n    ></tr>\\n    <tr\\n      mat-footer-row\\n      *matFooterRowDef=\\\"columnsToDisplayToComponent; sticky: stickyFooter\\\"\\n      [ngClass]=\\\"showTotalRows ? '' : 'hidden-total'\\\"\\n    ></tr>\\n    <tr class=\\\"mat-row no-records\\\" *matNoDataRow>\\n      <td class=\\\"mat-cell\\\" [attr.colspan]=\\\"columnsToDisplayToComponent.length\\\">\\n        <div class=\\\"mat-wrap\\\">\\n          <span>No data available</span>\\n        </div>\\n      </td>\\n    </tr>\\n  </table>\\n</div>\\n\\n@if (pageEnable) {\\n  <mat-paginator\\n    [disabled]=\\\"paging?.disabled\\\"\\n    [length]=\\\"paging?.length\\\"\\n    [hidePageSize]=\\\"paging?.hidePageSize\\\"\\n    [pageIndex]=\\\"paging?.pageIndex\\\"\\n    [pageSize]=\\\"paging?.pageSize\\\"\\n    [pageSizeOptions]=\\\"paging?.pageSizeOptions ?? []\\\"\\n    [showFirstLastButtons]=\\\"paging?.showFirstLastButtons\\\"\\n    (page)=\\\"applyPageChanges($event)\\\"\\n  >\\n  </mat-paginator>\\n}\\n\", styles: [\"uxg-table{display:flex;-webkit-box-flex:1;flex:1;overflow:hidden;flex-direction:column;justify-content:space-between;height:100%}uxg-table .uxg-data-table{max-width:inherit;max-height:none;overflow:auto}uxg-table .mat-mdc-table{width:100%}uxg-table .mat-mdc-table tr td{position:relative;overflow:hidden;box-sizing:border-box}uxg-table .mat-mdc-table tr td .uxg-cell-hidden{display:none!important;width:0px;height:0px}uxg-table .mat-mdc-table tr td .uxg-table-row-display{position:absolute}uxg-table .mat-mdc-table tr td .uxg-table-row-date{display:flex!important;vertical-align:center;flex-direction:row;flex-wrap:wrap;align-content:center;justify-content:center;align-items:flex-end}uxg-table .mat-mdc-table tr td .uxg-table-row-date mat-icon{margin-right:4px}uxg-table .mat-mdc-table tr td .uxg-table-row-edit{position:absolute;top:13%;bottom:13%;display:flex!important;align-items:center;overflow:hidden;justify-content:center;height:32px}uxg-table .mat-mdc-table tr td .uxg-table-row-edit.uxg-table-row-edit input{width:90%;height:24px}uxg-table .mat-mdc-table tr td.uxg-table-action-column-cell{text-align:center}uxg-table .mat-mdc-table tr td.uxg-table-cell-left{text-align:left}uxg-table .mat-mdc-table tr td.uxg-table-cell-right{text-align:right}uxg-table .mat-mdc-table tr td.uxg-table-cell-center{text-align:center}uxg-table .mat-mdc-table tr td.uxg-table-cell-right div{float:right;display:block}uxg-table .mat-mdc-table tr td.uxg-table-cell-left div{float:left;display:block}uxg-table .mat-mdc-table tr td.uxg-table-cell-center div{float:center;display:block}uxg-table .mat-mdc-table thead tr.uxg-table-no-header{display:none}uxg-table .mat-mdc-table thead tr th.uxg-table-action-column-header{text-align:center}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-right div{display:flex;flex-direction:row-reverse;place-content:center flex-start;align-items:center}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-right div .mat-sort-header-arrow{margin-left:0;margin-right:6px}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-left div{display:flex;place-content:center flex-start;align-items:center}uxg-table .mat-mdc-table thead tr th.uxg-table-cell-center div{display:flex;place-content:center;align-items:center}uxg-table .mat-mdc-table tfoot .hidden-total{display:none}uxg-table .mat-mdc-text-field-wrapper{height:40px}.filter-wrapper .filter-button{padding-top:20px}.filter-wrapper .filter-button .mat-mdc-button-persistent-ripple,.filter-wrapper .filter-button .mat-mdc-icon-button .mat-mdc-button-ripple{display:none}.filter-wrapper .filter-button mat-icon{font-size:.938rem}.filter-wrapper .filter-button mat-icon.filter-icon{color:#694ed6}.filter-wrapper .mat-mdc-icon-button .mat-mdc-button-ripple,.filter-menu .mat-mdc-form-field-subscript-wrapper{display:none}.filter-menu .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{opacity:0}.filter-menu .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{opacity:0}.filter-menu .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-icon-prefix.mat-mdc-form-field-icon-prefix,.filter-menu .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-icon-suffix.mat-mdc-form-field-icon-suffix{top:1px;margin-right:5px}.filter-menu .mat-mdc-menu-content{display:flex;justify-content:center;align-items:center;padding:0;overflow:hidden}.filter-menu .mat-mdc-menu-content .clear-button{display:flex;border:none;background:none;cursor:pointer;padding-left:0}.filter-menu .mat-mdc-menu-content .clear-button mat-icon{font-size:1.25rem;color:#616161}.no-records{text-align:center}.no-records td{padding:10px;font-weight:400}.no-records td .mat-wrap{display:flex;justify-content:center;gap:10px;align-items:center}.no-records td .mat-wrap mat-icon{height:20px;width:20px;font-size:20px}\\n\"] }]\n        }], ctorParameters: () => [], propDecorators: { table: [{\n                type: ViewChild,\n                args: [MatTable, { static: true }]\n            }], paginator: [{\n                type: ViewChild,\n                args: [MatPaginator]\n            }], data: [{\n                type: Input\n            }], columnsToDisplay: [{\n                type: Input\n            }], columns: [{\n                type: Input\n            }], showTotalRows: [{\n                type: Input\n            }], showTableHeader: [{\n                type: Input\n            }], totalData: [{\n                type: Input\n            }], sort: [{\n                type: Input\n            }], stickyHeader: [{\n                type: Input\n            }], stickyFooter: [{\n                type: Input\n            }], columnDragEnable: [{\n                type: Input\n            }], selectedKeys: [{\n                type: Input\n            }], singleSelect: [{\n                type: Input\n            }], multiSelect: [{\n                type: Input\n            }], selectChanged: [{\n                type: Output\n            }], multiSelectSingleRowClicked: [{\n                type: Output\n            }], sortChanged: [{\n                type: Output\n            }], pageEnable: [{\n                type: Input\n            }], paging: [{\n                type: Input\n            }], pageChanged: [{\n                type: Output\n            }], enableEdit: [{\n                type: Input\n            }], enableDelete: [{\n                type: Input\n            }], enableSend: [{\n                type: Input\n            }], actionColumnPosition: [{\n                type: Input\n            }], rowRemoved: [{\n                type: Output\n            }], rowUpdated: [{\n                type: Output\n            }], rowSend: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb21wb25lbnRzL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUE2QixXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBYSxNQUFNLDZCQUE2QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxF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LFlBQVk7c0JBRGYsS0FBSztnQkFzQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0UsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFRSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCwgQ2RrRHJvcExpc3RHcm91cCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSwgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBNYXRQYWdpbmF0b3JNb2R1bGUsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlLCBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC1lcy9pc0VxdWFsJztcbmltcG9ydCB7IFV4Z0FjdGlvbkNvbHVtblBvc2l0aW9uLCBVeGdDb2x1bW4sIFV4Z0NvbHVtblR5cGUsIFV4Z0RlZmF1bHRQYWdpbmcsIFV4Z1BhZ2UsIFV4Z1NvcnQsIFV4Z1RhYmxlU2VsZWN0RXZlbnQgfSBmcm9tICcuL3RhYmxlLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3V4Zy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRTb3J0TW9kdWxlLFxuICAgIENka0Ryb3BMaXN0R3JvdXAsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgQ2RrRHJvcExpc3QsXG4gICAgQ2RrRHJhZyxcbiAgICBOZ0NsYXNzLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGUhOiBNYXRUYWJsZTxhbnk+O1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG4gIHNldCBkYXRhKGRhdGE6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIHRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGEgPSBkYXRhO1xuXG4gICAgaWYgKHRoaXMucGFnZUVuYWJsZSAmJiAhdGhpcy5wYWdlQ2hhbmdlZCkge1xuICAgICAgaWYgKHRoaXMucGFnaW5nKSB7XG4gICAgICAgIHRoaXMuYXBwbHlQYWdpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0UGFnaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseVNvcnQoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBjb2x1bW5zVG9EaXNwbGF5KCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zVG9EaXNwbGF5O1xuICB9XG4gIHNldCBjb2x1bW5zVG9EaXNwbGF5KGNvbHVtbnNUb0Rpc3BsYXk6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLl9jb2x1bW5zVG9EaXNwbGF5ID0gY29sdW1uc1RvRGlzcGxheTtcbiAgICB0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudCA9IGNvbHVtbnNUb0Rpc3BsYXk7XG5cbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCAmJiB0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudC5pbmRleE9mKHRoaXMudXhnTXVsdGlTZWxlY3RDb2x1bW5bMF0pIDwgMCkge1xuICAgICAgdGhpcy5jb2x1bW5zVG9EaXNwbGF5VG9Db21wb25lbnQgPSB0aGlzLnV4Z011bHRpU2VsZWN0Q29sdW1uLmNvbmNhdCh0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLmVuYWJsZUVkaXQgfHwgdGhpcy5lbmFibGVEZWxldGUpICYmIHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50LmluZGV4T2YodGhpcy51eGdUYWJsZUFjdGlvbkNvbHVtblswXSkgPCAwKSB7XG4gICAgICB0aGlzLmFkZE9yVXBkYXRlQWN0aW9uQ29sdW1uVG9Db2x1bW5zVG9EaXNwbGF5KCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgY29sdW1uczogQXJyYXk8VXhnQ29sdW1uPiA9IFtdOyAvLyBjb2x1bW5zIGRlZmluaXRpb25zXG4gIEBJbnB1dCgpIHNob3dUb3RhbFJvd3MgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1RhYmxlSGVhZGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgdG90YWxEYXRhOiBhbnkgPSBudWxsO1xuXG4gIF9zb3J0OiBVeGdTb3J0ID0geyBhY3RpdmU6ICcnLCBkaXJlY3Rpb246ICdhc2MnIH07XG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnQ7XG4gIH1cbiAgc2V0IHNvcnQoc29ydDogVXhnU29ydCkge1xuICAgIHRoaXMuX3NvcnQgPSBzb3J0O1xuICAgIHRoaXMuYXBwbHlTb3J0KCk7XG4gIH1cblxuICAvLyB0YWJsZSBjb25maWdcbiAgQElucHV0KCkgc3RpY2t5SGVhZGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgc3RpY2t5Rm9vdGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbHVtbkRyYWdFbmFibGUgPSBmYWxzZTtcblxuICBwcml2YXRlIHV4Z011bHRpU2VsZWN0Q29sdW1uID0gWyd1eGctdGFibGUtc2VsZWN0LXJvdyddO1xuICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZEtleXMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4O1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkS2V5cyhzZWxlY3RlZEluZGV4OiBudW1iZXJbXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgIGlmICh0aGlzLnNpbmdsZVNlbGVjdCAmJiBzZWxlY3RlZEluZGV4ICYmIHNlbGVjdGVkSW5kZXgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZCh0aGlzLmRhdGFbc2VsZWN0ZWRJbmRleFswXV0pKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKHRoaXMuZGF0YVtzZWxlY3RlZEluZGV4WzBdXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5zaW5nbGVTZWxlY3QgJiYgdGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9IDA7XG4gICAgICBzZWxlY3RlZEluZGV4LmZvckVhY2goKHNJbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RlZCh0aGlzLmRhdGFbc0luZGV4XSkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbnMucHVzaCh0aGlzLmRhdGFbc0luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNpbmdsZVNlbGVjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBtdWx0aVNlbGVjdCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3RDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxVeGdUYWJsZVNlbGVjdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgbXVsdGlTZWxlY3RTaW5nbGVSb3dDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VXhnU29ydD4oKTtcblxuICAvL3BhZ2luYXRvciBkYXRhXG4gIEBJbnB1dCgpIHBhZ2VFbmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgcGFnaW5nPzogVXhnUGFnZTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG5cbiAgQElucHV0KCkgZW5hYmxlRWRpdCA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVEZWxldGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlU2VuZCA9IGZhbHNlO1xuICBASW5wdXQoKSBhY3Rpb25Db2x1bW5Qb3NpdGlvbjogVXhnQWN0aW9uQ29sdW1uUG9zaXRpb24gPSBVeGdBY3Rpb25Db2x1bW5Qb3NpdGlvbi5lbmQ7XG5cbiAgQE91dHB1dCgpIHJvd1JlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJvd1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJvd1NlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZWxlY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBkYXRhVG9Db21wb25lbnQgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pO1xuICBjb2x1bW5zVG9EaXNwbGF5VG9Db21wb25lbnQ6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAvL2ZpbHRlciBwYXJ0XG4gIGNvbHVtbkZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgZmlsdGVyRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgLy9sb2NhbCB2YXJpYWJsZVxuICBwcmV2aW91c0luZGV4ID0gLTE7IC8vIHVzZWQgZm9yIGNvbHVtbiBkcmFnIGRyb3BcblxuICAvL3RhYmxlIGRhdGFcbiAgcHJpdmF0ZSBfZGF0YTogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9jb2x1bW5zVG9EaXNwbGF5OiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgcHJpdmF0ZSB1eGdUYWJsZUVkaXQgPSBmYWxzZTtcblxuICAvL2VkaXQgcGFydFxuICBwcml2YXRlIHV4Z1RhYmxlQWN0aW9uQ29sdW1uID0gWyd1eGctdGFibGUtYWN0aW9uLXJvdyddO1xuICBwcml2YXRlIGVkaXRSb3dPcmlnaW46IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRhdGFUb0NvbXBvbmVudC5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YTogYW55LCBmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZmlsdGVycyA9IEpTT04ucGFyc2UoZmlsdGVyKTtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5ldmVyeSgoa2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcnNba2V5XSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0ICYmIHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCAmJiB0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudC5pbmRleE9mKHRoaXMudXhnTXVsdGlTZWxlY3RDb2x1bW5bMF0pIDwgMCkge1xuICAgICAgdGhpcy5jb2x1bW5zVG9EaXNwbGF5VG9Db21wb25lbnQgPSB0aGlzLnV4Z011bHRpU2VsZWN0Q29sdW1uLmNvbmNhdCh0aGlzLmNvbHVtbnNUb0Rpc3BsYXkpO1xuICAgIH1cblxuICAgIGlmICgodGhpcy5lbmFibGVFZGl0IHx8IHRoaXMuZW5hYmxlRGVsZXRlKSAmJiB0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudC5pbmRleE9mKHRoaXMudXhnVGFibGVBY3Rpb25Db2x1bW5bMF0pIDwgMCkge1xuICAgICAgdGhpcy5hZGRPclVwZGF0ZUFjdGlvbkNvbHVtblRvQ29sdW1uc1RvRGlzcGxheSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2VFbmFibGUgJiYgIXRoaXMucGFnaW5nKSB7XG4gICAgICB0aGlzLmFwcGx5RGVmYXVsdFBhZ2luZygpO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbHlTb3J0KCk7XG4gIH1cblxuICBhcHBseVNvcnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuYWN0aXZlLmxlbmd0aCkge1xuICAgICAgdGhpcy5zb3J0RGF0YSh0aGlzLnNvcnQsIGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRhdGEgJiYgIWNoYW5nZXMuZGF0YS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIHRoaXMudGFibGUucmVuZGVyUm93cygpO1xuICAgICAgaWYgKHRoaXMucGFnZUVuYWJsZSAmJiAhdGhpcy5wYWdpbmcpIHtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRQYWdpbmcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwbHlTb3J0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMucGFnZUVuYWJsZSAmJiAhY2hhbmdlcy5wYWdlRW5hYmxlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgaWYgKGNoYW5nZXMucGFnZUVuYWJsZS5jdXJyZW50VmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMucGFnaW5nID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luZykge1xuICAgICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0UGFnaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5wYWdpbmcgJiYgIWNoYW5nZXMucGFnaW5nLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgaWYgKGNoYW5nZXMucGFnaW5nLmN1cnJlbnRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdFBhZ2luZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm11bHRpU2VsZWN0ICYmICFjaGFuZ2VzLm11bHRpU2VsZWN0LmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5jb2x1bW5zVG9EaXNwbGF5VG9Db21wb25lbnQgPSB0aGlzLmNvbHVtbnNUb0Rpc3BsYXk7XG5cbiAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgIHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50ID0gdGhpcy51eGdNdWx0aVNlbGVjdENvbHVtbi5jb25jYXQodGhpcy5jb2x1bW5zVG9EaXNwbGF5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbWl0U2VsZWN0RXZlbnQoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5zaW5nbGVTZWxlY3QgJiYgIWNoYW5nZXMuc2luZ2xlU2VsZWN0LmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0KSB7XG4gICAgICAgIHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50ID0gdGhpcy5jb2x1bW5zVG9EaXNwbGF5O1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA+IDEpIHRoaXMuc2VsZWN0aW9ucy5zcGxpY2UoMSwgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXRTZWxlY3RFdmVudCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmVuYWJsZUVkaXQgJiYgIWNoYW5nZXMuZW5hYmxlRWRpdC5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIHRoaXMucmVzZXRBY3Rpb25Sb3coKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5lbmFibGVEZWxldGUgJiYgIWNoYW5nZXMuZW5hYmxlRGVsZXRlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5yZXNldEFjdGlvblJvdygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5lbmFibGVTZW5kICYmICFjaGFuZ2VzLmVuYWJsZVNlbmQuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLnJlc2V0QWN0aW9uUm93KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuYWN0aW9uQ29sdW1uUG9zaXRpb24gJiYgIWNoYW5nZXMuYWN0aW9uQ29sdW1uUG9zaXRpb24uaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLmFkZE9yVXBkYXRlQWN0aW9uQ29sdW1uVG9Db2x1bW5zVG9EaXNwbGF5KCk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZywgY29sdW1uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbHVtbkZpbHRlcnNbY29sdW1uXSA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuZGF0YVRvQ29tcG9uZW50LmZpbHRlciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1uRmlsdGVycyk7XG4gIH1cblxuICBjbGVhckZpbHRlcihldmVudDogTW91c2VFdmVudCwgaW5wdXRWYWw6IEhUTUxJbnB1dEVsZW1lbnQsIGNvbHVtbjogVXhnQ29sdW1uKSB7XG4gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oZXZlbnQpO1xuICAgIGlucHV0VmFsLnZhbHVlID0gJyc7XG4gICAgdGhpcy5hcHBseUZpbHRlcihpbnB1dFZhbC52YWx1ZSwgY29sdW1uLm5hbWUpO1xuICB9XG5cbiAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBzb3J0RGF0YSgkZXZlbnQ6IFV4Z1NvcnQsIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMuc29ydENoYW5nZWQub2JzZXJ2ZXJzLmxlbmd0aCA+IDAgJiYgZW1pdCkge1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlZC5lbWl0KCRldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGEgPSB0aGlzLmxvY2FsU29ydCgkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNpbmdsZVNlbGVjdFJvd0NsaWNrKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMudXhnVGFibGVFZGl0KSByZXR1cm47XG4gICAgdGhpcy5kYXRhVG9Db21wb25lbnQuZGF0YS5mb3JFYWNoKChpdGVtKSA9PiBkZWxldGUgaXRlbS51eGdUYWJsZUVkaXQpO1xuXG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IFtyb3ddO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25zID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXRTZWxlY3RFdmVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zaW5nbGVTZWxlY3QgJiYgdGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgdGhpcy5lbWl0Q2xpY2tFdmVudChyb3cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG11bHRpU2VsZWN0Um93Q2xpY2socm93OiBhbnkpIHtcbiAgICBpZiAodGhpcy51eGdUYWJsZUVkaXQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdykpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9ucy5zcGxpY2UodGhpcy5nZXRTZWxlY3RlZEluZGV4KHJvdyksIDEpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50KCk7XG4gIH1cblxuICBtdWx0aVNlbGVjdEFsbFJvd3MoJGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25zID0gWy4uLnRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3RFdmVudCgpO1xuICB9XG5cbiAgYXBwbHlQYWdlQ2hhbmdlcygkZXZlbnQ6IFBhZ2VFdmVudCkge1xuICAgIGlmICh0aGlzLnBhZ2VDaGFuZ2VkLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2VkLmVtaXQoJGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2NhbFBhZ2luZygkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRvdGFsUm93Q2VsbChjb2x1bW46IFV4Z0NvbHVtbik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudG90YWxEYXRhICYmIHRoaXMudG90YWxEYXRhW2NvbHVtbi5uYW1lXSkge1xuICAgICAgcmV0dXJuIHRoaXMudG90YWxEYXRhW2NvbHVtbi5uYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBVeGdDb2x1bW5UeXBlLm51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVG9Db21wb25lbnQuZGF0YS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudFtjb2x1bW4ubmFtZV0sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVtaXRTZWxlY3RFdmVudCgpIHtcbiAgICB0aGlzLnNlbGVjdENoYW5nZWQuZW1pdCh7XG4gICAgICBzaW5nbGVTZWxlY3Q6IHRoaXMuc2luZ2xlU2VsZWN0ID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZGF0YTogdGhpcy5zZWxlY3Rpb25zXG4gICAgfSk7XG4gIH1cblxuICBlbWl0Q2xpY2tFdmVudChkYXRhOiBhbnkpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2luZ2xlUm93Q2xpY2tlZC5lbWl0KHtcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KTtcbiAgfVxuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBBcmd1bWVudCAkZXZlbnQgaXMgbm90IHVzZWRcbiAgY29sdW1uRHJhZ1N0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpbmRleCA9IHRoaXMucmVzZXRJbmRleFdpdGhNdWx0aVNlbGVjdFJvdyhpbmRleCk7XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gaW5kZXg7XG4gIH1cblxuICBjb2x1bW5Ecm9wcGVkKCRldmVudDogQ2RrRHJhZ0Ryb3A8bnVtYmVyPikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNldEluZGV4V2l0aE11bHRpU2VsZWN0Um93KCRldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudCwgdGhpcy5wcmV2aW91c0luZGV4LCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcm93RWRpdENsaWNrKHJvdzogYW55KSB7XG4gICAgdGhpcy5kYXRhVG9Db21wb25lbnQuZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBkZWxldGUgaXRlbS51eGdUYWJsZUVkaXQ7XG4gICAgfSk7XG4gICAgdGhpcy5lZGl0Um93T3JpZ2luID0geyAuLi5yb3cgfTtcbiAgICByb3cudXhnVGFibGVFZGl0ID0gdHJ1ZTtcbiAgICB0aGlzLnV4Z1RhYmxlRWRpdCA9IHRydWU7XG4gIH1cblxuICByb3dTZW5kVHJpZ2dlcmVkKHJvdzogYW55KSB7XG4gICAgdGhpcy5yb3dTZW5kLmVtaXQoe1xuICAgICAgZGF0YTogcm93XG4gICAgfSk7XG4gIH1cblxuICByb3dFZGl0Q29uZmlybShuZXdSb3c6IGFueSkge1xuICAgIGRlbGV0ZSBuZXdSb3cudXhnVGFibGVFZGl0O1xuICAgIHRoaXMudXhnVGFibGVFZGl0ID0gZmFsc2U7XG4gICAgdGhpcy5yb3dVcGRhdGVkLmVtaXQoe1xuICAgICAgZGF0YTogbmV3Um93XG4gICAgfSk7XG4gIH1cblxuICByb3dFZGl0Q2FuY2VsKHJvdzogYW55KSB7XG4gICAgZGVsZXRlIHJvdy51eGdUYWJsZUVkaXQ7XG4gICAgdGhpcy51eGdUYWJsZUVkaXQgPSBmYWxzZTtcbiAgICBPYmplY3Qua2V5cyhyb3cpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgcm93W2tleV0gPSB0aGlzLmVkaXRSb3dPcmlnaW5ba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIHJvd0RlbGV0ZShyb3c6IGFueSkge1xuICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5kYXRhVG9Db21wb25lbnQuZGF0YS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09IHJvdyk7XG4gICAgdGhpcy5kYXRhVG9Db21wb25lbnQuZGF0YS5zcGxpY2Uocm93SW5kZXgsIDEpO1xuICAgIHRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGEgPSB0aGlzLmRhdGFUb0NvbXBvbmVudC5kYXRhLnNsaWNlKCk7XG4gICAgdGhpcy5yb3dSZW1vdmVkLmVtaXQoe1xuICAgICAgZGF0YTogcm93XG4gICAgfSk7XG4gIH1cblxuICByb3dObyhyb3c6IGFueSkge1xuICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5kYXRhVG9Db21wb25lbnQuZGF0YS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09IHJvdyk7XG4gICAgcmV0dXJuIHJvd0luZGV4ICsgMTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge31cblxuICAvL2xvY2FsIGZ1bmN0aW9uc1xuICBhcHBseURlZmF1bHRQYWdpbmcoKSB7XG4gICAgY29uc3QgZGVmYXVsdFBhZ2luZyA9IHsgLi4uVXhnRGVmYXVsdFBhZ2luZywgLi4ueyBsZW5ndGg6IHRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGEubGVuZ3RoIH0gfTtcbiAgICB0aGlzLnBhZ2luZyA9IGRlZmF1bHRQYWdpbmc7XG4gICAgdGhpcy5hcHBseVBhZ2luZygpO1xuICB9XG5cbiAgYXBwbHlQYWdpbmcoKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvY2FsUGFnaW5nKHtcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmcucGFnZUluZGV4IHx8IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmcucGFnZVNpemUgfHwgNSxcbiAgICAgIGxlbmd0aDogdGhpcy5kYXRhLmxlbmd0aFxuICAgIH0pO1xuICB9XG5cbiAgbG9jYWxTb3J0KHNvcnQ6IFV4Z1NvcnQpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGEuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBsZXQgY29tcGFyaXNvbiA9IDA7XG4gICAgICBzd2l0Y2ggKHRoaXMuZ2V0U29ydENvbHVtblR5cGUoc29ydC5hY3RpdmUpKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgY29tcGFyaXNvbiA9IGFbc29ydC5hY3RpdmVdIC0gYltzb3J0LmFjdGl2ZV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGFbc29ydC5hY3RpdmVdLnRvVXBwZXJDYXNlKCkgPiBiW3NvcnQuYWN0aXZlXS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjb21wYXJpc29uID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcGFyaXNvbiA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmlzb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gLWNvbXBhcmlzb247XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRTb3J0Q29sdW1uVHlwZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBjb2x1bW5OYW1lO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbiA/IGNvbHVtbi50eXBlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgbG9jYWxQYWdpbmcocGFnZTogUGFnZUV2ZW50KSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gcGFnZS5wYWdlSW5kZXggKiBwYWdlLnBhZ2VTaXplO1xuXG4gICAgdGhpcy5kYXRhVG9Db21wb25lbnQuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShvZmZzZXQsIG9mZnNldCArIHBhZ2UucGFnZVNpemUpO1xuICB9XG5cbiAgcmVzZXRJbmRleFdpdGhNdWx0aVNlbGVjdFJvdyhpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aVNlbGVjdCA/IGluZGV4ICsgMSA6IGluZGV4O1xuICB9XG5cbiAgcmVzZXRBY3Rpb25Sb3coKSB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuZW5hYmxlRGVsZXRlIHx8IHRoaXMuZW5hYmxlRWRpdCB8fCB0aGlzLmVuYWJsZVNlbmQpICYmXG4gICAgICB0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudC5pbmRleE9mKHRoaXMudXhnVGFibGVBY3Rpb25Db2x1bW5bMF0pIDwgMFxuICAgICkge1xuICAgICAgdGhpcy5hZGRPclVwZGF0ZUFjdGlvbkNvbHVtblRvQ29sdW1uc1RvRGlzcGxheSgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmVuYWJsZVNlbmQgJiZcbiAgICAgICF0aGlzLmVuYWJsZURlbGV0ZSAmJlxuICAgICAgIXRoaXMuZW5hYmxlRWRpdCAmJlxuICAgICAgdGhpcy5jb2x1bW5zVG9EaXNwbGF5VG9Db21wb25lbnQuaW5kZXhPZih0aGlzLnV4Z1RhYmxlQWN0aW9uQ29sdW1uWzBdKSA+IC0xXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbW92ZUFjdGlvbkNvbHVtbnNGcm9tQ29sdW1uc1RvRGlzcGxheSgpO1xuICAgIH1cbiAgfVxuXG4gIGlzUm93U2VsZWN0ZWQocm93OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3RlZEluZGV4KHJvdykgPiAtMSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkSW5kZXgocm93OiBhbnkpIHtcbiAgICBjb25zdCByb3dJZHggPSB0aGlzLnNlbGVjdGlvbnMuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gaXNFcXVhbChpdGVtLCByb3cpO1xuICAgIH0pO1xuICAgIHJldHVybiByb3dJZHggPiAtMSA/IHJvd0lkeCA6IC0xO1xuICB9XG5cbiAgYWRkT3JVcGRhdGVBY3Rpb25Db2x1bW5Ub0NvbHVtbnNUb0Rpc3BsYXkoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50LmluZGV4T2YodGhpcy51eGdUYWJsZUFjdGlvbkNvbHVtblswXSkgPiAtMSkge1xuICAgICAgdGhpcy5yZW1vdmVBY3Rpb25Db2x1bW5zRnJvbUNvbHVtbnNUb0Rpc3BsYXkoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWN0aW9uQ29sdW1uUG9zaXRpb24gfHwgdGhpcy5hY3Rpb25Db2x1bW5Qb3NpdGlvbiA9PT0gVXhnQWN0aW9uQ29sdW1uUG9zaXRpb24uZW5kKSB7XG4gICAgICB0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudCA9IHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50LmNvbmNhdCh0aGlzLnV4Z1RhYmxlQWN0aW9uQ29sdW1uKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWN0aW9uQ29sdW1uUG9zaXRpb24gPT09IFV4Z0FjdGlvbkNvbHVtblBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgICB0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudCA9IHRoaXMudXhnVGFibGVBY3Rpb25Db2x1bW4uY29uY2F0KHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVBY3Rpb25Db2x1bW5zRnJvbUNvbHVtbnNUb0Rpc3BsYXkoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50LmluZGV4T2YodGhpcy51eGdUYWJsZUFjdGlvbkNvbHVtblswXSkgPiAtMSlcbiAgICAgIHRoaXMuY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50LnNwbGljZSh0aGlzLmNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudC5pbmRleE9mKHRoaXMudXhnVGFibGVBY3Rpb25Db2x1bW5bMF0pLCAxKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInV4Zy1kYXRhLXRhYmxlXCI+XG4gIDx0YWJsZVxuICAgIG1hdC10YWJsZVxuICAgIG1hdFNvcnRcbiAgICBjZGtEcm9wTGlzdEdyb3VwXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVRvQ29tcG9uZW50XCJcbiAgICBbbWF0U29ydEFjdGl2ZV09XCJzb3J0LmFjdGl2ZVwiXG4gICAgW21hdFNvcnREaXJlY3Rpb25dPVwic29ydC5kaXJlY3Rpb25cIlxuICAgIChtYXRTb3J0Q2hhbmdlKT1cInNvcnREYXRhKCRldmVudClcIlxuICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCBtYWluLWRhdGEtdGFibGVcIlxuICA+XG4gICAgQGlmIChtdWx0aVNlbGVjdCkge1xuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ1eGctdGFibGUtc2VsZWN0LXJvd1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgIChjaGFuZ2UpPVwibXVsdGlTZWxlY3RBbGxSb3dzKCRldmVudClcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9ucy5sZW5ndGggIT09IDAgJiYgc2VsZWN0aW9ucy5sZW5ndGggPT09IHRoaXMuZGF0YVRvQ29tcG9uZW50LmRhdGEubGVuZ3RoXCJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbnMubGVuZ3RoICE9PSAwICYmIHNlbGVjdGlvbnMubGVuZ3RoICE9PSB0aGlzLmRhdGFUb0NvbXBvbmVudC5kYXRhLmxlbmd0aFwiXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm11bHRpU2VsZWN0Um93Q2xpY2socm93KVwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbGVjdCByb3cgJyArIHJvd05vKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW5JbmRleDsgbGV0IGNvbHVtbkluZGV4ID0gJGluZGV4KSB7XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInt7IGNvbHVtbi5uYW1lIH19XCI+XG4gICAgICAgIDx0aFxuICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICBjZGtEcm9wTGlzdExvY2tBeGlzPVwieFwiXG4gICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiY29sdW1uRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cImNvbHVtbkRyYWdTdGFydGVkKCRldmVudCwgY29sdW1uSW5kZXgpXCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFjb2x1bW5EcmFnRW5hYmxlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAndXhnLXRhYmxlLWNlbGwtbGVmdCc6IGNvbHVtbi5hbGlnbiA9PT0gJ2xlZnQnLFxuICAgICAgICAgICAgJ3V4Zy10YWJsZS1jZWxsLWNlbnRlcic6IGNvbHVtbi5hbGlnbiA9PT0gJ2NlbnRlcicsXG4gICAgICAgICAgICAndXhnLXRhYmxlLWNlbGwtcmlnaHQnOiBjb2x1bW4uYWxpZ24gPT09ICdyaWdodCdcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbHVtbi5kaXNwbGF5TmFtZSA/IGNvbHVtbi5kaXNwbGF5TmFtZSA6IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgPCEtLWZpbHRlciB0YWJsZSBiYXNlZCBvbiBjb2x1bW4gc2VhcmNoLS0+XG4gICAgICAgICAgQGlmIChjb2x1bW4uZmlsdGVyKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZpbHRlck1lbnVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG1lbnVPcGVuZWQpPVwiaW5wdXRWYWwuZm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkZpbHRlciBsaXN0IGljb24tYnV0dG9uIHdpdGggYSBtZW51XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAoaW5wdXRWYWwudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZpbHRlci1pY29uXCI+ZmlsdGVyX2xpc3RfYWx0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWx0ZXJfbGlzdF9hbHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjZmlsdGVyTWVudT1cIm1hdE1lbnVcIiB5UG9zaXRpb249XCJhYm92ZVwiIGNsYXNzPVwiZmlsdGVyLW1lbnVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBmbG9hdExhYmVsPVwiYXV0b1wiIGRlbnNlIChjbGljayk9XCJzdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIG1hdFByZWZpeD5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICNzZWFyY2hJbnB1dD1cIm1hdElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI2lucHV0VmFsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgY29sdW1uLmRpc3BsYXlOYW1lID8gY29sdW1uLmRpc3BsYXlOYW1lIDogY29sdW1uLm5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiYXBwbHlGaWx0ZXIoaW5wdXRWYWwudmFsdWUsIGNvbHVtbi5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIEBpZiAoaW5wdXRWYWwudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoJGV2ZW50LCBpbnB1dFZhbCwgY29sdW1uKVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmNsZWFyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAndXhnLXRhYmxlLWNlbGwtbGVmdCc6IGNvbHVtbi5hbGlnbiA9PT0gJ2xlZnQnLFxuICAgICAgICAgICAgJ3V4Zy10YWJsZS1jZWxsLWNlbnRlcic6IGNvbHVtbi5hbGlnbiA9PT0gJ2NlbnRlcicsXG4gICAgICAgICAgICAndXhnLXRhYmxlLWNlbGwtcmlnaHQnOiBjb2x1bW4uYWxpZ24gPT09ICdyaWdodCdcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gdmlldyBjZWxsLCBkaXNwbGF5IGRhdGEgY2VsbCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInV4Zy10YWJsZS1yb3ctdmlld1wiIFtuZ0NsYXNzXT1cInsgJ3V4Zy1jZWxsLWhpZGRlbic6IGVsZW1lbnQudXhnVGFibGVFZGl0IH1cIj5cbiAgICAgICAgICAgIEBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXhnLXRhYmxlLXJvdy1kYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGF0ZV9yYW5nZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbi5uYW1lXSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnY2VsbFRlbXBsYXRlJykge1xuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgIGVtaXRlcjogY29sdW1uLmNlbGxUZW1wbGF0ZUVtaXRlclxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICA8ZGl2Pnt7IGVsZW1lbnRbY29sdW1uLm5hbWVdIH19PC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGVkaXQgY2VsbCAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXhnLXRhYmxlLXJvdy1lZGl0XCIgW25nQ2xhc3NdPVwieyAndXhnLWNlbGwtaGlkZGVuJzogIWVsZW1lbnQudXhnVGFibGVFZGl0IH1cIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIEBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgQGNhc2UgKCdjZWxsVGVtcGxhdGUnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdGVyOiBjb2x1bW4uY2VsbFRlbXBsYXRlRW1pdGVyXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnB1dCAnICsgZWxlbWVudFtjb2x1bW4ubmFtZV1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgZWxlbWVudFtjb2x1bW4ubmFtZV0gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWxlbWVudFtjb2x1bW4ubmFtZV1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgbWF0LWZvb3Rlci1jZWxsXG4gICAgICAgICAgKm1hdEZvb3RlckNlbGxEZWZcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAndXhnLXRhYmxlLWNlbGwtbGVmdCc6IGNvbHVtbi5hbGlnbiA9PT0gJ2xlZnQnLFxuICAgICAgICAgICAgJ3V4Zy10YWJsZS1jZWxsLWNlbnRlcic6IGNvbHVtbi5hbGlnbiA9PT0gJ2NlbnRlcicsXG4gICAgICAgICAgICAndXhnLXRhYmxlLWNlbGwtcmlnaHQnOiBjb2x1bW4uYWxpZ24gPT09ICdyaWdodCdcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldFRvdGFsUm93Q2VsbChjb2x1bW4pIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGlmIChlbmFibGVFZGl0IHx8IGVuYWJsZURlbGV0ZSB8fCBlbmFibGVTZW5kKSB7XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInV4Zy10YWJsZS1hY3Rpb24tcm93XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ1eGctdGFibGUtYWN0aW9uLWNvbHVtbi1oZWFkZXJcIj5BY3Rpb25zPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwidXhnLXRhYmxlLWFjdGlvbi1jb2x1bW4tY2VsbFwiPlxuICAgICAgICAgIEBpZiAoIXJvdy51eGdUYWJsZUVkaXQgJiYgZW5hYmxlRWRpdCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2F0dHIuYXJpYS1sYWJlbF09XCInRWRpdCByb3cgJyArIHJvd05vKHJvdylcIiAoY2xpY2spPVwicm93RWRpdENsaWNrKHJvdyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmVkaXRfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghcm93LnV4Z1RhYmxlRWRpdCAmJiBlbmFibGVEZWxldGUpIHtcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0RlbGV0ZSByb3cgJyArIHJvd05vKHJvdylcIiAoY2xpY2spPVwicm93RGVsZXRlKHJvdyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoIXJvdy51eGdUYWJsZUVkaXQgJiYgZW5hYmxlU2VuZCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2F0dHIuYXJpYS1sYWJlbF09XCInU2VuZCByb3cgJyArIHJvd05vKHJvdylcIiAoY2xpY2spPVwicm93U2VuZFRyaWdnZXJlZChyb3cpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zZW5kX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocm93LnV4Z1RhYmxlRWRpdCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2F0dHIuYXJpYS1sYWJlbF09XCInQ2FuY2VsIHJvdyAnICsgcm93Tm8ocm93KVwiIChjbGljayk9XCJyb3dFZGl0Q29uZmlybShyb3cpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRvbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocm93LnV4Z1RhYmxlRWRpdCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJvd0VkaXRDYW5jZWwocm93KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuXG4gICAgPHRyXG4gICAgICBtYXQtaGVhZGVyLXJvd1xuICAgICAgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudDsgc3RpY2t5OiBzdGlja3lIZWFkZXJcIlxuICAgICAgW25nQ2xhc3NdPVwic2hvd1RhYmxlSGVhZGVyID8gJycgOiAndXhnLXRhYmxlLW5vLWhlYWRlcidcIlxuICAgID48L3RyPlxuICAgIDx0clxuICAgICAgbWF0LXJvd1xuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudFwiXG4gICAgICAoY2xpY2spPVwic2luZ2xlU2VsZWN0Um93Q2xpY2socm93KVwiXG4gICAgICBbbmdDbGFzc109XCJbaXNSb3dTZWxlY3RlZChyb3cpID8gJ3NlbGVjdGVkJyA6ICcnLCByb3cuX2NsYXNzID8gcm93Ll9jbGFzcyA6ICcnXVwiXG4gICAgPjwvdHI+XG4gICAgPHRyXG4gICAgICBtYXQtZm9vdGVyLXJvd1xuICAgICAgKm1hdEZvb3RlclJvd0RlZj1cImNvbHVtbnNUb0Rpc3BsYXlUb0NvbXBvbmVudDsgc3RpY2t5OiBzdGlja3lGb290ZXJcIlxuICAgICAgW25nQ2xhc3NdPVwic2hvd1RvdGFsUm93cyA/ICcnIDogJ2hpZGRlbi10b3RhbCdcIlxuICAgID48L3RyPlxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3cgbm8tcmVjb3Jkc1wiICptYXROb0RhdGFSb3c+XG4gICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uc1RvRGlzcGxheVRvQ29tcG9uZW50Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LXdyYXBcIj5cbiAgICAgICAgICA8c3Bhbj5ObyBkYXRhIGF2YWlsYWJsZTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGFibGU+XG48L2Rpdj5cblxuQGlmIChwYWdlRW5hYmxlKSB7XG4gIDxtYXQtcGFnaW5hdG9yXG4gICAgW2Rpc2FibGVkXT1cInBhZ2luZz8uZGlzYWJsZWRcIlxuICAgIFtsZW5ndGhdPVwicGFnaW5nPy5sZW5ndGhcIlxuICAgIFtoaWRlUGFnZVNpemVdPVwicGFnaW5nPy5oaWRlUGFnZVNpemVcIlxuICAgIFtwYWdlSW5kZXhdPVwicGFnaW5nPy5wYWdlSW5kZXhcIlxuICAgIFtwYWdlU2l6ZV09XCJwYWdpbmc/LnBhZ2VTaXplXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2luZz8ucGFnZVNpemVPcHRpb25zID8/IFtdXCJcbiAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwicGFnaW5nPy5zaG93Rmlyc3RMYXN0QnV0dG9uc1wiXG4gICAgKHBhZ2UpPVwiYXBwbHlQYWdlQ2hhbmdlcygkZXZlbnQpXCJcbiAgPlxuICA8L21hdC1wYWdpbmF0b3I+XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYXN0cmEtYW5ndWxhci1jb21wb25lbnRzLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvdGFibGUvZmluYXN0cmEtYW5ndWxhci1jb21wb25lbnRzLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}