ax-common-ui-lib 1.0.1-beta.34.6-testing01s → 1.0.1-beta.34.6-testing02
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.
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.mjs +6 -6
- package/fesm2015/ax-common-ui-lib.mjs +5 -5
- package/fesm2015/ax-common-ui-lib.mjs.map +1 -1
- package/fesm2020/ax-common-ui-lib.mjs +5 -5
- package/fesm2020/ax-common-ui-lib.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -59,12 +59,12 @@ function TabularComponent_button_6_Template(rf, ctx) { if (rf & 1) {
|
|
|
59
59
|
} }
|
|
60
60
|
function TabularComponent_p_14_Template(rf, ctx) { if (rf & 1) {
|
|
61
61
|
i0.ɵɵelementStart(0, "p", 31);
|
|
62
|
-
i0.ɵɵtext(1, "Please provide a valid email ID");
|
|
62
|
+
i0.ɵɵtext(1, " Please provide a valid email ID ");
|
|
63
63
|
i0.ɵɵelementEnd();
|
|
64
64
|
} }
|
|
65
65
|
function TabularComponent_p_15_Template(rf, ctx) { if (rf & 1) {
|
|
66
66
|
i0.ɵɵelementStart(0, "p", 32);
|
|
67
|
-
i0.ɵɵtext(1, "Export is in progress. You will receive the report on your email once completed.");
|
|
67
|
+
i0.ɵɵtext(1, " Export is in progress. You will receive the report on your email once completed. ");
|
|
68
68
|
i0.ɵɵelementEnd();
|
|
69
69
|
} }
|
|
70
70
|
const _c2 = function (a0) { return { "dashboard-tabular-filter": a0 }; };
|
|
@@ -636,7 +636,7 @@ TabularComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabularCom
|
|
|
636
636
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contextMenu = _t.first);
|
|
637
637
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.removeFromDashboardMenu = _t.first);
|
|
638
638
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.drillThroughTrigger = _t.first);
|
|
639
|
-
} }, inputs: { page: "page", tabularReport: "tabularReport", isEditable: "isEditable", userEmail: "userEmail", x1ImageMediaUrl: "x1ImageMediaUrl", screenType: "screenType", drillThroughParentType: "drillThroughParentType", drillThroughFilterInput: "drillThroughFilterInput", x1MediaUrl: "x1MediaUrl", appVersionId: "appVersionId" }, outputs: { sendExcelReportEvent: "sendExcelReportEvent" }, features: [i0.ɵɵNgOnChangesFeature], decls: 45, vars: 19, consts: [[1, "h-full", "min-h-full", "max-h-full", 3, "contextmenu"], [1, "row", 2, "flex-
|
|
639
|
+
} }, inputs: { page: "page", tabularReport: "tabularReport", isEditable: "isEditable", userEmail: "userEmail", x1ImageMediaUrl: "x1ImageMediaUrl", screenType: "screenType", drillThroughParentType: "drillThroughParentType", drillThroughFilterInput: "drillThroughFilterInput", x1MediaUrl: "x1MediaUrl", appVersionId: "appVersionId" }, outputs: { sendExcelReportEvent: "sendExcelReportEvent" }, features: [i0.ɵɵNgOnChangesFeature], decls: 45, vars: 19, consts: [[1, "h-full", "min-h-full", "max-h-full", 3, "contextmenu"], [1, "row", 2, "display", "flex", "justify-content", "space-between", "align-items", "center", "flex-wrap", "nowrap"], [1, "col-10"], [3, "color", "font-size", "font-family", "font-weight", "font-style", "text-decoration", "text-align", "padding", 4, "ngIf"], [1, "col-2", 2, "text-align", "right"], ["class", "export-btn icon-btn", "mat-button", "", 3, "matMenuTriggerFor", "click", 4, "ngIf"], ["xPosition", "before"], ["beforeMenu", "matMenu"], [1, "send-excel-report-form", 3, "click"], [3, "formGroup"], ["mat-menu-item", "", "type", "text", "formControlName", "email", 1, "report-xslx-email", 3, "ngModelChange"], ["class", "email-send-email-error", 4, "ngIf"], ["class", "email-send-notification", 4, "ngIf"], [1, "send-excel-report-form-btn"], ["mat-menu-item", "", 1, "cancel-btn", "btn", "text-white", 3, "click"], ["mat-menu-item", "", 1, "send-btn", "btn", 3, "disabled", "click"], ["class", "filter-div px-3 h-11", 3, "ngClass", 4, "ngIf"], ["class", "no-column-drop-here", 4, "ngIf"], ["class", "drillthrough-menu-trigger", 3, "left", "top", "matMenuTriggerFor", 4, "ngIf"], ["contextMenu", "matMenu"], ["id", "table-menu"], ["matMenuContent", ""], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "parentRef", "reportId", "appVersionId", "x1MediaUrl", 4, "ngIf"], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "reportId", "parentRef", 4, "ngIf"], [4, "ngIf"], [1, "drillthrough-menu-trigger", 3, "matMenuTriggerFor"], ["drillThorughMenuTrigger", ""], ["drillThroughMenu", "matMenu"], ["drillThroughPages", "matMenu"], ["mat-button", "", 1, "export-btn", "icon-btn", 3, "matMenuTriggerFor", "click"], ["matTooltip", "Export Data", "svgIcon", "axo_export"], [1, "email-send-email-error"], [1, "email-send-notification"], [1, "filter-div", "px-3", "h-11", 3, "ngClass"], ["class", "tabular-chart-filter", 3, "ngClass", 4, "ngIf"], [1, "tabular-chart-filter", 3, "ngClass"], [3, "tabularReport", "filters", "categories", "reportId", "screenType", "dataModel", "isEditable", "appVersion", "filterSourceElementType", "applyFilterEvent"], [1, "no-column-drop-here"], [1, "text-center"], [1, "table-view-icon"], [1, "font-size", "m-0", "no-column-text"], ["removeFromDashboardMenu", ""], ["mat-menu-item", "", 3, "click"], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "parentRef", "reportId", "appVersionId", "x1MediaUrl"], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "reportId", "parentRef"], ["class", "flex align-items deatil-group-table-paginator", 4, "ngIf"], [1, "flex", "align-items", "deatil-group-table-paginator"], ["aria-label", "Select page", 1, "mat-paginator", "flex", "justify-end", "w-full", 3, "disabled", "length", "pageSize", "pageIndex", "pageSizeOptions", "page"], [1, "tabular-pagination-ghost-loader", 3, "elementType"], ["mat-menu-item", "", 3, "matMenuTriggerFor"], ["mat-menu-item", "", 3, "click", 4, "ngIf"], [4, "ngFor", "ngForOf"]], template: function TabularComponent_Template(rf, ctx) { if (rf & 1) {
|
|
640
640
|
i0.ɵɵelementStart(0, "div", 0);
|
|
641
641
|
i0.ɵɵlistener("contextmenu", function TabularComponent_Template_div_contextmenu_0_listener($event) { return ctx.onContextMenu($event); });
|
|
642
642
|
i0.ɵɵelementStart(1, "div", 1);
|
|
@@ -665,7 +665,7 @@ TabularComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabularCom
|
|
|
665
665
|
i0.ɵɵelementEnd();
|
|
666
666
|
i0.ɵɵelementStart(19, "button", 15);
|
|
667
667
|
i0.ɵɵlistener("click", function TabularComponent_Template_button_click_19_listener() { return ctx.sendEmail(); });
|
|
668
|
-
i0.ɵɵtext(20, "Export ");
|
|
668
|
+
i0.ɵɵtext(20, " Export ");
|
|
669
669
|
i0.ɵɵelementStart(21, "mat-icon");
|
|
670
670
|
i0.ɵɵtext(22, "send");
|
|
671
671
|
i0.ɵɵelementEnd();
|
|
@@ -738,7 +738,7 @@ TabularComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabularCom
|
|
|
738
738
|
} }, styles: ["tabular[_ngcontent-%COMP%]{display:block;height:100%}table[_ngcontent-%COMP%]{width:auto;height:auto}shadow[_ngcontent-%COMP%] .tbody[_ngcontent-%COMP%]{box-shadow:2px 2px}th[_ngcontent-%COMP%]{background-color:#f2f8ff}.down-arrow[_ngcontent-%COMP%]{top:3px;min-height:13px;max-height:14px;position:relative}.aggregate-fun[_ngcontent-%COMP%]{padding-left:10px;font-size:12px}.mat-menu-item[_ngcontent-%COMP%]{background:transparent;color:#1e293b;font-size:12px}.export-btn[_ngcontent-%COMP%]{right:1rem;cursor:pointer;float:right;top:.2rem;position:sticky;left:0;display:flex;align-items:center;justify-content:center}.export-btn[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{min-height:21px!important}.filter-div[_ngcontent-%COMP%]{position:sticky;top:0;left:0;right:0;background:#ffffff;height:3.7rem!important;width:100%;min-width:100%;max-width:100%;align-items:center}.filter-div[_ngcontent-%COMP%] .tabular-chart-filter[_ngcontent-%COMP%]{display:inline-block;width:calc(100% - 40px);max-width:calc(100% - 40px);min-width:calc(100% - 40px)}.filter-div[_ngcontent-%COMP%] .dashboard-tabular-filter[_ngcontent-%COMP%]{width:calc(100% - 40px)}.send-excel-report-form[_ngcontent-%COMP%]{padding:8px 18px;height:auto;background-color:#fff!important}.send-excel-report-form[_ngcontent-%COMP%] form[_ngcontent-%COMP%]{display:flex;flex-direction:column;row-gap:1rem}.send-excel-report-form[_ngcontent-%COMP%] .email-send-notification[_ngcontent-%COMP%]{font-size:10px;color:green;text-align:center;width:200px;margin:0 auto}.send-excel-report-form[_ngcontent-%COMP%] .email-send-email-error[_ngcontent-%COMP%]{font-size:10px;color:red;text-align:left;width:200px}.send-excel-report-form[_ngcontent-%COMP%] .report-xslx-email[_ngcontent-%COMP%]{border:1px solid #8080802e;height:34px;width:100%}.send-excel-report-form[_ngcontent-%COMP%] .report-xslx-email[_ngcontent-%COMP%]:hover{background:rgba(0,0,0,.04)!important;color:#172b4d!important}.send-excel-report-form[_ngcontent-%COMP%] .send-excel-report-form-btn[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;column-gap:1rem}.send-excel-report-form[_ngcontent-%COMP%] .send-excel-report-form-btn[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{height:34px;line-height:34px;flex:50;border-radius:5px}.send-excel-report-form[_ngcontent-%COMP%] .send-excel-report-form-btn[_ngcontent-%COMP%] .cancel-btn[_ngcontent-%COMP%]{border:1px solid #80808059;display:flex;justify-content:center;align-items:center;color:#172b4d!important}.send-excel-report-form[_ngcontent-%COMP%] .send-excel-report-form-btn[_ngcontent-%COMP%] .cancel-btn[_ngcontent-%COMP%]:hover{background:rgba(0,0,0,.04)!important}.send-excel-report-form[_ngcontent-%COMP%] .send-excel-report-form-btn[_ngcontent-%COMP%] .send-btn[_ngcontent-%COMP%]{border:1px solid #7963ED;background-color:#7963ed!important;color:#fff;display:flex;align-items:center;justify-content:center;column-gap:.5rem}.send-excel-report-form[_ngcontent-%COMP%] .send-excel-report-form-btn[_ngcontent-%COMP%] .send-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:#fff;font-size:19px;height:1.188rem;min-height:1.188rem;width:1.188rem;min-width:1.188rem}.drillthrough-menu-trigger[_ngcontent-%COMP%]{visibility:hidden;position:fixed}.deatil-group-table-paginator[_ngcontent-%COMP%]{position:absolute;bottom:0;right:0;display:flex;width:100%;height:2.75rem;align-items:center}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%]{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container{margin:0;padding:0;max-height:2rem;white-space:nowrap;align-items:center;min-width:100%}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container{padding:0 1rem!important;column-gap:1.2rem;justify-content:end;flex-wrap:wrap;border:1px solid #80808047;max-height:auto;margin:0;width:100%;background-color:#fff}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size{column-gap:1.2rem;row-gap:.5rem;justify-content:end;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size .mat-paginator-page-size-label{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-paginator-range-label{margin:0 8px 0 0!important;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions button{width:.6rem;max-width:.6rem;width:2rem;max-width:2rem;height:2rem;max-height:2rem;min-height:2rem;border-radius:4px}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-button-base:hover{background-color:#eee}.deatil-group-table-paginator[_ngcontent-%COMP%] .mat-paginator[_ngcontent-%COMP%] .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-icon-button.mat-button-disabled.mat-button-disabled:hover{background-color:transparent!important}.tabular-pagination-ghost-loader[_ngcontent-%COMP%]{position:absolute;bottom:0;height:4.8rem;background:#fff;padding-right:1rem}.no-column-drop-here[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:calc(100% - 4.2rem);min-height:calc(100% - 4.2rem);max-height:calc(100% - 4.2rem)}.no-column-text[_ngcontent-%COMP%], .table-view-icon[_ngcontent-%COMP%]{color:#a39f9f!important}"] });
|
|
739
739
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TabularComponent, [{
|
|
740
740
|
type: Component,
|
|
741
|
-
args: [{ selector: 'tabular', template: "<div (contextmenu)=\"onContextMenu($event);\" class=\"h-full min-h-full max-h-full\">\n <!--Title of the table-->\n <div class=\"row\" style=\"flex-wrap: nowrap !important; display: flex;\">\n <div class=\"col-10\">\n <div *ngIf='tabularReport.matrix.attributes.length!=0' [style.color]=\"tabularReport.tableStyle.title.textColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.title.textSize\"\n [style.font-family]=\"tabularReport.tableStyle.title.textStyle\"\n [style.font-weight]=\"tabularReport.tableStyle.title.fontStyle?.fontWeight || 'normal'\"\n [style.font-style]=\"tabularReport.tableStyle.title.fontStyle?.isItalicFont ? 'italic' : 'normal'\"\n [style.text-decoration]=\"tabularReport.tableStyle.title.fontStyle?.textDecoration || 'none'\"\n [style.text-align]=\"tabularReport.tableStyle.title.position || 'left'\" [style.padding]=\" '0.75rem 0.75rem' \">\n {{tabularReport.tableStyle.title.text}}\n </div>\n </div>\n <div cass=\"col-2\">\n <ng-container>\n <button *ngIf=\"tabularReport.matrix.attributes.length>0\" class=\"export-btn icon-btn\" mat-button\n (click)=\"displayNotification=false\" [matMenuTriggerFor]=\"beforeMenu\"><mat-icon matTooltip=\"Export Data\"\n svgIcon=\"axo_export\"></mat-icon></button>\n\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <div (click)=\"$event.stopPropagation();\" class=\"send-excel-report-form\">\n <form [formGroup]=\"exportFormBuilder\">\n <div>XLSX</div>\n <input mat-menu-item type=\"text\" class=\"report-xslx-email\" formControlName=\"email\"\n (ngModelChange)=\"emailValidate()\">\n <p *ngIf=\"displayEmailValidationError\" class=\"email-send-email-error\">Please provide a valid email ID</p>\n <p *ngIf=\"displayNotification\" class=\"email-send-notification\">Export is in progress. You will receive the\n report on your email once completed.</p>\n <div class=\"send-excel-report-form-btn\">\n <button mat-menu-item class=\"cancel-btn btn text-white\" (click)=\"closeExportMenu()\">Cancel</button>\n <button mat-menu-item class=\"send-btn btn\" (click)=\"sendEmail()\"\n [disabled]=\"displayEmailValidationError\">Export <mat-icon>send</mat-icon></button>\n </div>\n </form>\n </div>\n </mat-menu>\n </ng-container>\n </div>\n </div>\n\n\n <!-- Filter Container -->\n <div *ngIf=\"isEditable || tabularReport.filters.length>0\" [ngClass]=\"{'justify-end' : tabularReport.filters.length<1}\"\n class=\"filter-div px-3 h-11\">\n <div class=\"tabular-chart-filter\" [ngClass]=\"{'dashboard-tabular-filter' : !isEditable}\"\n *ngIf=\"isEditable || tabularReport.filters.length>0 || tabularReport.categories.length>0\">\n <!-- <chart-filter\n class=\"flex\"\n [filters]=\"tabularReport.filters\"\n [categories]=\"tabularReport.categories\"\n [isEditable] = \"isEditable\"\n [filterSourceElementType]= \"filterSourceElementTypes.tabular\"\n [chartRef]=\"componentRef\">\n </chart-filter> -->\n <lib-report-filter [tabularReport]=\"tabularReport\"[filters]=\"tabularReport.filters\" [categories]=\"tabularReport.categories\" [reportId]=\"reportId\"\n [screenType]=\"screenType\" [dataModel]=\"dataModel\" [isEditable]=\"isEditable\" [appVersion]=\"appVersionId\"\n [filterSourceElementType]=\"filterSourceElementTypes.tabular\" (applyFilterEvent)=\"applyLocalFilter()\">\n </lib-report-filter>\n </div>\n </div>\n\n <div class=\"no-column-drop-here\" *ngIf='tabularReport.matrix.attributes.length===0'>\n <div class=\"text-center\">\n <mat-icon class=\"table-view-icon\">table_view</mat-icon>\n <p class=\"font-size m-0 no-column-text\">No columns have been dropped yet !</p>\n </div>\n </div>\n <div #removeFromDashboardMenu [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\"\n [matMenuTriggerFor]=\"contextMenu\" *ngIf=\"screenTypes.dashboardBuilder === screenType\"\n class=\"drillthrough-menu-trigger\">\n </div>\n <!-- Mat Menu trigger for table columns-->\n <mat-menu #contextMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n </mat-menu>\n \n\n <lib-detail-view\n *ngIf='tabularReport.colGrouping.length===0 && tabularReport.rowGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [parentRef]=\"componentRef\"\n [reportId]=\"reportId\"\n [appVersionId]=\"appVersionId\"\n [x1MediaUrl]=\"x1MediaUrl\"\n >\n </lib-detail-view>\n <lib-row-group-view *ngIf='tabularReport.rowGrouping.length>0 && tabularReport.colGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-row-group-view>\n\n <lib-column-group-view *ngIf='tabularReport.colGrouping.length>0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-column-group-view>\n\n</div>\n<ng-container *ngIf=\"tabularReport.isDataLoaded \">\n<div class=\"flex align-items deatil-group-table-paginator\" *ngIf='tabularReport.colGrouping.length===0'>\n <mat-paginator [disabled]=\"isDataLoading\" (page)=\"handlePageEvent($event)\" [length]=\"tabularReport.pageLength\" [pageSize]=\"tabularReport.pageSize\"\n [pageIndex]=\"tabularReport.pageIndex\" [pageSizeOptions]=\"[10, 25, 50, 100]\" aria-label=\"Select page\" class=\"mat-paginator flex justify-end w-full\">\n </mat-paginator>\n</div>\n</ng-container>\n<ng-container *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\">\n <app-ghost-loader [elementType]=\"GhostLoaderType.PaginationViewLoader\" class=\"tabular-pagination-ghost-loader\"></app-ghost-loader>\n</ng-container>\n<div #drillThorughMenuTrigger [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"drillThroughMenu\" class=\"drillthrough-menu-trigger\"></div>\n<!-- Mat Menu trigger for table cells-->\n<mat-menu #drillThroughMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <button mat-menu-item [matMenuTriggerFor]=\"drillThroughPages\">Drill Through</button>\n <button mat-menu-item *ngIf=\"screenTypes.dashboardBuilder === screenType\" (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n</mat-menu>\n<mat-menu #drillThroughPages=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <ng-container *ngFor=\" let page of pages\">\n <button mat-menu-item (click)='pageClick(page)'> {{page.name}}</button>\n </ng-container>\n </ng-template>\n </div>\n</mat-menu>\n", styles: ["tabular{display:block;height:100%}table{width:auto;height:auto}shadow .tbody{box-shadow:2px 2px}th{background-color:#f2f8ff}.down-arrow{top:3px;min-height:13px;max-height:14px;position:relative}.aggregate-fun{padding-left:10px;font-size:12px}.mat-menu-item{background:transparent;color:#1e293b;font-size:12px}.export-btn{right:1rem;cursor:pointer;float:right;top:.2rem;position:sticky;left:0;display:flex;align-items:center;justify-content:center}.export-btn .mat-icon{min-height:21px!important}.filter-div{position:sticky;top:0;left:0;right:0;background:#ffffff;height:3.7rem!important;width:100%;min-width:100%;max-width:100%;align-items:center}.filter-div .tabular-chart-filter{display:inline-block;width:calc(100% - 40px);max-width:calc(100% - 40px);min-width:calc(100% - 40px)}.filter-div .dashboard-tabular-filter{width:calc(100% - 40px)}.send-excel-report-form{padding:8px 18px;height:auto;background-color:#fff!important}.send-excel-report-form form{display:flex;flex-direction:column;row-gap:1rem}.send-excel-report-form .email-send-notification{font-size:10px;color:green;text-align:center;width:200px;margin:0 auto}.send-excel-report-form .email-send-email-error{font-size:10px;color:red;text-align:left;width:200px}.send-excel-report-form .report-xslx-email{border:1px solid #8080802e;height:34px;width:100%}.send-excel-report-form .report-xslx-email:hover{background:rgba(0,0,0,.04)!important;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn{display:flex;justify-content:center;align-items:center;column-gap:1rem}.send-excel-report-form .send-excel-report-form-btn .btn{height:34px;line-height:34px;flex:50;border-radius:5px}.send-excel-report-form .send-excel-report-form-btn .cancel-btn{border:1px solid #80808059;display:flex;justify-content:center;align-items:center;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn .cancel-btn:hover{background:rgba(0,0,0,.04)!important}.send-excel-report-form .send-excel-report-form-btn .send-btn{border:1px solid #7963ED;background-color:#7963ed!important;color:#fff;display:flex;align-items:center;justify-content:center;column-gap:.5rem}.send-excel-report-form .send-excel-report-form-btn .send-btn mat-icon{color:#fff;font-size:19px;height:1.188rem;min-height:1.188rem;width:1.188rem;min-width:1.188rem}.drillthrough-menu-trigger{visibility:hidden;position:fixed}.deatil-group-table-paginator{position:absolute;bottom:0;right:0;display:flex;width:100%;height:2.75rem;align-items:center}.deatil-group-table-paginator .mat-paginator{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container{margin:0;padding:0;max-height:2rem;white-space:nowrap;align-items:center;min-width:100%}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container{padding:0 1rem!important;column-gap:1.2rem;justify-content:end;flex-wrap:wrap;border:1px solid #80808047;max-height:auto;margin:0;width:100%;background-color:#fff}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size{column-gap:1.2rem;row-gap:.5rem;justify-content:end;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size .mat-paginator-page-size-label{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-paginator-range-label{margin:0 8px 0 0!important;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions button{width:.6rem;max-width:.6rem;width:2rem;max-width:2rem;height:2rem;max-height:2rem;min-height:2rem;border-radius:4px}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-button-base:hover{background-color:#eee}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-icon-button.mat-button-disabled.mat-button-disabled:hover{background-color:transparent!important}.tabular-pagination-ghost-loader{position:absolute;bottom:0;height:4.8rem;background:#fff;padding-right:1rem}.no-column-drop-here{display:flex;align-items:center;justify-content:center;height:calc(100% - 4.2rem);min-height:calc(100% - 4.2rem);max-height:calc(100% - 4.2rem)}.no-column-text,.table-view-icon{color:#a39f9f!important}\n"] }]
|
|
741
|
+
args: [{ selector: 'tabular', template: "<div (contextmenu)=\"onContextMenu($event);\" class=\"h-full min-h-full max-h-full\">\n <!--Title of the table-->\n <div class=\"row\" style=\"display: flex; justify-content: space-between; align-items: center; flex-wrap: nowrap;\">\n <div class=\"col-10\">\n <div *ngIf=\"tabularReport.matrix.attributes.length != 0\" \n [style.color]=\"tabularReport.tableStyle.title.textColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.title.textSize\"\n [style.font-family]=\"tabularReport.tableStyle.title.textStyle\"\n [style.font-weight]=\"tabularReport.tableStyle.title.fontStyle?.fontWeight || 'normal'\"\n [style.font-style]=\"tabularReport.tableStyle.title.fontStyle?.isItalicFont ? 'italic' : 'normal'\"\n [style.text-decoration]=\"tabularReport.tableStyle.title.fontStyle?.textDecoration || 'none'\"\n [style.text-align]=\"tabularReport.tableStyle.title.position || 'left'\"\n [style.padding]=\"'0.75rem 0.75rem'\">\n {{tabularReport.tableStyle.title.text}}\n </div>\n </div>\n <div class=\"col-2\" style=\"text-align: right;\">\n <ng-container>\n <button *ngIf=\"tabularReport.matrix.attributes.length > 0\" \n class=\"export-btn icon-btn\" \n mat-button \n (click)=\"displayNotification = false\" \n [matMenuTriggerFor]=\"beforeMenu\">\n <mat-icon matTooltip=\"Export Data\" svgIcon=\"axo_export\"></mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <div (click)=\"$event.stopPropagation();\" class=\"send-excel-report-form\">\n <form [formGroup]=\"exportFormBuilder\">\n <div>XLSX</div>\n <input mat-menu-item type=\"text\" \n class=\"report-xslx-email\" \n formControlName=\"email\"\n (ngModelChange)=\"emailValidate()\">\n <p *ngIf=\"displayEmailValidationError\" class=\"email-send-email-error\">\n Please provide a valid email ID\n </p>\n <p *ngIf=\"displayNotification\" class=\"email-send-notification\">\n Export is in progress. You will receive the report on your email once completed.\n </p>\n <div class=\"send-excel-report-form-btn\">\n <button mat-menu-item class=\"cancel-btn btn text-white\" \n (click)=\"closeExportMenu()\">Cancel</button>\n <button mat-menu-item class=\"send-btn btn\" \n (click)=\"sendEmail()\" \n [disabled]=\"displayEmailValidationError\">\n Export <mat-icon>send</mat-icon>\n </button>\n </div>\n </form>\n </div>\n </mat-menu>\n </ng-container>\n </div>\n </div>\n \n\n\n <!-- Filter Container -->\n <div *ngIf=\"isEditable || tabularReport.filters.length>0\" [ngClass]=\"{'justify-end' : tabularReport.filters.length<1}\"\n class=\"filter-div px-3 h-11\">\n <div class=\"tabular-chart-filter\" [ngClass]=\"{'dashboard-tabular-filter' : !isEditable}\"\n *ngIf=\"isEditable || tabularReport.filters.length>0 || tabularReport.categories.length>0\">\n <!-- <chart-filter\n class=\"flex\"\n [filters]=\"tabularReport.filters\"\n [categories]=\"tabularReport.categories\"\n [isEditable] = \"isEditable\"\n [filterSourceElementType]= \"filterSourceElementTypes.tabular\"\n [chartRef]=\"componentRef\">\n </chart-filter> -->\n <lib-report-filter [tabularReport]=\"tabularReport\"[filters]=\"tabularReport.filters\" [categories]=\"tabularReport.categories\" [reportId]=\"reportId\"\n [screenType]=\"screenType\" [dataModel]=\"dataModel\" [isEditable]=\"isEditable\" [appVersion]=\"appVersionId\"\n [filterSourceElementType]=\"filterSourceElementTypes.tabular\" (applyFilterEvent)=\"applyLocalFilter()\">\n </lib-report-filter>\n </div>\n </div>\n\n <div class=\"no-column-drop-here\" *ngIf='tabularReport.matrix.attributes.length===0'>\n <div class=\"text-center\">\n <mat-icon class=\"table-view-icon\">table_view</mat-icon>\n <p class=\"font-size m-0 no-column-text\">No columns have been dropped yet !</p>\n </div>\n </div>\n <div #removeFromDashboardMenu [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\"\n [matMenuTriggerFor]=\"contextMenu\" *ngIf=\"screenTypes.dashboardBuilder === screenType\"\n class=\"drillthrough-menu-trigger\">\n </div>\n <!-- Mat Menu trigger for table columns-->\n <mat-menu #contextMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n </mat-menu>\n \n\n <lib-detail-view\n *ngIf='tabularReport.colGrouping.length===0 && tabularReport.rowGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [parentRef]=\"componentRef\"\n [reportId]=\"reportId\"\n [appVersionId]=\"appVersionId\"\n [x1MediaUrl]=\"x1MediaUrl\"\n >\n </lib-detail-view>\n <lib-row-group-view *ngIf='tabularReport.rowGrouping.length>0 && tabularReport.colGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-row-group-view>\n\n <lib-column-group-view *ngIf='tabularReport.colGrouping.length>0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-column-group-view>\n\n</div>\n<ng-container *ngIf=\"tabularReport.isDataLoaded \">\n<div class=\"flex align-items deatil-group-table-paginator\" *ngIf='tabularReport.colGrouping.length===0'>\n <mat-paginator [disabled]=\"isDataLoading\" (page)=\"handlePageEvent($event)\" [length]=\"tabularReport.pageLength\" [pageSize]=\"tabularReport.pageSize\"\n [pageIndex]=\"tabularReport.pageIndex\" [pageSizeOptions]=\"[10, 25, 50, 100]\" aria-label=\"Select page\" class=\"mat-paginator flex justify-end w-full\">\n </mat-paginator>\n</div>\n</ng-container>\n<ng-container *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\">\n <app-ghost-loader [elementType]=\"GhostLoaderType.PaginationViewLoader\" class=\"tabular-pagination-ghost-loader\"></app-ghost-loader>\n</ng-container>\n<div #drillThorughMenuTrigger [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"drillThroughMenu\" class=\"drillthrough-menu-trigger\"></div>\n<!-- Mat Menu trigger for table cells-->\n<mat-menu #drillThroughMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <button mat-menu-item [matMenuTriggerFor]=\"drillThroughPages\">Drill Through</button>\n <button mat-menu-item *ngIf=\"screenTypes.dashboardBuilder === screenType\" (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n</mat-menu>\n<mat-menu #drillThroughPages=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <ng-container *ngFor=\" let page of pages\">\n <button mat-menu-item (click)='pageClick(page)'> {{page.name}}</button>\n </ng-container>\n </ng-template>\n </div>\n</mat-menu>\n", styles: ["tabular{display:block;height:100%}table{width:auto;height:auto}shadow .tbody{box-shadow:2px 2px}th{background-color:#f2f8ff}.down-arrow{top:3px;min-height:13px;max-height:14px;position:relative}.aggregate-fun{padding-left:10px;font-size:12px}.mat-menu-item{background:transparent;color:#1e293b;font-size:12px}.export-btn{right:1rem;cursor:pointer;float:right;top:.2rem;position:sticky;left:0;display:flex;align-items:center;justify-content:center}.export-btn .mat-icon{min-height:21px!important}.filter-div{position:sticky;top:0;left:0;right:0;background:#ffffff;height:3.7rem!important;width:100%;min-width:100%;max-width:100%;align-items:center}.filter-div .tabular-chart-filter{display:inline-block;width:calc(100% - 40px);max-width:calc(100% - 40px);min-width:calc(100% - 40px)}.filter-div .dashboard-tabular-filter{width:calc(100% - 40px)}.send-excel-report-form{padding:8px 18px;height:auto;background-color:#fff!important}.send-excel-report-form form{display:flex;flex-direction:column;row-gap:1rem}.send-excel-report-form .email-send-notification{font-size:10px;color:green;text-align:center;width:200px;margin:0 auto}.send-excel-report-form .email-send-email-error{font-size:10px;color:red;text-align:left;width:200px}.send-excel-report-form .report-xslx-email{border:1px solid #8080802e;height:34px;width:100%}.send-excel-report-form .report-xslx-email:hover{background:rgba(0,0,0,.04)!important;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn{display:flex;justify-content:center;align-items:center;column-gap:1rem}.send-excel-report-form .send-excel-report-form-btn .btn{height:34px;line-height:34px;flex:50;border-radius:5px}.send-excel-report-form .send-excel-report-form-btn .cancel-btn{border:1px solid #80808059;display:flex;justify-content:center;align-items:center;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn .cancel-btn:hover{background:rgba(0,0,0,.04)!important}.send-excel-report-form .send-excel-report-form-btn .send-btn{border:1px solid #7963ED;background-color:#7963ed!important;color:#fff;display:flex;align-items:center;justify-content:center;column-gap:.5rem}.send-excel-report-form .send-excel-report-form-btn .send-btn mat-icon{color:#fff;font-size:19px;height:1.188rem;min-height:1.188rem;width:1.188rem;min-width:1.188rem}.drillthrough-menu-trigger{visibility:hidden;position:fixed}.deatil-group-table-paginator{position:absolute;bottom:0;right:0;display:flex;width:100%;height:2.75rem;align-items:center}.deatil-group-table-paginator .mat-paginator{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container{margin:0;padding:0;max-height:2rem;white-space:nowrap;align-items:center;min-width:100%}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container{padding:0 1rem!important;column-gap:1.2rem;justify-content:end;flex-wrap:wrap;border:1px solid #80808047;max-height:auto;margin:0;width:100%;background-color:#fff}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size{column-gap:1.2rem;row-gap:.5rem;justify-content:end;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size .mat-paginator-page-size-label{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-paginator-range-label{margin:0 8px 0 0!important;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions button{width:.6rem;max-width:.6rem;width:2rem;max-width:2rem;height:2rem;max-height:2rem;min-height:2rem;border-radius:4px}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-button-base:hover{background-color:#eee}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-icon-button.mat-button-disabled.mat-button-disabled:hover{background-color:transparent!important}.tabular-pagination-ghost-loader{position:absolute;bottom:0;height:4.8rem;background:#fff;padding-right:1rem}.no-column-drop-here{display:flex;align-items:center;justify-content:center;height:calc(100% - 4.2rem);min-height:calc(100% - 4.2rem);max-height:calc(100% - 4.2rem)}.no-column-text,.table-view-icon{color:#a39f9f!important}\n"] }]
|
|
742
742
|
}], function () { return [{ type: i1.FieldsListService }, { type: i2.ReportBuilderMasterService }, { type: i3.ElementService }, { type: i4.CommonService }, { type: i5.TabularReportService }, { type: i6.FormBuilder }, { type: i7.UserDataService }, { type: i0.ChangeDetectorRef }, { type: i8.DashboardBuilderService }, { type: i9.DrillThroughService }, { type: i10.Router }]; }, { page: [{
|
|
743
743
|
type: Input
|
|
744
744
|
}], tabularReport: [{
|
|
@@ -771,4 +771,4 @@ TabularComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabularCom
|
|
|
771
771
|
}], appVersionId: [{
|
|
772
772
|
type: Input
|
|
773
773
|
}] }); })();
|
|
774
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2VubGlnaHRlbi1saWIvcmVwb3J0L3RhYnVsYXItcmVwb3J0L3RhYnVsYXIvdGFidWxhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2VubGlnaHRlbi1saWIvcmVwb3J0L3RhYnVsYXItcmVwb3J0L3RhYnVsYXIvdGFidWxhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFrQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQWtCLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMs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Qyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUNFLG1CQUFtQjtrQkFBakcsU0FBUzttQkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUNwRSxVQUFVO2tCQUFsQixLQUFLO1lBQ0csWUFBWTtrQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVwb3J0IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uLXV0aWxzL3JlcG9ydCc7XG5pbXBvcnQgeyBDcm9zc0ZpbHRlckR0bywgRWxlbWVudEZpbHRlcnMsIEVsZW1lbnRzRHRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uLWR0by9lbGVtZW50cy1kdG8nO1xuaW1wb3J0IHsgRmllbGRzTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9maWVsZC1saXN0LWxpYi9maWVsZHMtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEF0dHJpYnV0ZURhdGEgfSBmcm9tICcuLi8uLi8uLi9maWVsZHMvYXR0cmlidXRlLWRhdGEnO1xuaW1wb3J0IHsgUGFnZSB9IGZyb20gJy4uLy4uL2dyYXBoaWNhbC1yZXBvcnQvcGFnZS9wYWdlJztcbmltcG9ydCB7IFJlcG9ydEJ1aWxkZXJNYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVwb3J0LWJ1aWxkZXItbWFzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVRhYnVsYXJSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuLi9pdGFidWxhci1yZXBvcnQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYnVsYXJSZXBvcnQgfSBmcm9tICcuLi90YWJ1bGFyLXJlcG9ydCc7XG5pbXBvcnQgeyBFbGVtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2VsZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU291cmNlRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi8uLi9maWx0ZXJzL2NoYXJ0LWZpbHRlci10eXBlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYnVsYXJSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vdGFidWxhci1yZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNjb3BlVHlwZSwgU2NyZWVuVHlwZSB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlcnMvY29uZGl0aW9uLXR5cGUnO1xuaW1wb3J0IHsgQXhFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vYXgtZXhwcmVzc2lvbi9heC1leHByZXNzaW9uJztcbmltcG9ydCB7IEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtbW9kZWwvYXR0cmlidXRlJztcbmltcG9ydCB7IEF4RXhwVGV4dExpc3QgfSBmcm9tICcuLi8uLi8uLi9heC1leHByZXNzaW9uL2F4LWV4cC10ZXh0LWxpc3QnO1xuaW1wb3J0IHsgU2VhcmNoTm9kZSB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlcnMvc2VhcmNoLW5vZGUnO1xuaW1wb3J0IHsgQXhGaWx0ZXIgfSBmcm9tICcuLi8uLi8uLi9maWx0ZXJzL2F4LWZpbHRlcic7XG5pbXBvcnQgeyBEYXNoYm9hcmRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Rhc2hib2FyZC1saWIvZGFzaGJvYXJkLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEcmlsbFRocm91Z2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZHJpbGwtdGhyb3VnaC9kcmlsbC10aHJvdWdoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLnR5cGVzJztcbmltcG9ydCB7IFVzZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgR2hvc3RMb2FkZXJUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2hvc3QtbG9hZGVyL2dob3N0LWxvYWRlci5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAndGFidWxhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJ1bGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFidWxhci5jb21wb25lbnQuc2NzcyddXG59KVxuXG5leHBvcnQgY2xhc3MgVGFidWxhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgSVRhYnVsYXJSZXBvcnRDb21wb25lbnQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcGFnZTogUGFnZTtcbiAgQElucHV0KCkgdGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydDtcbiAgQElucHV0KCkgaXNFZGl0YWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgdXNlckVtYWlsOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBzZW5kRXhjZWxSZXBvcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSB4MUltYWdlTWVkaWFVcmw6IHN0cmluZztcbiAgQElucHV0KCkgc2NyZWVuVHlwZTogU2NyZWVuVHlwZTtcbiAgQElucHV0KCkgZHJpbGxUaHJvdWdoUGFyZW50VHlwZTogU2NyZWVuVHlwZTtcbiAgQElucHV0KCkgZHJpbGxUaHJvdWdoRmlsdGVySW5wdXQ6IEF4RmlsdGVyO1xuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKSBjb250ZXh0TWVudTogTWF0TWVudVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoJ3JlbW92ZUZyb21EYXNoYm9hcmRNZW51JywgeyByZWFkOiBNYXRNZW51VHJpZ2dlciwgc3RhdGljOiBmYWxzZSB9KSByZW1vdmVGcm9tRGFzaGJvYXJkTWVudTogTWF0TWVudVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoJ2RyaWxsVGhvcnVnaE1lbnVUcmlnZ2VyJywgeyByZWFkOiBNYXRNZW51VHJpZ2dlciwgc3RhdGljOiBmYWxzZSB9KSBkcmlsbFRocm91Z2hUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcbiAgQElucHV0KCkgeDFNZWRpYVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBhcHBWZXJzaW9uSWQ6IG51bWJlcjtcbiAgR2hvc3RMb2FkZXJUeXBlID0gR2hvc3RMb2FkZXJUeXBlO1xuICBzaG93R2hvc3RMb2FkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbHVtbkRhdGE6IGFueTtcbiAgcmVwb3J0SWQ6IG51bWJlcjtcbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogJzBweCcsIHk6ICcwcHgnIH07XG4gIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICBpc0RpcnR5OiBib29sZWFuO1xuICByZXBvcnREaXJ0eTogYW55O1xuICByZXBvcnQ6IFJlcG9ydDtcbiAgX2lzQ29sdW1uRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29tcG9uZW50UmVmOiBhbnk7XG4gIGV4cG9ydEZvcm1CdWlsZGVyOiBGb3JtR3JvdXA7XG4gIGRpc3BsYXlOb3RpZmljYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgZW1haWxQYXR0ZXJuOiBzdHJpbmcgPSAnXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSQnO1xuICBkaXNwbGF5RW1haWxWYWxpZGF0aW9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWREYXRhUG9pbnRzOiBBcnJheTxudW1iZXI+ID0gW107Ly8gSG9sZHMgdGhlIGFsbCBzZWxlY3RlZCBwb2ludHMuXG4gIGVsZW1lbnRHdWlkOiBzdHJpbmc7XG4gIGRyaWxsVGhyb3VnaEZpbHRlcjogQXhGaWx0ZXI7XG4gIHBhZ2VzOiBBcnJheTxQYWdlPiA9IFtdO1xuICBjdXJyZW50QXR0cmlidXRlOiBBdHRyaWJ1dGVEYXRhO1xuICB1c2VyOiBVc2VyO1xuICBpc0RhdGFMb2FkaW5nOiBib29sZWFuO1xuICAvKlxuICAgKiBTdWJqZWN0IG9iamVjdCB3aGljaCBoZWxwcyB1bnN1YnNjcmliZSBhbGwgdGhlIHN1YnNjcmliZWQgb2JqZWN0cyBpbiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2ZpZWxkc0xpc3RTZXJ2aWNlOiBGaWVsZHNMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9yZXBvcnRCdWlsZGVyTWFzdGVyU2VydmljZTogUmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdGFidWxhclJlcG9ydFNlcnZpY2U6IFRhYnVsYXJSZXBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIF91c2VyRGF0YVNlcnZpY2U6IFVzZXJEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZGFzaGJvYXJkQnVpbGRlclNlcnZpY2U6IERhc2hib2FyZEJ1aWxkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2RyaWxsVGhyb3VnaFNlcnZpY2U6IERyaWxsVGhyb3VnaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXJcblxuICApIHsgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyU291cmNlRWxlbWVudFR5cGVzKCk6IHR5cGVvZiBGaWx0ZXJTb3VyY2VFbGVtZW50VHlwZSB7XG4gICAgcmV0dXJuIEZpbHRlclNvdXJjZUVsZW1lbnRUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBzY3JlZW5UeXBlcygpOiB0eXBlb2YgU2NyZWVuVHlwZSB7XG4gICAgcmV0dXJuIFNjcmVlblR5cGU7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMucGFnZS5lbGVtZW50c1swXSBhcyBUYWJ1bGFyUmVwb3J0O1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlcnMoKTtcbiAgICB0aGlzLmlzRWRpdGFibGUgPSAodGhpcy5zY3JlZW5UeXBlICE9PSBTY3JlZW5UeXBlLmRyaWxsVGhyb3VnaCkgJiYgKHRoaXMuc2NyZWVuVHlwZSAhPT0gU2NyZWVuVHlwZS5kYXNoYm9hcmRCdWlsZGVyKSAmJiAodGhpcy5zY3JlZW5UeXBlICE9PSBTY3JlZW5UeXBlLmNvbnRhaW5lckRhc2hib2FyZCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzO1xuICAgIHRoaXMucmVwb3J0ID0gdGhpcy5fcmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2UucmVwb3J0O1xuICAgIHRoaXMucmVwb3J0SWQgPSB0aGlzLnJlcG9ydD8uaWQ7XG4gIH1cblxuICAvKipcbiAgICogT24gZGVzdHJveVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXJzIGZvciB0aGUgY29tcG9uZW50XG4gICAqL1xuICBzdWJzY3JpYmVycygpOiB2b2lkIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gdXNlciBjaGFuZ2VzXG4gICAgdGhpcy5fdXNlckRhdGFTZXJ2aWNlLnVzZXJEZXRhaWxzJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSlcbiAgICAgIC5zdWJzY3JpYmUoKHVzZXI6IFVzZXIpID0+IHtcbiAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmV4cG9ydEZvcm1CdWlsZGVyID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZW1haWw6IFt0aGlzLnVzZXJFbWFpbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXVxuICAgIH0pO1xuXG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXM7XG4gICAgdGhpcy5yZXBvcnQgPSB0aGlzLl9yZXBvcnRCdWlsZGVyTWFzdGVyU2VydmljZS5yZXBvcnQ7XG4gICAgLyp3aGVuZXZlciB3ZSBjaGFuZ2UgdGhlIGZpbHRlcnMgd2UgZ290IGNhbGwgYmFjayBmcm9tIHRoaXMgc3Vic2NyaWJlICovXG4gICAgdGhpcy5fZWxlbWVudFNlcnZpY2UucmVmcmVzaERhdGFFdmVudCRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHZhbCAmJiB0aGlzLnRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMudGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5jb2x1bW5EYXRhKHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZUluZGV4PTA7XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LnBhZ2VMZW5ndGg9MDtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQuaXNEYXRhTG9hZGVkPWZhbHNlO1xuICAgICAgICAgIHRoaXMuZ2V0TWF0cml4RGltZW5zaW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAvKndoZW4gd2UgY2xpY2sgb24gYmFyIGNoYXJ0IGV2ZW50IHdpbGwgYmUgZW1pdHRlZCBmcm9tIHRoaXMgc3Vic2NyaWJlciovXG4gICAgdGhpcy5fZWxlbWVudFNlcnZpY2UuY3Jvc3NGaWx0ZXJFdmVudC5zdWJzY3JpYmUoKGNyb3NzRmlsdGVyOiBDcm9zc0ZpbHRlckR0bykgPT4ge1xuICAgICAgaWYgKHRoaXMudGFidWxhclJlcG9ydC5ndWlkICE9PSBjcm9zc0ZpbHRlci5lbGVtZW50R3VpZCkge1xuICAgICAgICBpZiAoY3Jvc3NGaWx0ZXIucmVzZXRGaWx0ZXIpIHsgdGhpcy5nZXRNYXRyaXhEaW1lbnNpb24oKTsgfVxuICAgICAgICBlbHNlIHsgdGhpcy5jcmVhdGVDcm9zc0ZpbHRlcihjcm9zc0ZpbHRlcik7IH1cbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgZ2V0UGFnZUxpc3QoKTogdm9pZCB7XG4gICAgLy8gR2V0IHBhZ2VzbGlzdFxuICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0UGFnZUxpc3QodGhpcy5hcHBWZXJzaW9uSWQpO1xuICB9XG5cbiAgZmlsdGVyRHJpbGxUaHJvdWdoUGFnZXMoYXR0cmlidXRlOiBBdHRyaWJ1dGVEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5wYWdlTGlzdCQuc3Vic2NyaWJlKChwYWdlczogUGFnZVtdKSA9PiB7XG4gICAgICB0aGlzLnBhZ2VzID0gW107XG4gICAgICBwYWdlcz8uZm9yRWFjaCgoX3BhZ2UpID0+IHtcbiAgICAgICAgX3BhZ2U/LmRyaWxsRGF0YT8uZm9yRWFjaCgoZHJpbGxEYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRyaWxsRGF0YS5jb2x1bW5OYW1lID09PSBhdHRyaWJ1dGUuY29sdW1uTmFtZSAmJiBkcmlsbERhdGEudGFibGVOYW1lID09PSBhdHRyaWJ1dGUudGFibGVOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzLnB1c2goX3BhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmICgodGhpcy5zY3JlZW5UeXBlID09PSBTY3JlZW5UeXBlLnJlcG9ydEJ1aWxkZXIpIHx8ICh0aGlzLnNjcmVlblR5cGUgPT09IFNjcmVlblR5cGUuZHJpbGxUaHJvdWdoKSkge1xuICAgICAgICB0aGlzLnBhZ2VzID0gdGhpcy5wYWdlcy5maWx0ZXIocCA9PiBwLmlkICE9PSB0aGlzLnBhZ2UuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWF0cml4RGltZW5zaW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBFbGVtZW50c0R0byh0aGlzLnRhYnVsYXJSZXBvcnQpO1xuICAgICAgZGF0YS5maWx0ZXJzLmxvY2FsRmlsdGVycy5iYXNpYyA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyKHRoaXMudGFidWxhclJlcG9ydC5maWx0ZXJzKTtcbiAgICAgIGRhdGEuZmlsdGVycy5sb2NhbEZpbHRlcnMuY2F0ZWdvcnkgPSB0aGlzLl9lbGVtZW50U2VydmljZS5nZXRWYWxpZEZpbHRlckNhdGVnb3J5KHRoaXMudGFidWxhclJlcG9ydC5jYXRlZ29yaWVzKTtcbiAgICAgIGRhdGEuZmlsdGVycy5nbG9iYWxGaWx0ZXJzLmJhc2ljID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXIodGhpcy5fZWxlbWVudFNlcnZpY2UuZmlsdGVyc0R0by5iYXNpYywgU2NvcGVUeXBlLmdsb2JhbCk7XG4gICAgICBkYXRhLmZpbHRlcnMuZ2xvYmFsRmlsdGVycy5jYXRlZ29yeSA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyQ2F0ZWdvcnkodGhpcy5fZWxlbWVudFNlcnZpY2UuZmlsdGVyc0R0by5jYXRlZ29yeSwgU2NvcGVUeXBlLmdsb2JhbCk7XG4gICAgICBkYXRhLnJlcG9ydElkID0gdGhpcy5yZXBvcnRJZDtcbiAgICAgIGRhdGEudHlwZSA9ICd0YWJ1bGFyLXJlcG9ydCc7IC8vIHVzZSBlbnVtXG4gICAgICBkYXRhLnBhZ2VJbmRleCA9IHRoaXMudGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg+MD8wOnRoaXMudGFidWxhclJlcG9ydC5wYWdlSW5kZXg7XG4gICAgICBkYXRhLnBhZ2VTaXplID0gdGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD4wPzA6dGhpcy50YWJ1bGFyUmVwb3J0LnBhZ2VTaXplO1xuICAgICAgZGF0YS5wYWdlTGVuZ3RoPXRoaXMudGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg+MD8wOnRoaXMudGFidWxhclJlcG9ydC5wYWdlTGVuZ3RoO1xuICAgICAgZGF0YS5vcmRlckJ5ID0gdGhpcy50YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzO1xuICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZpZWxkc0xpc3RTZXJ2aWNlLmdldE1hdHJpeERhdGEoZGF0YSkudGhlbigoZW50aXRpZXNBdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChlbnRpdGllc0F0dHJpYnV0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgZW50aXRpZXNBdHRyaWJ1dGUubWF0cml4LmF0dHJpYnV0ZXMuc2hvd1N1bSA9IHRydWU7XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzID0gZW50aXRpZXNBdHRyaWJ1dGUubWF0cml4LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgaWYgKHRoaXMudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQuc2hvd0dyYW5kVG90YWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5zdWJUb3RhbCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5ncm91cERhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgICAgICAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UubmV3RGF0YSh0aGlzLnRhYnVsYXJSZXBvcnQsIGF0dHJpYnV0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLmRhdGFGYWN0b3J5KHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0LnJvd0NvdW50ICYmIHRoaXMudGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoID4gMCkgeyB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5yb3dDb3VudERhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQuaXNEYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZUxlbmd0aCA9IGVudGl0aWVzQXR0cmlidXRlLnRvdGFsUmVjb3JkcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZUluZGV4ID0gZW50aXRpZXNBdHRyaWJ1dGUucGFnZUluZGV4O1xuICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZUxlbmd0aCA9IGVudGl0aWVzQXR0cmlidXRlLnRvdGFsUmVjb3JkcztcbiAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LnBhZ2VTaXplID0gZW50aXRpZXNBdHRyaWJ1dGUucGFnZVNpemU7XG4gICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgPSB0cnVlO1xuICB9XG5cblxuICAvKipcbiAgICogQ3JlYXRlZCBmaWx0ZXIgb2JqZWN0IGZvciBjcm9zcyBmaWx0ZXJpbmcuXG4gICAqXG4gICAqICBAcGFyYW0gQ3Jvc3NGaWx0ZXJEdG9cbiAgICovXG4gIGNyZWF0ZUNyb3NzRmlsdGVyKGNyb3NzRmlsdGVyRGF0YTogQ3Jvc3NGaWx0ZXJEdG8pOiB2b2lkIHtcbiAgICBjb25zdCBheEV4cHJlc3Npb24gPSBuZXcgQXhFeHByZXNzaW9uKCk7XG4gICAgYXhFeHByZXNzaW9uLmNvbXBhcmlzb25PcGVyYXRvci50ZXh0ID0gJ0luJztcbiAgICBheEV4cHJlc3Npb24uY29tcGFyaXNvbk9wZXJhdG9yLnZhbHVlID0gJ0lOJztcbiAgICBheEV4cHJlc3Npb24udmFsdWVUeXBlID0gMjtcbiAgICBheEV4cHJlc3Npb24uZmllbGQgPSBuZXcgQXR0cmlidXRlKGNyb3NzRmlsdGVyRGF0YS5hdHRyaWJ1dGVEYXRhIGFzIHVua25vd24gYXMgQXR0cmlidXRlKTtcbiAgICBjb25zdCBheEV4cFRleHRMaXN0ID0gbmV3IEF4RXhwVGV4dExpc3QoKTtcbiAgICBpZiAoY3Jvc3NGaWx0ZXJEYXRhLnZhbHVlcykge1xuICAgICAgY3Jvc3NGaWx0ZXJEYXRhLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBheEV4cFRleHRMaXN0LnZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGF4RXhwcmVzc2lvbi52YWx1ZSA9IGF4RXhwVGV4dExpc3Q7XG4gICAgY29uc3QgX3NlYXJjaE5vZGVzID0gbmV3IFNlYXJjaE5vZGUoKTtcbiAgICBfc2VhcmNoTm9kZXMuZXhwcmVzc2lvbiA9IGF4RXhwcmVzc2lvbjtcbiAgICBjb25zdCBfZmlsdGVyID0gbmV3IEF4RmlsdGVyKCk7XG4gICAgX2ZpbHRlci5zZWFyY2hOb2Rlcy5wdXNoKF9zZWFyY2hOb2Rlcyk7XG4gICAgX2ZpbHRlci5hcHBWZXJzaW9uSWQgPSAwO1xuICAgIHRoaXMuZ2V0Q3Jvc3NGaWx0ZXJEYXRhKF9maWx0ZXIsIGNyb3NzRmlsdGVyRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogcHVzaGVkIHRoZSBmaWx0ZXIgb2JqZWN0IGludG8gYmFzaWMgZmlsdGVyIGFuZCBhcHBsaWVkIHRoZSBmaWx0ZXIgb24gdGhlIGRhdGFcbiAgICpcbiAgICogIEBwYXJhbSBDcm9zc0ZpbHRlckR0b1xuICAgKiAgQHBhcmFtIEF4RmlsdGVyXG4gICAqL1xuICBnZXRDcm9zc0ZpbHRlckRhdGEoX2ZpbHRlcjogQXhGaWx0ZXIsIGNyb3NzRmlsdGVyRGF0YTogQ3Jvc3NGaWx0ZXJEdG8pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZWxlbWVudER0byA9IG5ldyBFbGVtZW50c0R0byh0aGlzLnRhYnVsYXJSZXBvcnQpO1xuICAgICAgZWxlbWVudER0by5maWx0ZXJzLmxvY2FsRmlsdGVycy5iYXNpYyA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyKHRoaXMudGFidWxhclJlcG9ydC5maWx0ZXJzKTtcbiAgICAgIGVsZW1lbnREdG8uZmlsdGVycy5sb2NhbEZpbHRlcnMuYmFzaWMucHVzaChfZmlsdGVyKTtcbiAgICAgIGVsZW1lbnREdG8uZmlsdGVycy5sb2NhbEZpbHRlcnMuY2F0ZWdvcnkgPSB0aGlzLl9lbGVtZW50U2VydmljZS5nZXRWYWxpZEZpbHRlckNhdGVnb3J5KHRoaXMudGFidWxhclJlcG9ydC5jYXRlZ29yaWVzKTtcbiAgICAgIGVsZW1lbnREdG8uZmlsdGVycy5nbG9iYWxGaWx0ZXJzLmJhc2ljID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXIodGhpcy5fZWxlbWVudFNlcnZpY2UuZmlsdGVyc0R0by5iYXNpYyk7XG4gICAgICBlbGVtZW50RHRvLmZpbHRlcnMuZ2xvYmFsRmlsdGVycy5jYXRlZ29yeSA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyQ2F0ZWdvcnkodGhpcy5fZWxlbWVudFNlcnZpY2UuZmlsdGVyc0R0by5jYXRlZ29yeSk7XG4gICAgICBlbGVtZW50RHRvLnJlcG9ydElkID0gdGhpcy5yZXBvcnRJZDtcbiAgICAgIHRoaXMuX2ZpZWxkc0xpc3RTZXJ2aWNlLmdldE1hdHJpeERhdGEoZWxlbWVudER0bylcbiAgICAgICAgLnRoZW4oKGVudGl0aWVzQXR0cmlidXRlOiBFbGVtZW50c0R0bykgPT4ge1xuICAgICAgICAgIGlmIChlbnRpdGllc0F0dHJpYnV0ZSAhPSBudWxsIHx8IGVudGl0aWVzQXR0cmlidXRlLmRpbWVuc2lvbi5hdHRyaWJ1dGUuc2VyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGVudGl0aWVzQXR0cmlidXRlLm1hdHJpeC5hdHRyaWJ1dGVzLnNob3dTdW09dHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcyA9IGVudGl0aWVzQXR0cmlidXRlLm1hdHJpeC5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UuZ3JvdXBEYXRhKHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIHRvIGFkZCBjb2x1bW4gaW50byB0YWJ1bGFyIHJlcG9ydFxuICAgKlxuICAgKiBAcGFyYW0gQXR0cmlidXRlRGF0YVxuICAgKlxuICAgKi9cbiAgYWRkQ29sdW1uKGF0dHJpYnV0ZURhdGE6IEF0dHJpYnV0ZURhdGEpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ29sdW1uRXhpc3QoYXR0cmlidXRlRGF0YSk7XG4gICAgaWYgKCF0aGlzLl9pc0NvbHVtbkV4aXN0KSB7XG4gICAgICB0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGVEYXRhKTtcbiAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuaXNSZXBvcnRCdWlsZGVyRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5nZXRNYXRyaXhEaW1lbnNpb24oKTtcbiAgICB9XG4gICAgdGhpcy5faXNDb2x1bW5FeGlzdCA9IGZhbHNlO1xuXG4gIH1cbiAgLyoqXG4gICAqIHRvIGNoZWNrIGRyb3BwZWQgY29sdW1uIGlzIGFscmVhZHkgZXhpc3QgaW4gdGFibGUgb3Igbm90XG4gICAqXG4gICAqIEBwYXJhbSBBdHRyaWJ1dGVEYXRhXG4gICAqXG4gICAqL1xuICBpc0NvbHVtbkV4aXN0KGF0dHJpYnV0ZURhdGE6IEF0dHJpYnV0ZURhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICBpZiAoYXR0cmlidXRlLm5hbWUgPT09IGF0dHJpYnV0ZURhdGEubmFtZSAmJiBhdHRyaWJ1dGUudGFibGVOYW1lID09PSBhdHRyaWJ1dGVEYXRhLnRhYmxlTmFtZSkge1xuICAgICAgICB0aGlzLl9pc0NvbHVtbkV4aXN0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gYXBwbHkgZmlsdGVyXG4gICAqL1xuICBnZXRDaGFydERhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5jb2x1bW5EYXRhKHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgfVxuICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuZ2V0TWF0cml4RGltZW5zaW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3Igc2VuZCBlbWFpbCB3aXRoIGV4Y2VsIHJlcG9ydCBhcyBhdHRhY2htZW50XG4gICAqL1xuXG4gIHNlbmRFbWFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlOb3RpZmljYXRpb24gPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuZGlzcGxheUVtYWlsVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICBjb25zdCBlbGVtZW50RmlsdGVyQW5kQ2F0ZWdvcnkgPSBuZXcgRWxlbWVudEZpbHRlcnMoKTtcbiAgICAgIGVsZW1lbnRGaWx0ZXJBbmRDYXRlZ29yeS5nbG9iYWxGaWx0ZXJzLmJhc2ljID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXIodGhpcy5fZWxlbWVudFNlcnZpY2UuZmlsdGVyc0R0by5iYXNpYyxTY29wZVR5cGUuZ2xvYmFsKTtcbiAgICAgIGVsZW1lbnRGaWx0ZXJBbmRDYXRlZ29yeS5nbG9iYWxGaWx0ZXJzLmNhdGVnb3J5ID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXJDYXRlZ29yeSh0aGlzLl9lbGVtZW50U2VydmljZS5maWx0ZXJzRHRvLmNhdGVnb3J5LFNjb3BlVHlwZS5nbG9iYWwpO1xuICAgICAgZWxlbWVudEZpbHRlckFuZENhdGVnb3J5LmxvY2FsRmlsdGVycy5iYXNpYyA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyKHRoaXMudGFidWxhclJlcG9ydC5maWx0ZXJzKTtcbiAgICAgIGVsZW1lbnRGaWx0ZXJBbmRDYXRlZ29yeS5sb2NhbEZpbHRlcnMuY2F0ZWdvcnkgPSB0aGlzLl9lbGVtZW50U2VydmljZS5nZXRWYWxpZEZpbHRlckNhdGVnb3J5KHRoaXMudGFidWxhclJlcG9ydC5jYXRlZ29yaWVzKTtcbiAgICAgIGNvbnN0IHNlbmRFbWFpbER0byA9IHtcbiAgICAgICAgZW1haWxJZDogdGhpcy5leHBvcnRGb3JtQnVpbGRlci52YWx1ZVsnZW1haWwnXSxcbiAgICAgICAgZWxlbWVudElkOiB0aGlzLnRhYnVsYXJSZXBvcnQuaWQsXG4gICAgICAgIEZpbHRlcnM6IGVsZW1lbnRGaWx0ZXJBbmRDYXRlZ29yeVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmlzRWRpdGFibGUgJiYgdGhpcy5fY29tbW9uU2VydmljZS5pc1JlcG9ydEJ1aWxkZXJEaXJ0eSkge1xuICAgICAgICB0aGlzLnNlbmRFeGNlbFJlcG9ydEV2ZW50LmVtaXQoeyBzZW5kRW1haWxEdG86IHNlbmRFbWFpbER0bywgY29tcG9uZW50OiB0aGlzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2Uuc2VuZEVtYWlsKHNlbmRFbWFpbER0bykudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5Tm90aWZpY2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBjbG9zZSB0aGUgZXhwb3J0IHRvIGVtYWlsIG1lbnUgb24gY2xpY2sgb2YgY2FuY2VsXG4gICAqL1xuICBjbG9zZUV4cG9ydE1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0TWVudS5jbG9zZU1lbnUoKTtcbiAgICB0aGlzLmRpc3BsYXlOb3RpZmljYXRpb24gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgVmFsaWRhdGlvbiBvZiBlbWFpbCBpZCBmb3IgZXhwb3J0IG9mIHRhYnVsYXIgcmVwb3J0XG4gICAqL1xuXG4gIGVtYWlsVmFsaWRhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMuZW1haWxQYXR0ZXJuKTtcbiAgICB0aGlzLmRpc3BsYXlFbWFpbFZhbGlkYXRpb25FcnJvciA9ICFyZWdleC50ZXN0KHRoaXMuZXhwb3J0Rm9ybUJ1aWxkZXIudmFsdWVbJ2VtYWlsJ10pO1xuICAgIGlmICh0aGlzLmRpc3BsYXlFbWFpbFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhpcy5kaXNwbGF5Tm90aWZpY2F0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBNb3VzZUV2ZW50XG4gICAqIEBwYXJhbSBudW1iZXJcbiAgICogQHBhcmFtIEF0dHJpYnV0ZURhdGFcbiAgICovXG4gIG9uQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNFZGl0YWJsZSAmJiAoW3RoaXMuc2NyZWVuVHlwZXMuY29udGFpbmVyRGFzaGJvYXJkLCB0aGlzLnNjcmVlblR5cGVzLmRyaWxsVGhyb3VnaF0uaW5jbHVkZXModGhpcy5zY3JlZW5UeXBlKSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBkYXNoYm9hcmRFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWxlbWVudEd1aWQpO1xuICAgIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0OiBET01SZWN0ID0gZGFzaGJvYXJkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueCA9IChldmVudC5jbGllbnRYIC0gZWxlbWVudENsaWVudFJlY3QueCkgKyAncHgnO1xuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55ID0gKGV2ZW50LmNsaWVudFkgLSBlbGVtZW50Q2xpZW50UmVjdC55KSArICdweCc7XG4gICAgdGhpcy5yZW1vdmVGcm9tRGFzaGJvYXJkTWVudS5tZW51LmZvY3VzRmlyc3RJdGVtKCdtb3VzZScpO1xuICAgIHRoaXMucmVtb3ZlRnJvbURhc2hib2FyZE1lbnUub3Blbk1lbnUoKTtcbiAgfVxuXG4gIHJlbW92ZUZyb21EYXNoYm9hcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fZGFzaGJvYXJkQnVpbGRlclNlcnZpY2UuZGVsZXRlRWxlbWVudC5lbWl0KHRoaXMudGFidWxhclJlcG9ydCk7XG4gIH1cblxuICBkcmlsbFRocm91Z2hDb250ZXh0KGV2ZW50OiBNb3VzZUV2ZW50LCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZURhdGEsIGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRHJpbGxUaHJvdWdoUGFnZXMoYXR0cmlidXRlKTtcbiAgICBpZiAoIXRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEF0dHJpYnV0ZSA9IGF0dHJpYnV0ZTtcbiAgICB0aGlzLmNyZWF0ZURyaWxsVGhyb3VnaEZpbHRlcihhdHRyaWJ1dGUuc2VyaWVzW2ldKTtcbiAgICBpZiAodGhpcy5zY3JlZW5UeXBlID09PSBTY3JlZW5UeXBlLmRyaWxsVGhyb3VnaCAmJiAhdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXRoaXMuaXNFZGl0YWJsZSAmJiAodGhpcy5zY3JlZW5UeXBlICE9PSBTY3JlZW5UeXBlLmRyaWxsVGhyb3VnaCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGRhc2hib2FyZEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lbGVtZW50R3VpZCk7XG4gICAgICBjb25zdCBlbGVtZW50Qm91bmRzOiBET01SZWN0ID0gZGFzaGJvYXJkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54ID0gKGV2ZW50LmNsaWVudFggLSBlbGVtZW50Qm91bmRzLngpICsgJ3B4JztcbiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55ID0gKGV2ZW50LmNsaWVudFkgLSBlbGVtZW50Qm91bmRzLnkpICsgJ3B4JztcbiAgICAgIHRoaXMuZHJpbGxUaHJvdWdoVHJpZ2dlci5tZW51LmZvY3VzRmlyc3RJdGVtKCdtb3VzZScpO1xuICAgICAgdGhpcy5kcmlsbFRocm91Z2hUcmlnZ2VyLm9wZW5NZW51KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnggPSBldmVudC5jbGllbnRYICsgJ3B4JztcbiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55ID0gZXZlbnQuY2xpZW50WSArICdweCc7XG4gICAgICB0aGlzLmRyaWxsVGhyb3VnaFRyaWdnZXIubWVudS5mb2N1c0ZpcnN0SXRlbSgnbW91c2UnKTtcbiAgICAgIHRoaXMuZHJpbGxUaHJvdWdoVHJpZ2dlci5vcGVuTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVkIGZpbHRlciBvYmplY3QgZm9yIGNyb3NzIGZpbHRlcmluZy5cbiAgICpcbiAgICogIEBwYXJhbSBDcm9zc0ZpbHRlckR0b1xuICAgKi9cbiAgY3JlYXRlRHJpbGxUaHJvdWdoRmlsdGVyKHNlcmllczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgYXhFeHByZXNzaW9uID0gbmV3IEF4RXhwcmVzc2lvbigpO1xuICAgIGF4RXhwcmVzc2lvbi5jb21wYXJpc29uT3BlcmF0b3IudGV4dCA9ICdJbic7XG4gICAgYXhFeHByZXNzaW9uLmNvbXBhcmlzb25PcGVyYXRvci52YWx1ZSA9ICdJTic7XG4gICAgYXhFeHByZXNzaW9uLnZhbHVlVHlwZSA9IDI7XG4gICAgYXhFeHByZXNzaW9uLmZpZWxkID0gbmV3IEF0dHJpYnV0ZSh0aGlzLmN1cnJlbnRBdHRyaWJ1dGUgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpO1xuICAgIGNvbnN0IGF4RXhwVGV4dExpc3QgPSBuZXcgQXhFeHBUZXh0TGlzdCgpO1xuICAgIGF4RXhwVGV4dExpc3QudmFsdWUucHVzaChzZXJpZXMpO1xuICAgIGF4RXhwVGV4dExpc3QuaXNTZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICBheEV4cHJlc3Npb24udmFsdWUgPSBheEV4cFRleHRMaXN0O1xuICAgIGNvbnN0IF9zZWFyY2hOb2RlcyA9IG5ldyBTZWFyY2hOb2RlKCk7XG4gICAgX3NlYXJjaE5vZGVzLmV4cHJlc3Npb24gPSBheEV4cHJlc3Npb247XG4gICAgdGhpcy5kcmlsbFRocm91Z2hGaWx0ZXIgPSBuZXcgQXhGaWx0ZXIoKTtcbiAgICB0aGlzLmRyaWxsVGhyb3VnaEZpbHRlci5zZWFyY2hOb2Rlcy5wdXNoKF9zZWFyY2hOb2Rlcyk7XG4gICAgdGhpcy5kcmlsbFRocm91Z2hGaWx0ZXIuYXBwVmVyc2lvbklkID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgb24gcGFnZSBuYW1lIGNsaWNrZWQgb24gZHJvcGRvd24gb3B0aW9ucyBvZiBkcmlsbCB0aHJvdWdoIHBhZ2VzXG4gICAqXG4gICAqIEBwYXJhbSBwYWdlXG4gICAqL1xuICBwYWdlQ2xpY2socGFnZTogUGFnZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNjcmVlblR5cGUgIT09IFNjcmVlblR5cGUuZHJpbGxUaHJvdWdoKSB7XG4gICAgICBpZiAodGhpcy5kcmlsbFRocm91Z2hQYXJlbnRUeXBlID8gdGhpcy5kcmlsbFRocm91Z2hQYXJlbnRUeXBlID09PSBTY3JlZW5UeXBlLnJlcG9ydEJ1aWxkZXIgOiB0aGlzLmlzRWRpdGFibGUpIHtcbiAgICAgICAgdGhpcy5fZHJpbGxUaHJvdWdoU2VydmljZS5zZXRQYXJlbnREYXRhKHRoaXMucmVwb3J0SWQsIHRoaXMuX3JlcG9ydEJ1aWxkZXJNYXN0ZXJTZXJ2aWNlLnJlcG9ydC5uYW1lLCB0aGlzLl9yb3V0ZXIudXJsKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRHJpbGxUaHJvdWdoKHBhZ2UpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2Rhc2hib2FyZEJ1aWxkZXJTZXJ2aWNlLmRhc2hib2FyZCQucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKS5zdWJzY3JpYmUoKGRhc2hib2FyZCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RyaWxsVGhyb3VnaFNlcnZpY2Uuc2V0UGFyZW50RGF0YSh0aGlzLnJlcG9ydElkLCBkYXNoYm9hcmQubmFtZSwgdGhpcy5fcm91dGVyLnVybCk7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRHJpbGxUaHJvdWdoKHBhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRHJpbGxUaHJvdWdoKHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byBkcmlsbCB0aHJvdWdoIGNvbXBvbmVudCB3aXRoIHBhZ2UgaWQgYXMgcm91dGUgcGFyYW1zXG4gICAqIENoZWNrcyB0aGUgcGFyZW50IFVSTCBpZiBpdCBpcyBhbHJlYWR5IGV4aXN0cyBvciBub3RcbiAgICpcbiAgICogQHBhcmFtIHBhZ2VcbiAgICovXG4gIG5hdmlnYXRlVG9EcmlsbFRocm91Z2gocGFnZTogUGFnZSk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudFVybDogc3RyaW5nID0gdGhpcy5fZHJpbGxUaHJvdWdoU2VydmljZS5nZXRQYXJlbnREYXRhKCkudXJsO1xuICAgIHRoaXMuX2RyaWxsVGhyb3VnaFNlcnZpY2UuZHJpbGxQYWdlKHBhZ2UsIHRoaXMuZHJpbGxUaHJvdWdoRmlsdGVyKTtcbiAgICBpZiAoIXBhcmVudFVybCkge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFt0aGlzLl9yb3V0ZXIudXJsICsgJy9kcmlsbC10aHJvdWdoLycgKyBwYWdlLmlkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbcGFyZW50VXJsLCAnZHJpbGwtdGhyb3VnaCcsIHBhZ2UuaWRdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHBhZ2luYXRvciBldmVudCB0byBjaGFuZ2UgZGF0YSBhcyBwZXIgcGFnZSBpbmRleCBhbmQgcGFnZXNpemVcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICAgIGhhbmRsZVBhZ2VFdmVudChldmVudDogUGFnZUV2ZW50KTogdm9pZHtcbiAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZUluZGV4PWV2ZW50LnBhZ2VJbmRleDtcbiAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZVNpemU9ZXZlbnQucGFnZVNpemU7XG4gICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZD1mYWxzZTtcbiAgICB0aGlzLmdldE1hdHJpeERpbWVuc2lvbigpO1xuICB9XG4gICAgLyoqXG4gICAgICogQXBwbHkgbG9jYWwgZmlsdGVyLlxuICAgICAqL1xuICAgIGFwcGx5TG9jYWxGaWx0ZXIoKTogdm9pZHtcbiAgICAgICAgdGhpcy5nZXRDaGFydERhdGEoKTtcbiAgICB9XG5cbn1cbiIsIjxkaXYgKGNvbnRleHRtZW51KT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50KTtcIiBjbGFzcz1cImgtZnVsbCBtaW4taC1mdWxsIG1heC1oLWZ1bGxcIj5cbiAgPCEtLVRpdGxlIG9mIHRoZSB0YWJsZS0tPlxuICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50OyBkaXNwbGF5OiBmbGV4O1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cbiAgICAgIDxkaXYgKm5nSWY9J3RhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoIT0wJyBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnRpdGxlLnRleHRDb2xvclwiXG4gICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnRpdGxlLnRleHRTaXplXCJcbiAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS50aXRsZS50ZXh0U3R5bGVcIlxuICAgICAgICBbc3R5bGUuZm9udC13ZWlnaHRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnRpdGxlLmZvbnRTdHlsZT8uZm9udFdlaWdodCB8fCAnbm9ybWFsJ1wiXG4gICAgICAgIFtzdHlsZS5mb250LXN0eWxlXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS50aXRsZS5mb250U3R5bGU/LmlzSXRhbGljRm9udCA/ICdpdGFsaWMnIDogJ25vcm1hbCdcIlxuICAgICAgICBbc3R5bGUudGV4dC1kZWNvcmF0aW9uXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS50aXRsZS5mb250U3R5bGU/LnRleHREZWNvcmF0aW9uIHx8ICdub25lJ1wiXG4gICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS50aXRsZS5wb3NpdGlvbiB8fCAnbGVmdCdcIiBbc3R5bGUucGFkZGluZ109XCIgJzAuNzVyZW0gMC43NXJlbScgXCI+XG4gICAgICAgIHt7dGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnRpdGxlLnRleHR9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXNzPVwiY29sLTJcIj5cbiAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aD4wXCIgY2xhc3M9XCJleHBvcnQtYnRuIGljb24tYnRuXCIgbWF0LWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5Tm90aWZpY2F0aW9uPWZhbHNlXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImJlZm9yZU1lbnVcIj48bWF0LWljb24gbWF0VG9vbHRpcD1cIkV4cG9ydCBEYXRhXCJcbiAgICAgICAgICAgIHN2Z0ljb249XCJheG9fZXhwb3J0XCI+PC9tYXQtaWNvbj48L2J1dHRvbj5cblxuICAgICAgICA8bWF0LW1lbnUgI2JlZm9yZU1lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgICAgPGRpdiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIGNsYXNzPVwic2VuZC1leGNlbC1yZXBvcnQtZm9ybVwiPlxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJleHBvcnRGb3JtQnVpbGRlclwiPlxuICAgICAgICAgICAgICA8ZGl2PlhMU1g8L2Rpdj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdC1tZW51LWl0ZW0gdHlwZT1cInRleHRcIiBjbGFzcz1cInJlcG9ydC14c2x4LWVtYWlsXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImVtYWlsVmFsaWRhdGUoKVwiPlxuICAgICAgICAgICAgICA8cCAqbmdJZj1cImRpc3BsYXlFbWFpbFZhbGlkYXRpb25FcnJvclwiIGNsYXNzPVwiZW1haWwtc2VuZC1lbWFpbC1lcnJvclwiPlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgZW1haWwgSUQ8L3A+XG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwiZGlzcGxheU5vdGlmaWNhdGlvblwiIGNsYXNzPVwiZW1haWwtc2VuZC1ub3RpZmljYXRpb25cIj5FeHBvcnQgaXMgaW4gcHJvZ3Jlc3MuIFlvdSB3aWxsIHJlY2VpdmUgdGhlXG4gICAgICAgICAgICAgICAgcmVwb3J0IG9uIHlvdXIgZW1haWwgb25jZSBjb21wbGV0ZWQuPC9wPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VuZC1leGNlbC1yZXBvcnQtZm9ybS1idG5cIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJjYW5jZWwtYnRuIGJ0biB0ZXh0LXdoaXRlXCIgKGNsaWNrKT1cImNsb3NlRXhwb3J0TWVudSgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwic2VuZC1idG4gYnRuXCIgKGNsaWNrKT1cInNlbmRFbWFpbCgpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNwbGF5RW1haWxWYWxpZGF0aW9uRXJyb3JcIj5FeHBvcnQgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuXG4gIDwhLS0gRmlsdGVyIENvbnRhaW5lciAtLT5cbiAgPGRpdiAqbmdJZj1cImlzRWRpdGFibGUgfHwgdGFidWxhclJlcG9ydC5maWx0ZXJzLmxlbmd0aD4wXCIgW25nQ2xhc3NdPVwieydqdXN0aWZ5LWVuZCcgOiB0YWJ1bGFyUmVwb3J0LmZpbHRlcnMubGVuZ3RoPDF9XCJcbiAgICBjbGFzcz1cImZpbHRlci1kaXYgcHgtMyBoLTExXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYnVsYXItY2hhcnQtZmlsdGVyXCIgW25nQ2xhc3NdPVwieydkYXNoYm9hcmQtdGFidWxhci1maWx0ZXInIDogIWlzRWRpdGFibGV9XCJcbiAgICAgICpuZ0lmPVwiaXNFZGl0YWJsZSB8fCB0YWJ1bGFyUmVwb3J0LmZpbHRlcnMubGVuZ3RoPjAgfHwgdGFidWxhclJlcG9ydC5jYXRlZ29yaWVzLmxlbmd0aD4wXCI+XG4gICAgICA8IS0tIDxjaGFydC1maWx0ZXJcbiAgICAgICAgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgW2ZpbHRlcnNdPVwidGFidWxhclJlcG9ydC5maWx0ZXJzXCJcbiAgICAgICAgW2NhdGVnb3JpZXNdPVwidGFidWxhclJlcG9ydC5jYXRlZ29yaWVzXCJcbiAgICAgICAgW2lzRWRpdGFibGVdID0gXCJpc0VkaXRhYmxlXCJcbiAgICAgICAgW2ZpbHRlclNvdXJjZUVsZW1lbnRUeXBlXT0gIFwiZmlsdGVyU291cmNlRWxlbWVudFR5cGVzLnRhYnVsYXJcIlxuICAgICAgICBbY2hhcnRSZWZdPVwiY29tcG9uZW50UmVmXCI+XG4gICAgICA8L2NoYXJ0LWZpbHRlcj4gLS0+XG4gICAgICA8bGliLXJlcG9ydC1maWx0ZXIgW3RhYnVsYXJSZXBvcnRdPVwidGFidWxhclJlcG9ydFwiW2ZpbHRlcnNdPVwidGFidWxhclJlcG9ydC5maWx0ZXJzXCIgW2NhdGVnb3JpZXNdPVwidGFidWxhclJlcG9ydC5jYXRlZ29yaWVzXCIgW3JlcG9ydElkXT1cInJlcG9ydElkXCJcbiAgICAgICAgW3NjcmVlblR5cGVdPVwic2NyZWVuVHlwZVwiIFtkYXRhTW9kZWxdPVwiZGF0YU1vZGVsXCIgW2lzRWRpdGFibGVdPVwiaXNFZGl0YWJsZVwiIFthcHBWZXJzaW9uXT1cImFwcFZlcnNpb25JZFwiXG4gICAgICAgIFtmaWx0ZXJTb3VyY2VFbGVtZW50VHlwZV09XCJmaWx0ZXJTb3VyY2VFbGVtZW50VHlwZXMudGFidWxhclwiIChhcHBseUZpbHRlckV2ZW50KT1cImFwcGx5TG9jYWxGaWx0ZXIoKVwiPlxuICAgICAgPC9saWItcmVwb3J0LWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm5vLWNvbHVtbi1kcm9wLWhlcmVcIiAqbmdJZj0ndGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGg9PT0wJz5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRhYmxlLXZpZXctaWNvblwiPnRhYmxlX3ZpZXc8L21hdC1pY29uPlxuICAgICAgPHAgY2xhc3M9XCJmb250LXNpemUgbS0wIG5vLWNvbHVtbi10ZXh0XCI+Tm8gY29sdW1ucyBoYXZlIGJlZW4gZHJvcHBlZCB5ZXQgITwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgI3JlbW92ZUZyb21EYXNoYm9hcmRNZW51IFtzdHlsZS5sZWZ0XT1cImNvbnRleHRNZW51UG9zaXRpb24ueFwiIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIiAqbmdJZj1cInNjcmVlblR5cGVzLmRhc2hib2FyZEJ1aWxkZXIgPT09IHNjcmVlblR5cGVcIlxuICAgIGNsYXNzPVwiZHJpbGx0aHJvdWdoLW1lbnUtdHJpZ2dlclwiPlxuICA8L2Rpdj5cbiAgPCEtLSBNYXQgTWVudSB0cmlnZ2VyIGZvciB0YWJsZSBjb2x1bW5zLS0+XG4gIDxtYXQtbWVudSAjY29udGV4dE1lbnU9XCJtYXRNZW51XCI+XG4gICAgPGRpdiBpZD1cInRhYmxlLW1lbnVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJyZW1vdmVGcm9tRGFzaGJvYXJkKClcIj5SZW1vdmUgRnJvbSBEYXNoYm9hcmQ8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LW1lbnU+XG4gIFxuXG4gIDxsaWItZGV0YWlsLXZpZXdcbiAgKm5nSWY9J3RhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MCAmJiB0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aD09PTAgJ1xuICBbeDFJbWFnZU1lZGlhVXJsXT1cIngxSW1hZ2VNZWRpYVVybFwiXG4gIFt0YWJ1bGFyUmVwb3J0XT1cInRhYnVsYXJSZXBvcnRcIlxuICBbaXNFZGl0YWJsZV09XCJpc0VkaXRhYmxlXCJcbiAgW2VsZW1lbnRHdWlkXT1cImVsZW1lbnRHdWlkXCJcbiAgW3NjcmVlblR5cGVdPVwic2NyZWVuVHlwZVwiXG4gIFtkcmlsbFRocm91Z2hGaWx0ZXJJbnB1dF09XCJkcmlsbFRocm91Z2hGaWx0ZXJJbnB1dFwiXG4gIFtkcmlsbFRocm91Z2hQYXJlbnRUeXBlXT1cImRyaWxsVGhyb3VnaFBhcmVudFR5cGVcIlxuICBbcGFyZW50UmVmXT1cImNvbXBvbmVudFJlZlwiXG4gIFtyZXBvcnRJZF09XCJyZXBvcnRJZFwiXG4gIFthcHBWZXJzaW9uSWRdPVwiYXBwVmVyc2lvbklkXCJcbiAgW3gxTWVkaWFVcmxdPVwieDFNZWRpYVVybFwiXG4gID5cbiAgPC9saWItZGV0YWlsLXZpZXc+XG4gIDxsaWItcm93LWdyb3VwLXZpZXcgKm5nSWY9J3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPjAgJiYgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0wICdcbiAgICBbeDFJbWFnZU1lZGlhVXJsXT1cIngxSW1hZ2VNZWRpYVVybFwiXG4gICAgW3RhYnVsYXJSZXBvcnRdPVwidGFidWxhclJlcG9ydFwiXG4gICAgW2lzRWRpdGFibGVdPVwiaXNFZGl0YWJsZVwiXG4gICAgW2VsZW1lbnRHdWlkXT1cImVsZW1lbnRHdWlkXCJcbiAgICBbc2NyZWVuVHlwZV09XCJzY3JlZW5UeXBlXCJcbiAgICBbZHJpbGxUaHJvdWdoRmlsdGVySW5wdXRdPVwiZHJpbGxUaHJvdWdoRmlsdGVySW5wdXRcIlxuICAgIFtkcmlsbFRocm91Z2hQYXJlbnRUeXBlXT1cImRyaWxsVGhyb3VnaFBhcmVudFR5cGVcIlxuICAgIFtyZXBvcnRJZF09XCJyZXBvcnRJZFwiXG4gICAgW3BhcmVudFJlZl09XCJjb21wb25lbnRSZWZcIj5cbiAgPC9saWItcm93LWdyb3VwLXZpZXc+XG5cbiAgPGxpYi1jb2x1bW4tZ3JvdXAtdmlldyAqbmdJZj0ndGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg+MCAnXG4gICAgW3gxSW1hZ2VNZWRpYVVybF09XCJ4MUltYWdlTWVkaWFVcmxcIlxuICAgIFt0YWJ1bGFyUmVwb3J0XT1cInRhYnVsYXJSZXBvcnRcIlxuICAgIFtpc0VkaXRhYmxlXT1cImlzRWRpdGFibGVcIlxuICAgIFtlbGVtZW50R3VpZF09XCJlbGVtZW50R3VpZFwiXG4gICAgW3NjcmVlblR5cGVdPVwic2NyZWVuVHlwZVwiXG4gICAgW2RyaWxsVGhyb3VnaEZpbHRlcklucHV0XT1cImRyaWxsVGhyb3VnaEZpbHRlcklucHV0XCJcbiAgICBbZHJpbGxUaHJvdWdoUGFyZW50VHlwZV09XCJkcmlsbFRocm91Z2hQYXJlbnRUeXBlXCJcbiAgICBbcmVwb3J0SWRdPVwicmVwb3J0SWRcIlxuICAgIFtwYXJlbnRSZWZdPVwiY29tcG9uZW50UmVmXCI+XG4gIDwvbGliLWNvbHVtbi1ncm91cC12aWV3PlxuXG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCBcIj5cbjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zIGRlYXRpbC1ncm91cC10YWJsZS1wYWdpbmF0b3JcIiAqbmdJZj0ndGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0wJz5cbiAgPG1hdC1wYWdpbmF0b3IgW2Rpc2FibGVkXT1cImlzRGF0YUxvYWRpbmdcIiAocGFnZSk9XCJoYW5kbGVQYWdlRXZlbnQoJGV2ZW50KVwiIFtsZW5ndGhdPVwidGFidWxhclJlcG9ydC5wYWdlTGVuZ3RoXCIgW3BhZ2VTaXplXT1cInRhYnVsYXJSZXBvcnQucGFnZVNpemVcIlxuICBbcGFnZUluZGV4XT1cInRhYnVsYXJSZXBvcnQucGFnZUluZGV4XCIgW3BhZ2VTaXplT3B0aW9uc109XCJbMTAsIDI1LCA1MCwgMTAwXVwiIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZVwiIGNsYXNzPVwibWF0LXBhZ2luYXRvciBmbGV4IGp1c3RpZnktZW5kIHctZnVsbFwiPlxuICA8L21hdC1wYWdpbmF0b3I+XG48L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aCE9PTBcIj5cbiAgPGFwcC1naG9zdC1sb2FkZXIgW2VsZW1lbnRUeXBlXT1cIkdob3N0TG9hZGVyVHlwZS5QYWdpbmF0aW9uVmlld0xvYWRlclwiIGNsYXNzPVwidGFidWxhci1wYWdpbmF0aW9uLWdob3N0LWxvYWRlclwiPjwvYXBwLWdob3N0LWxvYWRlcj5cbjwvbmctY29udGFpbmVyPlxuPGRpdiAjZHJpbGxUaG9ydWdoTWVudVRyaWdnZXIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcbiAgICBbc3R5bGUudG9wXT1cImNvbnRleHRNZW51UG9zaXRpb24ueVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJkcmlsbFRocm91Z2hNZW51XCIgY2xhc3M9XCJkcmlsbHRocm91Z2gtbWVudS10cmlnZ2VyXCI+PC9kaXY+XG48IS0tIE1hdCBNZW51IHRyaWdnZXIgZm9yIHRhYmxlIGNlbGxzLS0+XG48bWF0LW1lbnUgI2RyaWxsVGhyb3VnaE1lbnU9XCJtYXRNZW51XCI+XG4gIDxkaXYgaWQ9XCJ0YWJsZS1tZW51XCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwicmVwb3J0RGF0YVwiPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJkcmlsbFRocm91Z2hQYWdlc1wiPkRyaWxsIFRocm91Z2g8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cInNjcmVlblR5cGVzLmRhc2hib2FyZEJ1aWxkZXIgPT09IHNjcmVlblR5cGVcIiAoY2xpY2spPVwicmVtb3ZlRnJvbURhc2hib2FyZCgpXCI+UmVtb3ZlIEZyb20gRGFzaGJvYXJkPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuPG1hdC1tZW51ICNkcmlsbFRocm91Z2hQYWdlcz1cIm1hdE1lbnVcIj5cbiAgPGRpdiBpZD1cInRhYmxlLW1lbnVcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJyZXBvcnREYXRhXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cIiBsZXQgcGFnZSBvZiBwYWdlc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT0ncGFnZUNsaWNrKHBhZ2UpJz4ge3twYWdlLm5hbWV9fTwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuIl19
|
|
774
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2VubGlnaHRlbi1saWIvcmVwb3J0L3RhYnVsYXItcmVwb3J0L3RhYnVsYXIvdGFidWxhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2VubGlnaHRlbi1saWIvcmVwb3J0L3RhYnVsYXItcmVwb3J0L3RhYnVsYXIvdGFidWxhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFrQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQWtCLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMs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QixFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ0UsbUJBQW1CO2tCQUFqRyxTQUFTO21CQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ3BFLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSZXBvcnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24tdXRpbHMvcmVwb3J0JztcbmltcG9ydCB7IENyb3NzRmlsdGVyRHRvLCBFbGVtZW50RmlsdGVycywgRWxlbWVudHNEdG8gfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24tZHRvL2VsZW1lbnRzLWR0byc7XG5pbXBvcnQgeyBGaWVsZHNMaXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2ZpZWxkLWxpc3QtbGliL2ZpZWxkcy1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0cmlidXRlRGF0YSB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9hdHRyaWJ1dGUtZGF0YSc7XG5pbXBvcnQgeyBQYWdlIH0gZnJvbSAnLi4vLi4vZ3JhcGhpY2FsLXJlcG9ydC9wYWdlL3BhZ2UnO1xuaW1wb3J0IHsgUmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXBvcnQtYnVpbGRlci1tYXN0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJVGFidWxhclJlcG9ydENvbXBvbmVudCB9IGZyb20gJy4uL2l0YWJ1bGFyLXJlcG9ydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFidWxhclJlcG9ydCB9IGZyb20gJy4uL3RhYnVsYXItcmVwb3J0JztcbmltcG9ydCB7IEVsZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWxlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXJTb3VyY2VFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlcnMvY2hhcnQtZmlsdGVyLXR5cGUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGFidWxhclJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi90YWJ1bGFyLXJlcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NvcGVUeXBlLCBTY3JlZW5UeXBlIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVycy9jb25kaXRpb24tdHlwZSc7XG5pbXBvcnQgeyBBeEV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9heC1leHByZXNzaW9uL2F4LWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1tb2RlbC9hdHRyaWJ1dGUnO1xuaW1wb3J0IHsgQXhFeHBUZXh0TGlzdCB9IGZyb20gJy4uLy4uLy4uL2F4LWV4cHJlc3Npb24vYXgtZXhwLXRleHQtbGlzdCc7XG5pbXBvcnQgeyBTZWFyY2hOb2RlIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVycy9zZWFyY2gtbm9kZSc7XG5pbXBvcnQgeyBBeEZpbHRlciB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlcnMvYXgtZmlsdGVyJztcbmltcG9ydCB7IERhc2hib2FyZEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGFzaGJvYXJkLWxpYi9kYXNoYm9hcmQtYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERyaWxsVGhyb3VnaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kcmlsbC10aHJvdWdoL2RyaWxsLXRocm91Z2guc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXIudHlwZXMnO1xuaW1wb3J0IHsgVXNlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBHaG9zdExvYWRlclR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9naG9zdC1sb2FkZXIvZ2hvc3QtbG9hZGVyLmNvbXBvbmVudCc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICd0YWJ1bGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnVsYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJ1bGFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBUYWJ1bGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBJVGFidWxhclJlcG9ydENvbXBvbmVudCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwYWdlOiBQYWdlO1xuICBASW5wdXQoKSB0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0O1xuICBASW5wdXQoKSBpc0VkaXRhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSB1c2VyRW1haWw6IHN0cmluZztcbiAgQE91dHB1dCgpIHNlbmRFeGNlbFJlcG9ydEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHgxSW1hZ2VNZWRpYVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBzY3JlZW5UeXBlOiBTY3JlZW5UeXBlO1xuICBASW5wdXQoKSBkcmlsbFRocm91Z2hQYXJlbnRUeXBlOiBTY3JlZW5UeXBlO1xuICBASW5wdXQoKSBkcmlsbFRocm91Z2hGaWx0ZXJJbnB1dDogQXhGaWx0ZXI7XG4gIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpIGNvbnRleHRNZW51OiBNYXRNZW51VHJpZ2dlcjtcbiAgQFZpZXdDaGlsZCgncmVtb3ZlRnJvbURhc2hib2FyZE1lbnUnLCB7IHJlYWQ6IE1hdE1lbnVUcmlnZ2VyLCBzdGF0aWM6IGZhbHNlIH0pIHJlbW92ZUZyb21EYXNoYm9hcmRNZW51OiBNYXRNZW51VHJpZ2dlcjtcbiAgQFZpZXdDaGlsZCgnZHJpbGxUaG9ydWdoTWVudVRyaWdnZXInLCB7IHJlYWQ6IE1hdE1lbnVUcmlnZ2VyLCBzdGF0aWM6IGZhbHNlIH0pIGRyaWxsVGhyb3VnaFRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xuICBASW5wdXQoKSB4MU1lZGlhVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcFZlcnNpb25JZDogbnVtYmVyO1xuICBHaG9zdExvYWRlclR5cGUgPSBHaG9zdExvYWRlclR5cGU7XG4gIHNob3dHaG9zdExvYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29sdW1uRGF0YTogYW55O1xuICByZXBvcnRJZDogbnVtYmVyO1xuICBjb250ZXh0TWVudVBvc2l0aW9uID0geyB4OiAnMHB4JywgeTogJzBweCcgfTtcbiAgY3VycmVudEluZGV4OiBudW1iZXI7XG4gIGlzRGlydHk6IGJvb2xlYW47XG4gIHJlcG9ydERpcnR5OiBhbnk7XG4gIHJlcG9ydDogUmVwb3J0O1xuICBfaXNDb2x1bW5FeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb21wb25lbnRSZWY6IGFueTtcbiAgZXhwb3J0Rm9ybUJ1aWxkZXI6IEZvcm1Hcm91cDtcbiAgZGlzcGxheU5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBlbWFpbFBhdHRlcm46IHN0cmluZyA9ICdeW2EtejAtOS5fJSstXStAW2EtejAtOS4tXStcXC5bYS16XXsyLDR9JCc7XG4gIGRpc3BsYXlFbWFpbFZhbGlkYXRpb25FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZERhdGFQb2ludHM6IEFycmF5PG51bWJlcj4gPSBbXTsvLyBIb2xkcyB0aGUgYWxsIHNlbGVjdGVkIHBvaW50cy5cbiAgZWxlbWVudEd1aWQ6IHN0cmluZztcbiAgZHJpbGxUaHJvdWdoRmlsdGVyOiBBeEZpbHRlcjtcbiAgcGFnZXM6IEFycmF5PFBhZ2U+ID0gW107XG4gIGN1cnJlbnRBdHRyaWJ1dGU6IEF0dHJpYnV0ZURhdGE7XG4gIHVzZXI6IFVzZXI7XG4gIGlzRGF0YUxvYWRpbmc6IGJvb2xlYW47XG4gIC8qXG4gICAqIFN1YmplY3Qgb2JqZWN0IHdoaWNoIGhlbHBzIHVuc3Vic2NyaWJlIGFsbCB0aGUgc3Vic2NyaWJlZCBvYmplY3RzIGluIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZmllbGRzTGlzdFNlcnZpY2U6IEZpZWxkc0xpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JlcG9ydEJ1aWxkZXJNYXN0ZXJTZXJ2aWNlOiBSZXBvcnRCdWlsZGVyTWFzdGVyU2VydmljZSxcbiAgICBwcml2YXRlIF9lbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIF90YWJ1bGFyUmVwb3J0U2VydmljZTogVGFidWxhclJlcG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgX3VzZXJEYXRhU2VydmljZTogVXNlckRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9kYXNoYm9hcmRCdWlsZGVyU2VydmljZTogRGFzaGJvYXJkQnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZHJpbGxUaHJvdWdoU2VydmljZTogRHJpbGxUaHJvdWdoU2VydmljZSxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlclxuXG4gICkgeyB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJTb3VyY2VFbGVtZW50VHlwZXMoKTogdHlwZW9mIEZpbHRlclNvdXJjZUVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRmlsdGVyU291cmNlRWxlbWVudFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjcmVlblR5cGVzKCk6IHR5cGVvZiBTY3JlZW5UeXBlIHtcbiAgICByZXR1cm4gU2NyZWVuVHlwZTtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5wYWdlLmVsZW1lbnRzWzBdIGFzIFRhYnVsYXJSZXBvcnQ7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVycygpO1xuICAgIHRoaXMuaXNFZGl0YWJsZSA9ICh0aGlzLnNjcmVlblR5cGUgIT09IFNjcmVlblR5cGUuZHJpbGxUaHJvdWdoKSAmJiAodGhpcy5zY3JlZW5UeXBlICE9PSBTY3JlZW5UeXBlLmRhc2hib2FyZEJ1aWxkZXIpICYmICh0aGlzLnNjcmVlblR5cGUgIT09IFNjcmVlblR5cGUuY29udGFpbmVyRGFzaGJvYXJkKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXM7XG4gICAgdGhpcy5yZXBvcnQgPSB0aGlzLl9yZXBvcnRCdWlsZGVyTWFzdGVyU2VydmljZS5yZXBvcnQ7XG4gICAgdGhpcy5yZXBvcnRJZCA9IHRoaXMucmVwb3J0Py5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBkZXN0cm95XG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcnMgZm9yIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHN1YnNjcmliZXJzKCk6IHZvaWQge1xuICAgIC8vIFN1YnNjcmliZSB0byB1c2VyIGNoYW5nZXNcbiAgICB0aGlzLl91c2VyRGF0YVNlcnZpY2UudXNlckRldGFpbHMkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxuICAgICAgLnN1YnNjcmliZSgodXNlcjogVXNlcikgPT4ge1xuICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZXhwb3J0Rm9ybUJ1aWxkZXIgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBlbWFpbDogW3RoaXMudXNlckVtYWlsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF1dXG4gICAgfSk7XG5cblxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcztcbiAgICB0aGlzLnJlcG9ydCA9IHRoaXMuX3JlcG9ydEJ1aWxkZXJNYXN0ZXJTZXJ2aWNlLnJlcG9ydDtcbiAgICAvKndoZW5ldmVyIHdlIGNoYW5nZSB0aGUgZmlsdGVycyB3ZSBnb3QgY2FsbCBiYWNrIGZyb20gdGhpcyBzdWJzY3JpYmUgKi9cbiAgICB0aGlzLl9lbGVtZW50U2VydmljZS5yZWZyZXNoRGF0YUV2ZW50JFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbDogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAodmFsICYmIHRoaXMudGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLmNvbHVtbkRhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5wYWdlSW5kZXg9MDtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZUxlbmd0aD0wO1xuICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQ9ZmFsc2U7XG4gICAgICAgICAgdGhpcy5nZXRNYXRyaXhEaW1lbnNpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgIC8qd2hlbiB3ZSBjbGljayBvbiBiYXIgY2hhcnQgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIGZyb20gdGhpcyBzdWJzY3JpYmVyKi9cbiAgICB0aGlzLl9lbGVtZW50U2VydmljZS5jcm9zc0ZpbHRlckV2ZW50LnN1YnNjcmliZSgoY3Jvc3NGaWx0ZXI6IENyb3NzRmlsdGVyRHRvKSA9PiB7XG4gICAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0Lmd1aWQgIT09IGNyb3NzRmlsdGVyLmVsZW1lbnRHdWlkKSB7XG4gICAgICAgIGlmIChjcm9zc0ZpbHRlci5yZXNldEZpbHRlcikgeyB0aGlzLmdldE1hdHJpeERpbWVuc2lvbigpOyB9XG4gICAgICAgIGVsc2UgeyB0aGlzLmNyZWF0ZUNyb3NzRmlsdGVyKGNyb3NzRmlsdGVyKTsgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBnZXRQYWdlTGlzdCgpOiB2b2lkIHtcbiAgICAvLyBHZXQgcGFnZXNsaXN0XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRQYWdlTGlzdCh0aGlzLmFwcFZlcnNpb25JZCk7XG4gIH1cblxuICBmaWx0ZXJEcmlsbFRocm91Z2hQYWdlcyhhdHRyaWJ1dGU6IEF0dHJpYnV0ZURhdGEpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnBhZ2VMaXN0JC5zdWJzY3JpYmUoKHBhZ2VzOiBQYWdlW10pID0+IHtcbiAgICAgIHRoaXMucGFnZXMgPSBbXTtcbiAgICAgIHBhZ2VzPy5mb3JFYWNoKChfcGFnZSkgPT4ge1xuICAgICAgICBfcGFnZT8uZHJpbGxEYXRhPy5mb3JFYWNoKChkcmlsbERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZHJpbGxEYXRhLmNvbHVtbk5hbWUgPT09IGF0dHJpYnV0ZS5jb2x1bW5OYW1lICYmIGRyaWxsRGF0YS50YWJsZU5hbWUgPT09IGF0dHJpYnV0ZS50YWJsZU5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXMucHVzaChfcGFnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCh0aGlzLnNjcmVlblR5cGUgPT09IFNjcmVlblR5cGUucmVwb3J0QnVpbGRlcikgfHwgKHRoaXMuc2NyZWVuVHlwZSA9PT0gU2NyZWVuVHlwZS5kcmlsbFRocm91Z2gpKSB7XG4gICAgICAgIHRoaXMucGFnZXMgPSB0aGlzLnBhZ2VzLmZpbHRlcihwID0+IHAuaWQgIT09IHRoaXMucGFnZS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRNYXRyaXhEaW1lbnNpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IEVsZW1lbnRzRHRvKHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgICBkYXRhLmZpbHRlcnMubG9jYWxGaWx0ZXJzLmJhc2ljID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXIodGhpcy50YWJ1bGFyUmVwb3J0LmZpbHRlcnMpO1xuICAgICAgZGF0YS5maWx0ZXJzLmxvY2FsRmlsdGVycy5jYXRlZ29yeSA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyQ2F0ZWdvcnkodGhpcy50YWJ1bGFyUmVwb3J0LmNhdGVnb3JpZXMpO1xuICAgICAgZGF0YS5maWx0ZXJzLmdsb2JhbEZpbHRlcnMuYmFzaWMgPSB0aGlzLl9lbGVtZW50U2VydmljZS5nZXRWYWxpZEZpbHRlcih0aGlzLl9lbGVtZW50U2VydmljZS5maWx0ZXJzRHRvLmJhc2ljLCBTY29wZVR5cGUuZ2xvYmFsKTtcbiAgICAgIGRhdGEuZmlsdGVycy5nbG9iYWxGaWx0ZXJzLmNhdGVnb3J5ID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXJDYXRlZ29yeSh0aGlzLl9lbGVtZW50U2VydmljZS5maWx0ZXJzRHRvLmNhdGVnb3J5LCBTY29wZVR5cGUuZ2xvYmFsKTtcbiAgICAgIGRhdGEucmVwb3J0SWQgPSB0aGlzLnJlcG9ydElkO1xuICAgICAgZGF0YS50eXBlID0gJ3RhYnVsYXItcmVwb3J0JzsgLy8gdXNlIGVudW1cbiAgICAgIGRhdGEucGFnZUluZGV4ID0gdGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD4wPzA6dGhpcy50YWJ1bGFyUmVwb3J0LnBhZ2VJbmRleDtcbiAgICAgIGRhdGEucGFnZVNpemUgPSB0aGlzLnRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjA/MDp0aGlzLnRhYnVsYXJSZXBvcnQucGFnZVNpemU7XG4gICAgICBkYXRhLnBhZ2VMZW5ndGg9dGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD4wPzA6dGhpcy50YWJ1bGFyUmVwb3J0LnBhZ2VMZW5ndGg7XG4gICAgICBkYXRhLm9yZGVyQnkgPSB0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXM7XG4gICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fZmllbGRzTGlzdFNlcnZpY2UuZ2V0TWF0cml4RGF0YShkYXRhKS50aGVuKChlbnRpdGllc0F0dHJpYnV0ZSkgPT4ge1xuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVudGl0aWVzQXR0cmlidXRlICE9IG51bGwpIHtcbiAgICAgICAgICBlbnRpdGllc0F0dHJpYnV0ZS5tYXRyaXguYXR0cmlidXRlcy5zaG93U3VtID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMgPSBlbnRpdGllc0F0dHJpYnV0ZS5tYXRyaXguYXR0cmlidXRlcztcbiAgICAgICAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LnN1YlRvdGFsID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLmdyb3VwRGF0YSh0aGlzLnRhYnVsYXJSZXBvcnQpO1xuICAgICAgICAgIGlmICh0aGlzLnRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5uZXdEYXRhKHRoaXMudGFidWxhclJlcG9ydCwgYXR0cmlidXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UuZGF0YUZhY3RvcnkodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRhYnVsYXJSZXBvcnQucm93Q291bnQgJiYgdGhpcy50YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGggPiAwKSB7IHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLnJvd0NvdW50RGF0YSh0aGlzLnRhYnVsYXJSZXBvcnQpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5wYWdlTGVuZ3RoID0gZW50aXRpZXNBdHRyaWJ1dGUudG90YWxSZWNvcmRzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5wYWdlSW5kZXggPSBlbnRpdGllc0F0dHJpYnV0ZS5wYWdlSW5kZXg7XG4gICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5wYWdlTGVuZ3RoID0gZW50aXRpZXNBdHRyaWJ1dGUudG90YWxSZWNvcmRzO1xuICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQucGFnZVNpemUgPSBlbnRpdGllc0F0dHJpYnV0ZS5wYWdlU2l6ZTtcbiAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCA9IHRydWU7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDcmVhdGVkIGZpbHRlciBvYmplY3QgZm9yIGNyb3NzIGZpbHRlcmluZy5cbiAgICpcbiAgICogIEBwYXJhbSBDcm9zc0ZpbHRlckR0b1xuICAgKi9cbiAgY3JlYXRlQ3Jvc3NGaWx0ZXIoY3Jvc3NGaWx0ZXJEYXRhOiBDcm9zc0ZpbHRlckR0byk6IHZvaWQge1xuICAgIGNvbnN0IGF4RXhwcmVzc2lvbiA9IG5ldyBBeEV4cHJlc3Npb24oKTtcbiAgICBheEV4cHJlc3Npb24uY29tcGFyaXNvbk9wZXJhdG9yLnRleHQgPSAnSW4nO1xuICAgIGF4RXhwcmVzc2lvbi5jb21wYXJpc29uT3BlcmF0b3IudmFsdWUgPSAnSU4nO1xuICAgIGF4RXhwcmVzc2lvbi52YWx1ZVR5cGUgPSAyO1xuICAgIGF4RXhwcmVzc2lvbi5maWVsZCA9IG5ldyBBdHRyaWJ1dGUoY3Jvc3NGaWx0ZXJEYXRhLmF0dHJpYnV0ZURhdGEgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpO1xuICAgIGNvbnN0IGF4RXhwVGV4dExpc3QgPSBuZXcgQXhFeHBUZXh0TGlzdCgpO1xuICAgIGlmIChjcm9zc0ZpbHRlckRhdGEudmFsdWVzKSB7XG4gICAgICBjcm9zc0ZpbHRlckRhdGEudmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGF4RXhwVGV4dExpc3QudmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgYXhFeHByZXNzaW9uLnZhbHVlID0gYXhFeHBUZXh0TGlzdDtcbiAgICBjb25zdCBfc2VhcmNoTm9kZXMgPSBuZXcgU2VhcmNoTm9kZSgpO1xuICAgIF9zZWFyY2hOb2Rlcy5leHByZXNzaW9uID0gYXhFeHByZXNzaW9uO1xuICAgIGNvbnN0IF9maWx0ZXIgPSBuZXcgQXhGaWx0ZXIoKTtcbiAgICBfZmlsdGVyLnNlYXJjaE5vZGVzLnB1c2goX3NlYXJjaE5vZGVzKTtcbiAgICBfZmlsdGVyLmFwcFZlcnNpb25JZCA9IDA7XG4gICAgdGhpcy5nZXRDcm9zc0ZpbHRlckRhdGEoX2ZpbHRlciwgY3Jvc3NGaWx0ZXJEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdXNoZWQgdGhlIGZpbHRlciBvYmplY3QgaW50byBiYXNpYyBmaWx0ZXIgYW5kIGFwcGxpZWQgdGhlIGZpbHRlciBvbiB0aGUgZGF0YVxuICAgKlxuICAgKiAgQHBhcmFtIENyb3NzRmlsdGVyRHRvXG4gICAqICBAcGFyYW0gQXhGaWx0ZXJcbiAgICovXG4gIGdldENyb3NzRmlsdGVyRGF0YShfZmlsdGVyOiBBeEZpbHRlciwgY3Jvc3NGaWx0ZXJEYXRhOiBDcm9zc0ZpbHRlckR0byk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbGVtZW50RHRvID0gbmV3IEVsZW1lbnRzRHRvKHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgICBlbGVtZW50RHRvLmZpbHRlcnMubG9jYWxGaWx0ZXJzLmJhc2ljID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXIodGhpcy50YWJ1bGFyUmVwb3J0LmZpbHRlcnMpO1xuICAgICAgZWxlbWVudER0by5maWx0ZXJzLmxvY2FsRmlsdGVycy5iYXNpYy5wdXNoKF9maWx0ZXIpO1xuICAgICAgZWxlbWVudER0by5maWx0ZXJzLmxvY2FsRmlsdGVycy5jYXRlZ29yeSA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyQ2F0ZWdvcnkodGhpcy50YWJ1bGFyUmVwb3J0LmNhdGVnb3JpZXMpO1xuICAgICAgZWxlbWVudER0by5maWx0ZXJzLmdsb2JhbEZpbHRlcnMuYmFzaWMgPSB0aGlzLl9lbGVtZW50U2VydmljZS5nZXRWYWxpZEZpbHRlcih0aGlzLl9lbGVtZW50U2VydmljZS5maWx0ZXJzRHRvLmJhc2ljKTtcbiAgICAgIGVsZW1lbnREdG8uZmlsdGVycy5nbG9iYWxGaWx0ZXJzLmNhdGVnb3J5ID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXJDYXRlZ29yeSh0aGlzLl9lbGVtZW50U2VydmljZS5maWx0ZXJzRHRvLmNhdGVnb3J5KTtcbiAgICAgIGVsZW1lbnREdG8ucmVwb3J0SWQgPSB0aGlzLnJlcG9ydElkO1xuICAgICAgdGhpcy5fZmllbGRzTGlzdFNlcnZpY2UuZ2V0TWF0cml4RGF0YShlbGVtZW50RHRvKVxuICAgICAgICAudGhlbigoZW50aXRpZXNBdHRyaWJ1dGU6IEVsZW1lbnRzRHRvKSA9PiB7XG4gICAgICAgICAgaWYgKGVudGl0aWVzQXR0cmlidXRlICE9IG51bGwgfHwgZW50aXRpZXNBdHRyaWJ1dGUuZGltZW5zaW9uLmF0dHJpYnV0ZS5zZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gZW50aXRpZXNBdHRyaWJ1dGUubWF0cml4LmF0dHJpYnV0ZXMuc2hvd1N1bT10cnVlO1xuICAgICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzID0gZW50aXRpZXNBdHRyaWJ1dGUubWF0cml4LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5ncm91cERhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogdG8gYWRkIGNvbHVtbiBpbnRvIHRhYnVsYXIgcmVwb3J0XG4gICAqXG4gICAqIEBwYXJhbSBBdHRyaWJ1dGVEYXRhXG4gICAqXG4gICAqL1xuICBhZGRDb2x1bW4oYXR0cmlidXRlRGF0YTogQXR0cmlidXRlRGF0YSk6IHZvaWQge1xuICAgIHRoaXMuaXNDb2x1bW5FeGlzdChhdHRyaWJ1dGVEYXRhKTtcbiAgICBpZiAoIXRoaXMuX2lzQ29sdW1uRXhpc3QpIHtcbiAgICAgIHRoaXMudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZURhdGEpO1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5pc1JlcG9ydEJ1aWxkZXJEaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmdldE1hdHJpeERpbWVuc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLl9pc0NvbHVtbkV4aXN0ID0gZmFsc2U7XG5cbiAgfVxuICAvKipcbiAgICogdG8gY2hlY2sgZHJvcHBlZCBjb2x1bW4gaXMgYWxyZWFkeSBleGlzdCBpbiB0YWJsZSBvciBub3RcbiAgICpcbiAgICogQHBhcmFtIEF0dHJpYnV0ZURhdGFcbiAgICpcbiAgICovXG4gIGlzQ29sdW1uRXhpc3QoYXR0cmlidXRlRGF0YTogQXR0cmlidXRlRGF0YSk6IHZvaWQge1xuICAgIHRoaXMudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9PT0gYXR0cmlidXRlRGF0YS5uYW1lICYmIGF0dHJpYnV0ZS50YWJsZU5hbWUgPT09IGF0dHJpYnV0ZURhdGEudGFibGVOYW1lKSB7XG4gICAgICAgIHRoaXMuX2lzQ29sdW1uRXhpc3QgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBhcHBseSBmaWx0ZXJcbiAgICovXG4gIGdldENoYXJ0RGF0YSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLmNvbHVtbkRhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgICB9XG4gICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5nZXRNYXRyaXhEaW1lbnNpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBzZW5kIGVtYWlsIHdpdGggZXhjZWwgcmVwb3J0IGFzIGF0dGFjaG1lbnRcbiAgICovXG5cbiAgc2VuZEVtYWlsKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheU5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5kaXNwbGF5RW1haWxWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGaWx0ZXJBbmRDYXRlZ29yeSA9IG5ldyBFbGVtZW50RmlsdGVycygpO1xuICAgICAgZWxlbWVudEZpbHRlckFuZENhdGVnb3J5Lmdsb2JhbEZpbHRlcnMuYmFzaWMgPSB0aGlzLl9lbGVtZW50U2VydmljZS5nZXRWYWxpZEZpbHRlcih0aGlzLl9lbGVtZW50U2VydmljZS5maWx0ZXJzRHRvLmJhc2ljLFNjb3BlVHlwZS5nbG9iYWwpO1xuICAgICAgZWxlbWVudEZpbHRlckFuZENhdGVnb3J5Lmdsb2JhbEZpbHRlcnMuY2F0ZWdvcnkgPSB0aGlzLl9lbGVtZW50U2VydmljZS5nZXRWYWxpZEZpbHRlckNhdGVnb3J5KHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmZpbHRlcnNEdG8uY2F0ZWdvcnksU2NvcGVUeXBlLmdsb2JhbCk7XG4gICAgICBlbGVtZW50RmlsdGVyQW5kQ2F0ZWdvcnkubG9jYWxGaWx0ZXJzLmJhc2ljID0gdGhpcy5fZWxlbWVudFNlcnZpY2UuZ2V0VmFsaWRGaWx0ZXIodGhpcy50YWJ1bGFyUmVwb3J0LmZpbHRlcnMpO1xuICAgICAgZWxlbWVudEZpbHRlckFuZENhdGVnb3J5LmxvY2FsRmlsdGVycy5jYXRlZ29yeSA9IHRoaXMuX2VsZW1lbnRTZXJ2aWNlLmdldFZhbGlkRmlsdGVyQ2F0ZWdvcnkodGhpcy50YWJ1bGFyUmVwb3J0LmNhdGVnb3JpZXMpO1xuICAgICAgY29uc3Qgc2VuZEVtYWlsRHRvID0ge1xuICAgICAgICBlbWFpbElkOiB0aGlzLmV4cG9ydEZvcm1CdWlsZGVyLnZhbHVlWydlbWFpbCddLFxuICAgICAgICBlbGVtZW50SWQ6IHRoaXMudGFidWxhclJlcG9ydC5pZCxcbiAgICAgICAgRmlsdGVyczogZWxlbWVudEZpbHRlckFuZENhdGVnb3J5XG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiB0aGlzLl9jb21tb25TZXJ2aWNlLmlzUmVwb3J0QnVpbGRlckRpcnR5KSB7XG4gICAgICAgIHRoaXMuc2VuZEV4Y2VsUmVwb3J0RXZlbnQuZW1pdCh7IHNlbmRFbWFpbER0bzogc2VuZEVtYWlsRHRvLCBjb21wb25lbnQ6IHRoaXMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5zZW5kRW1haWwoc2VuZEVtYWlsRHRvKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlOb3RpZmljYXRpb24gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIGNsb3NlIHRoZSBleHBvcnQgdG8gZW1haWwgbWVudSBvbiBjbGljayBvZiBjYW5jZWxcbiAgICovXG4gIGNsb3NlRXhwb3J0TWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRNZW51LmNsb3NlTWVudSgpO1xuICAgIHRoaXMuZGlzcGxheU5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqICBWYWxpZGF0aW9uIG9mIGVtYWlsIGlkIGZvciBleHBvcnQgb2YgdGFidWxhciByZXBvcnRcbiAgICovXG5cbiAgZW1haWxWYWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5lbWFpbFBhdHRlcm4pO1xuICAgIHRoaXMuZGlzcGxheUVtYWlsVmFsaWRhdGlvbkVycm9yID0gIXJlZ2V4LnRlc3QodGhpcy5leHBvcnRGb3JtQnVpbGRlci52YWx1ZVsnZW1haWwnXSk7XG4gICAgaWYgKHRoaXMuZGlzcGxheUVtYWlsVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aGlzLmRpc3BsYXlOb3RpZmljYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIE1vdXNlRXZlbnRcbiAgICogQHBhcmFtIG51bWJlclxuICAgKiBAcGFyYW0gQXR0cmlidXRlRGF0YVxuICAgKi9cbiAgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlICYmIChbdGhpcy5zY3JlZW5UeXBlcy5jb250YWluZXJEYXNoYm9hcmQsIHRoaXMuc2NyZWVuVHlwZXMuZHJpbGxUaHJvdWdoXS5pbmNsdWRlcyh0aGlzLnNjcmVlblR5cGUpKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGRhc2hib2FyZEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lbGVtZW50R3VpZCk7XG4gICAgY29uc3QgZWxlbWVudENsaWVudFJlY3Q6IERPTVJlY3QgPSBkYXNoYm9hcmRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54ID0gKGV2ZW50LmNsaWVudFggLSBlbGVtZW50Q2xpZW50UmVjdC54KSArICdweCc7XG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnkgPSAoZXZlbnQuY2xpZW50WSAtIGVsZW1lbnRDbGllbnRSZWN0LnkpICsgJ3B4JztcbiAgICB0aGlzLnJlbW92ZUZyb21EYXNoYm9hcmRNZW51Lm1lbnUuZm9jdXNGaXJzdEl0ZW0oJ21vdXNlJyk7XG4gICAgdGhpcy5yZW1vdmVGcm9tRGFzaGJvYXJkTWVudS5vcGVuTWVudSgpO1xuICB9XG5cbiAgcmVtb3ZlRnJvbURhc2hib2FyZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9kYXNoYm9hcmRCdWlsZGVyU2VydmljZS5kZWxldGVFbGVtZW50LmVtaXQodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG4gIGRyaWxsVGhyb3VnaENvbnRleHQoZXZlbnQ6IE1vdXNlRXZlbnQsIGF0dHJpYnV0ZTogQXR0cmlidXRlRGF0YSwgaTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJEcmlsbFRocm91Z2hQYWdlcyhhdHRyaWJ1dGUpO1xuICAgIGlmICghdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50QXR0cmlidXRlID0gYXR0cmlidXRlO1xuICAgIHRoaXMuY3JlYXRlRHJpbGxUaHJvdWdoRmlsdGVyKGF0dHJpYnV0ZS5zZXJpZXNbaV0pO1xuICAgIGlmICh0aGlzLnNjcmVlblR5cGUgPT09IFNjcmVlblR5cGUuZHJpbGxUaHJvdWdoICYmICF0aGlzLnBhZ2VzLmxlbmd0aCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghdGhpcy5pc0VkaXRhYmxlICYmICh0aGlzLnNjcmVlblR5cGUgIT09IFNjcmVlblR5cGUuZHJpbGxUaHJvdWdoKSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZGFzaGJvYXJkRWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVsZW1lbnRHdWlkKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRCb3VuZHM6IERPTVJlY3QgPSBkYXNoYm9hcmRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnggPSAoZXZlbnQuY2xpZW50WCAtIGVsZW1lbnRCb3VuZHMueCkgKyAncHgnO1xuICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnkgPSAoZXZlbnQuY2xpZW50WSAtIGVsZW1lbnRCb3VuZHMueSkgKyAncHgnO1xuICAgICAgdGhpcy5kcmlsbFRocm91Z2hUcmlnZ2VyLm1lbnUuZm9jdXNGaXJzdEl0ZW0oJ21vdXNlJyk7XG4gICAgICB0aGlzLmRyaWxsVGhyb3VnaFRyaWdnZXIub3Blbk1lbnUoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueCA9IGV2ZW50LmNsaWVudFggKyAncHgnO1xuICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnkgPSBldmVudC5jbGllbnRZICsgJ3B4JztcbiAgICAgIHRoaXMuZHJpbGxUaHJvdWdoVHJpZ2dlci5tZW51LmZvY3VzRmlyc3RJdGVtKCdtb3VzZScpO1xuICAgICAgdGhpcy5kcmlsbFRocm91Z2hUcmlnZ2VyLm9wZW5NZW51KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZWQgZmlsdGVyIG9iamVjdCBmb3IgY3Jvc3MgZmlsdGVyaW5nLlxuICAgKlxuICAgKiAgQHBhcmFtIENyb3NzRmlsdGVyRHRvXG4gICAqL1xuICBjcmVhdGVEcmlsbFRocm91Z2hGaWx0ZXIoc2VyaWVzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBheEV4cHJlc3Npb24gPSBuZXcgQXhFeHByZXNzaW9uKCk7XG4gICAgYXhFeHByZXNzaW9uLmNvbXBhcmlzb25PcGVyYXRvci50ZXh0ID0gJ0luJztcbiAgICBheEV4cHJlc3Npb24uY29tcGFyaXNvbk9wZXJhdG9yLnZhbHVlID0gJ0lOJztcbiAgICBheEV4cHJlc3Npb24udmFsdWVUeXBlID0gMjtcbiAgICBheEV4cHJlc3Npb24uZmllbGQgPSBuZXcgQXR0cmlidXRlKHRoaXMuY3VycmVudEF0dHJpYnV0ZSBhcyB1bmtub3duIGFzIEF0dHJpYnV0ZSk7XG4gICAgY29uc3QgYXhFeHBUZXh0TGlzdCA9IG5ldyBBeEV4cFRleHRMaXN0KCk7XG4gICAgYXhFeHBUZXh0TGlzdC52YWx1ZS5wdXNoKHNlcmllcyk7XG4gICAgYXhFeHBUZXh0TGlzdC5pc1NlYXJjaGFibGUgPSB0cnVlO1xuICAgIGF4RXhwcmVzc2lvbi52YWx1ZSA9IGF4RXhwVGV4dExpc3Q7XG4gICAgY29uc3QgX3NlYXJjaE5vZGVzID0gbmV3IFNlYXJjaE5vZGUoKTtcbiAgICBfc2VhcmNoTm9kZXMuZXhwcmVzc2lvbiA9IGF4RXhwcmVzc2lvbjtcbiAgICB0aGlzLmRyaWxsVGhyb3VnaEZpbHRlciA9IG5ldyBBeEZpbHRlcigpO1xuICAgIHRoaXMuZHJpbGxUaHJvdWdoRmlsdGVyLnNlYXJjaE5vZGVzLnB1c2goX3NlYXJjaE5vZGVzKTtcbiAgICB0aGlzLmRyaWxsVGhyb3VnaEZpbHRlci5hcHBWZXJzaW9uSWQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbiBwYWdlIG5hbWUgY2xpY2tlZCBvbiBkcm9wZG93biBvcHRpb25zIG9mIGRyaWxsIHRocm91Z2ggcGFnZXNcbiAgICpcbiAgICogQHBhcmFtIHBhZ2VcbiAgICovXG4gIHBhZ2VDbGljayhwYWdlOiBQYWdlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2NyZWVuVHlwZSAhPT0gU2NyZWVuVHlwZS5kcmlsbFRocm91Z2gpIHtcbiAgICAgIGlmICh0aGlzLmRyaWxsVGhyb3VnaFBhcmVudFR5cGUgPyB0aGlzLmRyaWxsVGhyb3VnaFBhcmVudFR5cGUgPT09IFNjcmVlblR5cGUucmVwb3J0QnVpbGRlciA6IHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICB0aGlzLl9kcmlsbFRocm91Z2hTZXJ2aWNlLnNldFBhcmVudERhdGEodGhpcy5yZXBvcnRJZCwgdGhpcy5fcmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2UucmVwb3J0Lm5hbWUsIHRoaXMuX3JvdXRlci51cmwpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9EcmlsbFRocm91Z2gocGFnZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGFzaGJvYXJkQnVpbGRlclNlcnZpY2UuZGFzaGJvYXJkJC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpLnN1YnNjcmliZSgoZGFzaGJvYXJkKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZHJpbGxUaHJvdWdoU2VydmljZS5zZXRQYXJlbnREYXRhKHRoaXMucmVwb3J0SWQsIGRhc2hib2FyZC5uYW1lLCB0aGlzLl9yb3V0ZXIudXJsKTtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9EcmlsbFRocm91Z2gocGFnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9EcmlsbFRocm91Z2gocGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIGRyaWxsIHRocm91Z2ggY29tcG9uZW50IHdpdGggcGFnZSBpZCBhcyByb3V0ZSBwYXJhbXNcbiAgICogQ2hlY2tzIHRoZSBwYXJlbnQgVVJMIGlmIGl0IGlzIGFscmVhZHkgZXhpc3RzIG9yIG5vdFxuICAgKlxuICAgKiBAcGFyYW0gcGFnZVxuICAgKi9cbiAgbmF2aWdhdGVUb0RyaWxsVGhyb3VnaChwYWdlOiBQYWdlKTogdm9pZCB7XG4gICAgY29uc3QgcGFyZW50VXJsOiBzdHJpbmcgPSB0aGlzLl9kcmlsbFRocm91Z2hTZXJ2aWNlLmdldFBhcmVudERhdGEoKS51cmw7XG4gICAgdGhpcy5fZHJpbGxUaHJvdWdoU2VydmljZS5kcmlsbFBhZ2UocGFnZSwgdGhpcy5kcmlsbFRocm91Z2hGaWx0ZXIpO1xuICAgIGlmICghcGFyZW50VXJsKSB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuX3JvdXRlci51cmwgKyAnL2RyaWxsLXRocm91Z2gvJyArIHBhZ2UuaWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtwYXJlbnRVcmwsICdkcmlsbC10aHJvdWdoJywgcGFnZS5pZF0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgcGFnaW5hdG9yIGV2ZW50IHRvIGNoYW5nZSBkYXRhIGFzIHBlciBwYWdlIGluZGV4IGFuZCBwYWdlc2l6ZVxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gICAgaGFuZGxlUGFnZUV2ZW50KGV2ZW50OiBQYWdlRXZlbnQpOiB2b2lke1xuICAgIHRoaXMudGFidWxhclJlcG9ydC5wYWdlSW5kZXg9ZXZlbnQucGFnZUluZGV4O1xuICAgIHRoaXMudGFidWxhclJlcG9ydC5wYWdlU2l6ZT1ldmVudC5wYWdlU2l6ZTtcbiAgICB0aGlzLnRhYnVsYXJSZXBvcnQuaXNEYXRhTG9hZGVkPWZhbHNlO1xuICAgIHRoaXMuZ2V0TWF0cml4RGltZW5zaW9uKCk7XG4gIH1cbiAgICAvKipcbiAgICAgKiBBcHBseSBsb2NhbCBmaWx0ZXIuXG4gICAgICovXG4gICAgYXBwbHlMb2NhbEZpbHRlcigpOiB2b2lke1xuICAgICAgICB0aGlzLmdldENoYXJ0RGF0YSgpO1xuICAgIH1cblxufVxuIiwiPGRpdiAoY29udGV4dG1lbnUpPVwib25Db250ZXh0TWVudSgkZXZlbnQpO1wiIGNsYXNzPVwiaC1mdWxsIG1pbi1oLWZ1bGwgbWF4LWgtZnVsbFwiPlxuICA8IS0tVGl0bGUgb2YgdGhlIHRhYmxlLS0+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZmxleC13cmFwOiBub3dyYXA7XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoICE9IDBcIiBcbiAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS50aXRsZS50ZXh0Q29sb3JcIlxuICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS50aXRsZS50ZXh0U2l6ZVwiXG4gICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUudGl0bGUudGV4dFN0eWxlXCJcbiAgICAgICAgICAgW3N0eWxlLmZvbnQtd2VpZ2h0XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS50aXRsZS5mb250U3R5bGU/LmZvbnRXZWlnaHQgfHwgJ25vcm1hbCdcIlxuICAgICAgICAgICBbc3R5bGUuZm9udC1zdHlsZV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUudGl0bGUuZm9udFN0eWxlPy5pc0l0YWxpY0ZvbnQgPyAnaXRhbGljJyA6ICdub3JtYWwnXCJcbiAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUudGl0bGUuZm9udFN0eWxlPy50ZXh0RGVjb3JhdGlvbiB8fCAnbm9uZSdcIlxuICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUudGl0bGUucG9zaXRpb24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgW3N0eWxlLnBhZGRpbmddPVwiJzAuNzVyZW0gMC43NXJlbSdcIj5cbiAgICAgICAge3t0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUudGl0bGUudGV4dH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0O1wiPlxuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoID4gMFwiIFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXhwb3J0LWJ0biBpY29uLWJ0blwiIFxuICAgICAgICAgICAgICAgIG1hdC1idXR0b24gXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlOb3RpZmljYXRpb24gPSBmYWxzZVwiIFxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJiZWZvcmVNZW51XCI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFRvb2x0aXA9XCJFeHBvcnQgRGF0YVwiIHN2Z0ljb249XCJheG9fZXhwb3J0XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtbWVudSAjYmVmb3JlTWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgICA8ZGl2IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgY2xhc3M9XCJzZW5kLWV4Y2VsLXJlcG9ydC1mb3JtXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImV4cG9ydEZvcm1CdWlsZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXY+WExTWDwvZGl2PlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0LW1lbnUtaXRlbSB0eXBlPVwidGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXBvcnQteHNseC1lbWFpbFwiIFxuICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZW1haWxWYWxpZGF0ZSgpXCI+XG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwiZGlzcGxheUVtYWlsVmFsaWRhdGlvbkVycm9yXCIgY2xhc3M9XCJlbWFpbC1zZW5kLWVtYWlsLWVycm9yXCI+XG4gICAgICAgICAgICAgICAgUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBlbWFpbCBJRFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwiZGlzcGxheU5vdGlmaWNhdGlvblwiIGNsYXNzPVwiZW1haWwtc2VuZC1ub3RpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgICBFeHBvcnQgaXMgaW4gcHJvZ3Jlc3MuIFlvdSB3aWxsIHJlY2VpdmUgdGhlIHJlcG9ydCBvbiB5b3VyIGVtYWlsIG9uY2UgY29tcGxldGVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZW5kLWV4Y2VsLXJlcG9ydC1mb3JtLWJ0blwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cImNhbmNlbC1idG4gYnRuIHRleHQtd2hpdGVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUV4cG9ydE1lbnUoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInNlbmQtYnRuIGJ0blwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRFbWFpbCgpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzcGxheUVtYWlsVmFsaWRhdGlvbkVycm9yXCI+XG4gICAgICAgICAgICAgICAgICBFeHBvcnQgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgXG5cblxuICA8IS0tIEZpbHRlciBDb250YWluZXIgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0VkaXRhYmxlIHx8IHRhYnVsYXJSZXBvcnQuZmlsdGVycy5sZW5ndGg+MFwiIFtuZ0NsYXNzXT1cInsnanVzdGlmeS1lbmQnIDogdGFidWxhclJlcG9ydC5maWx0ZXJzLmxlbmd0aDwxfVwiXG4gICAgY2xhc3M9XCJmaWx0ZXItZGl2IHB4LTMgaC0xMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJ1bGFyLWNoYXJ0LWZpbHRlclwiIFtuZ0NsYXNzXT1cInsnZGFzaGJvYXJkLXRhYnVsYXItZmlsdGVyJyA6ICFpc0VkaXRhYmxlfVwiXG4gICAgICAqbmdJZj1cImlzRWRpdGFibGUgfHwgdGFidWxhclJlcG9ydC5maWx0ZXJzLmxlbmd0aD4wIHx8IHRhYnVsYXJSZXBvcnQuY2F0ZWdvcmllcy5sZW5ndGg+MFwiPlxuICAgICAgPCEtLSA8Y2hhcnQtZmlsdGVyXG4gICAgICAgIGNsYXNzPVwiZmxleFwiXG4gICAgICAgIFtmaWx0ZXJzXT1cInRhYnVsYXJSZXBvcnQuZmlsdGVyc1wiXG4gICAgICAgIFtjYXRlZ29yaWVzXT1cInRhYnVsYXJSZXBvcnQuY2F0ZWdvcmllc1wiXG4gICAgICAgIFtpc0VkaXRhYmxlXSA9IFwiaXNFZGl0YWJsZVwiXG4gICAgICAgIFtmaWx0ZXJTb3VyY2VFbGVtZW50VHlwZV09ICBcImZpbHRlclNvdXJjZUVsZW1lbnRUeXBlcy50YWJ1bGFyXCJcbiAgICAgICAgW2NoYXJ0UmVmXT1cImNvbXBvbmVudFJlZlwiPlxuICAgICAgPC9jaGFydC1maWx0ZXI+IC0tPlxuICAgICAgPGxpYi1yZXBvcnQtZmlsdGVyIFt0YWJ1bGFyUmVwb3J0XT1cInRhYnVsYXJSZXBvcnRcIltmaWx0ZXJzXT1cInRhYnVsYXJSZXBvcnQuZmlsdGVyc1wiIFtjYXRlZ29yaWVzXT1cInRhYnVsYXJSZXBvcnQuY2F0ZWdvcmllc1wiIFtyZXBvcnRJZF09XCJyZXBvcnRJZFwiXG4gICAgICAgIFtzY3JlZW5UeXBlXT1cInNjcmVlblR5cGVcIiBbZGF0YU1vZGVsXT1cImRhdGFNb2RlbFwiIFtpc0VkaXRhYmxlXT1cImlzRWRpdGFibGVcIiBbYXBwVmVyc2lvbl09XCJhcHBWZXJzaW9uSWRcIlxuICAgICAgICBbZmlsdGVyU291cmNlRWxlbWVudFR5cGVdPVwiZmlsdGVyU291cmNlRWxlbWVudFR5cGVzLnRhYnVsYXJcIiAoYXBwbHlGaWx0ZXJFdmVudCk9XCJhcHBseUxvY2FsRmlsdGVyKClcIj5cbiAgICAgIDwvbGliLXJlcG9ydC1maWx0ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJuby1jb2x1bW4tZHJvcC1oZXJlXCIgKm5nSWY9J3RhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoPT09MCc+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJ0YWJsZS12aWV3LWljb25cIj50YWJsZV92aWV3PC9tYXQtaWNvbj5cbiAgICAgIDxwIGNsYXNzPVwiZm9udC1zaXplIG0tMCBuby1jb2x1bW4tdGV4dFwiPk5vIGNvbHVtbnMgaGF2ZSBiZWVuIGRyb3BwZWQgeWV0ICE8L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICNyZW1vdmVGcm9tRGFzaGJvYXJkTWVudSBbc3R5bGUubGVmdF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnhcIiBbc3R5bGUudG9wXT1cImNvbnRleHRNZW51UG9zaXRpb24ueVwiXG4gICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCIgKm5nSWY9XCJzY3JlZW5UeXBlcy5kYXNoYm9hcmRCdWlsZGVyID09PSBzY3JlZW5UeXBlXCJcbiAgICBjbGFzcz1cImRyaWxsdGhyb3VnaC1tZW51LXRyaWdnZXJcIj5cbiAgPC9kaXY+XG4gIDwhLS0gTWF0IE1lbnUgdHJpZ2dlciBmb3IgdGFibGUgY29sdW1ucy0tPlxuICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiPlxuICAgIDxkaXYgaWQ9XCJ0YWJsZS1tZW51XCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQ+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlRnJvbURhc2hib2FyZCgpXCI+UmVtb3ZlIEZyb20gRGFzaGJvYXJkPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L21hdC1tZW51PlxuICBcblxuICA8bGliLWRldGFpbC12aWV3XG4gICpuZ0lmPSd0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD09PTAgJiYgdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg9PT0wICdcbiAgW3gxSW1hZ2VNZWRpYVVybF09XCJ4MUltYWdlTWVkaWFVcmxcIlxuICBbdGFidWxhclJlcG9ydF09XCJ0YWJ1bGFyUmVwb3J0XCJcbiAgW2lzRWRpdGFibGVdPVwiaXNFZGl0YWJsZVwiXG4gIFtlbGVtZW50R3VpZF09XCJlbGVtZW50R3VpZFwiXG4gIFtzY3JlZW5UeXBlXT1cInNjcmVlblR5cGVcIlxuICBbZHJpbGxUaHJvdWdoRmlsdGVySW5wdXRdPVwiZHJpbGxUaHJvdWdoRmlsdGVySW5wdXRcIlxuICBbZHJpbGxUaHJvdWdoUGFyZW50VHlwZV09XCJkcmlsbFRocm91Z2hQYXJlbnRUeXBlXCJcbiAgW3BhcmVudFJlZl09XCJjb21wb25lbnRSZWZcIlxuICBbcmVwb3J0SWRdPVwicmVwb3J0SWRcIlxuICBbYXBwVmVyc2lvbklkXT1cImFwcFZlcnNpb25JZFwiXG4gIFt4MU1lZGlhVXJsXT1cIngxTWVkaWFVcmxcIlxuICA+XG4gIDwvbGliLWRldGFpbC12aWV3PlxuICA8bGliLXJvdy1ncm91cC12aWV3ICpuZ0lmPSd0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aD4wICYmIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MCAnXG4gICAgW3gxSW1hZ2VNZWRpYVVybF09XCJ4MUltYWdlTWVkaWFVcmxcIlxuICAgIFt0YWJ1bGFyUmVwb3J0XT1cInRhYnVsYXJSZXBvcnRcIlxuICAgIFtpc0VkaXRhYmxlXT1cImlzRWRpdGFibGVcIlxuICAgIFtlbGVtZW50R3VpZF09XCJlbGVtZW50R3VpZFwiXG4gICAgW3NjcmVlblR5cGVdPVwic2NyZWVuVHlwZVwiXG4gICAgW2RyaWxsVGhyb3VnaEZpbHRlcklucHV0XT1cImRyaWxsVGhyb3VnaEZpbHRlcklucHV0XCJcbiAgICBbZHJpbGxUaHJvdWdoUGFyZW50VHlwZV09XCJkcmlsbFRocm91Z2hQYXJlbnRUeXBlXCJcbiAgICBbcmVwb3J0SWRdPVwicmVwb3J0SWRcIlxuICAgIFtwYXJlbnRSZWZdPVwiY29tcG9uZW50UmVmXCI+XG4gIDwvbGliLXJvdy1ncm91cC12aWV3PlxuXG4gIDxsaWItY29sdW1uLWdyb3VwLXZpZXcgKm5nSWY9J3RhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjAgJ1xuICAgIFt4MUltYWdlTWVkaWFVcmxdPVwieDFJbWFnZU1lZGlhVXJsXCJcbiAgICBbdGFidWxhclJlcG9ydF09XCJ0YWJ1bGFyUmVwb3J0XCJcbiAgICBbaXNFZGl0YWJsZV09XCJpc0VkaXRhYmxlXCJcbiAgICBbZWxlbWVudEd1aWRdPVwiZWxlbWVudEd1aWRcIlxuICAgIFtzY3JlZW5UeXBlXT1cInNjcmVlblR5cGVcIlxuICAgIFtkcmlsbFRocm91Z2hGaWx0ZXJJbnB1dF09XCJkcmlsbFRocm91Z2hGaWx0ZXJJbnB1dFwiXG4gICAgW2RyaWxsVGhyb3VnaFBhcmVudFR5cGVdPVwiZHJpbGxUaHJvdWdoUGFyZW50VHlwZVwiXG4gICAgW3JlcG9ydElkXT1cInJlcG9ydElkXCJcbiAgICBbcGFyZW50UmVmXT1cImNvbXBvbmVudFJlZlwiPlxuICA8L2xpYi1jb2x1bW4tZ3JvdXAtdmlldz5cblxuPC9kaXY+XG48bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgXCI+XG48ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcyBkZWF0aWwtZ3JvdXAtdGFibGUtcGFnaW5hdG9yXCIgKm5nSWY9J3RhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MCc+XG4gIDxtYXQtcGFnaW5hdG9yIFtkaXNhYmxlZF09XCJpc0RhdGFMb2FkaW5nXCIgKHBhZ2UpPVwiaGFuZGxlUGFnZUV2ZW50KCRldmVudClcIiBbbGVuZ3RoXT1cInRhYnVsYXJSZXBvcnQucGFnZUxlbmd0aFwiIFtwYWdlU2l6ZV09XCJ0YWJ1bGFyUmVwb3J0LnBhZ2VTaXplXCJcbiAgW3BhZ2VJbmRleF09XCJ0YWJ1bGFyUmVwb3J0LnBhZ2VJbmRleFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzEwLCAyNSwgNTAsIDEwMF1cIiBhcmlhLWxhYmVsPVwiU2VsZWN0IHBhZ2VcIiBjbGFzcz1cIm1hdC1wYWdpbmF0b3IgZmxleCBqdXN0aWZ5LWVuZCB3LWZ1bGxcIj5cbiAgPC9tYXQtcGFnaW5hdG9yPlxuPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGghPT0wXCI+XG4gIDxhcHAtZ2hvc3QtbG9hZGVyIFtlbGVtZW50VHlwZV09XCJHaG9zdExvYWRlclR5cGUuUGFnaW5hdGlvblZpZXdMb2FkZXJcIiBjbGFzcz1cInRhYnVsYXItcGFnaW5hdGlvbi1naG9zdC1sb2FkZXJcIj48L2FwcC1naG9zdC1sb2FkZXI+XG48L25nLWNvbnRhaW5lcj5cbjxkaXYgI2RyaWxsVGhvcnVnaE1lbnVUcmlnZ2VyIFtzdHlsZS5sZWZ0XT1cImNvbnRleHRNZW51UG9zaXRpb24ueFwiXG4gICAgW3N0eWxlLnRvcF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJpbGxUaHJvdWdoTWVudVwiIGNsYXNzPVwiZHJpbGx0aHJvdWdoLW1lbnUtdHJpZ2dlclwiPjwvZGl2PlxuPCEtLSBNYXQgTWVudSB0cmlnZ2VyIGZvciB0YWJsZSBjZWxscy0tPlxuPG1hdC1tZW51ICNkcmlsbFRocm91Z2hNZW51PVwibWF0TWVudVwiPlxuICA8ZGl2IGlkPVwidGFibGUtbWVudVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtaXRlbT1cInJlcG9ydERhdGFcIj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJpbGxUaHJvdWdoUGFnZXNcIj5EcmlsbCBUaHJvdWdoPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJzY3JlZW5UeXBlcy5kYXNoYm9hcmRCdWlsZGVyID09PSBzY3JlZW5UeXBlXCIgKGNsaWNrKT1cInJlbW92ZUZyb21EYXNoYm9hcmQoKVwiPlJlbW92ZSBGcm9tIERhc2hib2FyZDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9tYXQtbWVudT5cbjxtYXQtbWVudSAjZHJpbGxUaHJvdWdoUGFnZXM9XCJtYXRNZW51XCI+XG4gIDxkaXYgaWQ9XCJ0YWJsZS1tZW51XCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwicmVwb3J0RGF0YVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCIgbGV0IHBhZ2Ugb2YgcGFnZXNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9J3BhZ2VDbGljayhwYWdlKSc+IHt7cGFnZS5uYW1lfX08L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9tYXQtbWVudT5cbiJdfQ==
|
|
@@ -20491,14 +20491,14 @@ function TabularComponent_button_6_Template(rf, ctx) {
|
|
|
20491
20491
|
function TabularComponent_p_14_Template(rf, ctx) {
|
|
20492
20492
|
if (rf & 1) {
|
|
20493
20493
|
i0.ɵɵelementStart(0, "p", 31);
|
|
20494
|
-
i0.ɵɵtext(1, "Please provide a valid email ID");
|
|
20494
|
+
i0.ɵɵtext(1, " Please provide a valid email ID ");
|
|
20495
20495
|
i0.ɵɵelementEnd();
|
|
20496
20496
|
}
|
|
20497
20497
|
}
|
|
20498
20498
|
function TabularComponent_p_15_Template(rf, ctx) {
|
|
20499
20499
|
if (rf & 1) {
|
|
20500
20500
|
i0.ɵɵelementStart(0, "p", 32);
|
|
20501
|
-
i0.ɵɵtext(1, "Export is in progress. You will receive the report on your email once completed.");
|
|
20501
|
+
i0.ɵɵtext(1, " Export is in progress. You will receive the report on your email once completed. ");
|
|
20502
20502
|
i0.ɵɵelementEnd();
|
|
20503
20503
|
}
|
|
20504
20504
|
}
|
|
@@ -21118,7 +21118,7 @@ TabularComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabularCom
|
|
|
21118
21118
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.removeFromDashboardMenu = _t.first);
|
|
21119
21119
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.drillThroughTrigger = _t.first);
|
|
21120
21120
|
}
|
|
21121
|
-
}, inputs: { page: "page", tabularReport: "tabularReport", isEditable: "isEditable", userEmail: "userEmail", x1ImageMediaUrl: "x1ImageMediaUrl", screenType: "screenType", drillThroughParentType: "drillThroughParentType", drillThroughFilterInput: "drillThroughFilterInput", x1MediaUrl: "x1MediaUrl", appVersionId: "appVersionId" }, outputs: { sendExcelReportEvent: "sendExcelReportEvent" }, features: [i0.ɵɵNgOnChangesFeature], decls: 45, vars: 19, consts: [[1, "h-full", "min-h-full", "max-h-full", 3, "contextmenu"], [1, "row", 2, "flex-
|
|
21121
|
+
}, inputs: { page: "page", tabularReport: "tabularReport", isEditable: "isEditable", userEmail: "userEmail", x1ImageMediaUrl: "x1ImageMediaUrl", screenType: "screenType", drillThroughParentType: "drillThroughParentType", drillThroughFilterInput: "drillThroughFilterInput", x1MediaUrl: "x1MediaUrl", appVersionId: "appVersionId" }, outputs: { sendExcelReportEvent: "sendExcelReportEvent" }, features: [i0.ɵɵNgOnChangesFeature], decls: 45, vars: 19, consts: [[1, "h-full", "min-h-full", "max-h-full", 3, "contextmenu"], [1, "row", 2, "display", "flex", "justify-content", "space-between", "align-items", "center", "flex-wrap", "nowrap"], [1, "col-10"], [3, "color", "font-size", "font-family", "font-weight", "font-style", "text-decoration", "text-align", "padding", 4, "ngIf"], [1, "col-2", 2, "text-align", "right"], ["class", "export-btn icon-btn", "mat-button", "", 3, "matMenuTriggerFor", "click", 4, "ngIf"], ["xPosition", "before"], ["beforeMenu", "matMenu"], [1, "send-excel-report-form", 3, "click"], [3, "formGroup"], ["mat-menu-item", "", "type", "text", "formControlName", "email", 1, "report-xslx-email", 3, "ngModelChange"], ["class", "email-send-email-error", 4, "ngIf"], ["class", "email-send-notification", 4, "ngIf"], [1, "send-excel-report-form-btn"], ["mat-menu-item", "", 1, "cancel-btn", "btn", "text-white", 3, "click"], ["mat-menu-item", "", 1, "send-btn", "btn", 3, "disabled", "click"], ["class", "filter-div px-3 h-11", 3, "ngClass", 4, "ngIf"], ["class", "no-column-drop-here", 4, "ngIf"], ["class", "drillthrough-menu-trigger", 3, "left", "top", "matMenuTriggerFor", 4, "ngIf"], ["contextMenu", "matMenu"], ["id", "table-menu"], ["matMenuContent", ""], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "parentRef", "reportId", "appVersionId", "x1MediaUrl", 4, "ngIf"], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "reportId", "parentRef", 4, "ngIf"], [4, "ngIf"], [1, "drillthrough-menu-trigger", 3, "matMenuTriggerFor"], ["drillThorughMenuTrigger", ""], ["drillThroughMenu", "matMenu"], ["drillThroughPages", "matMenu"], ["mat-button", "", 1, "export-btn", "icon-btn", 3, "matMenuTriggerFor", "click"], ["matTooltip", "Export Data", "svgIcon", "axo_export"], [1, "email-send-email-error"], [1, "email-send-notification"], [1, "filter-div", "px-3", "h-11", 3, "ngClass"], ["class", "tabular-chart-filter", 3, "ngClass", 4, "ngIf"], [1, "tabular-chart-filter", 3, "ngClass"], [3, "tabularReport", "filters", "categories", "reportId", "screenType", "dataModel", "isEditable", "appVersion", "filterSourceElementType", "applyFilterEvent"], [1, "no-column-drop-here"], [1, "text-center"], [1, "table-view-icon"], [1, "font-size", "m-0", "no-column-text"], ["removeFromDashboardMenu", ""], ["mat-menu-item", "", 3, "click"], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "parentRef", "reportId", "appVersionId", "x1MediaUrl"], [3, "x1ImageMediaUrl", "tabularReport", "isEditable", "elementGuid", "screenType", "drillThroughFilterInput", "drillThroughParentType", "reportId", "parentRef"], ["class", "flex align-items deatil-group-table-paginator", 4, "ngIf"], [1, "flex", "align-items", "deatil-group-table-paginator"], ["aria-label", "Select page", 1, "mat-paginator", "flex", "justify-end", "w-full", 3, "disabled", "length", "pageSize", "pageIndex", "pageSizeOptions", "page"], [1, "tabular-pagination-ghost-loader", 3, "elementType"], ["mat-menu-item", "", 3, "matMenuTriggerFor"], ["mat-menu-item", "", 3, "click", 4, "ngIf"], [4, "ngFor", "ngForOf"]], template: function TabularComponent_Template(rf, ctx) {
|
|
21122
21122
|
if (rf & 1) {
|
|
21123
21123
|
i0.ɵɵelementStart(0, "div", 0);
|
|
21124
21124
|
i0.ɵɵlistener("contextmenu", function TabularComponent_Template_div_contextmenu_0_listener($event) { return ctx.onContextMenu($event); });
|
|
@@ -21148,7 +21148,7 @@ TabularComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabularCom
|
|
|
21148
21148
|
i0.ɵɵelementEnd();
|
|
21149
21149
|
i0.ɵɵelementStart(19, "button", 15);
|
|
21150
21150
|
i0.ɵɵlistener("click", function TabularComponent_Template_button_click_19_listener() { return ctx.sendEmail(); });
|
|
21151
|
-
i0.ɵɵtext(20, "Export ");
|
|
21151
|
+
i0.ɵɵtext(20, " Export ");
|
|
21152
21152
|
i0.ɵɵelementStart(21, "mat-icon");
|
|
21153
21153
|
i0.ɵɵtext(22, "send");
|
|
21154
21154
|
i0.ɵɵelementEnd();
|
|
@@ -21224,7 +21224,7 @@ TabularComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabularCom
|
|
|
21224
21224
|
(function () {
|
|
21225
21225
|
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TabularComponent, [{
|
|
21226
21226
|
type: Component,
|
|
21227
|
-
args: [{ selector: 'tabular', template: "<div (contextmenu)=\"onContextMenu($event);\" class=\"h-full min-h-full max-h-full\">\n <!--Title of the table-->\n <div class=\"row\" style=\"flex-wrap: nowrap !important; display: flex;\">\n <div class=\"col-10\">\n <div *ngIf='tabularReport.matrix.attributes.length!=0' [style.color]=\"tabularReport.tableStyle.title.textColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.title.textSize\"\n [style.font-family]=\"tabularReport.tableStyle.title.textStyle\"\n [style.font-weight]=\"tabularReport.tableStyle.title.fontStyle?.fontWeight || 'normal'\"\n [style.font-style]=\"tabularReport.tableStyle.title.fontStyle?.isItalicFont ? 'italic' : 'normal'\"\n [style.text-decoration]=\"tabularReport.tableStyle.title.fontStyle?.textDecoration || 'none'\"\n [style.text-align]=\"tabularReport.tableStyle.title.position || 'left'\" [style.padding]=\" '0.75rem 0.75rem' \">\n {{tabularReport.tableStyle.title.text}}\n </div>\n </div>\n <div cass=\"col-2\">\n <ng-container>\n <button *ngIf=\"tabularReport.matrix.attributes.length>0\" class=\"export-btn icon-btn\" mat-button\n (click)=\"displayNotification=false\" [matMenuTriggerFor]=\"beforeMenu\"><mat-icon matTooltip=\"Export Data\"\n svgIcon=\"axo_export\"></mat-icon></button>\n\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <div (click)=\"$event.stopPropagation();\" class=\"send-excel-report-form\">\n <form [formGroup]=\"exportFormBuilder\">\n <div>XLSX</div>\n <input mat-menu-item type=\"text\" class=\"report-xslx-email\" formControlName=\"email\"\n (ngModelChange)=\"emailValidate()\">\n <p *ngIf=\"displayEmailValidationError\" class=\"email-send-email-error\">Please provide a valid email ID</p>\n <p *ngIf=\"displayNotification\" class=\"email-send-notification\">Export is in progress. You will receive the\n report on your email once completed.</p>\n <div class=\"send-excel-report-form-btn\">\n <button mat-menu-item class=\"cancel-btn btn text-white\" (click)=\"closeExportMenu()\">Cancel</button>\n <button mat-menu-item class=\"send-btn btn\" (click)=\"sendEmail()\"\n [disabled]=\"displayEmailValidationError\">Export <mat-icon>send</mat-icon></button>\n </div>\n </form>\n </div>\n </mat-menu>\n </ng-container>\n </div>\n </div>\n\n\n <!-- Filter Container -->\n <div *ngIf=\"isEditable || tabularReport.filters.length>0\" [ngClass]=\"{'justify-end' : tabularReport.filters.length<1}\"\n class=\"filter-div px-3 h-11\">\n <div class=\"tabular-chart-filter\" [ngClass]=\"{'dashboard-tabular-filter' : !isEditable}\"\n *ngIf=\"isEditable || tabularReport.filters.length>0 || tabularReport.categories.length>0\">\n <!-- <chart-filter\n class=\"flex\"\n [filters]=\"tabularReport.filters\"\n [categories]=\"tabularReport.categories\"\n [isEditable] = \"isEditable\"\n [filterSourceElementType]= \"filterSourceElementTypes.tabular\"\n [chartRef]=\"componentRef\">\n </chart-filter> -->\n <lib-report-filter [tabularReport]=\"tabularReport\"[filters]=\"tabularReport.filters\" [categories]=\"tabularReport.categories\" [reportId]=\"reportId\"\n [screenType]=\"screenType\" [dataModel]=\"dataModel\" [isEditable]=\"isEditable\" [appVersion]=\"appVersionId\"\n [filterSourceElementType]=\"filterSourceElementTypes.tabular\" (applyFilterEvent)=\"applyLocalFilter()\">\n </lib-report-filter>\n </div>\n </div>\n\n <div class=\"no-column-drop-here\" *ngIf='tabularReport.matrix.attributes.length===0'>\n <div class=\"text-center\">\n <mat-icon class=\"table-view-icon\">table_view</mat-icon>\n <p class=\"font-size m-0 no-column-text\">No columns have been dropped yet !</p>\n </div>\n </div>\n <div #removeFromDashboardMenu [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\"\n [matMenuTriggerFor]=\"contextMenu\" *ngIf=\"screenTypes.dashboardBuilder === screenType\"\n class=\"drillthrough-menu-trigger\">\n </div>\n <!-- Mat Menu trigger for table columns-->\n <mat-menu #contextMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n </mat-menu>\n \n\n <lib-detail-view\n *ngIf='tabularReport.colGrouping.length===0 && tabularReport.rowGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [parentRef]=\"componentRef\"\n [reportId]=\"reportId\"\n [appVersionId]=\"appVersionId\"\n [x1MediaUrl]=\"x1MediaUrl\"\n >\n </lib-detail-view>\n <lib-row-group-view *ngIf='tabularReport.rowGrouping.length>0 && tabularReport.colGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-row-group-view>\n\n <lib-column-group-view *ngIf='tabularReport.colGrouping.length>0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-column-group-view>\n\n</div>\n<ng-container *ngIf=\"tabularReport.isDataLoaded \">\n<div class=\"flex align-items deatil-group-table-paginator\" *ngIf='tabularReport.colGrouping.length===0'>\n <mat-paginator [disabled]=\"isDataLoading\" (page)=\"handlePageEvent($event)\" [length]=\"tabularReport.pageLength\" [pageSize]=\"tabularReport.pageSize\"\n [pageIndex]=\"tabularReport.pageIndex\" [pageSizeOptions]=\"[10, 25, 50, 100]\" aria-label=\"Select page\" class=\"mat-paginator flex justify-end w-full\">\n </mat-paginator>\n</div>\n</ng-container>\n<ng-container *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\">\n <app-ghost-loader [elementType]=\"GhostLoaderType.PaginationViewLoader\" class=\"tabular-pagination-ghost-loader\"></app-ghost-loader>\n</ng-container>\n<div #drillThorughMenuTrigger [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"drillThroughMenu\" class=\"drillthrough-menu-trigger\"></div>\n<!-- Mat Menu trigger for table cells-->\n<mat-menu #drillThroughMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <button mat-menu-item [matMenuTriggerFor]=\"drillThroughPages\">Drill Through</button>\n <button mat-menu-item *ngIf=\"screenTypes.dashboardBuilder === screenType\" (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n</mat-menu>\n<mat-menu #drillThroughPages=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <ng-container *ngFor=\" let page of pages\">\n <button mat-menu-item (click)='pageClick(page)'> {{page.name}}</button>\n </ng-container>\n </ng-template>\n </div>\n</mat-menu>\n", styles: ["tabular{display:block;height:100%}table{width:auto;height:auto}shadow .tbody{box-shadow:2px 2px}th{background-color:#f2f8ff}.down-arrow{top:3px;min-height:13px;max-height:14px;position:relative}.aggregate-fun{padding-left:10px;font-size:12px}.mat-menu-item{background:transparent;color:#1e293b;font-size:12px}.export-btn{right:1rem;cursor:pointer;float:right;top:.2rem;position:sticky;left:0;display:flex;align-items:center;justify-content:center}.export-btn .mat-icon{min-height:21px!important}.filter-div{position:sticky;top:0;left:0;right:0;background:#ffffff;height:3.7rem!important;width:100%;min-width:100%;max-width:100%;align-items:center}.filter-div .tabular-chart-filter{display:inline-block;width:calc(100% - 40px);max-width:calc(100% - 40px);min-width:calc(100% - 40px)}.filter-div .dashboard-tabular-filter{width:calc(100% - 40px)}.send-excel-report-form{padding:8px 18px;height:auto;background-color:#fff!important}.send-excel-report-form form{display:flex;flex-direction:column;row-gap:1rem}.send-excel-report-form .email-send-notification{font-size:10px;color:green;text-align:center;width:200px;margin:0 auto}.send-excel-report-form .email-send-email-error{font-size:10px;color:red;text-align:left;width:200px}.send-excel-report-form .report-xslx-email{border:1px solid #8080802e;height:34px;width:100%}.send-excel-report-form .report-xslx-email:hover{background:rgba(0,0,0,.04)!important;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn{display:flex;justify-content:center;align-items:center;column-gap:1rem}.send-excel-report-form .send-excel-report-form-btn .btn{height:34px;line-height:34px;flex:50;border-radius:5px}.send-excel-report-form .send-excel-report-form-btn .cancel-btn{border:1px solid #80808059;display:flex;justify-content:center;align-items:center;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn .cancel-btn:hover{background:rgba(0,0,0,.04)!important}.send-excel-report-form .send-excel-report-form-btn .send-btn{border:1px solid #7963ED;background-color:#7963ed!important;color:#fff;display:flex;align-items:center;justify-content:center;column-gap:.5rem}.send-excel-report-form .send-excel-report-form-btn .send-btn mat-icon{color:#fff;font-size:19px;height:1.188rem;min-height:1.188rem;width:1.188rem;min-width:1.188rem}.drillthrough-menu-trigger{visibility:hidden;position:fixed}.deatil-group-table-paginator{position:absolute;bottom:0;right:0;display:flex;width:100%;height:2.75rem;align-items:center}.deatil-group-table-paginator .mat-paginator{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container{margin:0;padding:0;max-height:2rem;white-space:nowrap;align-items:center;min-width:100%}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container{padding:0 1rem!important;column-gap:1.2rem;justify-content:end;flex-wrap:wrap;border:1px solid #80808047;max-height:auto;margin:0;width:100%;background-color:#fff}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size{column-gap:1.2rem;row-gap:.5rem;justify-content:end;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size .mat-paginator-page-size-label{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-paginator-range-label{margin:0 8px 0 0!important;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions button{width:.6rem;max-width:.6rem;width:2rem;max-width:2rem;height:2rem;max-height:2rem;min-height:2rem;border-radius:4px}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-button-base:hover{background-color:#eee}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-icon-button.mat-button-disabled.mat-button-disabled:hover{background-color:transparent!important}.tabular-pagination-ghost-loader{position:absolute;bottom:0;height:4.8rem;background:#fff;padding-right:1rem}.no-column-drop-here{display:flex;align-items:center;justify-content:center;height:calc(100% - 4.2rem);min-height:calc(100% - 4.2rem);max-height:calc(100% - 4.2rem)}.no-column-text,.table-view-icon{color:#a39f9f!important}\n"] }]
|
|
21227
|
+
args: [{ selector: 'tabular', template: "<div (contextmenu)=\"onContextMenu($event);\" class=\"h-full min-h-full max-h-full\">\n <!--Title of the table-->\n <div class=\"row\" style=\"display: flex; justify-content: space-between; align-items: center; flex-wrap: nowrap;\">\n <div class=\"col-10\">\n <div *ngIf=\"tabularReport.matrix.attributes.length != 0\" \n [style.color]=\"tabularReport.tableStyle.title.textColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.title.textSize\"\n [style.font-family]=\"tabularReport.tableStyle.title.textStyle\"\n [style.font-weight]=\"tabularReport.tableStyle.title.fontStyle?.fontWeight || 'normal'\"\n [style.font-style]=\"tabularReport.tableStyle.title.fontStyle?.isItalicFont ? 'italic' : 'normal'\"\n [style.text-decoration]=\"tabularReport.tableStyle.title.fontStyle?.textDecoration || 'none'\"\n [style.text-align]=\"tabularReport.tableStyle.title.position || 'left'\"\n [style.padding]=\"'0.75rem 0.75rem'\">\n {{tabularReport.tableStyle.title.text}}\n </div>\n </div>\n <div class=\"col-2\" style=\"text-align: right;\">\n <ng-container>\n <button *ngIf=\"tabularReport.matrix.attributes.length > 0\" \n class=\"export-btn icon-btn\" \n mat-button \n (click)=\"displayNotification = false\" \n [matMenuTriggerFor]=\"beforeMenu\">\n <mat-icon matTooltip=\"Export Data\" svgIcon=\"axo_export\"></mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <div (click)=\"$event.stopPropagation();\" class=\"send-excel-report-form\">\n <form [formGroup]=\"exportFormBuilder\">\n <div>XLSX</div>\n <input mat-menu-item type=\"text\" \n class=\"report-xslx-email\" \n formControlName=\"email\"\n (ngModelChange)=\"emailValidate()\">\n <p *ngIf=\"displayEmailValidationError\" class=\"email-send-email-error\">\n Please provide a valid email ID\n </p>\n <p *ngIf=\"displayNotification\" class=\"email-send-notification\">\n Export is in progress. You will receive the report on your email once completed.\n </p>\n <div class=\"send-excel-report-form-btn\">\n <button mat-menu-item class=\"cancel-btn btn text-white\" \n (click)=\"closeExportMenu()\">Cancel</button>\n <button mat-menu-item class=\"send-btn btn\" \n (click)=\"sendEmail()\" \n [disabled]=\"displayEmailValidationError\">\n Export <mat-icon>send</mat-icon>\n </button>\n </div>\n </form>\n </div>\n </mat-menu>\n </ng-container>\n </div>\n </div>\n \n\n\n <!-- Filter Container -->\n <div *ngIf=\"isEditable || tabularReport.filters.length>0\" [ngClass]=\"{'justify-end' : tabularReport.filters.length<1}\"\n class=\"filter-div px-3 h-11\">\n <div class=\"tabular-chart-filter\" [ngClass]=\"{'dashboard-tabular-filter' : !isEditable}\"\n *ngIf=\"isEditable || tabularReport.filters.length>0 || tabularReport.categories.length>0\">\n <!-- <chart-filter\n class=\"flex\"\n [filters]=\"tabularReport.filters\"\n [categories]=\"tabularReport.categories\"\n [isEditable] = \"isEditable\"\n [filterSourceElementType]= \"filterSourceElementTypes.tabular\"\n [chartRef]=\"componentRef\">\n </chart-filter> -->\n <lib-report-filter [tabularReport]=\"tabularReport\"[filters]=\"tabularReport.filters\" [categories]=\"tabularReport.categories\" [reportId]=\"reportId\"\n [screenType]=\"screenType\" [dataModel]=\"dataModel\" [isEditable]=\"isEditable\" [appVersion]=\"appVersionId\"\n [filterSourceElementType]=\"filterSourceElementTypes.tabular\" (applyFilterEvent)=\"applyLocalFilter()\">\n </lib-report-filter>\n </div>\n </div>\n\n <div class=\"no-column-drop-here\" *ngIf='tabularReport.matrix.attributes.length===0'>\n <div class=\"text-center\">\n <mat-icon class=\"table-view-icon\">table_view</mat-icon>\n <p class=\"font-size m-0 no-column-text\">No columns have been dropped yet !</p>\n </div>\n </div>\n <div #removeFromDashboardMenu [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\"\n [matMenuTriggerFor]=\"contextMenu\" *ngIf=\"screenTypes.dashboardBuilder === screenType\"\n class=\"drillthrough-menu-trigger\">\n </div>\n <!-- Mat Menu trigger for table columns-->\n <mat-menu #contextMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n </mat-menu>\n \n\n <lib-detail-view\n *ngIf='tabularReport.colGrouping.length===0 && tabularReport.rowGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [parentRef]=\"componentRef\"\n [reportId]=\"reportId\"\n [appVersionId]=\"appVersionId\"\n [x1MediaUrl]=\"x1MediaUrl\"\n >\n </lib-detail-view>\n <lib-row-group-view *ngIf='tabularReport.rowGrouping.length>0 && tabularReport.colGrouping.length===0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-row-group-view>\n\n <lib-column-group-view *ngIf='tabularReport.colGrouping.length>0 '\n [x1ImageMediaUrl]=\"x1ImageMediaUrl\"\n [tabularReport]=\"tabularReport\"\n [isEditable]=\"isEditable\"\n [elementGuid]=\"elementGuid\"\n [screenType]=\"screenType\"\n [drillThroughFilterInput]=\"drillThroughFilterInput\"\n [drillThroughParentType]=\"drillThroughParentType\"\n [reportId]=\"reportId\"\n [parentRef]=\"componentRef\">\n </lib-column-group-view>\n\n</div>\n<ng-container *ngIf=\"tabularReport.isDataLoaded \">\n<div class=\"flex align-items deatil-group-table-paginator\" *ngIf='tabularReport.colGrouping.length===0'>\n <mat-paginator [disabled]=\"isDataLoading\" (page)=\"handlePageEvent($event)\" [length]=\"tabularReport.pageLength\" [pageSize]=\"tabularReport.pageSize\"\n [pageIndex]=\"tabularReport.pageIndex\" [pageSizeOptions]=\"[10, 25, 50, 100]\" aria-label=\"Select page\" class=\"mat-paginator flex justify-end w-full\">\n </mat-paginator>\n</div>\n</ng-container>\n<ng-container *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\">\n <app-ghost-loader [elementType]=\"GhostLoaderType.PaginationViewLoader\" class=\"tabular-pagination-ghost-loader\"></app-ghost-loader>\n</ng-container>\n<div #drillThorughMenuTrigger [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"drillThroughMenu\" class=\"drillthrough-menu-trigger\"></div>\n<!-- Mat Menu trigger for table cells-->\n<mat-menu #drillThroughMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <button mat-menu-item [matMenuTriggerFor]=\"drillThroughPages\">Drill Through</button>\n <button mat-menu-item *ngIf=\"screenTypes.dashboardBuilder === screenType\" (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n</mat-menu>\n<mat-menu #drillThroughPages=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <ng-container *ngFor=\" let page of pages\">\n <button mat-menu-item (click)='pageClick(page)'> {{page.name}}</button>\n </ng-container>\n </ng-template>\n </div>\n</mat-menu>\n", styles: ["tabular{display:block;height:100%}table{width:auto;height:auto}shadow .tbody{box-shadow:2px 2px}th{background-color:#f2f8ff}.down-arrow{top:3px;min-height:13px;max-height:14px;position:relative}.aggregate-fun{padding-left:10px;font-size:12px}.mat-menu-item{background:transparent;color:#1e293b;font-size:12px}.export-btn{right:1rem;cursor:pointer;float:right;top:.2rem;position:sticky;left:0;display:flex;align-items:center;justify-content:center}.export-btn .mat-icon{min-height:21px!important}.filter-div{position:sticky;top:0;left:0;right:0;background:#ffffff;height:3.7rem!important;width:100%;min-width:100%;max-width:100%;align-items:center}.filter-div .tabular-chart-filter{display:inline-block;width:calc(100% - 40px);max-width:calc(100% - 40px);min-width:calc(100% - 40px)}.filter-div .dashboard-tabular-filter{width:calc(100% - 40px)}.send-excel-report-form{padding:8px 18px;height:auto;background-color:#fff!important}.send-excel-report-form form{display:flex;flex-direction:column;row-gap:1rem}.send-excel-report-form .email-send-notification{font-size:10px;color:green;text-align:center;width:200px;margin:0 auto}.send-excel-report-form .email-send-email-error{font-size:10px;color:red;text-align:left;width:200px}.send-excel-report-form .report-xslx-email{border:1px solid #8080802e;height:34px;width:100%}.send-excel-report-form .report-xslx-email:hover{background:rgba(0,0,0,.04)!important;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn{display:flex;justify-content:center;align-items:center;column-gap:1rem}.send-excel-report-form .send-excel-report-form-btn .btn{height:34px;line-height:34px;flex:50;border-radius:5px}.send-excel-report-form .send-excel-report-form-btn .cancel-btn{border:1px solid #80808059;display:flex;justify-content:center;align-items:center;color:#172b4d!important}.send-excel-report-form .send-excel-report-form-btn .cancel-btn:hover{background:rgba(0,0,0,.04)!important}.send-excel-report-form .send-excel-report-form-btn .send-btn{border:1px solid #7963ED;background-color:#7963ed!important;color:#fff;display:flex;align-items:center;justify-content:center;column-gap:.5rem}.send-excel-report-form .send-excel-report-form-btn .send-btn mat-icon{color:#fff;font-size:19px;height:1.188rem;min-height:1.188rem;width:1.188rem;min-width:1.188rem}.drillthrough-menu-trigger{visibility:hidden;position:fixed}.deatil-group-table-paginator{position:absolute;bottom:0;right:0;display:flex;width:100%;height:2.75rem;align-items:center}.deatil-group-table-paginator .mat-paginator{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container{margin:0;padding:0;max-height:2rem;white-space:nowrap;align-items:center;min-width:100%}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container{padding:0 1rem!important;column-gap:1.2rem;justify-content:end;flex-wrap:wrap;border:1px solid #80808047;max-height:auto;margin:0;width:100%;background-color:#fff}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size{column-gap:1.2rem;row-gap:.5rem;justify-content:end;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-page-size .mat-paginator-page-size-label{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions{margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-paginator-range-label{margin:0 8px 0 0!important;margin:0;padding:0;max-height:2rem;white-space:nowrap}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions button{width:.6rem;max-width:.6rem;width:2rem;max-width:2rem;height:2rem;max-height:2rem;min-height:2rem;border-radius:4px}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-button-base:hover{background-color:#eee}.deatil-group-table-paginator .mat-paginator ::ng-deep .mat-paginator-outer-container .mat-paginator-container .mat-paginator-range-actions .mat-icon-button.mat-button-disabled.mat-button-disabled:hover{background-color:transparent!important}.tabular-pagination-ghost-loader{position:absolute;bottom:0;height:4.8rem;background:#fff;padding-right:1rem}.no-column-drop-here{display:flex;align-items:center;justify-content:center;height:calc(100% - 4.2rem);min-height:calc(100% - 4.2rem);max-height:calc(100% - 4.2rem)}.no-column-text,.table-view-icon{color:#a39f9f!important}\n"] }]
|
|
21228
21228
|
}], function () { return [{ type: FieldsListService }, { type: ReportBuilderMasterService }, { type: ElementService }, { type: CommonService }, { type: TabularReportService }, { type: i9.FormBuilder }, { type: UserDataService }, { type: i0.ChangeDetectorRef }, { type: DashboardBuilderService }, { type: DrillThroughService }, { type: i2.Router }]; }, { page: [{
|
|
21229
21229
|
type: Input
|
|
21230
21230
|
}], tabularReport: [{
|