@coreui/angular-pro 4.7.3 → 5.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/avatar/avatar.component.mjs +8 -5
- package/esm2022/lib/badge/badge.component.mjs +8 -4
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +6 -6
- package/esm2022/lib/button/button-close.directive.mjs +9 -3
- package/esm2022/lib/calendar/calendar/calendar.component.mjs +148 -69
- package/esm2022/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +2 -1
- package/esm2022/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +2 -2
- package/esm2022/lib/calendar/calendar-month/calendar-class-row.pipe.mjs +26 -0
- package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +101 -58
- package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +253 -90
- package/esm2022/lib/calendar/calendar-month/calendar-row.directive.mjs +117 -0
- package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +26 -22
- package/esm2022/lib/calendar/calendar.module.mjs +7 -4
- package/esm2022/lib/calendar/calendar.service.mjs +5 -2
- package/esm2022/lib/calendar/calendar.utils.mjs +100 -17
- package/esm2022/lib/card/card.component.mjs +10 -6
- package/esm2022/lib/carousel/carousel/carousel.component.mjs +35 -34
- package/esm2022/lib/coreui.types.mjs +1 -1
- package/esm2022/lib/date-picker/date-picker.component.mjs +5 -9
- package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +166 -161
- package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +5 -18
- package/esm2022/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +10 -2
- package/esm2022/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +76 -40
- package/esm2022/lib/dropdown/dropdown.service.mjs +2 -2
- package/esm2022/lib/modal/modal/modal.component.mjs +1 -1
- package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +9 -6
- package/esm2022/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +3 -3
- package/esm2022/lib/nav/nav.component.mjs +3 -3
- package/esm2022/lib/navbar/navbar.component.mjs +7 -11
- package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +8 -4
- package/esm2022/lib/popover/popover.directive.mjs +2 -2
- package/esm2022/lib/shared/public_api.mjs +2 -1
- package/esm2022/lib/shared/shared.module.mjs +5 -12
- package/esm2022/lib/shared/theme.directive.mjs +44 -0
- package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +3 -2
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +19 -15
- package/esm2022/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +11 -2
- package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +88 -123
- package/esm2022/lib/smart-table/smart-table-head/smart-table-column-label.pipe.mjs +3 -11
- package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +46 -35
- package/esm2022/lib/smart-table/smart-table.type.mjs +1 -1
- package/esm2022/lib/smart-table/smart-table.utils.mjs +181 -0
- package/esm2022/lib/table/table.type.mjs +1 -1
- package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +3 -5
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +11 -5
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +17 -10
- package/esm2022/lib/time-picker/time-picker.component.mjs +87 -113
- package/esm2022/lib/tooltip/tooltip.directive.mjs +2 -2
- package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +2 -2
- package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +14 -16
- package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +2 -2
- package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +2 -2
- package/fesm2022/coreui-angular-pro.mjs +2185 -1472
- package/fesm2022/coreui-angular-pro.mjs.map +1 -1
- package/lib/avatar/avatar.component.d.ts +4 -3
- package/lib/badge/badge.component.d.ts +5 -3
- package/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.d.ts +1 -1
- package/lib/button/button-close.directive.d.ts +3 -1
- package/lib/calendar/calendar/calendar.component.d.ts +46 -19
- package/lib/calendar/calendar-month/calendar-class-row.pipe.d.ts +23 -0
- package/lib/calendar/calendar-month/calendar-day.directive.d.ts +16 -26
- package/lib/calendar/calendar-month/calendar-month.component.d.ts +45 -27
- package/lib/calendar/calendar-month/calendar-row.directive.d.ts +44 -0
- package/lib/calendar/calendar-navigation/calendar-navigation.component.d.ts +7 -6
- package/lib/calendar/calendar.module.d.ts +2 -1
- package/lib/calendar/calendar.service.d.ts +5 -1
- package/lib/calendar/calendar.utils.d.ts +25 -6
- package/lib/card/card.component.d.ts +3 -1
- package/lib/carousel/carousel/carousel.component.d.ts +10 -14
- package/lib/coreui.types.d.ts +4 -1
- package/lib/date-picker/date-picker.component.d.ts +2 -2
- package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +75 -41
- package/lib/dropdown/dropdown/dropdown.component.d.ts +2 -9
- package/lib/dropdown/dropdown-item/dropdown-item.directive.d.ts +5 -1
- package/lib/dropdown/dropdown-menu/dropdown-menu.directive.d.ts +13 -16
- package/lib/dropdown/dropdown.service.d.ts +0 -1
- package/lib/multi-select/multi-select/multi-select.component.d.ts +1 -2
- package/lib/nav/nav.component.d.ts +2 -2
- package/lib/navbar/navbar.component.d.ts +2 -5
- package/lib/offcanvas/offcanvas/offcanvas.component.d.ts +2 -1
- package/lib/shared/public_api.d.ts +1 -0
- package/lib/shared/shared.module.d.ts +2 -1
- package/lib/shared/theme.directive.d.ts +19 -0
- package/lib/sidebar/sidebar-nav/sidebar-nav.component.d.ts +5 -2
- package/lib/sidebar/sidebar-toggler/sidebar-toggler.component.d.ts +1 -0
- package/lib/smart-table/smart-table/smart-table.component.d.ts +36 -51
- package/lib/smart-table/smart-table-head/smart-table-column-label.pipe.d.ts +0 -1
- package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +21 -11
- package/lib/smart-table/smart-table.type.d.ts +49 -34
- package/lib/smart-table/smart-table.utils.d.ts +29 -0
- package/lib/table/table.type.d.ts +5 -6
- package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +2 -1
- package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +3 -2
- package/lib/time-picker/time-picker.component.d.ts +17 -28
- package/lib/widget/widget-stat-a/widget-stat-a.component.d.ts +1 -1
- package/lib/widget/widget-stat-b/widget-stat-b.component.d.ts +3 -3
- package/lib/widget/widget-stat-c/widget-stat-c.component.d.ts +15 -13
- package/lib/widget/widget-stat-e/widget-stat-e.component.d.ts +1 -1
- package/lib/widget/widget-stat-f/widget-stat-f.component.d.ts +1 -1
- package/package.json +3 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Component, ContentChildren, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';
|
|
3
|
-
import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
|
|
1
|
+
import { booleanAttribute, Component, computed, ContentChildren, EventEmitter, Input, numberAttribute, Output, signal } from '@angular/core';
|
|
2
|
+
import { AsyncPipe, JsonPipe, NgClass, NgForOf, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';
|
|
4
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { getClickedColumnName, getColumnGroups, getColumnKey, getColumnNames, getColumnNamesFromItems, getColumns, getTableDataCellClass, getTableDataCellProps, getTableDataCellStyles } from '../smart-table.utils';
|
|
5
5
|
import { ButtonDirective } from '../../button';
|
|
6
6
|
import { FormCheckInputDirective } from '../../form';
|
|
7
7
|
import { ElementCoverComponent } from '../../element-cover';
|
|
@@ -18,21 +18,29 @@ export class SmartTableComponent {
|
|
|
18
18
|
constructor(iterableDiffers, keyValueDiffers) {
|
|
19
19
|
this.iterableDiffers = iterableDiffers;
|
|
20
20
|
this.keyValueDiffers = keyValueDiffers;
|
|
21
|
+
this.getColumnKey = getColumnKey;
|
|
22
|
+
this.getTableDataCellClass = getTableDataCellClass;
|
|
23
|
+
this.getTableDataCellProps = getTableDataCellProps;
|
|
24
|
+
this.getTableDataCellStyles = getTableDataCellStyles;
|
|
21
25
|
this.selectedAllSubject = new BehaviorSubject(false);
|
|
22
26
|
this._activePage = 1;
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
27
|
+
this.cleaner = false;
|
|
28
|
+
this.clickableRows = false;
|
|
29
|
+
this.columns$ = signal([]);
|
|
30
|
+
this.columnGroups$ = signal([]);
|
|
31
|
+
this.showGroups$ = computed(() => !!this.columnGroups$().length);
|
|
25
32
|
this._columnFilterValue = {};
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
33
|
+
this.footer = false;
|
|
34
|
+
this.header = false;
|
|
35
|
+
this.items$ = signal([]);
|
|
28
36
|
this._items = [];
|
|
29
37
|
this._itemsPerPage = 10;
|
|
30
38
|
this.itemsPerPageLabel = 'Items per page:';
|
|
31
39
|
this.itemsPerPageOptions = [5, 10, 20, 50];
|
|
32
40
|
this.noItemsLabel = 'No items found';
|
|
33
|
-
this.
|
|
41
|
+
this.pagination = false;
|
|
34
42
|
this._selectable = false;
|
|
35
|
-
this.
|
|
43
|
+
this.selectAll = true;
|
|
36
44
|
this._sorterValue = {};
|
|
37
45
|
this.tableFilterLabel = 'Filter:';
|
|
38
46
|
this.tableFilterPlaceholder = 'type string...';
|
|
@@ -52,6 +60,10 @@ export class SmartTableComponent {
|
|
|
52
60
|
this.templates = { tableDetails: null, tableData: null };
|
|
53
61
|
this.columnFilterTemplates = {};
|
|
54
62
|
this.summaryRowTemplate = null;
|
|
63
|
+
this.rawColumnNames$ = computed(() => {
|
|
64
|
+
return getColumnNames(this.columns$(), this.items$());
|
|
65
|
+
});
|
|
66
|
+
this.itemsDataColumns$ = computed(() => this.rawColumnNames$().filter((name) => getColumnNamesFromItems(this.items$()).includes(name)));
|
|
55
67
|
this._columnFiltered = [];
|
|
56
68
|
this.itemsDiffer = this.iterableDiffers.find(this.items).create();
|
|
57
69
|
this.itemsFilteredDiffer = this.iterableDiffers.find(this._columnFiltered).create();
|
|
@@ -62,29 +74,24 @@ export class SmartTableComponent {
|
|
|
62
74
|
}, 0);
|
|
63
75
|
}
|
|
64
76
|
set activePage(value) {
|
|
65
|
-
this._activePage =
|
|
77
|
+
this._activePage = value || 1;
|
|
66
78
|
this.activePageChange.emit(this._activePage);
|
|
67
79
|
}
|
|
68
80
|
get activePage() {
|
|
69
81
|
return this._activePage;
|
|
70
82
|
}
|
|
71
|
-
set cleaner(value) {
|
|
72
|
-
this._cleaner = coerceBooleanProperty(value);
|
|
73
|
-
}
|
|
74
|
-
get cleaner() {
|
|
75
|
-
return this._cleaner;
|
|
76
|
-
}
|
|
77
|
-
set clickableRows(value) {
|
|
78
|
-
this._clickableRows = coerceBooleanProperty(value);
|
|
79
|
-
}
|
|
80
|
-
get clickableRows() {
|
|
81
|
-
return this._clickableRows;
|
|
82
|
-
}
|
|
83
83
|
set columns(value) {
|
|
84
|
-
|
|
84
|
+
const colObjects = value.map(column => typeof column === 'string' ? { key: column } : { ...column });
|
|
85
|
+
const columns = getColumns(colObjects);
|
|
86
|
+
this.columns$.set(columns);
|
|
87
|
+
// todo: Input columnGroups - separation?
|
|
88
|
+
// console.log(columns);
|
|
89
|
+
console.log(getColumnGroups(colObjects ?? []));
|
|
90
|
+
const groups = getColumnGroups(value ?? []);
|
|
91
|
+
this.columnGroups$.set(groups);
|
|
85
92
|
}
|
|
86
93
|
get columns() {
|
|
87
|
-
return this.
|
|
94
|
+
return this.columns$();
|
|
88
95
|
}
|
|
89
96
|
set columnFilterValue(value) {
|
|
90
97
|
if (this.columFilterValueDiffer) {
|
|
@@ -99,23 +106,15 @@ export class SmartTableComponent {
|
|
|
99
106
|
get columnFilterValue() {
|
|
100
107
|
return this._columnFilterValue;
|
|
101
108
|
}
|
|
102
|
-
set footer(value) {
|
|
103
|
-
this._footer = coerceBooleanProperty(value);
|
|
104
|
-
}
|
|
105
|
-
get footer() {
|
|
106
|
-
return this._footer;
|
|
107
|
-
}
|
|
108
|
-
set header(value) {
|
|
109
|
-
this._header = coerceBooleanProperty(value);
|
|
110
|
-
}
|
|
111
|
-
get header() {
|
|
112
|
-
return this._header;
|
|
113
|
-
}
|
|
114
109
|
set items(value) {
|
|
115
110
|
if (this.itemsDiffer) {
|
|
116
111
|
const changes = this.itemsDiffer.diff(value);
|
|
117
112
|
if (changes) {
|
|
118
113
|
this._items = this.setItems(value);
|
|
114
|
+
this.items$.set(this._items);
|
|
115
|
+
if (!this.columns.length) {
|
|
116
|
+
this.columns = getColumnNamesFromItems(this.items$());
|
|
117
|
+
}
|
|
119
118
|
}
|
|
120
119
|
}
|
|
121
120
|
}
|
|
@@ -123,29 +122,17 @@ export class SmartTableComponent {
|
|
|
123
122
|
return this._items;
|
|
124
123
|
}
|
|
125
124
|
set itemsPerPage(value) {
|
|
126
|
-
this._itemsPerPage =
|
|
125
|
+
this._itemsPerPage = value;
|
|
127
126
|
}
|
|
128
127
|
get itemsPerPage() {
|
|
129
128
|
return this._itemsPerPage;
|
|
130
129
|
}
|
|
131
|
-
set pagination(value) {
|
|
132
|
-
this._pagination = coerceBooleanProperty(value);
|
|
133
|
-
}
|
|
134
|
-
get pagination() {
|
|
135
|
-
return this._pagination;
|
|
136
|
-
}
|
|
137
130
|
set selectable(value) {
|
|
138
|
-
this._selectable =
|
|
131
|
+
this._selectable = value;
|
|
139
132
|
}
|
|
140
133
|
get selectable() {
|
|
141
134
|
return this._selectable;
|
|
142
135
|
}
|
|
143
|
-
set selectAll(value) {
|
|
144
|
-
this._selectAll = coerceBooleanProperty(value);
|
|
145
|
-
}
|
|
146
|
-
get selectAll() {
|
|
147
|
-
return this._selectAll;
|
|
148
|
-
}
|
|
149
136
|
set sorterValue(value) {
|
|
150
137
|
if (this.sorterValueDiffer) {
|
|
151
138
|
const changes = this.sorterValueDiffer.diff(value);
|
|
@@ -208,7 +195,7 @@ export class SmartTableComponent {
|
|
|
208
195
|
return this._itemsPerPage ? Math.ceil(this.sortedItems.length / this._itemsPerPage) : 1;
|
|
209
196
|
}
|
|
210
197
|
get colspan() {
|
|
211
|
-
return this._selectable ? this.rawColumnNames.length + 1 : this.rawColumnNames.length;
|
|
198
|
+
return this._selectable ? this.rawColumnNames$().length + 1 : this.rawColumnNames$().length;
|
|
212
199
|
}
|
|
213
200
|
get firstItemOnActivePageIndex() {
|
|
214
201
|
return this._activePage ? (this._activePage - 1) * this._itemsPerPage : 0;
|
|
@@ -218,22 +205,11 @@ export class SmartTableComponent {
|
|
|
218
205
|
}
|
|
219
206
|
get currentItems() {
|
|
220
207
|
return this._activePage ? this.itemsOnActivePage : this.sortedItems ?? [];
|
|
221
|
-
// return this.items ?? [];
|
|
222
|
-
}
|
|
223
|
-
get genCols() {
|
|
224
|
-
return Object.keys(this._items.length ? this._items[0] ?? {} : {}).filter((el) => el.charAt(0) !== '_');
|
|
225
|
-
}
|
|
226
|
-
get rawColumnNames() {
|
|
227
|
-
return this._columns ? this._columns.map(column => typeof column === 'object' ? column.key : column)
|
|
228
|
-
: this.genCols;
|
|
229
|
-
}
|
|
230
|
-
get itemsDataColumns() {
|
|
231
|
-
return this.rawColumnNames.filter((name) => this.genCols.includes(name));
|
|
232
208
|
}
|
|
233
209
|
get sortedItems() {
|
|
234
210
|
const columnKey = this.sorterValue.column;
|
|
235
211
|
if (!columnKey ||
|
|
236
|
-
!this.itemsDataColumns.includes(columnKey) ||
|
|
212
|
+
!this.itemsDataColumns$().includes(columnKey) ||
|
|
237
213
|
(this.columnSorter &&
|
|
238
214
|
typeof this.columnSorter === 'object' &&
|
|
239
215
|
this.columnSorter.external)) {
|
|
@@ -245,8 +221,8 @@ export class SmartTableComponent {
|
|
|
245
221
|
if (flip === 0) {
|
|
246
222
|
return tableFiltered;
|
|
247
223
|
}
|
|
248
|
-
const currentColumn = this.columns.find((column) =>
|
|
249
|
-
if (typeof currentColumn
|
|
224
|
+
const currentColumn = this.columns.find((column) => column.key === columnKey);
|
|
225
|
+
if (typeof currentColumn?.sorter === 'function') {
|
|
250
226
|
const sorted = tableFiltered.slice().sort(currentColumn.sorter);
|
|
251
227
|
return flip < 0 ? sorted.reverse() : sorted;
|
|
252
228
|
}
|
|
@@ -276,13 +252,13 @@ export class SmartTableComponent {
|
|
|
276
252
|
_items = _items.filter((item) => value(item[key]));
|
|
277
253
|
return;
|
|
278
254
|
}
|
|
279
|
-
const currentColumn = this.columns.find(column =>
|
|
280
|
-
if (typeof currentColumn
|
|
255
|
+
const currentColumn = this.columns.find(column => column.key === key);
|
|
256
|
+
if (typeof currentColumn?.filter === 'function') {
|
|
281
257
|
_items = _items.filter((item) => (typeof currentColumn.filter === 'function' && currentColumn.filter(item, value)) ?? !value);
|
|
282
258
|
return;
|
|
283
259
|
}
|
|
284
260
|
const columnFilter = String(value).toLowerCase();
|
|
285
|
-
if (columnFilter && this.itemsDataColumns.includes(key)) {
|
|
261
|
+
if (columnFilter && this.itemsDataColumns$().includes(key)) {
|
|
286
262
|
_items = _items.filter((item) => String(item[key]).toLowerCase().includes(columnFilter));
|
|
287
263
|
}
|
|
288
264
|
});
|
|
@@ -305,7 +281,7 @@ export class SmartTableComponent {
|
|
|
305
281
|
const valueContainFilter = (val) => String(val).toLowerCase().includes(filter);
|
|
306
282
|
// @ts-ignore
|
|
307
283
|
items = items.filter((item) => {
|
|
308
|
-
return !!this.itemsDataColumns.find((key) => valueContainFilter(item[key]));
|
|
284
|
+
return !!this.itemsDataColumns$().find((key) => valueContainFilter(item[key]));
|
|
309
285
|
});
|
|
310
286
|
if (this.itemsFilteredDiffer) {
|
|
311
287
|
const changes = this.itemsFilteredDiffer.diff(items);
|
|
@@ -321,52 +297,46 @@ export class SmartTableComponent {
|
|
|
321
297
|
setItems(items) {
|
|
322
298
|
if (Array.isArray(items)) {
|
|
323
299
|
return items.map((item, index) => {
|
|
324
|
-
return { ...item,
|
|
300
|
+
return { ...item, ___id: item['___id'] ?? index };
|
|
325
301
|
});
|
|
326
302
|
}
|
|
327
303
|
return [];
|
|
328
304
|
}
|
|
329
305
|
handleSortChange($event) {
|
|
330
|
-
this.handleSorterChange($event.columnKey, $event.index);
|
|
306
|
+
this.handleSorterChange($event.columnKey, $event.index, $event.order);
|
|
331
307
|
}
|
|
332
308
|
isSortable(i) {
|
|
333
|
-
const isDataColumn = this.itemsDataColumns.includes(this.rawColumnNames[i]);
|
|
309
|
+
const isDataColumn = this.itemsDataColumns$().includes(this.rawColumnNames$()[i]);
|
|
334
310
|
let column;
|
|
335
|
-
if (this.columns) {
|
|
311
|
+
if (this.columns.length) {
|
|
336
312
|
column = this.columns[i];
|
|
337
313
|
}
|
|
338
314
|
return (this.columnSorter &&
|
|
339
|
-
(!this.columns ||
|
|
315
|
+
(!this.columns.length ||
|
|
340
316
|
typeof column !== 'object' ||
|
|
341
317
|
(typeof column === 'object' && (typeof column.sorter === 'undefined' || column.sorter))) && isDataColumn);
|
|
342
318
|
}
|
|
343
|
-
handleSorterChange(column, index) {
|
|
319
|
+
handleSorterChange(column, index, order) {
|
|
344
320
|
if (!this.isSortable(index)) {
|
|
345
321
|
return;
|
|
346
322
|
}
|
|
347
323
|
//if column changed or sort was descending change asc to true
|
|
348
|
-
const
|
|
349
|
-
if (
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
state.state = 'desc';
|
|
324
|
+
const sorterState = { ...this.sorterValue };
|
|
325
|
+
if (sorterState.column === column) {
|
|
326
|
+
const resettable = (typeof this.columnSorter === 'object' && this.columnSorter.resetable);
|
|
327
|
+
const state = sorterState.state;
|
|
328
|
+
if (order === undefined) {
|
|
329
|
+
sorterState.state = state === 0 ? 'asc' : state === 'asc' ? 'desc' : resettable ? 0 : 'asc';
|
|
355
330
|
}
|
|
356
331
|
else {
|
|
357
|
-
|
|
358
|
-
state.state = 'asc';
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
state.state = 0;
|
|
362
|
-
}
|
|
332
|
+
sorterState.state = (order === 0 && !resettable) ? state : order;
|
|
363
333
|
}
|
|
364
334
|
}
|
|
365
335
|
else {
|
|
366
|
-
|
|
367
|
-
|
|
336
|
+
sorterState.column = column;
|
|
337
|
+
sorterState.state = 'asc';
|
|
368
338
|
}
|
|
369
|
-
this.sorterValue = { ...
|
|
339
|
+
this.sorterValue = { ...sorterState };
|
|
370
340
|
}
|
|
371
341
|
setActivePage($event) {
|
|
372
342
|
this.activePage = $event;
|
|
@@ -415,27 +385,12 @@ export class SmartTableComponent {
|
|
|
415
385
|
this.selectedAllSubject.next(this.selectedAll);
|
|
416
386
|
}, 0);
|
|
417
387
|
}
|
|
418
|
-
tableDataCellProps(item, colName) {
|
|
419
|
-
const props = item['_cellProps'] && {
|
|
420
|
-
...(item['_cellProps']['_all'] && { ...item['_cellProps']['_all'] }),
|
|
421
|
-
...(item['_cellProps'][colName] && { ...item['_cellProps'][colName] })
|
|
422
|
-
};
|
|
423
|
-
return props;
|
|
424
|
-
}
|
|
425
|
-
tableDataCellClasses(item, colName) {
|
|
426
|
-
const column = this.columns.filter((column) => typeof column === 'string' ? column === colName : column['key'] === colName);
|
|
427
|
-
return column[0] && typeof column[0] === 'object' ? column[0]._classes : undefined;
|
|
428
|
-
}
|
|
429
|
-
getColumnName($event) {
|
|
430
|
-
const target = $event.target;
|
|
431
|
-
const closest = target.closest('tr');
|
|
432
|
-
const children = closest ? Array.from(closest.children) : [];
|
|
433
|
-
const clickedCell = children.filter((child) => child.contains(target))[0];
|
|
434
|
-
return this.rawColumnNames[children.indexOf(clickedCell) - (this._selectable ? 1 : 0)];
|
|
435
|
-
}
|
|
436
388
|
handleRowClick(param) {
|
|
437
389
|
const { $event, item, i } = { ...param };
|
|
438
|
-
const
|
|
390
|
+
const target = $event.target;
|
|
391
|
+
const columnNames = this.rawColumnNames$();
|
|
392
|
+
const selectable = this._selectable;
|
|
393
|
+
const columnName = getClickedColumnName(target, columnNames, selectable);
|
|
439
394
|
this.rowClick.emit({ item: item, index: i + this.firstItemOnActivePageIndex, columnName, event: $event });
|
|
440
395
|
}
|
|
441
396
|
ngOnChanges(changes) {
|
|
@@ -455,7 +410,7 @@ export class SmartTableComponent {
|
|
|
455
410
|
}
|
|
456
411
|
}
|
|
457
412
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SmartTableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
458
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: SmartTableComponent, isStandalone: true, selector: "c-smart-table", inputs: { activePage: "activePage", cleaner: "cleaner", clickableRows: "clickableRows", columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: "footer", header: "header", items: "items", itemsPerPage: "itemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: "pagination", selectable: "selectable", selectAll: "selectAll", sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner || templates['tableCustomHeader']\" class=\"row my-2 mx-0\">\n <div class=\"col-auto p-0\" *ngIf=\"tableFilter\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\" />\n </div>\n <div class=\"col-auto p-0\" *ngIf=\"cleaner\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"templates['tableCustomHeader'] || tableCustomHeaderTemplate\" />\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\" />\n </button>\n </ng-template>\n\n <ng-template #tableCustomHeaderTemplate>\n <div class=\"col-auto p-0 ms-auto\">\n <ng-content select=\"[customHeader]\" />\n </div>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered ?? undefined\"\n [borderless]=\"tableProps?.borderless ?? undefined\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover ?? undefined\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small ?? undefined\"\n [striped]=\"tableProps?.striped ?? undefined\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectAll\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n />\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\" />\n\n <tfoot *ngIf=\"summaryRowTemplate && !footer\">\n <ng-container *ngTemplateOutlet=\"summaryRowTemplate\" />\n </tfoot>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectAll\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [summaryRowTemplate]=\"summaryRowTemplate\"\n />\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\"\n />\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n />\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active ?? undefined\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active ?? undefined\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\"\n [checked]=\"item._selected ?? false\"\n cFormCheckInput\n [disabled]=\"(item?._selectable === false) ?? false\"\n autocomplete=\"off\"\n >\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\" />\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\" />\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\" />\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n [cHtmlAttr]=\"tableDataCellProps(item, columnName)?.['_attributes'] ?? undefined\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }, { kind: "directive", type: FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid", "checked"] }, { kind: "directive", type: HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "component", type: SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "component", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "selectable", "selectAll", "selectedAll", "sorterValue", "columnFilterTemplates", "summaryRowTemplate"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "component", type: SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "directive", type: TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "directive", type: TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }] }); }
|
|
413
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.6", type: SmartTableComponent, isStandalone: true, selector: "c-smart-table", inputs: { activePage: ["activePage", "activePage", numberAttribute], cleaner: ["cleaner", "cleaner", booleanAttribute], clickableRows: ["clickableRows", "clickableRows", booleanAttribute], columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: ["footer", "footer", booleanAttribute], header: ["header", "header", booleanAttribute], items: "items", itemsPerPage: ["itemsPerPage", "itemsPerPage", numberAttribute], itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: ["pagination", "pagination", booleanAttribute], selectable: ["selectable", "selectable", booleanAttribute], selectAll: ["selectAll", "selectAll", booleanAttribute], sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner || templates['tableCustomHeader']\" class=\"row my-2 mx-0\">\n <div class=\"col-auto p-0\" *ngIf=\"tableFilter\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\" />\n </div>\n <div class=\"col-auto p-0\" *ngIf=\"cleaner\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"templates['tableCustomHeader'] || tableCustomHeaderTemplate\" />\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n cButton\n color=\"transparent\"\n tabindex=\"0\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\" />\n </button>\n </ng-template>\n\n <ng-template #tableCustomHeaderTemplate>\n <div class=\"col-auto p-0 ms-auto\">\n <ng-content select=\"[customHeader]\" />\n </div>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered ?? undefined\"\n [borderless]=\"tableProps?.borderless ?? undefined\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover ?? undefined\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small ?? undefined\"\n [striped]=\"tableProps?.striped ?? undefined\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [cAlign]=\"tableHeadProps?.align\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnFilter]=\"columnFilter\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [columnGroups]=\"columnGroups$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [showGroups]=\"showGroups$()\"\n [sorterValue]=\"sorterValue\"\n />\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\" />\n\n <tfoot *ngIf=\"summaryRowTemplate && !footer\">\n <ng-container *ngTemplateOutlet=\"summaryRowTemplate\" />\n </tfoot>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [cAlign]=\"tableFootProps?.align\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [sorterValue]=\"sorterValue\"\n [summaryRowTemplate]=\"summaryRowTemplate\"\n component=\"tfoot\"\n />\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n />\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\"\n />\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n />\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active ?? undefined\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active ?? undefined\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\"\n [checked]=\"item._selected ?? false\"\n cFormCheckInput\n [disabled]=\"(item?._selectable === false) ?? false\"\n autocomplete=\"off\"\n >\n </td>\n <ng-template ngFor let-column [ngForOf]=\"columns$()\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {column, item, columnName: getColumnKey(column), tdContent: item[column.key], cellProps: getTableDataCellProps(column, item) }\" />\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\" />\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\" />\n </tbody>\n</ng-template>\n\n<ng-template\n #columnDefaultTemplate\n let-cellProps=\"cellProps\"\n let-column=\"column\"\n let-columnName=\"columnName\"\n let-item=\"item\"\n let-tdContent=\"tdContent\"\n>\n <td\n *ngIf=\"tdContent !== undefined\"\n [cTableActive]=\"cellProps?.['active']\"\n [cTableColor]=\"cellProps?.color ?? column[columnName]?._colProps?.color ?? undefined\"\n [cAlign]=\"cellProps?.align\"\n [ngClass]=\"getTableDataCellClass(column, item)\"\n [cHtmlAttr]=\"cellProps?.['_attributes'] ?? undefined\"\n [ngStyle]=\"getTableDataCellStyles(column, item)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }, { kind: "directive", type: FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid", "checked"] }, { kind: "directive", type: HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "component", type: SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "component", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "columnGroups", "selectable", "selectAll", "selectedAll", "showGroups", "sorterValue", "columnFilterTemplates", "summaryRowTemplate"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "component", type: SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "directive", type: TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "directive", type: TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }] }); }
|
|
459
414
|
}
|
|
460
415
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SmartTableComponent, decorators: [{
|
|
461
416
|
type: Component,
|
|
@@ -478,14 +433,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
478
433
|
SmartTableItemsPerPageSelectorComponent,
|
|
479
434
|
TableActiveDirective,
|
|
480
435
|
TableColorDirective,
|
|
481
|
-
TableDirective
|
|
482
|
-
|
|
436
|
+
TableDirective,
|
|
437
|
+
JsonPipe
|
|
438
|
+
], template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner || templates['tableCustomHeader']\" class=\"row my-2 mx-0\">\n <div class=\"col-auto p-0\" *ngIf=\"tableFilter\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\" />\n </div>\n <div class=\"col-auto p-0\" *ngIf=\"cleaner\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"templates['tableCustomHeader'] || tableCustomHeaderTemplate\" />\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n cButton\n color=\"transparent\"\n tabindex=\"0\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\" />\n </button>\n </ng-template>\n\n <ng-template #tableCustomHeaderTemplate>\n <div class=\"col-auto p-0 ms-auto\">\n <ng-content select=\"[customHeader]\" />\n </div>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered ?? undefined\"\n [borderless]=\"tableProps?.borderless ?? undefined\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover ?? undefined\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small ?? undefined\"\n [striped]=\"tableProps?.striped ?? undefined\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [cAlign]=\"tableHeadProps?.align\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnFilter]=\"columnFilter\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [columnGroups]=\"columnGroups$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [showGroups]=\"showGroups$()\"\n [sorterValue]=\"sorterValue\"\n />\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\" />\n\n <tfoot *ngIf=\"summaryRowTemplate && !footer\">\n <ng-container *ngTemplateOutlet=\"summaryRowTemplate\" />\n </tfoot>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [cAlign]=\"tableFootProps?.align\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [sorterValue]=\"sorterValue\"\n [summaryRowTemplate]=\"summaryRowTemplate\"\n component=\"tfoot\"\n />\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n />\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\"\n />\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n />\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active ?? undefined\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active ?? undefined\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\"\n [checked]=\"item._selected ?? false\"\n cFormCheckInput\n [disabled]=\"(item?._selectable === false) ?? false\"\n autocomplete=\"off\"\n >\n </td>\n <ng-template ngFor let-column [ngForOf]=\"columns$()\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {column, item, columnName: getColumnKey(column), tdContent: item[column.key], cellProps: getTableDataCellProps(column, item) }\" />\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\" />\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\" />\n </tbody>\n</ng-template>\n\n<ng-template\n #columnDefaultTemplate\n let-cellProps=\"cellProps\"\n let-column=\"column\"\n let-columnName=\"columnName\"\n let-item=\"item\"\n let-tdContent=\"tdContent\"\n>\n <td\n *ngIf=\"tdContent !== undefined\"\n [cTableActive]=\"cellProps?.['active']\"\n [cTableColor]=\"cellProps?.color ?? column[columnName]?._colProps?.color ?? undefined\"\n [cAlign]=\"cellProps?.align\"\n [ngClass]=\"getTableDataCellClass(column, item)\"\n [cHtmlAttr]=\"cellProps?.['_attributes'] ?? undefined\"\n [ngStyle]=\"getTableDataCellStyles(column, item)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
|
|
483
439
|
}], ctorParameters: () => [{ type: i0.IterableDiffers }, { type: i0.KeyValueDiffers }], propDecorators: { activePage: [{
|
|
484
|
-
type: Input
|
|
440
|
+
type: Input,
|
|
441
|
+
args: [{ transform: numberAttribute }]
|
|
485
442
|
}], cleaner: [{
|
|
486
|
-
type: Input
|
|
443
|
+
type: Input,
|
|
444
|
+
args: [{ transform: booleanAttribute }]
|
|
487
445
|
}], clickableRows: [{
|
|
488
|
-
type: Input
|
|
446
|
+
type: Input,
|
|
447
|
+
args: [{ transform: booleanAttribute }]
|
|
489
448
|
}], columns: [{
|
|
490
449
|
type: Input
|
|
491
450
|
}], columnFilter: [{
|
|
@@ -495,13 +454,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
495
454
|
}], columnSorter: [{
|
|
496
455
|
type: Input
|
|
497
456
|
}], footer: [{
|
|
498
|
-
type: Input
|
|
457
|
+
type: Input,
|
|
458
|
+
args: [{ transform: booleanAttribute }]
|
|
499
459
|
}], header: [{
|
|
500
|
-
type: Input
|
|
460
|
+
type: Input,
|
|
461
|
+
args: [{ transform: booleanAttribute }]
|
|
501
462
|
}], items: [{
|
|
502
463
|
type: Input
|
|
503
464
|
}], itemsPerPage: [{
|
|
504
|
-
type: Input
|
|
465
|
+
type: Input,
|
|
466
|
+
args: [{ transform: numberAttribute }]
|
|
505
467
|
}], itemsPerPageLabel: [{
|
|
506
468
|
type: Input
|
|
507
469
|
}], itemsPerPageOptions: [{
|
|
@@ -513,11 +475,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
513
475
|
}], noItemsLabel: [{
|
|
514
476
|
type: Input
|
|
515
477
|
}], pagination: [{
|
|
516
|
-
type: Input
|
|
478
|
+
type: Input,
|
|
479
|
+
args: [{ transform: booleanAttribute }]
|
|
517
480
|
}], selectable: [{
|
|
518
|
-
type: Input
|
|
481
|
+
type: Input,
|
|
482
|
+
args: [{ transform: booleanAttribute }]
|
|
519
483
|
}], selectAll: [{
|
|
520
|
-
type: Input
|
|
484
|
+
type: Input,
|
|
485
|
+
args: [{ transform: booleanAttribute }]
|
|
521
486
|
}], sorterValue: [{
|
|
522
487
|
type: Input
|
|
523
488
|
}], tableFilter: [{
|
|
@@ -556,4 +521,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
556
521
|
type: ContentChildren,
|
|
557
522
|
args: [TemplateIdDirective]
|
|
558
523
|
}] } });
|
|
559
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBTUwsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0YsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFpQnZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFB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LG1CQUFtQjtzQkFBckMsTUFBTTtnQkFDWSxpQkFBaUI7c0JBQW5DLE1BQU07Z0JBQ1ksZ0JBQWdCO3NCQUFsQyxNQUFNO2dCQUNZLGtCQUFrQjtzQkFBcEMsTUFBTTtnQkFDWSxRQUFRO3NCQUExQixNQUFNO2dCQUNZLHVCQUF1QjtzQkFBekMsTUFBTTtnQkFDWSxtQkFBbUI7c0JBQXJDLE1BQU07Z0JBQ1ksc0JBQXNCO3NCQUF4QyxNQUFNO2dCQUUrQixlQUFlO3NCQUFwRCxlQUFlO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS50eXBlJztcbmltcG9ydCB7XG4gIElDb2x1bW4sXG4gIElDb2x1bW5GaWx0ZXIsXG4gIElDb2x1bW5GaWx0ZXJWYWx1ZSxcbiAgSUl0ZW0sXG4gIElJdGVtSW50ZXJuYWwsXG4gIElTbWFydFRhYmxlLFxuICBJU29ydGVyLFxuICBJU29ydGVyVmFsdWUsXG4gIElUYWJsZUZpbHRlcixcbiAgSVRhYmxlR3JvdXBQcm9wcyxcbiAgSXRlbXNQZXJQYWdlU2VsZWN0XG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlLnR5cGUnO1xuXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRm9ybUNoZWNrSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IEVsZW1lbnRDb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnQtY292ZXInO1xuaW1wb3J0IHsgSHRtbEF0dHJpYnV0ZXNEaXJlY3RpdmUsIFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc21hcnQtcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUYWJsZUFjdGl2ZURpcmVjdGl2ZSwgVGFibGVDb2xvckRpcmVjdGl2ZSwgVGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90YWJsZSc7XG5pbXBvcnQgeyBBbGlnbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBTbWFydFRhYmxlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtdGFibGUtZmlsdGVyL3NtYXJ0LXRhYmxlLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsdGVySW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9zbWFydC10YWJsZS1maWx0ZXIvZmlsdGVyLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTbWFydFRhYmxlSGVhZENvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWhlYWQvc21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgU21hcnRUYWJsZUl0ZW1zUGVyUGFnZVNlbGVjdG9yQ29tcG9uZW50XG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yL3NtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Mtc21hcnQtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zbWFydC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NTbWFydFRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBOZ0lmLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTmdDbGFzcyxcbiAgICBOZ0Zvck9mLFxuICAgIE5nU3R5bGUsXG4gICAgQWxpZ25EaXJlY3RpdmUsXG4gICAgQnV0dG9uRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRDb3ZlckNvbXBvbmVudCxcbiAgICBGaWx0ZXJJbnB1dERpcmVjdGl2ZSxcbiAgICBGb3JtQ2hlY2tJbnB1dERpcmVjdGl2ZSxcbiAgICBIdG1sQXR0cmlidXRlc0RpcmVjdGl2ZSxcbiAgICBTbWFydFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgU21hcnRUYWJsZUZpbHRlckNvbXBvbmVudCxcbiAgICBTbWFydFRhYmxlSGVhZENvbXBvbmVudCxcbiAgICBTbWFydFRhYmxlSXRlbXNQZXJQYWdlU2VsZWN0b3JDb21wb25lbnQsXG4gICAgVGFibGVBY3RpdmVEaXJlY3RpdmUsXG4gICAgVGFibGVDb2xvckRpcmVjdGl2ZSxcbiAgICBUYWJsZURpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBJU21hcnRUYWJsZSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYWN0aXZlUGFnZTogTnVtYmVySW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbGVhbmVyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbGlja2FibGVSb3dzOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9mb290ZXI6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlcjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaXRlbXNQZXJQYWdlOiBOdW1iZXJJbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3BhZ2luYXRpb246IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdGFibGU6IEJvb2xlYW5JbnB1dDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHByaXZhdGUga2V5VmFsdWVEaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnNcbiAgKSB7XG4gICAgdGhpcy5pdGVtc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5pdGVtcykuY3JlYXRlKCk7XG4gICAgdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9jb2x1bW5GaWx0ZXJlZCkuY3JlYXRlKCk7XG4gICAgdGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyID0gdGhpcy5rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLmNvbHVtbkZpbHRlclZhbHVlKS5jcmVhdGUoKTtcbiAgICB0aGlzLnNvcnRlclZhbHVlRGlmZmVyID0gdGhpcy5rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLnNvcnRlclZhbHVlKS5jcmVhdGUoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEFsbFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkQWxsKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHJlYWRvbmx5IHNlbGVjdGVkQWxsU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbiB8ICdpbmRldGVybWluYXRlJz4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXNEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRmlsdGVyZWREaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtRmlsdGVyVmFsdWVEaWZmZXI6IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc29ydGVyVmFsdWVEaWZmZXI6IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB8IG51bGw7XG5cbiAgQElucHV0KClcbiAgc2V0IGFjdGl2ZVBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2FjdGl2ZVBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSkgfHwgMTtcbiAgICB0aGlzLmFjdGl2ZVBhZ2VDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVQYWdlKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVQYWdlID0gMTtcblxuICBASW5wdXQoKVxuICBzZXQgY2xlYW5lcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFuZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNsZWFuZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFuZXI7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhbmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGNsaWNrYWJsZVJvd3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGlja2FibGVSb3dzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBjbGlja2FibGVSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGlja2FibGVSb3dzO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xpY2thYmxlUm93czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5zKHZhbHVlOiAoc3RyaW5nIHwgSUNvbHVtbilbXSkge1xuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWx1ZS5tYXAoY29sdW1uID0+IHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8geyBrZXk6IGNvbHVtbiB9IDogeyAuLi5jb2x1bW4gfSk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiAoc3RyaW5nIHwgSUNvbHVtbilbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMgfHwgdGhpcy5yYXdDb2x1bW5OYW1lcztcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbnM/OiAoc3RyaW5nIHwgSUNvbHVtbilbXTtcblxuICBASW5wdXQoKSBjb2x1bW5GaWx0ZXI/OiBib29sZWFuIHwgSUNvbHVtbkZpbHRlcjtcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1uRmlsdGVyVmFsdWUodmFsdWU6IElDb2x1bW5GaWx0ZXJWYWx1ZSkge1xuICAgIGlmICh0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udmFsdWUgfTtcbiAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHsgLi4udGhpcy5fY29sdW1uRmlsdGVyVmFsdWUgfSk7XG4gICAgICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy8gZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29sdW1uRmlsdGVyVmFsdWUoKTogSUNvbHVtbkZpbHRlclZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uRmlsdGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9jb2x1bW5GaWx0ZXJWYWx1ZTogSUNvbHVtbkZpbHRlclZhbHVlID0ge307XG5cbiAgQElucHV0KCkgY29sdW1uU29ydGVyPzogYm9vbGVhbiB8IElTb3J0ZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IGZvb3Rlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Zvb3RlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb290ZXI7XG4gIH1cblxuICBwcml2YXRlIF9mb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaGVhZGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGVhZGVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBoZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX2hlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpdGVtcyh2YWx1ZTogSUl0ZW1bXSkge1xuICAgIGlmICh0aGlzLml0ZW1zRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0RpZmZlci5kaWZmKHZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5zZXRJdGVtcyh2YWx1ZSkgYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2l0ZW1zOiBJSXRlbUludGVybmFsW10gPSBbXSBhcyBBcnJheTxUeXBlPElJdGVtSW50ZXJuYWw+PjtcblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXNQZXJQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gMTA7XG5cbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlTGFiZWw6IHN0cmluZyA9ICdJdGVtcyBwZXIgcGFnZTonO1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDUwXTtcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlU2VsZWN0PzogYm9vbGVhbiB8IEl0ZW1zUGVyUGFnZVNlbGVjdDtcbiAgQElucHV0KCkgbG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIG5vSXRlbXNMYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICdObyBpdGVtcyBmb3VuZCc7XG5cbiAgQElucHV0KClcbiAgc2V0IHBhZ2luYXRpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9wYWdpbmF0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBwYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0YWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgc2VsZWN0QWxsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0QWxsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2V0IHNvcnRlclZhbHVlKHZhbHVlOiBJU29ydGVyVmFsdWUpIHtcbiAgICBpZiAodGhpcy5zb3J0ZXJWYWx1ZURpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuc29ydGVyVmFsdWVEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9zb3J0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNvcnRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc29ydGVyVmFsdWUoKTogSVNvcnRlclZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zb3J0ZXJWYWx1ZTogSVNvcnRlclZhbHVlID0ge307XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyKGZpbHRlcikge1xuICAgIHRoaXMuX3RhYmxlRmlsdGVyID0gZmlsdGVyO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy50YWJsZUZpbHRlckxhYmVsID0gdHlwZW9mIGZpbHRlci5sYWJlbCA9PT0gJ3N0cmluZycgPyBmaWx0ZXIubGFiZWwgOiB0aGlzLnRhYmxlRmlsdGVyTGFiZWw7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXIgPSB0eXBlb2YgZmlsdGVyLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyA/IGZpbHRlci5wbGFjZWhvbGRlciA6IHRoaXMudGFibGVGaWx0ZXJQbGFjZWhvbGRlcjtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnID8gZmlsdGVyLnZhbHVlIDogdGhpcy50YWJsZUZpbHRlclZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlcj86IGJvb2xlYW4gfCBJVGFibGVGaWx0ZXI7XG5cbiAgQElucHV0KCkgdGFibGVGaWx0ZXJMYWJlbCA9ICdGaWx0ZXI6JztcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJQbGFjZWhvbGRlciA9ICd0eXBlIHN0cmluZy4uLic7XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl90YWJsZUZpbHRlclZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvLyBlbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlRmlsdGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSB0YWJsZUJvZHlQcm9wcz86IElUYWJsZUdyb3VwUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVGb290UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlSGVhZFByb3BzPzogSVRhYmxlR3JvdXBQcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZVByb3BzPzogSVRhYmxlID0ge307XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJSXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNvcnRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVNvcnRlclZhbHVlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVNvcnRlclZhbHVlPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZlUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ29sdW1uRmlsdGVyVmFsdWU+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uRmlsdGVyVmFsdWU+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBmaWx0ZXJlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUl0ZW1JbnRlcm5hbFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUl0ZW1JbnRlcm5hbFtdPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUpIGNvbHVtblRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcbiAgdGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IChUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkgfSA9IHsgdGFibGVEZXRhaWxzOiBudWxsLCB0YWJsZURhdGE6IG51bGwgfTtcbiAgY29sdW1uRmlsdGVyVGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IChUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkgfSA9IHt9O1xuICBzdW1tYXJ5Um93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uVGVtcGxhdGVzLmZvckVhY2goKGNoaWxkOiBUZW1wbGF0ZUlkRGlyZWN0aXZlKSA9PiB7XG4gICAgICBpZiAoY2hpbGQuaWQuc3RhcnRzV2l0aCgnY29sdW1uRmlsdGVyXycpKSB7XG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQuaWQgPT09ICd0YWJsZVN1bW1hcnlSb3cnKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeVJvd1RlbXBsYXRlID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgIH0pO1xuICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlcyB9O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQWxsKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgY29uc3QgdW5zZWxlY3RlZCA9IHRoaXMuaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IGZhbHNlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQgJiYgdW5zZWxlY3RlZCA/ICdpbmRldGVybWluYXRlJyA6IHNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA/IHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA6ICcnO1xuICB9XG5cbiAgZ2V0IGNvbHVtbkZpbHRlclN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID8gdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA6IHt9O1xuICB9XG5cbiAgZ2V0IG51bWJlck9mUGFnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlID8gTWF0aC5jZWlsKHRoaXMuc29ydGVkSXRlbXMubGVuZ3RoIC8gdGhpcy5faXRlbXNQZXJQYWdlKSA6IDE7XG4gIH1cblxuICBnZXQgY29sc3BhbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlID8gdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGggKyAxIDogdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGg7XG4gIH1cblxuICBnZXQgZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFnZSA/ICh0aGlzLl9hY3RpdmVQYWdlIC0gMSkgKiB0aGlzLl9pdGVtc1BlclBhZ2UgOiAwO1xuICB9XG5cbiAgZ2V0IGl0ZW1zT25BY3RpdmVQYWdlKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMuc2xpY2UoXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LFxuICAgICAgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCArIHRoaXMuX2l0ZW1zUGVyUGFnZVxuICAgICk7XG4gIH1cblxuICBnZXQgY3VycmVudEl0ZW1zKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2UgPyB0aGlzLml0ZW1zT25BY3RpdmVQYWdlIDogdGhpcy5zb3J0ZWRJdGVtcyA/PyBbXTtcbiAgICAvLyByZXR1cm4gdGhpcy5pdGVtcyA/PyBbXTtcbiAgfVxuXG4gIGdldCBnZW5Db2xzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9pdGVtcy5sZW5ndGggPyB0aGlzLl9pdGVtc1swXSA/PyB7fSA6IHt9KS5maWx0ZXIoKGVsKSA9PiBlbC5jaGFyQXQoMCkgIT09ICdfJyk7XG4gIH1cblxuICBnZXQgcmF3Q29sdW1uTmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMgPyB0aGlzLl9jb2x1bW5zLm1hcChjb2x1bW4gPT4gdHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgPyBjb2x1bW4ua2V5IDogY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5nZW5Db2xzO1xuICB9XG5cbiAgZ2V0IGl0ZW1zRGF0YUNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3Q29sdW1uTmFtZXMuZmlsdGVyKChuYW1lKSA9PiB0aGlzLmdlbkNvbHMuaW5jbHVkZXMobmFtZSkpO1xuICB9XG5cbiAgZ2V0IHNvcnRlZEl0ZW1zKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgY29uc3QgY29sdW1uS2V5ID0gdGhpcy5zb3J0ZXJWYWx1ZS5jb2x1bW47XG4gICAgaWYgKFxuICAgICAgIWNvbHVtbktleSB8fFxuICAgICAgIXRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5LZXkpIHx8XG4gICAgICAodGhpcy5jb2x1bW5Tb3J0ZXIgJiZcbiAgICAgICAgdHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0aGlzLmNvbHVtblNvcnRlci5leHRlcm5hbClcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyZWQ7XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlRmlsdGVyZWQgPSBbLi4udGhpcy50YWJsZUZpbHRlcmVkXTtcblxuICAgIC8vIGlmIHZhbHVlcyBpbiBjb2x1bW4gYXJlIHRvIGJlIHNvcnRlZCBieSBudW1lcmljIHZhbHVlIHRoZXkgYWxsIGhhdmUgdG8gYmUgYSB0eXBlIG9mIG51bWJlclxuICAgIGNvbnN0IGZsaXAgPSB0aGlzLnNvcnRlclZhbHVlLnN0YXRlID09PSAnYXNjJyA/IDEgOiB0aGlzLnNvcnRlclZhbHVlLnN0YXRlID09PSAnZGVzYycgPyAtMSA6IDA7XG5cbiAgICBpZiAoZmxpcCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRhYmxlRmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50Q29sdW1uID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3VycmVudENvbHVtbi5zb3J0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IHRhYmxlRmlsdGVyZWQuc2xpY2UoKS5zb3J0KGN1cnJlbnRDb2x1bW4uc29ydGVyKTtcbiAgICAgIHJldHVybiBmbGlwIDwgMCA/IHNvcnRlZC5yZXZlcnNlKCkgOiBzb3J0ZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGFyZUZuID0gKGl0ZW0xOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0sIGl0ZW0yOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IGl0ZW0xW2NvbHVtbktleV07XG4gICAgICBjb25zdCB2YWx1ZTIgPSBpdGVtMltjb2x1bW5LZXldO1xuICAgICAgY29uc3QgYSA9IHR5cGVvZiB2YWx1ZTEgPT09ICdudW1iZXInID8gdmFsdWUxIDogU3RyaW5nKHZhbHVlMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGIgPSB0eXBlb2YgdmFsdWUyID09PSAnbnVtYmVyJyA/IHZhbHVlMiA6IFN0cmluZyh2YWx1ZTIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gYSA+IGIgPyAxICogZmxpcCA6IGIgPiBhID8gLTEgKiBmbGlwIDogMDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRhYmxlRmlsdGVyZWQuc2xpY2UoKS5zb3J0KGNvbXBhcmVGbik7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJFdmVudCgpOiAnY2hhbmdlJyB8ICdpbnB1dCcge1xuICAgIHJldHVybiAodHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIubGF6eSkgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gIH07XG5cbiAgcHJpdmF0ZSBfY29sdW1uRmlsdGVyZWQ6IElJdGVtSW50ZXJuYWxbXSA9IFtdO1xuXG4gIGdldCBjb2x1bW5GaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBfaXRlbXMgPSB0aGlzLl9pdGVtcztcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciAmJlxuICAgICAgdHlwZW9mIHRoaXMuY29sdW1uRmlsdGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIuZXh0ZXJuYWxcbiAgICApIHtcbiAgICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xuICAgICAgcmV0dXJuIF9pdGVtcztcbiAgICB9XG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHZhbHVlKGl0ZW1ba2V5XSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2x1bW4gPT4gdHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgJiYgY29sdW1uLmtleSA9PT0ga2V5KTtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudENvbHVtbiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGN1cnJlbnRDb2x1bW4uZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICh0eXBlb2YgY3VycmVudENvbHVtbi5maWx0ZXIgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudENvbHVtbi5maWx0ZXIoaXRlbSwgdmFsdWUpKSA/PyAhdmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbHVtbkZpbHRlciA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb2x1bW5GaWx0ZXIgJiYgdGhpcy5pdGVtc0RhdGFDb2x1bW5zLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX2l0ZW1zID0gX2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gU3RyaW5nKGl0ZW1ba2V5XSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjb2x1bW5GaWx0ZXIpKTtcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xuICAgIHJldHVybiBfaXRlbXM7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuY29sdW1uRmlsdGVyZWQ7XG4gICAgaWYgKFxuICAgICAgIXRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fFxuICAgICAgKHRoaXMudGFibGVGaWx0ZXIgJiYgdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJTdGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlQ29udGFpbkZpbHRlciA9ICh2YWw6IGFueSkgPT4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XG4gICAgICByZXR1cm4gISF0aGlzLml0ZW1zRGF0YUNvbHVtbnMuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5GaWx0ZXIoaXRlbVtrZXldKSk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlci5kaWZmKGl0ZW1zKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgZ2V0IGlzRmlsdGVyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fCB0aGlzLnNvcnRlclZhbHVlPy5jb2x1bW4gfHwgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbkZpbHRlclN0YXRlKS5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbXMoaXRlbXM6IElJdGVtW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIF9pZDogaW5kZXggfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gPElJdGVtSW50ZXJuYWw+W107XG4gIH1cblxuICBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudDogeyBjb2x1bW5LZXk6IHN0cmluZzsgaW5kZXg6IG51bWJlcjsgfSkge1xuICAgIHRoaXMuaGFuZGxlU29ydGVyQ2hhbmdlKCRldmVudC5jb2x1bW5LZXksICRldmVudC5pbmRleCk7XG4gIH1cblxuICBpc1NvcnRhYmxlKGk6IG51bWJlcik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGF0YUNvbHVtbiA9IHRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyh0aGlzLnJhd0NvbHVtbk5hbWVzW2ldKTtcbiAgICBsZXQgY29sdW1uO1xuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAoIXRoaXMuY29sdW1ucyB8fFxuICAgICAgICB0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAodHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBjb2x1bW4uc29ydGVyID09PSAndW5kZWZpbmVkJyB8fCBjb2x1bW4uc29ydGVyKSlcbiAgICAgICkgJiYgaXNEYXRhQ29sdW1uXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZVNvcnRlckNoYW5nZShjb2x1bW46IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1NvcnRhYmxlKGluZGV4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL2lmIGNvbHVtbiBjaGFuZ2VkIG9yIHNvcnQgd2FzIGRlc2NlbmRpbmcgY2hhbmdlIGFzYyB0byB0cnVlXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLnRoaXMuc29ydGVyVmFsdWUgfTtcblxuICAgIGlmIChzdGF0ZS5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgaWYgKHN0YXRlLnN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlLnN0YXRlID0gJ2FzYyc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnN0YXRlID09PSAnYXNjJykge1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdkZXNjJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2x1bW5Tb3J0ZXIgPT09ICdvYmplY3QnICYmICF0aGlzLmNvbHVtblNvcnRlci5yZXNldGFibGUpIHtcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnN0YXRlID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb2x1bW4gPSBjb2x1bW47XG4gICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgIH1cbiAgICB0aGlzLnNvcnRlclZhbHVlID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgc2V0QWN0aXZlUGFnZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlUGFnZSA9ICRldmVudDtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclZhbHVlLCBbYCR7Y29sdW1ufWBdOiB2YWx1ZSB9O1xuICB9XG5cbiAgaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50OiB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkge1xuICAgIGNvbnN0IHsgdmFsdWUsIHR5cGUgfSA9ICRldmVudDtcbiAgICBjb25zdCBpc0xhenkgPSB0eXBlb2YgdGhpcy50YWJsZUZpbHRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy50YWJsZUZpbHRlci5sYXp5ID09PSB0cnVlO1xuICAgIGlmICgoKGlzTGF6eSAmJiB0eXBlID09PSAnaW5wdXQnKSB8fCAoIWlzTGF6eSAmJiB0eXBlID09PSAnY2hhbmdlJykpICYmIHZhbHVlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBjbGVhbigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID0ge307XG4gICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gJyc7XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZSA9IHt9O1xuICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy9lbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICB9XG5cbiAgaGFuZGxlSXRlbXNQZXJQYWdlQ2hhbmdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2l0ZW1zUGVyUGFnZSkge1xuICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gdmFsdWU7XG4gICAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dDaGVja2VkKCRldmVudDogRXZlbnQsIGl0ZW06IElJdGVtSW50ZXJuYWwpIHtcbiAgICBpdGVtLl9zZWxlY3RlZCA9IGl0ZW0uX3NlbGVjdGFibGUgIT09IGZhbHNlICYmICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQWxsU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRBbGwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbTogSUl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgX3NlbGVjdGVkOiAoaXRlbS5fc2VsZWN0YWJsZSAhPT0gZmFsc2UgPyAkZXZlbnQgOiAhIWl0ZW0uX3NlbGVjdGVkKSB9O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBbGxTdWJqZWN0Lm5leHQoJGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEFsbFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkQWxsKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtOiBJSXRlbSwgY29sTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvcHMgPSBpdGVtWydfY2VsbFByb3BzJ10gJiYge1xuICAgICAgLi4uKGl0ZW1bJ19jZWxsUHJvcHMnXVsnX2FsbCddICYmIHsgLi4uaXRlbVsnX2NlbGxQcm9wcyddWydfYWxsJ10gfSksXG4gICAgICAuLi4oaXRlbVsnX2NlbGxQcm9wcyddW2NvbE5hbWVdICYmIHsgLi4uaXRlbVsnX2NlbGxQcm9wcyddW2NvbE5hbWVdIH0pXG4gICAgfTtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICB0YWJsZURhdGFDZWxsQ2xhc3NlcyhpdGVtOiBJSXRlbSwgY29sTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJyA/IGNvbHVtbiA9PT0gY29sTmFtZSA6IGNvbHVtblsna2V5J10gPT09IGNvbE5hbWUpO1xuICAgIHJldHVybiBjb2x1bW5bMF0gJiYgdHlwZW9mIGNvbHVtblswXSA9PT0gJ29iamVjdCcgPyBjb2x1bW5bMF0uX2NsYXNzZXMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRDb2x1bW5OYW1lKCRldmVudDogTW91c2VFdmVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIGNvbnN0IGNsb3Nlc3QgPSB0YXJnZXQuY2xvc2VzdCgndHInKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNsb3Nlc3QgPyBBcnJheS5mcm9tKGNsb3Nlc3QuY2hpbGRyZW4pIDogW107XG4gICAgY29uc3QgY2xpY2tlZENlbGwgPSBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5jb250YWlucyh0YXJnZXQpKVswXTtcbiAgICByZXR1cm4gdGhpcy5yYXdDb2x1bW5OYW1lc1tjaGlsZHJlbi5pbmRleE9mKGNsaWNrZWRDZWxsKSAtICh0aGlzLl9zZWxlY3RhYmxlID8gMSA6IDApXTtcbiAgfVxuXG4gIGhhbmRsZVJvd0NsaWNrKHBhcmFtOiB7ICRldmVudDogTW91c2VFdmVudDsgaXRlbTogSUl0ZW1JbnRlcm5hbDsgaTogbnVtYmVyIH0pIHtcbiAgICBjb25zdCB7ICRldmVudCwgaXRlbSwgaSB9ID0geyAuLi5wYXJhbSB9O1xuICAgIGNvbnN0IGNvbHVtbk5hbWUgPSB0aGlzLmdldENvbHVtbk5hbWUocGFyYW0uJGV2ZW50KTtcbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyBpdGVtOiBpdGVtLCBpbmRleDogaSArIHRoaXMuZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgsIGNvbHVtbk5hbWUsIGV2ZW50OiAkZXZlbnQgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbkZpbHRlclZhbHVlJ10pIHtcbiAgICAgIGNvbnN0IGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlID0gY2hhbmdlc1snY29sdW1uRmlsdGVyVmFsdWUnXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUgPz8ge30pLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd0YWJsZUZpbHRlclZhbHVlJ10pIHtcbiAgICAgIGNvbnN0IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWyd0YWJsZUZpbHRlclZhbHVlJ107XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJpdGVtc1BlclBhZ2VTZWxlY3QgfHwgdGFibGVGaWx0ZXIgfHwgY2xlYW5lciB8fCB0ZW1wbGF0ZXNbJ3RhYmxlQ3VzdG9tSGVhZGVyJ11cIiBjbGFzcz1cInJvdyBteS0yIG14LTBcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHAtMFwiICpuZ0lmPVwidGFibGVGaWx0ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVGaWx0ZXJUZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wXCIgKm5nSWY9XCJjbGVhbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlQ2xlYW5lclRlbXBsYXRlXCIgLz5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlQ3VzdG9tSGVhZGVyJ10gfHwgdGFibGVDdXN0b21IZWFkZXJUZW1wbGF0ZVwiIC8+XG5cbiAgPG5nLXRlbXBsYXRlICN0YWJsZUZpbHRlclRlbXBsYXRlPlxuICAgIDxjLXNtYXJ0LXRhYmxlLWZpbHRlclxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJ0YWJsZUZpbHRlclwiXG4gICAgICBbZGVsYXldPVwiMzAwXCJcbiAgICAgIFtmaWx0ZXJMYWJlbF09XCJ0YWJsZUZpbHRlckxhYmVsXCJcbiAgICAgIFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJ0YWJsZUZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgIFtvbkV2ZW50XT1cInRhYmxlRmlsdGVyRXZlbnRcIlxuICAgICAgW3ZhbHVlXT1cInRhYmxlRmlsdGVyU3RhdGVcIlxuICAgICAgY0ZpbHRlcklucHV0XG4gICAgPlxuICAgIDwvYy1zbWFydC10YWJsZS1maWx0ZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICN0YWJsZUNsZWFuZXJUZW1wbGF0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwiY2xlYW4oJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cImNsZWFuZXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0ZpbHRlcmVkXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnbXMtMSc6IHRhYmxlRmlsdGVyfVwiXG4gICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICBjQnV0dG9uXG4gICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgY29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckljb25UZW1wbGF0ZVwiIC8+XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICN0YWJsZUN1c3RvbUhlYWRlclRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTAgbXMtYXV0b1wiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2N1c3RvbUhlYWRlcl1cIiAvPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgPHRhYmxlIFthbGlnbl09XCJ0YWJsZVByb3BzPy5hbGlnblwiXG4gICAgICAgICBbYm9yZGVyQ29sb3JdPVwidGFibGVQcm9wcz8uYm9yZGVyQ29sb3JcIlxuICAgICAgICAgW2JvcmRlcmVkXT1cInRhYmxlUHJvcHM/LmJvcmRlcmVkID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICBbYm9yZGVybGVzc109XCJ0YWJsZVByb3BzPy5ib3JkZXJsZXNzID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICBbY2FwdGlvbl09XCJ0YWJsZVByb3BzPy5jYXB0aW9uXCJcbiAgICAgICAgIFtjb2xvcl09XCJ0YWJsZVByb3BzPy5jb2xvclwiXG4gICAgICAgICBbaG92ZXJdPVwidGFibGVQcm9wcz8uaG92ZXIgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtyZXNwb25zaXZlXT1cInRhYmxlUHJvcHM/LnJlc3BvbnNpdmVcIlxuICAgICAgICAgW3NtYWxsXT1cInRhYmxlUHJvcHM/LnNtYWxsID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICBbc3RyaXBlZF09XCJ0YWJsZVByb3BzPy5zdHJpcGVkID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICBbY0h0bWxBdHRyXT1cInRhYmxlUHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIGNUYWJsZVxuICA+XG4gICAgPGMtc21hcnQtdGFibGUtaGVhZFxuICAgICAgKGNvbHVtbkZpbHRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cImhlYWRlclwiXG4gICAgICBbY29sdW1uRmlsdGVyU3RhdGVdPVwiY29sdW1uRmlsdGVyU3RhdGVcIlxuICAgICAgW2NvbHVtbkZpbHRlcl09XCJjb2x1bW5GaWx0ZXJcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXG4gICAgICBbc2VsZWN0ZWRBbGxdPVwiKHNlbGVjdGVkQWxsU3ViamVjdCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgIFtjb2x1bW5Tb3J0ZXJdPVwiY29sdW1uU29ydGVyXCJcbiAgICAgIFtzb3J0ZXJWYWx1ZV09XCJzb3J0ZXJWYWx1ZVwiXG4gICAgICBbY0h0bWxBdHRyXT1cInRhYmxlSGVhZFByb3BzPy5hdHRyaWJ1dGVzID8/IHt9XCJcbiAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUhlYWRQcm9wcz8uY29sb3JcIlxuICAgICAgW2NBbGlnbl09XCJ0YWJsZUhlYWRQcm9wcz8uYWxpZ25cIlxuICAgICAgW2NvbHVtbkZpbHRlclRlbXBsYXRlc109XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNcIlxuICAgIC8+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGJvZHlEZWZhdWx0VGVtcGxhdGVcIiAvPlxuXG4gICAgPHRmb290ICpuZ0lmPVwic3VtbWFyeVJvd1RlbXBsYXRlICYmICFmb290ZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdW1tYXJ5Um93VGVtcGxhdGVcIiAvPlxuICAgIDwvdGZvb3Q+XG5cbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXG4gICAgICAoc2VsZWN0QWxsQ2hhbmdlKT1cImhhbmRsZVNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChzb3J0ZXJTdGF0ZUNoYW5nZSk9XCJoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJmb290ZXJcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXG4gICAgICBbc2VsZWN0ZWRBbGxdPVwiKHNlbGVjdGVkQWxsU3ViamVjdCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgIFtjb2x1bW5Tb3J0ZXJdPVwiY29sdW1uU29ydGVyXCJcbiAgICAgIFtzb3J0ZXJWYWx1ZV09XCJzb3J0ZXJWYWx1ZVwiXG4gICAgICBbY0h0bWxBdHRyXT1cInRhYmxlRm9vdFByb3BzPy5hdHRyaWJ1dGVzID8/IHt9XCJcbiAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUZvb3RQcm9wcz8uY29sb3JcIlxuICAgICAgW2NBbGlnbl09XCJ0YWJsZUZvb3RQcm9wcz8uYWxpZ25cIlxuICAgICAgY29tcG9uZW50PVwidGZvb3RcIlxuICAgICAgW2NvbHVtbkZpbHRlclRlbXBsYXRlc109XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNcIlxuICAgICAgW3N1bW1hcnlSb3dUZW1wbGF0ZV09XCJzdW1tYXJ5Um93VGVtcGxhdGVcIlxuICAgIC8+XG5cbiAgPC90YWJsZT5cbiAgPGMtZWxlbWVudC1jb3ZlclxuICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgW2JvdW5kYXJpZXNdPVwiW1xuICAgICAgeyBzaWRlczogWyd0b3AnXSwgcXVlcnk6ICd0ZCcgfSxcbiAgICAgIHsgc2lkZXM6IFsnYm90dG9tJ10sIHF1ZXJ5OiAndGJvZHknIH1cbiAgICBdXCJcbiAgPjwvYy1lbGVtZW50LWNvdmVyPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgW25nSWZdPVwicGFnaW5hdGlvbiB8fCBpdGVtc1BlclBhZ2VTZWxlY3RcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxjLXNtYXJ0LXBhZ2luYXRpb25cbiAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcbiAgICAgICAgKm5nSWY9XCJwYWdpbmF0aW9uICYmIG51bWJlck9mUGFnZXMgPiAxXCJcbiAgICAgICAgW2FjdGl2ZVBhZ2VdPVwiYWN0aXZlUGFnZVwiXG4gICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIG1zLWF1dG9cIj5cbiAgICAgIDxjLXNtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yXG4gICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwiaGFuZGxlSXRlbXNQZXJQYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAqbmdJZj1cIml0ZW1zUGVyUGFnZVNlbGVjdFwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VMYWJlbF09XCJpdGVtc1BlclBhZ2VMYWJlbFwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cIml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGJvZHlEZWZhdWx0VGVtcGxhdGU+XG4gIDx0Ym9keSBbY0h0bWxBdHRyXT1cInRhYmxlQm9keVByb3BzPy5hdHRyaWJ1dGVzID8/IHt9XCJcbiAgICAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUJvZHlQcm9wcz8uY29sb3JcIlxuICAgICAgICAgW2NBbGlnbl09XCJ0YWJsZUJvZHlQcm9wcz8uYWxpZ25cIlxuICA+XG4gIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtaXRlbSBbbmdGb3JPZl09XCJjdXJyZW50SXRlbXNcIiBsZXQtY250PVwiY291bnRcIiBsZXQtaT1cImluZGV4XCIgbGV0LWlzRXZlbj1cImV2ZW5cIiBsZXQtaXNPZGQ9XCJvZGRcIj5cbiAgICA8dHIgW3RhYmluZGV4XT1cImNsaWNrYWJsZVJvd3MgPyAwIDogLTFcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7Y3Vyc29yOiBjbGlja2FibGVSb3dzID8gJ3BvaW50ZXInIDogJ2F1dG8nfVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVSb3dDbGljayh7JGV2ZW50LCBpdGVtLCBpfSlcIlxuICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0uX3Byb3BzPy5hY3RpdmUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0uX3Byb3BzPy5jb2xvclwiXG4gICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcbiAgICA+XG4gICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICBbY1RhYmxlQ29sb3JdPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmNvbG9yXCJcbiAgICAgICAgICBbY0FsaWduXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hbGlnblwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLl9zZWxlY3RlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICBjRm9ybUNoZWNrSW5wdXRcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoaXRlbT8uX3NlbGVjdGFibGUgPT09IGZhbHNlKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICA+XG4gICAgICA8L3RkPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5OYW1lIFtuZ0Zvck9mXT1cInJhd0NvbHVtbk5hbWVzXCIgbGV0LWk9XCJpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGF0YSddIHx8IGNvbHVtbkRlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDoge2l0ZW0sIGNvbHVtbk5hbWUsIHRkQ29udGVudDogaXRlbVtjb2x1bW5OYW1lXSB9XCIgLz5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90cj5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidGVtcGxhdGVzWyd0YWJsZURldGFpbHMnXVwiPlxuICAgICAgPCEtLSAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dEZXRhaWxzRGVmYXVsdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+LS0+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiB0YWJpbmRleD1cIi0xXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiPjwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwicC0wXCI+XG4gICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyOiAwfVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGV0YWlscyddOyBjb250ZXh0OiB7aXRlbSwgaW5kZXg6IGl9XCIgLz5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vSXRlbXNEZWZhdWx0VGVtcGxhdGVcIiAvPlxuICA8L3Rib2R5PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5EZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWNvbHVtbk5hbWU9XCJjb2x1bW5OYW1lXCIgbGV0LXRkQ29udGVudD1cInRkQ29udGVudFwiPlxuICA8dGRcbiAgICBbY1RhYmxlQWN0aXZlXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uWydhY3RpdmUnXVwiXG4gICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uY29sb3JcIlxuICAgIFtjQWxpZ25dPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5hbGlnblwiXG4gICAgW25nQ2xhc3NdPVwidGFibGVEYXRhQ2VsbENsYXNzZXMoaXRlbSwgY29sdW1uTmFtZSlcIlxuICAgIFtjSHRtbEF0dHJdPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5bJ19hdHRyaWJ1dGVzJ10gPz8gdW5kZWZpbmVkXCJcbiAgPlxuICAgIHt7dGRDb250ZW50fX1cbiAgPC90ZD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS08bmctdGVtcGxhdGUgI3Jvd0RldGFpbHNEZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWluZGV4Pi0tPlxuPCEtLSAgPHRyPjx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiB0YWJpbmRleD1cIi0xXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiPjwvdGQ+PC90cj4tLT5cbjwhLS0gIDx0ciBjbGFzcz1cInAtMFwiPi0tPlxuPCEtLSAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj4tLT5cbjwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy50YWJsZURldGFpbHNcIj48L25nLWNvbnRhaW5lcj4tLT5cbjwhLS0gICAgPC90ZD4tLT5cbjwhLS0gIDwvdHI+LS0+XG48IS0tPC9uZy10ZW1wbGF0ZT4tLT5cblxuPG5nLXRlbXBsYXRlICNub0l0ZW1zRGVmYXVsdFRlbXBsYXRlPlxuICA8dHIgKm5nSWY9XCIhY3VycmVudEl0ZW1zLmxlbmd0aFwiPlxuICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+e3tub0l0ZW1zTGFiZWx9fTwvdGQ+XG4gIDwvdHI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tdG9kbzogZmlsdGVySWNvbkN1c3RvbVRlbXBsYXRlLS0+XG48bmctdGVtcGxhdGUgI2ZpbHRlckljb25UZW1wbGF0ZT5cbiAgPHN2ZyB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcG9pbnRlci1ldmVudHM9XCJub25lXCIgcm9sZT1cImltZ1wiXG4gICAgICAgY2xhc3M9XCJpY29uIGljb24tY3VzdG9tLXNpemVcIiB3aWR0aD1cIjE4XCI+XG4gICAgPHBvbHlnb25cbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcbiAgICAgIHBvaW50cz1cIjQwIDE2IDQwIDUzLjgyOCAxMDkuMDI0IDEzNiAxNTAuODE1IDEzNiA3Ni44OTYgNDggNDU5LjUxIDQ4IDMwNCAyNDIuMzg4IDMwNCA0MDEuMzczIDI0MS4zNzMgNDY0IDI0MCA0NjQgMjQwIDM2OCAyMDggMzY4IDIwOCA0OTYgMjU0LjYyNyA0OTYgMzM2IDQxNC42MjcgMzM2IDI1My42MTIgNDk2IDUzLjYxMiA0OTYgMTYgNDAgMTZcIlxuICAgICAgY2xhc3M9XCJjaS1wcmltYXJ5XCI+XG4gICAgPC9wb2x5Z29uPlxuICAgIDxwb2x5Z29uXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXG4gICAgICBwb2ludHM9XCIxNjYuNDAzIDI0OC4yMjUgMjI2Ljg2NCAxODcuNzYzIDIwNC4yMzcgMTY1LjEzNSAxNDMuNzc1IDIyNS41OTcgODMuMzEzIDE2NS4xMzUgNjAuNjg3IDE4Ny43NjMgMTIxLjE0OCAyNDguMjI1IDYwLjY4NyAzMDguNjg3IDgzLjMxMyAzMzEuMzE0IDE0My43NzUgMjcwLjg1MiAyMDQuMjM3IDMzMS4zMTQgMjI2Ljg2NCAzMDguNjg3IDE2Ni40MDMgMjQ4LjIyNVwiXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIj5cbiAgICA8L3BvbHlnb24+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFLTCxlQUFlLEVBRWYsTUFBTSxFQUVOLE1BQU0sRUFLUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUJ2QyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixZQUFZLEVBQ1osY0FBYyxFQUNkLHVCQUF1QixFQUN2QixVQUFVLEVBQ1YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdkIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUUs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QXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRWEsbUJBQW1CO3NCQUFyQyxNQUFNO2dCQUNZLGlCQUFpQjtzQkFBbkMsTUFBTTtnQkFDWSxnQkFBZ0I7c0JBQWxDLE1BQU07Z0JBQ1ksa0JBQWtCO3NCQUFwQyxNQUFNO2dCQUNZLFFBQVE7c0JBQTFCLE1BQU07Z0JBQ1ksdUJBQXVCO3NCQUF6QyxNQUFNO2dCQUNZLG1CQUFtQjtzQkFBckMsTUFBTTtnQkFDWSxzQkFBc0I7c0JBQXhDLE1BQU07Z0JBRStCLGVBQWU7c0JBQXBELGVBQWU7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIHNpZ25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFdyaXRhYmxlU2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBKc29uUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSVRhYmxlIH0gZnJvbSAnLi4vLi4vdGFibGUvdGFibGUudHlwZSc7XG5pbXBvcnQge1xuICBJQ29sdW1uLFxuICBJQ29sdW1uRmlsdGVyLFxuICBJQ29sdW1uRmlsdGVyVmFsdWUsXG4gIElHcm91cCxcbiAgSUl0ZW0sXG4gIElJdGVtSW50ZXJuYWwsXG4gIElTbWFydFRhYmxlLFxuICBJU29ydGVyLFxuICBJU29ydGVyVmFsdWUsXG4gIElUYWJsZUZpbHRlcixcbiAgSVRhYmxlU2VjdGlvblByb3BzLFxuICBJdGVtc1BlclBhZ2VTZWxlY3QsXG4gIFNvcnRPcmRlclxufSBmcm9tICcuLi9zbWFydC10YWJsZS50eXBlJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2xpY2tlZENvbHVtbk5hbWUsXG4gIGdldENvbHVtbkdyb3VwcyxcbiAgZ2V0Q29sdW1uS2V5LFxuICBnZXRDb2x1bW5OYW1lcyxcbiAgZ2V0Q29sdW1uTmFtZXNGcm9tSXRlbXMsXG4gIGdldENvbHVtbnMsXG4gIGdldFRhYmxlRGF0YUNlbGxDbGFzcyxcbiAgZ2V0VGFibGVEYXRhQ2VsbFByb3BzLFxuICBnZXRUYWJsZURhdGFDZWxsU3R5bGVzXG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlLnV0aWxzJztcblxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYnV0dG9uJztcbmltcG9ydCB7IEZvcm1DaGVja0lucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQgeyBFbGVtZW50Q292ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50LWNvdmVyJztcbmltcG9ydCB7IEh0bWxBdHRyaWJ1dGVzRGlyZWN0aXZlLCBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IFNtYXJ0UGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NtYXJ0LXBhZ2luYXRpb24nO1xuaW1wb3J0IHsgVGFibGVBY3RpdmVEaXJlY3RpdmUsIFRhYmxlQ29sb3JEaXJlY3RpdmUsIFRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdGFibGUnO1xuaW1wb3J0IHsgQWxpZ25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgU21hcnRUYWJsZUZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWZpbHRlci9zbWFydC10YWJsZS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbHRlcklucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vc21hcnQtdGFibGUtZmlsdGVyL2ZpbHRlci1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU21hcnRUYWJsZUhlYWRDb21wb25lbnQgfSBmcm9tICcuLi9zbWFydC10YWJsZS1oZWFkL3NtYXJ0LXRhYmxlLWhlYWQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFNtYXJ0VGFibGVJdGVtc1BlclBhZ2VTZWxlY3RvckNvbXBvbmVudFxufSBmcm9tICcuLi9zbWFydC10YWJsZS1pdGVtcy1wZXItcGFnZS1zZWxlY3Rvci9zbWFydC10YWJsZS1pdGVtcy1wZXItcGFnZS1zZWxlY3Rvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLXNtYXJ0LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjU21hcnRUYWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgTmdJZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3JPZixcbiAgICBOZ1N0eWxlLFxuICAgIEFsaWduRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBFbGVtZW50Q292ZXJDb21wb25lbnQsXG4gICAgRmlsdGVySW5wdXREaXJlY3RpdmUsXG4gICAgRm9ybUNoZWNrSW5wdXREaXJlY3RpdmUsXG4gICAgSHRtbEF0dHJpYnV0ZXNEaXJlY3RpdmUsXG4gICAgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFNtYXJ0VGFibGVGaWx0ZXJDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUhlYWRDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUl0ZW1zUGVyUGFnZVNlbGVjdG9yQ29tcG9uZW50LFxuICAgIFRhYmxlQWN0aXZlRGlyZWN0aXZlLFxuICAgIFRhYmxlQ29sb3JEaXJlY3RpdmUsXG4gICAgVGFibGVEaXJlY3RpdmUsXG4gICAgSnNvblBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgSVNtYXJ0VGFibGUsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwcml2YXRlIGtleVZhbHVlRGlmZmVyczogS2V5VmFsdWVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuaXRlbXNEaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuaXRlbXMpLmNyZWF0ZSgpO1xuICAgIHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fY29sdW1uRmlsdGVyZWQpLmNyZWF0ZSgpO1xuICAgIHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSkuY3JlYXRlKCk7XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5zb3J0ZXJWYWx1ZSkuY3JlYXRlKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBbGxTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZEFsbCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICByZWFkb25seSBnZXRDb2x1bW5LZXkgPSBnZXRDb2x1bW5LZXk7XG4gIHJlYWRvbmx5IGdldFRhYmxlRGF0YUNlbGxDbGFzcyA9IGdldFRhYmxlRGF0YUNlbGxDbGFzcztcbiAgcmVhZG9ubHkgZ2V0VGFibGVEYXRhQ2VsbFByb3BzID0gZ2V0VGFibGVEYXRhQ2VsbFByb3BzO1xuICByZWFkb25seSBnZXRUYWJsZURhdGFDZWxsU3R5bGVzID0gZ2V0VGFibGVEYXRhQ2VsbFN0eWxlcztcblxuICByZWFkb25seSBzZWxlY3RlZEFsbFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtc0ZpbHRlcmVkRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2x1bUZpbHRlclZhbHVlRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHNvcnRlclZhbHVlRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfCBudWxsO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHNldCBhY3RpdmVQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVQYWdlID0gdmFsdWUgfHwgMTtcbiAgICB0aGlzLmFjdGl2ZVBhZ2VDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVQYWdlKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVQYWdlID0gMTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xlYW5lciA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbGlja2FibGVSb3dzID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbnModmFsdWU6IChzdHJpbmcgfCBJQ29sdW1uIHwgSUdyb3VwKVtdKSB7XG4gICAgY29uc3QgY29sT2JqZWN0cyA9IHZhbHVlLm1hcChjb2x1bW4gPT4gdHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycgPyB7IGtleTogY29sdW1uIH0gOiB7IC4uLmNvbHVtbiB9KTtcbiAgICBjb25zdCBjb2x1bW5zOiBJQ29sdW1uW10gPSBnZXRDb2x1bW5zKGNvbE9iamVjdHMpO1xuICAgIHRoaXMuY29sdW1ucyQuc2V0KGNvbHVtbnMpO1xuXG4gICAgLy8gdG9kbzogSW5wdXQgY29sdW1uR3JvdXBzIC0gc2VwYXJhdGlvbj9cbiAgICAvLyBjb25zb2xlLmxvZyhjb2x1bW5zKTtcbiAgICBjb25zb2xlLmxvZyhnZXRDb2x1bW5Hcm91cHMoY29sT2JqZWN0cyA/PyBbXSkpO1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldENvbHVtbkdyb3Vwcyh2YWx1ZSA/PyBbXSk7XG4gICAgdGhpcy5jb2x1bW5Hcm91cHMkLnNldChncm91cHMpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogSUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zJCgpO1xuICB9XG5cbiAgY29sdW1ucyQ6IFdyaXRhYmxlU2lnbmFsPElDb2x1bW5bXT4gPSBzaWduYWwoW10pO1xuICBjb2x1bW5Hcm91cHMkOiBXcml0YWJsZVNpZ25hbDxJR3JvdXBbXVtdPiA9IHNpZ25hbChbXSk7XG4gIHNob3dHcm91cHMkID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLmNvbHVtbkdyb3VwcyQoKS5sZW5ndGgpO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkZpbHRlcj86IGJvb2xlYW4gfCBJQ29sdW1uRmlsdGVyO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5GaWx0ZXJWYWx1ZSh2YWx1ZTogSUNvbHVtbkZpbHRlclZhbHVlKSB7XG4gICAgaWYgKHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlci5kaWZmKHZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkZpbHRlclZhbHVlID0geyAuLi52YWx1ZSB9O1xuICAgICAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi50aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSB9KTtcbiAgICAgICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvLyBlbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBjb2x1bW5GaWx0ZXJWYWx1ZSgpOiBJQ29sdW1uRmlsdGVyVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlclZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcblxuICBASW5wdXQoKSBjb2x1bW5Tb3J0ZXI/OiBib29sZWFuIHwgSVNvcnRlcjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZm9vdGVyID0gZmFsc2U7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhlYWRlciA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpdGVtcyh2YWx1ZTogSUl0ZW1bXSkge1xuICAgIGlmICh0aGlzLml0ZW1zRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0RpZmZlci5kaWZmKHZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5zZXRJdGVtcyh2YWx1ZSkgYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XG4gICAgICAgIHRoaXMuaXRlbXMkLnNldCh0aGlzLl9pdGVtcyk7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGdldENvbHVtbk5hbWVzRnJvbUl0ZW1zKHRoaXMuaXRlbXMkKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIGl0ZW1zJCA9IHNpZ25hbChbXSBhcyBBcnJheTxJSXRlbUludGVybmFsPik7XG4gIHByaXZhdGUgX2l0ZW1zOiBJSXRlbUludGVybmFsW10gPSBbXSBhcyBBcnJheTxUeXBlPElJdGVtSW50ZXJuYWw+PjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBzZXQgaXRlbXNQZXJQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlOiBudW1iZXIgPSAxMDtcblxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VMYWJlbDogc3RyaW5nID0gJ0l0ZW1zIHBlciBwYWdlOic7XG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgNTBdO1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VTZWxlY3Q/OiBib29sZWFuIHwgSXRlbXNQZXJQYWdlU2VsZWN0O1xuICBASW5wdXQoKSBsb2FkaW5nPzogYm9vbGVhbjtcbiAgQElucHV0KCkgbm9JdGVtc0xhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJ05vIGl0ZW1zIGZvdW5kJztcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGFnaW5hdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NlbGVjdGFibGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzZWxlY3RBbGwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzb3J0ZXJWYWx1ZSh2YWx1ZTogSVNvcnRlclZhbHVlKSB7XG4gICAgaWYgKHRoaXMuc29ydGVyVmFsdWVEaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLnNvcnRlclZhbHVlRGlmZmVyLmRpZmYodmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5fc29ydGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zb3J0ZXJWYWx1ZUNoYW5nZS5lbWl0KHsgLi4udmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNvcnRlclZhbHVlKCk6IElTb3J0ZXJWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc29ydGVyVmFsdWU6IElTb3J0ZXJWYWx1ZSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJsZUZpbHRlcihmaWx0ZXIpIHtcbiAgICB0aGlzLl90YWJsZUZpbHRlciA9IGZpbHRlcjtcbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJMYWJlbCA9IHR5cGVvZiBmaWx0ZXIubGFiZWwgPT09ICdzdHJpbmcnID8gZmlsdGVyLmxhYmVsIDogdGhpcy50YWJsZUZpbHRlckxhYmVsO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gdHlwZW9mIGZpbHRlci5wbGFjZWhvbGRlciA9PT0gJ3N0cmluZycgPyBmaWx0ZXIucGxhY2Vob2xkZXIgOiB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXI7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSB0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyA/IGZpbHRlci52YWx1ZSA6IHRoaXMudGFibGVGaWx0ZXJWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlRmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFibGVGaWx0ZXI/OiBib29sZWFuIHwgSVRhYmxlRmlsdGVyO1xuXG4gIEBJbnB1dCgpIHRhYmxlRmlsdGVyTGFiZWwgPSAnRmlsdGVyOic7XG4gIEBJbnB1dCgpIHRhYmxlRmlsdGVyUGxhY2Vob2xkZXIgPSAndHlwZSBzdHJpbmcuLi4nO1xuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJsZUZpbHRlclZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmxlRmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy8gZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgICB9XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUZpbHRlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFibGVGaWx0ZXJWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgdGFibGVCb2R5UHJvcHM/OiBJVGFibGVTZWN0aW9uUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVGb290UHJvcHM/OiBJVGFibGVTZWN0aW9uUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVIZWFkUHJvcHM/OiBJVGFibGVTZWN0aW9uUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVQcm9wcz86IElUYWJsZSA9IHt9O1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUl0ZW1bXT4gPSBuZXcgRXZlbnRFbWl0dGVyPElJdGVtW10+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBzb3J0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElTb3J0ZXJWYWx1ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPElTb3J0ZXJWYWx1ZT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2ZVBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSByb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUNvbHVtbkZpbHRlclZhbHVlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtbkZpbHRlclZhbHVlPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZmlsdGVyZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPElJdGVtSW50ZXJuYWxbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPElJdGVtSW50ZXJuYWxbXT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlKSBjb2x1bW5UZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG4gIHRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7IHRhYmxlRGV0YWlsczogbnVsbCwgdGFibGVEYXRhOiBudWxsIH07XG4gIGNvbHVtbkZpbHRlclRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7fTtcbiAgc3VtbWFyeVJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgaWYgKGNoaWxkLmlkLnN0YXJ0c1dpdGgoJ2NvbHVtbkZpbHRlcl8nKSkge1xuICAgICAgICB0aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmlkID09PSAndGFibGVTdW1tYXJ5Um93Jykge1xuICAgICAgICB0aGlzLnN1bW1hcnlSb3dUZW1wbGF0ZSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlcyA9IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXMgfTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZEFsbCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpO1xuICAgIGNvbnN0IHVuc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSBmYWxzZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkICYmIHVuc2VsZWN0ZWQgPyAnaW5kZXRlcm1pbmF0ZScgOiBzZWxlY3RlZDtcbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlclN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPyB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgOiAnJztcbiAgfVxuXG4gIGdldCBjb2x1bW5GaWx0ZXJTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA/IHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgOiB7fTtcbiAgfVxuXG4gIGdldCBudW1iZXJPZlBhZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZSA/IE1hdGguY2VpbCh0aGlzLnNvcnRlZEl0ZW1zLmxlbmd0aCAvIHRoaXMuX2l0ZW1zUGVyUGFnZSkgOiAxO1xuICB9XG5cbiAgZ2V0IGNvbHNwYW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZSA/IHRoaXMucmF3Q29sdW1uTmFtZXMkKCkubGVuZ3RoICsgMSA6IHRoaXMucmF3Q29sdW1uTmFtZXMkKCkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2UgPyAodGhpcy5fYWN0aXZlUGFnZSAtIDEpICogdGhpcy5faXRlbXNQZXJQYWdlIDogMDtcbiAgfVxuXG4gIGdldCBpdGVtc09uQWN0aXZlUGFnZSgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zLnNsaWNlKFxuICAgICAgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCxcbiAgICAgIHRoaXMuZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXggKyB0aGlzLl9pdGVtc1BlclBhZ2VcbiAgICApO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlID8gdGhpcy5pdGVtc09uQWN0aXZlUGFnZSA6IHRoaXMuc29ydGVkSXRlbXMgPz8gW107XG4gIH1cblxuICByYXdDb2x1bW5OYW1lcyQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGdldENvbHVtbk5hbWVzKHRoaXMuY29sdW1ucyQoKSwgdGhpcy5pdGVtcyQoKSk7XG4gIH0pO1xuXG4gIGl0ZW1zRGF0YUNvbHVtbnMkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yYXdDb2x1bW5OYW1lcyQoKS5maWx0ZXIoKG5hbWUpID0+IGdldENvbHVtbk5hbWVzRnJvbUl0ZW1zKHRoaXMuaXRlbXMkKCkpLmluY2x1ZGVzKG5hbWUpKSk7XG5cbiAgZ2V0IHNvcnRlZEl0ZW1zKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgY29uc3QgY29sdW1uS2V5ID0gdGhpcy5zb3J0ZXJWYWx1ZS5jb2x1bW47XG4gICAgaWYgKFxuICAgICAgIWNvbHVtbktleSB8fFxuICAgICAgIXRoaXMuaXRlbXNEYXRhQ29sdW1ucyQoKS5pbmNsdWRlcyhjb2x1bW5LZXkpIHx8XG4gICAgICAodGhpcy5jb2x1bW5Tb3J0ZXIgJiZcbiAgICAgICAgdHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0aGlzLmNvbHVtblNvcnRlci5leHRlcm5hbClcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyZWQ7XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlRmlsdGVyZWQgPSBbLi4udGhpcy50YWJsZUZpbHRlcmVkXTtcblxuICAgIC8vIGlmIHZhbHVlcyBpbiBjb2x1bW4gYXJlIHRvIGJlIHNvcnRlZCBieSBudW1lcmljIHZhbHVlIHRoZXkgYWxsIGhhdmUgdG8gYmUgYSB0eXBlIG9mIG51bWJlclxuICAgIGNvbnN0IGZsaXAgPSB0aGlzLnNvcnRlclZhbHVlLnN0YXRlID09PSAnYXNjJyA/IDEgOiB0aGlzLnNvcnRlclZhbHVlLnN0YXRlID09PSAnZGVzYycgPyAtMSA6IDA7XG5cbiAgICBpZiAoZmxpcCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRhYmxlRmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50Q29sdW1uPy5zb3J0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IHRhYmxlRmlsdGVyZWQuc2xpY2UoKS5zb3J0KGN1cnJlbnRDb2x1bW4uc29ydGVyKTtcbiAgICAgIHJldHVybiBmbGlwIDwgMCA/IHNvcnRlZC5yZXZlcnNlKCkgOiBzb3J0ZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGFyZUZuID0gKGl0ZW0xOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0sIGl0ZW0yOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IGl0ZW0xW2NvbHVtbktleV07XG4gICAgICBjb25zdCB2YWx1ZTIgPSBpdGVtMltjb2x1bW5LZXldO1xuICAgICAgY29uc3QgYSA9IHR5cGVvZiB2YWx1ZTEgPT09ICdudW1iZXInID8gdmFsdWUxIDogU3RyaW5nKHZhbHVlMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGIgPSB0eXBlb2YgdmFsdWUyID09PSAnbnVtYmVyJyA/IHZhbHVlMiA6IFN0cmluZyh2YWx1ZTIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gYSA+IGIgPyAxICogZmxpcCA6IGIgPiBhID8gLTEgKiBmbGlwIDogMDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRhYmxlRmlsdGVyZWQuc2xpY2UoKS5zb3J0KGNvbXBhcmVGbik7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJFdmVudCgpOiAnY2hhbmdlJyB8ICdpbnB1dCcge1xuICAgIHJldHVybiAodHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIubGF6eSkgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gIH07XG5cbiAgcHJpdmF0ZSBfY29sdW1uRmlsdGVyZWQ6IElJdGVtSW50ZXJuYWxbXSA9IFtdO1xuXG4gIGdldCBjb2x1bW5GaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBfaXRlbXMgPSB0aGlzLl9pdGVtcztcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciAmJlxuICAgICAgdHlwZW9mIHRoaXMuY29sdW1uRmlsdGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIuZXh0ZXJuYWxcbiAgICApIHtcbiAgICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xuICAgICAgcmV0dXJuIF9pdGVtcztcbiAgICB9XG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHZhbHVlKGl0ZW1ba2V5XSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2x1bW4gPT4gY29sdW1uLmtleSA9PT0ga2V5KTtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudENvbHVtbj8uZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICh0eXBlb2YgY3VycmVudENvbHVtbi5maWx0ZXIgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudENvbHVtbi5maWx0ZXIoaXRlbSwgdmFsdWUpKSA/PyAhdmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbHVtbkZpbHRlciA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb2x1bW5GaWx0ZXIgJiYgdGhpcy5pdGVtc0RhdGFDb2x1bW5zJCgpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX2l0ZW1zID0gX2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gU3RyaW5nKGl0ZW1ba2V5XSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjb2x1bW5GaWx0ZXIpKTtcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xuICAgIHJldHVybiBfaXRlbXM7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuY29sdW1uRmlsdGVyZWQ7XG4gICAgaWYgKFxuICAgICAgIXRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fFxuICAgICAgKHRoaXMudGFibGVGaWx0ZXIgJiYgdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJTdGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlQ29udGFpbkZpbHRlciA9ICh2YWw6IGFueSkgPT4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XG4gICAgICByZXR1cm4gISF0aGlzLml0ZW1zRGF0YUNvbHVtbnMkKCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5GaWx0ZXIoaXRlbVtrZXldKSk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlci5kaWZmKGl0ZW1zKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgZ2V0IGlzRmlsdGVyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fCB0aGlzLnNvcnRlclZhbHVlPy5jb2x1bW4gfHwgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbkZpbHRlclN0YXRlKS5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbXMoaXRlbXM6IElJdGVtW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIF9fX2lkOiBpdGVtWydfX19pZCddID8/IGluZGV4IH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIDxJSXRlbUludGVybmFsPltdO1xuICB9XG5cbiAgaGFuZGxlU29ydENoYW5nZSgkZXZlbnQ6IHsgY29sdW1uS2V5OiBzdHJpbmc7IGluZGV4OiBudW1iZXI7IG9yZGVyPzogU29ydE9yZGVyOyB9KSB7XG4gICAgdGhpcy5oYW5kbGVTb3J0ZXJDaGFuZ2UoJGV2ZW50LmNvbHVtbktleSwgJGV2ZW50LmluZGV4LCAkZXZlbnQub3JkZXIpO1xuICB9XG5cbiAgaXNTb3J0YWJsZShpOiBudW1iZXIpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RhdGFDb2x1bW4gPSB0aGlzLml0ZW1zRGF0YUNvbHVtbnMkKCkuaW5jbHVkZXModGhpcy5yYXdDb2x1bW5OYW1lcyQoKVtpXSk7XG4gICAgbGV0IGNvbHVtbjtcbiAgICBpZiAodGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgY29sdW1uID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb2x1bW5Tb3J0ZXIgJiZcbiAgICAgICghdGhpcy5jb2x1bW5zLmxlbmd0aCB8fFxuICAgICAgICB0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAodHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBjb2x1bW4uc29ydGVyID09PSAndW5kZWZpbmVkJyB8fCBjb2x1bW4uc29ydGVyKSlcbiAgICAgICkgJiYgaXNEYXRhQ29sdW1uXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZVNvcnRlckNoYW5nZShjb2x1bW46IHN0cmluZywgaW5kZXg6IG51bWJlciwgb3JkZXI/OiBTb3J0T3JkZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTb3J0YWJsZShpbmRleCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9pZiBjb2x1bW4gY2hhbmdlZCBvciBzb3J0IHdhcyBkZXNjZW5kaW5nIGNoYW5nZSBhc2MgdG8gdHJ1ZVxuICAgIGNvbnN0IHNvcnRlclN0YXRlID0geyAuLi50aGlzLnNvcnRlclZhbHVlIH07XG5cbiAgICBpZiAoc29ydGVyU3RhdGUuY29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIGNvbnN0IHJlc2V0dGFibGUgPSAodHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLmNvbHVtblNvcnRlci5yZXNldGFibGUpO1xuICAgICAgY29uc3Qgc3RhdGUgPSBzb3J0ZXJTdGF0ZS5zdGF0ZTtcbiAgICAgIGlmIChvcmRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNvcnRlclN0YXRlLnN0YXRlID0gc3RhdGUgPT09IDAgPyAnYXNjJyA6IHN0YXRlID09PSAnYXNjJyA/ICdkZXNjJyA6IHJlc2V0dGFibGUgPyAwIDogJ2FzYyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3J0ZXJTdGF0ZS5zdGF0ZSA9IChvcmRlciA9PT0gMCAmJiAhcmVzZXR0YWJsZSkgPyBzdGF0ZSA6IG9yZGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzb3J0ZXJTdGF0ZS5jb2x1bW4gPSBjb2x1bW47XG4gICAgICBzb3J0ZXJTdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgIH1cbiAgICB0aGlzLnNvcnRlclZhbHVlID0geyAuLi5zb3J0ZXJTdGF0ZSB9O1xuICB9XG5cbiAgc2V0QWN0aXZlUGFnZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlUGFnZSA9ICRldmVudDtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclZhbHVlLCBbYCR7Y29sdW1ufWBdOiB2YWx1ZSB9O1xuICB9XG5cbiAgaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50OiB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkge1xuICAgIGNvbnN0IHsgdmFsdWUsIHR5cGUgfSA9ICRldmVudDtcbiAgICBjb25zdCBpc0xhenkgPSB0eXBlb2YgdGhpcy50YWJsZUZpbHRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy50YWJsZUZpbHRlci5sYXp5ID09PSB0cnVlO1xuICAgIGlmICgoKGlzTGF6eSAmJiB0eXBlID09PSAnaW5wdXQnKSB8fCAoIWlzTGF6eSAmJiB0eXBlID09PSAnY2hhbmdlJykpICYmIHZhbHVlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBjbGVhbigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID0ge307XG4gICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gJyc7XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZSA9IHt9O1xuICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy9lbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICB9XG5cbiAgaGFuZGxlSXRlbXNQZXJQYWdlQ2hhbmdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2l0ZW1zUGVyUGFnZSkge1xuICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gdmFsdWU7XG4gICAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dDaGVja2VkKCRldmVudDogRXZlbnQsIGl0ZW06IElJdGVtSW50ZXJuYWwpIHtcbiAgICBpdGVtLl9zZWxlY3RlZCA9IGl0ZW0uX3NlbGVjdGFibGUgIT09IGZhbHNlICYmICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQWxsU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRBbGwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbTogSUl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgX3NlbGVjdGVkOiAoaXRlbS5fc2VsZWN0YWJsZSAhPT0gZmFsc2UgPyAkZXZlbnQgOiAhIWl0ZW0uX3NlbGVjdGVkKSB9O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBbGxTdWJqZWN0Lm5leHQoJGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEFsbFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkQWxsKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGhhbmRsZVJvd0NsaWNrKHBhcmFtOiB7ICRldmVudDogTW91c2VFdmVudDsgaXRlbTogSUl0ZW1JbnRlcm5hbDsgaTogbnVtYmVyIH0pIHtcbiAgICBjb25zdCB7ICRldmVudCwgaXRlbSwgaSB9ID0geyAuLi5wYXJhbSB9O1xuICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRoaXMucmF3Q29sdW1uTmFtZXMkKCk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuX3NlbGVjdGFibGU7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGdldENsaWNrZWRDb2x1bW5OYW1lKHRhcmdldCwgY29sdW1uTmFtZXMsIHNlbGVjdGFibGUpO1xuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IGl0ZW06IGl0ZW0sIGluZGV4OiBpICsgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCwgY29sdW1uTmFtZSwgZXZlbnQ6ICRldmVudCB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1uRmlsdGVyVmFsdWUnXSkge1xuICAgICAgY29uc3QgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSA/PyB7fSkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlRmlsdGVyVmFsdWUnXSkge1xuICAgICAgY29uc3QgdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZSA9IGNoYW5nZXNbJ3RhYmxlRmlsdGVyVmFsdWUnXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIml0ZW1zUGVyUGFnZVNlbGVjdCB8fCB0YWJsZUZpbHRlciB8fCBjbGVhbmVyIHx8IHRlbXBsYXRlc1sndGFibGVDdXN0b21IZWFkZXInXVwiIGNsYXNzPVwicm93IG15LTIgbXgtMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wXCIgKm5nSWY9XCJ0YWJsZUZpbHRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUZpbHRlclRlbXBsYXRlXCIgLz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIiAqbmdJZj1cImNsZWFuZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVDbGVhbmVyVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1sndGFibGVDdXN0b21IZWFkZXInXSB8fCB0YWJsZUN1c3RvbUhlYWRlclRlbXBsYXRlXCIgLz5cblxuICA8bmctdGVtcGxhdGUgI3RhYmxlRmlsdGVyVGVtcGxhdGU+XG4gICAgPGMtc21hcnQtdGFibGUtZmlsdGVyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cInRhYmxlRmlsdGVyXCJcbiAgICAgIFtkZWxheV09XCIzMDBcIlxuICAgICAgW2ZpbHRlckxhYmVsXT1cInRhYmxlRmlsdGVyTGFiZWxcIlxuICAgICAgW2ZpbHRlclBsYWNlaG9sZGVyXT1cInRhYmxlRmlsdGVyUGxhY2Vob2xkZXJcIlxuICAgICAgW29uRXZlbnRdPVwidGFibGVGaWx0ZXJFdmVudFwiXG4gICAgICBbdmFsdWVdPVwidGFibGVGaWx0ZXJTdGF0ZVwiXG4gICAgICBjRmlsdGVySW5wdXRcbiAgICA+XG4gICAgPC9jLXNtYXJ0LXRhYmxlLWZpbHRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI3RhYmxlQ2xlYW5lclRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgIChjbGljayk9XCJjbGVhbigkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiY2xlYW5lclwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzRmlsdGVyZWRcIlxuICAgICAgW25nQ2xhc3NdPVwieydtcy0xJzogdGFibGVGaWx0ZXJ9XCJcbiAgICAgIGNCdXR0b25cbiAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVySWNvblRlbXBsYXRlXCIgLz5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI3RhYmxlQ3VzdG9tSGVhZGVyVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHAtMCBtcy1hdXRvXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY3VzdG9tSGVhZGVyXVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICA8dGFibGUgW2FsaWduXT1cInRhYmxlUHJvcHM/LmFsaWduXCJcbiAgICAgICAgIFtib3JkZXJDb2xvcl09XCJ0YWJsZVByb3BzPy5ib3JkZXJDb2xvclwiXG4gICAgICAgICBbYm9yZGVyZWRdPVwidGFibGVQcm9wcz8uYm9yZGVyZWQgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtib3JkZXJsZXNzXT1cInRhYmxlUHJvcHM/LmJvcmRlcmxlc3MgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtjYXB0aW9uXT1cInRhYmxlUHJvcHM/LmNhcHRpb25cIlxuICAgICAgICAgW2NvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtob3Zlcl09XCJ0YWJsZVByb3BzPy5ob3ZlciA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgW3Jlc3BvbnNpdmVdPVwidGFibGVQcm9wcz8ucmVzcG9uc2l2ZVwiXG4gICAgICAgICBbc21hbGxdPVwidGFibGVQcm9wcz8uc21hbGwgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtzdHJpcGVkXT1cInRhYmxlUHJvcHM/LnN0cmlwZWQgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxuICAgICAgICAgY1RhYmxlXG4gID5cbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXG4gICAgICAoY29sdW1uRmlsdGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlQ29sdW1uRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoc29ydGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiaGVhZGVyXCJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVIZWFkUHJvcHM/LmFsaWduXCJcbiAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVIZWFkUHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlSGVhZFByb3BzPy5jb2xvclwiXG4gICAgICBbY29sdW1uRmlsdGVyU3RhdGVdPVwiY29sdW1uRmlsdGVyU3RhdGVcIlxuICAgICAgW2NvbHVtbkZpbHRlclRlbXBsYXRlc109XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNcIlxuICAgICAgW2NvbHVtbkZpbHRlcl09XCJjb2x1bW5GaWx0ZXJcIlxuICAgICAgW2NvbHVtblNvcnRlcl09XCJjb2x1bW5Tb3J0ZXJcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1ucyQoKVwiXG4gICAgICBbY29sdW1uR3JvdXBzXT1cImNvbHVtbkdyb3VwcyQoKVwiXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXG4gICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgIFtzZWxlY3RlZEFsbF09XCIoc2VsZWN0ZWRBbGxTdWJqZWN0IHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgIFtzaG93R3JvdXBzXT1cInNob3dHcm91cHMkKClcIlxuICAgICAgW3NvcnRlclZhbHVlXT1cInNvcnRlclZhbHVlXCJcbiAgICAvPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRib2R5RGVmYXVsdFRlbXBsYXRlXCIgLz5cblxuICAgIDx0Zm9vdCAqbmdJZj1cInN1bW1hcnlSb3dUZW1wbGF0ZSAmJiAhZm9vdGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1bW1hcnlSb3dUZW1wbGF0ZVwiIC8+XG4gICAgPC90Zm9vdD5cblxuICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cImZvb3RlclwiXG4gICAgICBbY0FsaWduXT1cInRhYmxlRm9vdFByb3BzPy5hbGlnblwiXG4gICAgICBbY0h0bWxBdHRyXT1cInRhYmxlRm9vdFByb3BzPy5hdHRyaWJ1dGVzID8/IHt9XCJcbiAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUZvb3RQcm9wcz8uY29sb3JcIlxuICAgICAgW2NvbHVtbkZpbHRlclRlbXBsYXRlc109XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNcIlxuICAgICAgW2NvbHVtblNvcnRlcl09XCJjb2x1bW5Tb3J0ZXJcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1ucyQoKVwiXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXG4gICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgIFtzZWxlY3RlZEFsbF09XCIoc2VsZWN0ZWRBbGxTdWJqZWN0IHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgIFtzb3J0ZXJWYWx1ZV09XCJzb3J0ZXJWYWx1ZVwiXG4gICAgICBbc3VtbWFyeVJvd1RlbXBsYXRlXT1cInN1bW1hcnlSb3dUZW1wbGF0ZVwiXG4gICAgICBjb21wb25lbnQ9XCJ0Zm9vdFwiXG4gICAgLz5cblxuICA8L3RhYmxlPlxuICA8Yy1lbGVtZW50LWNvdmVyXG4gICAgKm5nSWY9XCJsb2FkaW5nXCJcbiAgICBbYm91bmRhcmllc109XCJbXG4gICAgICB7IHNpZGVzOiBbJ3RvcCddLCBxdWVyeTogJ3RkJyB9LFxuICAgICAgeyBzaWRlczogWydib3R0b20nXSwgcXVlcnk6ICd0Ym9keScgfVxuICAgIF1cIlxuICAvPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgW25nSWZdPVwicGFnaW5hdGlvbiB8fCBpdGVtc1BlclBhZ2VTZWxlY3RcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxjLXNtYXJ0LXBhZ2luYXRpb25cbiAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcbiAgICAgICAgKm5nSWY9XCJwYWdpbmF0aW9uICYmIG51bWJlck9mUGFnZXMgPiAxXCJcbiAgICAgICAgW2FjdGl2ZVBhZ2VdPVwiYWN0aXZlUGFnZVwiXG4gICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIG1zLWF1dG9cIj5cbiAgICAgIDxjLXNtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yXG4gICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwiaGFuZGxlSXRlbXNQZXJQYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAqbmdJZj1cIml0ZW1zUGVyUGFnZVNlbGVjdFwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VMYWJlbF09XCJpdGVtc1BlclBhZ2VMYWJlbFwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cIml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGJvZHlEZWZhdWx0VGVtcGxhdGU+XG4gIDx0Ym9keSBbY0h0bWxBdHRyXT1cInRhYmxlQm9keVByb3BzPy5hdHRyaWJ1dGVzID8/IHt9XCJcbiAgICAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUJvZHlQcm9wcz8uY29sb3JcIlxuICAgICAgICAgW2NBbGlnbl09XCJ0YWJsZUJvZHlQcm9wcz8uYWxpZ25cIlxuICA+XG4gIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtaXRlbSBbbmdGb3JPZl09XCJjdXJyZW50SXRlbXNcIiBsZXQtY250PVwiY291bnRcIiBsZXQtaT1cImluZGV4XCIgbGV0LWlzRXZlbj1cImV2ZW5cIiBsZXQtaXNPZGQ9XCJvZGRcIj5cbiAgICA8dHIgW3RhYmluZGV4XT1cImNsaWNrYWJsZVJvd3MgPyAwIDogLTFcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7Y3Vyc29yOiBjbGlja2FibGVSb3dzID8gJ3BvaW50ZXInIDogJ2F1dG8nfVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVSb3dDbGljayh7JGV2ZW50LCBpdGVtLCBpfSlcIlxuICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0uX3Byb3BzPy5hY3RpdmUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0uX3Byb3BzPy5jb2xvclwiXG4gICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcbiAgICA+XG4gICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICBbY1RhYmxlQ29sb3JdPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmNvbG9yXCJcbiAgICAgICAgICBbY0FsaWduXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hbGlnblwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLl9zZWxlY3RlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICBjRm9ybUNoZWNrSW5wdXRcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoaXRlbT8uX3NlbGVjdGFibGUgPT09IGZhbHNlKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICA+XG4gICAgICA8L3RkPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW4gW25nRm9yT2ZdPVwiY29sdW1ucyQoKVwiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZURhdGEnXSB8fCBjb2x1bW5EZWZhdWx0VGVtcGxhdGU7IGNvbnRleHQ6IHtjb2x1bW4sIGl0ZW0sIGNvbHVtbk5hbWU6IGdldENvbHVtbktleShjb2x1bW4pLCB0ZENvbnRlbnQ6IGl0ZW1bY29sdW1uLmtleV0sIGNlbGxQcm9wczogZ2V0VGFibGVEYXRhQ2VsbFByb3BzKGNvbHVtbiwgaXRlbSkgfVwiIC8+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdHI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ11cIj5cbiAgICAgIDwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93RGV0YWlsc0RlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPi0tPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIj48L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInAtMFwiPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZURldGFpbHMnXTsgY29udGV4dDoge2l0ZW0sIGluZGV4OiBpfVwiIC8+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0l0ZW1zRGVmYXVsdFRlbXBsYXRlXCIgLz5cbiAgPC90Ym9keT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjY29sdW1uRGVmYXVsdFRlbXBsYXRlXG4gIGxldC1jZWxsUHJvcHM9XCJjZWxsUHJvcHNcIlxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcbiAgbGV0LWNvbHVtbk5hbWU9XCJjb2x1bW5OYW1lXCJcbiAgbGV0LWl0ZW09XCJpdGVtXCJcbiAgbGV0LXRkQ29udGVudD1cInRkQ29udGVudFwiXG4+XG4gIDx0ZFxuICAgICpuZ0lmPVwidGRDb250ZW50ICE9PSB1bmRlZmluZWRcIlxuICAgIFtjVGFibGVBY3RpdmVdPVwiY2VsbFByb3BzPy5bJ2FjdGl2ZSddXCJcbiAgICBbY1RhYmxlQ29sb3JdPVwiY2VsbFByb3BzPy5jb2xvciA/PyBjb2x1bW5bY29sdW1uTmFtZV0/Ll9jb2xQcm9wcz8uY29sb3IgPz8gdW5kZWZpbmVkXCJcbiAgICBbY0FsaWduXT1cImNlbGxQcm9wcz8uYWxpZ25cIlxuICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlRGF0YUNlbGxDbGFzcyhjb2x1bW4sIGl0ZW0pXCJcbiAgICBbY0h0bWxBdHRyXT1cImNlbGxQcm9wcz8uWydfYXR0cmlidXRlcyddID8/IHVuZGVmaW5lZFwiXG4gICAgW25nU3R5bGVdPVwiZ2V0VGFibGVEYXRhQ2VsbFN0eWxlcyhjb2x1bW4sIGl0ZW0pXCJcbiAgPlxuICAgIHt7dGRDb250ZW50fX1cbiAgPC90ZD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS08bmctdGVtcGxhdGUgI3Jvd0RldGFpbHNEZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWluZGV4Pi0tPlxuPCEtLSAgPHRyPjx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiB0YWJpbmRleD1cIi0xXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiPjwvdGQ+PC90cj4tLT5cbjwhLS0gIDx0ciBjbGFzcz1cInAtMFwiPi0tPlxuPCEtLSAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj4tLT5cbjwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy50YWJsZURldGFpbHNcIj48L25nLWNvbnRhaW5lcj4tLT5cbjwhLS0gICAgPC90ZD4tLT5cbjwhLS0gIDwvdHI+LS0+XG48IS0tPC9uZy10ZW1wbGF0ZT4tLT5cblxuPG5nLXRlbXBsYXRlICNub0l0ZW1zRGVmYXVsdFRlbXBsYXRlPlxuICA8dHIgKm5nSWY9XCIhY3VycmVudEl0ZW1zLmxlbmd0aFwiPlxuICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+e3tub0l0ZW1zTGFiZWx9fTwvdGQ+XG4gIDwvdHI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tdG9kbzogZmlsdGVySWNvbkN1c3RvbVRlbXBsYXRlLS0+XG48bmctdGVtcGxhdGUgI2ZpbHRlckljb25UZW1wbGF0ZT5cbiAgPHN2ZyB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcG9pbnRlci1ldmVudHM9XCJub25lXCIgcm9sZT1cImltZ1wiXG4gICAgICAgY2xhc3M9XCJpY29uIGljb24tY3VzdG9tLXNpemVcIiB3aWR0aD1cIjE4XCI+XG4gICAgPHBvbHlnb25cbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcbiAgICAgIHBvaW50cz1cIjQwIDE2IDQwIDUzLjgyOCAxMDkuMDI0IDEzNiAxNTAuODE1IDEzNiA3Ni44OTYgNDggNDU5LjUxIDQ4IDMwNCAyNDIuMzg4IDMwNCA0MDEuMzczIDI0MS4zNzMgNDY0IDI0MCA0NjQgMjQwIDM2OCAyMDggMzY4IDIwOCA0OTYgMjU0LjYyNyA0OTYgMzM2IDQxNC42MjcgMzM2IDI1My42MTIgNDk2IDUzLjYxMiA0OTYgMTYgNDAgMTZcIlxuICAgICAgY2xhc3M9XCJjaS1wcmltYXJ5XCI+XG4gICAgPC9wb2x5Z29uPlxuICAgIDxwb2x5Z29uXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXG4gICAgICBwb2ludHM9XCIxNjYuNDAzIDI0OC4yMjUgMjI2Ljg2NCAxODcuNzYzIDIwNC4yMzcgMTY1LjEzNSAxNDMuNzc1IDIyNS41OTcgODMuMzEzIDE2NS4xMzUgNjAuNjg3IDE4Ny43NjMgMTIxLjE0OCAyNDguMjI1IDYwLjY4NyAzMDguNjg3IDgzLjMxMyAzMzEuMzE0IDE0My43NzUgMjcwLjg1MiAyMDQuMjM3IDMzMS4zMTQgMjI2Ljg2NCAzMDguNjg3IDE2Ni40MDMgMjQ4LjIyNVwiXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIj5cbiAgICA8L3BvbHlnb24+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|