mis-crystal-design-system 18.1.2-signal → 18.1.2
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/button/button.component.d.ts +0 -2
- package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +4 -0
- package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +9 -5
- package/esm2022/button/button.component.mjs +7 -15
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/chip/chip.component.mjs +4 -4
- package/esm2022/datepicker_v2/tz-datepicker.directive.mjs +17 -10
- package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +87 -32
- package/esm2022/daterangepicker_v2/tz-daterangepicker.directive.mjs +6 -3
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +316 -141
- package/esm2022/drawer/drawer-body/drawer-body.component.mjs +4 -4
- package/esm2022/fab/fab.component.mjs +4 -4
- package/esm2022/filter/filter-panel/filter-panel.component.mjs +28 -27
- package/esm2022/input/directives/input/input.directive.mjs +28 -10
- package/esm2022/input/mis-input.component.mjs +19 -13
- package/esm2022/loader/loader.component.mjs +13 -7
- package/esm2022/modal/module-wrapper/module-wrapper.component.mjs +4 -4
- package/esm2022/multi-select-dropdown/multi-select-dropdown.component.mjs +10 -5
- package/esm2022/phone-input/phone-input.component.mjs +4 -4
- package/esm2022/radio-button/radio-button.component.mjs +4 -4
- package/esm2022/ske-loader/ske-loader.component.mjs +4 -4
- package/esm2022/slider/slider.component.mjs +4 -4
- package/esm2022/snackbar/snackbar/snackbar.component.mjs +4 -4
- package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +24 -20
- package/esm2022/switch/switch.component.mjs +2 -4
- package/esm2022/table/sub-table/sub-table.component.mjs +18 -5
- package/esm2022/table/table.component.mjs +184 -95
- package/esm2022/table/table.module.mjs +7 -5
- package/esm2022/toast/toast.component.mjs +4 -4
- package/esm2022/tooltip/tooltip-container/tooltip.component.mjs +4 -4
- package/esm2022/virtual-scroll/virtual-scroll.component.mjs +4 -4
- package/fesm2022/mis-crystal-design-system-button.mjs +6 -14
- package/fesm2022/mis-crystal-design-system-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-checkbox.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-checkbox.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-chip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-chip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +101 -39
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +320 -142
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-drawer.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-drawer.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-fab.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-fab.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-filter.mjs +27 -26
- package/fesm2022/mis-crystal-design-system-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input.mjs +45 -21
- package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-loader.mjs +12 -6
- package/fesm2022/mis-crystal-design-system-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-modal.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-modal.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs +9 -4
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-phone-input.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-phone-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-radio-button.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-radio-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-slider.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-snackbar.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-snackbar.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +23 -19
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-switch.mjs +1 -3
- package/fesm2022/mis-crystal-design-system-switch.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +205 -102
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-toast.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-toast.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-tooltip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-tooltip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs.map +1 -1
- package/filter/filter-panel/filter-panel.component.d.ts +1 -1
- package/input/directives/input/input.directive.d.ts +3 -4
- package/input/mis-input.component.d.ts +3 -6
- package/input/mis-input.component.scss +11 -4
- package/loader/loader.component.d.ts +7 -1
- package/package.json +17 -17
- package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +2 -2
- package/table/table.component.d.ts +12 -1
- package/table/table.module.d.ts +2 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Component, ViewChild, ViewChildren, input, output, signal } from "@angular/core";
|
|
1
|
+
import { Component, ViewChild, ViewChildren, input, output, signal, computed } from "@angular/core";
|
|
2
|
+
import { effect } from "@angular/core";
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
const _c0 = ["filter"];
|
|
4
5
|
const _c1 = ["table"];
|
|
@@ -20,7 +21,7 @@ const _c16 = () => ({ display: "flex" });
|
|
|
20
21
|
const _c17 = () => ({ "margin-right": "4px" });
|
|
21
22
|
function TableComponent_mis_table_filter_1_Template(rf, ctx) { if (rf & 1) {
|
|
22
23
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
23
|
-
i0.ɵɵelementStart(0, "mis-table-filter",
|
|
24
|
+
i0.ɵɵelementStart(0, "mis-table-filter", 13, 1);
|
|
24
25
|
i0.ɵɵlistener("filtersApplied", function TableComponent_mis_table_filter_1_Template_mis_table_filter_filtersApplied_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.updateAppliedFilters($event)); });
|
|
25
26
|
i0.ɵɵelementEnd();
|
|
26
27
|
} if (rf & 2) {
|
|
@@ -28,7 +29,7 @@ function TableComponent_mis_table_filter_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
28
29
|
i0.ɵɵproperty("containerStyles", ctx_r1.filterContainerStyles())("filtersData", ctx_r1.filterData());
|
|
29
30
|
} }
|
|
30
31
|
function TableComponent_div_5_p_2_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
-
i0.ɵɵelementStart(0, "p",
|
|
32
|
+
i0.ɵɵelementStart(0, "p", 20);
|
|
32
33
|
i0.ɵɵtext(1);
|
|
33
34
|
i0.ɵɵelementEnd();
|
|
34
35
|
} if (rf & 2) {
|
|
@@ -37,28 +38,29 @@ function TableComponent_div_5_p_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
37
38
|
i0.ɵɵtextInterpolate1(" ", (colHeader_r4 == null ? null : colHeader_r4.data) || " ", " ");
|
|
38
39
|
} }
|
|
39
40
|
function TableComponent_div_5_span_3_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
-
i0.ɵɵelement(0, "span",
|
|
41
|
+
i0.ɵɵelement(0, "span", 25);
|
|
41
42
|
} }
|
|
42
43
|
function TableComponent_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
|
|
43
44
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
44
|
-
i0.ɵɵelementStart(0, "span",
|
|
45
|
+
i0.ɵɵelementStart(0, "span", 21);
|
|
45
46
|
i0.ɵɵlistener("click", function TableComponent_div_5_span_3_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const colHeader_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.filterData.set(colHeader_r4.filters); ctx_r1.toggleFilter(colHeader_r4.data); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
46
|
-
i0.ɵɵtemplate(1, TableComponent_div_5_span_3_span_1_Template, 1, 0, "span",
|
|
47
|
+
i0.ɵɵtemplate(1, TableComponent_div_5_span_3_span_1_Template, 1, 0, "span", 22);
|
|
47
48
|
i0.ɵɵnamespaceSVG();
|
|
48
|
-
i0.ɵɵelementStart(2, "svg",
|
|
49
|
-
i0.ɵɵelement(3, "path",
|
|
49
|
+
i0.ɵɵelementStart(2, "svg", 23);
|
|
50
|
+
i0.ɵɵelement(3, "path", 24);
|
|
50
51
|
i0.ɵɵelementEnd()();
|
|
51
52
|
} if (rf & 2) {
|
|
53
|
+
let tmp_5_0;
|
|
52
54
|
const colHeader_r4 = i0.ɵɵnextContext().$implicit;
|
|
53
55
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
54
56
|
i0.ɵɵadvance();
|
|
55
|
-
i0.ɵɵproperty("ngIf", (ctx_r1.appliedFilters[colHeader_r4.data] == null ? null :
|
|
57
|
+
i0.ɵɵproperty("ngIf", ((tmp_5_0 = ctx_r1.appliedFilters()[colHeader_r4.data]) == null ? null : tmp_5_0.length) > 0);
|
|
56
58
|
} }
|
|
57
59
|
function TableComponent_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
|
|
58
60
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
59
|
-
i0.ɵɵelementStart(0, "span",
|
|
61
|
+
i0.ɵɵelementStart(0, "span", 26);
|
|
60
62
|
i0.ɵɵlistener("click", function TableComponent_div_5_span_4_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.toggleCheckbox(); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
61
|
-
i0.ɵɵelement(1, "mis-checkbox",
|
|
63
|
+
i0.ɵɵelement(1, "mis-checkbox", 27);
|
|
62
64
|
i0.ɵɵelementEnd();
|
|
63
65
|
} if (rf & 2) {
|
|
64
66
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -67,7 +69,7 @@ function TableComponent_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
|
|
|
67
69
|
} }
|
|
68
70
|
function TableComponent_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
|
|
69
71
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
70
|
-
i0.ɵɵelementStart(0, "span",
|
|
72
|
+
i0.ɵɵelementStart(0, "span", 28);
|
|
71
73
|
i0.ɵɵlistener("sortChange", function TableComponent_div_5_span_5_Template_span_sortChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSortChange($event)); });
|
|
72
74
|
i0.ɵɵelementEnd();
|
|
73
75
|
} if (rf & 2) {
|
|
@@ -77,16 +79,16 @@ function TableComponent_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
|
|
|
77
79
|
} }
|
|
78
80
|
function TableComponent_div_5_6_ng_template_0_Template(rf, ctx) { }
|
|
79
81
|
function TableComponent_div_5_6_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
-
i0.ɵɵtemplate(0, TableComponent_div_5_6_ng_template_0_Template, 0, 0, "ng-template",
|
|
82
|
+
i0.ɵɵtemplate(0, TableComponent_div_5_6_ng_template_0_Template, 0, 0, "ng-template", 29);
|
|
81
83
|
} if (rf & 2) {
|
|
82
84
|
const colHeader_r4 = i0.ɵɵnextContext().$implicit;
|
|
83
85
|
i0.ɵɵproperty("customComponent", colHeader_r4 == null ? null : colHeader_r4.componentRef)("data", colHeader_r4.data);
|
|
84
86
|
} }
|
|
85
87
|
function TableComponent_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
86
88
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
87
|
-
i0.ɵɵelementStart(0, "div",
|
|
89
|
+
i0.ɵɵelementStart(0, "div", 14, 2);
|
|
88
90
|
i0.ɵɵlistener("click", function TableComponent_div_5_Template_div_click_0_listener() { const colHeader_r4 = i0.ɵɵrestoreView(_r3).$implicit; return i0.ɵɵresetView((colHeader_r4 == null ? null : colHeader_r4.action) ? colHeader_r4 == null ? null : colHeader_r4.action(colHeader_r4) : null); });
|
|
89
|
-
i0.ɵɵtemplate(2, TableComponent_div_5_p_2_Template, 2, 1, "p",
|
|
91
|
+
i0.ɵɵtemplate(2, TableComponent_div_5_p_2_Template, 2, 1, "p", 15)(3, TableComponent_div_5_span_3_Template, 4, 1, "span", 16)(4, TableComponent_div_5_span_4_Template, 2, 1, "span", 17)(5, TableComponent_div_5_span_5_Template, 1, 4, "span", 18)(6, TableComponent_div_5_6_Template, 1, 2, null, 19);
|
|
90
92
|
i0.ɵɵelementEnd();
|
|
91
93
|
} if (rf & 2) {
|
|
92
94
|
const colHeader_r4 = ctx.$implicit;
|
|
@@ -104,7 +106,7 @@ function TableComponent_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
|
104
106
|
} }
|
|
105
107
|
function TableComponent_div_7_div_2_div_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
106
108
|
i0.ɵɵelementContainerStart(0);
|
|
107
|
-
i0.ɵɵelement(1, "span",
|
|
109
|
+
i0.ɵɵelement(1, "span", 40);
|
|
108
110
|
i0.ɵɵelementContainerEnd();
|
|
109
111
|
} if (rf & 2) {
|
|
110
112
|
const col_r12 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -121,50 +123,50 @@ function TableComponent_div_7_div_2_div_2_ng_template_2_Template(rf, ctx) { if (
|
|
|
121
123
|
i0.ɵɵtextInterpolate(col_r12);
|
|
122
124
|
} }
|
|
123
125
|
function TableComponent_div_7_div_2_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
-
i0.ɵɵelementStart(0, "div",
|
|
125
|
-
i0.ɵɵtemplate(1, TableComponent_div_7_div_2_div_2_ng_container_1_Template, 2, 1, "ng-container",
|
|
126
|
+
i0.ɵɵelementStart(0, "div", 38);
|
|
127
|
+
i0.ɵɵtemplate(1, TableComponent_div_7_div_2_div_2_ng_container_1_Template, 2, 1, "ng-container", 39)(2, TableComponent_div_7_div_2_div_2_ng_template_2_Template, 2, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
|
|
126
128
|
i0.ɵɵelementEnd();
|
|
127
129
|
} if (rf & 2) {
|
|
128
130
|
let tmp_10_0;
|
|
129
131
|
let tmp_12_0;
|
|
130
132
|
const plainText_r14 = i0.ɵɵreference(3);
|
|
131
|
-
const
|
|
133
|
+
const colIndex_r13 = i0.ɵɵnextContext().index;
|
|
132
134
|
const rowIndex_r15 = i0.ɵɵnextContext().index;
|
|
133
135
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
134
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(4, _c11, ((tmp_10_0 = ctx_r1.tableConfig()) == null ? null : tmp_10_0.colConfig[
|
|
136
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(4, _c11, ((tmp_10_0 = ctx_r1.tableConfig()) == null ? null : tmp_10_0.colConfig[colIndex_r13] == null ? null : tmp_10_0.colConfig[colIndex_r13].style == null ? null : tmp_10_0.colConfig[colIndex_r13].style.color) || "", ctx_r1.previewLines() || 3))("ngClass", i0.ɵɵpureFunction1(7, _c12, ctx_r1.collapseColIndex() == colIndex_r13 && ctx_r1.expandedMap()[rowIndex_r15]));
|
|
135
137
|
i0.ɵɵadvance();
|
|
136
|
-
i0.ɵɵproperty("ngIf", ((tmp_12_0 = ctx_r1.tableConfig().colConfig[
|
|
138
|
+
i0.ɵɵproperty("ngIf", ((tmp_12_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_12_0.type) === "html")("ngIfElse", plainText_r14);
|
|
137
139
|
} }
|
|
138
140
|
function TableComponent_div_7_div_2_3_ng_template_0_Template(rf, ctx) { }
|
|
139
141
|
function TableComponent_div_7_div_2_3_Template(rf, ctx) { if (rf & 1) {
|
|
140
|
-
i0.ɵɵtemplate(0, TableComponent_div_7_div_2_3_ng_template_0_Template, 0, 0, "ng-template",
|
|
142
|
+
i0.ɵɵtemplate(0, TableComponent_div_7_div_2_3_ng_template_0_Template, 0, 0, "ng-template", 29);
|
|
141
143
|
} if (rf & 2) {
|
|
142
144
|
const ctx_r15 = i0.ɵɵnextContext();
|
|
143
145
|
const col_r12 = ctx_r15.$implicit;
|
|
144
|
-
const
|
|
146
|
+
const colIndex_r13 = ctx_r15.index;
|
|
145
147
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
146
|
-
i0.ɵɵproperty("customComponent", ctx_r1.tableConfig().colConfig[
|
|
148
|
+
i0.ɵɵproperty("customComponent", ctx_r1.tableConfig().colConfig[colIndex_r13].componentRef)("data", col_r12);
|
|
147
149
|
} }
|
|
148
150
|
function TableComponent_div_7_div_2_mis_actions_cell_4_Template(rf, ctx) { if (rf & 1) {
|
|
149
151
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
150
|
-
i0.ɵɵelementStart(0, "mis-actions-cell",
|
|
152
|
+
i0.ɵɵelementStart(0, "mis-actions-cell", 41);
|
|
151
153
|
i0.ɵɵlistener("actionClick", function TableComponent_div_7_div_2_mis_actions_cell_4_Template_mis_actions_cell_actionClick_0_listener($event) { i0.ɵɵrestoreView(_r17); const rowIndex_r15 = i0.ɵɵnextContext(2).index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onActionClick($event, rowIndex_r15)); });
|
|
152
154
|
i0.ɵɵelementEnd();
|
|
153
155
|
} if (rf & 2) {
|
|
154
156
|
let tmp_11_0;
|
|
155
157
|
const ctx_r15 = i0.ɵɵnextContext();
|
|
156
158
|
const col_r12 = ctx_r15.$implicit;
|
|
157
|
-
const
|
|
159
|
+
const colIndex_r13 = ctx_r15.index;
|
|
158
160
|
const row_r18 = i0.ɵɵnextContext().$implicit;
|
|
159
161
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
160
|
-
i0.ɵɵproperty("cellData", col_r12)("config", ctx_r1.tableConfig().colConfig[
|
|
162
|
+
i0.ɵɵproperty("cellData", col_r12)("config", ctx_r1.tableConfig().colConfig[colIndex_r13])("ngClass", i0.ɵɵpureFunction1(3, _c13, (((tmp_11_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_11_0.actionType) === "checkbox" || ((tmp_11_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_11_0.actionType) === "row-collapse") && ctx_r1.isRowDisabled(row_r18)));
|
|
161
163
|
} }
|
|
162
164
|
function TableComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
163
165
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
164
|
-
i0.ɵɵelementStart(0, "div",
|
|
165
|
-
i0.ɵɵlistener("click", function TableComponent_div_7_div_2_Template_div_click_0_listener() { let tmp_9_0; const ctx_r10 = i0.ɵɵrestoreView(_r10); const col_r12 = ctx_r10.$implicit; const
|
|
166
|
-
i0.ɵɵelementStart(1, "div",
|
|
167
|
-
i0.ɵɵtemplate(2, TableComponent_div_7_div_2_div_2_Template, 4, 9, "div",
|
|
166
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
167
|
+
i0.ɵɵlistener("click", function TableComponent_div_7_div_2_Template_div_click_0_listener() { let tmp_9_0; const ctx_r10 = i0.ɵɵrestoreView(_r10); const col_r12 = ctx_r10.$implicit; const colIndex_r13 = ctx_r10.index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.colConfig[colIndex_r13] == null ? null : tmp_9_0.colConfig[colIndex_r13].action) && ((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.colConfig[colIndex_r13] == null ? null : tmp_9_0.colConfig[colIndex_r13].actionType) !== "checkbox" ? (tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.colConfig[colIndex_r13] == null ? null : tmp_9_0.colConfig[colIndex_r13].action(col_r12) : null); });
|
|
168
|
+
i0.ɵɵelementStart(1, "div", 35);
|
|
169
|
+
i0.ɵɵtemplate(2, TableComponent_div_7_div_2_div_2_Template, 4, 9, "div", 36)(3, TableComponent_div_7_div_2_3_Template, 1, 2, null, 19)(4, TableComponent_div_7_div_2_mis_actions_cell_4_Template, 1, 5, "mis-actions-cell", 37);
|
|
168
170
|
i0.ɵɵelementEnd()();
|
|
169
171
|
} if (rf & 2) {
|
|
170
172
|
let tmp_8_0;
|
|
@@ -173,22 +175,22 @@ function TableComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
173
175
|
let tmp_12_0;
|
|
174
176
|
let tmp_13_0;
|
|
175
177
|
let tmp_14_0;
|
|
176
|
-
const
|
|
178
|
+
const colIndex_r13 = ctx.index;
|
|
177
179
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
178
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(8, _c8, ((tmp_8_0 = ctx_r1.tableConfig()) == null ? null : tmp_8_0.colConfig[
|
|
180
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(8, _c8, ((tmp_8_0 = ctx_r1.tableConfig()) == null ? null : tmp_8_0.colConfig[colIndex_r13] == null ? null : tmp_8_0.colConfig[colIndex_r13].style == null ? null : tmp_8_0.colConfig[colIndex_r13].style.width) || ((tmp_8_0 = ctx_r1.tableConfig()) == null ? null : tmp_8_0.colHeaderConfig[colIndex_r13] == null ? null : tmp_8_0.colHeaderConfig[colIndex_r13].style == null ? null : tmp_8_0.colHeaderConfig[colIndex_r13].style.width) || ""))("ngClass", i0.ɵɵpureFunction1(10, _c9, ctx_r1.tableConfig().cellHover));
|
|
179
181
|
i0.ɵɵadvance();
|
|
180
|
-
i0.ɵɵstyleMap((tmp_10_0 = ctx_r1.tableConfig().colConfig[
|
|
181
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(12, _c10, ((tmp_11_0 = ctx_r1.tableConfig().colConfig[
|
|
182
|
+
i0.ɵɵstyleMap((tmp_10_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_10_0.style);
|
|
183
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(12, _c10, ((tmp_11_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_11_0.action) ? "pointer" : "default", ((tmp_11_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_11_0.style == null ? null : tmp_11_0.style.justifyContent) ? (tmp_11_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_11_0.style == null ? null : tmp_11_0.style.justifyContent : ((tmp_11_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_11_0.type) === "number" ? "flex-end" : "space-between"));
|
|
182
184
|
i0.ɵɵadvance();
|
|
183
|
-
i0.ɵɵproperty("ngIf", ((tmp_12_0 = ctx_r1.tableConfig().colConfig[
|
|
185
|
+
i0.ɵɵproperty("ngIf", ((tmp_12_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_12_0.type) !== "custom" && ((tmp_12_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_12_0.type) !== "actions");
|
|
184
186
|
i0.ɵɵadvance();
|
|
185
|
-
i0.ɵɵproperty("ngIf", ((tmp_13_0 = ctx_r1.tableConfig().colConfig[
|
|
187
|
+
i0.ɵɵproperty("ngIf", ((tmp_13_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_13_0.type) === "custom");
|
|
186
188
|
i0.ɵɵadvance();
|
|
187
|
-
i0.ɵɵproperty("ngIf", ((tmp_14_0 = ctx_r1.tableConfig().colConfig[
|
|
189
|
+
i0.ɵɵproperty("ngIf", ((tmp_14_0 = ctx_r1.tableConfig().colConfig[colIndex_r13]) == null ? null : tmp_14_0.type) === "actions");
|
|
188
190
|
} }
|
|
189
191
|
function TableComponent_div_7_div_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
190
192
|
i0.ɵɵelementContainerStart(0);
|
|
191
|
-
i0.ɵɵelementStart(1, "div",
|
|
193
|
+
i0.ɵɵelementStart(1, "div", 43);
|
|
192
194
|
i0.ɵɵtext(2, " Loading... ");
|
|
193
195
|
i0.ɵɵelementEnd();
|
|
194
196
|
i0.ɵɵelementContainerEnd();
|
|
@@ -198,7 +200,7 @@ function TableComponent_div_7_div_3_ng_container_1_Template(rf, ctx) { if (rf &
|
|
|
198
200
|
} }
|
|
199
201
|
function TableComponent_div_7_div_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
200
202
|
i0.ɵɵelementContainerStart(0);
|
|
201
|
-
i0.ɵɵelementStart(1, "div",
|
|
203
|
+
i0.ɵɵelementStart(1, "div", 43);
|
|
202
204
|
i0.ɵɵtext(2, " No Data Available... ");
|
|
203
205
|
i0.ɵɵelementEnd();
|
|
204
206
|
i0.ɵɵelementContainerEnd();
|
|
@@ -208,33 +210,33 @@ function TableComponent_div_7_div_3_ng_container_2_Template(rf, ctx) { if (rf &
|
|
|
208
210
|
} }
|
|
209
211
|
function TableComponent_div_7_div_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
210
212
|
i0.ɵɵelementContainerStart(0);
|
|
211
|
-
i0.ɵɵelement(1, "sub-table",
|
|
213
|
+
i0.ɵɵelement(1, "sub-table", 44);
|
|
212
214
|
i0.ɵɵelementContainerEnd();
|
|
213
215
|
} if (rf & 2) {
|
|
214
216
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
215
217
|
i0.ɵɵadvance();
|
|
216
|
-
i0.ɵɵproperty("config", ctx_r1.subTableconfig)("tableData", ctx_r1.subTableData);
|
|
218
|
+
i0.ɵɵproperty("config", ctx_r1.subTableconfig())("tableData", ctx_r1.subTableData());
|
|
217
219
|
} }
|
|
218
220
|
function TableComponent_div_7_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
219
|
-
i0.ɵɵelementStart(0, "div",
|
|
220
|
-
i0.ɵɵtemplate(1, TableComponent_div_7_div_3_ng_container_1_Template, 3, 2, "ng-container",
|
|
221
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
222
|
+
i0.ɵɵtemplate(1, TableComponent_div_7_div_3_ng_container_1_Template, 3, 2, "ng-container", 19)(2, TableComponent_div_7_div_3_ng_container_2_Template, 3, 2, "ng-container", 19)(3, TableComponent_div_7_div_3_ng_container_3_Template, 2, 2, "ng-container", 19);
|
|
221
223
|
i0.ɵɵelementEnd();
|
|
222
224
|
} if (rf & 2) {
|
|
223
225
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
224
226
|
i0.ɵɵadvance();
|
|
225
|
-
i0.ɵɵproperty("ngIf", ctx_r1.subTableDataLoading);
|
|
227
|
+
i0.ɵɵproperty("ngIf", ctx_r1.subTableDataLoading());
|
|
226
228
|
i0.ɵɵadvance();
|
|
227
|
-
i0.ɵɵproperty("ngIf", !ctx_r1.subTableDataLoading && ctx_r1.subTableData.length === 0);
|
|
229
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.subTableDataLoading() && ctx_r1.subTableData().length === 0);
|
|
228
230
|
i0.ɵɵadvance();
|
|
229
|
-
i0.ɵɵproperty("ngIf", !ctx_r1.subTableDataLoading && ctx_r1.subTableData.length > 0);
|
|
231
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.subTableDataLoading() && ctx_r1.subTableData().length > 0);
|
|
230
232
|
} }
|
|
231
233
|
function TableComponent_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
232
234
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
233
|
-
i0.ɵɵelementStart(0, "div",
|
|
235
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 31);
|
|
234
236
|
i0.ɵɵlistener("click", function TableComponent_div_7_Template_div_click_1_listener() { const i_r9 = i0.ɵɵrestoreView(_r8).index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectRow(i_r9)); });
|
|
235
|
-
i0.ɵɵtemplate(2, TableComponent_div_7_div_2_Template, 5, 15, "div",
|
|
237
|
+
i0.ɵɵtemplate(2, TableComponent_div_7_div_2_Template, 5, 15, "div", 32);
|
|
236
238
|
i0.ɵɵelementEnd();
|
|
237
|
-
i0.ɵɵtemplate(3, TableComponent_div_7_div_3_Template, 4, 3, "div",
|
|
239
|
+
i0.ɵɵtemplate(3, TableComponent_div_7_div_3_Template, 4, 3, "div", 33);
|
|
238
240
|
i0.ɵɵelementEnd();
|
|
239
241
|
} if (rf & 2) {
|
|
240
242
|
let tmp_7_0;
|
|
@@ -248,25 +250,35 @@ function TableComponent_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
|
248
250
|
i0.ɵɵadvance();
|
|
249
251
|
i0.ɵɵproperty("ngForOf", row_r18);
|
|
250
252
|
i0.ɵɵadvance();
|
|
251
|
-
i0.ɵɵproperty("ngIf", ((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.canExpand) && ctx_r1.expandedIndex === i_r9);
|
|
253
|
+
i0.ɵɵproperty("ngIf", ((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.canExpand) && ctx_r1.expandedIndex() === i_r9);
|
|
252
254
|
} }
|
|
253
|
-
function
|
|
255
|
+
function TableComponent_Conditional_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
254
256
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
255
|
-
i0.ɵɵelementStart(0, "
|
|
256
|
-
i0.ɵɵlistener("
|
|
257
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "mis-dropdown", 52);
|
|
258
|
+
i0.ɵɵlistener("onChange", function TableComponent_Conditional_9_Conditional_3_Template_mis_dropdown_onChange_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPageSizeChange($event)); });
|
|
259
|
+
i0.ɵɵelementEnd()();
|
|
260
|
+
} if (rf & 2) {
|
|
261
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
262
|
+
i0.ɵɵadvance();
|
|
263
|
+
i0.ɵɵproperty("data", ctx_r1.pageSizeOptions())("selectedItem", ctx_r1.selectedPageSizeOption())("width", "90px")("height", "32px")("searchEnabled", false)("dropdownListHeight", "100px");
|
|
264
|
+
} }
|
|
265
|
+
function TableComponent_Conditional_9_ng_container_8_div_1_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
266
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
267
|
+
i0.ɵɵelementStart(0, "span", 56);
|
|
268
|
+
i0.ɵɵlistener("click", function TableComponent_Conditional_9_ng_container_8_div_1_span_1_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r21); const pageNumber_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.updateSelectedPage(pageNumber_r22)); });
|
|
257
269
|
i0.ɵɵtext(1);
|
|
258
270
|
i0.ɵɵelementEnd();
|
|
259
271
|
} if (rf & 2) {
|
|
260
272
|
let tmp_6_0;
|
|
261
|
-
const
|
|
273
|
+
const pageNumber_r22 = i0.ɵɵnextContext().$implicit;
|
|
262
274
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
263
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c15,
|
|
275
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c15, pageNumber_r22 == ((tmp_6_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_6_0.selectedPage)));
|
|
264
276
|
i0.ɵɵadvance();
|
|
265
|
-
i0.ɵɵtextInterpolate(
|
|
277
|
+
i0.ɵɵtextInterpolate(pageNumber_r22);
|
|
266
278
|
} }
|
|
267
|
-
function
|
|
268
|
-
i0.ɵɵelementStart(0, "span",
|
|
269
|
-
i0.ɵɵelement(2, "span",
|
|
279
|
+
function TableComponent_Conditional_9_ng_container_8_div_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
280
|
+
i0.ɵɵelementStart(0, "span", 57)(1, "div", 43);
|
|
281
|
+
i0.ɵɵelement(2, "span", 58)(3, "span", 58)(4, "span", 59);
|
|
270
282
|
i0.ɵɵelementEnd()();
|
|
271
283
|
} if (rf & 2) {
|
|
272
284
|
i0.ɵɵadvance();
|
|
@@ -276,59 +288,62 @@ function TableComponent_div_8_ng_container_7_div_1_span_2_Template(rf, ctx) { if
|
|
|
276
288
|
i0.ɵɵadvance();
|
|
277
289
|
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction0(5, _c17));
|
|
278
290
|
} }
|
|
279
|
-
function
|
|
291
|
+
function TableComponent_Conditional_9_ng_container_8_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
280
292
|
i0.ɵɵelementStart(0, "div");
|
|
281
|
-
i0.ɵɵtemplate(1,
|
|
293
|
+
i0.ɵɵtemplate(1, TableComponent_Conditional_9_ng_container_8_div_1_span_1_Template, 2, 4, "span", 54)(2, TableComponent_Conditional_9_ng_container_8_div_1_span_2_Template, 5, 6, "span", 55);
|
|
282
294
|
i0.ɵɵelementEnd();
|
|
283
295
|
} if (rf & 2) {
|
|
284
|
-
const
|
|
296
|
+
const pageNumber_r22 = ctx.$implicit;
|
|
285
297
|
i0.ɵɵadvance();
|
|
286
|
-
i0.ɵɵproperty("ngIf",
|
|
298
|
+
i0.ɵɵproperty("ngIf", pageNumber_r22 != 0);
|
|
287
299
|
i0.ɵɵadvance();
|
|
288
|
-
i0.ɵɵproperty("ngIf",
|
|
300
|
+
i0.ɵɵproperty("ngIf", pageNumber_r22 == 0);
|
|
289
301
|
} }
|
|
290
|
-
function
|
|
302
|
+
function TableComponent_Conditional_9_ng_container_8_Template(rf, ctx) { if (rf & 1) {
|
|
291
303
|
i0.ɵɵelementContainerStart(0);
|
|
292
|
-
i0.ɵɵtemplate(1,
|
|
304
|
+
i0.ɵɵtemplate(1, TableComponent_Conditional_9_ng_container_8_div_1_Template, 3, 2, "div", 53);
|
|
293
305
|
i0.ɵɵelementContainerEnd();
|
|
294
306
|
} if (rf & 2) {
|
|
295
307
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
296
308
|
i0.ɵɵadvance();
|
|
297
309
|
i0.ɵɵproperty("ngForOf", ctx_r1.pages());
|
|
298
310
|
} }
|
|
299
|
-
function
|
|
311
|
+
function TableComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
300
312
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
301
|
-
i0.ɵɵelementStart(0, "div",
|
|
313
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "p", 45);
|
|
302
314
|
i0.ɵɵtext(2);
|
|
303
315
|
i0.ɵɵelementEnd();
|
|
304
|
-
i0.ɵɵ
|
|
305
|
-
i0.ɵɵ
|
|
316
|
+
i0.ɵɵtemplate(3, TableComponent_Conditional_9_Conditional_3_Template, 2, 6, "div", 46);
|
|
317
|
+
i0.ɵɵelementStart(4, "div", 47)(5, "span", 48);
|
|
318
|
+
i0.ɵɵlistener("click", function TableComponent_Conditional_9_Template_span_click_5_listener() { let tmp_3_0; i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.selectedPage) > 1 && ctx_r1.updateSelectedPage(((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.selectedPage) - 1)); });
|
|
306
319
|
i0.ɵɵnamespaceSVG();
|
|
307
|
-
i0.ɵɵelementStart(
|
|
308
|
-
i0.ɵɵelement(
|
|
320
|
+
i0.ɵɵelementStart(6, "svg", 49);
|
|
321
|
+
i0.ɵɵelement(7, "path", 50);
|
|
309
322
|
i0.ɵɵelementEnd()();
|
|
310
|
-
i0.ɵɵtemplate(
|
|
323
|
+
i0.ɵɵtemplate(8, TableComponent_Conditional_9_ng_container_8_Template, 2, 1, "ng-container", 19);
|
|
311
324
|
i0.ɵɵnamespaceHTML();
|
|
312
|
-
i0.ɵɵelementStart(
|
|
313
|
-
i0.ɵɵlistener("click", function
|
|
325
|
+
i0.ɵɵelementStart(9, "span", 48);
|
|
326
|
+
i0.ɵɵlistener("click", function TableComponent_Conditional_9_Template_span_click_9_listener() { let tmp_3_0; i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.selectedPage) < ((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.noOfPages) && ctx_r1.updateSelectedPage(((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.selectedPage) + 1)); });
|
|
314
327
|
i0.ɵɵnamespaceSVG();
|
|
315
|
-
i0.ɵɵelementStart(
|
|
316
|
-
i0.ɵɵelement(
|
|
328
|
+
i0.ɵɵelementStart(10, "svg", 49);
|
|
329
|
+
i0.ɵɵelement(11, "path", 51);
|
|
317
330
|
i0.ɵɵelementEnd()()()();
|
|
318
331
|
} if (rf & 2) {
|
|
319
332
|
let tmp_2_0;
|
|
320
|
-
let tmp_3_0;
|
|
321
333
|
let tmp_4_0;
|
|
322
334
|
let tmp_5_0;
|
|
335
|
+
let tmp_6_0;
|
|
323
336
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
324
337
|
i0.ɵɵadvance(2);
|
|
325
338
|
i0.ɵɵtextInterpolate3(" Showing ", (((tmp_2_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_2_0.selectedPage) - 1) * ctx_r1.tableConfig().paginationConfig.rowsPerPage + 1, "-", (((tmp_2_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_2_0.selectedPage) - 1) * ctx_r1.tableConfig().paginationConfig.rowsPerPage + ctx_r1.tableLength(), " of ", ctx_r1.tableConfig().paginationConfig.totalNoOfRows, " items ");
|
|
339
|
+
i0.ɵɵadvance();
|
|
340
|
+
i0.ɵɵconditional(ctx_r1.showPageSizeDropdown() ? 3 : -1);
|
|
326
341
|
i0.ɵɵadvance(2);
|
|
327
|
-
i0.ɵɵclassProp("page-nav-inactive", ((
|
|
342
|
+
i0.ɵɵclassProp("page-nav-inactive", ((tmp_4_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_4_0.selectedPage) === 1);
|
|
328
343
|
i0.ɵɵadvance(3);
|
|
329
|
-
i0.ɵɵproperty("ngIf", !((
|
|
344
|
+
i0.ɵɵproperty("ngIf", !((tmp_5_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_5_0.disablePageJumping));
|
|
330
345
|
i0.ɵɵadvance();
|
|
331
|
-
i0.ɵɵclassProp("page-nav-inactive", ((
|
|
346
|
+
i0.ɵɵclassProp("page-nav-inactive", ((tmp_6_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_6_0.selectedPage) === ((tmp_6_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_6_0.noOfPages));
|
|
332
347
|
} }
|
|
333
348
|
export class TableComponent {
|
|
334
349
|
constructor(renderer) {
|
|
@@ -349,6 +364,20 @@ export class TableComponent {
|
|
|
349
364
|
this.pages = signal([]);
|
|
350
365
|
this.tableLength = signal(0);
|
|
351
366
|
this.pageSelected = output();
|
|
367
|
+
this.pageSizeChanged = output();
|
|
368
|
+
this.pageSizeOptions = computed(() => {
|
|
369
|
+
const config = this.tableConfig()?.paginationConfig;
|
|
370
|
+
if (!config?.pageSizes || !Array.isArray(config.pageSizes) || !config.pageSizes?.length)
|
|
371
|
+
return [];
|
|
372
|
+
return config.pageSizes?.map(option => ({
|
|
373
|
+
label: option?.toString() || '',
|
|
374
|
+
value: option?.toString() || '',
|
|
375
|
+
})) || [];
|
|
376
|
+
});
|
|
377
|
+
this.showPageSizeDropdown = computed(() => {
|
|
378
|
+
return !!this.tableConfig()?.paginationConfig?.showPageSizeDropdown;
|
|
379
|
+
});
|
|
380
|
+
this.selectedPageSizeOption = signal({ label: "", value: "" });
|
|
352
381
|
// Convert inputs to signal-based inputs
|
|
353
382
|
this.tableConfig = input();
|
|
354
383
|
this.subTableconfig = input();
|
|
@@ -366,6 +395,51 @@ export class TableComponent {
|
|
|
366
395
|
this.multiColumnSort = signal([]);
|
|
367
396
|
this.sortChange = output();
|
|
368
397
|
this.headerAction = output();
|
|
398
|
+
effect(() => {
|
|
399
|
+
this.tableLength.set(this.tableData()?.length ?? 0);
|
|
400
|
+
const config = this.tableConfig();
|
|
401
|
+
if (config && config.activeRowIndex !== null && config.activeRowIndex !== undefined) {
|
|
402
|
+
const activeRowIndex = config.activeRowIndex;
|
|
403
|
+
this.activeRowIndex.set(Array.isArray(activeRowIndex) ? activeRowIndex : [activeRowIndex]);
|
|
404
|
+
}
|
|
405
|
+
if (this.rowCollapseConfigIndex() !== -1) {
|
|
406
|
+
this.buildExpandedMap();
|
|
407
|
+
}
|
|
408
|
+
if (config?.paginationConfig?.showPageSizeDropdown) {
|
|
409
|
+
const options = this.pageSizeOptions();
|
|
410
|
+
const rowsPerPage = this.tableConfig()?.paginationConfig?.rowsPerPage;
|
|
411
|
+
if (!Array.isArray(options) || !rowsPerPage) {
|
|
412
|
+
this.selectedPageSizeOption.set({ label: "", value: "" });
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
const selected = options.find(opt => opt?.value === rowsPerPage.toString());
|
|
416
|
+
if (selected) {
|
|
417
|
+
this.selectedPageSizeOption.set(selected);
|
|
418
|
+
}
|
|
419
|
+
else if (options.length > 0) {
|
|
420
|
+
// If configured rowsPerPage is not among options, pick the floor value and notify parent
|
|
421
|
+
const target = Number(rowsPerPage);
|
|
422
|
+
//Sort the options
|
|
423
|
+
const sorted = options
|
|
424
|
+
.map(opt => ({ opt, num: Number(opt?.value) }))
|
|
425
|
+
.filter(({ num }) => Number.isFinite(num))
|
|
426
|
+
.sort((a, b) => a.num - b.num);
|
|
427
|
+
let floorOption = sorted[0]?.opt;
|
|
428
|
+
for (let i = sorted.length - 1; i >= 0; i--) {
|
|
429
|
+
if (sorted[i].num <= target) {
|
|
430
|
+
floorOption = sorted[i].opt;
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
console.error("The configured rowsPerPage was not matched to any of the pageSizes sent in the paginationConfig. Selecting the nearest floor value among the available pageSizes.");
|
|
435
|
+
this.selectedPageSizeOption.set(floorOption);
|
|
436
|
+
this.onPageSizeChange(floorOption);
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
console.error("No page size options available.");
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}, { allowSignalWrites: true });
|
|
369
443
|
}
|
|
370
444
|
// Function to handle row click
|
|
371
445
|
selectRow(index) {
|
|
@@ -408,16 +482,27 @@ export class TableComponent {
|
|
|
408
482
|
}
|
|
409
483
|
buildExpandedMap() {
|
|
410
484
|
const newExpandedMap = {};
|
|
485
|
+
const collapseIndex = this.rowCollapseConfigIndex();
|
|
411
486
|
this.tableData().forEach((row, rowIndex) => {
|
|
412
|
-
newExpandedMap[`${rowIndex}`] =
|
|
413
|
-
row[this.rowCollapseConfigIndex()];
|
|
487
|
+
newExpandedMap[`${rowIndex}`] = row[collapseIndex];
|
|
414
488
|
});
|
|
415
489
|
this.expandedMap.set(newExpandedMap);
|
|
416
490
|
}
|
|
417
491
|
ngAfterViewInit() {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
492
|
+
const config = this.tableConfig();
|
|
493
|
+
if (!config?.paginationConfig)
|
|
494
|
+
return;
|
|
495
|
+
const rawHeight = config.height;
|
|
496
|
+
// Handle percentage values - use calc() to subtract 56px
|
|
497
|
+
if (typeof rawHeight === 'string' && rawHeight.includes('%')) {
|
|
498
|
+
const calcHeight = `calc(${rawHeight} - 56px)`;
|
|
499
|
+
this.renderer.setStyle(this.table.nativeElement, "height", calcHeight);
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
// Handle pixel values - subtract 56px (same as old code)
|
|
503
|
+
const result = rawHeight - 56;
|
|
504
|
+
const finalHeight = result + "px";
|
|
505
|
+
this.renderer.setStyle(this.table.nativeElement, "height", finalHeight);
|
|
421
506
|
}
|
|
422
507
|
}
|
|
423
508
|
ngOnChanges() {
|
|
@@ -639,6 +724,9 @@ export class TableComponent {
|
|
|
639
724
|
});
|
|
640
725
|
}
|
|
641
726
|
}
|
|
727
|
+
onPageSizeChange(selectedOption) {
|
|
728
|
+
this.pageSizeChanged.emit(parseInt(selectedOption.value));
|
|
729
|
+
}
|
|
642
730
|
static { this.ɵfac = function TableComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TableComponent)(i0.ɵɵdirectiveInject(i0.Renderer2)); }; }
|
|
643
731
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableComponent, selectors: [["mis-table"]], viewQuery: function TableComponent_Query(rf, ctx) { if (rf & 1) {
|
|
644
732
|
i0.ɵɵviewQuery(_c0, 5);
|
|
@@ -649,7 +737,7 @@ export class TableComponent {
|
|
|
649
737
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.filter = _t.first);
|
|
650
738
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.table = _t.first);
|
|
651
739
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.colHeaders = _t);
|
|
652
|
-
} }, inputs: { tableConfig: [1, "tableConfig"], subTableconfig: [1, "subTableconfig"], tableDataLoading: [1, "tableDataLoading"], expandedIndex: [1, "expandedIndex"], tableData: [1, "tableData"], subTableData: [1, "subTableData"], subTableDataLoading: [1, "subTableDataLoading"], currentSort: [1, "currentSort"] }, outputs: { filtersUpdated: "filtersUpdated", pageSelected: "pageSelected", sortChange: "sortChange", headerAction: "headerAction" }, features: [i0.ɵɵNgOnChangesFeature], decls:
|
|
740
|
+
} }, inputs: { tableConfig: [1, "tableConfig"], subTableconfig: [1, "subTableconfig"], tableDataLoading: [1, "tableDataLoading"], expandedIndex: [1, "expandedIndex"], tableData: [1, "tableData"], subTableData: [1, "subTableData"], subTableDataLoading: [1, "subTableDataLoading"], currentSort: [1, "currentSort"] }, outputs: { filtersUpdated: "filtersUpdated", pageSelected: "pageSelected", pageSizeChanged: "pageSizeChanged", sortChange: "sortChange", headerAction: "headerAction" }, features: [i0.ɵɵNgOnChangesFeature], decls: 10, vars: 15, consts: [["table", ""], ["filter", ""], ["colHeaderRef", ""], ["plainText", ""], ["id", "main-container", 3, "ngStyle"], [3, "containerStyles", "filtersData", "filtersApplied", 4, "ngIf"], ["id", "table-container", 3, "ngClass"], ["id", "col-headers-container", 3, "ngStyle"], ["class", "col-header", 3, "ngStyle", "click", 4, "ngFor", "ngForOf"], ["id", "data-container"], ["class", "row-wrapper", 4, "ngFor", "ngForOf"], ["id", "pagination-content-container"], ["id", "pagination-container"], [3, "filtersApplied", "containerStyles", "filtersData"], [1, "col-header", 3, "click", "ngStyle"], ["class", "col-header-text", 4, "ngIf"], ["class", "filter-icon", 3, "click", 4, "ngIf"], ["class", "checkbox-icon", 3, "click", 4, "ngIf"], ["appSortIcons", "", "class", "sort-icon", 3, "column", "activeSort", "activeSorts", "multiColumnSort", "sortChange", 4, "ngIf"], [4, "ngIf"], [1, "col-header-text"], [1, "filter-icon", 3, "click"], ["id", "filter-active", 4, "ngIf"], ["fill", "none", "height", "10", "viewBox", "0 0 13 10", "width", "13", "xmlns", "http://www.w3.org/2000/svg"], ["clip-rule", "evenodd", "d", "M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z", "fill", "#181F33", "fill-rule", "evenodd"], ["id", "filter-active"], [1, "checkbox-icon", 3, "click"], [3, "checked"], ["appSortIcons", "", 1, "sort-icon", 3, "sortChange", "column", "activeSort", "activeSorts", "multiColumnSort"], ["customTableCell", "", 3, "customComponent", "data"], [1, "row-wrapper"], [1, "t-row", 3, "click", "ngClass", "ngStyle"], ["class", "t-col-container", 3, "ngStyle", "ngClass", "click", 4, "ngFor", "ngForOf"], ["class", "sub-row", 4, "ngIf"], [1, "t-col-container", 3, "click", "ngStyle", "ngClass"], [1, "t-col", 3, "ngStyle"], ["class", "t-col-text", 3, "ngStyle", "ngClass", 4, "ngIf"], [3, "cellData", "config", "ngClass", "actionClick", 4, "ngIf"], [1, "t-col-text", 3, "ngStyle", "ngClass"], [4, "ngIf", "ngIfElse"], [3, "innerHTML"], [3, "actionClick", "cellData", "config", "ngClass"], [1, "sub-row"], [3, "ngStyle"], [3, "config", "tableData"], ["id", "pagination-text"], [1, "page-size-selector"], ["id", "pages-container"], [1, "page", 3, "click"], ["fill", "none", "height", "10", "viewBox", "0 0 7 10", "width", "7", "xmlns", "http://www.w3.org/2000/svg"], ["clip-rule", "evenodd", "d", "M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z", "fill", "#181F33", "fill-rule", "evenodd"], ["clip-rule", "evenodd", "d", "M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z", "fill", "#181F33", "fill-rule", "evenodd"], [1, "page-size-dropdown", 3, "onChange", "data", "selectedItem", "width", "height", "searchEnabled", "dropdownListHeight"], [4, "ngFor", "ngForOf"], ["class", "page page-jumping-enabled", 3, "ngClass", "click", 4, "ngIf"], ["class", "page-seperator", 4, "ngIf"], [1, "page", "page-jumping-enabled", 3, "click", "ngClass"], [1, "page-seperator"], [1, "dot", 3, "ngStyle"], [1, "dot"]], template: function TableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
653
741
|
i0.ɵɵelementStart(0, "div", 4);
|
|
654
742
|
i0.ɵɵtemplate(1, TableComponent_mis_table_filter_1_Template, 2, 2, "mis-table-filter", 5);
|
|
655
743
|
i0.ɵɵelementStart(2, "div", 6, 0)(4, "div", 7);
|
|
@@ -658,8 +746,9 @@ export class TableComponent {
|
|
|
658
746
|
i0.ɵɵelementStart(6, "div", 9);
|
|
659
747
|
i0.ɵɵtemplate(7, TableComponent_div_7_Template, 4, 11, "div", 10);
|
|
660
748
|
i0.ɵɵelementEnd()();
|
|
661
|
-
i0.ɵɵ
|
|
662
|
-
i0.ɵɵ
|
|
749
|
+
i0.ɵɵelementStart(8, "div", 11);
|
|
750
|
+
i0.ɵɵtemplate(9, TableComponent_Conditional_9_Template, 12, 9, "div", 12);
|
|
751
|
+
i0.ɵɵelementEnd()();
|
|
663
752
|
} if (rf & 2) {
|
|
664
753
|
let tmp_5_0;
|
|
665
754
|
let tmp_7_0;
|
|
@@ -674,13 +763,13 @@ export class TableComponent {
|
|
|
674
763
|
i0.ɵɵproperty("ngForOf", (tmp_5_0 = ctx.tableConfig()) == null ? null : tmp_5_0.colHeaderConfig);
|
|
675
764
|
i0.ɵɵadvance(2);
|
|
676
765
|
i0.ɵɵproperty("ngForOf", ctx.tableData());
|
|
677
|
-
i0.ɵɵadvance();
|
|
678
|
-
i0.ɵɵ
|
|
679
|
-
} }, styles: ["#main-container[_ngcontent-%COMP%]{font-family:Lato,sans-serif;position:relative}.no-scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:0}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container[_ngcontent-%COMP%]{height:inherit;overflow-y:auto}.scroll-horizontally[_ngcontent-%COMP%]{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container[_ngcontent-%COMP%]{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header[_ngcontent-%COMP%]{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text[_ngcontent-%COMP%]{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.filter-icon[_ngcontent-%COMP%]{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active[_ngcontent-%COMP%]{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row[_ngcontent-%COMP%]{height:auto;border-bottom:none}.loader[_ngcontent-%COMP%] .mat-progress-spinner circle, .mat-spinner[_ngcontent-%COMP%] circle[_ngcontent-%COMP%]{stroke:var(--brand-primary, #0937B2)}.t-row[_ngcontent-%COMP%]{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row[_ngcontent-%COMP%]{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container[_ngcontent-%COMP%]{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover[_ngcontent-%COMP%]:hover{background-color:#0000}.t-col-container-hover[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover[_ngcontent-%COMP%]:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover[_ngcontent-%COMP%]{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col[_ngcontent-%COMP%]{display:flex;align-items:center;height:100%}.t-col-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0
|
|
766
|
+
i0.ɵɵadvance(2);
|
|
767
|
+
i0.ɵɵconditional(ctx.showPageSizeDropdown() || ((tmp_7_0 = ctx.tableConfig()) == null ? null : tmp_7_0.paginationConfig) && (ctx.tableLength() >= ctx.tableConfig().paginationConfig.rowsPerPage || ((tmp_7_0 = ctx.tableConfig().paginationConfig) == null ? null : tmp_7_0.selectedPage) !== 1) ? 9 : -1);
|
|
768
|
+
} }, styles: ["#main-container[_ngcontent-%COMP%]{font-family:Lato,sans-serif;position:relative}.no-scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:0}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container[_ngcontent-%COMP%]{height:inherit;overflow-y:auto}.scroll-horizontally[_ngcontent-%COMP%]{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container[_ngcontent-%COMP%]{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header[_ngcontent-%COMP%]{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text[_ngcontent-%COMP%]{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.filter-icon[_ngcontent-%COMP%]{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active[_ngcontent-%COMP%]{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row[_ngcontent-%COMP%]{height:auto;border-bottom:none}.loader[_ngcontent-%COMP%] .mat-progress-spinner circle, .mat-spinner[_ngcontent-%COMP%] circle[_ngcontent-%COMP%]{stroke:var(--brand-primary, #0937B2)}.t-row[_ngcontent-%COMP%]{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row[_ngcontent-%COMP%]{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container[_ngcontent-%COMP%]{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover[_ngcontent-%COMP%]:hover{background-color:#0000}.t-col-container-hover[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover[_ngcontent-%COMP%]:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover[_ngcontent-%COMP%]{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col[_ngcontent-%COMP%]{display:flex;align-items:center;height:100%}.t-col-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container[_ngcontent-%COMP%], #pagination-content-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container[_ngcontent-%COMP%]{display:flex;margin-right:32px}.page[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled[_ngcontent-%COMP%]{border:1px solid var(--text-secondary, #6A737D)}.page-seperator[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot[_ngcontent-%COMP%]{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active[_ngcontent-%COMP%]{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:16px;height:16px;transition:opacity .2s ease}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]:hover{opacity:.8}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{opacity:.4;pointer-events:none}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){opacity:1;pointer-events:auto}.row[_ngcontent-%COMP%]{transition:background-color .2s}.row[_ngcontent-%COMP%]:hover:not(.disabled-row), .row.selected[_ngcontent-%COMP%]:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{pointer-events:none;opacity:.4}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions[_ngcontent-%COMP%]{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive[_ngcontent-%COMP%]{pointer-events:none;opacity:.5;cursor:default}.page-size-selector[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell[_ngcontent-%COMP%]{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block}@supports (-webkit-line-clamp: 2){.collapsed-cell[_ngcontent-%COMP%]{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}"] }); }
|
|
680
769
|
}
|
|
681
770
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
|
|
682
771
|
type: Component,
|
|
683
|
-
args: [{ selector: "mis-table", template: "<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[i]?.action && tableConfig()?.colConfig[i]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[i]?.action(col) : null\"\n *ngFor=\"let col of row; let i = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[i]?.style?.width || tableConfig()?.colHeaderConfig[i]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[i]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[i]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[i]?.style?.justifyContent\n ? tableConfig().colConfig[i]?.style?.justifyContent\n : tableConfig().colConfig[i]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[i]?.type !== 'custom' && tableConfig().colConfig[i]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[i]?.style?.color || '',\n '--collapsed-lines': previewLines || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex == i && expandedMap[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[i]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[i]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[i].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[i]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[i]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[i]?.actionType === 'checkbox' || tableConfig().colConfig[i]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading && subTableData.length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading && subTableData.length > 0\">\n <sub-table [config]=\"subTableconfig\" [tableData]=\"subTableData\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div\n *ngIf=\"tableConfig()?.paginationConfig && (tableLength() >= tableConfig().paginationConfig.rowsPerPage || tableConfig().paginationConfig?.selectedPage !== 1)\"\n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (tableConfig().paginationConfig?.selectedPage - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (tableConfig().paginationConfig?.selectedPage - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n <div id=\"pages-container\">\n <span (click)=\"tableConfig().paginationConfig?.selectedPage > 1 && updateSelectedPage(tableConfig().paginationConfig?.selectedPage - 1)\" class=\"page\" [class.page-nav-inactive]=\"tableConfig().paginationConfig?.selectedPage === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber == tableConfig().paginationConfig?.selectedPage }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"tableConfig().paginationConfig?.selectedPage === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"tableConfig().paginationConfig?.selectedPage < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(tableConfig().paginationConfig?.selectedPage + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n</div>\n", styles: ["#main-container{font-family:Lato,sans-serif;position:relative}.no-scrollbar::-webkit-scrollbar{width:0}.scrollbar::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container{height:inherit;overflow-y:auto}.scroll-horizontally{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon{display:flex;justify-content:center;align-items:center}.filter-icon{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row{height:auto;border-bottom:none}.loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:var(--brand-primary, #0937B2)}.t-row{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover:hover{background-color:#0000}.t-col-container-hover:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col{display:flex;align-items:center;height:100%}.t-col-text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 56px 0 0}#pages-container{display:flex;margin-right:32px}.page{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled{border:1px solid var(--text-secondary, #6A737D)}.page-seperator{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon img{width:16px;height:16px;transition:opacity .2s ease}.sort-icon img:hover{opacity:.8}.disabled-row .t-col-container{opacity:.4;pointer-events:none}.disabled-row .t-col-container:has(mis-actions-cell){opacity:1;pointer-events:auto}.row{transition:background-color .2s}.row:hover:not(.disabled-row),.row.selected:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row .t-col-container{pointer-events:none;opacity:.4}.disabled-row .t-col-container:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive{pointer-events:none;opacity:.5;cursor:default}.collapsed-cell{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block}@supports (-webkit-line-clamp: 2){.collapsed-cell{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}\n"] }]
|
|
772
|
+
args: [{ selector: "mis-table", template: "<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters()[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n \n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[colIndex]?.action && tableConfig()?.colConfig[colIndex]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[colIndex]?.action(col) : null\"\n *ngFor=\"let col of row; let colIndex = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[colIndex]?.style?.width || tableConfig()?.colHeaderConfig[colIndex]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[colIndex]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[colIndex]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[colIndex]?.style?.justifyContent\n ? tableConfig().colConfig[colIndex]?.style?.justifyContent\n : tableConfig().colConfig[colIndex]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[colIndex]?.type !== 'custom' && tableConfig().colConfig[colIndex]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[colIndex]?.style?.color || '',\n '--collapsed-lines': previewLines() || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex() == colIndex && expandedMap()[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[colIndex].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[colIndex]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[colIndex]?.actionType === 'checkbox' || tableConfig().colConfig[colIndex]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex() === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading()\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length > 0\">\n <sub-table [config]=\"subTableconfig()\" [tableData]=\"subTableData()\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div id=\"pagination-content-container\">\n @if(showPageSizeDropdown() || (tableConfig()?.paginationConfig && (tableLength() >= tableConfig().paginationConfig.rowsPerPage || tableConfig().paginationConfig?.selectedPage !== 1))){\n <div \n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (tableConfig().paginationConfig?.selectedPage - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (tableConfig().paginationConfig?.selectedPage - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n @if(showPageSizeDropdown()) {\n <div class=\"page-size-selector\">\n <mis-dropdown\n [data]=\"pageSizeOptions()\"\n [selectedItem]=\"selectedPageSizeOption()\"\n [width]=\"'90px'\"\n [height]=\"'32px'\"\n [searchEnabled]=\"false\"\n [dropdownListHeight]=\"'100px'\"\n (onChange)=\"onPageSizeChange($event)\"\n class=\"page-size-dropdown\"\n ></mis-dropdown>\n </div>\n }\n <div id=\"pages-container\">\n <span (click)=\"tableConfig().paginationConfig?.selectedPage > 1 && updateSelectedPage(tableConfig().paginationConfig?.selectedPage - 1)\" class=\"page\" [class.page-nav-inactive]=\"tableConfig().paginationConfig?.selectedPage === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber == tableConfig().paginationConfig?.selectedPage }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"tableConfig().paginationConfig?.selectedPage === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"tableConfig().paginationConfig?.selectedPage < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(tableConfig().paginationConfig?.selectedPage + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["#main-container{font-family:Lato,sans-serif;position:relative}.no-scrollbar::-webkit-scrollbar{width:0}.scrollbar::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container{height:inherit;overflow-y:auto}.scroll-horizontally{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon{display:flex;justify-content:center;align-items:center}.filter-icon{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row{height:auto;border-bottom:none}.loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:var(--brand-primary, #0937B2)}.t-row{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover:hover{background-color:#0000}.t-col-container-hover:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col{display:flex;align-items:center;height:100%}.t-col-text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container,#pagination-content-container{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container{display:flex;margin-right:32px}.page{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled{border:1px solid var(--text-secondary, #6A737D)}.page-seperator{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon img{width:16px;height:16px;transition:opacity .2s ease}.sort-icon img:hover{opacity:.8}.disabled-row .t-col-container{opacity:.4;pointer-events:none}.disabled-row .t-col-container:has(mis-actions-cell){opacity:1;pointer-events:auto}.row{transition:background-color .2s}.row:hover:not(.disabled-row),.row.selected:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row .t-col-container{pointer-events:none;opacity:.4}.disabled-row .t-col-container:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive{pointer-events:none;opacity:.5;cursor:default}.page-size-selector{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block}@supports (-webkit-line-clamp: 2){.collapsed-cell{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}\n"] }]
|
|
684
773
|
}], () => [{ type: i0.Renderer2 }], { filter: [{
|
|
685
774
|
type: ViewChild,
|
|
686
775
|
args: ["filter"]
|
|
@@ -692,4 +781,4 @@ export class TableComponent {
|
|
|
692
781
|
args: ["table"]
|
|
693
782
|
}] }); })();
|
|
694
783
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TableComponent, { className: "TableComponent" }); })();
|
|
695
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFNVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDTnJCLCtDQU1DO0lBSkMseU5BQWtCLG1DQUE0QixLQUFDO0lBSWhELGlCQUFtQjs7O0lBRGxCLEFBREEsZ0VBQTJDLG9DQUNmOzs7SUEwQnhCLDZCQUFrRztJQUNoRyxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSx5RkFDRjs7O0lBTUUsMkJBQW1GOzs7O0lBTHJGLGdDQUlDO0lBSEMsa05BQVMsMkNBQWlDLEVBQUUsc0NBQTRCLHdCQUFFLHdCQUF3QixLQUFDO0lBSW5HLCtFQUE0RTs7SUFDNUUsK0JBQStGO0lBQzdGLDJCQUtFO0lBRU4sQUFERSxpQkFBTSxFQUNEOzs7O0lBVEUsY0FBZ0Q7SUFBaEQsc0lBQWdEOzs7O0lBVXpELGdDQUlDO0lBSEMsZ0tBQVMsdUJBQWdCLHdCQUFFLHdCQUF3QixLQUFDO0lBSXBELG1DQUE2RDtJQUMvRCxpQkFBTzs7O0lBRFMsY0FBK0I7SUFBL0Isb0RBQStCOzs7O0lBRS9DLGdDQU1vQjtJQURsQixnTUFBYywyQkFBb0IsS0FBQztJQUVyQyxpQkFBTzs7OztJQUhMLEFBREEsQUFEQSxBQURBLHFDQUFvQixvQ0FDUSx5Q0FDSyx5REFDZ0I7Ozs7SUFJckQsd0ZBQXNJOzs7SUFBeEIsQUFBNUMseUZBQTJDLDJCQUF3Qjs7OztJQWhEckksa0NBY0M7SUFaQywy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QixpRUFBOEY7WUFzR2xHLEFBREUsaUJBQU0sRUFDRjtZQUNOLGlFQUdDO1lBbURILGlCQUFNOzs7O1lBeE9KLG1LQUlFO1lBTUMsY0FBa0I7WUFBbEIsdUNBQWtCO1lBT25CLGNBQWtKO1lBQWxKLG1KQUFrSjtZQUdsSixlQUFvQztZQUFwQyxzREFBb0M7WUFNVixjQUFpQztZQUFqQyxnR0FBaUM7WUFpRGhCLGVBQWdCO1lBQWhCLHlDQUFnQjtZQXdHMUQsY0FBNEo7WUFBNUoseVFBQTRKOzs7aUZEN0pwSixjQUFjO2NBTDFCLFNBQVM7MkJBQ0UsV0FBVzswQ0FzQkEsTUFBTTtrQkFBMUIsU0FBUzttQkFBQyxRQUFRO1lBQ1csVUFBVTtrQkFBdkMsWUFBWTttQkFBQyxjQUFjO1lBZ0JSLEtBQUs7a0JBQXhCLFNBQVM7bUJBQUMsT0FBTzs7a0ZBbkNQLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZpbHRlciwgVGFibGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU29ydFN0YXRlIH0gZnJvbSBcIi4vc29ydC1pY29ucy5kaXJlY3RpdmVcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10YWJsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCJ0YWJsZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcInRhYmxlLmNvbXBvbmVudC5jc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8vIEluaXRpYWxpemUgd2l0aCAtMSB0byBpbmRpY2F0ZSBubyByb3cgaXMgY29sb3JlZCBhdCB0aGUgYmVnaW5uaW5nXG4gIGFjdGl2ZVJvd0luZGV4ID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIGhhc0NoZWNrYm94QWN0aW9ucyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHNlbGVjdEFsbENoZWNrYm94ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBGaWx0ZXIgcmVsYXRlZCB2YXJpYWJsZXNcbiAgc2hvd0ZpbHRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIGZpbHRlck5hbWUgPSBzaWduYWw8c3RyaW5nPihcIlwiKTtcbiAgZmlsdGVyRGF0YSA9IHNpZ25hbDxBcnJheTxGaWx0ZXI+PihbXSk7XG4gIGZpbHRlckNvbnRhaW5lclN0eWxlcyA9IHNpZ25hbDxhbnk+KHt9KTtcbiAgYXBwbGllZEZpbHRlcnMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9Pih7fSk7XG4gIFxuICAvLyBDb252ZXJ0IG91dHB1dHMgdG8gc2lnbmFsLWJhc2VkIG91dHB1dHNcbiAgZmlsdGVyc1VwZGF0ZWQgPSBvdXRwdXQ8e1xuICAgIFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xuICB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoXCJmaWx0ZXJcIikgZmlsdGVyOiBUYWJsZUZpbHRlckNvbXBvbmVudCB8IGFueTtcbiAgQFZpZXdDaGlsZHJlbihcImNvbEhlYWRlclJlZlwiKSBjb2xIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4gfCBhbnk7XG5cbiAgLy8gUGFnaW5hdGlvbiByZWxhdGVkIHZhcmlhYmxlc1xuICBwYWdlcyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG4gIHRhYmxlTGVuZ3RoID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHBhZ2VTZWxlY3RlZCA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgLy8gQ29udmVydCBpbnB1dHMgdG8gc2lnbmFsLWJhc2VkIGlucHV0c1xuICB0YWJsZUNvbmZpZyA9IGlucHV0PFRhYmxlQ29uZmlnPigpO1xuICBzdWJUYWJsZWNvbmZpZyA9IGlucHV0PFRhYmxlQ29uZmlnPigpO1xuICB0YWJsZURhdGFMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZXhwYW5kZWRJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgdGFibGVEYXRhID0gaW5wdXQ8QXJyYXk8QXJyYXk8YW55Pj4+KFtdKTtcbiAgc3ViVGFibGVEYXRhID0gaW5wdXQ8QXJyYXk8QXJyYXk8YW55Pj4+KFtdKTtcbiAgc3ViVGFibGVEYXRhTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGN1cnJlbnRTb3J0ID0gaW5wdXQ8e2NvbHVtbjogc3RyaW5nLCBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnIHwgJyd9IHwgbnVsbD4oKTtcbiAgQFZpZXdDaGlsZChcInRhYmxlXCIpIHRhYmxlOiBFbGVtZW50UmVmIHwgYW55O1xuICBjb2xsYXBzZUNvbEluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICBwcmV2aWV3TGluZXMgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcm93Q29sbGFwc2VDb25maWdJbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcbiAgZXhwYW5kZWRNYXAgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KTtcblxuICAvLyBTb3J0aW5nIHJlbGF0ZWQgcHJvcGVydGllc1xuICBtdWx0aUNvbHVtblNvcnQgPSBzaWduYWw8U29ydFN0YXRlW10+KFtdKTtcbiAgc29ydENoYW5nZSA9IG91dHB1dDxTb3J0U3RhdGU+KCk7XG4gIGhlYWRlckFjdGlvbiA9IG91dHB1dDx7IHR5cGU6IHN0cmluZzsgcGF5bG9hZD86IGFueSB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgcm93IGNsaWNrXG4gIHNlbGVjdFJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaGFzQ2hlY2tib3hBY3Rpb25zKCkpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChbaW5kZXhdKTsgLy8gU2V0IHRoZSBzZWxlY3RlZCBpbmRleCB0byB0aGUgY2xpY2tlZCByb3cncyBpbmRleFxuICAgICEhdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24gJiYgdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24oaW5kZXgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNDaGVja2JveEFjdGlvbnMuc2V0KHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWc/LnNvbWUoY29sID0+IGNvbC50eXBlID09PSBcImFjdGlvbnNcIiAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gXCJjaGVja2JveFwiKSk7XG4gICAgdGhpcy50YWJsZUxlbmd0aC5zZXQoISF0aGlzLnRhYmxlRGF0YSgpID8gdGhpcy50YWJsZURhdGEoKS5sZW5ndGggOiAwKTtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJzKCk7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcikge1xuICAgICAgICBsZXQgaXNDaGVja0JveENsaWNrZWQgPSB0cnVlO1xuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNsYXNzTmFtZSA9PT0gXCJjaGVja21hcmtcIikge1xuICAgICAgICAgIGlzQ2hlY2tCb3hDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0NsaWNrSW5zaWRlRWxlbWVudCA9IHRoaXMuZmlsdGVyLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNDbGlja0luc2lkZUVsZW1lbnQgJiYgIWlzQ2hlY2tCb3hDbGlja2VkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVGaWx0ZXIodGhpcy5maWx0ZXJOYW1lKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmZXRjaCBjb2xsYXBzZUNvbEluZGV4IGFuZCBwcmV2aWV3TGluZXMgaWYgcHJlc2VudFxuICAgIHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpPy5jb2xDb25maWc/LmZpbmRJbmRleChcbiAgICAgIGNvbCA9PiBjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJ1xuICAgICkpO1xuICAgIGlmICh0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VDb2xJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1t0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKV0uY29sbGFwc2VDb2x1bW5JbmRleCA/PyBudWxsKTtcbiAgICAgIHRoaXMucHJldmlld0xpbmVzLnNldCh0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW3RoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpXS5wcmV2aWV3TGluZXMgPz8gbnVsbCk7XG4gICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICB9XG4gIH1cblxuICBidWlsZEV4cGFuZGVkTWFwKCk6IHZvaWR7XG4gICAgY29uc3QgbmV3RXhwYW5kZWRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgdGhpcy50YWJsZURhdGEoKS5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBuZXdFeHBhbmRlZE1hcFtgJHtyb3dJbmRleH1gXSA9XG4gICAgICAgIHJvd1t0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKV07XG4gICAgfSk7XG4gICAgdGhpcy5leHBhbmRlZE1hcC5zZXQobmV3RXhwYW5kZWRNYXApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlSW50KHRoaXMudGFibGVDb25maWcoKS5oZWlnaHQudG9TdHJpbmcoKS5yZXBsYWNlKCdweCcsICcnKSkgfHwgMDtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LCBcImhlaWdodFwiLCBoZWlnaHQgLSA1NiArIFwicHhcIik7XG4gICAgfVxuICB9XG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMudGFibGVMZW5ndGguc2V0KHRoaXMudGFibGVEYXRhKCk/Lmxlbmd0aCA/PyAwKTtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLmFjdGl2ZVJvd0luZGV4ICE9PSBudWxsICYmIHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBhY3RpdmVSb3dJbmRleCA9IHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleDtcbiAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KEFycmF5LmlzQXJyYXkoYWN0aXZlUm93SW5kZXgpID8gYWN0aXZlUm93SW5kZXggOiBbYWN0aXZlUm93SW5kZXhdKVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbHRlciByZWxhdGVkIGZ1bmN0aW9uc1xuICBpbml0aWFsaXplRmlsdGVycygpIHtcbiAgICBjb25zdCBuZXdBcHBsaWVkRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XG4gICAgY29uc3QgYWxsRmlsdGVyczogQXJyYXk8RmlsdGVyPiA9IFtdO1xuICAgIFxuICAgIGZvciAobGV0IGNvbEhlYWRlciBvZiB0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZykge1xuICAgICAgaWYgKGNvbEhlYWRlci5maWx0ZXJzKSB7XG4gICAgICAgIGxldCBmaWx0ZXJzID0gW107XG4gICAgICAgIGZvciAobGV0IGZpbHRlciBvZiBjb2xIZWFkZXIuZmlsdGVycykge1xuICAgICAgICAgIGlmIChmaWx0ZXIuY2hlY2tlZCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogZmlsdGVyLm5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBZGQgYWxsIGZpbHRlcnMgdG8gdGhlIGZpbHRlckRhdGEgYXJyYXlcbiAgICAgICAgICBhbGxGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSBuZXdBcHBsaWVkRmlsdGVyc1tjb2xIZWFkZXIuZGF0YV0gPSBmaWx0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzLnNldChuZXdBcHBsaWVkRmlsdGVycyk7XG4gICAgdGhpcy5maWx0ZXJEYXRhLnNldChhbGxGaWx0ZXJzKTtcbiB9XG4gIHRvZ2dsZUZpbHRlcihmaWx0ZXJOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0ZpbHRlcigpKSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUuc2V0KGZpbHRlck5hbWUpO1xuICAgICAgdGhpcy5zaG93RmlsdGVyLnNldCh0cnVlKTtcblxuICAgICAgbGV0IG9mZlNldCA9IDA7XG4gICAgICBsZXQgY29sSGVhZGVyc1JldmVyc2VkID0gdGhpcy5jb2xIZWFkZXJzLnRvQXJyYXkoKS5yZXZlcnNlKCk7XG5cbiAgICAgIGZvciAobGV0IGhlYWRlciBvZiBjb2xIZWFkZXJzUmV2ZXJzZWQpIHtcbiAgICAgICAgaWYgKGhlYWRlci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCA9PT0gZmlsdGVyTmFtZSkgYnJlYWs7XG4gICAgICAgIG9mZlNldCArPSBoZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyQ29udGFpbmVyU3R5bGVzLnNldCh7XG4gICAgICAgIHRvcDogXCI0NHB4XCIsXG4gICAgICAgIHJpZ2h0OiBvZmZTZXQgPiAwID8gb2ZmU2V0IC0gMTE2ICsgXCJweFwiIDogXCIxMnB4XCJcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUuc2V0KFwiXCIpO1xuICAgICAgdGhpcy5maWx0ZXJEYXRhLnNldChbXSk7XG4gICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlQXBwbGllZEZpbHRlcnMoYXBwbGllZEZpbHRlcnM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KSB7XG4gICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSB0aGlzLmFwcGxpZWRGaWx0ZXJzKCk7XG4gICAgaWYgKGFwcGxpZWRGaWx0ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBkZWxldGUgY3VycmVudEZpbHRlcnNbdGhpcy5maWx0ZXJOYW1lKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50RmlsdGVyc1t0aGlzLmZpbHRlck5hbWUoKV0gPSBhcHBsaWVkRmlsdGVycztcbiAgICB9XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycy5zZXQoeyAuLi5jdXJyZW50RmlsdGVycyB9KTtcbiAgICB0aGlzLmZpbHRlcnNVcGRhdGVkLmVtaXQoeyAuLi50aGlzLmFwcGxpZWRGaWx0ZXJzKCkgfSk7XG4gICAgdGhpcy50b2dnbGVGaWx0ZXIodGhpcy5maWx0ZXJOYW1lKCkpO1xuICB9XG5cbiAgLy8gUGFnaW5hdGlvbiByZWxhdGVkIGZ1bmN0aW9uc1xuICBpbml0aWFsaXplUGFnaW5hdGlvbigpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcpIHtcbiAgICAgIGxldCBsZW4gPSB0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5ub09mUGFnZXM7XG4gICAgICBpZiAobGVuIDw9IDcpIHtcbiAgICAgICAgY29uc3QgbmV3UGFnZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICBuZXdQYWdlcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KG5ld1BhZ2VzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAyLCAzLCA0LCAwLCBsZW5dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlU2VsZWN0ZWRQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgIC8vIEd1YXJkIGNsYXVzZSB0byBwcmV2ZW50IG91dC1vZi1yYW5nZSB1cGRhdGVzXG4gICAgaWYgKHBhZ2VOdW1iZXIgPCAxIHx8IHBhZ2VOdW1iZXIgPiB0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5ub09mUGFnZXMpIHJldHVybjtcblxuICAgIC8vIFJlc2V0IGhlYWRlciBjaGVja2JveCB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgcGFnZVxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3guc2V0KGZhbHNlKTtcbiAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgbGV0IGxlbiA9IHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLm5vT2ZQYWdlcztcbiAgICBpZiAobGVuID4gNykge1xuICAgICAgaWYgKHBhZ2VOdW1iZXIgLSAyIDw9IDEpIHtcbiAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDIsIDMsIDQsIDAsIGxlbl0pO1xuICAgICAgfSBlbHNlIGlmIChwYWdlTnVtYmVyIC0gMiA+IDEgJiYgcGFnZU51bWJlciArIDIgPCBsZW4pIHtcbiAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDAsIHBhZ2VOdW1iZXIgLSAxLCBwYWdlTnVtYmVyLCBwYWdlTnVtYmVyICsgMSwgMCwgbGVuXSk7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgKyAyID49IGxlbikge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgbGVuIC0gMywgbGVuIC0gMiwgbGVuIC0gMSwgbGVuXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFnZVNlbGVjdGVkLmVtaXQocGFnZU51bWJlcik7XG4gIH1cblxuICAvLyBNYWluIGNvbnRhaW5lciByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb250YWluZXJIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKT8uaGVpZ2h0KSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLmhlaWdodDtcbiAgICBlbHNlIHJldHVybiBcIlwiO1xuICB9XG4gIGdldENvbnRhaW5lcldpZHRoKCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCk/LndpZHRoKSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLndpZHRoO1xuICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvLyBDb2x1bW4gSGVhZGVycyByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb2xIZWFkZXJzUm93U3R5bGVzKCkge1xuICAgIGNvbnN0IHsgY29sSGVhZGVyc1Jvd0NvbmZpZyB9ID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgIGNvbnN0IG1pbkhlaWdodCA9IGNvbEhlYWRlcnNSb3dDb25maWc/LmhlaWdodCB8fCBcIjQ0cHhcIjtcbiAgICBjb25zdCBib3JkZXJUb3AgPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uYm9yZGVyVG9wIHx8IFwiXCI7XG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJvcmRlckJvdHRvbSB8fCBcIjFweCBzb2xpZCAjRTBFMEUwXCI7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJhY2tncm91bmRDb2xvciB8fCBcIiNGRkZGRkZcIjtcbiAgICBjb25zdCBmb250U2l6ZSA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5mb250U2l6ZSB8fCBcIjE0cHhcIjtcbiAgICByZXR1cm4ge1xuICAgICAgXCJtaW4taGVpZ2h0XCI6IG1pbkhlaWdodCxcbiAgICAgIFwiYm9yZGVyLXRvcFwiOiBib3JkZXJUb3AsXG4gICAgICBcImJvcmRlci1ib3R0b21cIjogYm9yZGVyQm90dG9tLFxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIFwiZm9udC1zaXplXCI6IGZvbnRTaXplXG4gICAgfTtcbiAgfVxuXG4gIG9uU29ydENoYW5nZShzb3J0U3RhdGU6IFNvcnRTdGF0ZSkge1xuICAgIC8vIEVtaXQgdGhlIHNvcnQgY2hhbmdlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydFN0YXRlKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgbXVsdGktY29sdW1uIHNvcnQgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkubXVsdGlDb2x1bW5Tb3J0KSB7XG4gICAgICBjb25zdCBjdXJyZW50TXVsdGlTb3J0ID0gdGhpcy5tdWx0aUNvbHVtblNvcnQoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudE11bHRpU29ydC5maW5kSW5kZXgoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gc29ydFN0YXRlLmNvbHVtbik7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGlmIChzb3J0U3RhdGUuZGlyZWN0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgbmV3TXVsdGlTb3J0ID0gWy4uLmN1cnJlbnRNdWx0aVNvcnRdO1xuICAgICAgICAgIG5ld011bHRpU29ydC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ld011bHRpU29ydCA9IFsuLi5jdXJyZW50TXVsdGlTb3J0XTtcbiAgICAgICAgICBuZXdNdWx0aVNvcnRbaW5kZXhdID0gc29ydFN0YXRlO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRTdGF0ZS5kaXJlY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5tdWx0aUNvbHVtblNvcnQuc2V0KFsuLi5jdXJyZW50TXVsdGlTb3J0LCBzb3J0U3RhdGVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBY3Rpb25zQ2VsbFN0eWxlKHN0eWxlOiBhbnkpOiBhbnkge1xuICAgIGlmICghc3R5bGUpIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHdpZHRoLCAuLi5yZXN0U3R5bGUgfSA9IHN0eWxlO1xuICAgIHJldHVybiByZXN0U3R5bGU7XG4gIH1cblxuICBvbkFjdGlvbkNsaWNrKGV2ZW50OiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgY29uc3QgY3VycmVudEFjdGl2ZVJvd3MgPSB0aGlzLmFjdGl2ZVJvd0luZGV4KCk7XG4gICAgICBpZiAoZXZlbnQudmFsdWUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoWy4uLmN1cnJlbnRBY3RpdmVSb3dzLCByb3dJbmRleF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoY3VycmVudEFjdGl2ZVJvd3MuZmlsdGVyKGluZGV4ID0+IGluZGV4ICE9PSByb3dJbmRleCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb25JbmZvID0gdGhpcy5maW5kQWN0aW9uQ29uZmlnKCdjaGVja2JveCcpO1xuICAgICAgaWYgKGFjdGlvbkluZm8gJiYgdGhpcy50YWJsZURhdGEoKVtyb3dJbmRleF0pIHtcbiAgICAgICAgY29uc3QgeyBpbmRleCwgY29uZmlnIH0gPSBhY3Rpb25JbmZvO1xuICAgICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKHJvdyA9PiByb3dbaW5kZXhdID09PSB0cnVlKTtcbiAgICAgICAgY29uZmlnLmFjdGlvbj8uKGNoZWNrZWRJdGVtcyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZScpe1xuICAgICAgY29uc3Qgcm93Q29sbGFwc2UgPSB0aGlzLmZpbmRBY3Rpb25Db25maWcoJ3Jvdy1jb2xsYXBzZScpO1xuICAgICAgaWYgKHJvd0NvbGxhcHNlICYmIHRoaXMudGFibGVEYXRhKClbcm93SW5kZXhdKSB7XG4gICAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgcm93Q29sbGFwc2UuY29uZmlnLmFjdGlvbj8uKHRoaXMudGFibGVEYXRhKCkpO1xuICAgICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQWN0aW9uQ29uZmlnKGFjdGlvblR5cGU6IHN0cmluZyk6IHsgaW5kZXg6IG51bWJlciwgY29uZmlnOiBDb2xDb25maWcgfSB8IG51bGwge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXTtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XG4gICAgICAgIHJldHVybiB7IGluZGV4OiBpLCBjb25maWc6IGNvbCB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBcblxuICBpc1Jvd0Rpc2FibGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmRpc2FibGVSb3cgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuZGlzYWJsZVJvdyhyb3cpIDogZmFsc2U7XG4gIH1cblxuICB0b2dnbGVDaGVja2JveCgpIHtcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrYm94LnNldCghdGhpcy5zZWxlY3RBbGxDaGVja2JveCgpKTtcbiAgICBjb25zdCBjaGVja2JveENvbEluZGV4ID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5maW5kSW5kZXgoY29sID0+IGNvbC50eXBlID09PSAnYWN0aW9ucycgJiYgY29sLmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcpO1xuICAgIGlmIChjaGVja2JveENvbEluZGV4ICE9PSAtMSkge1xuICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgZGlyZWN0bHkgbW9kaWZ5IGlucHV0IHNpZ25hbHMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudFxuICAgICAgY29uc3QgdXBkYXRlZFRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhKCkubWFwKChyb3c6IGFueVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSBbLi4ucm93XTtcbiAgICAgICAgY29uc3QgY3VycmVudENoZWNrYm94ID0gdXBkYXRlZFJvd1tjaGVja2JveENvbEluZGV4XTtcbiAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuaXNSb3dEaXNhYmxlZChyb3cpO1xuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgICB1cGRhdGVkUm93W2NoZWNrYm94Q29sSW5kZXhdID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkUm93O1xuICAgICAgfSk7XG4gICAgICB0aGlzLmhlYWRlckFjdGlvbj8uZW1pdCh7XG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hUb2dnbGVcIixcbiAgICAgICAgcGF5bG9hZDogdXBkYXRlZFRhYmxlRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb25maWcge1xuICBoZWlnaHQ6IHN0cmluZyB8IFwiMTAwJVwiO1xuICB3aWR0aDogc3RyaW5nIHwgXCIxMDAlXCI7XG4gIHBhZ2luYXRpb25Db25maWc/OiBQYWdpbmF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgY29sSGVhZGVyc1Jvd0NvbmZpZzogUm93Q29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgcm93Q29uZmlnOiBSb3dDb25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICBjb2xIZWFkZXJDb25maWc6IEFycmF5PENvbEhlYWRlckNvbmZpZz47XG4gIGNvbENvbmZpZzogQXJyYXk8Q29sQ29uZmlnPjtcbiAgY2FuRXhwYW5kPzogYm9vbGVhbjtcbiAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgY2VsbEhvdmVyPzogYm9vbGVhbjtcbiAgYWN0aXZlUm93SW5kZXg/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgbXVsdGlDb2x1bW5Tb3J0PzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkNvbmZpZyB7XG4gIG5vT2ZQYWdlczogbnVtYmVyO1xuICByb3dzUGVyUGFnZTogbnVtYmVyO1xuICB0b3RhbE5vT2ZSb3dzOiBudW1iZXI7XG4gIHNlbGVjdGVkUGFnZT86IG51bWJlcjtcbiAgZGlzYWJsZVBhZ2VKdW1waW5nPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm93Q29uZmlnIHtcbiAgaGVpZ2h0Pzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBkaXNhYmxlUm93PzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sSGVhZGVyQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiY2hlY2tib3hcIjtcbiAgZGF0YTogYW55O1xuICBjb21wb25lbnRSZWY/OiBhbnk7XG4gIGZpbHRlcnM/OiBBcnJheTxGaWx0ZXI+IHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBpc1NvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydEFzY0ljb24/OiBzdHJpbmc7XG4gIHNvcnREZXNjSWNvbj86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiYWN0aW9uc1wiIHwgXCJodG1sXCI7XG4gIGNvbXBvbmVudFJlZj86IGFueTtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBhY3Rpb25JdGVtcz86IEFjdGlvbkl0ZW1bXTtcbiAgYWN0aW9uVHlwZT86IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImNoZWNrYm94XCIgfCBcInJvdy1jb2xsYXBzZVwiOyAvLyBpbmxpbmUgZm9yIGluZGl2aWR1YWwgaWNvbnMsIGRyb3Bkb3duIGZvciBtZW51XG4gIGRpc2FibGU/OiAocm93RGF0YTogYW55KSA9PiBib29sZWFuO1xuICBjb2xsYXBzZUNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBwcmV2aWV3TGluZXM/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBkaXNhYmxlPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgYWN0aW9uPzogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgY2hpbGRyZW4/OiBBY3Rpb25JdGVtW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQWN0aW9uSXRlbSBleHRlbmRzIEFjdGlvbkl0ZW0ge1xuICBzaG93U3VibWVudT86IGJvb2xlYW47XG59XG4iLCI8ZGl2XG4gIFtuZ1N0eWxlXT1cIntcbiAgICBoZWlnaHQ6IGdldENvbnRhaW5lckhlaWdodCgpLFxuICAgIHdpZHRoOiBnZXRDb250YWluZXJXaWR0aCgpLFxuICAgICdvdmVyZmxvdy14JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgPyAnYXV0bycgOiAndW5zZXQnXG4gIH1cIlxuICBpZD1cIm1haW4tY29udGFpbmVyXCJcbj5cbiAgPG1pcy10YWJsZS1maWx0ZXJcbiAgICAjZmlsdGVyXG4gICAgKGZpbHRlcnNBcHBsaWVkKT1cInVwZGF0ZUFwcGxpZWRGaWx0ZXJzKCRldmVudClcIlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlcigpXCJcbiAgICBbY29udGFpbmVyU3R5bGVzXT1cImZpbHRlckNvbnRhaW5lclN0eWxlcygpXCJcbiAgICBbZmlsdGVyc0RhdGFdPVwiZmlsdGVyRGF0YSgpXCJcbiAgPjwvbWlzLXRhYmxlLWZpbHRlcj5cbiAgPGRpdlxuICAgICN0YWJsZVxuICAgIGlkPVwidGFibGUtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7ICduby1zY3JvbGxiYXInOiBleHBhbmRlZEluZGV4KCkgPCAwLCBzY3JvbGxiYXI6ICEoZXhwYW5kZWRJbmRleCgpIDwgMCksICdzY3JvbGwtaG9yaXpvbnRhbGx5JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgfVwiXG4gID5cbiAgICA8ZGl2XG4gICAgW25nU3R5bGVdPVwiZ2V0Q29sSGVhZGVyc1Jvd1N0eWxlcygpXCJcbiAgICAgIGlkPVwiY29sLWhlYWRlcnMtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICNjb2xIZWFkZXJSZWZcbiAgICAgICAgKGNsaWNrKT1cImNvbEhlYWRlcj8uYWN0aW9uID8gY29sSGVhZGVyPy5hY3Rpb24oY29sSGVhZGVyKSA6IG51bGxcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sSGVhZGVyIG9mIHRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZ1wiXG4gICAgICAgIGNsYXNzPVwiY29sLWhlYWRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICB3aWR0aDogY29sSGVhZGVyPy5zdHlsZT8ud2lkdGggfHwgJycsXG4gICAgICAgICAgY3Vyc29yOiBjb2xIZWFkZXIuYWN0aW9uID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgPyBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgOiBjb2xIZWFkZXIudHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gJ2ZsZXgtZW5kJ1xuICAgICAgICAgICAgOiAnc3BhY2UtYmV0d2VlbidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxwICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlICE9PSAnY3VzdG9tJyAmJiBjb2xIZWFkZXI/LnR5cGUgIT09ICdjaGVja2JveCdcIiBjbGFzcz1cImNvbC1oZWFkZXItdGV4dFwiPlxuICAgICAgICAgIHt7IGNvbEhlYWRlcj8uZGF0YSB8fCBcIiBcIiB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cImZpbHRlckRhdGEuc2V0KGNvbEhlYWRlci5maWx0ZXJzKTsgdG9nZ2xlRmlsdGVyKGNvbEhlYWRlci5kYXRhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSAhPT0gJ2N1c3RvbScgJiYgY29sSGVhZGVyPy5maWx0ZXJzICYmIGNvbEhlYWRlcj8uZmlsdGVycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImFwcGxpZWRGaWx0ZXJzW2NvbEhlYWRlci5kYXRhXT8ubGVuZ3RoID4gMFwiIGlkPVwiZmlsdGVyLWFjdGl2ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3ZnIGZpbGw9XCJub25lXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDEzIDEwXCIgd2lkdGg9XCIxM1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTQuOTc1NDYgMTBINy42NDIxM1Y4SDQuOTc1NDZWMTBaTTAuMzA4NDcyIDBWMkgxMi4zMDg1VjBIMC4zMDg0NzJaTTIuMzA4NDcgNkgxMC4zMDg1VjRIMi4zMDg0N1Y2WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNoZWNrYm94KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgKm5nSWY9XCJjb2xIZWFkZXI/LnR5cGUgPT09ICdjaGVja2JveCdcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWlzLWNoZWNrYm94IFtjaGVja2VkXT1cInNlbGVjdEFsbENoZWNrYm94KClcIj48L21pcy1jaGVja2JveD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbEhlYWRlcj8uaXNTb3J0YWJsZSAmJiAhY29sSGVhZGVyPy5maWx0ZXJzXCIgYXBwU29ydEljb25zXG4gICAgICAgICAgW2NvbHVtbl09XCJjb2xIZWFkZXJcIlxuICAgICAgICAgIFthY3RpdmVTb3J0XT1cImN1cnJlbnRTb3J0KClcIlxuICAgICAgICAgIFthY3RpdmVTb3J0c109XCJtdWx0aUNvbHVtblNvcnQoKVwiXG4gICAgICAgICAgW211bHRpQ29sdW1uU29ydF09XCJ0YWJsZUNvbmZpZygpLm11bHRpQ29sdW1uU29ydFwiXG4gICAgICAgICAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwic29ydC1pY29uXCI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSA9PT0gJ2N1c3RvbSdcIiBjdXN0b21UYWJsZUNlbGwgW2N1c3RvbUNvbXBvbmVudF09XCJjb2xIZWFkZXI/LmNvbXBvbmVudFJlZlwiIFtkYXRhXT1cImNvbEhlYWRlci5kYXRhXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJkYXRhLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdy13cmFwcGVyXCIgKm5nRm9yPVwibGV0IHJvdyBvZiB0YWJsZURhdGEoKTsgbGV0IGkgPSBpbmRleDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidC1yb3dcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3Qtcm93LWhvdmVyJzogdGFibGVDb25maWcoKS5jZWxsSG92ZXIsICdhY3RpdmUtcm93JzogYWN0aXZlUm93SW5kZXgoKS5pbmNsdWRlcyhpKSB9XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdtaW4taGVpZ2h0JzogdGFibGVDb25maWcoKT8ucm93Q29uZmlnPy5oZWlnaHQgPyB0YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5oZWlnaHQgOiAnNDRweCcgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFJvdyhpKVwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkLXJvd109XCJpc1Jvd0Rpc2FibGVkKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwidGFibGVDb25maWcoKT8uY29sQ29uZmlnW2ldPy5hY3Rpb24gJiYgdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2ldPy5hY3Rpb25UeXBlICE9PSAnY2hlY2tib3gnID8gdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2ldPy5hY3Rpb24oY29sKSA6IG51bGxcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiByb3c7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICB3aWR0aDogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2ldPy5zdHlsZT8ud2lkdGggfHwgdGFibGVDb25maWcoKT8uY29sSGVhZGVyQ29uZmlnW2ldPy5zdHlsZT8ud2lkdGggfHwgJydcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbC1jb250YWluZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndC1jb2wtY29udGFpbmVyLWhvdmVyJzogdGFibGVDb25maWcoKS5jZWxsSG92ZXIgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInQtY29sXCJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2ldPy5zdHlsZVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGFibGVDb25maWcoKS5jb2xDb25maWdbaV0/LmFjdGlvbiA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50JzogdGFibGVDb25maWcoKS5jb2xDb25maWdbaV0/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgICAgICAgPyB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXT8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICA6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2ldPy50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgPyAnZmxleC1lbmQnXG4gICAgICAgICAgICAgICAgICA6ICdzcGFjZS1iZXR3ZWVuJ1xuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbaV0/LnR5cGUgIT09ICdjdXN0b20nICYmIHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2ldPy50eXBlICE9PSAnYWN0aW9ucydcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBjb2xvcjogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2ldPy5zdHlsZT8uY29sb3IgfHwgJycsXG4gICAgICAgICAgICAgICctLWNvbGxhcHNlZC1saW5lcyc6IHByZXZpZXdMaW5lcyB8fCAzXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbGxhcHNlZC1jZWxsJzogY29sbGFwc2VDb2xJbmRleCA9PSBpICYmIGV4cGFuZGVkTWFwW3Jvd0luZGV4XVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cInQtY29sLXRleHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gUmVuZGVyIGFzIEhUTUwgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbaV0/LnR5cGUgPT09ICdodG1sJzsgZWxzZSBwbGFpblRleHRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjb2xcIj48L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gUmVuZGVyIGFzIHBsYWluIHRleHQgLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWluVGV4dD5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgY29sIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcblxuICAgICAgICAgIFxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2ldPy50eXBlID09PSAnY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNvbXBvbmVudF09XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXS5jb21wb25lbnRSZWZcIlxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgY3VzdG9tVGFibGVDZWxsXG4gICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxtaXMtYWN0aW9ucy1jZWxsXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2ldPy50eXBlID09PSAnYWN0aW9ucydcIlxuICAgICAgICAgICAgICAgICAgW2NlbGxEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2ldXCJcbiAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtYWN0aW9ucyc6ICh0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXT8uYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXT8uYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZScpICYmIGlzUm93RGlzYWJsZWQocm93KVxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPjwvbWlzLWFjdGlvbnMtY2VsbD5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGFibGVDb25maWcoKT8uY2FuRXhwYW5kICYmIGV4cGFuZGVkSW5kZXggPT09IGlcIiBjbGFzcz1cInN1Yi1yb3dcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViVGFibGVEYXRhTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcuLi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3ViVGFibGVEYXRhTG9hZGluZyAmJiBzdWJUYWJsZURhdGEubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgTm8gRGF0YSBBdmFpbGFibGUuLi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3ViVGFibGVEYXRhTG9hZGluZyAmJiBzdWJUYWJsZURhdGEubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHN1Yi10YWJsZSBbY29uZmlnXT1cInN1YlRhYmxlY29uZmlnXCIgW3RhYmxlRGF0YV09XCJzdWJUYWJsZURhdGFcIj48L3N1Yi10YWJsZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWcgJiYgKHRhYmxlTGVuZ3RoKCkgPj0gdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlIHx8IHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlICE9PSAxKVwiXG4gICAgaWQ9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiXG4gID5cbiAgICA8cCBpZD1cInBhZ2luYXRpb24tdGV4dFwiPlxuICAgICAgU2hvd2luZ1xuICAgICAge3sgKHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlIC0gMSkgKiB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcucm93c1BlclBhZ2UgKyAxIH19LXt7XG4gICAgICAgICh0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgdGFibGVMZW5ndGgoKVxuICAgICAgfX1cbiAgICAgIG9mIHt7IHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy50b3RhbE5vT2ZSb3dzIH19IGl0ZW1zXG4gICAgPC9wPlxuICAgIDxkaXYgaWQ9XCJwYWdlcy1jb250YWluZXJcIj5cbiAgICAgIDxzcGFuICAgKGNsaWNrKT1cInRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlID4gMSAmJiB1cGRhdGVTZWxlY3RlZFBhZ2UodGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgLSAxKVwiIGNsYXNzPVwicGFnZVwiIFtjbGFzcy5wYWdlLW5hdi1pbmFjdGl2ZV09XCJ0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSA9PT0gMVwiPlxuICAgICAgICA8c3ZnIGZpbGw9XCJub25lXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDcgMTBcIiB3aWR0aD1cIjdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgZD1cIk0wLjg1NzQwNSA1LjU2Mjk1QzAuODU1Nzk0IDUuNTYxMzkgMC44NTQxODggNS41NTk4MiAwLjg1MjU4OCA1LjU1ODI0QzAuNjk1OTU1IDUuNDA0MDggMC42MTc2NDEgNS4yMDIwMyAwLjYxNzY0NyA0Ljk5OTk4QzAuNjE3NjQxIDQuNzk3OTMgMC42OTU5NTUgNC41OTU4OCAwLjg1MjU4OCA0LjQ0MTcyQzAuODU0MTg4IDQuNDQwMTQgMC44NTU3OTQgNC40Mzg1OCAwLjg1NzQwNCA0LjQzNzAyTDUuMTMwNjYgMC4yMzEyMzFDNS40NDM5MiAtMC4wNzcwNzcxIDUuOTUxOCAtMC4wNzcwNzcxIDYuMjY1MDYgMC4yMzEyMzFDNi41NzgzMSAwLjUzOTU0IDYuNTc4MzEgMS4wMzk0MSA2LjI2NTA2IDEuMzQ3NzJMMi41NTQyIDQuOTk5OThMNi4yNjUwNiA4LjY1MjI1QzYuNTc4MzEgOC45NjA1NSA2LjU3ODMxIDkuNDYwNDIgNi4yNjUwNiA5Ljc2ODczQzUuOTUxOCAxMC4wNzcgNS40NDM5MiAxMC4wNzcgNS4xMzA2NiA5Ljc2ODczTDAuODU3NDA1IDUuNTYyOTVaXCJcbiAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgICAgICA8IS0tIFBhZ2UgbnVtYmVycyAob25seSBzaG93IGlmIGRpc2FibGVQYWdlSnVtcGluZyBpcyBmYWxzZSkgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5kaXNhYmxlUGFnZUp1bXBpbmdcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYWdlTnVtYmVyIG9mIHBhZ2VzKClcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3RlZFBhZ2UocGFnZU51bWJlcilcIlxuICAgICAgICAgICAgICAqbmdJZj1cInBhZ2VOdW1iZXIgIT0gMFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3BhZ2UtYWN0aXZlJzogcGFnZU51bWJlciA9PSB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlIHBhZ2UtanVtcGluZy1lbmFibGVkXCJcbiAgICAgICAgICAgID57eyBwYWdlTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWdlTnVtYmVyID09IDBcIiBjbGFzcz1cInBhZ2Utc2VwZXJhdG9yXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBkaXNwbGF5OiAnZmxleCcgfVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCIgW25nU3R5bGVdPVwieyAnbWFyZ2luLXJpZ2h0JzogJzRweCcgfVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICA8c3BhbiBbY2xhc3MucGFnZS1uYXYtaW5hY3RpdmVdPVwidGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgPT09IHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8ubm9PZlBhZ2VzXCJcbiAgICAgIChjbGljayk9XCJ0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSA8IHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8ubm9PZlBhZ2VzICYmIHVwZGF0ZVNlbGVjdGVkUGFnZSh0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSArIDEpXCIgY2xhc3M9XCJwYWdlXCI+XG4gICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICBkPVwiTTYuMTQyNiA1LjU2Mjk1QzYuMTQ0MjEgNS41NjEzOSA2LjE0NTgxIDUuNTU5ODIgNi4xNDc0MSA1LjU1ODI0QzYuMzA0MDUgNS40MDQwOCA2LjM4MjM2IDUuMjAyMDMgNi4zODIzNiA0Ljk5OTk4QzYuMzgyMzYgNC43OTc5MyA2LjMwNDA1IDQuNTk1ODggNi4xNDc0MSA0LjQ0MTcyQzYuMTQ1ODEgNC40NDAxNCA2LjE0NDIxIDQuNDM4NTggNi4xNDI2IDQuNDM3MDJMMS44NjkzNCAwLjIzMTIzMUMxLjU1NjA4IC0wLjA3NzA3NzEgMS4wNDgyIC0wLjA3NzA3NzEgMC43MzQ5NDIgMC4yMzEyMzFDMC40MjE2ODggMC41Mzk1NCAwLjQyMTY4OCAxLjAzOTQxIDAuNzM0OTQyIDEuMzQ3NzJMNC40NDU4IDQuOTk5OThMMC43MzQ5NDEgOC42NTIyNUMwLjQyMTY4NiA4Ljk2MDU1IDAuNDIxNjg2IDkuNDYwNDIgMC43MzQ5NDEgOS43Njg3M0MxLjA0ODIgMTAuMDc3IDEuNTU2MDggMTAuMDc3IDEuODY5MzQgOS43Njg3M0w2LjE0MjYgNS41NjI5NVpcIlxuICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
784
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFNVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFHVCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDWHJDLCtDQU1DO0lBSkMseU5BQWtCLG1DQUE0QixLQUFDO0lBSWhELGlCQUFtQjs7O0lBRGxCLEFBREEsZ0VBQTJDLG9DQUNmOzs7SUEwQnhCLDZCQUFrRztJQUNoRyxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSx5RkFDRjs7O0lBTUUsMkJBQXFGOzs7O0lBTHZGLGdDQUlDO0lBSEMsa05BQVMsMkNBQWlDLEVBQUUsc0NBQTRCLHdCQUFFLHdCQUF3QixLQUFDO0lBSW5HLCtFQUE4RTs7SUFDOUUsK0JBQStGO0lBQzdGLDJCQUtFO0lBRU4sQUFERSxpQkFBTSxFQUNEOzs7OztJQVRFLGNBQWtEO0lBQWxELG1IQUFrRDs7OztJQVUzRCxnQ0FJQztJQUhDLGdLQUFTLHVCQUFnQix3QkFBRSx3QkFBd0IsS0FBQztJQUlwRCxtQ0FBNkQ7SUFDL0QsaUJBQU87OztJQURTLGNBQStCO0lBQS9CLG9EQUErQjs7OztJQUUvQyxnQ0FNb0I7SUFEbEIsZ01BQWMsMkJBQW9CLEtBQUM7SUFFckMsaUJBQU87Ozs7SUFITCxBQURBLEFBREEsQUFEQSxxQ0FBb0Isb0NBQ1EseUNBQ0sseURBQ2dCOzs7O0lBSXJELHdGQUFz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c0RBQW9DO1lBTVYsY0FBaUM7WUFBakMsZ0dBQWlDO1lBa0RoQixlQUFnQjtZQUFoQix5Q0FBZ0I7WUFzRzNELGVBb0VDO1lBcEVELDJTQW9FQzs7O2lGRDVOUSxjQUFjO2NBTDFCLFNBQVM7MkJBQ0UsV0FBVzswQ0FzQkEsTUFBTTtrQkFBMUIsU0FBUzttQkFBQyxRQUFRO1lBQ1csVUFBVTtrQkFBdkMsWUFBWTttQkFBQyxjQUFjO1lBZ0NSLEtBQUs7a0JBQXhCLFNBQVM7bUJBQUMsT0FBTzs7a0ZBbkRQLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRmlsdGVyLCBUYWJsZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTb3J0U3RhdGUgfSBmcm9tIFwiLi9zb3J0LWljb25zLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERyb3Bkb3duSXRlbSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2Ryb3Bkb3duXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdGFibGVcIixcbiAgdGVtcGxhdGVVcmw6IFwidGFibGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCJ0YWJsZS5jb21wb25lbnQuY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAvLyBJbml0aWFsaXplIHdpdGggLTEgdG8gaW5kaWNhdGUgbm8gcm93IGlzIGNvbG9yZWQgYXQgdGhlIGJlZ2lubmluZ1xuICBhY3RpdmVSb3dJbmRleCA9IHNpZ25hbDxudW1iZXJbXT4oW10pO1xuICBoYXNDaGVja2JveEFjdGlvbnMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBzZWxlY3RBbGxDaGVja2JveCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gRmlsdGVyIHJlbGF0ZWQgdmFyaWFibGVzXG4gIHNob3dGaWx0ZXIgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBmaWx0ZXJOYW1lID0gc2lnbmFsPHN0cmluZz4oXCJcIik7XG4gIGZpbHRlckRhdGEgPSBzaWduYWw8QXJyYXk8RmlsdGVyPj4oW10pO1xuICBmaWx0ZXJDb250YWluZXJTdHlsZXMgPSBzaWduYWw8YW55Pih7fSk7XG4gIGFwcGxpZWRGaWx0ZXJzID0gc2lnbmFsPHsgW2tleTogc3RyaW5nXTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gfT4oe30pO1xuICBcbiAgLy8gQ29udmVydCBvdXRwdXRzIHRvIHNpZ25hbC1iYXNlZCBvdXRwdXRzXG4gIGZpbHRlcnNVcGRhdGVkID0gb3V0cHV0PHtcbiAgICBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcbiAgfT4oKTtcblxuICBAVmlld0NoaWxkKFwiZmlsdGVyXCIpIGZpbHRlcjogVGFibGVGaWx0ZXJDb21wb25lbnQgfCBhbnk7XG4gIEBWaWV3Q2hpbGRyZW4oXCJjb2xIZWFkZXJSZWZcIikgY29sSGVhZGVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+IHwgYW55O1xuXG4gIC8vIFBhZ2luYXRpb24gcmVsYXRlZCB2YXJpYWJsZXNcbiAgcGFnZXMgPSBzaWduYWw8QXJyYXk8bnVtYmVyPj4oW10pO1xuICB0YWJsZUxlbmd0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwYWdlU2VsZWN0ZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBwYWdlU2l6ZUNoYW5nZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBwYWdlU2l6ZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpPy5wYWdpbmF0aW9uQ29uZmlnO1xuICAgIGlmICghY29uZmlnPy5wYWdlU2l6ZXMgfHwgIUFycmF5LmlzQXJyYXkoY29uZmlnLnBhZ2VTaXplcykgfHwgIWNvbmZpZy5wYWdlU2l6ZXM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuICBcbiAgICByZXR1cm4gY29uZmlnLnBhZ2VTaXplcz8ubWFwKG9wdGlvbiA9PiAoe1xuICAgICAgbGFiZWw6IG9wdGlvbj8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgIHZhbHVlOiBvcHRpb24/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgfSkpIHx8IFtdO1xuICB9KTtcblxuICBzaG93UGFnZVNpemVEcm9wZG93biA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gISF0aGlzLnRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWc/LnNob3dQYWdlU2l6ZURyb3Bkb3duO1xuICB9KTtcblxuICBzZWxlY3RlZFBhZ2VTaXplT3B0aW9uID0gc2lnbmFsPERyb3Bkb3duSXRlbT4oeyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfSk7XG5cbiAgLy8gQ29udmVydCBpbnB1dHMgdG8gc2lnbmFsLWJhc2VkIGlucHV0c1xuICB0YWJsZUNvbmZpZyA9IGlucHV0PFRhYmxlQ29uZmlnPigpO1xuICBzdWJUYWJsZWNvbmZpZyA9IGlucHV0PFRhYmxlQ29uZmlnPigpO1xuICB0YWJsZURhdGFMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZXhwYW5kZWRJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgdGFibGVEYXRhID0gaW5wdXQ8QXJyYXk8QXJyYXk8YW55Pj4+KFtdKTtcbiAgc3ViVGFibGVEYXRhID0gaW5wdXQ8QXJyYXk8QXJyYXk8YW55Pj4+KFtdKTtcbiAgc3ViVGFibGVEYXRhTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGN1cnJlbnRTb3J0ID0gaW5wdXQ8e2NvbHVtbjogc3RyaW5nLCBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnIHwgJyd9IHwgbnVsbD4oKTtcbiAgQFZpZXdDaGlsZChcInRhYmxlXCIpIHRhYmxlOiBFbGVtZW50UmVmIHwgYW55O1xuICBjb2xsYXBzZUNvbEluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICBwcmV2aWV3TGluZXMgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcm93Q29sbGFwc2VDb25maWdJbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcbiAgZXhwYW5kZWRNYXAgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KTtcblxuXG4gIC8vIFNvcnRpbmcgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIG11bHRpQ29sdW1uU29ydCA9IHNpZ25hbDxTb3J0U3RhdGVbXT4oW10pO1xuICBzb3J0Q2hhbmdlID0gb3V0cHV0PFNvcnRTdGF0ZT4oKTtcbiAgaGVhZGVyQWN0aW9uID0gb3V0cHV0PHsgdHlwZTogc3RyaW5nOyBwYXlsb2FkPzogYW55IH0+KCk7XG5cbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGVMZW5ndGguc2V0KHRoaXMudGFibGVEYXRhKCk/Lmxlbmd0aCA/PyAwKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFjdGl2ZVJvd0luZGV4ICE9PSBudWxsICYmIGNvbmZpZy5hY3RpdmVSb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVSb3dJbmRleCA9IGNvbmZpZy5hY3RpdmVSb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KEFycmF5LmlzQXJyYXkoYWN0aXZlUm93SW5kZXgpID8gYWN0aXZlUm93SW5kZXggOiBbYWN0aXZlUm93SW5kZXhdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYoY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnPy5zaG93UGFnZVNpemVEcm9wZG93bikge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnBhZ2VTaXplT3B0aW9ucygpO1xuICAgICAgICAgIGNvbnN0IHJvd3NQZXJQYWdlID0gdGhpcy50YWJsZUNvbmZpZygpPy5wYWdpbmF0aW9uQ29uZmlnPy5yb3dzUGVyUGFnZTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgfHwgIXJvd3NQZXJQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZVNpemVPcHRpb24uc2V0KHsgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0Py52YWx1ZSA9PT0gcm93c1BlclBhZ2UudG9TdHJpbmcoKSk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZVNpemVPcHRpb24uc2V0KHNlbGVjdGVkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgY29uZmlndXJlZCByb3dzUGVyUGFnZSBpcyBub3QgYW1vbmcgb3B0aW9ucywgcGljayB0aGUgZmxvb3IgdmFsdWUgYW5kIG5vdGlmeSBwYXJlbnRcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IE51bWJlcihyb3dzUGVyUGFnZSk7XG4gICAgICAgICAgICAvL1NvcnQgdGhlIG9wdGlvbnNcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlZCA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgLm1hcChvcHQgPT4gKHsgb3B0LCBudW06IE51bWJlcihvcHQ/LnZhbHVlKSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoeyBudW0gfSkgPT4gTnVtYmVyLmlzRmluaXRlKG51bSkpXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm51bSAtIGIubnVtKTtcblxuICAgICAgICAgICAgbGV0IGZsb29yT3B0aW9uID0gc29ydGVkWzBdPy5vcHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc29ydGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgIGlmIChzb3J0ZWRbaV0ubnVtIDw9IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGZsb29yT3B0aW9uID0gc29ydGVkW2ldLm9wdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBjb25maWd1cmVkIHJvd3NQZXJQYWdlIHdhcyBub3QgbWF0Y2hlZCB0byBhbnkgb2YgdGhlIHBhZ2VTaXplcyBzZW50IGluIHRoZSBwYWdpbmF0aW9uQ29uZmlnLiBTZWxlY3RpbmcgdGhlIG5lYXJlc3QgZmxvb3IgdmFsdWUgYW1vbmcgdGhlIGF2YWlsYWJsZSBwYWdlU2l6ZXMuXCIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhZ2VTaXplT3B0aW9uLnNldChmbG9vck9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UoZmxvb3JPcHRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gcGFnZSBzaXplIG9wdGlvbnMgYXZhaWxhYmxlLlwiKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7IFxufVxuXG5cbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIHJvdyBjbGlja1xuICBzZWxlY3RSb3coaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmhhc0NoZWNrYm94QWN0aW9ucygpKSByZXR1cm47XG4gICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoW2luZGV4XSk7IC8vIFNldCB0aGUgc2VsZWN0ZWQgaW5kZXggdG8gdGhlIGNsaWNrZWQgcm93J3MgaW5kZXhcbiAgICAhIXRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuYWN0aW9uICYmIHRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuYWN0aW9uKGluZGV4KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzQ2hlY2tib3hBY3Rpb25zLnNldCh0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnPy5zb21lKGNvbCA9PiBjb2wudHlwZSA9PT0gXCJhY3Rpb25zXCIgJiYgY29sLmFjdGlvblR5cGUgPT09IFwiY2hlY2tib3hcIikpO1xuICAgIHRoaXMudGFibGVMZW5ndGguc2V0KCEhdGhpcy50YWJsZURhdGEoKSA/IHRoaXMudGFibGVEYXRhKCkubGVuZ3RoIDogMCk7XG4gICAgdGhpcy5pbml0aWFsaXplRmlsdGVycygpO1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgdGhpcy5pbml0aWFsaXplUGFnaW5hdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLmNhblNjcm9sbEhvcml6b250YWxseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBldmVudCA9PiB7XG4gICAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgICAgbGV0IGlzQ2hlY2tCb3hDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudC5jbGFzc05hbWUgPT09IFwiY2hlY2ttYXJrXCIpIHtcbiAgICAgICAgICBpc0NoZWNrQm94Q2xpY2tlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zaG93RmlsdGVyLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXNDbGlja0luc2lkZUVsZW1lbnQgPSB0aGlzLmZpbHRlci5jb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoIWlzQ2xpY2tJbnNpZGVFbGVtZW50ICYmICFpc0NoZWNrQm94Q2xpY2tlZCkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlRmlsdGVyKHRoaXMuZmlsdGVyTmFtZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZmV0Y2ggY29sbGFwc2VDb2xJbmRleCBhbmQgcHJldmlld0xpbmVzIGlmIHByZXNlbnRcbiAgICB0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXguc2V0KHRoaXMudGFibGVDb25maWcoKT8uY29sQ29uZmlnPy5maW5kSW5kZXgoXG4gICAgICBjb2wgPT4gY29sLnR5cGUgPT09ICdhY3Rpb25zJyAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZSdcbiAgICApKTtcbiAgICBpZiAodGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4KCkgIT09IC0xKSB7XG4gICAgICB0aGlzLmNvbGxhcHNlQ29sSW5kZXguc2V0KHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWdbdGhpcy5yb3dDb2xsYXBzZUNvbmZpZ0luZGV4KCldLmNvbGxhcHNlQ29sdW1uSW5kZXggPz8gbnVsbCk7XG4gICAgICB0aGlzLnByZXZpZXdMaW5lcy5zZXQodGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1t0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKV0ucHJldmlld0xpbmVzID8/IG51bGwpO1xuICAgICAgdGhpcy5idWlsZEV4cGFuZGVkTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGRFeHBhbmRlZE1hcCgpOiB2b2lke1xuICAgIGNvbnN0IG5ld0V4cGFuZGVkTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAgIGNvbnN0IGNvbGxhcHNlSW5kZXggPSB0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKTtcbiAgICBcbiAgICB0aGlzLnRhYmxlRGF0YSgpLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgbmV3RXhwYW5kZWRNYXBbYCR7cm93SW5kZXh9YF0gPSByb3dbY29sbGFwc2VJbmRleF07XG4gICAgfSk7XG4gICAgdGhpcy5leHBhbmRlZE1hcC5zZXQobmV3RXhwYW5kZWRNYXApO1xufVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk7XG4gICAgaWYgKCFjb25maWc/LnBhZ2luYXRpb25Db25maWcpIHJldHVybjtcbiAgXG4gICAgY29uc3QgcmF3SGVpZ2h0ID0gY29uZmlnLmhlaWdodDtcbiAgXG4gICAgLy8gSGFuZGxlIHBlcmNlbnRhZ2UgdmFsdWVzIC0gdXNlIGNhbGMoKSB0byBzdWJ0cmFjdCA1NnB4XG4gICAgaWYgKHR5cGVvZiByYXdIZWlnaHQgPT09ICdzdHJpbmcnICYmIHJhd0hlaWdodC5pbmNsdWRlcygnJScpKSB7XG4gICAgICBjb25zdCBjYWxjSGVpZ2h0ID0gYGNhbGMoJHtyYXdIZWlnaHR9IC0gNTZweClgO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQsIFwiaGVpZ2h0XCIsIGNhbGNIZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgcGl4ZWwgdmFsdWVzIC0gc3VidHJhY3QgNTZweCAoc2FtZSBhcyBvbGQgY29kZSlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChyYXdIZWlnaHQgYXMgYW55KSAtIDU2O1xuICAgICAgY29uc3QgZmluYWxIZWlnaHQgPSByZXN1bHQgKyBcInB4XCI7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCwgXCJoZWlnaHRcIiwgZmluYWxIZWlnaHQpO1xuICAgIH1cbiAgfVxuICBcbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy50YWJsZUxlbmd0aC5zZXQodGhpcy50YWJsZURhdGEoKT8ubGVuZ3RoID8/IDApO1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkuYWN0aXZlUm93SW5kZXggIT09IG51bGwgJiYgdGhpcy50YWJsZUNvbmZpZygpLmFjdGl2ZVJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZVJvd0luZGV4ID0gdGhpcy50YWJsZUNvbmZpZygpLmFjdGl2ZVJvd0luZGV4O1xuICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoQXJyYXkuaXNBcnJheShhY3RpdmVSb3dJbmRleCkgPyBhY3RpdmVSb3dJbmRleCA6IFthY3RpdmVSb3dJbmRleF0pXG4gICAgfVxuICB9XG5cbiAgLy8gRmlsdGVyIHJlbGF0ZWQgZnVuY3Rpb25zXG4gIGluaXRpYWxpemVGaWx0ZXJzKCkge1xuICAgIGNvbnN0IG5ld0FwcGxpZWRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+IH0gPSB7fTtcbiAgICBjb25zdCBhbGxGaWx0ZXJzOiBBcnJheTxGaWx0ZXI+ID0gW107XG4gICAgXG4gICAgZm9yIChsZXQgY29sSGVhZGVyIG9mIHRoaXMudGFibGVDb25maWcoKT8uY29sSGVhZGVyQ29uZmlnKSB7XG4gICAgICBpZiAoY29sSGVhZGVyLmZpbHRlcnMpIHtcbiAgICAgICAgbGV0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIGNvbEhlYWRlci5maWx0ZXJzKSB7XG4gICAgICAgICAgaWYgKGZpbHRlci5jaGVja2VkKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFkZCBhbGwgZmlsdGVycyB0byB0aGUgZmlsdGVyRGF0YSBhcnJheVxuICAgICAgICAgIGFsbEZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIG5ld0FwcGxpZWRGaWx0ZXJzW2NvbEhlYWRlci5kYXRhXSA9IGZpbHRlcnM7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXBwbGllZEZpbHRlcnMuc2V0KG5ld0FwcGxpZWRGaWx0ZXJzKTtcbiAgICB0aGlzLmZpbHRlckRhdGEuc2V0KGFsbEZpbHRlcnMpO1xuIH1cbiAgdG9nZ2xlRmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zaG93RmlsdGVyKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZS5zZXQoZmlsdGVyTmFtZSk7XG4gICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KHRydWUpO1xuXG4gICAgICBsZXQgb2ZmU2V0ID0gMDtcbiAgICAgIGxldCBjb2xIZWFkZXJzUmV2ZXJzZWQgPSB0aGlzLmNvbEhlYWRlcnMudG9BcnJheSgpLnJldmVyc2UoKTtcblxuICAgICAgZm9yIChsZXQgaGVhZGVyIG9mIGNvbEhlYWRlcnNSZXZlcnNlZCkge1xuICAgICAgICBpZiAoaGVhZGVyLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ID09PSBmaWx0ZXJOYW1lKSBicmVhaztcbiAgICAgICAgb2ZmU2V0ICs9IGhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJDb250YWluZXJTdHlsZXMuc2V0KHtcbiAgICAgICAgdG9wOiBcIjQ0cHhcIixcbiAgICAgICAgcmlnaHQ6IG9mZlNldCA+IDAgPyBvZmZTZXQgLSAxMTYgKyBcInB4XCIgOiBcIjEycHhcIlxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZS5zZXQoXCJcIik7XG4gICAgICB0aGlzLmZpbHRlckRhdGEuc2V0KFtdKTtcbiAgICAgIHRoaXMuc2hvd0ZpbHRlci5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuICB1cGRhdGVBcHBsaWVkRmlsdGVycyhhcHBsaWVkRmlsdGVyczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4pIHtcbiAgICBjb25zdCBjdXJyZW50RmlsdGVycyA9IHRoaXMuYXBwbGllZEZpbHRlcnMoKTtcbiAgICBpZiAoYXBwbGllZEZpbHRlcnMubGVuZ3RoID09IDApIHtcbiAgICAgIGRlbGV0ZSBjdXJyZW50RmlsdGVyc1t0aGlzLmZpbHRlck5hbWUoKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRGaWx0ZXJzW3RoaXMuZmlsdGVyTmFtZSgpXSA9IGFwcGxpZWRGaWx0ZXJzO1xuICAgIH1cbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzLnNldCh7IC4uLmN1cnJlbnRGaWx0ZXJzIH0pO1xuICAgIHRoaXMuZmlsdGVyc1VwZGF0ZWQuZW1pdCh7IC4uLnRoaXMuYXBwbGllZEZpbHRlcnMoKSB9KTtcbiAgICB0aGlzLnRvZ2dsZUZpbHRlcih0aGlzLmZpbHRlck5hbWUoKSk7XG4gIH1cblxuICAvLyBQYWdpbmF0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zXG4gIGluaXRpYWxpemVQYWdpbmF0aW9uKCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgbGV0IGxlbiA9IHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLm5vT2ZQYWdlcztcbiAgICAgIGlmIChsZW4gPD0gNykge1xuICAgICAgICBjb25zdCBuZXdQYWdlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgIG5ld1BhZ2VzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWdlcy5zZXQobmV3UGFnZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDIsIDMsIDQsIDAsIGxlbl0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGRhdGVTZWxlY3RlZFBhZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgLy8gR3VhcmQgY2xhdXNlIHRvIHByZXZlbnQgb3V0LW9mLXJhbmdlIHVwZGF0ZXNcbiAgICBpZiAocGFnZU51bWJlciA8IDEgfHwgcGFnZU51bWJlciA+IHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLm5vT2ZQYWdlcykgcmV0dXJuO1xuXG4gICAgLy8gUmVzZXQgaGVhZGVyIGNoZWNrYm94IHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBwYWdlXG4gICAgdGhpcy5zZWxlY3RBbGxDaGVja2JveC5zZXQoZmFsc2UpO1xuICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICBsZXQgbGVuID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzO1xuICAgIGlmIChsZW4gPiA3KSB7XG4gICAgICBpZiAocGFnZU51bWJlciAtIDIgPD0gMSkge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgLSAyID4gMSAmJiBwYWdlTnVtYmVyICsgMiA8IGxlbikge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgcGFnZU51bWJlciAtIDEsIHBhZ2VOdW1iZXIsIHBhZ2VOdW1iZXIgKyAxLCAwLCBsZW5dKTtcbiAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciArIDIgPj0gbGVuKSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAwLCBsZW4gLSAzLCBsZW4gLSAyLCBsZW4gLSAxLCBsZW5dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYWdlU2VsZWN0ZWQuZW1pdChwYWdlTnVtYmVyKTtcbiAgfVxuXG4gIC8vIE1haW4gY29udGFpbmVyIHJlbGF0ZWQgZnVuY3Rpb25zXG4gIGdldENvbnRhaW5lckhlaWdodCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpPy5oZWlnaHQpIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnKCkuaGVpZ2h0O1xuICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gIH1cbiAgZ2V0Q29udGFpbmVyV2lkdGgoKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKT8ud2lkdGgpIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnKCkud2lkdGg7XG4gICAgZWxzZSByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8vIENvbHVtbiBIZWFkZXJzIHJlbGF0ZWQgZnVuY3Rpb25zXG4gIGdldENvbEhlYWRlcnNSb3dTdHlsZXMoKSB7XG4gICAgY29uc3QgeyBjb2xIZWFkZXJzUm93Q29uZmlnIH0gPSB0aGlzLnRhYmxlQ29uZmlnKCk7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gY29sSGVhZGVyc1Jvd0NvbmZpZz8uaGVpZ2h0IHx8IFwiNDRweFwiO1xuICAgIGNvbnN0IGJvcmRlclRvcCA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5ib3JkZXJUb3AgfHwgXCJcIjtcbiAgICBjb25zdCBib3JkZXJCb3R0b20gPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uYm9yZGVyQm90dG9tIHx8IFwiMXB4IHNvbGlkICNFMEUwRTBcIjtcbiAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uYmFja2dyb3VuZENvbG9yIHx8IFwiI0ZGRkZGRlwiO1xuICAgIGNvbnN0IGZvbnRTaXplID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmZvbnRTaXplIHx8IFwiMTRweFwiO1xuICAgIHJldHVybiB7XG4gICAgICBcIm1pbi1oZWlnaHRcIjogbWluSGVpZ2h0LFxuICAgICAgXCJib3JkZXItdG9wXCI6IGJvcmRlclRvcCxcbiAgICAgIFwiYm9yZGVyLWJvdHRvbVwiOiBib3JkZXJCb3R0b20sXG4gICAgICBcImJhY2tncm91bmQtY29sb3JcIjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgXCJmb250LXNpemVcIjogZm9udFNpemVcbiAgICB9O1xuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKHNvcnRTdGF0ZTogU29ydFN0YXRlKSB7XG4gICAgLy8gRW1pdCB0aGUgc29ydCBjaGFuZ2UgdG8gdGhlIHBhcmVudCBjb21wb25lbnRcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChzb3J0U3RhdGUpO1xuICAgIFxuICAgIC8vIEhhbmRsZSBtdWx0aS1jb2x1bW4gc29ydCBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5tdWx0aUNvbHVtblNvcnQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRNdWx0aVNvcnQgPSB0aGlzLm11bHRpQ29sdW1uU29ydCgpO1xuICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50TXVsdGlTb3J0LmZpbmRJbmRleChzb3J0ID0+IHNvcnQuY29sdW1uID09PSBzb3J0U3RhdGUuY29sdW1uKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgaWYgKHNvcnRTdGF0ZS5kaXJlY3Rpb24gPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBuZXdNdWx0aVNvcnQgPSBbLi4uY3VycmVudE11bHRpU29ydF07XG4gICAgICAgICAgbmV3TXVsdGlTb3J0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgdGhpcy5tdWx0aUNvbHVtblNvcnQuc2V0KG5ld011bHRpU29ydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV3TXVsdGlTb3J0ID0gWy4uLmN1cnJlbnRNdWx0aVNvcnRdO1xuICAgICAgICAgIG5ld011bHRpU29ydFtpbmRleF0gPSBzb3J0U3RhdGU7XG4gICAgICAgICAgdGhpcy5tdWx0aUNvbHVtblNvcnQuc2V0KG5ld011bHRpU29ydCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydFN0YXRlLmRpcmVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm11bHRpQ29sdW1uU29ydC5zZXQoWy4uLmN1cnJlbnRNdWx0aVNvcnQsIHNvcnRTdGF0ZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEFjdGlvbnNDZWxsU3R5bGUoc3R5bGU6IGFueSk6IGFueSB7XG4gICAgaWYgKCFzdHlsZSkgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHsgd2lkdGgsIC4uLnJlc3RTdHlsZSB9ID0gc3R5bGU7XG4gICAgcmV0dXJuIHJlc3RTdHlsZTtcbiAgfVxuXG4gIG9uQWN0aW9uQ2xpY2soZXZlbnQ6IGFueSwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChldmVudC5hY3Rpb25UeXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBjb25zdCBjdXJyZW50QWN0aXZlUm93cyA9IHRoaXMuYWN0aXZlUm93SW5kZXgoKTtcbiAgICAgIGlmIChldmVudC52YWx1ZSkge1xuICAgICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChbLi4uY3VycmVudEFjdGl2ZVJvd3MsIHJvd0luZGV4XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChjdXJyZW50QWN0aXZlUm93cy5maWx0ZXIoaW5kZXggPT4gaW5kZXggIT09IHJvd0luZGV4KSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGlvbkluZm8gPSB0aGlzLmZpbmRBY3Rpb25Db25maWcoJ2NoZWNrYm94Jyk7XG4gICAgICBpZiAoYWN0aW9uSW5mbyAmJiB0aGlzLnRhYmxlRGF0YSgpW3Jvd0luZGV4XSkge1xuICAgICAgICBjb25zdCB7IGluZGV4LCBjb25maWcgfSA9IGFjdGlvbkluZm87XG4gICAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgY29uc3QgY2hlY2tlZEl0ZW1zID0gdGhpcy50YWJsZURhdGEoKS5maWx0ZXIocm93ID0+IHJvd1tpbmRleF0gPT09IHRydWUpO1xuICAgICAgICBjb25maWcuYWN0aW9uPy4oY2hlY2tlZEl0ZW1zKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZihldmVudC5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJyl7XG4gICAgICBjb25zdCByb3dDb2xsYXBzZSA9IHRoaXMuZmluZEFjdGlvbkNvbmZpZygncm93LWNvbGxhcHNlJyk7XG4gICAgICBpZiAocm93Q29sbGFwc2UgJiYgdGhpcy50YWJsZURhdGEoKVtyb3dJbmRleF0pIHtcbiAgICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgZGlyZWN0bHkgbW9kaWZ5IGlucHV0IHNpZ25hbHMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudFxuICAgICAgICByb3dDb2xsYXBzZS5jb25maWcuYWN0aW9uPy4odGhpcy50YWJsZURhdGEoKSk7XG4gICAgICAgIHRoaXMuYnVpbGRFeHBhbmRlZE1hcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpbmRBY3Rpb25Db25maWcoYWN0aW9uVHlwZTogc3RyaW5nKTogeyBpbmRleDogbnVtYmVyLCBjb25maWc6IENvbENvbmZpZyB9IHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2wgPSB0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2ldO1xuICAgICAgaWYgKGNvbC50eXBlID09PSAnYWN0aW9ucycgJiYgY29sLmFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHsgaW5kZXg6IGksIGNvbmZpZzogY29sIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuXG4gIGlzUm93RGlzYWJsZWQocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuZGlzYWJsZVJvdyA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5kaXNhYmxlUm93KHJvdykgOiBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZUNoZWNrYm94KCkge1xuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3guc2V0KCF0aGlzLnNlbGVjdEFsbENoZWNrYm94KCkpO1xuICAgIGNvbnN0IGNoZWNrYm94Q29sSW5kZXggPSB0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnLmZpbmRJbmRleChjb2wgPT4gY29sLnR5cGUgPT09ICdhY3Rpb25zJyAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94Jyk7XG4gICAgaWYgKGNoZWNrYm94Q29sSW5kZXggIT09IC0xKSB7XG4gICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgICBjb25zdCB1cGRhdGVkVGFibGVEYXRhID0gdGhpcy50YWJsZURhdGEoKS5tYXAoKHJvdzogYW55W10pID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFJvdyA9IFsuLi5yb3ddO1xuICAgICAgICBjb25zdCBjdXJyZW50Q2hlY2tib3ggPSB1cGRhdGVkUm93W2NoZWNrYm94Q29sSW5kZXhdO1xuICAgICAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdyk7XG4gICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xuICAgICAgICAgIHVwZGF0ZWRSb3dbY2hlY2tib3hDb2xJbmRleF0gPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRSb3c7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaGVhZGVyQWN0aW9uPy5lbWl0KHtcbiAgICAgICAgdHlwZTogXCJjaGVja2JveFRvZ2dsZVwiLFxuICAgICAgICBwYXlsb2FkOiB1cGRhdGVkVGFibGVEYXRhXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIG9uUGFnZVNpemVDaGFuZ2Uoc2VsZWN0ZWRPcHRpb246IERyb3Bkb3duSXRlbSkge1xuICAgIHRoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQocGFyc2VJbnQoc2VsZWN0ZWRPcHRpb24udmFsdWUpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnIHtcbiAgaGVpZ2h0OiBzdHJpbmcgfCBcIjEwMCVcIjtcbiAgd2lkdGg6IHN0cmluZyB8IFwiMTAwJVwiO1xuICBwYWdpbmF0aW9uQ29uZmlnPzogUGFnaW5hdGlvbkNvbmZpZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIGNvbEhlYWRlcnNSb3dDb25maWc6IFJvd0NvbmZpZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIHJvd0NvbmZpZzogUm93Q29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgY29sSGVhZGVyQ29uZmlnOiBBcnJheTxDb2xIZWFkZXJDb25maWc+O1xuICBjb2xDb25maWc6IEFycmF5PENvbENvbmZpZz47XG4gIGNhbkV4cGFuZD86IGJvb2xlYW47XG4gIGNhblNjcm9sbEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIGNlbGxIb3Zlcj86IGJvb2xlYW47XG4gIGFjdGl2ZVJvd0luZGV4PzogbnVtYmVyIHwgbnVtYmVyW107XG4gIG11bHRpQ29sdW1uU29ydD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25Db25maWcge1xuICBub09mUGFnZXM6IG51bWJlcjtcbiAgcm93c1BlclBhZ2U6IG51bWJlcjtcbiAgdG90YWxOb09mUm93czogbnVtYmVyO1xuICBzZWxlY3RlZFBhZ2U/OiBudW1iZXI7XG4gIGRpc2FibGVQYWdlSnVtcGluZz86IGJvb2xlYW47XG4gIHNob3dQYWdlU2l6ZURyb3Bkb3duPzogYm9vbGVhbjsgLy8gV2hlbiB0cnVlLCByb3dzUGVyUGFnZSB2YWx1ZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gcGFnZVNpemVzIGFycmF5XG4gIHBhZ2VTaXplcz86IG51bWJlcltdO1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3dDb25maWcge1xuICBoZWlnaHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuICBzdHlsZT86IHt9O1xuICBhY3Rpb24/OiBhbnk7XG4gIGRpc2FibGVSb3c/OiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb2xIZWFkZXJDb25maWcge1xuICB0eXBlOiBcInRleHRcIiB8IFwibnVtYmVyXCIgfCBcImN1c3RvbVwiIHwgXCJjaGVja2JveFwiO1xuICBkYXRhOiBhbnk7XG4gIGNvbXBvbmVudFJlZj86IGFueTtcbiAgZmlsdGVycz86IEFycmF5PEZpbHRlcj4gfCBudWxsO1xuICBzdHlsZT86IHt9O1xuICBhY3Rpb24/OiBhbnk7XG4gIGlzU29ydGFibGU/OiBib29sZWFuO1xuICBzb3J0QXNjSWNvbj86IHN0cmluZztcbiAgc29ydERlc2NJY29uPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb2xDb25maWcge1xuICB0eXBlOiBcInRleHRcIiB8IFwibnVtYmVyXCIgfCBcImN1c3RvbVwiIHwgXCJhY3Rpb25zXCIgfCBcImh0bWxcIjtcbiAgY29tcG9uZW50UmVmPzogYW55O1xuICBzdHlsZT86IHt9O1xuICBhY3Rpb24/OiBhbnk7XG4gIGFjdGlvbkl0ZW1zPzogQWN0aW9uSXRlbVtdO1xuICBhY3Rpb25UeXBlPzogXCJpbmxpbmVcIiB8IFwiZHJvcGRvd25cIiB8IFwiY2hlY2tib3hcIiB8IFwicm93LWNvbGxhcHNlXCI7IC8vIGlubGluZSBmb3IgaW5kaXZpZHVhbCBpY29ucywgZHJvcGRvd24gZm9yIG1lbnVcbiAgZGlzYWJsZT86IChyb3dEYXRhOiBhbnkpID0+IGJvb2xlYW47XG4gIGNvbGxhcHNlQ29sdW1uSW5kZXg/OiBudW1iZXI7XG4gIHByZXZpZXdMaW5lcz86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uSXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGRpc2FibGU/OiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xuICBhY3Rpb24/OiAoZGF0YTogYW55KSA9PiB2b2lkO1xuICBjaGlsZHJlbj86IEFjdGlvbkl0ZW1bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxBY3Rpb25JdGVtIGV4dGVuZHMgQWN0aW9uSXRlbSB7XG4gIHNob3dTdWJtZW51PzogYm9vbGVhbjtcbn1cbiIsIjxkaXZcbiAgW25nU3R5bGVdPVwie1xuICAgIGhlaWdodDogZ2V0Q29udGFpbmVySGVpZ2h0KCksXG4gICAgd2lkdGg6IGdldENvbnRhaW5lcldpZHRoKCksXG4gICAgJ292ZXJmbG93LXgnOiB0YWJsZUNvbmZpZygpLmNhblNjcm9sbEhvcml6b250YWxseSA/ICdhdXRvJyA6ICd1bnNldCdcbiAgfVwiXG4gIGlkPVwibWFpbi1jb250YWluZXJcIlxuPlxuICA8bWlzLXRhYmxlLWZpbHRlclxuICAgICNmaWx0ZXJcbiAgICAoZmlsdGVyc0FwcGxpZWQpPVwidXBkYXRlQXBwbGllZEZpbHRlcnMoJGV2ZW50KVwiXG4gICAgKm5nSWY9XCJzaG93RmlsdGVyKClcIlxuICAgIFtjb250YWluZXJTdHlsZXNdPVwiZmlsdGVyQ29udGFpbmVyU3R5bGVzKClcIlxuICAgIFtmaWx0ZXJzRGF0YV09XCJmaWx0ZXJEYXRhKClcIlxuICA+PC9taXMtdGFibGUtZmlsdGVyPlxuICA8ZGl2XG4gICAgI3RhYmxlXG4gICAgaWQ9XCJ0YWJsZS1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ25vLXNjcm9sbGJhcic6IGV4cGFuZGVkSW5kZXgoKSA8IDAsIHNjcm9sbGJhcjogIShleHBhbmRlZEluZGV4KCkgPCAwKSwgJ3Njcm9sbC1ob3Jpem9udGFsbHknOiB0YWJsZUNvbmZpZygpLmNhblNjcm9sbEhvcml6b250YWxseSB9XCJcbiAgPlxuICAgIDxkaXZcbiAgICBbbmdTdHlsZV09XCJnZXRDb2xIZWFkZXJzUm93U3R5bGVzKClcIlxuICAgICAgaWQ9XCJjb2wtaGVhZGVycy1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgI2NvbEhlYWRlclJlZlxuICAgICAgICAoY2xpY2spPVwiY29sSGVhZGVyPy5hY3Rpb24gPyBjb2xIZWFkZXI/LmFjdGlvbihjb2xIZWFkZXIpIDogbnVsbFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2xIZWFkZXIgb2YgdGFibGVDb25maWcoKT8uY29sSGVhZGVyQ29uZmlnXCJcbiAgICAgICAgY2xhc3M9XCJjb2wtaGVhZGVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIHdpZHRoOiBjb2xIZWFkZXI/LnN0eWxlPy53aWR0aCB8fCAnJyxcbiAgICAgICAgICBjdXJzb3I6IGNvbEhlYWRlci5hY3Rpb24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IGNvbEhlYWRlcj8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICA/IGNvbEhlYWRlcj8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICA6IGNvbEhlYWRlci50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyAnZmxleC1lbmQnXG4gICAgICAgICAgICA6ICdzcGFjZS1iZXR3ZWVuJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPHAgKm5nSWY9XCJjb2xIZWFkZXI/LnR5cGUgIT09ICdjdXN0b20nICYmIGNvbEhlYWRlcj8udHlwZSAhPT0gJ2NoZWNrYm94J1wiIGNsYXNzPVwiY29sLWhlYWRlci10ZXh0XCI+XG4gICAgICAgICAge3sgY29sSGVhZGVyPy5kYXRhIHx8IFwiIFwiIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyRGF0YS5zZXQoY29sSGVhZGVyLmZpbHRlcnMpOyB0b2dnbGVGaWx0ZXIoY29sSGVhZGVyLmRhdGEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlICE9PSAnY3VzdG9tJyAmJiBjb2xIZWFkZXI/LmZpbHRlcnMgJiYgY29sSGVhZGVyPy5maWx0ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1pY29uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXBwbGllZEZpbHRlcnMoKVtjb2xIZWFkZXIuZGF0YV0/Lmxlbmd0aCA+IDBcIiBpZD1cImZpbHRlci1hY3RpdmVcIj48L3NwYW4+XG4gICAgICAgICAgPHN2ZyBmaWxsPVwibm9uZVwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxMyAxMFwiIHdpZHRoPVwiMTNcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgZD1cIk00Ljk3NTQ2IDEwSDcuNjQyMTNWOEg0Ljk3NTQ2VjEwWk0wLjMwODQ3MiAwVjJIMTIuMzA4NVYwSDAuMzA4NDcyWk0yLjMwODQ3IDZIMTAuMzA4NVY0SDIuMzA4NDdWNlpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDaGVja2JveCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlID09PSAnY2hlY2tib3gnXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LWljb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPG1pcy1jaGVja2JveCBbY2hlY2tlZF09XCJzZWxlY3RBbGxDaGVja2JveCgpXCI+PC9taXMtY2hlY2tib3g+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2xIZWFkZXI/LmlzU29ydGFibGUgJiYgIWNvbEhlYWRlcj8uZmlsdGVyc1wiIGFwcFNvcnRJY29uc1xuICAgICAgICAgIFtjb2x1bW5dPVwiY29sSGVhZGVyXCJcbiAgICAgICAgICBbYWN0aXZlU29ydF09XCJjdXJyZW50U29ydCgpXCJcbiAgICAgICAgICBbYWN0aXZlU29ydHNdPVwibXVsdGlDb2x1bW5Tb3J0KClcIlxuICAgICAgICAgIFttdWx0aUNvbHVtblNvcnRdPVwidGFibGVDb25maWcoKS5tdWx0aUNvbHVtblNvcnRcIlxuICAgICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cInNvcnQtaWNvblwiPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2xIZWFkZXI/LnR5cGUgPT09ICdjdXN0b20nXCIgY3VzdG9tVGFibGVDZWxsIFtjdXN0b21Db21wb25lbnRdPVwiY29sSGVhZGVyPy5jb21wb25lbnRSZWZcIiBbZGF0YV09XCJjb2xIZWFkZXIuZGF0YVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGlkPVwiZGF0YS1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3ctd3JhcHBlclwiICpuZ0Zvcj1cImxldCByb3cgb2YgdGFibGVEYXRhKCk7IGxldCBpID0gaW5kZXg7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInQtcm93XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0LXJvdy1ob3Zlcic6IHRhYmxlQ29uZmlnKCkuY2VsbEhvdmVyLCAnYWN0aXZlLXJvdyc6IGFjdGl2ZVJvd0luZGV4KCkuaW5jbHVkZXMoaSkgfVwiXG4gICAgICAgICAgW25nU3R5bGVdPVwieyAnbWluLWhlaWdodCc6IHRhYmxlQ29uZmlnKCk/LnJvd0NvbmZpZz8uaGVpZ2h0ID8gdGFibGVDb25maWcoKS5yb3dDb25maWcuaGVpZ2h0IDogJzQ0cHgnIH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSb3coaSlcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1yb3ddPVwiaXNSb3dEaXNhYmxlZChyb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvbiAmJiB0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb25UeXBlICE9PSAnY2hlY2tib3gnID8gdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uKGNvbCkgOiBudWxsXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93OyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIHdpZHRoOiB0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8ud2lkdGggfHwgdGFibGVDb25maWcoKT8uY29sSGVhZGVyQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LndpZHRoIHx8ICcnXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1jb2wtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3QtY29sLWNvbnRhaW5lci1ob3Zlcic6IHRhYmxlQ29uZmlnKCkuY2VsbEhvdmVyIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbFwiXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnN0eWxlXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvbiA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50JzogdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8uanVzdGlmeUNvbnRlbnRcbiAgICAgICAgICAgICAgICAgID8gdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8uanVzdGlmeUNvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDogdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgPyAnZmxleC1lbmQnXG4gICAgICAgICAgICAgICAgICA6ICdzcGFjZS1iZXR3ZWVuJ1xuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlICE9PSAnY3VzdG9tJyAmJiB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgIT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGNvbG9yOiB0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZT8uY29sb3IgfHwgJycsXG4gICAgICAgICAgICAgICctLWNvbGxhcHNlZC1saW5lcyc6IHByZXZpZXdMaW5lcygpIHx8IDNcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sbGFwc2VkLWNlbGwnOiBjb2xsYXBzZUNvbEluZGV4KCkgPT0gY29sSW5kZXggJiYgZXhwYW5kZWRNYXAoKVtyb3dJbmRleF1cbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbC10ZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIFJlbmRlciBhcyBIVE1MIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ2h0bWwnOyBlbHNlIHBsYWluVGV4dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImNvbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBSZW5kZXIgYXMgcGxhaW4gdGV4dCAtLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhaW5UZXh0PlxuICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tQ29tcG9uZW50XT1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XS5jb21wb25lbnRSZWZcIlxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgY3VzdG9tVGFibGVDZWxsXG4gICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxtaXMtYWN0aW9ucy1jZWxsXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgICAgICAgIFtjZWxsRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF1cIlxuICAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soJGV2ZW50LCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1hY3Rpb25zJzogKHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvblR5cGUgPT09ICdyb3ctY29sbGFwc2UnKSAmJiBpc1Jvd0Rpc2FibGVkKHJvdylcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID48L21pcy1hY3Rpb25zLWNlbGw+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRhYmxlQ29uZmlnKCk/LmNhbkV4cGFuZCAmJiBleHBhbmRlZEluZGV4KCkgPT09IGlcIiBjbGFzcz1cInN1Yi1yb3dcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViVGFibGVEYXRhTG9hZGluZygpXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgTG9hZGluZy4uLlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWJUYWJsZURhdGFMb2FkaW5nKCkgJiYgc3ViVGFibGVEYXRhKCkubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgTm8gRGF0YSBBdmFpbGFibGUuLi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3ViVGFibGVEYXRhTG9hZGluZygpICYmIHN1YlRhYmxlRGF0YSgpLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxzdWItdGFibGUgW2NvbmZpZ109XCJzdWJUYWJsZWNvbmZpZygpXCIgW3RhYmxlRGF0YV09XCJzdWJUYWJsZURhdGEoKVwiPjwvc3ViLXRhYmxlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBpZD1cInBhZ2luYXRpb24tY29udGVudC1jb250YWluZXJcIj5cbiAgICBAaWYoc2hvd1BhZ2VTaXplRHJvcGRvd24oKSB8fCAodGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZyAmJiAodGFibGVMZW5ndGgoKSA+PSB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcucm93c1BlclBhZ2UgfHwgdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgIT09IDEpKSl7XG4gICAgICA8ZGl2IFxuICAgICAgICBpZD1cInBhZ2luYXRpb24tY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPHAgaWQ9XCJwYWdpbmF0aW9uLXRleHRcIj5cbiAgICAgICAgICBTaG93aW5nXG4gICAgICAgICAge3sgKHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlIC0gMSkgKiB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcucm93c1BlclBhZ2UgKyAxIH19LXt7XG4gICAgICAgICAgICAodGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgLSAxKSAqIHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5yb3dzUGVyUGFnZSArIHRhYmxlTGVuZ3RoKClcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9mIHt7IHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy50b3RhbE5vT2ZSb3dzIH19IGl0ZW1zXG4gICAgICAgIDwvcD5cbiAgICAgICAgQGlmKHNob3dQYWdlU2l6ZURyb3Bkb3duKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1zaXplLXNlbGVjdG9yXCI+XG4gICAgICAgICAgICA8bWlzLWRyb3Bkb3duXG4gICAgICAgICAgICAgIFtkYXRhXT1cInBhZ2VTaXplT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSXRlbV09XCJzZWxlY3RlZFBhZ2VTaXplT3B0aW9uKClcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiJzkwcHgnXCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCInMzJweCdcIlxuICAgICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkcm9wZG93bkxpc3RIZWlnaHRdPVwiJzEwMHB4J1wiXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInBhZ2Utc2l6ZS1kcm9wZG93blwiXG4gICAgICAgICAgICA+PC9taXMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBpZD1cInBhZ2VzLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxzcGFuICAgKGNsaWNrKT1cInRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlID4gMSAmJiB1cGRhdGVTZWxlY3RlZFBhZ2UodGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgLSAxKVwiIGNsYXNzPVwicGFnZVwiIFtjbGFzcy5wYWdlLW5hdi1pbmFjdGl2ZV09XCJ0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSA9PT0gMVwiPlxuICAgICAgICAgICAgPHN2ZyBmaWxsPVwibm9uZVwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCA3IDEwXCIgd2lkdGg9XCI3XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgIGQ9XCJNMC44NTc0MDUgNS41NjI5NUMwLjg1NTc5NCA1LjU2MTM5IDAuODU0MTg4IDUuNTU5ODIgMC44NTI1ODggNS41NTgyNEMwLjY5NTk1NSA1LjQwNDA4IDAuNjE3NjQxIDUuMjAyMDMgMC42MTc2NDcgNC45OTk5OEMwLjYxNzY0MSA0Ljc5NzkzIDAuNjk1OTU1IDQuNTk1ODggMC44NTI1ODggNC40NDE3MkMwLjg1NDE4OCA0LjQ0MDE0IDAuODU1Nzk0IDQuNDM4NTggMC44NTc0MDQgNC40MzcwMkw1LjEzMDY2IDAuMjMxMjMxQzUuNDQzOTIgLTAuMDc3MDc3MSA1Ljk1MTggLTAuMDc3MDc3MSA2LjI2NTA2IDAuMjMxMjMxQzYuNTc4MzEgMC41Mzk1NCA2LjU3ODMxIDEuMDM5NDEgNi4yNjUwNiAxLjM0NzcyTDIuNTU0MiA0Ljk5OTk4TDYuMjY1MDYgOC42NTIyNUM2LjU3ODMxIDguOTYwNTUgNi41NzgzMSA5LjQ2MDQyIDYuMjY1MDYgOS43Njg3M0M1Ljk1MTggMTAuMDc3IDUuNDQzOTIgMTAuMDc3IDUuMTMwNjYgOS43Njg3M0wwLjg1NzQwNSA1LjU2Mjk1WlwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSBQYWdlIG51bWJlcnMgKG9ubHkgc2hvdyBpZiBkaXNhYmxlUGFnZUp1bXBpbmcgaXMgZmFsc2UpIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LmRpc2FibGVQYWdlSnVtcGluZ1wiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYWdlTnVtYmVyIG9mIHBhZ2VzKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGVkUGFnZShwYWdlTnVtYmVyKVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBhZ2VOdW1iZXIgIT0gMFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwYWdlLWFjdGl2ZSc6IHBhZ2VOdW1iZXIgPT0gdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2UgcGFnZS1qdW1waW5nLWVuYWJsZWRcIlxuICAgICAgICAgICAgICAgID57eyBwYWdlTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFnZU51bWJlciA9PSAwXCIgY2xhc3M9XCJwYWdlLXNlcGVyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IGRpc3BsYXk6ICdmbGV4JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCIgW25nU3R5bGVdPVwieyAnbWFyZ2luLXJpZ2h0JzogJzRweCcgfVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnNHB4JyB9XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICAgIDxzcGFuIFtjbGFzcy5wYWdlLW5hdi1pbmFjdGl2ZV09XCJ0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSA9PT0gdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXNcIlxuICAgICAgICAgIChjbGljayk9XCJ0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSA8IHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8ubm9PZlBhZ2VzICYmIHVwZGF0ZVNlbGVjdGVkUGFnZSh0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSArIDEpXCIgY2xhc3M9XCJwYWdlXCI+XG4gICAgICAgICAgICA8c3ZnIGZpbGw9XCJub25lXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDcgMTBcIiB3aWR0aD1cIjdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgZD1cIk02LjE0MjYgNS41NjI5NUM2LjE0NDIxIDUuNTYxMzkgNi4xNDU4MSA1LjU1OTgyIDYuMTQ3NDEgNS41NTgyNEM2LjMwNDA1IDUuNDA0MDggNi4zODIzNiA1LjIwMjAzIDYuMzgyMzYgNC45OTk5OEM2LjM4MjM2IDQuNzk3OTMgNi4zMDQwNSA0LjU5NTg4IDYuMTQ3NDEgNC40NDE3MkM2LjE0NTgxIDQuNDQwMTQgNi4xNDQyMSA0LjQzODU4IDYuMTQyNiA0LjQzNzAyTDEuODY5MzQgMC4yMzEyMzFDMS41NTYwOCAtMC4wNzcwNzcxIDEuMDQ4MiAtMC4wNzcwNzcxIDAuNzM0OTQyIDAuMjMxMjMxQzAuNDIxNjg4IDAuNTM5NTQgMC40MjE2ODggMS4wMzk0MSAwLjczNDk0MiAxLjM0NzcyTDQuNDQ1OCA0Ljk5OTk4TDAuNzM0OTQxIDguNjUyMjVDMC40MjE2ODYgOC45NjA1NSAwLjQyMTY4NiA5LjQ2MDQyIDAuNzM0OTQxIDkuNzY4NzNDMS4wNDgyIDEwLjA3NyAxLjU1NjA4IDEwLjA3NyAxLjg2OTM0IDkuNzY4NzNMNi4xNDI2IDUuNTYyOTVaXCJcbiAgICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|