mis-crystal-design-system 18.1.1 → 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.
@@ -21,7 +21,7 @@ const _c16 = () => ({ display: "flex" });
21
21
  const _c17 = () => ({ "margin-right": "4px" });
22
22
  function TableComponent_mis_table_filter_1_Template(rf, ctx) { if (rf & 1) {
23
23
  const _r1 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "mis-table-filter", 14, 1);
24
+ i0.ɵɵelementStart(0, "mis-table-filter", 13, 1);
25
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)); });
26
26
  i0.ɵɵelementEnd();
27
27
  } if (rf & 2) {
@@ -29,7 +29,7 @@ function TableComponent_mis_table_filter_1_Template(rf, ctx) { if (rf & 1) {
29
29
  i0.ɵɵproperty("containerStyles", ctx_r1.filterContainerStyles())("filtersData", ctx_r1.filterData());
30
30
  } }
31
31
  function TableComponent_div_5_p_2_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelementStart(0, "p", 21);
32
+ i0.ɵɵelementStart(0, "p", 20);
33
33
  i0.ɵɵtext(1);
34
34
  i0.ɵɵelementEnd();
35
35
  } if (rf & 2) {
@@ -38,16 +38,16 @@ function TableComponent_div_5_p_2_Template(rf, ctx) { if (rf & 1) {
38
38
  i0.ɵɵtextInterpolate1(" ", (colHeader_r4 == null ? null : colHeader_r4.data) || " ", " ");
39
39
  } }
40
40
  function TableComponent_div_5_span_3_span_1_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelement(0, "span", 26);
41
+ i0.ɵɵelement(0, "span", 25);
42
42
  } }
43
43
  function TableComponent_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
44
44
  const _r5 = i0.ɵɵgetCurrentView();
45
- i0.ɵɵelementStart(0, "span", 22);
45
+ i0.ɵɵelementStart(0, "span", 21);
46
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()); });
47
- i0.ɵɵtemplate(1, TableComponent_div_5_span_3_span_1_Template, 1, 0, "span", 23);
47
+ i0.ɵɵtemplate(1, TableComponent_div_5_span_3_span_1_Template, 1, 0, "span", 22);
48
48
  i0.ɵɵnamespaceSVG();
49
- i0.ɵɵelementStart(2, "svg", 24);
50
- i0.ɵɵelement(3, "path", 25);
49
+ i0.ɵɵelementStart(2, "svg", 23);
50
+ i0.ɵɵelement(3, "path", 24);
51
51
  i0.ɵɵelementEnd()();
52
52
  } if (rf & 2) {
53
53
  let tmp_5_0;
@@ -58,9 +58,9 @@ function TableComponent_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
58
58
  } }
59
59
  function TableComponent_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
60
60
  const _r6 = i0.ɵɵgetCurrentView();
61
- i0.ɵɵelementStart(0, "span", 27);
61
+ i0.ɵɵelementStart(0, "span", 26);
62
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()); });
63
- i0.ɵɵelement(1, "mis-checkbox", 28);
63
+ i0.ɵɵelement(1, "mis-checkbox", 27);
64
64
  i0.ɵɵelementEnd();
65
65
  } if (rf & 2) {
66
66
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -69,7 +69,7 @@ function TableComponent_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
69
69
  } }
70
70
  function TableComponent_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
71
71
  const _r7 = i0.ɵɵgetCurrentView();
72
- i0.ɵɵelementStart(0, "span", 29);
72
+ i0.ɵɵelementStart(0, "span", 28);
73
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)); });
74
74
  i0.ɵɵelementEnd();
75
75
  } if (rf & 2) {
@@ -79,16 +79,16 @@ function TableComponent_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
79
79
  } }
80
80
  function TableComponent_div_5_6_ng_template_0_Template(rf, ctx) { }
81
81
  function TableComponent_div_5_6_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵtemplate(0, TableComponent_div_5_6_ng_template_0_Template, 0, 0, "ng-template", 30);
82
+ i0.ɵɵtemplate(0, TableComponent_div_5_6_ng_template_0_Template, 0, 0, "ng-template", 29);
83
83
  } if (rf & 2) {
84
84
  const colHeader_r4 = i0.ɵɵnextContext().$implicit;
85
85
  i0.ɵɵproperty("customComponent", colHeader_r4 == null ? null : colHeader_r4.componentRef)("data", colHeader_r4.data);
86
86
  } }
87
87
  function TableComponent_div_5_Template(rf, ctx) { if (rf & 1) {
88
88
  const _r3 = i0.ɵɵgetCurrentView();
89
- i0.ɵɵelementStart(0, "div", 15, 2);
89
+ i0.ɵɵelementStart(0, "div", 14, 2);
90
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); });
91
- i0.ɵɵtemplate(2, TableComponent_div_5_p_2_Template, 2, 1, "p", 16)(3, TableComponent_div_5_span_3_Template, 4, 1, "span", 17)(4, TableComponent_div_5_span_4_Template, 2, 1, "span", 18)(5, TableComponent_div_5_span_5_Template, 1, 4, "span", 19)(6, TableComponent_div_5_6_Template, 1, 2, null, 20);
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);
92
92
  i0.ɵɵelementEnd();
93
93
  } if (rf & 2) {
94
94
  const colHeader_r4 = ctx.$implicit;
@@ -106,7 +106,7 @@ function TableComponent_div_5_Template(rf, ctx) { if (rf & 1) {
106
106
  } }
107
107
  function TableComponent_div_7_div_2_div_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
108
108
  i0.ɵɵelementContainerStart(0);
109
- i0.ɵɵelement(1, "span", 41);
109
+ i0.ɵɵelement(1, "span", 40);
110
110
  i0.ɵɵelementContainerEnd();
111
111
  } if (rf & 2) {
112
112
  const col_r12 = i0.ɵɵnextContext(2).$implicit;
@@ -123,8 +123,8 @@ function TableComponent_div_7_div_2_div_2_ng_template_2_Template(rf, ctx) { if (
123
123
  i0.ɵɵtextInterpolate(col_r12);
124
124
  } }
125
125
  function TableComponent_div_7_div_2_div_2_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelementStart(0, "div", 39);
127
- i0.ɵɵtemplate(1, TableComponent_div_7_div_2_div_2_ng_container_1_Template, 2, 1, "ng-container", 40)(2, TableComponent_div_7_div_2_div_2_ng_template_2_Template, 2, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
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);
128
128
  i0.ɵɵelementEnd();
129
129
  } if (rf & 2) {
130
130
  let tmp_10_0;
@@ -139,7 +139,7 @@ function TableComponent_div_7_div_2_div_2_Template(rf, ctx) { if (rf & 1) {
139
139
  } }
140
140
  function TableComponent_div_7_div_2_3_ng_template_0_Template(rf, ctx) { }
141
141
  function TableComponent_div_7_div_2_3_Template(rf, ctx) { if (rf & 1) {
142
- i0.ɵɵtemplate(0, TableComponent_div_7_div_2_3_ng_template_0_Template, 0, 0, "ng-template", 30);
142
+ i0.ɵɵtemplate(0, TableComponent_div_7_div_2_3_ng_template_0_Template, 0, 0, "ng-template", 29);
143
143
  } if (rf & 2) {
144
144
  const ctx_r15 = i0.ɵɵnextContext();
145
145
  const col_r12 = ctx_r15.$implicit;
@@ -149,7 +149,7 @@ function TableComponent_div_7_div_2_3_Template(rf, ctx) { if (rf & 1) {
149
149
  } }
150
150
  function TableComponent_div_7_div_2_mis_actions_cell_4_Template(rf, ctx) { if (rf & 1) {
151
151
  const _r17 = i0.ɵɵgetCurrentView();
152
- i0.ɵɵelementStart(0, "mis-actions-cell", 42);
152
+ i0.ɵɵelementStart(0, "mis-actions-cell", 41);
153
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)); });
154
154
  i0.ɵɵelementEnd();
155
155
  } if (rf & 2) {
@@ -163,10 +163,10 @@ function TableComponent_div_7_div_2_mis_actions_cell_4_Template(rf, ctx) { if (r
163
163
  } }
164
164
  function TableComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {
165
165
  const _r10 = i0.ɵɵgetCurrentView();
166
- i0.ɵɵelementStart(0, "div", 35);
166
+ i0.ɵɵelementStart(0, "div", 34);
167
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", 36);
169
- i0.ɵɵtemplate(2, TableComponent_div_7_div_2_div_2_Template, 4, 9, "div", 37)(3, TableComponent_div_7_div_2_3_Template, 1, 2, null, 20)(4, TableComponent_div_7_div_2_mis_actions_cell_4_Template, 1, 5, "mis-actions-cell", 38);
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);
170
170
  i0.ɵɵelementEnd()();
171
171
  } if (rf & 2) {
172
172
  let tmp_8_0;
@@ -190,7 +190,7 @@ function TableComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {
190
190
  } }
191
191
  function TableComponent_div_7_div_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
192
192
  i0.ɵɵelementContainerStart(0);
193
- i0.ɵɵelementStart(1, "div", 44);
193
+ i0.ɵɵelementStart(1, "div", 43);
194
194
  i0.ɵɵtext(2, " Loading... ");
195
195
  i0.ɵɵelementEnd();
196
196
  i0.ɵɵelementContainerEnd();
@@ -200,7 +200,7 @@ function TableComponent_div_7_div_3_ng_container_1_Template(rf, ctx) { if (rf &
200
200
  } }
201
201
  function TableComponent_div_7_div_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
202
202
  i0.ɵɵelementContainerStart(0);
203
- i0.ɵɵelementStart(1, "div", 44);
203
+ i0.ɵɵelementStart(1, "div", 43);
204
204
  i0.ɵɵtext(2, " No Data Available... ");
205
205
  i0.ɵɵelementEnd();
206
206
  i0.ɵɵelementContainerEnd();
@@ -210,7 +210,7 @@ function TableComponent_div_7_div_3_ng_container_2_Template(rf, ctx) { if (rf &
210
210
  } }
211
211
  function TableComponent_div_7_div_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
212
212
  i0.ɵɵelementContainerStart(0);
213
- i0.ɵɵelement(1, "sub-table", 45);
213
+ i0.ɵɵelement(1, "sub-table", 44);
214
214
  i0.ɵɵelementContainerEnd();
215
215
  } if (rf & 2) {
216
216
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -218,8 +218,8 @@ function TableComponent_div_7_div_3_ng_container_3_Template(rf, ctx) { if (rf &
218
218
  i0.ɵɵproperty("config", ctx_r1.subTableconfig())("tableData", ctx_r1.subTableData());
219
219
  } }
220
220
  function TableComponent_div_7_div_3_Template(rf, ctx) { if (rf & 1) {
221
- i0.ɵɵelementStart(0, "div", 43);
222
- i0.ɵɵtemplate(1, TableComponent_div_7_div_3_ng_container_1_Template, 3, 2, "ng-container", 20)(2, TableComponent_div_7_div_3_ng_container_2_Template, 3, 2, "ng-container", 20)(3, TableComponent_div_7_div_3_ng_container_3_Template, 2, 2, "ng-container", 20);
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);
223
223
  i0.ɵɵelementEnd();
224
224
  } if (rf & 2) {
225
225
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -232,11 +232,11 @@ function TableComponent_div_7_div_3_Template(rf, ctx) { if (rf & 1) {
232
232
  } }
233
233
  function TableComponent_div_7_Template(rf, ctx) { if (rf & 1) {
234
234
  const _r8 = i0.ɵɵgetCurrentView();
235
- i0.ɵɵelementStart(0, "div", 31)(1, "div", 32);
235
+ i0.ɵɵelementStart(0, "div", 30)(1, "div", 31);
236
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)); });
237
- i0.ɵɵtemplate(2, TableComponent_div_7_div_2_Template, 5, 15, "div", 33);
237
+ i0.ɵɵtemplate(2, TableComponent_div_7_div_2_Template, 5, 15, "div", 32);
238
238
  i0.ɵɵelementEnd();
239
- i0.ɵɵtemplate(3, TableComponent_div_7_div_3_Template, 4, 3, "div", 34);
239
+ i0.ɵɵtemplate(3, TableComponent_div_7_div_3_Template, 4, 3, "div", 33);
240
240
  i0.ɵɵelementEnd();
241
241
  } if (rf & 2) {
242
242
  let tmp_7_0;
@@ -252,22 +252,32 @@ function TableComponent_div_7_Template(rf, ctx) { if (rf & 1) {
252
252
  i0.ɵɵadvance();
253
253
  i0.ɵɵproperty("ngIf", ((tmp_9_0 = ctx_r1.tableConfig()) == null ? null : tmp_9_0.canExpand) && ctx_r1.expandedIndex() === i_r9);
254
254
  } }
255
- function TableComponent_div_9_ng_container_7_div_1_span_1_Template(rf, ctx) { if (rf & 1) {
255
+ function TableComponent_Conditional_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
256
256
  const _r20 = i0.ɵɵgetCurrentView();
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();
257
267
  i0.ɵɵelementStart(0, "span", 56);
258
- i0.ɵɵlistener("click", function TableComponent_div_9_ng_container_7_div_1_span_1_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r20); const pageNumber_r21 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.updateSelectedPage(pageNumber_r21)); });
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)); });
259
269
  i0.ɵɵtext(1);
260
270
  i0.ɵɵelementEnd();
261
271
  } if (rf & 2) {
262
272
  let tmp_6_0;
263
- const pageNumber_r21 = i0.ɵɵnextContext().$implicit;
273
+ const pageNumber_r22 = i0.ɵɵnextContext().$implicit;
264
274
  const ctx_r1 = i0.ɵɵnextContext(3);
265
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c15, pageNumber_r21 == ((tmp_6_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_6_0.selectedPage)));
275
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c15, pageNumber_r22 == ((tmp_6_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_6_0.selectedPage)));
266
276
  i0.ɵɵadvance();
267
- i0.ɵɵtextInterpolate(pageNumber_r21);
277
+ i0.ɵɵtextInterpolate(pageNumber_r22);
268
278
  } }
269
- function TableComponent_div_9_ng_container_7_div_1_span_2_Template(rf, ctx) { if (rf & 1) {
270
- i0.ɵɵelementStart(0, "span", 57)(1, "div", 44);
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);
271
281
  i0.ɵɵelement(2, "span", 58)(3, "span", 58)(4, "span", 59);
272
282
  i0.ɵɵelementEnd()();
273
283
  } if (rf & 2) {
@@ -278,69 +288,62 @@ function TableComponent_div_9_ng_container_7_div_1_span_2_Template(rf, ctx) { if
278
288
  i0.ɵɵadvance();
279
289
  i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction0(5, _c17));
280
290
  } }
281
- function TableComponent_div_9_ng_container_7_div_1_Template(rf, ctx) { if (rf & 1) {
291
+ function TableComponent_Conditional_9_ng_container_8_div_1_Template(rf, ctx) { if (rf & 1) {
282
292
  i0.ɵɵelementStart(0, "div");
283
- i0.ɵɵtemplate(1, TableComponent_div_9_ng_container_7_div_1_span_1_Template, 2, 4, "span", 54)(2, TableComponent_div_9_ng_container_7_div_1_span_2_Template, 5, 6, "span", 55);
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);
284
294
  i0.ɵɵelementEnd();
285
295
  } if (rf & 2) {
286
- const pageNumber_r21 = ctx.$implicit;
296
+ const pageNumber_r22 = ctx.$implicit;
287
297
  i0.ɵɵadvance();
288
- i0.ɵɵproperty("ngIf", pageNumber_r21 != 0);
298
+ i0.ɵɵproperty("ngIf", pageNumber_r22 != 0);
289
299
  i0.ɵɵadvance();
290
- i0.ɵɵproperty("ngIf", pageNumber_r21 == 0);
300
+ i0.ɵɵproperty("ngIf", pageNumber_r22 == 0);
291
301
  } }
292
- function TableComponent_div_9_ng_container_7_Template(rf, ctx) { if (rf & 1) {
302
+ function TableComponent_Conditional_9_ng_container_8_Template(rf, ctx) { if (rf & 1) {
293
303
  i0.ɵɵelementContainerStart(0);
294
- i0.ɵɵtemplate(1, TableComponent_div_9_ng_container_7_div_1_Template, 3, 2, "div", 53);
304
+ i0.ɵɵtemplate(1, TableComponent_Conditional_9_ng_container_8_div_1_Template, 3, 2, "div", 53);
295
305
  i0.ɵɵelementContainerEnd();
296
306
  } if (rf & 2) {
297
307
  const ctx_r1 = i0.ɵɵnextContext(2);
298
308
  i0.ɵɵadvance();
299
309
  i0.ɵɵproperty("ngForOf", ctx_r1.pages());
300
310
  } }
301
- function TableComponent_div_9_Template(rf, ctx) { if (rf & 1) {
311
+ function TableComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
302
312
  const _r19 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "div", 46)(1, "p", 47);
313
+ i0.ɵɵelementStart(0, "div", 12)(1, "p", 45);
304
314
  i0.ɵɵtext(2);
305
315
  i0.ɵɵelementEnd();
306
- i0.ɵɵelementStart(3, "div", 48)(4, "span", 49);
307
- i0.ɵɵlistener("click", function TableComponent_div_9_Template_span_click_4_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)); });
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)); });
308
319
  i0.ɵɵnamespaceSVG();
309
- i0.ɵɵelementStart(5, "svg", 50);
310
- i0.ɵɵelement(6, "path", 51);
320
+ i0.ɵɵelementStart(6, "svg", 49);
321
+ i0.ɵɵelement(7, "path", 50);
311
322
  i0.ɵɵelementEnd()();
312
- i0.ɵɵtemplate(7, TableComponent_div_9_ng_container_7_Template, 2, 1, "ng-container", 20);
323
+ i0.ɵɵtemplate(8, TableComponent_Conditional_9_ng_container_8_Template, 2, 1, "ng-container", 19);
313
324
  i0.ɵɵnamespaceHTML();
314
- i0.ɵɵelementStart(8, "span", 49);
315
- i0.ɵɵlistener("click", function TableComponent_div_9_Template_span_click_8_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)); });
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)); });
316
327
  i0.ɵɵnamespaceSVG();
317
- i0.ɵɵelementStart(9, "svg", 50);
318
- i0.ɵɵelement(10, "path", 52);
328
+ i0.ɵɵelementStart(10, "svg", 49);
329
+ i0.ɵɵelement(11, "path", 51);
319
330
  i0.ɵɵelementEnd()()()();
320
331
  } if (rf & 2) {
321
332
  let tmp_2_0;
322
- let tmp_3_0;
323
333
  let tmp_4_0;
324
334
  let tmp_5_0;
335
+ let tmp_6_0;
325
336
  const ctx_r1 = i0.ɵɵnextContext();
326
337
  i0.ɵɵadvance(2);
327
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);
328
341
  i0.ɵɵadvance(2);
329
- i0.ɵɵclassProp("page-nav-inactive", ((tmp_3_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_3_0.selectedPage) === 1);
342
+ i0.ɵɵclassProp("page-nav-inactive", ((tmp_4_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_4_0.selectedPage) === 1);
330
343
  i0.ɵɵadvance(3);
331
- i0.ɵɵproperty("ngIf", !((tmp_4_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_4_0.disablePageJumping));
344
+ i0.ɵɵproperty("ngIf", !((tmp_5_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_5_0.disablePageJumping));
332
345
  i0.ɵɵadvance();
333
- i0.ɵɵclassProp("page-nav-inactive", ((tmp_5_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_5_0.selectedPage) === ((tmp_5_0 = ctx_r1.tableConfig().paginationConfig) == null ? null : tmp_5_0.noOfPages));
334
- } }
335
- function TableComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
336
- const _r22 = i0.ɵɵgetCurrentView();
337
- i0.ɵɵelementStart(0, "div", 13)(1, "mis-dropdown", 60);
338
- i0.ɵɵlistener("onChange", function TableComponent_Conditional_10_Template_mis_dropdown_onChange_1_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onPageSizeChange($event)); });
339
- i0.ɵɵelementEnd()();
340
- } if (rf & 2) {
341
- const ctx_r1 = i0.ɵɵnextContext();
342
- i0.ɵɵadvance();
343
- i0.ɵɵproperty("data", ctx_r1.pageSizeOptions())("selectedItem", ctx_r1.selectedPageSizeOption())("width", "90px")("height", "32px")("searchEnabled", false)("dropdownListHeight", "100px");
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));
344
347
  } }
345
348
  export class TableComponent {
346
349
  constructor(renderer) {
@@ -374,22 +377,7 @@ export class TableComponent {
374
377
  this.showPageSizeDropdown = computed(() => {
375
378
  return !!this.tableConfig()?.paginationConfig?.showPageSizeDropdown;
376
379
  });
377
- this.selectedPageSizeOption = computed(() => {
378
- const pageSizeOptions = this.pageSizeOptions();
379
- const rowsPerPage = this.tableConfig()?.paginationConfig?.rowsPerPage;
380
- if (!Array.isArray(pageSizeOptions) || !rowsPerPage) {
381
- return { label: "", value: "" };
382
- }
383
- const selected = pageSizeOptions.find(option => option.value === rowsPerPage.toString());
384
- if (selected) {
385
- return selected;
386
- }
387
- else {
388
- //emit the first page size, if the selected page size is not found
389
- this.onPageSizeChange(pageSizeOptions[0]);
390
- return pageSizeOptions[0];
391
- }
392
- });
380
+ this.selectedPageSizeOption = signal({ label: "", value: "" });
393
381
  // Convert inputs to signal-based inputs
394
382
  this.tableConfig = input();
395
383
  this.subTableconfig = input();
@@ -417,6 +405,40 @@ export class TableComponent {
417
405
  if (this.rowCollapseConfigIndex() !== -1) {
418
406
  this.buildExpandedMap();
419
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
+ }
420
442
  }, { allowSignalWrites: true });
421
443
  }
422
444
  // Function to handle row click
@@ -715,7 +737,7 @@ export class TableComponent {
715
737
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.filter = _t.first);
716
738
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.table = _t.first);
717
739
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.colHeaders = _t);
718
- } }, 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: 11, vars: 16, 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", 4, "ngIf"], [1, "page-size-selector"], [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-container"], ["id", "pagination-text"], ["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"], [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"], [1, "page-size-dropdown", 3, "onChange", "data", "selectedItem", "width", "height", "searchEnabled", "dropdownListHeight"]], template: function TableComponent_Template(rf, ctx) { if (rf & 1) {
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) {
719
741
  i0.ɵɵelementStart(0, "div", 4);
720
742
  i0.ɵɵtemplate(1, TableComponent_mis_table_filter_1_Template, 2, 2, "mis-table-filter", 5);
721
743
  i0.ɵɵelementStart(2, "div", 6, 0)(4, "div", 7);
@@ -725,16 +747,16 @@ export class TableComponent {
725
747
  i0.ɵɵtemplate(7, TableComponent_div_7_Template, 4, 11, "div", 10);
726
748
  i0.ɵɵelementEnd()();
727
749
  i0.ɵɵelementStart(8, "div", 11);
728
- i0.ɵɵtemplate(9, TableComponent_div_9_Template, 11, 8, "div", 12)(10, TableComponent_Conditional_10_Template, 2, 6, "div", 13);
750
+ i0.ɵɵtemplate(9, TableComponent_Conditional_9_Template, 12, 9, "div", 12);
729
751
  i0.ɵɵelementEnd()();
730
752
  } if (rf & 2) {
731
753
  let tmp_5_0;
732
754
  let tmp_7_0;
733
- i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction3(8, _c3, ctx.getContainerHeight(), ctx.getContainerWidth(), ctx.tableConfig().canScrollHorizontally ? "auto" : "unset"));
755
+ i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction3(7, _c3, ctx.getContainerHeight(), ctx.getContainerWidth(), ctx.tableConfig().canScrollHorizontally ? "auto" : "unset"));
734
756
  i0.ɵɵadvance();
735
757
  i0.ɵɵproperty("ngIf", ctx.showFilter());
736
758
  i0.ɵɵadvance();
737
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(12, _c4, ctx.expandedIndex() < 0, !(ctx.expandedIndex() < 0), ctx.tableConfig().canScrollHorizontally));
759
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(11, _c4, ctx.expandedIndex() < 0, !(ctx.expandedIndex() < 0), ctx.tableConfig().canScrollHorizontally));
738
760
  i0.ɵɵadvance(2);
739
761
  i0.ɵɵproperty("ngStyle", ctx.getColHeadersRowStyles());
740
762
  i0.ɵɵadvance();
@@ -742,14 +764,12 @@ export class TableComponent {
742
764
  i0.ɵɵadvance(2);
743
765
  i0.ɵɵproperty("ngForOf", ctx.tableData());
744
766
  i0.ɵɵadvance(2);
745
- i0.ɵɵproperty("ngIf", ((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));
746
- i0.ɵɵadvance();
747
- i0.ɵɵconditional(ctx.showPageSizeDropdown() ? 10 : -1);
748
- } }, 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 56px 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}}"] }); }
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}}"] }); }
749
769
  }
750
770
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
751
771
  type: Component,
752
- 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 <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 @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>\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 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}.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"] }]
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"] }]
753
773
  }], () => [{ type: i0.Renderer2 }], { filter: [{
754
774
  type: ViewChild,
755
775
  args: ["filter"]
@@ -761,4 +781,4 @@ export class TableComponent {
761
781
  args: ["table"]
762
782
  }] }); })();
763
783
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TableComponent, { className: "TableComponent" }); })();
764
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFNVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFHVCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDWHJDLCtDQU1DO0lBSkMseU5BQWtCLG1DQUE0QixLQUFDO0lBSWhELGlCQUFtQjs7O0lBRGxCLEFBREEsZ0VBQTJDLG9DQUNmOzs7SUEwQnhCLDZCQUFrRztJQUNoRyxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSx5RkFDRjs7O0lBTUUsMkJBQXFGOzs7O0lBTHZGLGdDQUlDO0lBSEMsa05BQVMsMkNBQWlDLEVBQUUsc0NBQTRCLHdCQUFFLHdCQUF3QixLQUFDO0lBSW5HLCtFQUE4RTs7SUFDOUUsK0JBQStGO0lBQzdGLDJCQUtFO0lBRU4sQUFERSxpQkFBTSxFQUNEOzs7OztJQVRFLGNBQWtEO0lBQWxELG1IQUFrRDs7OztJQVUzRCxnQ0FJQztJQUhDLGdLQUFTLHVCQUFnQix3QkFBRSx3QkFBd0IsS0FBQztJQUlwRCxtQ0FBNkQ7SUFDL0QsaUJBQU87OztJQURTLGNBQStCO0lBQS9CLG9EQUErQjs7OztJQUUvQyxnQ0FNb0I7SUFEbEIsZ01BQWMsMkJBQW9CLEtBQUM7SUFFckMsaUJBQU87Ozs7SUFITCxBQURBLEFBREEsQUFEQSxxQ0FBb0Isb0NBQ1EseUNBQ0sseURBQ2dCOzs7O0lBSXJELHdGQUFz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MUIsU0FBUzsyQkFDRSxXQUFXOzBDQXNCQSxNQUFNO2tCQUExQixTQUFTO21CQUFDLFFBQVE7WUFDVyxVQUFVO2tCQUF2QyxZQUFZO21CQUFDLGNBQWM7WUFnRFIsS0FBSztrQkFBeEIsU0FBUzttQkFBQyxPQUFPOztrRkFuRVAsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGaWx0ZXIsIFRhYmxlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZmlsdGVyL2ZpbHRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNvcnRTdGF0ZSB9IGZyb20gXCIuL3NvcnQtaWNvbnMuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZHJvcGRvd25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10YWJsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCJ0YWJsZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcInRhYmxlLmNvbXBvbmVudC5jc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8vIEluaXRpYWxpemUgd2l0aCAtMSB0byBpbmRpY2F0ZSBubyByb3cgaXMgY29sb3JlZCBhdCB0aGUgYmVnaW5uaW5nXG4gIGFjdGl2ZVJvd0luZGV4ID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIGhhc0NoZWNrYm94QWN0aW9ucyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHNlbGVjdEFsbENoZWNrYm94ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBGaWx0ZXIgcmVsYXRlZCB2YXJpYWJsZXNcbiAgc2hvd0ZpbHRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIGZpbHRlck5hbWUgPSBzaWduYWw8c3RyaW5nPihcIlwiKTtcbiAgZmlsdGVyRGF0YSA9IHNpZ25hbDxBcnJheTxGaWx0ZXI+PihbXSk7XG4gIGZpbHRlckNvbnRhaW5lclN0eWxlcyA9IHNpZ25hbDxhbnk+KHt9KTtcbiAgYXBwbGllZEZpbHRlcnMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9Pih7fSk7XG4gIFxuICAvLyBDb252ZXJ0IG91dHB1dHMgdG8gc2lnbmFsLWJhc2VkIG91dHB1dHNcbiAgZmlsdGVyc1VwZGF0ZWQgPSBvdXRwdXQ8e1xuICAgIFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xuICB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoXCJmaWx0ZXJcIikgZmlsdGVyOiBUYWJsZUZpbHRlckNvbXBvbmVudCB8IGFueTtcbiAgQFZpZXdDaGlsZHJlbihcImNvbEhlYWRlclJlZlwiKSBjb2xIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4gfCBhbnk7XG5cbiAgLy8gUGFnaW5hdGlvbiByZWxhdGVkIHZhcmlhYmxlc1xuICBwYWdlcyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG4gIHRhYmxlTGVuZ3RoID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHBhZ2VTZWxlY3RlZCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHBhZ2VTaXplQ2hhbmdlZCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHBhZ2VTaXplT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWc7XG4gICAgaWYgKCFjb25maWc/LnBhZ2VTaXplcyB8fCAhQXJyYXkuaXNBcnJheShjb25maWcucGFnZVNpemVzKSB8fCAhY29uZmlnLnBhZ2VTaXplcz8ubGVuZ3RoKSByZXR1cm4gW107XG4gIFxuICAgIHJldHVybiBjb25maWcucGFnZVNpemVzPy5tYXAob3B0aW9uID0+ICh7XG4gICAgICBsYWJlbDogb3B0aW9uPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgdmFsdWU6IG9wdGlvbj8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICB9KSkgfHwgW107XG4gIH0pO1xuXG4gIHNob3dQYWdlU2l6ZURyb3Bkb3duID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAhIXRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZz8uc2hvd1BhZ2VTaXplRHJvcGRvd247XG4gIH0pO1xuXG4gIHNlbGVjdGVkUGFnZVNpemVPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcGFnZVNpemVPcHRpb25zID0gdGhpcy5wYWdlU2l6ZU9wdGlvbnMoKTtcbiAgICBjb25zdCByb3dzUGVyUGFnZSA9IHRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZz8ucm93c1BlclBhZ2U7XG4gICAgXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhZ2VTaXplT3B0aW9ucykgfHwgIXJvd3NQZXJQYWdlKSB7XG4gICAgICByZXR1cm4geyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBwYWdlU2l6ZU9wdGlvbnMuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSByb3dzUGVyUGFnZS50b1N0cmluZygpKTtcbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9lbWl0IHRoZSBmaXJzdCBwYWdlIHNpemUsIGlmIHRoZSBzZWxlY3RlZCBwYWdlIHNpemUgaXMgbm90IGZvdW5kXG4gICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemVPcHRpb25zWzBdKTtcbiAgICAgIHJldHVybiBwYWdlU2l6ZU9wdGlvbnNbMF07XG4gICAgfVxuICB9KTtcblxuICAvLyBDb252ZXJ0IGlucHV0cyB0byBzaWduYWwtYmFzZWQgaW5wdXRzXG4gIHRhYmxlQ29uZmlnID0gaW5wdXQ8VGFibGVDb25maWc+KCk7XG4gIHN1YlRhYmxlY29uZmlnID0gaW5wdXQ8VGFibGVDb25maWc+KCk7XG4gIHRhYmxlRGF0YUxvYWRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICBleHBhbmRlZEluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICB0YWJsZURhdGEgPSBpbnB1dDxBcnJheTxBcnJheTxhbnk+Pj4oW10pO1xuICBzdWJUYWJsZURhdGEgPSBpbnB1dDxBcnJheTxBcnJheTxhbnk+Pj4oW10pO1xuICBzdWJUYWJsZURhdGFMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgY3VycmVudFNvcnQgPSBpbnB1dDx7Y29sdW1uOiBzdHJpbmcsIGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQycgfCAnJ30gfCBudWxsPigpO1xuICBAVmlld0NoaWxkKFwidGFibGVcIikgdGFibGU6IEVsZW1lbnRSZWYgfCBhbnk7XG4gIGNvbGxhcHNlQ29sSW5kZXggPSBzaWduYWw8bnVtYmVyPigtMSk7XG4gIHByZXZpZXdMaW5lcyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByb3dDb2xsYXBzZUNvbmZpZ0luZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICBleHBhbmRlZE1hcCA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pO1xuXG5cbiAgLy8gU29ydGluZyByZWxhdGVkIHByb3BlcnRpZXNcbiAgbXVsdGlDb2x1bW5Tb3J0ID0gc2lnbmFsPFNvcnRTdGF0ZVtdPihbXSk7XG4gIHNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydFN0YXRlPigpO1xuICBoZWFkZXJBY3Rpb24gPSBvdXRwdXQ8eyB0eXBlOiBzdHJpbmc7IHBheWxvYWQ/OiBhbnkgfT4oKTtcblxuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJsZUxlbmd0aC5zZXQodGhpcy50YWJsZURhdGEoKT8ubGVuZ3RoID8/IDApO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWN0aXZlUm93SW5kZXggIT09IG51bGwgJiYgY29uZmlnLmFjdGl2ZVJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVJvd0luZGV4ID0gY29uZmlnLmFjdGl2ZVJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoQXJyYXkuaXNBcnJheShhY3RpdmVSb3dJbmRleCkgPyBhY3RpdmVSb3dJbmRleCA6IFthY3RpdmVSb3dJbmRleF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpICE9PSAtMSkge1xuICAgICAgICAgICAgIHRoaXMuYnVpbGRFeHBhbmRlZE1hcCgpO1xuICAgICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTsgXG59XG5cblxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgcm93IGNsaWNrXG4gIHNlbGVjdFJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaGFzQ2hlY2tib3hBY3Rpb25zKCkpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChbaW5kZXhdKTsgLy8gU2V0IHRoZSBzZWxlY3RlZCBpbmRleCB0byB0aGUgY2xpY2tlZCByb3cncyBpbmRleFxuICAgICEhdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24gJiYgdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24oaW5kZXgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNDaGVja2JveEFjdGlvbnMuc2V0KHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWc/LnNvbWUoY29sID0+IGNvbC50eXBlID09PSBcImFjdGlvbnNcIiAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gXCJjaGVja2JveFwiKSk7XG4gICAgdGhpcy50YWJsZUxlbmd0aC5zZXQoISF0aGlzLnRhYmxlRGF0YSgpID8gdGhpcy50YWJsZURhdGEoKS5sZW5ndGggOiAwKTtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJzKCk7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcikge1xuICAgICAgICBsZXQgaXNDaGVja0JveENsaWNrZWQgPSB0cnVlO1xuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNsYXNzTmFtZSA9PT0gXCJjaGVja21hcmtcIikge1xuICAgICAgICAgIGlzQ2hlY2tCb3hDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0NsaWNrSW5zaWRlRWxlbWVudCA9IHRoaXMuZmlsdGVyLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNDbGlja0luc2lkZUVsZW1lbnQgJiYgIWlzQ2hlY2tCb3hDbGlja2VkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVGaWx0ZXIodGhpcy5maWx0ZXJOYW1lKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmZXRjaCBjb2xsYXBzZUNvbEluZGV4IGFuZCBwcmV2aWV3TGluZXMgaWYgcHJlc2VudFxuICAgIHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpPy5jb2xDb25maWc/LmZpbmRJbmRleChcbiAgICAgIGNvbCA9PiBjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJ1xuICAgICkpO1xuICAgIGlmICh0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VDb2xJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1t0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKV0uY29sbGFwc2VDb2x1bW5JbmRleCA/PyBudWxsKTtcbiAgICAgIHRoaXMucHJldmlld0xpbmVzLnNldCh0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW3RoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpXS5wcmV2aWV3TGluZXMgPz8gbnVsbCk7XG4gICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICB9XG4gIH1cblxuICBidWlsZEV4cGFuZGVkTWFwKCk6IHZvaWR7XG4gICAgY29uc3QgbmV3RXhwYW5kZWRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgY29uc3QgY29sbGFwc2VJbmRleCA9IHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpO1xuICAgIFxuICAgIHRoaXMudGFibGVEYXRhKCkuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICBuZXdFeHBhbmRlZE1hcFtgJHtyb3dJbmRleH1gXSA9IHJvd1tjb2xsYXBzZUluZGV4XTtcbiAgICB9KTtcbiAgICB0aGlzLmV4cGFuZGVkTWFwLnNldChuZXdFeHBhbmRlZE1hcCk7XG59XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICBpZiAoIWNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZykgcmV0dXJuO1xuICBcbiAgICBjb25zdCByYXdIZWlnaHQgPSBjb25maWcuaGVpZ2h0O1xuICBcbiAgICAvLyBIYW5kbGUgcGVyY2VudGFnZSB2YWx1ZXMgLSB1c2UgY2FsYygpIHRvIHN1YnRyYWN0IDU2cHhcbiAgICBpZiAodHlwZW9mIHJhd0hlaWdodCA9PT0gJ3N0cmluZycgJiYgcmF3SGVpZ2h0LmluY2x1ZGVzKCclJykpIHtcbiAgICAgIGNvbnN0IGNhbGNIZWlnaHQgPSBgY2FsYygke3Jhd0hlaWdodH0gLSA1NnB4KWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCwgXCJoZWlnaHRcIiwgY2FsY0hlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBwaXhlbCB2YWx1ZXMgLSBzdWJ0cmFjdCA1NnB4IChzYW1lIGFzIG9sZCBjb2RlKVxuICAgICAgY29uc3QgcmVzdWx0ID0gKHJhd0hlaWdodCBhcyBhbnkpIC0gNTY7XG4gICAgICBjb25zdCBmaW5hbEhlaWdodCA9IHJlc3VsdCArIFwicHhcIjtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LCBcImhlaWdodFwiLCBmaW5hbEhlaWdodCk7XG4gICAgfVxuICB9XG4gIFxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnRhYmxlTGVuZ3RoLnNldCh0aGlzLnRhYmxlRGF0YSgpPy5sZW5ndGggPz8gMCk7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleCAhPT0gbnVsbCAmJiB0aGlzLnRhYmxlQ29uZmlnKCkuYWN0aXZlUm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0aXZlUm93SW5kZXggPSB0aGlzLnRhYmxlQ29uZmlnKCkuYWN0aXZlUm93SW5kZXg7XG4gICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChBcnJheS5pc0FycmF5KGFjdGl2ZVJvd0luZGV4KSA/IGFjdGl2ZVJvd0luZGV4IDogW2FjdGl2ZVJvd0luZGV4XSlcbiAgICB9XG4gIH1cblxuICAvLyBGaWx0ZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgaW5pdGlhbGl6ZUZpbHRlcnMoKSB7XG4gICAgY29uc3QgbmV3QXBwbGllZEZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gfSA9IHt9O1xuICAgIGNvbnN0IGFsbEZpbHRlcnM6IEFycmF5PEZpbHRlcj4gPSBbXTtcbiAgICBcbiAgICBmb3IgKGxldCBjb2xIZWFkZXIgb2YgdGhpcy50YWJsZUNvbmZpZygpPy5jb2xIZWFkZXJDb25maWcpIHtcbiAgICAgIGlmIChjb2xIZWFkZXIuZmlsdGVycykge1xuICAgICAgICBsZXQgZmlsdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBmaWx0ZXIgb2YgY29sSGVhZGVyLmZpbHRlcnMpIHtcbiAgICAgICAgICBpZiAoZmlsdGVyLmNoZWNrZWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgIG5hbWU6IGZpbHRlci5uYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWRkIGFsbCBmaWx0ZXJzIHRvIHRoZSBmaWx0ZXJEYXRhIGFycmF5XG4gICAgICAgICAgYWxsRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID4gMCkgbmV3QXBwbGllZEZpbHRlcnNbY29sSGVhZGVyLmRhdGFdID0gZmlsdGVycztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycy5zZXQobmV3QXBwbGllZEZpbHRlcnMpO1xuICAgIHRoaXMuZmlsdGVyRGF0YS5zZXQoYWxsRmlsdGVycyk7XG4gfVxuICB0b2dnbGVGaWx0ZXIoZmlsdGVyTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNob3dGaWx0ZXIoKSkge1xuICAgICAgdGhpcy5maWx0ZXJOYW1lLnNldChmaWx0ZXJOYW1lKTtcbiAgICAgIHRoaXMuc2hvd0ZpbHRlci5zZXQodHJ1ZSk7XG5cbiAgICAgIGxldCBvZmZTZXQgPSAwO1xuICAgICAgbGV0IGNvbEhlYWRlcnNSZXZlcnNlZCA9IHRoaXMuY29sSGVhZGVycy50b0FycmF5KCkucmV2ZXJzZSgpO1xuXG4gICAgICBmb3IgKGxldCBoZWFkZXIgb2YgY29sSGVhZGVyc1JldmVyc2VkKSB7XG4gICAgICAgIGlmIChoZWFkZXIubmF0aXZlRWxlbWVudC5pbm5lclRleHQgPT09IGZpbHRlck5hbWUpIGJyZWFrO1xuICAgICAgICBvZmZTZXQgKz0gaGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNvbnRhaW5lclN0eWxlcy5zZXQoe1xuICAgICAgICB0b3A6IFwiNDRweFwiLFxuICAgICAgICByaWdodDogb2ZmU2V0ID4gMCA/IG9mZlNldCAtIDExNiArIFwicHhcIiA6IFwiMTJweFwiXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJOYW1lLnNldChcIlwiKTtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YS5zZXQoW10pO1xuICAgICAgdGhpcy5zaG93RmlsdGVyLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG4gIHVwZGF0ZUFwcGxpZWRGaWx0ZXJzKGFwcGxpZWRGaWx0ZXJzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9Pikge1xuICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJzID0gdGhpcy5hcHBsaWVkRmlsdGVycygpO1xuICAgIGlmIChhcHBsaWVkRmlsdGVycy5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIGN1cnJlbnRGaWx0ZXJzW3RoaXMuZmlsdGVyTmFtZSgpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudEZpbHRlcnNbdGhpcy5maWx0ZXJOYW1lKCldID0gYXBwbGllZEZpbHRlcnM7XG4gICAgfVxuICAgIHRoaXMuYXBwbGllZEZpbHRlcnMuc2V0KHsgLi4uY3VycmVudEZpbHRlcnMgfSk7XG4gICAgdGhpcy5maWx0ZXJzVXBkYXRlZC5lbWl0KHsgLi4udGhpcy5hcHBsaWVkRmlsdGVycygpIH0pO1xuICAgIHRoaXMudG9nZ2xlRmlsdGVyKHRoaXMuZmlsdGVyTmFtZSgpKTtcbiAgfVxuXG4gIC8vIFBhZ2luYXRpb24gcmVsYXRlZCBmdW5jdGlvbnNcbiAgaW5pdGlhbGl6ZVBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICBsZXQgbGVuID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzO1xuICAgICAgaWYgKGxlbiA8PSA3KSB7XG4gICAgICAgIGNvbnN0IG5ld1BhZ2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxlbjsgaSsrKSB7XG4gICAgICAgICAgbmV3UGFnZXMucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2VzLnNldChuZXdQYWdlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwZGF0ZVNlbGVjdGVkUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICAvLyBHdWFyZCBjbGF1c2UgdG8gcHJldmVudCBvdXQtb2YtcmFuZ2UgdXBkYXRlc1xuICAgIGlmIChwYWdlTnVtYmVyIDwgMSB8fCBwYWdlTnVtYmVyID4gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzKSByZXR1cm47XG5cbiAgICAvLyBSZXNldCBoZWFkZXIgY2hlY2tib3ggd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IHBhZ2VcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrYm94LnNldChmYWxzZSk7XG4gICAgLy8gTm90ZTogV2UgY2FuJ3QgZGlyZWN0bHkgbW9kaWZ5IGlucHV0IHNpZ25hbHMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudFxuICAgIGxldCBsZW4gPSB0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5ub09mUGFnZXM7XG4gICAgaWYgKGxlbiA+IDcpIHtcbiAgICAgIGlmIChwYWdlTnVtYmVyIC0gMiA8PSAxKSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAyLCAzLCA0LCAwLCBsZW5dKTtcbiAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciAtIDIgPiAxICYmIHBhZ2VOdW1iZXIgKyAyIDwgbGVuKSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAwLCBwYWdlTnVtYmVyIC0gMSwgcGFnZU51bWJlciwgcGFnZU51bWJlciArIDEsIDAsIGxlbl0pO1xuICAgICAgfSBlbHNlIGlmIChwYWdlTnVtYmVyICsgMiA+PSBsZW4pIHtcbiAgICAgICAgdGhpcy5wYWdlcy5zZXQoWzEsIDAsIGxlbiAtIDMsIGxlbiAtIDIsIGxlbiAtIDEsIGxlbl0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2VTZWxlY3RlZC5lbWl0KHBhZ2VOdW1iZXIpO1xuICB9XG5cbiAgLy8gTWFpbiBjb250YWluZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgZ2V0Q29udGFpbmVySGVpZ2h0KCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCk/LmhlaWdodCkgcmV0dXJuIHRoaXMudGFibGVDb25maWcoKS5oZWlnaHQ7XG4gICAgZWxzZSByZXR1cm4gXCJcIjtcbiAgfVxuICBnZXRDb250YWluZXJXaWR0aCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpPy53aWR0aCkgcmV0dXJuIHRoaXMudGFibGVDb25maWcoKS53aWR0aDtcbiAgICBlbHNlIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8gQ29sdW1uIEhlYWRlcnMgcmVsYXRlZCBmdW5jdGlvbnNcbiAgZ2V0Q29sSGVhZGVyc1Jvd1N0eWxlcygpIHtcbiAgICBjb25zdCB7IGNvbEhlYWRlcnNSb3dDb25maWcgfSA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICBjb25zdCBtaW5IZWlnaHQgPSBjb2xIZWFkZXJzUm93Q29uZmlnPy5oZWlnaHQgfHwgXCI0NHB4XCI7XG4gICAgY29uc3QgYm9yZGVyVG9wID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJvcmRlclRvcCB8fCBcIlwiO1xuICAgIGNvbnN0IGJvcmRlckJvdHRvbSA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5ib3JkZXJCb3R0b20gfHwgXCIxcHggc29saWQgI0UwRTBFMFwiO1xuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5iYWNrZ3JvdW5kQ29sb3IgfHwgXCIjRkZGRkZGXCI7XG4gICAgY29uc3QgZm9udFNpemUgPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uZm9udFNpemUgfHwgXCIxNHB4XCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibWluLWhlaWdodFwiOiBtaW5IZWlnaHQsXG4gICAgICBcImJvcmRlci10b3BcIjogYm9yZGVyVG9wLFxuICAgICAgXCJib3JkZXItYm90dG9tXCI6IGJvcmRlckJvdHRvbSxcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBcImZvbnQtc2l6ZVwiOiBmb250U2l6ZVxuICAgIH07XG4gIH1cblxuICBvblNvcnRDaGFuZ2Uoc29ydFN0YXRlOiBTb3J0U3RhdGUpIHtcbiAgICAvLyBFbWl0IHRoZSBzb3J0IGNoYW5nZSB0byB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHNvcnRTdGF0ZSk7XG4gICAgXG4gICAgLy8gSGFuZGxlIG11bHRpLWNvbHVtbiBzb3J0IGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLm11bHRpQ29sdW1uU29ydCkge1xuICAgICAgY29uc3QgY3VycmVudE11bHRpU29ydCA9IHRoaXMubXVsdGlDb2x1bW5Tb3J0KCk7XG4gICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRNdWx0aVNvcnQuZmluZEluZGV4KHNvcnQgPT4gc29ydC5jb2x1bW4gPT09IHNvcnRTdGF0ZS5jb2x1bW4pO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBpZiAoc29ydFN0YXRlLmRpcmVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IG5ld011bHRpU29ydCA9IFsuLi5jdXJyZW50TXVsdGlTb3J0XTtcbiAgICAgICAgICBuZXdNdWx0aVNvcnQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB0aGlzLm11bHRpQ29sdW1uU29ydC5zZXQobmV3TXVsdGlTb3J0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBuZXdNdWx0aVNvcnQgPSBbLi4uY3VycmVudE11bHRpU29ydF07XG4gICAgICAgICAgbmV3TXVsdGlTb3J0W2luZGV4XSA9IHNvcnRTdGF0ZTtcbiAgICAgICAgICB0aGlzLm11bHRpQ29sdW1uU29ydC5zZXQobmV3TXVsdGlTb3J0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0U3RhdGUuZGlyZWN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChbLi4uY3VycmVudE11bHRpU29ydCwgc29ydFN0YXRlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0aW9uc0NlbGxTdHlsZShzdHlsZTogYW55KTogYW55IHtcbiAgICBpZiAoIXN0eWxlKSByZXR1cm4ge307XG4gICAgY29uc3QgeyB3aWR0aCwgLi4ucmVzdFN0eWxlIH0gPSBzdHlsZTtcbiAgICByZXR1cm4gcmVzdFN0eWxlO1xuICB9XG5cbiAgb25BY3Rpb25DbGljayhldmVudDogYW55LCByb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRBY3RpdmVSb3dzID0gdGhpcy5hY3RpdmVSb3dJbmRleCgpO1xuICAgICAgaWYgKGV2ZW50LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KFsuLi5jdXJyZW50QWN0aXZlUm93cywgcm93SW5kZXhdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KGN1cnJlbnRBY3RpdmVSb3dzLmZpbHRlcihpbmRleCA9PiBpbmRleCAhPT0gcm93SW5kZXgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9uSW5mbyA9IHRoaXMuZmluZEFjdGlvbkNvbmZpZygnY2hlY2tib3gnKTtcbiAgICAgIGlmIChhY3Rpb25JbmZvICYmIHRoaXMudGFibGVEYXRhKClbcm93SW5kZXhdKSB7XG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIGNvbmZpZyB9ID0gYWN0aW9uSW5mbztcbiAgICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgZGlyZWN0bHkgbW9kaWZ5IGlucHV0IHNpZ25hbHMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudFxuICAgICAgICBjb25zdCBjaGVja2VkSXRlbXMgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbHRlcihyb3cgPT4gcm93W2luZGV4XSA9PT0gdHJ1ZSk7XG4gICAgICAgIGNvbmZpZy5hY3Rpb24/LihjaGVja2VkSXRlbXMpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmKGV2ZW50LmFjdGlvblR5cGUgPT09ICdyb3ctY29sbGFwc2UnKXtcbiAgICAgIGNvbnN0IHJvd0NvbGxhcHNlID0gdGhpcy5maW5kQWN0aW9uQ29uZmlnKCdyb3ctY29sbGFwc2UnKTtcbiAgICAgIGlmIChyb3dDb2xsYXBzZSAmJiB0aGlzLnRhYmxlRGF0YSgpW3Jvd0luZGV4XSkge1xuICAgICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgICAgIHJvd0NvbGxhcHNlLmNvbmZpZy5hY3Rpb24/Lih0aGlzLnRhYmxlRGF0YSgpKTtcbiAgICAgICAgdGhpcy5idWlsZEV4cGFuZGVkTWFwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZEFjdGlvbkNvbmZpZyhhY3Rpb25UeXBlOiBzdHJpbmcpOiB7IGluZGV4OiBudW1iZXIsIGNvbmZpZzogQ29sQ29uZmlnIH0gfCBudWxsIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWdbaV07XG4gICAgICBpZiAoY29sLnR5cGUgPT09ICdhY3Rpb25zJyAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xuICAgICAgICByZXR1cm4geyBpbmRleDogaSwgY29uZmlnOiBjb2wgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgXG5cbiAgaXNSb3dEaXNhYmxlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5kaXNhYmxlUm93ID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmRpc2FibGVSb3cocm93KSA6IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlQ2hlY2tib3goKSB7XG4gICAgdGhpcy5zZWxlY3RBbGxDaGVja2JveC5zZXQoIXRoaXMuc2VsZWN0QWxsQ2hlY2tib3goKSk7XG4gICAgY29uc3QgY2hlY2tib3hDb2xJbmRleCA9IHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWcuZmluZEluZGV4KGNvbCA9PiBjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSAnY2hlY2tib3gnKTtcbiAgICBpZiAoY2hlY2tib3hDb2xJbmRleCAhPT0gLTEpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWJsZURhdGEgPSB0aGlzLnRhYmxlRGF0YSgpLm1hcCgocm93OiBhbnlbXSkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkUm93ID0gWy4uLnJvd107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDaGVja2JveCA9IHVwZGF0ZWRSb3dbY2hlY2tib3hDb2xJbmRleF07XG4gICAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSB0aGlzLmlzUm93RGlzYWJsZWQocm93KTtcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgdXBkYXRlZFJvd1tjaGVja2JveENvbEluZGV4XSA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3goKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZFJvdztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5oZWFkZXJBY3Rpb24/LmVtaXQoe1xuICAgICAgICB0eXBlOiBcImNoZWNrYm94VG9nZ2xlXCIsXG4gICAgICAgIHBheWxvYWQ6IHVwZGF0ZWRUYWJsZURhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgb25QYWdlU2l6ZUNoYW5nZShzZWxlY3RlZE9wdGlvbjogRHJvcGRvd25JdGVtKSB7XG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdChwYXJzZUludChzZWxlY3RlZE9wdGlvbi52YWx1ZSkpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb25maWcge1xuICBoZWlnaHQ6IHN0cmluZyB8IFwiMTAwJVwiO1xuICB3aWR0aDogc3RyaW5nIHwgXCIxMDAlXCI7XG4gIHBhZ2luYXRpb25Db25maWc/OiBQYWdpbmF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgY29sSGVhZGVyc1Jvd0NvbmZpZzogUm93Q29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgcm93Q29uZmlnOiBSb3dDb25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICBjb2xIZWFkZXJDb25maWc6IEFycmF5PENvbEhlYWRlckNvbmZpZz47XG4gIGNvbENvbmZpZzogQXJyYXk8Q29sQ29uZmlnPjtcbiAgY2FuRXhwYW5kPzogYm9vbGVhbjtcbiAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgY2VsbEhvdmVyPzogYm9vbGVhbjtcbiAgYWN0aXZlUm93SW5kZXg/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgbXVsdGlDb2x1bW5Tb3J0PzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkNvbmZpZyB7XG4gIG5vT2ZQYWdlczogbnVtYmVyO1xuICByb3dzUGVyUGFnZTogbnVtYmVyO1xuICB0b3RhbE5vT2ZSb3dzOiBudW1iZXI7XG4gIHNlbGVjdGVkUGFnZT86IG51bWJlcjtcbiAgZGlzYWJsZVBhZ2VKdW1waW5nPzogYm9vbGVhbjtcbiAgc2hvd1BhZ2VTaXplRHJvcGRvd24/OiBib29sZWFuOyAvLyBXaGVuIHRydWUsIHJvd3NQZXJQYWdlIHZhbHVlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBwYWdlU2l6ZXMgYXJyYXlcbiAgcGFnZVNpemVzPzogbnVtYmVyW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFJvd0NvbmZpZyB7XG4gIGhlaWdodD86IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIHN0eWxlPzoge307XG4gIGFjdGlvbj86IGFueTtcbiAgZGlzYWJsZVJvdz86IChkYXRhOiBhbnkpID0+IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbEhlYWRlckNvbmZpZyB7XG4gIHR5cGU6IFwidGV4dFwiIHwgXCJudW1iZXJcIiB8IFwiY3VzdG9tXCIgfCBcImNoZWNrYm94XCI7XG4gIGRhdGE6IGFueTtcbiAgY29tcG9uZW50UmVmPzogYW55O1xuICBmaWx0ZXJzPzogQXJyYXk8RmlsdGVyPiB8IG51bGw7XG4gIHN0eWxlPzoge307XG4gIGFjdGlvbj86IGFueTtcbiAgaXNTb3J0YWJsZT86IGJvb2xlYW47XG4gIHNvcnRBc2NJY29uPzogc3RyaW5nO1xuICBzb3J0RGVzY0ljb24/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbENvbmZpZyB7XG4gIHR5cGU6IFwidGV4dFwiIHwgXCJudW1iZXJcIiB8IFwiY3VzdG9tXCIgfCBcImFjdGlvbnNcIiB8IFwiaHRtbFwiO1xuICBjb21wb25lbnRSZWY/OiBhbnk7XG4gIHN0eWxlPzoge307XG4gIGFjdGlvbj86IGFueTtcbiAgYWN0aW9uSXRlbXM/OiBBY3Rpb25JdGVtW107XG4gIGFjdGlvblR5cGU/OiBcImlubGluZVwiIHwgXCJkcm9wZG93blwiIHwgXCJjaGVja2JveFwiIHwgXCJyb3ctY29sbGFwc2VcIjsgLy8gaW5saW5lIGZvciBpbmRpdmlkdWFsIGljb25zLCBkcm9wZG93biBmb3IgbWVudVxuICBkaXNhYmxlPzogKHJvd0RhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgY29sbGFwc2VDb2x1bW5JbmRleD86IG51bWJlcjtcbiAgcHJldmlld0xpbmVzPzogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25JdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgZGlzYWJsZT86IChkYXRhOiBhbnkpID0+IGJvb2xlYW47XG4gIGFjdGlvbj86IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIGNoaWxkcmVuPzogQWN0aW9uSXRlbVtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbEFjdGlvbkl0ZW0gZXh0ZW5kcyBBY3Rpb25JdGVtIHtcbiAgc2hvd1N1Ym1lbnU/OiBib29sZWFuO1xufVxuIiwiPGRpdlxuICBbbmdTdHlsZV09XCJ7XG4gICAgaGVpZ2h0OiBnZXRDb250YWluZXJIZWlnaHQoKSxcbiAgICB3aWR0aDogZ2V0Q29udGFpbmVyV2lkdGgoKSxcbiAgICAnb3ZlcmZsb3cteCc6IHRhYmxlQ29uZmlnKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID8gJ2F1dG8nIDogJ3Vuc2V0J1xuICB9XCJcbiAgaWQ9XCJtYWluLWNvbnRhaW5lclwiXG4+XG4gIDxtaXMtdGFibGUtZmlsdGVyXG4gICAgI2ZpbHRlclxuICAgIChmaWx0ZXJzQXBwbGllZCk9XCJ1cGRhdGVBcHBsaWVkRmlsdGVycygkZXZlbnQpXCJcbiAgICAqbmdJZj1cInNob3dGaWx0ZXIoKVwiXG4gICAgW2NvbnRhaW5lclN0eWxlc109XCJmaWx0ZXJDb250YWluZXJTdHlsZXMoKVwiXG4gICAgW2ZpbHRlcnNEYXRhXT1cImZpbHRlckRhdGEoKVwiXG4gID48L21pcy10YWJsZS1maWx0ZXI+XG4gIDxkaXZcbiAgICAjdGFibGVcbiAgICBpZD1cInRhYmxlLWNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwieyAnbm8tc2Nyb2xsYmFyJzogZXhwYW5kZWRJbmRleCgpIDwgMCwgc2Nyb2xsYmFyOiAhKGV4cGFuZGVkSW5kZXgoKSA8IDApLCAnc2Nyb2xsLWhvcml6b250YWxseSc6IHRhYmxlQ29uZmlnKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5IH1cIlxuICA+XG4gICAgPGRpdlxuICAgIFtuZ1N0eWxlXT1cImdldENvbEhlYWRlcnNSb3dTdHlsZXMoKVwiXG4gICAgICBpZD1cImNvbC1oZWFkZXJzLWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICAjY29sSGVhZGVyUmVmXG4gICAgICAgIChjbGljayk9XCJjb2xIZWFkZXI/LmFjdGlvbiA/IGNvbEhlYWRlcj8uYWN0aW9uKGNvbEhlYWRlcikgOiBudWxsXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbEhlYWRlciBvZiB0YWJsZUNvbmZpZygpPy5jb2xIZWFkZXJDb25maWdcIlxuICAgICAgICBjbGFzcz1cImNvbC1oZWFkZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgd2lkdGg6IGNvbEhlYWRlcj8uc3R5bGU/LndpZHRoIHx8ICcnLFxuICAgICAgICAgIGN1cnNvcjogY29sSGVhZGVyLmFjdGlvbiA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAnanVzdGlmeS1jb250ZW50JzogY29sSGVhZGVyPy5zdHlsZT8uanVzdGlmeUNvbnRlbnRcbiAgICAgICAgICAgID8gY29sSGVhZGVyPy5zdHlsZT8uanVzdGlmeUNvbnRlbnRcbiAgICAgICAgICAgIDogY29sSGVhZGVyLnR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICA/ICdmbGV4LWVuZCdcbiAgICAgICAgICAgIDogJ3NwYWNlLWJldHdlZW4nXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8cCAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSAhPT0gJ2N1c3RvbScgJiYgY29sSGVhZGVyPy50eXBlICE9PSAnY2hlY2tib3gnXCIgY2xhc3M9XCJjb2wtaGVhZGVyLXRleHRcIj5cbiAgICAgICAgICB7eyBjb2xIZWFkZXI/LmRhdGEgfHwgXCIgXCIgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJEYXRhLnNldChjb2xIZWFkZXIuZmlsdGVycyk7IHRvZ2dsZUZpbHRlcihjb2xIZWFkZXIuZGF0YSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgKm5nSWY9XCJjb2xIZWFkZXI/LnR5cGUgIT09ICdjdXN0b20nICYmIGNvbEhlYWRlcj8uZmlsdGVycyAmJiBjb2xIZWFkZXI/LmZpbHRlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJhcHBsaWVkRmlsdGVycygpW2NvbEhlYWRlci5kYXRhXT8ubGVuZ3RoID4gMFwiIGlkPVwiZmlsdGVyLWFjdGl2ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3ZnIGZpbGw9XCJub25lXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDEzIDEwXCIgd2lkdGg9XCIxM1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTQuOTc1NDYgMTBINy42NDIxM1Y4SDQuOTc1NDZWMTBaTTAuMzA4NDcyIDBWMkgxMi4zMDg1VjBIMC4zMDg0NzJaTTIuMzA4NDcgNkgxMC4zMDg1VjRIMi4zMDg0N1Y2WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNoZWNrYm94KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgKm5nSWY9XCJjb2xIZWFkZXI/LnR5cGUgPT09ICdjaGVja2JveCdcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWlzLWNoZWNrYm94IFtjaGVja2VkXT1cInNlbGVjdEFsbENoZWNrYm94KClcIj48L21pcy1jaGVja2JveD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbEhlYWRlcj8uaXNTb3J0YWJsZSAmJiAhY29sSGVhZGVyPy5maWx0ZXJzXCIgYXBwU29ydEljb25zXG4gICAgICAgICAgW2NvbHVtbl09XCJjb2xIZWFkZXJcIlxuICAgICAgICAgIFthY3RpdmVTb3J0XT1cImN1cnJlbnRTb3J0KClcIlxuICAgICAgICAgIFthY3RpdmVTb3J0c109XCJtdWx0aUNvbHVtblNvcnQoKVwiXG4gICAgICAgICAgW211bHRpQ29sdW1uU29ydF09XCJ0YWJsZUNvbmZpZygpLm11bHRpQ29sdW1uU29ydFwiXG4gICAgICAgICAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwic29ydC1pY29uXCI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSA9PT0gJ2N1c3RvbSdcIiBjdXN0b21UYWJsZUNlbGwgW2N1c3RvbUNvbXBvbmVudF09XCJjb2xIZWFkZXI/LmNvbXBvbmVudFJlZlwiIFtkYXRhXT1cImNvbEhlYWRlci5kYXRhXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXYgaWQ9XCJkYXRhLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdy13cmFwcGVyXCIgKm5nRm9yPVwibGV0IHJvdyBvZiB0YWJsZURhdGEoKTsgbGV0IGkgPSBpbmRleDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidC1yb3dcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3Qtcm93LWhvdmVyJzogdGFibGVDb25maWcoKS5jZWxsSG92ZXIsICdhY3RpdmUtcm93JzogYWN0aXZlUm93SW5kZXgoKS5pbmNsdWRlcyhpKSB9XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdtaW4taGVpZ2h0JzogdGFibGVDb25maWcoKT8ucm93Q29uZmlnPy5oZWlnaHQgPyB0YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5oZWlnaHQgOiAnNDRweCcgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFJvdyhpKVwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkLXJvd109XCJpc1Jvd0Rpc2FibGVkKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwidGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uICYmIHRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvblR5cGUgIT09ICdjaGVja2JveCcgPyB0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb24oY29sKSA6IG51bGxcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiByb3c7IGxldCBjb2xJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgd2lkdGg6IHRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LnN0eWxlPy53aWR0aCB8fCB0YWJsZUNvbmZpZygpPy5jb2xIZWFkZXJDb25maWdbY29sSW5kZXhdPy5zdHlsZT8ud2lkdGggfHwgJydcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbC1jb250YWluZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndC1jb2wtY29udGFpbmVyLWhvdmVyJzogdGFibGVDb25maWcoKS5jZWxsSG92ZXIgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInQtY29sXCJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGVcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgICAgICAgPyB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgICAgICAgOiB0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICA/ICdmbGV4LWVuZCdcbiAgICAgICAgICAgICAgICAgIDogJ3NwYWNlLWJldHdlZW4nXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgIT09ICdjdXN0b20nICYmIHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSAhPT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgY29sb3I6IHRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LnN0eWxlPy5jb2xvciB8fCAnJyxcbiAgICAgICAgICAgICAgJy0tY29sbGFwc2VkLWxpbmVzJzogcHJldmlld0xpbmVzKCkgfHwgM1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdjb2xsYXBzZWQtY2VsbCc6IGNvbGxhcHNlQ29sSW5kZXgoKSA9PSBjb2xJbmRleCAmJiBleHBhbmRlZE1hcCgpW3Jvd0luZGV4XVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cInQtY29sLXRleHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gUmVuZGVyIGFzIEhUTUwgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlID09PSAnaHRtbCc7IGVsc2UgcGxhaW5UZXh0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY29sXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIFJlbmRlciBhcyBwbGFpbiB0ZXh0IC0tPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFpblRleHQ+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGNvbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjdXN0b21Db21wb25lbnRdPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdLmNvbXBvbmVudFJlZlwiXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICBjdXN0b21UYWJsZUNlbGxcbiAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG1pcy1hY3Rpb25zLWNlbGxcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlID09PSAnYWN0aW9ucydcIlxuICAgICAgICAgICAgICAgICAgW2NlbGxEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XVwiXG4gICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGljaygkZXZlbnQsIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWFjdGlvbnMnOiAodGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb25UeXBlID09PSAnY2hlY2tib3gnIHx8IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZScpICYmIGlzUm93RGlzYWJsZWQocm93KVxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPjwvbWlzLWFjdGlvbnMtY2VsbD5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGFibGVDb25maWcoKT8uY2FuRXhwYW5kICYmIGV4cGFuZGVkSW5kZXgoKSA9PT0gaVwiIGNsYXNzPVwic3ViLXJvd1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJUYWJsZURhdGFMb2FkaW5nKClcIj5cbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxNnB4J1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICBMb2FkaW5nLi4uXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1YlRhYmxlRGF0YUxvYWRpbmcoKSAmJiBzdWJUYWJsZURhdGEoKS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxNnB4J1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICBObyBEYXRhIEF2YWlsYWJsZS4uLlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWJUYWJsZURhdGFMb2FkaW5nKCkgJiYgc3ViVGFibGVEYXRhKCkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHN1Yi10YWJsZSBbY29uZmlnXT1cInN1YlRhYmxlY29uZmlnKClcIiBbdGFibGVEYXRhXT1cInN1YlRhYmxlRGF0YSgpXCI+PC9zdWItdGFibGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGlkPVwicGFnaW5hdGlvbi1jb250ZW50LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgXG4gICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWcgJiYgKHRhYmxlTGVuZ3RoKCkgPj0gdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlIHx8IHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlICE9PSAxKVwiXG4gICAgICBpZD1cInBhZ2luYXRpb24tY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8cCBpZD1cInBhZ2luYXRpb24tdGV4dFwiPlxuICAgICAgICBTaG93aW5nXG4gICAgICAgIHt7ICh0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgMSB9fS17e1xuICAgICAgICAgICh0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgdGFibGVMZW5ndGgoKVxuICAgICAgICB9fVxuICAgICAgICBvZiB7eyB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcudG90YWxOb09mUm93cyB9fSBpdGVtc1xuICAgICAgPC9wPlxuICAgICAgPGRpdiBpZD1cInBhZ2VzLWNvbnRhaW5lclwiPlxuICAgICAgICA8c3BhbiAgIChjbGljayk9XCJ0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSA+IDEgJiYgdXBkYXRlU2VsZWN0ZWRQYWdlKHRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZz8uc2VsZWN0ZWRQYWdlIC0gMSlcIiBjbGFzcz1cInBhZ2VcIiBbY2xhc3MucGFnZS1uYXYtaW5hY3RpdmVdPVwidGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgPT09IDFcIj5cbiAgICAgICAgICA8c3ZnIGZpbGw9XCJub25lXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDcgMTBcIiB3aWR0aD1cIjdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgZD1cIk0wLjg1NzQwNSA1LjU2Mjk1QzAuODU1Nzk0IDUuNTYxMzkgMC44NTQxODggNS41NTk4MiAwLjg1MjU4OCA1LjU1ODI0QzAuNjk1OTU1IDUuNDA0MDggMC42MTc2NDEgNS4yMDIwMyAwLjYxNzY0NyA0Ljk5OTk4QzAuNjE3NjQxIDQuNzk3OTMgMC42OTU5NTUgNC41OTU4OCAwLjg1MjU4OCA0LjQ0MTcyQzAuODU0MTg4IDQuNDQwMTQgMC44NTU3OTQgNC40Mzg1OCAwLjg1NzQwNCA0LjQzNzAyTDUuMTMwNjYgMC4yMzEyMzFDNS40NDM5MiAtMC4wNzcwNzcxIDUuOTUxOCAtMC4wNzcwNzcxIDYuMjY1MDYgMC4yMzEyMzFDNi41NzgzMSAwLjUzOTU0IDYuNTc4MzEgMS4wMzk0MSA2LjI2NTA2IDEuMzQ3NzJMMi41NTQyIDQuOTk5OThMNi4yNjUwNiA4LjY1MjI1QzYuNTc4MzEgOC45NjA1NSA2LjU3ODMxIDkuNDYwNDIgNi4yNjUwNiA5Ljc2ODczQzUuOTUxOCAxMC4wNzcgNS40NDM5MiAxMC4wNzcgNS4xMzA2NiA5Ljc2ODczTDAuODU3NDA1IDUuNTYyOTVaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8IS0tIFBhZ2UgbnVtYmVycyAob25seSBzaG93IGlmIGRpc2FibGVQYWdlSnVtcGluZyBpcyBmYWxzZSkgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LmRpc2FibGVQYWdlSnVtcGluZ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFnZU51bWJlciBvZiBwYWdlcygpXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGVkUGFnZShwYWdlTnVtYmVyKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlTnVtYmVyICE9IDBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3BhZ2UtYWN0aXZlJzogcGFnZU51bWJlciA9PSB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSB9XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2UgcGFnZS1qdW1waW5nLWVuYWJsZWRcIlxuICAgICAgICAgICAgICA+e3sgcGFnZU51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWdlTnVtYmVyID09IDBcIiBjbGFzcz1cInBhZ2Utc2VwZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IGRpc3BsYXk6ICdmbGV4JyB9XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgXG4gICAgICAgIDxzcGFuIFtjbGFzcy5wYWdlLW5hdi1pbmFjdGl2ZV09XCJ0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/LnNlbGVjdGVkUGFnZSA9PT0gdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXNcIlxuICAgICAgICAoY2xpY2spPVwidGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgPCB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/Lm5vT2ZQYWdlcyAmJiB1cGRhdGVTZWxlY3RlZFBhZ2UodGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5zZWxlY3RlZFBhZ2UgKyAxKVwiIGNsYXNzPVwicGFnZVwiPlxuICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTYuMTQyNiA1LjU2Mjk1QzYuMTQ0MjEgNS41NjEzOSA2LjE0NTgxIDUuNTU5ODIgNi4xNDc0MSA1LjU1ODI0QzYuMzA0MDUgNS40MDQwOCA2LjM4MjM2IDUuMjAyMDMgNi4zODIzNiA0Ljk5OTk4QzYuMzgyMzYgNC43OTc5MyA2LjMwNDA1IDQuNTk1ODggNi4xNDc0MSA0LjQ0MTcyQzYuMTQ1ODEgNC40NDAxNCA2LjE0NDIxIDQuNDM4NTggNi4xNDI2IDQuNDM3MDJMMS44NjkzNCAwLjIzMTIzMUMxLjU1NjA4IC0wLjA3NzA3NzEgMS4wNDgyIC0wLjA3NzA3NzEgMC43MzQ5NDIgMC4yMzEyMzFDMC40MjE2ODggMC41Mzk1NCAwLjQyMTY4OCAxLjAzOTQxIDAuNzM0OTQyIDEuMzQ3NzJMNC40NDU4IDQuOTk5OThMMC43MzQ5NDEgOC42NTIyNUMwLjQyMTY4NiA4Ljk2MDU1IDAuNDIxNjg2IDkuNDYwNDIgMC43MzQ5NDEgOS43Njg3M0MxLjA0ODIgMTAuMDc3IDEuNTU2MDggMTAuMDc3IDEuODY5MzQgOS43Njg3M0w2LjE0MjYgNS41NjI5NVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmKHNob3dQYWdlU2l6ZURyb3Bkb3duKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXNpemUtc2VsZWN0b3JcIj5cbiAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgIFtkYXRhXT1cInBhZ2VTaXplT3B0aW9ucygpXCJcbiAgICAgICAgICBbc2VsZWN0ZWRJdGVtXT1cInNlbGVjdGVkUGFnZVNpemVPcHRpb24oKVwiXG4gICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgW2hlaWdodF09XCInMzJweCdcIlxuICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJvcGRvd25MaXN0SGVpZ2h0XT1cIicxMDBweCdcIlxuICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwicGFnZS1zaXplLWRyb3Bkb3duXCJcbiAgICAgICAgPjwvbWlzLWRyb3Bkb3duPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
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