axidio-styleguide-library1-v2 0.1.50 → 0.1.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -66,6 +66,12 @@ export class AxTableComponent {
66
66
  this.totalPages = Math.ceil(this.totalItems / this.pageSize);
67
67
  this.goToPageNumber = this.currentPage;
68
68
  }
69
+ preventNegative(event) {
70
+ // Block characters: -, +, e (all invalid for page number)
71
+ if (event.key === '-' || event.key === '+' || event.key.toLowerCase() === 'e') {
72
+ event.preventDefault();
73
+ }
74
+ }
69
75
  // Generate array of page numbers to show in pagination
70
76
  generatePagesToShow() {
71
77
  this.pagesToShow = [];
@@ -241,11 +247,11 @@ export class AxTableComponent {
241
247
  this.clickEvent.emit(d);
242
248
  }
243
249
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AxTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
244
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AxTableComponent, selector: "lib-ax-table", inputs: { tableData: "tableData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<!-- <div class=\"header-alt lib-display-flex lib-justify-content-space-between\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\" class=\"float-right padding-5 input-style\"\r\n id=\"exampleInputEmail1\" autocomplete=\"off\" placeholder=\" Search \" aria-describedby=\"emailHelp\"\r\n (keyup)=\"onEnter($event)\" />\r\n</div>\r\n<div class=\"table-header\"></div>\r\n<div class=\"table-wrapper\">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead class=\"table-thead\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" class=\"header-cell\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div class=\"pagination-container\" *ngIf=\"itemList && itemList.length && !tableData.metaData.isPaginationHidden\">\r\n <div class=\"results-summary\">\r\n Showing <b>{{ (currentPage - 1) * pageSize + 1 }}</b> to\r\n <b>{{ currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize }}</b>\r\n of <b>{{ totalItems }}</b> entries\r\n </div>\r\n\r\n <ngb-pagination \r\n [collectionSize]=\"totalItems\" \r\n [(page)]=\"currentPage\" \r\n [pageSize]=\"pageSize\" \r\n [maxSize]=\"5\"\r\n [rotate]=\"true\" \r\n [boundaryLinks]=\"true\" \r\n (pageChange)=\"onPaginationChange()\" \r\n class=\"sb-pagination\">\r\n </ngb-pagination>\r\n\r\n <div class=\"go-to-page\">\r\n <label for=\"gotoPageInput\">Go to page</label>\r\n <input \r\n id=\"gotoPageInput\" \r\n type=\"number\" \r\n [min]=\"1\" \r\n [max]=\"totalPages\" \r\n [ngModel]=\"goToPageValue\"\r\n (ngModelChange)=\"goToPageValue = $event; goToPage()\"\r\n (keypress)=\"validateNumberInput($event)\">\r\n </div>\r\n</div> -->\r\n\r\n\r\n\r\n<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\" id=\"exampleInputEmail1\" autocomplete=\"off\"\r\n placeholder=\" Search \" aria-describedby=\"emailHelp\" (keyup)=\"onEnter($event)\" />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input type=\"number\" class=\"page-input\" min=\"1\" [max]=\"totalPages\" (keyup.enter)=\"goToSpecificPage()\" [(ngModel)]=\"goToPageNumber\">\r\n\r\n <span> {{ (currentList.length > 0 ? ((currentPage - 1) * pageSize + 1) : 0) }} -\r\n {{ ((currentPage - 1) * pageSize + currentList.length) }} of\r\n {{ totalItems | number }}</span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToNextPage()\" class=\"pagination-btn\" title=\"Next Page\">\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToLastPage()\" class=\"pagination-btn\" title=\"Last Page\">\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1{background-color:#2e3640}.lib-chart-wrapper:hover .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.HeaderAltComponent, selector: "lib-header-alt", inputs: ["title"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
250
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AxTableComponent, selector: "lib-ax-table", inputs: { tableData: "tableData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<!-- <div class=\"header-alt lib-display-flex lib-justify-content-space-between\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\" class=\"float-right padding-5 input-style\"\r\n id=\"exampleInputEmail1\" autocomplete=\"off\" placeholder=\" Search \" aria-describedby=\"emailHelp\"\r\n (keyup)=\"onEnter($event)\" />\r\n</div>\r\n<div class=\"table-header\"></div>\r\n<div class=\"table-wrapper\">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead class=\"table-thead\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" class=\"header-cell\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div class=\"pagination-container\" *ngIf=\"itemList && itemList.length && !tableData.metaData.isPaginationHidden\">\r\n <div class=\"results-summary\">\r\n Showing <b>{{ (currentPage - 1) * pageSize + 1 }}</b> to\r\n <b>{{ currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize }}</b>\r\n of <b>{{ totalItems }}</b> entries\r\n </div>\r\n\r\n <ngb-pagination \r\n [collectionSize]=\"totalItems\" \r\n [(page)]=\"currentPage\" \r\n [pageSize]=\"pageSize\" \r\n [maxSize]=\"5\"\r\n [rotate]=\"true\" \r\n [boundaryLinks]=\"true\" \r\n (pageChange)=\"onPaginationChange()\" \r\n class=\"sb-pagination\">\r\n </ngb-pagination>\r\n\r\n <div class=\"go-to-page\">\r\n <label for=\"gotoPageInput\">Go to page</label>\r\n <input \r\n id=\"gotoPageInput\" \r\n type=\"number\" \r\n [min]=\"1\" \r\n [max]=\"totalPages\" \r\n [ngModel]=\"goToPageValue\"\r\n (ngModelChange)=\"goToPageValue = $event; goToPage()\"\r\n (keypress)=\"validateNumberInput($event)\">\r\n </div>\r\n</div> -->\r\n\r\n\r\n\r\n<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\" id=\"exampleInputEmail1\" autocomplete=\"off\"\r\n placeholder=\" Search \" aria-describedby=\"emailHelp\" (keyup)=\"onEnter($event)\" />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input type=\"number\" class=\"page-input\" min=\"1\" [max]=\"totalPages\" (keyup.enter)=\"goToSpecificPage()\" [(ngModel)]=\"goToPageNumber\"\r\n (keypress)=\"preventNegative($event)\"\r\n >\r\n\r\n <span> {{ (currentList.length > 0 ? ((currentPage - 1) * pageSize + 1) : 0) }} -\r\n {{ ((currentPage - 1) * pageSize + currentList.length) }} of\r\n {{ totalItems | number }}</span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToNextPage()\" class=\"pagination-btn\" title=\"Next Page\">\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToLastPage()\" class=\"pagination-btn\" title=\"Last Page\">\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1{background-color:#2e3640}.lib-chart-wrapper:hover .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.HeaderAltComponent, selector: "lib-header-alt", inputs: ["title"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
245
251
  }
246
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AxTableComponent, decorators: [{
247
253
  type: Component,
248
- args: [{ selector: 'lib-ax-table', template: "<!-- <div class=\"header-alt lib-display-flex lib-justify-content-space-between\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\" class=\"float-right padding-5 input-style\"\r\n id=\"exampleInputEmail1\" autocomplete=\"off\" placeholder=\" Search \" aria-describedby=\"emailHelp\"\r\n (keyup)=\"onEnter($event)\" />\r\n</div>\r\n<div class=\"table-header\"></div>\r\n<div class=\"table-wrapper\">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead class=\"table-thead\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" class=\"header-cell\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div class=\"pagination-container\" *ngIf=\"itemList && itemList.length && !tableData.metaData.isPaginationHidden\">\r\n <div class=\"results-summary\">\r\n Showing <b>{{ (currentPage - 1) * pageSize + 1 }}</b> to\r\n <b>{{ currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize }}</b>\r\n of <b>{{ totalItems }}</b> entries\r\n </div>\r\n\r\n <ngb-pagination \r\n [collectionSize]=\"totalItems\" \r\n [(page)]=\"currentPage\" \r\n [pageSize]=\"pageSize\" \r\n [maxSize]=\"5\"\r\n [rotate]=\"true\" \r\n [boundaryLinks]=\"true\" \r\n (pageChange)=\"onPaginationChange()\" \r\n class=\"sb-pagination\">\r\n </ngb-pagination>\r\n\r\n <div class=\"go-to-page\">\r\n <label for=\"gotoPageInput\">Go to page</label>\r\n <input \r\n id=\"gotoPageInput\" \r\n type=\"number\" \r\n [min]=\"1\" \r\n [max]=\"totalPages\" \r\n [ngModel]=\"goToPageValue\"\r\n (ngModelChange)=\"goToPageValue = $event; goToPage()\"\r\n (keypress)=\"validateNumberInput($event)\">\r\n </div>\r\n</div> -->\r\n\r\n\r\n\r\n<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\" id=\"exampleInputEmail1\" autocomplete=\"off\"\r\n placeholder=\" Search \" aria-describedby=\"emailHelp\" (keyup)=\"onEnter($event)\" />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input type=\"number\" class=\"page-input\" min=\"1\" [max]=\"totalPages\" (keyup.enter)=\"goToSpecificPage()\" [(ngModel)]=\"goToPageNumber\">\r\n\r\n <span> {{ (currentList.length > 0 ? ((currentPage - 1) * pageSize + 1) : 0) }} -\r\n {{ ((currentPage - 1) * pageSize + currentList.length) }} of\r\n {{ totalItems | number }}</span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToNextPage()\" class=\"pagination-btn\" title=\"Next Page\">\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToLastPage()\" class=\"pagination-btn\" title=\"Last Page\">\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1{background-color:#2e3640}.lib-chart-wrapper:hover .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
254
+ args: [{ selector: 'lib-ax-table', template: "<!-- <div class=\"header-alt lib-display-flex lib-justify-content-space-between\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\" class=\"float-right padding-5 input-style\"\r\n id=\"exampleInputEmail1\" autocomplete=\"off\" placeholder=\" Search \" aria-describedby=\"emailHelp\"\r\n (keyup)=\"onEnter($event)\" />\r\n</div>\r\n<div class=\"table-header\"></div>\r\n<div class=\"table-wrapper\">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead class=\"table-thead\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" class=\"header-cell\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div class=\"pagination-container\" *ngIf=\"itemList && itemList.length && !tableData.metaData.isPaginationHidden\">\r\n <div class=\"results-summary\">\r\n Showing <b>{{ (currentPage - 1) * pageSize + 1 }}</b> to\r\n <b>{{ currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize }}</b>\r\n of <b>{{ totalItems }}</b> entries\r\n </div>\r\n\r\n <ngb-pagination \r\n [collectionSize]=\"totalItems\" \r\n [(page)]=\"currentPage\" \r\n [pageSize]=\"pageSize\" \r\n [maxSize]=\"5\"\r\n [rotate]=\"true\" \r\n [boundaryLinks]=\"true\" \r\n (pageChange)=\"onPaginationChange()\" \r\n class=\"sb-pagination\">\r\n </ngb-pagination>\r\n\r\n <div class=\"go-to-page\">\r\n <label for=\"gotoPageInput\">Go to page</label>\r\n <input \r\n id=\"gotoPageInput\" \r\n type=\"number\" \r\n [min]=\"1\" \r\n [max]=\"totalPages\" \r\n [ngModel]=\"goToPageValue\"\r\n (ngModelChange)=\"goToPageValue = $event; goToPage()\"\r\n (keypress)=\"validateNumberInput($event)\">\r\n </div>\r\n</div> -->\r\n\r\n\r\n\r\n<div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <lib-header-alt [title]=\"tableData.metaData.title\" *ngIf=\"!isHeaderVisible\"></lib-header-alt>\r\n </div>\r\n\r\n <input type=\"text\" *ngIf=\"!tableData.metaData.isSearchHidden\"\r\n class=\"form-control custom-input medium-font-size textbox-ax-common\" id=\"exampleInputEmail1\" autocomplete=\"off\"\r\n placeholder=\" Search \" aria-describedby=\"emailHelp\" (keyup)=\"onEnter($event)\" />\r\n</div>\r\n\r\n<div class=\"popup-body-for-scroll\">\r\n <div class=\"table-wrapper\">\r\n\r\n <div class=\"table-responsive border\">\r\n <table class=\"table table-bordered table-hover align-middle mb-0\">\r\n <thead class=\"table-dark\">\r\n <tr class=\"table-header\">\r\n <th *ngFor=\"let header of tableHeadList; index as i\" [ngClass]=\"\r\n !tableData.metaData.isHeaderAlignedToCenter\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right'\r\n : 'textalign-left'\r\n : 'textalign-center'\r\n \" [style.width]=\"getWidthById(header, i)\" [style.backgroundColor]=\"tableData.metaData.headerColor\"\r\n [style.color]=\"tableData.metaData.headerTextColor\" (click)=\"sortByColumn(header)\">\r\n <span *ngIf=\"\r\n (!tableData.metaData.isFirstColumnHeaderHidden && i == 0) || i > 0\r\n \" [ngClass]=\"\r\n !tableData.metaData.isHeaderSortHidden\r\n ? 'cursor-pointer'\r\n : 'cursor-default'\r\n \">{{ header }}</span>\r\n <i *ngIf=\"\r\n (!isUserSort || checkIfColumnCurrentlyBeingSorted(header)) &&\r\n !tableData.metaData.isHeaderSortHidden\r\n \" class=\"sort-icons fa\" [ngClass]=\"\r\n !isUserSort\r\n ? 'fa-sort'\r\n : sortDirection == 'asc'\r\n ? 'fa-sort-asc'\r\n : 'fa-sort-desc'\r\n \"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let store of currentList\" [ngClass]=\"\r\n tableData?.highlightedTexts?.includes(store[tableHeadList[0]])\r\n ? 'font-weight-bold'\r\n : ''\r\n \">\r\n <td (click)=\"handleClick(store)\" class=\"table-cell\" *ngFor=\"let header of tableHeadList; index as i\"\r\n [style.width]=\"getWidthById(header, i)\" [ngClass]=\"\r\n !tableData.metaData.isAllAlignedToRight\r\n ? i == tableHeadList.length - 1\r\n ? 'textalign-right last-column-color'\r\n : 'textalign-left'\r\n : 'textalign-right'\r\n \" [style.cursor]=\"\r\n tableData.metaData.hasDrillDown ? 'pointer' : 'default'\r\n \">\r\n <span>{{ store[header] }}</span>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"pagination-bar mt-0\">\r\n <span>Go To</span>\r\n <input type=\"number\" class=\"page-input\" min=\"1\" [max]=\"totalPages\" (keyup.enter)=\"goToSpecificPage()\" [(ngModel)]=\"goToPageNumber\"\r\n (keypress)=\"preventNegative($event)\"\r\n >\r\n\r\n <span> {{ (currentList.length > 0 ? ((currentPage - 1) * pageSize + 1) : 0) }} -\r\n {{ ((currentPage - 1) * pageSize + currentList.length) }} of\r\n {{ totalItems | number }}</span>\r\n\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToFirstPage()\" class=\"pagination-btn\" title=\"First Page\">\r\n <i class=\"bi bi-chevron-double-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === 1\" (click)=\"goToPreviousPage()\" class=\"pagination-btn\" title=\"Previous Page\">\r\n <i class=\"bi bi-chevron-left\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToNextPage()\" class=\"pagination-btn\" title=\"Next Page\">\r\n <i class=\"bi bi-chevron-right\"></i>\r\n </button>\r\n <button [disabled]=\"currentPage === totalPages\" (click)=\"goToLastPage()\" class=\"pagination-btn\" title=\"Last Page\">\r\n <i class=\"bi bi-chevron-double-right\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".modal-dialog{max-height:90vh;height:90vh;margin:5vh auto;display:flex;flex-direction:column}.modal-content{height:100%;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.modal-header{flex-shrink:0;border-bottom:1px solid #dee2e6;padding:1rem}.modal-body{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;min-height:0}.modal-footer{flex-shrink:0;border-top:1px solid #dee2e6;padding:1rem}.pagination-bar{display:flex;align-items:center;justify-content:flex-end;font-size:15px;gap:10px;width:100%;border:var(--table-border);border-top:0;background:var(--table-bg);color:var(--font-color);padding:12px 4px}.page-input::placeholder{color:var(--font-color)}.pagination-btn{background:none;border:none;color:var(--font-color, #444);border-radius:5px;transition:background .15s,color .15s;font-size:1.14rem;display:inline-flex;align-items:center;justify-content:center}.pagination-btn[disabled]{color:#c3c3c3!important;cursor:not-allowed}.pagination-btn:not([disabled]):hover,.pagination-btn:not([disabled]):focus{background:#e6f0ff!important;color:#1976d2!important;outline:none}.page-input{width:45px;text-align:center;font-size:15px;border:var(--table-border);height:32px;background:var(--table-bg);color:var(--font-color)}.popup-body-for-scroll{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;max-height:90%;gap:.5rem}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:0;flex-shrink:0}.table-wrapper{background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);box-shadow:0 0 8px #0000000f;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0}.table-responsive{width:100%;overflow:auto;flex:1;min-height:0}table{width:100%;background-color:var(--background-color, #ffffff);margin-bottom:0}table th,table td{vertical-align:middle;white-space:nowrap;background-color:var(--background-color, #ffffff);color:var(--bs-body-color, #212529);border:var(--border, 1px solid #dee2e6);padding:8px 12px}thead th{background-color:var(--bs-tertiary-bg, #f8f9fa);color:var(--bs-body-color, #212529);font-weight:600;position:sticky;top:0;z-index:2}.table-responsive::-webkit-scrollbar{width:6px;height:6px}.table-responsive::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.table-responsive::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.sort-icons{margin-left:5px;color:var(--bs-body-color, #212529)}.textalign-left{text-align:left}.textalign-right{text-align:right}.textalign-center{text-align:center}.last-column-color{color:var(--link-menu, #2b6ecf)}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-bold{font-weight:700}.pagination-section{flex-shrink:0;background-color:var(--background-color, #ffffff);border:1px solid #dee2e6;border-radius:8px;margin-top:0;margin-bottom:0;padding:.5rem;min-height:60px;max-height:70px;overflow:visible;position:relative;z-index:1}@media (max-width: 575.98px){.modal-dialog{margin:0;max-height:100vh;height:100vh;width:100%;max-width:100%}.modal-content{max-height:100vh;border-radius:0;height:100vh}.modal-body{padding:.75rem}table th,table td{padding:6px 8px;font-size:.875rem}.pagination-section{margin-top:.25rem;padding:.5rem;max-height:118px}}@media (min-width: 576px) and (max-width: 767.98px){.modal-dialog{max-width:95%;margin:2.5vh auto;max-height:95vh;height:95vh}.modal-content{max-height:95vh;height:100%}}@media (min-width: 768px) and (max-width: 991.98px){.modal-dialog{max-width:90%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 992px){.modal-dialog{max-width:85%;margin:5vh auto;max-height:90vh;height:90vh}.modal-content{max-height:90vh;height:100%}}@media (min-width: 1200px){.modal-dialog{max-width:1140px}}.custom-input{max-width:300px;margin-left:auto}.d-flex.align-items-center.justify-content-between.w-100{margin-bottom:.5rem;flex-shrink:0}.modal-backdrop{z-index:1040}.modal{z-index:1050}.modal.show .modal-dialog{transform:none}.modal-dialog{position:relative;width:auto;pointer-events:none}.modal-dialog .modal-content{pointer-events:auto}.pagination-section .btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.2}.page-gap{gap:5px}.pagination-section .form-control{height:30px;font-size:.875rem}.pagination-section span{font-size:.875rem;line-height:1.2}@media (max-width: 480px){.table-responsive{font-size:.8rem}table th,table td{min-width:80px;padding:4px 6px}.pagination-section .btn{padding:.25rem .5rem;font-size:.8rem}.page-gap{gap:0}}@media (max-width: 576px){.page-gap{gap:0}}@media print{.modal-dialog{max-height:none;height:auto}.table-responsive{overflow:visible}.pagination-section{display:none}}@media screen and (max-width: 768px) and (max-height: 900px){.popup-body-for-scroll{max-height:85%}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1{background-color:#2e3640}.lib-chart-wrapper:hover .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
249
255
  }], ctorParameters: () => [], propDecorators: { tableData: [{
250
256
  type: Input
251
257
  }], customChartConfiguration: [{
@@ -253,4 +259,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
253
259
  }], clickEvent: [{
254
260
  type: Output
255
261
  }] } });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXgtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2F4LXRhYmxlL2F4LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9heC10YWJsZS9heC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU8xQyxNQUFNLE9BQU8sZ0JBQWdCO0lBMEQzQjtRQXZEVSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBUzVCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBS3pCOztXQUVHO1FBQ0gsZ0JBQVcsR0FBUSxDQUFDLENBQUM7UUFDckI7O1dBRUc7UUFDSCxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBS25COztXQUVHO1FBQ0gsa0JBQWEsR0FBUSxLQUFLLENBQUM7UUFDM0I7O1dBRUc7UUFDSCxlQUFVLEdBQVEsRUFBRSxDQUFDO1FBS3JCOztXQUVHO1FBQ0gsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUNyQix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFFN0IseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBRS9CLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsbUJBQWMsR0FBVyxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7UUFFbEYsa0RBQWtEO1FBQ2xELGdCQUFXLEdBQWEsRUFBRSxDQUFDO0lBRVgsQ0FBQztJQUVqQixRQUFR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QUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFNO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7K0dBbFNVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHFMQ1I3QixzcVFBMkxNOzs0RkRuTE8sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGNBQWM7d0RBS2YsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1heC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F4LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9heC10YWJsZS5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEF4VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHRhYmxlRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaXNVc2VyU29ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB0YWJsZUhlYWRMaXN0OiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3Qgb2Ygc3RvcmVzIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0ZWQgc3RhdGVcclxuICAgKi9cclxuICBpdGVtTGlzdDogYW55O1xyXG5cclxuICBpdGVtc1BlclBhZ2U6IG51bWJlciA9IDA7XHJcbiAgLyoqXHJcbiAgICogVG90YWwgbnVtYmVyIG9mIHN0b3JlcyBpbiBzZWxlY3RlZCBzdGF0ZVxyXG4gICAqL1xyXG4gIHRvdGFsSXRlbXM6IGFueTtcclxuICAvKipcclxuICAgKiBDdXJyZW50IHBhZ2UgZGlzcGxheWVkIGluIHBhZ2luYXRpb25cclxuICAgKi9cclxuICBjdXJyZW50UGFnZTogYW55ID0gMTtcclxuICAvKipcclxuICAgKiBOdW1iZXIgb2Ygc3RvcmVzIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2VcclxuICAgKi9cclxuICBwYWdlU2l6ZTogYW55ID0gMTA7XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgcGFnZSBzdG9yZSBsaXN0XHJcbiAgICovXHJcbiAgY3VycmVudExpc3Q6IGFueTtcclxuICAvKipcclxuICAgKiBTb3J0IGRpcmVjdGlvbiBvZiBzZWxlY3RlZCBjb2x1bW4gIGluIHRoZSB0YWJsZVxyXG4gICAqL1xyXG4gIHNvcnREaXJlY3Rpb246IGFueSA9ICdhc2MnO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIGNvbHVtbiBmb3Igc29ydGluZ1xyXG4gICAqL1xyXG4gIHNvcnRDb2x1bW46IGFueSA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdG9yIGZvciBsaXN0ZW5pbmcgdG8gdGhlIGNoYW5nZXMgb2Ygc2VhcmNoIHRleHQgZW50ZXJlZCBpbiB0aGUgaGVhZGVyXHJcbiAgICovXHJcbiAgc2VhcmNoVGV4dEZlYXR1cmUkOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogTWFzdGVyIHN0b3JlIGxpc3QgZm9yIHRoZSBzZWxlY3RlZCBzdGF0ZVxyXG4gICAqL1xyXG4gIG1hc3Rlckxpc3Q6IGFueSA9IFtdO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcbiAgdG90YWxQYWdlczogbnVtYmVyID0gMTtcclxuICBnb1RvUGFnZU51bWJlcjogbnVtYmVyID0gMTsgLy8gRml4ZWQ6IHJlbmFtZWQgZnJvbSBnb1RvUGFnZVZhbHVlIHRvIG1hdGNoIHRlbXBsYXRlXHJcblxyXG4gIC8vIEFkZCBwYWdlc1RvU2hvdyBwcm9wZXJ0eSBmb3IgcGFnaW5hdGlvbiBkaXNwbGF5XHJcbiAgcGFnZXNUb1Nob3c6IG51bWJlcltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHRoaXMudGFibGVIZWFkTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMudGFibGVEYXRhLmRhdGFbMF0pO1xyXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2ldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXN0ZXJMaXN0ID0gWy4uLnNlbGYudGFibGVEYXRhLmRhdGFdO1xyXG4gICAgdGhpcy5pdGVtTGlzdCA9IFsuLi50aGlzLm1hc3Rlckxpc3RdO1xyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtTGlzdC5sZW5ndGg7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlc1RvU2hvdygpOyAvLyBHZW5lcmF0ZSBwYWdlcyB0byBzaG93XHJcblxyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhLm1ldGFEYXRhLmlzUGFnaW5hdGlvbkhpZGRlbikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRMaXN0ID0gdGhpcy5pdGVtTGlzdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZFBhZ2UoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclZpc2libGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMudGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGxvYWRQYWdlKCkge1xyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMuY3VycmVudExpc3QgPSB0aGlzLml0ZW1MaXN0LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRvdGFsUGFnZXMoKSB7XHJcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmdvVG9QYWdlTnVtYmVyID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICB9XHJcblxyXG4gIC8vIEdlbmVyYXRlIGFycmF5IG9mIHBhZ2UgbnVtYmVycyB0byBzaG93IGluIHBhZ2luYXRpb25cclxuICBnZW5lcmF0ZVBhZ2VzVG9TaG93KCkge1xyXG4gICAgdGhpcy5wYWdlc1RvU2hvdyA9IFtdO1xyXG4gICAgY29uc3QgbWF4UGFnZXNUb1Nob3cgPSA1O1xyXG4gICAgbGV0IHN0YXJ0UGFnZSA9IE1hdGgubWF4KDEsIHRoaXMuY3VycmVudFBhZ2UgLSBNYXRoLmZsb29yKG1heFBhZ2VzVG9TaG93IC8gMikpO1xyXG4gICAgbGV0IGVuZFBhZ2UgPSBNYXRoLm1pbih0aGlzLnRvdGFsUGFnZXMsIHN0YXJ0UGFnZSArIG1heFBhZ2VzVG9TaG93IC0gMSk7XHJcbiAgICBcclxuICAgIC8vIEFkanVzdCBzdGFydCBwYWdlIGlmIHdlJ3JlIG5lYXIgdGhlIGVuZFxyXG4gICAgaWYgKGVuZFBhZ2UgLSBzdGFydFBhZ2UgKyAxIDwgbWF4UGFnZXNUb1Nob3cpIHtcclxuICAgICAgc3RhcnRQYWdlID0gTWF0aC5tYXgoMSwgZW5kUGFnZSAtIG1heFBhZ2VzVG9TaG93ICsgMSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGZvciAobGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSsrKSB7XHJcbiAgICAgIHRoaXMucGFnZXNUb1Nob3cucHVzaChpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFnaW5hdGlvbkNoYW5nZSgpIHtcclxuICAgIHRoaXMubG9hZFBhZ2UoKTtcclxuICAgIHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPSB0aGlzLmN1cnJlbnRQYWdlO1xyXG4gICAgdGhpcy5nZW5lcmF0ZVBhZ2VzVG9TaG93KCk7XHJcbiAgfVxyXG5cclxuICAvLyBOYXZpZ2F0aW9uIG1ldGhvZHMgZm9yIHBhZ2luYXRpb24gYnV0dG9uc1xyXG4gIGdvVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gMSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9QcmV2aW91c1BhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS0tO1xyXG4gICAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Ub05leHRQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPCB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSsrO1xyXG4gICAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Ub0xhc3RQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IHRoaXMudG90YWxQYWdlcykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICBpZiAocGFnZSA+PSAxICYmIHBhZ2UgPD0gdGhpcy50b3RhbFBhZ2VzICYmIHBhZ2UgIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgICAgIHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGaXhlZDogcmVuYW1lZCBtZXRob2QgdG8gbWF0Y2ggdGVtcGxhdGVcclxuICBnb1RvU3BlY2lmaWNQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPT09IG51bGwgfHwgdGhpcy5nb1RvUGFnZU51bWJlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPSB0aGlzLmN1cnJlbnRQYWdlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFnZU51bSA9IHBhcnNlSW50KHRoaXMuZ29Ub1BhZ2VOdW1iZXIudG9TdHJpbmcoKSwgMTApO1xyXG4gICAgXHJcbiAgICBpZiAoaXNOYU4ocGFnZU51bSkgfHwgcGFnZU51bSA8IDEpIHtcclxuICAgICAgdGhpcy5nb1RvUGFnZU51bWJlciA9IDE7XHJcbiAgICB9IGVsc2UgaWYgKHBhZ2VOdW0gPiB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgdGhpcy5nb1RvUGFnZU51bWJlciA9IHRoaXMudG90YWxQYWdlcztcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gVXBkYXRlIGN1cnJlbnQgcGFnZSBhbmQgbG9hZCBkYXRhXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5nb1RvUGFnZU51bWJlcjtcclxuICAgIHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU51bWJlcklucHV0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LndoaWNoID8gZXZlbnQud2hpY2ggOiBldmVudC5rZXlDb2RlO1xyXG4gICAgaWYgKGNoYXJDb2RlID4gMzEgJiYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uXHJcbiAgICogQHBhcmFtIGlkIC0gY29sdW1uIGlkXHJcbiAgICovXHJcbiAgZ2V0V2lkdGhCeUlkKGlkLCBpbmRleCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVIZWFkTGlzdC5sZW5ndGggPT0gMykge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMSkgcmV0dXJuICc2MCUnO1xyXG4gICAgICBlbHNlIHJldHVybiAnMjAlJztcclxuICAgIH1cclxuICAgIHZhciB3aWR0aCA9IDEwMCAvIHRoaXMudGFibGVIZWFkTGlzdC5sZW5ndGg7XHJcbiAgICByZXR1cm4gd2lkdGggKyAnJSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0cyB0aGUgY29sdW1uIHRoYXQgaXMgYmVpbmcgcGFzc2VkIGFzIHRoZSBwYXJhbVxyXG4gICAqIEBwYXJhbSBpZCAtIENvbHVtbiBpZFxyXG4gICAqL1xyXG4gIHNvcnRCeUNvbHVtbihpZCkge1xyXG4gICAgaWYgKGlkID09PSAndmlld0RldGFpbHMnIHx8IHRoaXMudGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyU29ydEhpZGRlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VyU29ydCkgdGhpcy5pc1VzZXJTb3J0ID0gdHJ1ZTtcclxuICAgIGlmIChpZCAhPT0gdGhpcy5zb3J0Q29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydENvbHVtbiA9IGlkO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnYXNjJzsgLy8gUmVzZXQgdG8gYXNjZW5kaW5nIHdoZW4gY2hhbmdpbmcgY29sdW1uc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycpIHtcclxuICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnZGVzYyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJ2FzYyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb21wYXJlKHYxLCB2Mikge1xyXG4gICAgICBjb25zdCBudW0xID0gcGFyc2VGbG9hdCh2MSk7XHJcbiAgICAgIGNvbnN0IG51bTIgPSBwYXJzZUZsb2F0KHYyKTtcclxuICAgICAgaWYgKCFpc05hTihudW0xKSAmJiAhaXNOYU4obnVtMikpIHtcclxuICAgICAgICByZXR1cm4gbnVtMSAtIG51bTI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHYxIDwgdjIgPyAtMSA6IHYxID4gdjIgPyAxIDogMDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5pdGVtTGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGNvbXBhcmUoYVtpZF0sIGJbaWRdKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyByZXMgOiAtcmVzO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIFJlc2V0IHRvIGZpcnN0IHBhZ2UgYWZ0ZXIgc29ydGluZ1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1MaXN0Lmxlbmd0aDtcclxuICAgIHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlcygpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZVBhZ2VzVG9TaG93KCk7XHJcbiAgICB0aGlzLmxvYWRQYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgY29sdW1uIGJlaW5nIHBhc3NlZCBhcyB0aGUgcGFyYW0gaXMgY3VycmVudGx5IGJlaW5nIHNvcnRlZCBvciBub3RcclxuICAgKiBAcGFyYW0gaWQgY29sdW1uIGlkXHJcbiAgICovXHJcbiAgY2hlY2tJZkNvbHVtbkN1cnJlbnRseUJlaW5nU29ydGVkKGlkKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0Q29sdW1uID09PSBpZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNvcnQgZGlyZWN0aW9uIHRoYXQgaXMgYmVpbmcgY3VycmVudGx5IHNvcnRlZFxyXG4gICAqL1xyXG4gIGdldFNvcnREaXJlY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICdhcnJvdy11cCcgOiAnYXJyb3ctZG93bic7XHJcbiAgfVxyXG5cclxuICBvbkVudGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuaXRlbUxpc3QgPSB0aGlzLm1hc3Rlckxpc3Q7XHJcbiAgICBsZXQgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuaXRlbUxpc3QpIHtcclxuICAgICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgICB0aGlzLml0ZW1MaXN0ID0gdGhpcy5pdGVtTGlzdC5maWx0ZXIoZnVuY3Rpb24gbWF0Y2hlcyhzdG9yZTogYW55KSB7XHJcbiAgICAgICAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgIHNlbGYudGFibGVIZWFkTGlzdC5tYXAoZnVuY3Rpb24gKHRhYmxlSGVhZCkge1xyXG4gICAgICAgICAgICBpZiAoc3RvcmVbdGFibGVIZWFkXSkge1xyXG4gICAgICAgICAgICAgIGxldCBzZWFyY2hhYmxlU3RyaW5nID0gc3RvcmVbdGFibGVIZWFkXSArICcnO1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHNlYXJjaGFibGVTdHJpbmdcclxuICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXNldCBwYWdpbmF0aW9uIGFmdGVyIHNlYXJjaFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtTGlzdC5sZW5ndGg7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlcygpO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlUGFnZXNUb1Nob3coKTtcclxuICAgICAgdGhpcy5sb2FkUGFnZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICB9XHJcbn0iLCI8IS0tIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0IGxpYi1kaXNwbGF5LWZsZXggbGliLWp1c3RpZnktY29udGVudC1zcGFjZS1iZXR3ZWVuXCI+XHJcbiAgPGxpYi1oZWFkZXItYWx0IFt0aXRsZV09XCJ0YWJsZURhdGEubWV0YURhdGEudGl0bGVcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj48L2xpYi1oZWFkZXItYWx0PlxyXG4gIDxpbnB1dCB0eXBlPVwidGV4dFwiICpuZ0lmPVwiIXRhYmxlRGF0YS5tZXRhRGF0YS5pc1NlYXJjaEhpZGRlblwiIGNsYXNzPVwiZmxvYXQtcmlnaHQgcGFkZGluZy01IGlucHV0LXN0eWxlXCJcclxuICAgIGlkPVwiZXhhbXBsZUlucHV0RW1haWwxXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCIgIFNlYXJjaCAgXCIgYXJpYS1kZXNjcmliZWRieT1cImVtYWlsSGVscFwiXHJcbiAgICAoa2V5dXApPVwib25FbnRlcigkZXZlbnQpXCIgLz5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXJcIj5cclxuICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlclwiPlxyXG4gICAgPHRoZWFkIGNsYXNzPVwidGFibGUtdGhlYWRcIj5cclxuICAgICAgPHRyIGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XHJcbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkTGlzdDsgaW5kZXggYXMgaVwiIGNsYXNzPVwiaGVhZGVyLWNlbGxcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlckFsaWduZWRUb0NlbnRlclxyXG4gICAgICAgICAgICAgID8gaSA9PSB0YWJsZUhlYWRMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgID8gJ3RleHRhbGlnbi1yaWdodCdcclxuICAgICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1sZWZ0J1xyXG4gICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1jZW50ZXInXHJcbiAgICAgICAgICBcIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGhCeUlkKGhlYWRlciwgaSlcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInRhYmxlRGF0YS5tZXRhRGF0YS5oZWFkZXJDb2xvclwiXHJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFibGVEYXRhLm1ldGFEYXRhLmhlYWRlclRleHRDb2xvclwiIChjbGljayk9XCJzb3J0QnlDb2x1bW4oaGVhZGVyKVwiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAoIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0ZpcnN0Q29sdW1uSGVhZGVySGlkZGVuICYmIGkgPT0gMCkgfHwgaSA+IDBcclxuICAgICAgICAgICAgXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclNvcnRIaWRkZW5cclxuICAgICAgICAgICAgICAgID8gJ2N1cnNvci1wb2ludGVyJ1xyXG4gICAgICAgICAgICAgICAgOiAnY3Vyc29yLWRlZmF1bHQnXHJcbiAgICAgICAgICAgIFwiPnt7IGhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxpICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKCFpc1VzZXJTb3J0IHx8IGNoZWNrSWZDb2x1bW5DdXJyZW50bHlCZWluZ1NvcnRlZChoZWFkZXIpKSAmJlxyXG4gICAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJTb3J0SGlkZGVuXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwic29ydC1pY29ucyBmYVwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICFpc1VzZXJTb3J0XHJcbiAgICAgICAgICAgICAgICA/ICdmYS1zb3J0J1xyXG4gICAgICAgICAgICAgICAgOiBzb3J0RGlyZWN0aW9uID09ICdhc2MnXHJcbiAgICAgICAgICAgICAgICA/ICdmYS1zb3J0LWFzYydcclxuICAgICAgICAgICAgICAgIDogJ2ZhLXNvcnQtZGVzYydcclxuICAgICAgICAgICAgXCI+PC9pPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIGN1cnJlbnRMaXN0XCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICB0YWJsZURhdGE/LmhpZ2hsaWdodGVkVGV4dHM/LmluY2x1ZGVzKHN0b3JlW3RhYmxlSGVhZExpc3RbMF1dKVxyXG4gICAgICAgICAgICA/ICdmb250LXdlaWdodC1ib2xkJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgXCI+XHJcbiAgICAgICAgPHRkIChjbGljayk9XCJoYW5kbGVDbGljayhzdG9yZSlcIiBjbGFzcz1cInRhYmxlLWNlbGxcIiAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRhYmxlSGVhZExpc3Q7IGluZGV4IGFzIGlcIlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNBbGxBbGlnbmVkVG9SaWdodFxyXG4gICAgICAgICAgICAgID8gaSA9PSB0YWJsZUhlYWRMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgID8gJ3RleHRhbGlnbi1yaWdodCBsYXN0LWNvbHVtbi1jb2xvcidcclxuICAgICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1sZWZ0J1xyXG4gICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1yaWdodCdcclxuICAgICAgICAgIFwiIFtzdHlsZS5jdXJzb3JdPVwiXHJcbiAgICAgICAgICAgIHRhYmxlRGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcclxuICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgPHNwYW4+e3sgc3RvcmVbaGVhZGVyXSB9fTwvc3Bhbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90Ym9keT5cclxuICA8L3RhYmxlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbUxpc3QgJiYgaXRlbUxpc3QubGVuZ3RoICYmICF0YWJsZURhdGEubWV0YURhdGEuaXNQYWdpbmF0aW9uSGlkZGVuXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJlc3VsdHMtc3VtbWFyeVwiPlxyXG4gICAgU2hvd2luZyA8Yj57eyAoY3VycmVudFBhZ2UgLSAxKSAqIHBhZ2VTaXplICsgMSB9fTwvYj4gdG9cclxuICAgIDxiPnt7IGN1cnJlbnRQYWdlICogcGFnZVNpemUgPiB0b3RhbEl0ZW1zID8gdG90YWxJdGVtcyA6IGN1cnJlbnRQYWdlICogcGFnZVNpemUgfX08L2I+XHJcbiAgICBvZiA8Yj57eyB0b3RhbEl0ZW1zIH19PC9iPiBlbnRyaWVzXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZ2ItcGFnaW5hdGlvbiBcclxuICAgIFtjb2xsZWN0aW9uU2l6ZV09XCJ0b3RhbEl0ZW1zXCIgXHJcbiAgICBbKHBhZ2UpXT1cImN1cnJlbnRQYWdlXCIgXHJcbiAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIiBcclxuICAgIFttYXhTaXplXT1cIjVcIlxyXG4gICAgW3JvdGF0ZV09XCJ0cnVlXCIgXHJcbiAgICBbYm91bmRhcnlMaW5rc109XCJ0cnVlXCIgXHJcbiAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2luYXRpb25DaGFuZ2UoKVwiIFxyXG4gICAgY2xhc3M9XCJzYi1wYWdpbmF0aW9uXCI+XHJcbiAgPC9uZ2ItcGFnaW5hdGlvbj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImdvLXRvLXBhZ2VcIj5cclxuICAgIDxsYWJlbCBmb3I9XCJnb3RvUGFnZUlucHV0XCI+R28gdG8gcGFnZTwvbGFiZWw+XHJcbiAgICA8aW5wdXQgXHJcbiAgICAgIGlkPVwiZ290b1BhZ2VJbnB1dFwiIFxyXG4gICAgICB0eXBlPVwibnVtYmVyXCIgXHJcbiAgICAgIFttaW5dPVwiMVwiIFxyXG4gICAgICBbbWF4XT1cInRvdGFsUGFnZXNcIiBcclxuICAgICAgW25nTW9kZWxdPVwiZ29Ub1BhZ2VWYWx1ZVwiXHJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImdvVG9QYWdlVmFsdWUgPSAkZXZlbnQ7IGdvVG9QYWdlKClcIlxyXG4gICAgICAoa2V5cHJlc3MpPVwidmFsaWRhdGVOdW1iZXJJbnB1dCgkZXZlbnQpXCI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuXHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgPGxpYi1oZWFkZXItYWx0IFt0aXRsZV09XCJ0YWJsZURhdGEubWV0YURhdGEudGl0bGVcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj48L2xpYi1oZWFkZXItYWx0PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aW5wdXQgdHlwZT1cInRleHRcIiAqbmdJZj1cIiF0YWJsZURhdGEubWV0YURhdGEuaXNTZWFyY2hIaWRkZW5cIlxyXG4gICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWlucHV0IG1lZGl1bS1mb250LXNpemUgdGV4dGJveC1heC1jb21tb25cIiBpZD1cImV4YW1wbGVJbnB1dEVtYWlsMVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICBwbGFjZWhvbGRlcj1cIiAgU2VhcmNoICBcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWxIZWxwXCIgKGtleXVwKT1cIm9uRW50ZXIoJGV2ZW50KVwiIC8+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInBvcHVwLWJvZHktZm9yLXNjcm9sbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgYm9yZGVyXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIGFsaWduLW1pZGRsZSBtYi0wXCI+XHJcbiAgICAgICAgPHRoZWFkIGNsYXNzPVwidGFibGUtZGFya1wiPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRhYmxlSGVhZExpc3Q7IGluZGV4IGFzIGlcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlckFsaWduZWRUb0NlbnRlclxyXG4gICAgICAgICAgICAgID8gaSA9PSB0YWJsZUhlYWRMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgID8gJ3RleHRhbGlnbi1yaWdodCdcclxuICAgICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1sZWZ0J1xyXG4gICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1jZW50ZXInXHJcbiAgICAgICAgICBcIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGhCeUlkKGhlYWRlciwgaSlcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInRhYmxlRGF0YS5tZXRhRGF0YS5oZWFkZXJDb2xvclwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYmxlRGF0YS5tZXRhRGF0YS5oZWFkZXJUZXh0Q29sb3JcIiAoY2xpY2spPVwic29ydEJ5Q29sdW1uKGhlYWRlcilcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICghdGFibGVEYXRhLm1ldGFEYXRhLmlzRmlyc3RDb2x1bW5IZWFkZXJIaWRkZW4gJiYgaSA9PSAwKSB8fCBpID4gMFxyXG4gICAgICAgICAgICBcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyU29ydEhpZGRlblxyXG4gICAgICAgICAgICAgICAgPyAnY3Vyc29yLXBvaW50ZXInXHJcbiAgICAgICAgICAgICAgICA6ICdjdXJzb3ItZGVmYXVsdCdcclxuICAgICAgICAgICAgXCI+e3sgaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKCFpc1VzZXJTb3J0IHx8IGNoZWNrSWZDb2x1bW5DdXJyZW50bHlCZWluZ1NvcnRlZChoZWFkZXIpKSAmJlxyXG4gICAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJTb3J0SGlkZGVuXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwic29ydC1pY29ucyBmYVwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICFpc1VzZXJTb3J0XHJcbiAgICAgICAgICAgICAgICA/ICdmYS1zb3J0J1xyXG4gICAgICAgICAgICAgICAgOiBzb3J0RGlyZWN0aW9uID09ICdhc2MnXHJcbiAgICAgICAgICAgICAgICA/ICdmYS1zb3J0LWFzYydcclxuICAgICAgICAgICAgICAgIDogJ2ZhLXNvcnQtZGVzYydcclxuICAgICAgICAgICAgXCI+PC9pPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIGN1cnJlbnRMaXN0XCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICB0YWJsZURhdGE/LmhpZ2hsaWdodGVkVGV4dHM/LmluY2x1ZGVzKHN0b3JlW3RhYmxlSGVhZExpc3RbMF1dKVxyXG4gICAgICAgICAgICA/ICdmb250LXdlaWdodC1ib2xkJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgXCI+XHJcbiAgICAgICAgICAgIDx0ZCAoY2xpY2spPVwiaGFuZGxlQ2xpY2soc3RvcmUpXCIgY2xhc3M9XCJ0YWJsZS1jZWxsXCIgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRMaXN0OyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGhCeUlkKGhlYWRlciwgaSlcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0FsbEFsaWduZWRUb1JpZ2h0XHJcbiAgICAgICAgICAgICAgPyBpID09IHRhYmxlSGVhZExpc3QubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgPyAndGV4dGFsaWduLXJpZ2h0IGxhc3QtY29sdW1uLWNvbG9yJ1xyXG4gICAgICAgICAgICAgICAgOiAndGV4dGFsaWduLWxlZnQnXHJcbiAgICAgICAgICAgICAgOiAndGV4dGFsaWduLXJpZ2h0J1xyXG4gICAgICAgICAgXCIgW3N0eWxlLmN1cnNvcl09XCJcclxuICAgICAgICAgICAgdGFibGVEYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1xyXG4gICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgc3RvcmVbaGVhZGVyXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWJhciBtdC0wXCI+XHJcbiAgICAgIDxzcGFuPkdvIFRvPC9zcGFuPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwicGFnZS1pbnB1dFwiIG1pbj1cIjFcIiBbbWF4XT1cInRvdGFsUGFnZXNcIiAoa2V5dXAuZW50ZXIpPVwiZ29Ub1NwZWNpZmljUGFnZSgpXCIgWyhuZ01vZGVsKV09XCJnb1RvUGFnZU51bWJlclwiPlxyXG5cclxuICAgICAgPHNwYW4+IHt7IChjdXJyZW50TGlzdC5sZW5ndGggPiAwID8gKChjdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemUgKyAxKSA6IDApIH19IC1cclxuICAgICAgICB7eyAoKGN1cnJlbnRQYWdlIC0gMSkgKiBwYWdlU2l6ZSArIGN1cnJlbnRMaXN0Lmxlbmd0aCkgfX0gb2ZcclxuICAgICAgICB7eyB0b3RhbEl0ZW1zIHwgbnVtYmVyIH19PC9zcGFuPlxyXG5cclxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIiAoY2xpY2spPVwiZ29Ub0ZpcnN0UGFnZSgpXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJ0blwiIHRpdGxlPVwiRmlyc3QgUGFnZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2hldnJvbi1kb3VibGUtbGVmdFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCIgKGNsaWNrKT1cImdvVG9QcmV2aW91c1BhZ2UoKVwiIGNsYXNzPVwicGFnaW5hdGlvbi1idG5cIiB0aXRsZT1cIlByZXZpb3VzIFBhZ2VcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZXZyb24tbGVmdFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzXCIgKGNsaWNrKT1cImdvVG9OZXh0UGFnZSgpXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJ0blwiIHRpdGxlPVwiTmV4dCBQYWdlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXNcIiAoY2xpY2spPVwiZ29Ub0xhc3RQYWdlKClcIiBjbGFzcz1cInBhZ2luYXRpb24tYnRuXCIgdGl0bGU9XCJMYXN0IFBhZ2VcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZXZyb24tZG91YmxlLXJpZ2h0XCI+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXgtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2F4LXRhYmxlL2F4LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9heC10YWJsZS9heC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU8xQyxNQUFNLE9BQU8sZ0JBQWdCO0lBMEQzQjtRQXZEVSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBUzVCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBS3pCOztXQUVHO1FBQ0gsZ0JBQVcsR0FBUSxDQUFDLENBQUM7UUFDckI7O1dBRUc7UUFDSCxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBS25COztXQUVHO1FBQ0gsa0JBQWEsR0FBUSxLQUFLLENBQUM7UUFDM0I7O1dBRUc7UUFDSCxlQUFVLEdBQVEsRUFBRSxDQUFDO1FBS3JCOztXQUVHO1FBQ0gsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUNyQix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFFN0IseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBRS9CLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsbUJBQWMsR0FBVyxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7UUFFbEYsa0RBQWtEO1FBQ2xELGdCQUFXLEdBQWEsRUFBRSxDQUFDO0lBRVgsQ0FBQztJQUVqQixRQUFR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NEJBQ2YsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFNO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7K0dBeFNVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHFMQ1I3QixrdVFBNkxNOzs0RkRyTE8sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGNBQWM7d0RBS2YsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1heC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F4LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9heC10YWJsZS5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEF4VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHRhYmxlRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaXNVc2VyU29ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB0YWJsZUhlYWRMaXN0OiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3Qgb2Ygc3RvcmVzIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0ZWQgc3RhdGVcclxuICAgKi9cclxuICBpdGVtTGlzdDogYW55O1xyXG5cclxuICBpdGVtc1BlclBhZ2U6IG51bWJlciA9IDA7XHJcbiAgLyoqXHJcbiAgICogVG90YWwgbnVtYmVyIG9mIHN0b3JlcyBpbiBzZWxlY3RlZCBzdGF0ZVxyXG4gICAqL1xyXG4gIHRvdGFsSXRlbXM6IGFueTtcclxuICAvKipcclxuICAgKiBDdXJyZW50IHBhZ2UgZGlzcGxheWVkIGluIHBhZ2luYXRpb25cclxuICAgKi9cclxuICBjdXJyZW50UGFnZTogYW55ID0gMTtcclxuICAvKipcclxuICAgKiBOdW1iZXIgb2Ygc3RvcmVzIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2VcclxuICAgKi9cclxuICBwYWdlU2l6ZTogYW55ID0gMTA7XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgcGFnZSBzdG9yZSBsaXN0XHJcbiAgICovXHJcbiAgY3VycmVudExpc3Q6IGFueTtcclxuICAvKipcclxuICAgKiBTb3J0IGRpcmVjdGlvbiBvZiBzZWxlY3RlZCBjb2x1bW4gIGluIHRoZSB0YWJsZVxyXG4gICAqL1xyXG4gIHNvcnREaXJlY3Rpb246IGFueSA9ICdhc2MnO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIGNvbHVtbiBmb3Igc29ydGluZ1xyXG4gICAqL1xyXG4gIHNvcnRDb2x1bW46IGFueSA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdG9yIGZvciBsaXN0ZW5pbmcgdG8gdGhlIGNoYW5nZXMgb2Ygc2VhcmNoIHRleHQgZW50ZXJlZCBpbiB0aGUgaGVhZGVyXHJcbiAgICovXHJcbiAgc2VhcmNoVGV4dEZlYXR1cmUkOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogTWFzdGVyIHN0b3JlIGxpc3QgZm9yIHRoZSBzZWxlY3RlZCBzdGF0ZVxyXG4gICAqL1xyXG4gIG1hc3Rlckxpc3Q6IGFueSA9IFtdO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcbiAgdG90YWxQYWdlczogbnVtYmVyID0gMTtcclxuICBnb1RvUGFnZU51bWJlcjogbnVtYmVyID0gMTsgLy8gRml4ZWQ6IHJlbmFtZWQgZnJvbSBnb1RvUGFnZVZhbHVlIHRvIG1hdGNoIHRlbXBsYXRlXHJcblxyXG4gIC8vIEFkZCBwYWdlc1RvU2hvdyBwcm9wZXJ0eSBmb3IgcGFnaW5hdGlvbiBkaXNwbGF5XHJcbiAgcGFnZXNUb1Nob3c6IG51bWJlcltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHRoaXMudGFibGVIZWFkTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMudGFibGVEYXRhLmRhdGFbMF0pO1xyXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2ldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXN0ZXJMaXN0ID0gWy4uLnNlbGYudGFibGVEYXRhLmRhdGFdO1xyXG4gICAgdGhpcy5pdGVtTGlzdCA9IFsuLi50aGlzLm1hc3Rlckxpc3RdO1xyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtTGlzdC5sZW5ndGg7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlc1RvU2hvdygpOyAvLyBHZW5lcmF0ZSBwYWdlcyB0byBzaG93XHJcblxyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhLm1ldGFEYXRhLmlzUGFnaW5hdGlvbkhpZGRlbikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRMaXN0ID0gdGhpcy5pdGVtTGlzdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZFBhZ2UoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclZpc2libGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMudGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGxvYWRQYWdlKCkge1xyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMuY3VycmVudExpc3QgPSB0aGlzLml0ZW1MaXN0LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRvdGFsUGFnZXMoKSB7XHJcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmdvVG9QYWdlTnVtYmVyID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICB9XHJcbiAgcHJldmVudE5lZ2F0aXZlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gQmxvY2sgY2hhcmFjdGVyczogLSwgKywgZSAoYWxsIGludmFsaWQgZm9yIHBhZ2UgbnVtYmVyKVxyXG4gIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICcrJyB8fCBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2UnKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxufVxyXG5cclxuICAvLyBHZW5lcmF0ZSBhcnJheSBvZiBwYWdlIG51bWJlcnMgdG8gc2hvdyBpbiBwYWdpbmF0aW9uXHJcbiAgZ2VuZXJhdGVQYWdlc1RvU2hvdygpIHtcclxuICAgIHRoaXMucGFnZXNUb1Nob3cgPSBbXTtcclxuICAgIGNvbnN0IG1heFBhZ2VzVG9TaG93ID0gNTtcclxuICAgIGxldCBzdGFydFBhZ2UgPSBNYXRoLm1heCgxLCB0aGlzLmN1cnJlbnRQYWdlIC0gTWF0aC5mbG9vcihtYXhQYWdlc1RvU2hvdyAvIDIpKTtcclxuICAgIGxldCBlbmRQYWdlID0gTWF0aC5taW4odGhpcy50b3RhbFBhZ2VzLCBzdGFydFBhZ2UgKyBtYXhQYWdlc1RvU2hvdyAtIDEpO1xyXG4gICAgXHJcbiAgICAvLyBBZGp1c3Qgc3RhcnQgcGFnZSBpZiB3ZSdyZSBuZWFyIHRoZSBlbmRcclxuICAgIGlmIChlbmRQYWdlIC0gc3RhcnRQYWdlICsgMSA8IG1heFBhZ2VzVG9TaG93KSB7XHJcbiAgICAgIHN0YXJ0UGFnZSA9IE1hdGgubWF4KDEsIGVuZFBhZ2UgLSBtYXhQYWdlc1RvU2hvdyArIDEpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlOyBpIDw9IGVuZFBhZ2U7IGkrKykge1xyXG4gICAgICB0aGlzLnBhZ2VzVG9TaG93LnB1c2goaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBhZ2luYXRpb25DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmxvYWRQYWdlKCk7XHJcbiAgICB0aGlzLmdvVG9QYWdlTnVtYmVyID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlc1RvU2hvdygpO1xyXG4gIH1cclxuXHJcbiAgLy8gTmF2aWdhdGlvbiBtZXRob2RzIGZvciBwYWdpbmF0aW9uIGJ1dHRvbnNcclxuICBnb1RvRmlyc3RQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb1RvUHJldmlvdXNQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiAxKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UtLTtcclxuICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9OZXh0UGFnZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy50b3RhbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UrKztcclxuICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9MYXN0UGFnZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlICE9PSB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudG90YWxQYWdlcztcclxuICAgICAgdGhpcy5vblBhZ2luYXRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9QYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRoaXMudG90YWxQYWdlcyAmJiBwYWdlICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gICAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRml4ZWQ6IHJlbmFtZWQgbWV0aG9kIHRvIG1hdGNoIHRlbXBsYXRlXHJcbiAgZ29Ub1NwZWNpZmljUGFnZSgpIHtcclxuICAgIGlmICh0aGlzLmdvVG9QYWdlTnVtYmVyID09PSBudWxsIHx8IHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmdvVG9QYWdlTnVtYmVyID0gdGhpcy5jdXJyZW50UGFnZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhZ2VOdW0gPSBwYXJzZUludCh0aGlzLmdvVG9QYWdlTnVtYmVyLnRvU3RyaW5nKCksIDEwKTtcclxuICAgIFxyXG4gICAgaWYgKGlzTmFOKHBhZ2VOdW0pIHx8IHBhZ2VOdW0gPCAxKSB7XHJcbiAgICAgIHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPSAxO1xyXG4gICAgfSBlbHNlIGlmIChwYWdlTnVtID4gdGhpcy50b3RhbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuZ29Ub1BhZ2VOdW1iZXIgPSB0aGlzLnRvdGFsUGFnZXM7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFVwZGF0ZSBjdXJyZW50IHBhZ2UgYW5kIGxvYWQgZGF0YVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuZ29Ub1BhZ2VOdW1iZXI7XHJcbiAgICB0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVOdW1iZXJJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC53aGljaCA/IGV2ZW50LndoaWNoIDogZXZlbnQua2V5Q29kZTtcclxuICAgIGlmIChjaGFyQ29kZSA+IDMxICYmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtblxyXG4gICAqIEBwYXJhbSBpZCAtIGNvbHVtbiBpZFxyXG4gICAqL1xyXG4gIGdldFdpZHRoQnlJZChpZCwgaW5kZXgpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlSGVhZExpc3QubGVuZ3RoID09IDMpIHtcclxuICAgICAgaWYgKGluZGV4ID09IDEpIHJldHVybiAnNjAlJztcclxuICAgICAgZWxzZSByZXR1cm4gJzIwJSc7XHJcbiAgICB9XHJcbiAgICB2YXIgd2lkdGggPSAxMDAgLyB0aGlzLnRhYmxlSGVhZExpc3QubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHdpZHRoICsgJyUnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydHMgdGhlIGNvbHVtbiB0aGF0IGlzIGJlaW5nIHBhc3NlZCBhcyB0aGUgcGFyYW1cclxuICAgKiBAcGFyYW0gaWQgLSBDb2x1bW4gaWRcclxuICAgKi9cclxuICBzb3J0QnlDb2x1bW4oaWQpIHtcclxuICAgIGlmIChpZCA9PT0gJ3ZpZXdEZXRhaWxzJyB8fCB0aGlzLnRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclNvcnRIaWRkZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzVXNlclNvcnQpIHRoaXMuaXNVc2VyU29ydCA9IHRydWU7XHJcbiAgICBpZiAoaWQgIT09IHRoaXMuc29ydENvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bW4gPSBpZDtcclxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJ2FzYyc7IC8vIFJlc2V0IHRvIGFzY2VuZGluZyB3aGVuIGNoYW5naW5nIGNvbHVtbnNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJ2Rlc2MnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9ICdhc2MnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZSh2MSwgdjIpIHtcclxuICAgICAgY29uc3QgbnVtMSA9IHBhcnNlRmxvYXQodjEpO1xyXG4gICAgICBjb25zdCBudW0yID0gcGFyc2VGbG9hdCh2Mik7XHJcbiAgICAgIGlmICghaXNOYU4obnVtMSkgJiYgIWlzTmFOKG51bTIpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bTEgLSBudW0yO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2MSA8IHYyID8gLTEgOiB2MSA+IHYyID8gMSA6IDA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuaXRlbUxpc3Quc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCByZXMgPSBjb21wYXJlKGFbaWRdLCBiW2lkXSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gcmVzIDogLXJlcztcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBSZXNldCB0byBmaXJzdCBwYWdlIGFmdGVyIHNvcnRpbmdcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtTGlzdC5sZW5ndGg7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVQYWdlc1RvU2hvdygpO1xyXG4gICAgdGhpcy5sb2FkUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB3aGV0aGVyIGNvbHVtbiBiZWluZyBwYXNzZWQgYXMgdGhlIHBhcmFtIGlzIGN1cnJlbnRseSBiZWluZyBzb3J0ZWQgb3Igbm90XHJcbiAgICogQHBhcmFtIGlkIGNvbHVtbiBpZFxyXG4gICAqL1xyXG4gIGNoZWNrSWZDb2x1bW5DdXJyZW50bHlCZWluZ1NvcnRlZChpZCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydENvbHVtbiA9PT0gaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzb3J0IGRpcmVjdGlvbiB0aGF0IGlzIGJlaW5nIGN1cnJlbnRseSBzb3J0ZWRcclxuICAgKi9cclxuICBnZXRTb3J0RGlyZWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnYXJyb3ctdXAnIDogJ2Fycm93LWRvd24nO1xyXG4gIH1cclxuXHJcbiAgb25FbnRlcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLml0ZW1MaXN0ID0gdGhpcy5tYXN0ZXJMaXN0O1xyXG4gICAgbGV0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLml0ZW1MaXN0KSB7XHJcbiAgICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtTGlzdCA9IHRoaXMuaXRlbUxpc3QuZmlsdGVyKGZ1bmN0aW9uIG1hdGNoZXMoc3RvcmU6IGFueSkge1xyXG4gICAgICAgICAgbGV0IG1hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICBzZWxmLnRhYmxlSGVhZExpc3QubWFwKGZ1bmN0aW9uICh0YWJsZUhlYWQpIHtcclxuICAgICAgICAgICAgaWYgKHN0b3JlW3RhYmxlSGVhZF0pIHtcclxuICAgICAgICAgICAgICBsZXQgc2VhcmNoYWJsZVN0cmluZyA9IHN0b3JlW3RhYmxlSGVhZF0gKyAnJztcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlU3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmVzZXQgcGFnaW5hdGlvbiBhZnRlciBzZWFyY2hcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbUxpc3QubGVuZ3RoO1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZVBhZ2VzVG9TaG93KCk7XHJcbiAgICAgIHRoaXMubG9hZFBhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG59IiwiPCEtLSA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdCBsaWItZGlzcGxheS1mbGV4IGxpYi1qdXN0aWZ5LWNvbnRlbnQtc3BhY2UtYmV0d2VlblwiPlxyXG4gIDxsaWItaGVhZGVyLWFsdCBbdGl0bGVdPVwidGFibGVEYXRhLm1ldGFEYXRhLnRpdGxlXCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+PC9saWItaGVhZGVyLWFsdD5cclxuICA8aW5wdXQgdHlwZT1cInRleHRcIiAqbmdJZj1cIiF0YWJsZURhdGEubWV0YURhdGEuaXNTZWFyY2hIaWRkZW5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHBhZGRpbmctNSBpbnB1dC1zdHlsZVwiXHJcbiAgICBpZD1cImV4YW1wbGVJbnB1dEVtYWlsMVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwiICBTZWFyY2ggIFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbEhlbHBcIlxyXG4gICAgKGtleXVwKT1cIm9uRW50ZXIoJGV2ZW50KVwiIC8+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCI+XHJcbiAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXJcIj5cclxuICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLXRoZWFkXCI+XHJcbiAgICAgIDx0ciBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRhYmxlSGVhZExpc3Q7IGluZGV4IGFzIGlcIiBjbGFzcz1cImhlYWRlci1jZWxsXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJBbGlnbmVkVG9DZW50ZXJcclxuICAgICAgICAgICAgICA/IGkgPT0gdGFibGVIZWFkTGlzdC5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICA/ICd0ZXh0YWxpZ24tcmlnaHQnXHJcbiAgICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tbGVmdCdcclxuICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tY2VudGVyJ1xyXG4gICAgICAgICAgXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJ0YWJsZURhdGEubWV0YURhdGEuaGVhZGVyQ29sb3JcIlxyXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYmxlRGF0YS5tZXRhRGF0YS5oZWFkZXJUZXh0Q29sb3JcIiAoY2xpY2spPVwic29ydEJ5Q29sdW1uKGhlYWRlcilcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKCF0YWJsZURhdGEubWV0YURhdGEuaXNGaXJzdENvbHVtbkhlYWRlckhpZGRlbiAmJiBpID09IDApIHx8IGkgPiAwXHJcbiAgICAgICAgICAgIFwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJTb3J0SGlkZGVuXHJcbiAgICAgICAgICAgICAgICA/ICdjdXJzb3ItcG9pbnRlcidcclxuICAgICAgICAgICAgICAgIDogJ2N1cnNvci1kZWZhdWx0J1xyXG4gICAgICAgICAgICBcIj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICghaXNVc2VyU29ydCB8fCBjaGVja0lmQ29sdW1uQ3VycmVudGx5QmVpbmdTb3J0ZWQoaGVhZGVyKSkgJiZcclxuICAgICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyU29ydEhpZGRlblxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInNvcnQtaWNvbnMgZmFcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAhaXNVc2VyU29ydFxyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydCdcclxuICAgICAgICAgICAgICAgIDogc29ydERpcmVjdGlvbiA9PSAnYXNjJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydC1hc2MnXHJcbiAgICAgICAgICAgICAgICA6ICdmYS1zb3J0LWRlc2MnXHJcbiAgICAgICAgICAgIFwiPjwvaT5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keSBjbGFzcz1cInRhYmxlLWJvZHlcIj5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBjdXJyZW50TGlzdFwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgdGFibGVEYXRhPy5oaWdobGlnaHRlZFRleHRzPy5pbmNsdWRlcyhzdG9yZVt0YWJsZUhlYWRMaXN0WzBdXSlcclxuICAgICAgICAgICAgPyAnZm9udC13ZWlnaHQtYm9sZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiPlxyXG4gICAgICAgIDx0ZCAoY2xpY2spPVwiaGFuZGxlQ2xpY2soc3RvcmUpXCIgY2xhc3M9XCJ0YWJsZS1jZWxsXCIgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRMaXN0OyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aEJ5SWQoaGVhZGVyLCBpKVwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzQWxsQWxpZ25lZFRvUmlnaHRcclxuICAgICAgICAgICAgICA/IGkgPT0gdGFibGVIZWFkTGlzdC5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICA/ICd0ZXh0YWxpZ24tcmlnaHQgbGFzdC1jb2x1bW4tY29sb3InXHJcbiAgICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tbGVmdCdcclxuICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tcmlnaHQnXHJcbiAgICAgICAgICBcIiBbc3R5bGUuY3Vyc29yXT1cIlxyXG4gICAgICAgICAgICB0YWJsZURhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgICAgICBcIj5cclxuICAgICAgICAgIDxzcGFuPnt7IHN0b3JlW2hlYWRlcl0gfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1jb250YWluZXJcIiAqbmdJZj1cIml0ZW1MaXN0ICYmIGl0ZW1MaXN0Lmxlbmd0aCAmJiAhdGFibGVEYXRhLm1ldGFEYXRhLmlzUGFnaW5hdGlvbkhpZGRlblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyZXN1bHRzLXN1bW1hcnlcIj5cclxuICAgIFNob3dpbmcgPGI+e3sgKGN1cnJlbnRQYWdlIC0gMSkgKiBwYWdlU2l6ZSArIDEgfX08L2I+IHRvXHJcbiAgICA8Yj57eyBjdXJyZW50UGFnZSAqIHBhZ2VTaXplID4gdG90YWxJdGVtcyA/IHRvdGFsSXRlbXMgOiBjdXJyZW50UGFnZSAqIHBhZ2VTaXplIH19PC9iPlxyXG4gICAgb2YgPGI+e3sgdG90YWxJdGVtcyB9fTwvYj4gZW50cmllc1xyXG4gIDwvZGl2PlxyXG5cclxuICA8bmdiLXBhZ2luYXRpb24gXHJcbiAgICBbY29sbGVjdGlvblNpemVdPVwidG90YWxJdGVtc1wiIFxyXG4gICAgWyhwYWdlKV09XCJjdXJyZW50UGFnZVwiIFxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgXHJcbiAgICBbbWF4U2l6ZV09XCI1XCJcclxuICAgIFtyb3RhdGVdPVwidHJ1ZVwiIFxyXG4gICAgW2JvdW5kYXJ5TGlua3NdPVwidHJ1ZVwiIFxyXG4gICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdpbmF0aW9uQ2hhbmdlKClcIiBcclxuICAgIGNsYXNzPVwic2ItcGFnaW5hdGlvblwiPlxyXG4gIDwvbmdiLXBhZ2luYXRpb24+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJnby10by1wYWdlXCI+XHJcbiAgICA8bGFiZWwgZm9yPVwiZ290b1BhZ2VJbnB1dFwiPkdvIHRvIHBhZ2U8L2xhYmVsPlxyXG4gICAgPGlucHV0IFxyXG4gICAgICBpZD1cImdvdG9QYWdlSW5wdXRcIiBcclxuICAgICAgdHlwZT1cIm51bWJlclwiIFxyXG4gICAgICBbbWluXT1cIjFcIiBcclxuICAgICAgW21heF09XCJ0b3RhbFBhZ2VzXCIgXHJcbiAgICAgIFtuZ01vZGVsXT1cImdvVG9QYWdlVmFsdWVcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJnb1RvUGFnZVZhbHVlID0gJGV2ZW50OyBnb1RvUGFnZSgpXCJcclxuICAgICAgKGtleXByZXNzKT1cInZhbGlkYXRlTnVtYmVySW5wdXQoJGV2ZW50KVwiPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcblxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgIDxsaWItaGVhZGVyLWFsdCBbdGl0bGVdPVwidGFibGVEYXRhLm1ldGFEYXRhLnRpdGxlXCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+PC9saWItaGVhZGVyLWFsdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKm5nSWY9XCIhdGFibGVEYXRhLm1ldGFEYXRhLmlzU2VhcmNoSGlkZGVuXCJcclxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1pbnB1dCBtZWRpdW0tZm9udC1zaXplIHRleHRib3gtYXgtY29tbW9uXCIgaWQ9XCJleGFtcGxlSW5wdXRFbWFpbDFcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCIgIFNlYXJjaCAgXCIgYXJpYS1kZXNjcmliZWRieT1cImVtYWlsSGVscFwiIChrZXl1cCk9XCJvbkVudGVyKCRldmVudClcIiAvPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJwb3B1cC1ib2R5LWZvci1zY3JvbGxcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlIGJvcmRlclwiPlxyXG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciBhbGlnbi1taWRkbGUgbWItMFwiPlxyXG4gICAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWRhcmtcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRMaXN0OyBpbmRleCBhcyBpXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNIZWFkZXJBbGlnbmVkVG9DZW50ZXJcclxuICAgICAgICAgICAgICA/IGkgPT0gdGFibGVIZWFkTGlzdC5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICA/ICd0ZXh0YWxpZ24tcmlnaHQnXHJcbiAgICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tbGVmdCdcclxuICAgICAgICAgICAgICA6ICd0ZXh0YWxpZ24tY2VudGVyJ1xyXG4gICAgICAgICAgXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJ0YWJsZURhdGEubWV0YURhdGEuaGVhZGVyQ29sb3JcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJsZURhdGEubWV0YURhdGEuaGVhZGVyVGV4dENvbG9yXCIgKGNsaWNrKT1cInNvcnRCeUNvbHVtbihoZWFkZXIpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAoIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0ZpcnN0Q29sdW1uSGVhZGVySGlkZGVuICYmIGkgPT0gMCkgfHwgaSA+IDBcclxuICAgICAgICAgICAgXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgIXRhYmxlRGF0YS5tZXRhRGF0YS5pc0hlYWRlclNvcnRIaWRkZW5cclxuICAgICAgICAgICAgICAgID8gJ2N1cnNvci1wb2ludGVyJ1xyXG4gICAgICAgICAgICAgICAgOiAnY3Vyc29yLWRlZmF1bHQnXHJcbiAgICAgICAgICAgIFwiPnt7IGhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8aSAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICghaXNVc2VyU29ydCB8fCBjaGVja0lmQ29sdW1uQ3VycmVudGx5QmVpbmdTb3J0ZWQoaGVhZGVyKSkgJiZcclxuICAgICAgICAgICAgICAhdGFibGVEYXRhLm1ldGFEYXRhLmlzSGVhZGVyU29ydEhpZGRlblxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInNvcnQtaWNvbnMgZmFcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAhaXNVc2VyU29ydFxyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydCdcclxuICAgICAgICAgICAgICAgIDogc29ydERpcmVjdGlvbiA9PSAnYXNjJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmEtc29ydC1hc2MnXHJcbiAgICAgICAgICAgICAgICA6ICdmYS1zb3J0LWRlc2MnXHJcbiAgICAgICAgICAgIFwiPjwvaT5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuXHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBjdXJyZW50TGlzdFwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgdGFibGVEYXRhPy5oaWdobGlnaHRlZFRleHRzPy5pbmNsdWRlcyhzdG9yZVt0YWJsZUhlYWRMaXN0WzBdXSlcclxuICAgICAgICAgICAgPyAnZm9udC13ZWlnaHQtYm9sZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8dGQgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHN0b3JlKVwiIGNsYXNzPVwidGFibGUtY2VsbFwiICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkTGlzdDsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoQnlJZChoZWFkZXIsIGkpXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICF0YWJsZURhdGEubWV0YURhdGEuaXNBbGxBbGlnbmVkVG9SaWdodFxyXG4gICAgICAgICAgICAgID8gaSA9PSB0YWJsZUhlYWRMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgID8gJ3RleHRhbGlnbi1yaWdodCBsYXN0LWNvbHVtbi1jb2xvcidcclxuICAgICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1sZWZ0J1xyXG4gICAgICAgICAgICAgIDogJ3RleHRhbGlnbi1yaWdodCdcclxuICAgICAgICAgIFwiIFtzdHlsZS5jdXJzb3JdPVwiXHJcbiAgICAgICAgICAgIHRhYmxlRGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcclxuICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHN0b3JlW2hlYWRlcl0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1iYXIgbXQtMFwiPlxyXG4gICAgICA8c3Bhbj5HbyBUbzwvc3Bhbj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInBhZ2UtaW5wdXRcIiBtaW49XCIxXCIgW21heF09XCJ0b3RhbFBhZ2VzXCIgKGtleXVwLmVudGVyKT1cImdvVG9TcGVjaWZpY1BhZ2UoKVwiIFsobmdNb2RlbCldPVwiZ29Ub1BhZ2VOdW1iZXJcIlxyXG4gICAgICAgIChrZXlwcmVzcyk9XCJwcmV2ZW50TmVnYXRpdmUoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgIDxzcGFuPiB7eyAoY3VycmVudExpc3QubGVuZ3RoID4gMCA/ICgoY3VycmVudFBhZ2UgLSAxKSAqIHBhZ2VTaXplICsgMSkgOiAwKSB9fSAtXHJcbiAgICAgICAge3sgKChjdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemUgKyBjdXJyZW50TGlzdC5sZW5ndGgpIH19IG9mXHJcbiAgICAgICAge3sgdG90YWxJdGVtcyB8IG51bWJlciB9fTwvc3Bhbj5cclxuXHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCIgKGNsaWNrKT1cImdvVG9GaXJzdFBhZ2UoKVwiIGNsYXNzPVwicGFnaW5hdGlvbi1idG5cIiB0aXRsZT1cIkZpcnN0IFBhZ2VcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZXZyb24tZG91YmxlLWxlZnRcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiIChjbGljayk9XCJnb1RvUHJldmlvdXNQYWdlKClcIiBjbGFzcz1cInBhZ2luYXRpb24tYnRuXCIgdGl0bGU9XCJQcmV2aW91cyBQYWdlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWxlZnRcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlc1wiIChjbGljayk9XCJnb1RvTmV4dFBhZ2UoKVwiIGNsYXNzPVwicGFnaW5hdGlvbi1idG5cIiB0aXRsZT1cIk5leHQgUGFnZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2hldnJvbi1yaWdodFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzXCIgKGNsaWNrKT1cImdvVG9MYXN0UGFnZSgpXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJ0blwiIHRpdGxlPVwiTGFzdCBQYWdlXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWRvdWJsZS1yaWdodFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==