verben-ng-ui 1.3.4 → 1.3.6
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/src/lib/components/data-columns/data-columns.component.mjs +45 -9
- package/esm2022/src/lib/components/data-filter/data-filter.component.mjs +179 -24
- package/esm2022/src/lib/components/data-filter/data-filter.types.mjs +9 -1
- package/esm2022/src/lib/components/data-table/data-table.types.mjs +18 -2
- package/esm2022/src/lib/components/data-view/data-view.component.mjs +3 -3
- package/esm2022/src/lib/components/date-picker/date-picker.component.mjs +3 -3
- package/fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs +43 -7
- package/fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs +185 -22
- package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs +18 -1
- package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs +2 -2
- package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs +2 -2
- package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs.map +1 -1
- package/package.json +52 -52
- package/src/lib/components/data-columns/data-columns.component.d.ts +12 -3
- package/src/lib/components/data-filter/data-filter.component.d.ts +59 -7
- package/src/lib/components/data-filter/data-filter.types.d.ts +4 -2
- package/src/lib/components/data-table/data-table.types.d.ts +31 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import {
|
|
1
|
+
import { Component, Input, Output, EventEmitter, } from '@angular/core';
|
|
2
|
+
import { ColumnValueType, } from 'verben-ng-ui/src/lib/components/data-table';
|
|
3
|
+
import { STRING_OPERATORS, NUMBER_OPERATORS, DATE_OPERATORS, BOOL_OPERATORS, ENUM_OPERATORS, } from './data-filter.types';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@angular/common";
|
|
5
6
|
import * as i2 from "@angular/forms";
|
|
@@ -10,6 +11,12 @@ import * as i6 from "verben-ng-ui/src/lib/verbena-input";
|
|
|
10
11
|
export class DataFilterComponent {
|
|
11
12
|
columns;
|
|
12
13
|
data;
|
|
14
|
+
/**
|
|
15
|
+
* Optional restored filters: the panel opens pre-populated with these as
|
|
16
|
+
* selected filter chips. Applied once (the first time a non-empty value
|
|
17
|
+
* arrives) so it never clobbers the user's in-progress edits afterwards.
|
|
18
|
+
*/
|
|
19
|
+
initialFilters;
|
|
13
20
|
filterApplied = new EventEmitter();
|
|
14
21
|
resetFilter = new EventEmitter();
|
|
15
22
|
filterableColumns = [];
|
|
@@ -19,8 +26,48 @@ export class DataFilterComponent {
|
|
|
19
26
|
showAllFilters = false;
|
|
20
27
|
maxVisibleItems = 3;
|
|
21
28
|
currentColumnType = null;
|
|
29
|
+
/**
|
|
30
|
+
* Options for the value dropdown when the selected column is bool or enum.
|
|
31
|
+
* Always normalised to `{ label, value }` so the template binds one shape.
|
|
32
|
+
*/
|
|
33
|
+
valueOptions = [];
|
|
34
|
+
/**
|
|
35
|
+
* Held as strings rather than booleans: `verben-drop-down` gates its selected
|
|
36
|
+
* label on a truthiness check, so an option valued `false` would render as
|
|
37
|
+
* though nothing were picked. Coerced back to a boolean in `addFilter`.
|
|
38
|
+
*/
|
|
39
|
+
boolOptions = [
|
|
40
|
+
{ label: 'Yes', value: 'true' },
|
|
41
|
+
{ label: 'No', value: 'false' },
|
|
42
|
+
];
|
|
43
|
+
// Set once the user edits the panel, so restored/host filters no longer
|
|
44
|
+
// overwrite their in-progress work.
|
|
45
|
+
userTouched = false;
|
|
22
46
|
ngOnInit() {
|
|
23
47
|
this.initializeFilterableColumns();
|
|
48
|
+
this.hydrateSavedFilters();
|
|
49
|
+
}
|
|
50
|
+
ngOnChanges(changes) {
|
|
51
|
+
// Pick up filters restored asynchronously by the host after first render.
|
|
52
|
+
if (changes['initialFilters']) {
|
|
53
|
+
this.hydrateSavedFilters();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Seed the saved-filter chips from the restored filters. Skipped once the user
|
|
58
|
+
* has touched the panel so it never overwrites their in-progress edits.
|
|
59
|
+
*/
|
|
60
|
+
hydrateSavedFilters() {
|
|
61
|
+
if (this.userTouched)
|
|
62
|
+
return;
|
|
63
|
+
this.savedFilters = (this.initialFilters ?? []).map((filter) => ({
|
|
64
|
+
...filter,
|
|
65
|
+
selected: true,
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
/** Marks the panel as user-edited (called from template interactions). */
|
|
69
|
+
markTouched() {
|
|
70
|
+
this.userTouched = true;
|
|
24
71
|
}
|
|
25
72
|
initializeFilterableColumns() {
|
|
26
73
|
this.filterableColumns = this.columns.filter((col) => col.accessorKey);
|
|
@@ -34,7 +81,13 @@ export class DataFilterComponent {
|
|
|
34
81
|
this.currentFilter.operator = undefined;
|
|
35
82
|
this.currentFilter.value = undefined;
|
|
36
83
|
// Determine column type and set available operators
|
|
37
|
-
this.currentColumnType = this.
|
|
84
|
+
this.currentColumnType = this.resolveColumnType(column);
|
|
85
|
+
this.valueOptions =
|
|
86
|
+
this.currentColumnType === 'bool'
|
|
87
|
+
? this.boolOptions
|
|
88
|
+
: this.currentColumnType === 'enum'
|
|
89
|
+
? this.normalizeValueOptions(column.valueOptions)
|
|
90
|
+
: [];
|
|
38
91
|
switch (this.currentColumnType) {
|
|
39
92
|
case 'string':
|
|
40
93
|
this.availableOperators = STRING_OPERATORS;
|
|
@@ -45,23 +98,34 @@ export class DataFilterComponent {
|
|
|
45
98
|
case 'date':
|
|
46
99
|
this.availableOperators = DATE_OPERATORS;
|
|
47
100
|
break;
|
|
101
|
+
case 'bool':
|
|
102
|
+
this.availableOperators = BOOL_OPERATORS;
|
|
103
|
+
break;
|
|
104
|
+
case 'enum':
|
|
105
|
+
this.availableOperators = ENUM_OPERATORS;
|
|
106
|
+
break;
|
|
48
107
|
default:
|
|
49
108
|
this.availableOperators = [];
|
|
50
109
|
}
|
|
51
110
|
}
|
|
52
111
|
addFilter() {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
112
|
+
const value = this.currentFilter.value;
|
|
113
|
+
// Checked explicitly rather than for falsiness: `false` is a valid bool
|
|
114
|
+
// filter and `0` a valid number one.
|
|
115
|
+
const hasValue = value !== undefined && value !== null && value !== '';
|
|
116
|
+
if (!this.currentFilter.columnId || !this.currentFilter.operator || !hasValue) {
|
|
56
117
|
return;
|
|
57
118
|
}
|
|
58
119
|
const newFilter = {
|
|
59
120
|
columnId: this.currentFilter.columnId,
|
|
60
121
|
operator: this.currentFilter.operator,
|
|
61
|
-
|
|
122
|
+
// Bool values round-trip through the dropdown as strings; hosts receive
|
|
123
|
+
// a real boolean.
|
|
124
|
+
value: this.currentColumnType === 'bool' ? value === 'true' : value,
|
|
62
125
|
selected: true,
|
|
63
126
|
};
|
|
64
127
|
this.savedFilters.unshift(newFilter);
|
|
128
|
+
this.userTouched = true;
|
|
65
129
|
this.resetCurrentFilter();
|
|
66
130
|
}
|
|
67
131
|
getFilterDescription(filter) {
|
|
@@ -70,46 +134,135 @@ export class DataFilterComponent {
|
|
|
70
134
|
return '';
|
|
71
135
|
const columnName = typeof column.header === 'function' ? column.header({}) : column.header;
|
|
72
136
|
const operator = this.getOperatorLabel(filter.operator);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
137
|
+
return `${columnName} ${operator} ${this.getValueLabel(column, filter.value)}`;
|
|
138
|
+
}
|
|
139
|
+
/** Renders a stored filter value the way it was chosen, not as raw data. */
|
|
140
|
+
getValueLabel(column, value) {
|
|
141
|
+
if (value instanceof Date)
|
|
142
|
+
return value.toLocaleDateString();
|
|
143
|
+
if (typeof value === 'boolean')
|
|
144
|
+
return value ? 'Yes' : 'No';
|
|
145
|
+
// The native date input yields a 'YYYY-MM-DD' string; restored filters may
|
|
146
|
+
// carry one too. Parsed as local time — `new Date('2026-07-28')` is treated
|
|
147
|
+
// as UTC and would display as the previous day west of Greenwich.
|
|
148
|
+
if (typeof value === 'string' && this.isDateString(value)) {
|
|
149
|
+
const [year, month, day] = value.slice(0, 10).split('-').map(Number);
|
|
150
|
+
return new Date(year, month - 1, day).toLocaleDateString();
|
|
76
151
|
}
|
|
77
|
-
|
|
152
|
+
const option = this.normalizeValueOptions(column.valueOptions).find((candidate) => candidate.value === value);
|
|
153
|
+
return option ? option.label : `${value}`;
|
|
78
154
|
}
|
|
79
155
|
getOperatorLabel(operatorValue) {
|
|
80
156
|
const operator = [
|
|
81
157
|
...STRING_OPERATORS,
|
|
82
158
|
...NUMBER_OPERATORS,
|
|
83
159
|
...DATE_OPERATORS,
|
|
160
|
+
...BOOL_OPERATORS,
|
|
161
|
+
...ENUM_OPERATORS,
|
|
84
162
|
].find((op) => op.value === operatorValue);
|
|
85
163
|
return operator ? operator.label.toLowerCase() : operatorValue;
|
|
86
164
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
165
|
+
/**
|
|
166
|
+
* Prefers the type declared on the column, falling back to inspecting the data
|
|
167
|
+
* only when the host has not declared one.
|
|
168
|
+
*/
|
|
169
|
+
resolveColumnType(column) {
|
|
170
|
+
if (column.valueType) {
|
|
171
|
+
// An Enum with no declared members has nothing to populate a dropdown
|
|
172
|
+
// with, so it degrades to a free-text filter rather than an empty select.
|
|
173
|
+
if (column.valueType === ColumnValueType.Enum &&
|
|
174
|
+
!this.normalizeValueOptions(column.valueOptions).length) {
|
|
175
|
+
return 'string';
|
|
176
|
+
}
|
|
177
|
+
return this.mapValueType(column.valueType);
|
|
178
|
+
}
|
|
179
|
+
return this.inferColumnType(column);
|
|
180
|
+
}
|
|
181
|
+
mapValueType(valueType) {
|
|
182
|
+
switch (valueType) {
|
|
183
|
+
case ColumnValueType.Date:
|
|
184
|
+
return 'date';
|
|
185
|
+
case ColumnValueType.Number:
|
|
186
|
+
case ColumnValueType.Integer:
|
|
187
|
+
case ColumnValueType.Decimal:
|
|
188
|
+
case ColumnValueType.Currency:
|
|
189
|
+
return 'number';
|
|
190
|
+
case ColumnValueType.Bool:
|
|
191
|
+
return 'bool';
|
|
192
|
+
case ColumnValueType.Enum:
|
|
193
|
+
return 'enum';
|
|
194
|
+
default:
|
|
195
|
+
return 'string';
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Best-effort type detection for columns that declare no `valueType`. Falls
|
|
200
|
+
* back to 'string' rather than null so the value field always renders.
|
|
201
|
+
*/
|
|
202
|
+
inferColumnType(column) {
|
|
203
|
+
const sampleValue = this.firstNonEmptyValue(column);
|
|
97
204
|
if (sampleValue instanceof Date)
|
|
98
205
|
return 'date';
|
|
99
206
|
if (typeof sampleValue === 'number')
|
|
100
207
|
return 'number';
|
|
208
|
+
if (typeof sampleValue === 'boolean')
|
|
209
|
+
return 'bool';
|
|
210
|
+
if (typeof sampleValue === 'string' && this.isDateString(sampleValue)) {
|
|
211
|
+
return 'date';
|
|
212
|
+
}
|
|
101
213
|
return 'string';
|
|
102
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Scans rows for the first usable sample — sampling only the first row misses
|
|
217
|
+
* the type whenever that row happens to hold a null or undefined value.
|
|
218
|
+
*/
|
|
219
|
+
firstNonEmptyValue(column) {
|
|
220
|
+
for (const row of this.data ?? []) {
|
|
221
|
+
const value = this.readValue(column, row);
|
|
222
|
+
if (value !== null && value !== undefined && value !== '')
|
|
223
|
+
return value;
|
|
224
|
+
}
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
readValue(column, row) {
|
|
228
|
+
if (column.accessorKey)
|
|
229
|
+
return row[column.accessorKey];
|
|
230
|
+
if (column.accessorFn)
|
|
231
|
+
return column.accessorFn(row);
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Dates usually arrive from an API as ISO strings, which would otherwise be
|
|
236
|
+
* typed as plain text. Anchored to ISO-ish input so ordinary strings that
|
|
237
|
+
* `Date` happens to parse (e.g. "March") are not misread as dates.
|
|
238
|
+
*/
|
|
239
|
+
isDateString(value) {
|
|
240
|
+
if (!/^\d{4}-\d{2}-\d{2}([T\s]|$)/.test(value))
|
|
241
|
+
return false;
|
|
242
|
+
return !Number.isNaN(new Date(value).getTime());
|
|
243
|
+
}
|
|
244
|
+
/** Accepts either supported `valueOptions` shape and returns one of them. */
|
|
245
|
+
normalizeValueOptions(options) {
|
|
246
|
+
if (!options?.length)
|
|
247
|
+
return [];
|
|
248
|
+
return options.map((option) => typeof option === 'string'
|
|
249
|
+
? { label: option, value: option }
|
|
250
|
+
: option);
|
|
251
|
+
}
|
|
103
252
|
resetCurrentFilter() {
|
|
104
253
|
this.currentFilter = {};
|
|
105
254
|
this.availableOperators = [];
|
|
255
|
+
this.currentColumnType = null;
|
|
256
|
+
this.valueOptions = [];
|
|
106
257
|
}
|
|
107
258
|
resetAll() {
|
|
259
|
+
this.userTouched = true;
|
|
108
260
|
this.savedFilters = [];
|
|
109
261
|
this.resetCurrentFilter();
|
|
110
262
|
this.resetFilter.emit();
|
|
111
263
|
}
|
|
112
264
|
applyFilters() {
|
|
265
|
+
this.userTouched = true;
|
|
113
266
|
const activeFilters = this.savedFilters
|
|
114
267
|
.filter((filter) => filter.selected)
|
|
115
268
|
.map(({ columnId, operator, value }) => ({
|
|
@@ -136,18 +289,20 @@ export class DataFilterComponent {
|
|
|
136
289
|
return this.savedFilters.filter((filter) => filter.selected).length;
|
|
137
290
|
}
|
|
138
291
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n
|
|
292
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data", initialFilters: "initialFilters" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input \u2014 native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
|
|
140
293
|
}
|
|
141
294
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, decorators: [{
|
|
142
295
|
type: Component,
|
|
143
|
-
args: [{ selector: 'lib-data-filter', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n
|
|
296
|
+
args: [{ selector: 'lib-data-filter', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input \u2014 native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"] }]
|
|
144
297
|
}], propDecorators: { columns: [{
|
|
145
298
|
type: Input
|
|
146
299
|
}], data: [{
|
|
147
300
|
type: Input
|
|
301
|
+
}], initialFilters: [{
|
|
302
|
+
type: Input
|
|
148
303
|
}], filterApplied: [{
|
|
149
304
|
type: Output
|
|
150
305
|
}], resetFilter: [{
|
|
151
306
|
type: Output
|
|
152
307
|
}] } });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUlMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsY0FBYyxHQUNmLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBTzdCLE1BQU0sT0FBTyxtQkFBbUI7SUFDckIsT0FBTyxDQUF5QjtJQUNoQyxJQUFJLENBQU87SUFDVixhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7SUFDdEQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0MsaUJBQWlCLEdBQTBCLEVBQUUsQ0FBQztJQUM5QyxrQkFBa0IsR0FBcUIsRUFBRSxDQUFDO0lBQzFDLFlBQVksR0FBZ0QsRUFBRSxDQUFDO0lBQy9ELGFBQWEsR0FBNkIsRUFBRSxDQUFDO0lBQzdDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixpQkFBaUIsR0FBd0MsSUFBSSxDQUFDO0lBRTlELFFBQVE7UUFDTixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdB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QU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEUsQ0FBQzt3R0ExSlUsbUJBQW1COzRGQUFuQixtQkFBbUIsOEtDaEJoQywrN0lBZ0pBOzs0RkRoSWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4QkFLbEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcbmltcG9ydCB7XG4gIEZpbHRlck9wZXJhdG9yLFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlckdyb3VwLFxuICBTVFJJTkdfT1BFUkFUT1JTLFxuICBOVU1CRVJfT1BFUkFUT1JTLFxuICBEQVRFX09QRVJBVE9SUyxcbn0gZnJvbSAnLi9kYXRhLWZpbHRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5EZWZpbml0aW9uPFQ+W107XG4gIEBJbnB1dCgpIGRhdGEhOiBUW107XG4gIEBPdXRwdXQoKSBmaWx0ZXJBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDb25kaXRpb25bXT4oKTtcbiAgQE91dHB1dCgpIHJlc2V0RmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBmaWx0ZXJhYmxlQ29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdID0gW107XG4gIGF2YWlsYWJsZU9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXSA9IFtdO1xuICBzYXZlZEZpbHRlcnM6IChGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW10gPSBbXTtcbiAgY3VycmVudEZpbHRlcjogUGFydGlhbDxGaWx0ZXJDb25kaXRpb24+ID0ge307XG4gIHNob3dBbGxGaWx0ZXJzID0gZmFsc2U7XG4gIG1heFZpc2libGVJdGVtcyA9IDM7XG4gIGN1cnJlbnRDb2x1bW5UeXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplRmlsdGVyYWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlcmFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5hY2Nlc3NvcktleSk7XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdChjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgPSBjb2x1bW5JZDtcblxuICAgIC8vIFJlc2V0IG90aGVyIHZhbHVlc1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBEZXRlcm1pbmUgY29sdW1uIHR5cGUgYW5kIHNldCBhdmFpbGFibGUgb3BlcmF0b3JzXG4gICAgdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9IHRoaXMuZGV0ZXJtaW5lQ29sdW1uVHlwZShjb2x1bW4pO1xuXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRDb2x1bW5UeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFNUUklOR19PUEVSQVRPUlM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBOVU1CRVJfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IERBVEVfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gW107XG4gICAgfVxuICB9XG5cbiAgYWRkRmlsdGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgfHxcbiAgICAgICF0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgfHxcbiAgICAgICF0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWVcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdGaWx0ZXI6IEZpbHRlckNvbmRpdGlvbiAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSA9IHtcbiAgICAgIGNvbHVtbklkOiB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQhLFxuICAgICAgb3BlcmF0b3I6IHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcixcbiAgICAgIHZhbHVlOiB0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5zYXZlZEZpbHRlcnMudW5zaGlmdChuZXdGaWx0ZXIpO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gIH1cblxuICBnZXRGaWx0ZXJEZXNjcmlwdGlvbihmaWx0ZXI6IEZpbHRlckNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmlkID09PSBmaWx0ZXIuY29sdW1uSWRcbiAgICApO1xuICAgIGlmICghY29sdW1uKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lID1cbiAgICAgIHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29sdW1uLmhlYWRlcih7fSkgOiBjb2x1bW4uaGVhZGVyO1xuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmdldE9wZXJhdG9yTGFiZWwoZmlsdGVyLm9wZXJhdG9yKTtcblxuICAgIGxldCB2YWx1ZSA9IGZpbHRlci52YWx1ZTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyBEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7Y29sdW1uTmFtZX0gJHtvcGVyYXRvcn0gJHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVyYXRvckxhYmVsKG9wZXJhdG9yVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBbXG4gICAgICAuLi5TVFJJTkdfT1BFUkFUT1JTLFxuICAgICAgLi4uTlVNQkVSX09QRVJBVE9SUyxcbiAgICAgIC4uLkRBVEVfT1BFUkFUT1JTLFxuICAgIF0uZmluZCgob3ApID0+IG9wLnZhbHVlID09PSBvcGVyYXRvclZhbHVlKTtcbiAgICByZXR1cm4gb3BlcmF0b3IgPyBvcGVyYXRvci5sYWJlbC50b0xvd2VyQ2FzZSgpIDogb3BlcmF0b3JWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lQ29sdW1uVHlwZShcbiAgICBjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD5cbiAgKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8IG51bGwge1xuICAgIGlmICghdGhpcy5kYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBzYW1wbGVWYWx1ZSA9IGNvbHVtbi5hY2Nlc3NvcktleVxuICAgICAgPyB0aGlzLmRhdGFbMF1bY29sdW1uLmFjY2Vzc29yS2V5XVxuICAgICAgOiBjb2x1bW4uYWNjZXNzb3JGblxuICAgICAgPyBjb2x1bW4uYWNjZXNzb3JGbih0aGlzLmRhdGFbMF0pXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoc2FtcGxlVmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHNhbXBsZVZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuICdkYXRlJztcbiAgICBpZiAodHlwZW9mIHNhbXBsZVZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuICdudW1iZXInO1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRDdXJyZW50RmlsdGVyKCkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlciA9IHt9O1xuICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gW107XG4gIH1cblxuICByZXNldEFsbCgpIHtcbiAgICB0aGlzLnNhdmVkRmlsdGVycyA9IFtdO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gICAgdGhpcy5yZXNldEZpbHRlci5lbWl0KCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHRoaXMuc2F2ZWRGaWx0ZXJzXG4gICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZClcbiAgICAgIC5tYXAoKHsgY29sdW1uSWQsIG9wZXJhdG9yLCB2YWx1ZSB9KSA9PiAoe1xuICAgICAgICBjb2x1bW5JZCxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIHZhbHVlLFxuICAgICAgfSkpO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZC5lbWl0KGFjdGl2ZUZpbHRlcnMpO1xuICB9XG5cbiAgZ2V0Q29sdW1uTGFiZWwoY29sdW1uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIHJldHVybiBjb2x1bW5cbiAgICAgID8gdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjb2x1bW4uaGVhZGVyKHt9KVxuICAgICAgICA6IGNvbHVtbi5oZWFkZXJcbiAgICAgIDogY29sdW1uSWQ7XG4gIH1cblxuICBnZXQgdmlzaWJsZUZpbHRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbEZpbHRlcnNcbiAgICAgID8gdGhpcy5zYXZlZEZpbHRlcnNcbiAgICAgIDogdGhpcy5zYXZlZEZpbHRlcnMuc2xpY2UoMCwgdGhpcy5tYXhWaXNpYmxlSXRlbXMpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZUZpbHRlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWQpLmxlbmd0aDtcbiAgfVxufVxuIiwiPHZlcmJlbi1jYXJkXG4gIHdpZHRoPVwiMjRyZW1cIlxuICBib3JkZXJSYWRpdXM9XCIxcmVtXCJcbiAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1wcmltYXJ5KSdcIlxuICBiZ0NvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICBGaWx0ZXIgPHN1cD4oe3sgYWN0aXZlRmlsdGVyQ291bnQgfX0pPC9zdXA+XG4gICAgPC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldEFsbCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDwhLS0gU2F2ZWQgRmlsdGVycyBTZWN0aW9uIC0tPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5GaWx0ZXJzPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQtbXV0ZWQpXCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgdmlzaWJsZUZpbHRlcnNcIiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXIuc2VsZWN0ZWRcIiAvPlxuICAgICAgICAgIDxsYWJlbD57eyBnZXRGaWx0ZXJEZXNjcmlwdGlvbihmaWx0ZXIpIH19PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNhdmVkRmlsdGVycy5sZW5ndGggPiBtYXhWaXNpYmxlSXRlbXNcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICAgIChjbGljayk9XCJzaG93QWxsRmlsdGVycyA9ICFzaG93QWxsRmlsdGVyc1wiXG4gICAgICA+XG4gICAgICAgIHt7IHNob3dBbGxGaWx0ZXJzID8gXCJTaG93IExlc3NcIiA6IFwiU2hvdyBNb3JlXCIgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgPCEtLSBOZXcgRmlsdGVyIE9wZXJhdGlvbiAtLT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+T3BlcmF0aW9uPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQtbXV0ZWQpXCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwib3BlcmF0aW9uLWdyaWRcIj5cbiAgICAgICAgPCEtLSBDb2x1bW4gU2VsZWN0aW9uIC0tPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNvbHVtblwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyYWJsZUNvbHVtbnNcIlxuICAgICAgICAgIG9wdGlvbkxhYmVsPVwiaGVhZGVyXCJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIuY29sdW1uSWRcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29sdW1uU2VsZWN0KCRldmVudClcIlxuICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgIDwhLS0gT3BlcmF0b3IgU2VsZWN0aW9uIC0tPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IG9wZXJhdG9yXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVPcGVyYXRvcnNcIlxuICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci5vcGVyYXRvclwiXG4gICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgPCEtLSBWYWx1ZSBJbnB1dCBiYXNlZCBvbiB0eXBlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjdXJyZW50Q29sdW1uVHlwZVwiPlxuICAgICAgICAgIDwhLS0gRGF0ZSBJbnB1dCAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkYXRlXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbnVtYmVyXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IChkZWZhdWx0KSAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgdGV4dFwiXG4gICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLWJvcmRlcilcIlxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgICAgcGQ9XCIycHggNnB4XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idXR0b24gbWwtYXV0b1wiIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiPisgQWRkPC9idXR0b24+XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiPkZpbHRlcjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdmVyYmVuLWNhcmQ+XG4iXX0=
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGVBQWUsR0FDaEIsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRCxPQUFPLEVBS0wsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQU83QixNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLE9BQU8sQ0FBeUI7SUFDaEMsSUFBSSxDQUFPO0lBQ3BCOzs7O09BSUc7SUFDTSxjQUFjLENBQXFCO0lBQ2xDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztJQUN0RCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzQyxpQkFBaUIsR0FBMEIsRUFBRSxDQUFDO0lBQzlDLGtCQUFrQixHQUFxQixFQUFFLENBQUM7SUFDMUMsWUFBWSxHQUFnRCxFQUFFLENBQUM7SUFDL0QsYUFBYSxHQUE2QixFQUFFLENBQUM7SUFDN0MsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLGlCQUFpQixHQUE4QixJQUFJLENBQUM7SUFDcEQ7OztPQUdHO0lBQ0gsWUFBWSxHQUF3QixFQUFFLENBQUM7SUFDdkM7Ozs7T0FJRztJQUNjLFdBQVcsR0FBd0I7UUFDbEQsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDL0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7S0FDaEMsQ0FBQztJQUNGLHdFQUF3RTtJQUN4RSxvQ0FBb0M7SUFDNUIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUU1QixRQUFRO1FBQ04sSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywwRUFBMEU7UUFDMUUsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxHQUFHLE1BQU07WUFDVCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXBCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV2QyxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUVyQyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWTtZQUNmLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxNQUFNO2dCQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVc7Z0JBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTTtvQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO29CQUNqRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVQsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMvQixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO2dCQUMzQyxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO2dCQUN6QyxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLENBQUM7Z0JBQ3pDLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztnQkFDekMsTUFBTTtZQUNSO2dCQUNFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDdkMsd0VBQXdFO1FBQ3hFLHFDQUFxQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUV2RSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlFLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQTRDO1lBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVM7WUFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUTtZQUNyQyx3RUFBd0U7WUFDeEUsa0JBQWtCO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFNO1lBQ3BFLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUF1QjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUN4QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV2QixNQUFNLFVBQVUsR0FDZCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEQsT0FBTyxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVELDRFQUE0RTtJQUNwRSxhQUFhLENBQ25CLE1BQTJCLEVBQzNCLEtBQStCO1FBRS9CLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzdELElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUU1RCwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLGtFQUFrRTtRQUNsRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUNqRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQ3pDLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsYUFBcUI7UUFDNUMsTUFBTSxRQUFRLEdBQUc7WUFDZixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLGNBQWM7WUFDakIsR0FBRyxjQUFjO1lBQ2pCLEdBQUcsY0FBYztTQUNsQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxpQkFBaUIsQ0FBQyxNQUEyQjtRQUNuRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixzRUFBc0U7WUFDdEUsMEVBQTBFO1lBQzFFLElBQ0UsTUFBTSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsSUFBSTtnQkFDekMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sRUFDdkQsQ0FBQztnQkFDRCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBMEI7UUFDN0MsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDNUIsS0FBSyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQzdCLEtBQUssZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUM3QixLQUFLLGVBQWUsQ0FBQyxRQUFRO2dCQUMzQixPQUFPLFFBQVEsQ0FBQztZQUNsQixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxNQUEyQjtRQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEQsSUFBSSxXQUFXLFlBQVksSUFBSTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQy9DLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUTtZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ3JELElBQUksT0FBTyxXQUFXLEtBQUssU0FBUztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ3BELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLE1BQTJCO1FBQ3BELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQTJCLEVBQUUsR0FBTTtRQUNuRCxJQUFJLE1BQU0sQ0FBQyxXQUFXO1lBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksTUFBTSxDQUFDLFVBQVU7WUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsNkVBQTZFO0lBQ3JFLHFCQUFxQixDQUMzQixPQUFtRDtRQUVuRCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNoQyxPQUFRLE9BQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDM0MsT0FBTyxNQUFNLEtBQUssUUFBUTtZQUN4QixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDbEMsQ0FBQyxDQUFFLE1BQTRCLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWTthQUNwQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDbkMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVE7WUFDUixRQUFRO1lBQ1IsS0FBSztTQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sTUFBTTtZQUNYLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVTtnQkFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDakIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYztZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEUsQ0FBQzt3R0E3VFUsbUJBQW1COzRGQUFuQixtQkFBbUIscU9DL0JoQywwM0tBeUtBOzs0RkQxSWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4QkFLbEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb2x1bW5WYWx1ZU9wdGlvbixcbiAgQ29sdW1uVmFsdWVUeXBlLFxufSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHtcbiAgRmlsdGVyT3BlcmF0b3IsXG4gIEZpbHRlck9wZXJhdG9yVHlwZSxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJHcm91cCxcbiAgU1RSSU5HX09QRVJBVE9SUyxcbiAgTlVNQkVSX09QRVJBVE9SUyxcbiAgREFURV9PUEVSQVRPUlMsXG4gIEJPT0xfT1BFUkFUT1JTLFxuICBFTlVNX09QRVJBVE9SUyxcbn0gZnJvbSAnLi9kYXRhLWZpbHRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbkRlZmluaXRpb248VD5bXTtcbiAgQElucHV0KCkgZGF0YSE6IFRbXTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJlc3RvcmVkIGZpbHRlcnM6IHRoZSBwYW5lbCBvcGVucyBwcmUtcG9wdWxhdGVkIHdpdGggdGhlc2UgYXNcbiAgICogc2VsZWN0ZWQgZmlsdGVyIGNoaXBzLiBBcHBsaWVkIG9uY2UgKHRoZSBmaXJzdCB0aW1lIGEgbm9uLWVtcHR5IHZhbHVlXG4gICAqIGFycml2ZXMpIHNvIGl0IG5ldmVyIGNsb2JiZXJzIHRoZSB1c2VyJ3MgaW4tcHJvZ3Jlc3MgZWRpdHMgYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxGaWx0ZXJzPzogRmlsdGVyQ29uZGl0aW9uW107XG4gIEBPdXRwdXQoKSBmaWx0ZXJBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDb25kaXRpb25bXT4oKTtcbiAgQE91dHB1dCgpIHJlc2V0RmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBmaWx0ZXJhYmxlQ29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdID0gW107XG4gIGF2YWlsYWJsZU9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXSA9IFtdO1xuICBzYXZlZEZpbHRlcnM6IChGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW10gPSBbXTtcbiAgY3VycmVudEZpbHRlcjogUGFydGlhbDxGaWx0ZXJDb25kaXRpb24+ID0ge307XG4gIHNob3dBbGxGaWx0ZXJzID0gZmFsc2U7XG4gIG1heFZpc2libGVJdGVtcyA9IDM7XG4gIGN1cnJlbnRDb2x1bW5UeXBlOiBGaWx0ZXJPcGVyYXRvclR5cGUgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSB2YWx1ZSBkcm9wZG93biB3aGVuIHRoZSBzZWxlY3RlZCBjb2x1bW4gaXMgYm9vbCBvciBlbnVtLlxuICAgKiBBbHdheXMgbm9ybWFsaXNlZCB0byBgeyBsYWJlbCwgdmFsdWUgfWAgc28gdGhlIHRlbXBsYXRlIGJpbmRzIG9uZSBzaGFwZS5cbiAgICovXG4gIHZhbHVlT3B0aW9uczogQ29sdW1uVmFsdWVPcHRpb25bXSA9IFtdO1xuICAvKipcbiAgICogSGVsZCBhcyBzdHJpbmdzIHJhdGhlciB0aGFuIGJvb2xlYW5zOiBgdmVyYmVuLWRyb3AtZG93bmAgZ2F0ZXMgaXRzIHNlbGVjdGVkXG4gICAqIGxhYmVsIG9uIGEgdHJ1dGhpbmVzcyBjaGVjaywgc28gYW4gb3B0aW9uIHZhbHVlZCBgZmFsc2VgIHdvdWxkIHJlbmRlciBhc1xuICAgKiB0aG91Z2ggbm90aGluZyB3ZXJlIHBpY2tlZC4gQ29lcmNlZCBiYWNrIHRvIGEgYm9vbGVhbiBpbiBgYWRkRmlsdGVyYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vbE9wdGlvbnM6IENvbHVtblZhbHVlT3B0aW9uW10gPSBbXG4gICAgeyBsYWJlbDogJ1llcycsIHZhbHVlOiAndHJ1ZScgfSxcbiAgICB7IGxhYmVsOiAnTm8nLCB2YWx1ZTogJ2ZhbHNlJyB9LFxuICBdO1xuICAvLyBTZXQgb25jZSB0aGUgdXNlciBlZGl0cyB0aGUgcGFuZWwsIHNvIHJlc3RvcmVkL2hvc3QgZmlsdGVycyBubyBsb25nZXJcbiAgLy8gb3ZlcndyaXRlIHRoZWlyIGluLXByb2dyZXNzIHdvcmsuXG4gIHByaXZhdGUgdXNlclRvdWNoZWQgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJhYmxlQ29sdW1ucygpO1xuICAgIHRoaXMuaHlkcmF0ZVNhdmVkRmlsdGVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIFBpY2sgdXAgZmlsdGVycyByZXN0b3JlZCBhc3luY2hyb25vdXNseSBieSB0aGUgaG9zdCBhZnRlciBmaXJzdCByZW5kZXIuXG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxGaWx0ZXJzJ10pIHtcbiAgICAgIHRoaXMuaHlkcmF0ZVNhdmVkRmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVkIHRoZSBzYXZlZC1maWx0ZXIgY2hpcHMgZnJvbSB0aGUgcmVzdG9yZWQgZmlsdGVycy4gU2tpcHBlZCBvbmNlIHRoZSB1c2VyXG4gICAqIGhhcyB0b3VjaGVkIHRoZSBwYW5lbCBzbyBpdCBuZXZlciBvdmVyd3JpdGVzIHRoZWlyIGluLXByb2dyZXNzIGVkaXRzLlxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlU2F2ZWRGaWx0ZXJzKCkge1xuICAgIGlmICh0aGlzLnVzZXJUb3VjaGVkKSByZXR1cm47XG4gICAgdGhpcy5zYXZlZEZpbHRlcnMgPSAodGhpcy5pbml0aWFsRmlsdGVycyA/PyBbXSkubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAuLi5maWx0ZXIsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9KSk7XG4gIH1cblxuICAvKiogTWFya3MgdGhlIHBhbmVsIGFzIHVzZXItZWRpdGVkIChjYWxsZWQgZnJvbSB0ZW1wbGF0ZSBpbnRlcmFjdGlvbnMpLiAqL1xuICBtYXJrVG91Y2hlZCgpIHtcbiAgICB0aGlzLnVzZXJUb3VjaGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlcmFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5hY2Nlc3NvcktleSk7XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdChjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgPSBjb2x1bW5JZDtcblxuICAgIC8vIFJlc2V0IG90aGVyIHZhbHVlc1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBEZXRlcm1pbmUgY29sdW1uIHR5cGUgYW5kIHNldCBhdmFpbGFibGUgb3BlcmF0b3JzXG4gICAgdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9IHRoaXMucmVzb2x2ZUNvbHVtblR5cGUoY29sdW1uKTtcbiAgICB0aGlzLnZhbHVlT3B0aW9ucyA9XG4gICAgICB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID09PSAnYm9vbCdcbiAgICAgICAgPyB0aGlzLmJvb2xPcHRpb25zXG4gICAgICAgIDogdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9PT0gJ2VudW0nXG4gICAgICAgID8gdGhpcy5ub3JtYWxpemVWYWx1ZU9wdGlvbnMoY29sdW1uLnZhbHVlT3B0aW9ucylcbiAgICAgICAgOiBbXTtcblxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50Q29sdW1uVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBTVFJJTkdfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gTlVNQkVSX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBEQVRFX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib29sJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBCT09MX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBFTlVNX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGFkZEZpbHRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY3VycmVudEZpbHRlci52YWx1ZTtcbiAgICAvLyBDaGVja2VkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gZm9yIGZhbHNpbmVzczogYGZhbHNlYCBpcyBhIHZhbGlkIGJvb2xcbiAgICAvLyBmaWx0ZXIgYW5kIGAwYCBhIHZhbGlkIG51bWJlciBvbmUuXG4gICAgY29uc3QgaGFzVmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJztcblxuICAgIGlmICghdGhpcy5jdXJyZW50RmlsdGVyLmNvbHVtbklkIHx8ICF0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgfHwgIWhhc1ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RmlsdGVyOiBGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0gPSB7XG4gICAgICBjb2x1bW5JZDogdGhpcy5jdXJyZW50RmlsdGVyLmNvbHVtbklkISxcbiAgICAgIG9wZXJhdG9yOiB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IsXG4gICAgICAvLyBCb29sIHZhbHVlcyByb3VuZC10cmlwIHRocm91Z2ggdGhlIGRyb3Bkb3duIGFzIHN0cmluZ3M7IGhvc3RzIHJlY2VpdmVcbiAgICAgIC8vIGEgcmVhbCBib29sZWFuLlxuICAgICAgdmFsdWU6IHRoaXMuY3VycmVudENvbHVtblR5cGUgPT09ICdib29sJyA/IHZhbHVlID09PSAndHJ1ZScgOiB2YWx1ZSEsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5zYXZlZEZpbHRlcnMudW5zaGlmdChuZXdGaWx0ZXIpO1xuICAgIHRoaXMudXNlclRvdWNoZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gIH1cblxuICBnZXRGaWx0ZXJEZXNjcmlwdGlvbihmaWx0ZXI6IEZpbHRlckNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmlkID09PSBmaWx0ZXIuY29sdW1uSWRcbiAgICApO1xuICAgIGlmICghY29sdW1uKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lID1cbiAgICAgIHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29sdW1uLmhlYWRlcih7fSkgOiBjb2x1bW4uaGVhZGVyO1xuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmdldE9wZXJhdG9yTGFiZWwoZmlsdGVyLm9wZXJhdG9yKTtcblxuICAgIHJldHVybiBgJHtjb2x1bW5OYW1lfSAke29wZXJhdG9yfSAke3RoaXMuZ2V0VmFsdWVMYWJlbChjb2x1bW4sIGZpbHRlci52YWx1ZSl9YDtcbiAgfVxuXG4gIC8qKiBSZW5kZXJzIGEgc3RvcmVkIGZpbHRlciB2YWx1ZSB0aGUgd2F5IGl0IHdhcyBjaG9zZW4sIG5vdCBhcyByYXcgZGF0YS4gKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZUxhYmVsKFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPixcbiAgICB2YWx1ZTogRmlsdGVyQ29uZGl0aW9uWyd2YWx1ZSddXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlID8gJ1llcycgOiAnTm8nO1xuXG4gICAgLy8gVGhlIG5hdGl2ZSBkYXRlIGlucHV0IHlpZWxkcyBhICdZWVlZLU1NLUREJyBzdHJpbmc7IHJlc3RvcmVkIGZpbHRlcnMgbWF5XG4gICAgLy8gY2Fycnkgb25lIHRvby4gUGFyc2VkIGFzIGxvY2FsIHRpbWUg4oCUIGBuZXcgRGF0ZSgnMjAyNi0wNy0yOCcpYCBpcyB0cmVhdGVkXG4gICAgLy8gYXMgVVRDIGFuZCB3b3VsZCBkaXNwbGF5IGFzIHRoZSBwcmV2aW91cyBkYXkgd2VzdCBvZiBHcmVlbndpY2guXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0RhdGVTdHJpbmcodmFsdWUpKSB7XG4gICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSB2YWx1ZS5zbGljZSgwLCAxMCkuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSkudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5ub3JtYWxpemVWYWx1ZU9wdGlvbnMoY29sdW1uLnZhbHVlT3B0aW9ucykuZmluZChcbiAgICAgIChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS52YWx1ZSA9PT0gdmFsdWVcbiAgICApO1xuICAgIHJldHVybiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVyYXRvckxhYmVsKG9wZXJhdG9yVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBbXG4gICAgICAuLi5TVFJJTkdfT1BFUkFUT1JTLFxuICAgICAgLi4uTlVNQkVSX09QRVJBVE9SUyxcbiAgICAgIC4uLkRBVEVfT1BFUkFUT1JTLFxuICAgICAgLi4uQk9PTF9PUEVSQVRPUlMsXG4gICAgICAuLi5FTlVNX09QRVJBVE9SUyxcbiAgICBdLmZpbmQoKG9wKSA9PiBvcC52YWx1ZSA9PT0gb3BlcmF0b3JWYWx1ZSk7XG4gICAgcmV0dXJuIG9wZXJhdG9yID8gb3BlcmF0b3IubGFiZWwudG9Mb3dlckNhc2UoKSA6IG9wZXJhdG9yVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJlZmVycyB0aGUgdHlwZSBkZWNsYXJlZCBvbiB0aGUgY29sdW1uLCBmYWxsaW5nIGJhY2sgdG8gaW5zcGVjdGluZyB0aGUgZGF0YVxuICAgKiBvbmx5IHdoZW4gdGhlIGhvc3QgaGFzIG5vdCBkZWNsYXJlZCBvbmUuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVDb2x1bW5UeXBlKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPik6IEZpbHRlck9wZXJhdG9yVHlwZSB7XG4gICAgaWYgKGNvbHVtbi52YWx1ZVR5cGUpIHtcbiAgICAgIC8vIEFuIEVudW0gd2l0aCBubyBkZWNsYXJlZCBtZW1iZXJzIGhhcyBub3RoaW5nIHRvIHBvcHVsYXRlIGEgZHJvcGRvd25cbiAgICAgIC8vIHdpdGgsIHNvIGl0IGRlZ3JhZGVzIHRvIGEgZnJlZS10ZXh0IGZpbHRlciByYXRoZXIgdGhhbiBhbiBlbXB0eSBzZWxlY3QuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi52YWx1ZVR5cGUgPT09IENvbHVtblZhbHVlVHlwZS5FbnVtICYmXG4gICAgICAgICF0aGlzLm5vcm1hbGl6ZVZhbHVlT3B0aW9ucyhjb2x1bW4udmFsdWVPcHRpb25zKS5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tYXBWYWx1ZVR5cGUoY29sdW1uLnZhbHVlVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5mZXJDb2x1bW5UeXBlKGNvbHVtbik7XG4gIH1cblxuICBwcml2YXRlIG1hcFZhbHVlVHlwZSh2YWx1ZVR5cGU6IENvbHVtblZhbHVlVHlwZSk6IEZpbHRlck9wZXJhdG9yVHlwZSB7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkRhdGU6XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5OdW1iZXI6XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5JbnRlZ2VyOlxuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuRGVjaW1hbDpcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkN1cnJlbmN5OlxuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5Cb29sOlxuICAgICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuRW51bTpcbiAgICAgICAgcmV0dXJuICdlbnVtJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmVzdC1lZmZvcnQgdHlwZSBkZXRlY3Rpb24gZm9yIGNvbHVtbnMgdGhhdCBkZWNsYXJlIG5vIGB2YWx1ZVR5cGVgLiBGYWxsc1xuICAgKiBiYWNrIHRvICdzdHJpbmcnIHJhdGhlciB0aGFuIG51bGwgc28gdGhlIHZhbHVlIGZpZWxkIGFsd2F5cyByZW5kZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbmZlckNvbHVtblR5cGUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogRmlsdGVyT3BlcmF0b3JUeXBlIHtcbiAgICBjb25zdCBzYW1wbGVWYWx1ZSA9IHRoaXMuZmlyc3ROb25FbXB0eVZhbHVlKGNvbHVtbik7XG5cbiAgICBpZiAoc2FtcGxlVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2RhdGUnO1xuICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gJ251bWJlcic7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ2Jvb2wnO1xuICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuaXNEYXRlU3RyaW5nKHNhbXBsZVZhbHVlKSkge1xuICAgICAgcmV0dXJuICdkYXRlJztcbiAgICB9XG4gICAgcmV0dXJuICdzdHJpbmcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW5zIHJvd3MgZm9yIHRoZSBmaXJzdCB1c2FibGUgc2FtcGxlIOKAlCBzYW1wbGluZyBvbmx5IHRoZSBmaXJzdCByb3cgbWlzc2VzXG4gICAqIHRoZSB0eXBlIHdoZW5ldmVyIHRoYXQgcm93IGhhcHBlbnMgdG8gaG9sZCBhIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBmaXJzdE5vbkVtcHR5VmFsdWUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogdW5rbm93biB7XG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJykgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZFZhbHVlKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPiwgcm93OiBUKTogdW5rbm93biB7XG4gICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkgcmV0dXJuIHJvd1tjb2x1bW4uYWNjZXNzb3JLZXldO1xuICAgIGlmIChjb2x1bW4uYWNjZXNzb3JGbikgcmV0dXJuIGNvbHVtbi5hY2Nlc3NvckZuKHJvdyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGF0ZXMgdXN1YWxseSBhcnJpdmUgZnJvbSBhbiBBUEkgYXMgSVNPIHN0cmluZ3MsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZVxuICAgKiB0eXBlZCBhcyBwbGFpbiB0ZXh0LiBBbmNob3JlZCB0byBJU08taXNoIGlucHV0IHNvIG9yZGluYXJ5IHN0cmluZ3MgdGhhdFxuICAgKiBgRGF0ZWAgaGFwcGVucyB0byBwYXJzZSAoZS5nLiBcIk1hcmNoXCIpIGFyZSBub3QgbWlzcmVhZCBhcyBkYXRlcy5cbiAgICovXG4gIHByaXZhdGUgaXNEYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIS9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oW1RcXHNdfCQpLy50ZXN0KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhTnVtYmVyLmlzTmFOKG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLyoqIEFjY2VwdHMgZWl0aGVyIHN1cHBvcnRlZCBgdmFsdWVPcHRpb25zYCBzaGFwZSBhbmQgcmV0dXJucyBvbmUgb2YgdGhlbS4gKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVWYWx1ZU9wdGlvbnMoXG4gICAgb3B0aW9uczogc3RyaW5nW10gfCBDb2x1bW5WYWx1ZU9wdGlvbltdIHwgdW5kZWZpbmVkXG4gICk6IENvbHVtblZhbHVlT3B0aW9uW10ge1xuICAgIGlmICghb3B0aW9ucz8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgcmV0dXJuIChvcHRpb25zIGFzIHVua25vd25bXSkubWFwKChvcHRpb24pID0+XG4gICAgICB0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHsgbGFiZWw6IG9wdGlvbiwgdmFsdWU6IG9wdGlvbiB9XG4gICAgICAgIDogKG9wdGlvbiBhcyBDb2x1bW5WYWx1ZU9wdGlvbilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyID0ge307XG4gICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlT3B0aW9ucyA9IFtdO1xuICB9XG5cbiAgcmVzZXRBbGwoKSB7XG4gICAgdGhpcy51c2VyVG91Y2hlZCA9IHRydWU7XG4gICAgdGhpcy5zYXZlZEZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLnJlc2V0Q3VycmVudEZpbHRlcigpO1xuICAgIHRoaXMucmVzZXRGaWx0ZXIuZW1pdCgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMudXNlclRvdWNoZWQgPSB0cnVlO1xuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB0aGlzLnNhdmVkRmlsdGVyc1xuICAgICAgLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWQpXG4gICAgICAubWFwKCh7IGNvbHVtbklkLCBvcGVyYXRvciwgdmFsdWUgfSkgPT4gKHtcbiAgICAgICAgY29sdW1uSWQsXG4gICAgICAgIG9wZXJhdG9yLFxuICAgICAgICB2YWx1ZSxcbiAgICAgIH0pKTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQuZW1pdChhY3RpdmVGaWx0ZXJzKTtcbiAgfVxuXG4gIGdldENvbHVtbkxhYmVsKGNvbHVtbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuaWQgPT09IGNvbHVtbklkKTtcbiAgICByZXR1cm4gY29sdW1uXG4gICAgICA/IHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gY29sdW1uLmhlYWRlcih7fSlcbiAgICAgICAgOiBjb2x1bW4uaGVhZGVyXG4gICAgICA6IGNvbHVtbklkO1xuICB9XG5cbiAgZ2V0IHZpc2libGVGaWx0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxGaWx0ZXJzXG4gICAgICA/IHRoaXMuc2F2ZWRGaWx0ZXJzXG4gICAgICA6IHRoaXMuc2F2ZWRGaWx0ZXJzLnNsaWNlKDAsIHRoaXMubWF4VmlzaWJsZUl0ZW1zKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVGaWx0ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNhdmVkRmlsdGVycy5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLnNlbGVjdGVkKS5sZW5ndGg7XG4gIH1cbn1cbiIsIjx2ZXJiZW4tY2FyZFxuICB3aWR0aD1cIjI0cmVtXCJcbiAgYm9yZGVyUmFkaXVzPVwiMXJlbVwiXG4gIFtib3JkZXJdPVwiJzFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItcHJpbWFyeSknXCJcbiAgYmdDb2xvcj1cInZhcigtLXZibi1jb2xvci1zdXJmYWNlKVwiXG4+XG4gIDxkaXYgY2FyZC1oZWFkZXIgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgRmlsdGVyIDxzdXA+KHt7IGFjdGl2ZUZpbHRlckNvdW50IH19KTwvc3VwPlxuICAgIDwvaDQ+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJyZXNldC1idXR0b25cIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKSdcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAoY2xpY2spPVwicmVzZXRBbGwoKVwiXG4gICAgPlxuICAgICAgUmVzZXRcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8IS0tIFNhdmVkIEZpbHRlcnMgU2VjdGlvbiAtLT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RmlsdGVyczwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHZpc2libGVGaWx0ZXJzXCIgY2xhc3M9XCJpdGVtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiZmlsdGVyLnNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwibWFya1RvdWNoZWQoKVwiIC8+XG4gICAgICAgICAgPGxhYmVsPnt7IGdldEZpbHRlckRlc2NyaXB0aW9uKGZpbHRlcikgfX08L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic2F2ZWRGaWx0ZXJzLmxlbmd0aCA+IG1heFZpc2libGVJdGVtc1wiXG4gICAgICAgIGNsYXNzPVwic2hvdy1tb3JlXCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dBbGxGaWx0ZXJzID0gIXNob3dBbGxGaWx0ZXJzXCJcbiAgICAgID5cbiAgICAgICAge3sgc2hvd0FsbEZpbHRlcnMgPyBcIlNob3cgTGVzc1wiIDogXCJTaG93IE1vcmVcIiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG5cbiAgICA8IS0tIE5ldyBGaWx0ZXIgT3BlcmF0aW9uIC0tPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5PcGVyYXRpb248L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dC1tdXRlZClcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvcGVyYXRpb24tZ3JpZFwiPlxuICAgICAgICA8IS0tIENvbHVtbiBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgY29sdW1uXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJmaWx0ZXJhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci5jb2x1bW5JZFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Db2x1bW5TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgPCEtLSBPcGVyYXRvciBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgb3BlcmF0b3JcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImF2YWlsYWJsZU9wZXJhdG9yc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLm9wZXJhdG9yXCJcbiAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICA8IS0tIFZhbHVlIElucHV0IGJhc2VkIG9uIHR5cGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImN1cnJlbnRDb2x1bW5UeXBlXCI+XG4gICAgICAgICAgPCEtLSBEYXRlIElucHV0IOKAlCBuYXRpdmUgcmF0aGVyIHRoYW4gdGhlIGxpYnJhcnkgZGF0ZSBwaWNrZXIsIHdob3NlXG4gICAgICAgICAgICAgICBvdmVybGF5IHJlbmRlcnMgb2ZmIHNjcmVlbiBmcm9tIHRoaXMgbmFycm93IHBhbmVsLiAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBwbGFjZUhvbGRlcj1cIlNlbGVjdCBkYXRlXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIHBsYWNlSG9sZGVyPVwiRW50ZXIgbnVtYmVyXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBZZXMgLyBObyBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYm9vbCdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlT3B0aW9uc1wiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPCEtLSBFbnVtIE1lbWJlciBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZW51bSdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlT3B0aW9uc1wiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IChkZWZhdWx0KSAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcGxhY2VIb2xkZXI9XCJFbnRlciB0ZXh0XCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ1dHRvbiBtbC1hdXRvXCIgKGNsaWNrKT1cImFkZEZpbHRlcigpXCI+KyBBZGQ8L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCI+RmlsdGVyPC9idXR0b24+XG4gIDwvZGl2PlxuPC92ZXJiZW4tY2FyZD5cbiJdfQ==
|
|
@@ -14,4 +14,12 @@ export const DATE_OPERATORS = [
|
|
|
14
14
|
{ label: 'Before', value: 'before', type: 'date' },
|
|
15
15
|
{ label: 'After', value: 'after', type: 'date' },
|
|
16
16
|
];
|
|
17
|
-
|
|
17
|
+
export const BOOL_OPERATORS = [
|
|
18
|
+
{ label: 'Is', value: 'is', type: 'bool' },
|
|
19
|
+
{ label: 'Is Not', value: 'isNot', type: 'bool' },
|
|
20
|
+
];
|
|
21
|
+
export const ENUM_OPERATORS = [
|
|
22
|
+
{ label: 'Is', value: 'is', type: 'enum' },
|
|
23
|
+
{ label: 'Is Not', value: 'isNot', type: 'enum' },
|
|
24
|
+
];
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQjtJQUNoRCxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzdELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDekQsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN4RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0NBQ3JELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDaEQsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUNsRCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQy9ELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUI7SUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUMxQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQ2xELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDakQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUI7SUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUMxQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0NBQ2xELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXFCO0lBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDMUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3JUeXBlID1cbiAgfCAnc3RyaW5nJ1xuICB8ICdudW1iZXInXG4gIHwgJ2RhdGUnXG4gIHwgJ2Jvb2wnXG4gIHwgJ2VudW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck9wZXJhdG9yIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgdHlwZTogRmlsdGVyT3BlcmF0b3JUeXBlO1xufVxuXG5leHBvcnQgY29uc3QgU1RSSU5HX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ1N0YXJ0cyBXaXRoJywgdmFsdWU6ICdzdGFydHNXaXRoJywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBsYWJlbDogJ0VuZHMgV2l0aCcsIHZhbHVlOiAnZW5kc1dpdGgnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnQ29udGFpbnMnLCB2YWx1ZTogJ2NvbnRhaW5zJywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBsYWJlbDogJ0VxdWFscycsIHZhbHVlOiAnZXF1YWxzJywgdHlwZTogJ3N0cmluZycgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBOVU1CRVJfT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnRXF1YWwnLCB2YWx1ZTogJ2VxdWFsJywgdHlwZTogJ251bWJlcicgfSxcbiAgeyBsYWJlbDogJ0dyZWF0ZXIgVGhhbicsIHZhbHVlOiAnZ3JlYXRlclRoYW4nLCB0eXBlOiAnbnVtYmVyJyB9LFxuICB7IGxhYmVsOiAnTGVzcyBUaGFuJywgdmFsdWU6ICdsZXNzVGhhbicsIHR5cGU6ICdudW1iZXInIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgREFURV9PUEVSQVRPUlM6IEZpbHRlck9wZXJhdG9yW10gPSBbXG4gIHsgbGFiZWw6ICdPbicsIHZhbHVlOiAnb24nLCB0eXBlOiAnZGF0ZScgfSxcbiAgeyBsYWJlbDogJ0JlZm9yZScsIHZhbHVlOiAnYmVmb3JlJywgdHlwZTogJ2RhdGUnIH0sXG4gIHsgbGFiZWw6ICdBZnRlcicsIHZhbHVlOiAnYWZ0ZXInLCB0eXBlOiAnZGF0ZScgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBCT09MX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ0lzJywgdmFsdWU6ICdpcycsIHR5cGU6ICdib29sJyB9LFxuICB7IGxhYmVsOiAnSXMgTm90JywgdmFsdWU6ICdpc05vdCcsIHR5cGU6ICdib29sJyB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEVOVU1fT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnSXMnLCB2YWx1ZTogJ2lzJywgdHlwZTogJ2VudW0nIH0sXG4gIHsgbGFiZWw6ICdJcyBOb3QnLCB2YWx1ZTogJ2lzTm90JywgdHlwZTogJ2VudW0nIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbmRpdGlvbiB7XG4gIGNvbHVtbklkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyU3RhdGUge1xuICBncm91cHM6IEZpbHRlckdyb3VwW107XG4gIGFjdGl2ZUZpbHRlcnM6IEZpbHRlckNvbmRpdGlvbltdO1xufVxuIl19
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Declared type of a column's underlying value. Deliberately general rather than
|
|
3
|
+
* filter-specific: operation components that consume `ColumnDefinition` all need
|
|
4
|
+
* to know a column's type (the filter panel picks the value control from it, and
|
|
5
|
+
* import validation, sorting and exports have the same need).
|
|
6
|
+
*/
|
|
7
|
+
export var ColumnValueType;
|
|
8
|
+
(function (ColumnValueType) {
|
|
9
|
+
ColumnValueType["String"] = "String";
|
|
10
|
+
ColumnValueType["Number"] = "Number";
|
|
11
|
+
ColumnValueType["Integer"] = "Integer";
|
|
12
|
+
ColumnValueType["Decimal"] = "Decimal";
|
|
13
|
+
ColumnValueType["Currency"] = "Currency";
|
|
14
|
+
ColumnValueType["Date"] = "Date";
|
|
15
|
+
ColumnValueType["Bool"] = "Bool";
|
|
16
|
+
ColumnValueType["Enum"] = "Enum";
|
|
17
|
+
})(ColumnValueType || (ColumnValueType = {}));
|
|
2
18
|
// ====================================
|
|
3
19
|
// export type ColumnDefinitionBase<T> = {
|
|
4
20
|
// id: string;
|
|
@@ -35,4 +51,4 @@ export {};
|
|
|
35
51
|
// | { [K in keyof T]: ColumnDefinitionWithKey<T, K> }[keyof T]
|
|
36
52
|
// | ColumnDefinitionWithFn<T>
|
|
37
53
|
// | ColumnDefinitionWithNeither<T>;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9DQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBTixJQUFZLGVBU1g7QUFURCxXQUFZLGVBQWU7SUFDekIsb0NBQWlCLENBQUE7SUFDakIsb0NBQWlCLENBQUE7SUFDakIsc0NBQW1CLENBQUE7SUFDbkIsc0NBQW1CLENBQUE7SUFDbkIsd0NBQXFCLENBQUE7SUFDckIsZ0NBQWEsQ0FBQTtJQUNiLGdDQUFhLENBQUE7SUFDYixnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVRXLGVBQWUsS0FBZixlQUFlLFFBUzFCO0FBNEVELHVDQUF1QztBQUV2QywwQ0FBMEM7QUFDMUMsZ0JBQWdCO0FBQ2hCLDhDQUE4QztBQUM5QyxxQ0FBcUM7QUFDckMseUNBQXlDO0FBQ3pDLHVDQUF1QztBQUN2Qyx1Q0FBdUM7QUFDdkMsaUNBQWlDO0FBQ2pDLDhCQUE4QjtBQUM5Qix3QkFBd0I7QUFDeEIsS0FBSztBQUVMLDRFQUE0RTtBQUM1RSx1Q0FBdUM7QUFDdkMsT0FBTztBQUNQLHNCQUFzQjtBQUN0QixrQ0FBa0M7QUFDbEMsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4Qiw0Q0FBNEM7QUFDNUMsS0FBSztBQUVMLCtFQUErRTtBQUMvRSx5QkFBeUI7QUFDekIsK0JBQStCO0FBQy9CLHlDQUF5QztBQUN6QyxLQUFLO0FBRUwsMkVBQTJFO0FBQzNFLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCLEtBQUs7QUFFTCx3RUFBd0U7QUFDeEUsb0NBQW9DO0FBQ3BDLGlFQUFpRTtBQUNqRSxnQ0FBZ0M7QUFDaEMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQWJzdHJhY3RDb250cm9sT3B0aW9ucyxcbiAgQXN5bmNWYWxpZGF0b3JGbixcbiAgRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKiBCdWlsdC1pbiBhZ2dyZWdhdGlvbnMgdGhhdCBjYW4gYmUgY29tcHV0ZWQgb3ZlciBhIGNvbHVtbidzIHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIEZvb3RlckFnZ3JlZ2F0aW9uID0gJ3N1bScgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCcgfCAnY291bnQnO1xuXG4vKipcbiAqIFJpY2hlciBkZWNsYXJhdGl2ZSBmb290ZXIgY29uZmlndXJhdGlvbiBmb3IgYSBjb2x1bW4uIE92ZXJyaWRlcyB0aGUgc2ltcGxlXG4gKiBgZm9vdGVyRm5gIHdoZW4gc2V0LiBEcml2ZXMgYm90aCB0aGUgdGFibGUncyBgPHRmb290PmAgYW5kIGV4cG9ydHMuXG4gKlxuICogVmFsdWUgcHJlY2VkZW5jZSAoaGlnaGVzdCDihpIgbG93ZXN0KTogYHZhbHVlRm5gIOKGkiBgYWdncmVnYXRpb25gIOKGkiBsYWJlbC1vbmx5LlxuICogRm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSByZW5kZXJlZCBtYXJrdXAgdXNlIGBDb2x1bW5EZWZpbml0aW9uLmZvb3RlclRlbXBsYXRlYCxcbiAqIHdoaWNoIHRha2VzIHByZWNlZGVuY2UgaW4gdGhlIHRhYmxlIChidXQgaXMgaWdub3JlZCBieSBleHBvcnRzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5Gb290ZXJDb25maWc8VD4ge1xuICAvKiogQnVpbHQtaW4gYWdncmVnYXRpb24gY29tcHV0ZWQgb3ZlciB0aGUgY29sdW1uJ3MgdmFsdWVzIGFjcm9zcyBhbGwgcm93cy4gKi9cbiAgYWdncmVnYXRpb24/OiBGb290ZXJBZ2dyZWdhdGlvbjtcbiAgLyoqXG4gICAqIEN1c3RvbSByZWR1Y2VyIHJlY2VpdmluZyBldmVyeSAobm9uLWdyb3VwKSByb3cgYW5kIHRoZSBjb2x1bW4uXG4gICAqIFRha2VzIHByZWNlZGVuY2Ugb3ZlciBgYWdncmVnYXRpb25gLlxuICAgKi9cbiAgdmFsdWVGbj86IChyb3dzOiBUW10sIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPikgPT4gYW55O1xuICAvKiogU3RhdGljIGxhYmVsIHJlbmRlcmVkIGFsb25nc2lkZSAvIGluc3RlYWQgb2YgdGhlIGNvbXB1dGVkIHZhbHVlIChlLmcuIFwiVG90YWxcIikuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogRm9ybWF0cyB0aGUgY29tcHV0ZWQgdmFsdWUgZm9yIGRpc3BsYXkgYW5kIHN0cmluZy1iYXNlZCBleHBvcnRzLiAqL1xuICBmb3JtYXR0ZXI/OiAodmFsdWU6IGFueSkgPT4gc3RyaW5nO1xuICAvKiogU2V0IHRvIGBmYWxzZWAgdG8ga2VlcCB0aGlzIGNvbHVtbidzIGZvb3RlciBvdXQgb2YgZXhwb3J0cy4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBpbmNsdWRlSW5FeHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlY2xhcmVkIHR5cGUgb2YgYSBjb2x1bW4ncyB1bmRlcmx5aW5nIHZhbHVlLiBEZWxpYmVyYXRlbHkgZ2VuZXJhbCByYXRoZXIgdGhhblxuICogZmlsdGVyLXNwZWNpZmljOiBvcGVyYXRpb24gY29tcG9uZW50cyB0aGF0IGNvbnN1bWUgYENvbHVtbkRlZmluaXRpb25gIGFsbCBuZWVkXG4gKiB0byBrbm93IGEgY29sdW1uJ3MgdHlwZSAodGhlIGZpbHRlciBwYW5lbCBwaWNrcyB0aGUgdmFsdWUgY29udHJvbCBmcm9tIGl0LCBhbmRcbiAqIGltcG9ydCB2YWxpZGF0aW9uLCBzb3J0aW5nIGFuZCBleHBvcnRzIGhhdmUgdGhlIHNhbWUgbmVlZCkuXG4gKi9cbmV4cG9ydCBlbnVtIENvbHVtblZhbHVlVHlwZSB7XG4gIFN0cmluZyA9ICdTdHJpbmcnLFxuICBOdW1iZXIgPSAnTnVtYmVyJyxcbiAgSW50ZWdlciA9ICdJbnRlZ2VyJyxcbiAgRGVjaW1hbCA9ICdEZWNpbWFsJyxcbiAgQ3VycmVuY3kgPSAnQ3VycmVuY3knLFxuICBEYXRlID0gJ0RhdGUnLFxuICBCb29sID0gJ0Jvb2wnLFxuICBFbnVtID0gJ0VudW0nLFxufVxuXG4vKiogQW4gYWxsb3dlZCB2YWx1ZSBmb3IgYSBjb2x1bW4gd2hvc2UgYHZhbHVlVHlwZWAgaXMgYEVudW1gLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5WYWx1ZU9wdGlvbiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRGVmaW5pdGlvbjxUPiB7XG4gIGlkOiBzdHJpbmc7XG4gIGhlYWRlcjogc3RyaW5nIHwgKChjb250ZXh0OiBhbnkpID0+IGFueSk7XG4gIGFjY2Vzc29yS2V5Pzoga2V5b2YgVDtcbiAgYWNjZXNzb3JGbj86IChyb3c6IFQpID0+IGFueTtcbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgY2VsbEVkaXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogU2ltcGxlIGZvb3RlciByZWR1Y2VyIOKAlCBhbmFsb2dvdXMgdG8gYGFjY2Vzc29yRm5gLiBSZWNlaXZlcyB0aGUgY29sdW1uJ3NcbiAgICogZXh0cmFjdGVkIHZhbHVlcyAoYW5kIHRoZSBub24tZ3JvdXAgcm93cykgYW5kIHJldHVybnMgdGhlIGZvb3RlciB2YWx1ZSB1c2VkXG4gICAqIGJ5IHRoZSB0YWJsZSBmb290ZXIgYW5kIGV4cG9ydHMuIE92ZXJyaWRkZW4gYnkgYGZvb3RlcmAgd2hlbiB0aGF0IGlzIHNldC5cbiAgICovXG4gIGZvb3RlckZuPzogKHZhbHVlczogYW55W10sIHJvd3M6IFRbXSkgPT4gYW55O1xuICAvKiogUmljaGVyIGRlY2xhcmF0aXZlIGZvb3Rlcjsgb3ZlcnJpZGVzIGBmb290ZXJGbmAgd2hlbiBzZXQuICovXG4gIGZvb3Rlcj86IENvbHVtbkZvb3RlckNvbmZpZzxUPjtcbiAgc29ydEFjdGlvbj86ICdBU0MnIHwgJ0RFU0MnO1xuICBmb3JtQ29udHJvbE5hbWU/OiBzdHJpbmc7XG4gIGdyb3VwTmFtZT86IHN0cmluZztcbiAgdmFsaWRhdG9yRm4/OiAodmFsdWU6IFRba2V5b2YgVF0pID0+IGJvb2xlYW47XG4gIGltcG9ydEtleT86IGtleW9mIFQ7XG4gIGNhbkltcG9ydD86IGJvb2xlYW47XG4gIGNhbkV4cG9ydD86IGJvb2xlYW47XG4gIGltcG9ydEJ5Pzoga2V5b2YgVCB8ICgoaW1wb3J0ZWRSb3c6IGFueSkgPT4gVFtrZXlvZiBUXSk7XG4gIGV4cG9ydEJ5Pzoga2V5b2YgVCB8ICgocm93OiBUKSA9PiBhbnkpO1xuICBpc0hpZGRlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoaXMgY29sdW1uJ3MgdmFsdWUuIE9wdGlvbmFsIOKAlCBjb25zdW1lcnMgdGhhdCBuZWVkIGEgdHlwZSBmYWxsIGJhY2tcbiAgICogdG8gaW5mZXJyaW5nIG9uZSBmcm9tIHRoZSBkYXRhIHdoZW4gaXQgaXMgb21pdHRlZC5cbiAgICovXG4gIHZhbHVlVHlwZT86IENvbHVtblZhbHVlVHlwZTtcbiAgLyoqXG4gICAqIEFsbG93ZWQgdmFsdWVzIHdoZW4gYHZhbHVlVHlwZWAgaXMgYEVudW1gLiBFaXRoZXIgYSBwbGFpbiBsaXN0IG9mIG1lbWJlcnMgb3JcbiAgICogYHsgbGFiZWwsIHZhbHVlIH1gIHBhaXJzIHdoZW4gdGhlIGRpc3BsYXkgdGV4dCBkaWZmZXJzIGZyb20gdGhlIHN0b3JlZCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlT3B0aW9ucz86IHN0cmluZ1tdIHwgQ29sdW1uVmFsdWVPcHRpb25bXTtcbn1cblxuLy8gRGVmaW5lIGEgdHlwZSB0aGF0IGV4dGVuZHMgVCB3aXRoIGEgX2tleSBwcm9wZXJ0eVxuZXhwb3J0IHR5cGUgRGF0YVdpdGhLZXk8VD4gPSB7XG4gIF9rZXk6IHN0cmluZyB8IG51bWJlcjtcbiAgX2tleV9wcm9wOiBrZXlvZiBUIHwgJ19pbmRleCc7XG4gIG9yaWdpbmFsRGF0YTogVDtcbn07XG5cbmV4cG9ydCB0eXBlIEdyb3VwZWREYXRhUm93PFQ+ID0gRGF0YVdpdGhLZXk8VD4gJiB7XG4gIGlzR3JvdXBSb3c/OiBib29sZWFuO1xuICBncm91cFZhbHVlPzogYW55O1xuICBncm91cFRpdGxlPzogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xPZjxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0/OiBGb3JtQ29udHJvbDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUdyb3VwQ29uZmlnPFxuICBUQ29udHJvbCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH1cbj4ge1xuICBjb250cm9sczogVENvbnRyb2w7XG4gIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCBudWxsO1xuICBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10gfCBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBFZGl0ZWREYXRhPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXT86IFRbS10gZXh0ZW5kcyBvYmplY3QgPyBQYXJ0aWFsPFRbS10+IDogVFtLXTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBleHBvcnQgdHlwZSBDb2x1bW5EZWZpbml0aW9uQmFzZTxUPiA9IHtcbi8vICAgaWQ6IHN0cmluZztcbi8vICAgaGVhZGVyOiBzdHJpbmcgfCAoKGNvbnRleHQ6IGFueSkgPT4gYW55KTtcbi8vICAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pjtcbi8vICAgY2VsbEVkaXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4vLyAgIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pjtcbi8vICAgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuLy8gICBzb3J0QWN0aW9uPzogJ0FTQycgfCAnREVTQyc7XG4vLyAgIGZvcm1Db250cm9sTmFtZT86IHN0cmluZztcbi8vICAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuLy8gfTtcblxuLy8gLy8gSGVscGVyIHR5cGUgdG8gY3JlYXRlIGEgY29sdW1uIGRlZmluaXRpb24gd2l0aCBhIHNwZWNpZmljIGFjY2Vzc29yIGtleVxuLy8gZXhwb3J0IHR5cGUgQ29sdW1uRGVmaW5pdGlvbldpdGhLZXk8XG4vLyAgIFQsXG4vLyAgIEsgZXh0ZW5kcyBrZXlvZiBUXG4vLyA+ID0gQ29sdW1uRGVmaW5pdGlvbkJhc2U8VD4gJiB7XG4vLyAgIGFjY2Vzc29yS2V5OiBLO1xuLy8gICBhY2Nlc3NvckZuPzogbmV2ZXI7XG4vLyAgIHZhbGlkYXRvckZuPzogKHZhbHVlOiBUW0tdKSA9PiBib29sZWFuO1xuLy8gfTtcblxuLy8gZXhwb3J0IHR5cGUgQ29sdW1uRGVmaW5pdGlvbldpdGhGbjxULCBSID0gYW55PiA9IENvbHVtbkRlZmluaXRpb25CYXNlPFQ+ICYge1xuLy8gICBhY2Nlc3NvcktleT86IG5ldmVyO1xuLy8gICBhY2Nlc3NvckZuOiAocm93OiBUKSA9PiBSO1xuLy8gICB2YWxpZGF0b3JGbj86ICh2YWx1ZTogUikgPT4gYm9vbGVhbjtcbi8vIH07XG5cbi8vIGV4cG9ydCB0eXBlIENvbHVtbkRlZmluaXRpb25XaXRoTmVpdGhlcjxUPiA9IENvbHVtbkRlZmluaXRpb25CYXNlPFQ+ICYge1xuLy8gICBhY2Nlc3NvcktleT86IG5ldmVyO1xuLy8gICBhY2Nlc3NvckZuPzogbmV2ZXI7XG4vLyAgIHZhbGlkYXRvckZuPzogbmV2ZXI7XG4vLyB9O1xuXG4vLyAvLyBVbmlvbiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbGwgcG9zc2libGUgY29sdW1uIGRlZmluaXRpb24gdmFyaWFudHNcbi8vIGV4cG9ydCB0eXBlIENvbHVtbkRlZmluaXRpb248VD4gPVxuLy8gICB8IHsgW0sgaW4ga2V5b2YgVF06IENvbHVtbkRlZmluaXRpb25XaXRoS2V5PFQsIEs+IH1ba2V5b2YgVF1cbi8vICAgfCBDb2x1bW5EZWZpbml0aW9uV2l0aEZuPFQ+XG4vLyAgIHwgQ29sdW1uRGVmaW5pdGlvbldpdGhOZWl0aGVyPFQ+O1xuIl19
|