@yuuvis/app-drive 0.7.4 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/actions/updateContent/update.content.action.mjs +5 -2
- package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs +2 -2
- package/esm2022/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.mjs +343 -0
- package/esm2022/lib/components/drive-search/drive-search.component.mjs +83 -0
- package/esm2022/lib/components/index.mjs +2 -2
- package/esm2022/lib/components/search-filter/search-filter.component.mjs +14 -330
- package/esm2022/lib/components/sort/sort.component.mjs +7 -6
- package/esm2022/lib/drive.icons.mjs +5 -2
- package/esm2022/lib/pages/files/files.component.mjs +31 -26
- package/esm2022/lib/pages/object/object.component.mjs +14 -6
- package/esm2022/lib/services/drive/drive.interface.mjs +1 -1
- package/esm2022/lib/services/drive/drive.service.mjs +9 -4
- package/fesm2022/yuuvis-app-drive.mjs +507 -440
- package/fesm2022/yuuvis-app-drive.mjs.map +1 -1
- package/lib/assets/i18n/de.json +100 -0
- package/lib/assets/i18n/en.json +100 -0
- package/lib/assets/yuvManifest.json +15 -0
- package/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.d.ts +52 -0
- package/lib/components/drive-search/drive-search.component.d.ts +21 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/search-filter/search-filter.component.d.ts +0 -2
- package/lib/container/drive/drive.component.d.ts +3 -0
- package/lib/drive.icons.d.ts +3 -0
- package/lib/pages/files/files.component.d.ts +10 -7
- package/lib/pages/object/object.component.d.ts +2 -1
- package/lib/services/drive/drive.interface.d.ts +1 -0
- package/lib/services/drive/drive.service.d.ts +1 -1
- package/package.json +2 -2
- package/esm2022/lib/components/search-filter/date-range-picker/date-range-picker.component.mjs +0 -38
- package/lib/components/search-filter/date-range-picker/date-range-picker.component.d.ts +0 -13
|
@@ -3,12 +3,11 @@ import { Component, inject, input, output, signal } from '@angular/core';
|
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
|
5
5
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
6
|
-
import { BaseObjectTypeField, ContentStreamField,
|
|
6
|
+
import { BaseObjectTypeField, ContentStreamField, Operator, SearchService } from '@yuuvis/client-core';
|
|
7
|
+
import { RangeSelectDateComponent, RangeSelectFilesizeComponent } from '@yuuvis/client-framework/forms';
|
|
7
8
|
import { ShellService } from '@yuuvis/client-shell-core';
|
|
8
9
|
import { YvcDragScrollModule } from '@yuuvis/components/drag-scroll';
|
|
9
10
|
import { YvcDropdownModule } from '@yuuvis/components/dropdown';
|
|
10
|
-
import { YvcOverlayService } from '@yuuvis/components/overlay';
|
|
11
|
-
import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';
|
|
12
11
|
import * as i0 from "@angular/core";
|
|
13
12
|
import * as i1 from "@yuuvis/components/dropdown";
|
|
14
13
|
import * as i2 from "@yuuvis/client-core";
|
|
@@ -17,21 +16,16 @@ import * as i4 from "@yuuvis/components/drag-scroll";
|
|
|
17
16
|
export class SearchFilterComponent {
|
|
18
17
|
#shell;
|
|
19
18
|
#fb;
|
|
20
|
-
#
|
|
21
|
-
#CREATED_CUSTOM;
|
|
19
|
+
#search;
|
|
22
20
|
#flavors;
|
|
23
|
-
#customDateRange;
|
|
24
21
|
constructor() {
|
|
25
22
|
this.#shell = inject(ShellService);
|
|
26
23
|
this.#fb = inject(FormBuilder);
|
|
27
|
-
this.#
|
|
28
|
-
this.#CREATED_CUSTOM = 'custom';
|
|
24
|
+
this.#search = inject(SearchService);
|
|
29
25
|
this.translate = inject(TranslateService);
|
|
30
26
|
this.ANY_OPTION = 'any';
|
|
31
27
|
this.#flavors = this.#shell.getObjectFlavors();
|
|
32
28
|
this.typeOptions = signal([]);
|
|
33
|
-
this.dateOptions = signal([]);
|
|
34
|
-
this.sizeOptions = signal([]);
|
|
35
29
|
this.query = input(null);
|
|
36
30
|
this.queryChange = output();
|
|
37
31
|
this.filtersActive = signal(false);
|
|
@@ -43,57 +37,6 @@ export class SearchFilterComponent {
|
|
|
43
37
|
this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());
|
|
44
38
|
this.#setupOptions();
|
|
45
39
|
this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));
|
|
46
|
-
// listen to created filter changes to catch custom date range
|
|
47
|
-
this.filterForm
|
|
48
|
-
.get('created')
|
|
49
|
-
?.valueChanges.pipe(takeUntilDestroyed())
|
|
50
|
-
.subscribe((v) => {
|
|
51
|
-
if (v === this.#CREATED_CUSTOM) {
|
|
52
|
-
// open date range picker
|
|
53
|
-
console.log(this.#customDateRange);
|
|
54
|
-
const o = this.#overlay.open(DateRangePickerComponent, {
|
|
55
|
-
range: this.#customDateRange
|
|
56
|
-
});
|
|
57
|
-
o.afterClosed$.subscribe((res) => {
|
|
58
|
-
this.#customDateRange = res.data;
|
|
59
|
-
if (!res.data) {
|
|
60
|
-
this.filterForm.get('created')?.patchValue(this.ANY_OPTION);
|
|
61
|
-
this.#setupDateOptions();
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
this.#onFormValueChange(this.filterForm.value);
|
|
65
|
-
this.#setupDateOptions(this.#customDateRangeToString());
|
|
66
|
-
setTimeout(() => {
|
|
67
|
-
this.filterForm.patchValue({
|
|
68
|
-
created: this.#CREATED_CUSTOM
|
|
69
|
-
}, {
|
|
70
|
-
emitEvent: false
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
#customDateRangeToString() {
|
|
79
|
-
if (!this.#customDateRange)
|
|
80
|
-
return undefined;
|
|
81
|
-
const dp = new LocaleDatePipe(this.translate);
|
|
82
|
-
switch (this.#customDateRange.operator) {
|
|
83
|
-
case Operator.EQUAL: {
|
|
84
|
-
return dp.transform(this.#customDateRange.firstValue, 'shortDate');
|
|
85
|
-
}
|
|
86
|
-
case Operator.GREATER_OR_EQUAL: {
|
|
87
|
-
return `${OperatorLabel.GREATER_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
|
|
88
|
-
}
|
|
89
|
-
case Operator.LESS_OR_EQUAL: {
|
|
90
|
-
return `${OperatorLabel.LESS_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
|
|
91
|
-
}
|
|
92
|
-
case Operator.INTERVAL_INCLUDE_BOTH: {
|
|
93
|
-
return `${dp.transform(this.#customDateRange.firstValue, 'shortDate')} ${OperatorLabel.INTERVAL_INCLUDE_BOTH} ${dp.transform(this.#customDateRange.secondValue, 'shortDate')}`;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return undefined;
|
|
97
40
|
}
|
|
98
41
|
reset() {
|
|
99
42
|
const q = this.query();
|
|
@@ -103,13 +46,6 @@ export class SearchFilterComponent {
|
|
|
103
46
|
}
|
|
104
47
|
}
|
|
105
48
|
#onFormValueChange(v) {
|
|
106
|
-
// do not create a new query if custom date range is selected but not set
|
|
107
|
-
if (v.created === this.#CREATED_CUSTOM && !this.#customDateRange)
|
|
108
|
-
return;
|
|
109
|
-
if (v.created !== this.#CREATED_CUSTOM) {
|
|
110
|
-
this.#customDateRange = undefined;
|
|
111
|
-
this.#setupDateOptions();
|
|
112
|
-
}
|
|
113
49
|
const updatedQuery = this.#applyFilters(v);
|
|
114
50
|
this.queryChange.emit(updatedQuery);
|
|
115
51
|
this.filtersActive.set(!!updatedQuery.filters && updatedQuery.filters.length > 0);
|
|
@@ -125,19 +61,17 @@ export class SearchFilterComponent {
|
|
|
125
61
|
if (typeFilter)
|
|
126
62
|
updatedQuery.filters.push(typeFilter);
|
|
127
63
|
// file size filter
|
|
128
|
-
const sizeFilter = this.#toSizeFilter(v.size);
|
|
64
|
+
const sizeFilter = v.size !== this.ANY_OPTION ? this.#toSizeFilter(v.size) : undefined;
|
|
129
65
|
if (sizeFilter)
|
|
130
66
|
updatedQuery.filters.push(sizeFilter);
|
|
131
67
|
// creation date filter
|
|
132
|
-
const dateFilter = this.#toDateFilter(v.created);
|
|
68
|
+
const dateFilter = v.created !== this.ANY_OPTION ? this.#toDateFilter(v.created) : undefined;
|
|
133
69
|
if (dateFilter)
|
|
134
70
|
updatedQuery.filters.push(dateFilter);
|
|
135
71
|
return updatedQuery;
|
|
136
72
|
}
|
|
137
73
|
#setupOptions() {
|
|
138
74
|
this.#setupTypeOptions();
|
|
139
|
-
this.#setupDateOptions();
|
|
140
|
-
this.#setupSizeOptions();
|
|
141
75
|
}
|
|
142
76
|
#setupTypeOptions() {
|
|
143
77
|
this.typeOptions.set([
|
|
@@ -151,264 +85,11 @@ export class SearchFilterComponent {
|
|
|
151
85
|
}))
|
|
152
86
|
]);
|
|
153
87
|
}
|
|
154
|
-
#setupDateOptions(custom) {
|
|
155
|
-
this.dateOptions.set([
|
|
156
|
-
...[
|
|
157
|
-
{
|
|
158
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.date.any'),
|
|
159
|
-
value: this.ANY_OPTION
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.date.today'),
|
|
163
|
-
value: 'today'
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.date.yesterday'),
|
|
167
|
-
value: 'yesterday'
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.date.thisweek'),
|
|
171
|
-
value: 'thisweek'
|
|
172
|
-
},
|
|
173
|
-
// {
|
|
174
|
-
// label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastweek'),
|
|
175
|
-
// value: 'lastweek'
|
|
176
|
-
// },
|
|
177
|
-
{
|
|
178
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.date.thismonth'),
|
|
179
|
-
value: 'thismonth'
|
|
180
|
-
},
|
|
181
|
-
// {
|
|
182
|
-
// label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastmonth'),
|
|
183
|
-
// value: 'lastmonth'
|
|
184
|
-
// },
|
|
185
|
-
{
|
|
186
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.date.thisyear'),
|
|
187
|
-
value: 'thisyear'
|
|
188
|
-
},
|
|
189
|
-
// {
|
|
190
|
-
// label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastyear'),
|
|
191
|
-
// value: 'lastyear'
|
|
192
|
-
// },
|
|
193
|
-
{
|
|
194
|
-
label: custom || this.translate.instant('yuv.app.drive.search.filter.option.date.custom'),
|
|
195
|
-
value: this.#CREATED_CUSTOM
|
|
196
|
-
}
|
|
197
|
-
]
|
|
198
|
-
]);
|
|
199
|
-
}
|
|
200
|
-
#setupSizeOptions() {
|
|
201
|
-
this.sizeOptions.set([
|
|
202
|
-
{
|
|
203
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.size.any'),
|
|
204
|
-
value: this.ANY_OPTION
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.size.small'),
|
|
208
|
-
value: 's'
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.size.medium'),
|
|
212
|
-
value: 'm'
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.size.large'),
|
|
216
|
-
value: 'l'
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
label: this.translate.instant('yuv.app.drive.search.filter.option.size.verylarge'),
|
|
220
|
-
value: 'xl'
|
|
221
|
-
}
|
|
222
|
-
]);
|
|
223
|
-
}
|
|
224
88
|
#toDateFilter(value) {
|
|
225
|
-
|
|
226
|
-
switch (value) {
|
|
227
|
-
case 'today': {
|
|
228
|
-
dateFilter = {
|
|
229
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
230
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
231
|
-
v1: new Date().toISOString().split('T')[0] + 'T00:00:00.000',
|
|
232
|
-
v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
|
|
233
|
-
};
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
case 'yesterday': {
|
|
237
|
-
const yesterday = new Date();
|
|
238
|
-
yesterday.setDate(yesterday.getDate() - 1);
|
|
239
|
-
dateFilter = {
|
|
240
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
241
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
242
|
-
v1: yesterday.toISOString().split('T')[0] + 'T00:00:00.000',
|
|
243
|
-
v2: yesterday.toISOString().split('T')[0] + 'T23:59:59.000'
|
|
244
|
-
};
|
|
245
|
-
break;
|
|
246
|
-
}
|
|
247
|
-
case 'thisweek': {
|
|
248
|
-
const firstDay = new Date();
|
|
249
|
-
firstDay.setDate(firstDay.getDate() - firstDay.getDay());
|
|
250
|
-
dateFilter = {
|
|
251
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
252
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
253
|
-
v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
|
|
254
|
-
v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
|
|
255
|
-
};
|
|
256
|
-
break;
|
|
257
|
-
}
|
|
258
|
-
// case 'lastweek': {
|
|
259
|
-
// const firstDay = new Date();
|
|
260
|
-
// firstDay.setDate(firstDay.getDate() - firstDay.getDay() - 7);
|
|
261
|
-
// const lastDay = new Date();
|
|
262
|
-
// lastDay.setDate(lastDay.getDate() - lastDay.getDay() - 1);
|
|
263
|
-
// dateFilter = {
|
|
264
|
-
// f: BaseObjectTypeField.CREATION_DATE,
|
|
265
|
-
// o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
266
|
-
// v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
|
|
267
|
-
// v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
|
|
268
|
-
// };
|
|
269
|
-
// break;
|
|
270
|
-
// }
|
|
271
|
-
case 'thismonth': {
|
|
272
|
-
const firstDay = new Date();
|
|
273
|
-
firstDay.setDate(1);
|
|
274
|
-
dateFilter = {
|
|
275
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
276
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
277
|
-
v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
|
|
278
|
-
v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
|
|
279
|
-
};
|
|
280
|
-
break;
|
|
281
|
-
}
|
|
282
|
-
// case 'lastmonth': {
|
|
283
|
-
// const firstDay = new Date();
|
|
284
|
-
// firstDay.setDate(1);
|
|
285
|
-
// firstDay.setMonth(firstDay.getMonth() - 1);
|
|
286
|
-
// const lastDay = new Date();
|
|
287
|
-
// lastDay.setDate(0);
|
|
288
|
-
// dateFilter = {
|
|
289
|
-
// f: BaseObjectTypeField.CREATION_DATE,
|
|
290
|
-
// o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
291
|
-
// v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
|
|
292
|
-
// v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
|
|
293
|
-
// };
|
|
294
|
-
// break;
|
|
295
|
-
// }
|
|
296
|
-
case 'thisyear': {
|
|
297
|
-
const firstDay = new Date();
|
|
298
|
-
firstDay.setMonth(0);
|
|
299
|
-
firstDay.setDate(1);
|
|
300
|
-
dateFilter = {
|
|
301
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
302
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
303
|
-
v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
|
|
304
|
-
v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
|
|
305
|
-
};
|
|
306
|
-
break;
|
|
307
|
-
}
|
|
308
|
-
// case 'lastyear': {
|
|
309
|
-
// const firstDay = new Date();
|
|
310
|
-
// firstDay.setFullYear(firstDay.getFullYear() - 1);
|
|
311
|
-
// firstDay.setMonth(0);
|
|
312
|
-
// firstDay.setDate(1);
|
|
313
|
-
// const lastDay = new Date();
|
|
314
|
-
// lastDay.setFullYear(lastDay.getFullYear() - 1);
|
|
315
|
-
// lastDay.setMonth(11);
|
|
316
|
-
// lastDay.setDate(31);
|
|
317
|
-
// dateFilter = {
|
|
318
|
-
// f: BaseObjectTypeField.CREATION_DATE,
|
|
319
|
-
// o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
320
|
-
// v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
|
|
321
|
-
// v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
|
|
322
|
-
// };
|
|
323
|
-
// break;
|
|
324
|
-
// }
|
|
325
|
-
case this.#CREATED_CUSTOM: {
|
|
326
|
-
if (this.#customDateRange)
|
|
327
|
-
dateFilter = this.#customRangeToFilter(this.#customDateRange);
|
|
328
|
-
else
|
|
329
|
-
this.filterForm.get('created')?.patchValue(this.ANY_OPTION);
|
|
330
|
-
break;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
return dateFilter;
|
|
334
|
-
}
|
|
335
|
-
#customRangeToFilter(rv) {
|
|
336
|
-
const v1 = rv.firstValue.toISOString();
|
|
337
|
-
const v2 = rv.secondValue ? rv.secondValue.toISOString() : undefined;
|
|
338
|
-
let filter;
|
|
339
|
-
switch (rv.operator) {
|
|
340
|
-
case Operator.EQUAL: {
|
|
341
|
-
filter = {
|
|
342
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
343
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
344
|
-
v1: v1.split('T')[0] + 'T00:00:00.000',
|
|
345
|
-
v2: v1.split('T')[0] + 'T23:59:59.000'
|
|
346
|
-
};
|
|
347
|
-
break;
|
|
348
|
-
}
|
|
349
|
-
case Operator.GREATER_OR_EQUAL: {
|
|
350
|
-
filter = {
|
|
351
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
352
|
-
o: rv.operator,
|
|
353
|
-
v1: v1.split('T')[0] + 'T00:00:00.000'
|
|
354
|
-
};
|
|
355
|
-
break;
|
|
356
|
-
}
|
|
357
|
-
case Operator.LESS_OR_EQUAL: {
|
|
358
|
-
filter = {
|
|
359
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
360
|
-
o: rv.operator,
|
|
361
|
-
v1: v1.split('T')[0] + 'T23:59:59.000'
|
|
362
|
-
};
|
|
363
|
-
break;
|
|
364
|
-
}
|
|
365
|
-
case Operator.INTERVAL_INCLUDE_BOTH: {
|
|
366
|
-
filter = {
|
|
367
|
-
f: BaseObjectTypeField.CREATION_DATE,
|
|
368
|
-
o: rv.operator,
|
|
369
|
-
v1: v1.split('T')[0] + 'T00:00:00.000',
|
|
370
|
-
v2: v2.split('T')[0] + 'T23:59:59.000'
|
|
371
|
-
};
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
return filter;
|
|
89
|
+
return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, BaseObjectTypeField.CREATION_DATE) : undefined;
|
|
376
90
|
}
|
|
377
91
|
#toSizeFilter(value) {
|
|
378
|
-
|
|
379
|
-
switch (value) {
|
|
380
|
-
case 's':
|
|
381
|
-
sizeFilter = {
|
|
382
|
-
f: ContentStreamField.LENGTH,
|
|
383
|
-
o: Operator.LESS_THAN,
|
|
384
|
-
v1: 1024 * 1024
|
|
385
|
-
};
|
|
386
|
-
break;
|
|
387
|
-
case 'm':
|
|
388
|
-
sizeFilter = {
|
|
389
|
-
f: ContentStreamField.LENGTH,
|
|
390
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
391
|
-
v1: 1024 * 1024,
|
|
392
|
-
v2: 1024 * 1024 * 10
|
|
393
|
-
};
|
|
394
|
-
break;
|
|
395
|
-
case 'l':
|
|
396
|
-
sizeFilter = {
|
|
397
|
-
f: ContentStreamField.LENGTH,
|
|
398
|
-
o: Operator.INTERVAL_INCLUDE_BOTH,
|
|
399
|
-
v1: 1024 * 1024 * 10,
|
|
400
|
-
v2: 1024 * 1024 * 100
|
|
401
|
-
};
|
|
402
|
-
break;
|
|
403
|
-
case 'xl':
|
|
404
|
-
sizeFilter = {
|
|
405
|
-
f: ContentStreamField.LENGTH,
|
|
406
|
-
o: Operator.GREATER_THAN,
|
|
407
|
-
v1: 1024 * 1024 * 100
|
|
408
|
-
};
|
|
409
|
-
break;
|
|
410
|
-
}
|
|
411
|
-
return sizeFilter;
|
|
92
|
+
return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, ContentStreamField.LENGTH) : undefined;
|
|
412
93
|
}
|
|
413
94
|
#toTypeFilter(value) {
|
|
414
95
|
return value === this.ANY_OPTION
|
|
@@ -420,10 +101,13 @@ export class SearchFilterComponent {
|
|
|
420
101
|
};
|
|
421
102
|
}
|
|
422
103
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
423
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SearchFilterComponent, isStandalone: true, selector: "ymd-search-filter", inputs: { query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <
|
|
104
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SearchFilterComponent, isStandalone: true, selector: "ymd-search-filter", inputs: { query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yuv-range-select-filesize formControlName=\"size\"></yuv-range-select-filesize>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2);padding:2px}:host form yuv-range-select-filesize,:host form yuv-range-select-date,:host form yvc-dropdown{--icon-size: 18px;--form-element-border-color: transparent;font-size:var(--font-caption);color:var(--text-color-caption);outline-offset:0px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: RangeSelectFilesizeComponent, selector: "yuv-range-select-filesize", inputs: ["ranges"] }, { kind: "component", type: RangeSelectDateComponent, selector: "yuv-range-select-date", inputs: ["ranges", "customRange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: YvcDragScrollModule }, { kind: "directive", type: i4.DragScrollDirective, selector: "[yvcDragScroll]" }] }); }
|
|
424
105
|
}
|
|
425
106
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchFilterComponent, decorators: [{
|
|
426
107
|
type: Component,
|
|
427
|
-
args: [{ selector: 'ymd-search-filter', standalone: true, imports: [CommonModule, YvcDropdownModule, TranslateModule,
|
|
108
|
+
args: [{ selector: 'ymd-search-filter', standalone: true, imports: [CommonModule, YvcDropdownModule, TranslateModule,
|
|
109
|
+
RangeSelectFilesizeComponent,
|
|
110
|
+
RangeSelectDateComponent,
|
|
111
|
+
ReactiveFormsModule, YvcDragScrollModule], template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yuv-range-select-filesize formControlName=\"size\"></yuv-range-select-filesize>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2);padding:2px}:host form yuv-range-select-filesize,:host form yuv-range-select-date,:host form yvc-dropdown{--icon-size: 18px;--form-element-border-color: transparent;font-size:var(--font-caption);color:var(--text-color-caption);outline-offset:0px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"] }]
|
|
428
112
|
}], ctorParameters: () => [] });
|
|
429
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQXlDLE1BQU0scUJBQXFCLENBQUM7QUFDOUosT0FBTyxFQUFnQixZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQWtCLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEYsT0FBTyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7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QUFDO0lBQ1IsQ0FBQzsrR0F2YVUscUJBQXFCO21HQUFyQixxQkFBcUIsMFBDbkJsQyx3akJBU0EsK2RETVksWUFBWSw4QkFBRSxpQkFBaUIsb05BQUUsZUFBZSwyRkFBRSxtQkFBbUIsNHJCQUFFLG1CQUFtQjs7NEZBSXpGLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmFzZU9iamVjdFR5cGVGaWVsZCwgQ29udGVudFN0cmVhbUZpZWxkLCBMb2NhbGVEYXRlUGlwZSwgT3BlcmF0b3IsIE9wZXJhdG9yTGFiZWwsIFJhbmdlVmFsdWUsIFNlYXJjaEZpbHRlciwgU2VhcmNoUXVlcnkgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNEcmFnU2Nyb2xsTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2RyYWctc2Nyb2xsJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBPdmVybGF5Q2xvc2VFdmVudCwgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1zZWFyY2gtZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjRHJvcGRvd25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgWXZjRHJhZ1Njcm9sbE1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpbHRlckNvbXBvbmVudCB7XG4gICNzaGVsbCA9IGluamVjdChTaGVsbFNlcnZpY2UpO1xuICAjZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAjb3ZlcmxheSA9IGluamVjdChZdmNPdmVybGF5U2VydmljZSk7XG5cbiAgI0NSRUFURURfQ1VTVE9NID0gJ2N1c3RvbSc7XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQU5ZX09QVElPTiA9ICdhbnknO1xuICAjZmxhdm9ycyA9IHRoaXMuI3NoZWxsLmdldE9iamVjdEZsYXZvcnMoKTtcblxuICB0eXBlT3B0aW9ucyA9IHNpZ25hbDxEcm9wZG93bk9wdGlvbltdPihbXSk7XG4gIGRhdGVPcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcbiAgc2l6ZU9wdGlvbnMgPSBzaWduYWw8RHJvcGRvd25PcHRpb25bXT4oW10pO1xuXG4gIHF1ZXJ5ID0gaW5wdXQ8U2VhcmNoUXVlcnkgfCBudWxsPihudWxsKTtcbiAgcXVlcnlDaGFuZ2UgPSBvdXRwdXQ8U2VhcmNoUXVlcnk+KCk7XG4gIGZpbHRlcnNBY3RpdmUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZpbHRlckZvcm0gPSB0aGlzLiNmYi5ub25OdWxsYWJsZS5ncm91cCh7XG4gICAgdHlwZTogW3RoaXMuQU5ZX09QVElPTl0sXG4gICAgc2l6ZTogW3RoaXMuQU5ZX09QVElPTl0sXG4gICAgY3JlYXRlZDogW3RoaXMuQU5ZX09QVElPTl1cbiAgfSk7XG5cbiAgI2N1c3RvbURhdGVSYW5nZT86IFJhbmdlVmFsdWU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoXykgPT4gdGhpcy4jc2V0dXBPcHRpb25zKCkpO1xuICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcblxuICAgIC8vIGxpc3RlbiB0byBjcmVhdGVkIGZpbHRlciBjaGFuZ2VzIHRvIGNhdGNoIGN1c3RvbSBkYXRlIHJhbmdlXG4gICAgdGhpcy5maWx0ZXJGb3JtXG4gICAgICAuZ2V0KCdjcmVhdGVkJylcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLiNDUkVBVEVEX0NVU1RPTSkge1xuICAgICAgICAgIC8vIG9wZW4gZGF0ZSByYW5nZSBwaWNrZXJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLiNjdXN0b21EYXRlUmFuZ2UpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG8gPSB0aGlzLiNvdmVybGF5Lm9wZW4oRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LCB7XG4gICAgICAgICAgICByYW5nZTogdGhpcy4jY3VzdG9tRGF0ZVJhbmdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgby5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKChyZXM6IE92ZXJsYXlDbG9zZUV2ZW50PFJhbmdlVmFsdWU+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjdXN0b21EYXRlUmFuZ2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnY3JlYXRlZCcpPy5wYXRjaFZhbHVlKHRoaXMuQU5ZX09QVElPTik7XG4gICAgICAgICAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnModGhpcy4jY3VzdG9tRGF0ZVJhbmdlVG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkOiB0aGlzLiNDUkVBVEVEX0NVU1RPTVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNjdXN0b21EYXRlUmFuZ2VUb1N0cmluZygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy4jY3VzdG9tRGF0ZVJhbmdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRwID0gbmV3IExvY2FsZURhdGVQaXBlKHRoaXMudHJhbnNsYXRlKTtcbiAgICBzd2l0Y2ggKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICByZXR1cm4gZHAudHJhbnNmb3JtKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5maXJzdFZhbHVlIGFzIERhdGUsICdzaG9ydERhdGUnKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5HUkVBVEVSX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuTEVTU19PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5MRVNTX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RIOiB7XG4gICAgICAgIHJldHVybiBgJHtkcC50cmFuc2Zvcm0odGhpcy4jY3VzdG9tRGF0ZVJhbmdlLmZpcnN0VmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfSAke09wZXJhdG9yTGFiZWwuSU5URVJWQUxfSU5DTFVERV9CT1RIfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2Uuc2Vjb25kVmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICBjb25zdCBxID0gdGhpcy5xdWVyeSgpO1xuICAgIGlmIChxKSB7XG4gICAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQocSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICAjb25Gb3JtVmFsdWVDaGFuZ2UodjogYW55KSB7XG4gICAgLy8gZG8gbm90IGNyZWF0ZSBhIG5ldyBxdWVyeSBpZiBjdXN0b20gZGF0ZSByYW5nZSBpcyBzZWxlY3RlZCBidXQgbm90IHNldFxuICAgIGlmICh2LmNyZWF0ZWQgPT09IHRoaXMuI0NSRUFURURfQ1VTVE9NICYmICF0aGlzLiNjdXN0b21EYXRlUmFuZ2UpIHJldHVybjtcblxuICAgIGlmKHYuY3JlYXRlZCAhPT0gdGhpcy4jQ1JFQVRFRF9DVVNUT00pIHtcbiAgICAgIHRoaXMuI2N1c3RvbURhdGVSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkUXVlcnk6IFNlYXJjaFF1ZXJ5ID0gdGhpcy4jYXBwbHlGaWx0ZXJzKHYpO1xuICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdCh1cGRhdGVkUXVlcnkpO1xuICAgIHRoaXMuZmlsdGVyc0FjdGl2ZS5zZXQoISF1cGRhdGVkUXVlcnkuZmlsdGVycyAmJiB1cGRhdGVkUXVlcnkuZmlsdGVycy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gICNhcHBseUZpbHRlcnModjogYW55KTogU2VhcmNoUXVlcnkge1xuICAgIGNvbnN0IHVwZGF0ZWRRdWVyeTogU2VhcmNoUXVlcnkgPSB7XG4gICAgICAuLi4odGhpcy5xdWVyeSgpIHx8IHt9KSxcbiAgICAgIGZpbHRlcnM6IFtdXG4gICAgfTtcbiAgICB1cGRhdGVkUXVlcnkuZmlsdGVycyA9IFtdO1xuXG4gICAgLy8gZmlsZSBzaXplIGZpbHRlclxuICAgIGNvbnN0IHR5cGVGaWx0ZXIgPSB0aGlzLiN0b1R5cGVGaWx0ZXIodi50eXBlKTtcbiAgICBpZiAodHlwZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaCh0eXBlRmlsdGVyKTtcblxuICAgIC8vIGZpbGUgc2l6ZSBmaWx0ZXJcbiAgICBjb25zdCBzaXplRmlsdGVyID0gdGhpcy4jdG9TaXplRmlsdGVyKHYuc2l6ZSk7XG4gICAgaWYgKHNpemVGaWx0ZXIpIHVwZGF0ZWRRdWVyeS5maWx0ZXJzLnB1c2goc2l6ZUZpbHRlcik7XG5cbiAgICAvLyBjcmVhdGlvbiBkYXRlIGZpbHRlclxuICAgIGNvbnN0IGRhdGVGaWx0ZXIgPSB0aGlzLiN0b0RhdGVGaWx0ZXIodi5jcmVhdGVkKTtcbiAgICBpZiAoZGF0ZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaChkYXRlRmlsdGVyKTtcblxuICAgIHJldHVybiB1cGRhdGVkUXVlcnk7XG4gIH1cblxuICAjc2V0dXBPcHRpb25zKCkge1xuICAgIHRoaXMuI3NldHVwVHlwZU9wdGlvbnMoKTtcbiAgICB0aGlzLiNzZXR1cERhdGVPcHRpb25zKCk7XG4gICAgdGhpcy4jc2V0dXBTaXplT3B0aW9ucygpO1xuICB9XG5cbiAgI3NldHVwVHlwZU9wdGlvbnMoKSB7XG4gICAgdGhpcy50eXBlT3B0aW9ucy5zZXQoW1xuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5hbnknKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuI2ZsYXZvcnMubWFwKChmOiBPYmplY3RGbGF2b3IpID0+ICh7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGYuaWQpLFxuICAgICAgICB2YWx1ZTogZi5zb3RcbiAgICAgIH0pKVxuICAgIF0pO1xuICB9XG5cbiAgI3NldHVwRGF0ZU9wdGlvbnMoY3VzdG9tPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kYXRlT3B0aW9ucy5zZXQoW1xuICAgICAgLi4uW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uZGF0ZS5hbnknKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5BTllfT1BUSU9OXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRvZGF5JyksXG4gICAgICAgICAgdmFsdWU6ICd0b2RheSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUueWVzdGVyZGF5JyksXG4gICAgICAgICAgdmFsdWU6ICd5ZXN0ZXJkYXknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRoaXN3ZWVrJyksXG4gICAgICAgICAgdmFsdWU6ICd0aGlzd2VlaydcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdHdlZWsnKSxcbiAgICAgICAgLy8gICB2YWx1ZTogJ2xhc3R3ZWVrJ1xuICAgICAgICAvLyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uZGF0ZS50aGlzbW9udGgnKSxcbiAgICAgICAgICB2YWx1ZTogJ3RoaXNtb250aCdcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdG1vbnRoJyksXG4gICAgICAgIC8vICAgdmFsdWU6ICdsYXN0bW9udGgnXG4gICAgICAgIC8vIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRoaXN5ZWFyJyksXG4gICAgICAgICAgdmFsdWU6ICd0aGlzeWVhcidcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdHllYXInKSxcbiAgICAgICAgLy8gICB2YWx1ZTogJ2xhc3R5ZWFyJ1xuICAgICAgICAvLyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IGN1c3RvbSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUuY3VzdG9tJyksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuI0NSRUFURURfQ1VTVE9NXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICBdKTtcbiAgfVxuXG4gICNzZXR1cFNpemVPcHRpb25zKCkge1xuICAgIHRoaXMuc2l6ZU9wdGlvbnMuc2V0KFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uc2l6ZS5hbnknKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uc2l6ZS5zbWFsbCcpLFxuICAgICAgICB2YWx1ZTogJ3MnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5zaXplLm1lZGl1bScpLFxuICAgICAgICB2YWx1ZTogJ20nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5zaXplLmxhcmdlJyksXG4gICAgICAgIHZhbHVlOiAnbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLnNpemUudmVyeWxhcmdlJyksXG4gICAgICAgIHZhbHVlOiAneGwnXG4gICAgICB9XG4gICAgXSk7XG4gIH1cblxuICAjdG9EYXRlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlRmlsdGVyOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAndG9kYXknOiB7XG4gICAgICAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDAwOjAwOjAwLjAwMCcsXG4gICAgICAgICAgdjI6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QyMzo1OTo1OS4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVzdGVyZGF5Jzoge1xuICAgICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogeWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogeWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoaXN3ZWVrJzoge1xuICAgICAgICBjb25zdCBmaXJzdERheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGZpcnN0RGF5LnNldERhdGUoZmlyc3REYXkuZ2V0RGF0ZSgpIC0gZmlyc3REYXkuZ2V0RGF5KCkpO1xuICAgICAgICBkYXRlRmlsdGVyID0ge1xuICAgICAgICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBjYXNlICdsYXN0d2Vlayc6IHtcbiAgICAgIC8vICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgLy8gICBmaXJzdERheS5zZXREYXRlKGZpcnN0RGF5LmdldERhdGUoKSAtIGZpcnN0RGF5LmdldERheSgpIC0gNyk7XG4gICAgICAvLyAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgLy8gICBsYXN0RGF5LnNldERhdGUobGFzdERheS5nZXREYXRlKCkgLSBsYXN0RGF5LmdldERheSgpIC0gMSk7XG4gICAgICAvLyAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAvLyAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgLy8gICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgIC8vICAgICB2MTogZmlyc3REYXkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnLFxuICAgICAgLy8gICAgIHYyOiBsYXN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgLy8gICB9O1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIH1cbiAgICAgIGNhc2UgJ3RoaXNtb250aCc6IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBmaXJzdERheS5zZXREYXRlKDEpO1xuICAgICAgICBkYXRlRmlsdGVyID0ge1xuICAgICAgICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBjYXNlICdsYXN0bW9udGgnOiB7XG4gICAgICAvLyAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0TW9udGgoZmlyc3REYXkuZ2V0TW9udGgoKSAtIDEpO1xuICAgICAgLy8gICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgbGFzdERheS5zZXREYXRlKDApO1xuICAgICAgLy8gICBkYXRlRmlsdGVyID0ge1xuICAgICAgLy8gICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgIC8vICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAvLyAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgIC8vICAgICB2MjogbGFzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgIC8vICAgfTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyB9XG4gICAgICBjYXNlICd0aGlzeWVhcic6IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBmaXJzdERheS5zZXRNb250aCgwKTtcbiAgICAgICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgICAgZGF0ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUsXG4gICAgICAgICAgbzogT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RILFxuICAgICAgICAgIHYxOiBmaXJzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDAwOjAwOjAwLjAwMCcsXG4gICAgICAgICAgdjI6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QyMzo1OTo1OS4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gY2FzZSAnbGFzdHllYXInOiB7XG4gICAgICAvLyAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RnVsbFllYXIoZmlyc3REYXkuZ2V0RnVsbFllYXIoKSAtIDEpO1xuICAgICAgLy8gICBmaXJzdERheS5zZXRNb250aCgwKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgIC8vICAgY29uc3QgbGFzdERheSA9IG5ldyBEYXRlKCk7XG4gICAgICAvLyAgIGxhc3REYXkuc2V0RnVsbFllYXIobGFzdERheS5nZXRGdWxsWWVhcigpIC0gMSk7XG4gICAgICAvLyAgIGxhc3REYXkuc2V0TW9udGgoMTEpO1xuICAgICAgLy8gICBsYXN0RGF5LnNldERhdGUoMzEpO1xuICAgICAgLy8gICBkYXRlRmlsdGVyID0ge1xuICAgICAgLy8gICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgIC8vICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAvLyAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgIC8vICAgICB2MjogbGFzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgIC8vICAgfTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyB9XG4gICAgICBjYXNlIHRoaXMuI0NSRUFURURfQ1VTVE9NOiB7XG4gICAgICAgIGlmICh0aGlzLiNjdXN0b21EYXRlUmFuZ2UpIGRhdGVGaWx0ZXIgPSB0aGlzLiNjdXN0b21SYW5nZVRvRmlsdGVyKHRoaXMuI2N1c3RvbURhdGVSYW5nZSk7XG4gICAgICAgIGVsc2UgdGhpcy5maWx0ZXJGb3JtLmdldCgnY3JlYXRlZCcpPy5wYXRjaFZhbHVlKHRoaXMuQU5ZX09QVElPTik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0ZUZpbHRlcjtcbiAgfVxuXG4gICNjdXN0b21SYW5nZVRvRmlsdGVyKHJ2OiBSYW5nZVZhbHVlKTogU2VhcmNoRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2MSA9IChydi5maXJzdFZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgdjIgPSBydi5zZWNvbmRWYWx1ZSA/IChydi5zZWNvbmRWYWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpIDogdW5kZWZpbmVkO1xuICAgIGxldCBmaWx0ZXI7XG4gICAgc3dpdGNoIChydi5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogdjEuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogdjEuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IHJ2Lm9wZXJhdG9yLFxuICAgICAgICAgIHYxOiB2MS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBPcGVyYXRvci5MRVNTX09SX0VRVUFMOiB7XG4gICAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUsXG4gICAgICAgICAgbzogcnYub3BlcmF0b3IsXG4gICAgICAgICAgdjE6IHYxLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IHJ2Lm9wZXJhdG9yLFxuICAgICAgICAgIHYxOiB2MS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnLFxuICAgICAgICAgIHYyOiB2MiEuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gICN0b1NpemVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNpemVGaWx0ZXI6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdzJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLkxFU1NfVEhBTixcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjRcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjQsXG4gICAgICAgICAgdjI6IDEwMjQgKiAxMDI0ICogMTBcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjQgKiAxMCxcbiAgICAgICAgICB2MjogMTAyNCAqIDEwMjQgKiAxMDBcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd4bCc6XG4gICAgICAgIHNpemVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSCxcbiAgICAgICAgICBvOiBPcGVyYXRvci5HUkVBVEVSX1RIQU4sXG4gICAgICAgICAgdjE6IDEwMjQgKiAxMDI0ICogMTAwXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZUZpbHRlcjtcbiAgfVxuXG4gICN0b1R5cGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB0aGlzLkFOWV9PUFRJT05cbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFMsXG4gICAgICAgICAgbzogT3BlcmF0b3IuSU4sXG4gICAgICAgICAgdjE6IFt2YWx1ZV1cbiAgICAgICAgfTtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgeXZjRHJhZ1Njcm9sbD5cbiAgPHl2Yy1kcm9wZG93biBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCIgW29wdGlvbnNdPVwidHlwZU9wdGlvbnMoKVwiIFtkaXNhYmxlQ2xlYXJCdXR0b25dPVwidHJ1ZVwiPjwveXZjLWRyb3Bkb3duPlxuICA8eXZjLWRyb3Bkb3duIGZvcm1Db250cm9sTmFtZT1cInNpemVcIiBbb3B0aW9uc109XCJzaXplT3B0aW9ucygpXCIgW2Rpc2FibGVDbGVhckJ1dHRvbl09XCJ0cnVlXCI+PC95dmMtZHJvcGRvd24+XG4gIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRlZFwiIFtvcHRpb25zXT1cImRhdGVPcHRpb25zKClcIiBbZGlzYWJsZUNsZWFyQnV0dG9uXT1cInRydWVcIj48L3l2Yy1kcm9wZG93bj5cblxuICBAaWYgKGZpbHRlcnNBY3RpdmUoKSkge1xuICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwicmVzZXQoKVwiPnt7ICd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIuYnV0dG9uLnJlc2V0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICB9XG48L2Zvcm0+XG4iXX0=
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUE2QixhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsSSxPQUFPLEVBQUUsd0JBQXdCLEVBQXdCLDRCQUE0QixFQUE0QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hKLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFrQixpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFZaEYsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLENBQXdC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RSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3hILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBK0I7UUFDM0MsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVTtZQUM5QixDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQztnQkFDRSxDQUFDLEVBQUUsbUJBQW1CLENBQUMseUJBQXlCO2dCQUNoRCxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ2QsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ1osQ0FBQztJQUNSLENBQUM7K0dBakdVLHFCQUFxQjttR0FBckIscUJBQXFCLDBQQ3JCbEMsZ2ZBU0EsZ2xCREtZLFlBQVksOEJBQUUsaUJBQWlCLG9OQUFFLGVBQWUsNEZBQ3hELDRCQUE0QiwwRkFDNUIsd0JBQXdCLG9HQUN4QixtQkFBbUIsNHJCQUFFLG1CQUFtQjs7NEZBSS9CLHFCQUFxQjtrQkFWakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGVBQWU7d0JBQ3hELDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4QixtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmFzZU9iamVjdFR5cGVGaWVsZCwgQ29udGVudFN0cmVhbUZpZWxkLCBPcGVyYXRvciwgU2VhcmNoRmlsdGVyLCBTZWFyY2hRdWVyeSwgU2VhcmNoU2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgUmFuZ2VTZWxlY3REYXRlQ29tcG9uZW50LCBSYW5nZVNlbGVjdERhdGVWYWx1ZSwgUmFuZ2VTZWxlY3RGaWxlc2l6ZUNvbXBvbmVudCwgUmFuZ2VTZWxlY3RGaWxlc2l6ZVZhbHVlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2Zvcm1zJztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNEcmFnU2Nyb2xsTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2RyYWctc2Nyb2xsJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1zZWFyY2gtZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjRHJvcGRvd25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgXG4gICAgUmFuZ2VTZWxlY3RGaWxlc2l6ZUNvbXBvbmVudCwgXG4gICAgUmFuZ2VTZWxlY3REYXRlQ29tcG9uZW50LCBcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBZdmNEcmFnU2Nyb2xsTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmlsdGVyQ29tcG9uZW50IHtcbiAgI3NoZWxsID0gaW5qZWN0KFNoZWxsU2VydmljZSk7XG4gICNmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gICNzZWFyY2ggPSBpbmplY3QoU2VhcmNoU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQU5ZX09QVElPTiA9ICdhbnknO1xuICAjZmxhdm9ycyA9IHRoaXMuI3NoZWxsLmdldE9iamVjdEZsYXZvcnMoKTtcblxuICB0eXBlT3B0aW9ucyA9IHNpZ25hbDxEcm9wZG93bk9wdGlvbltdPihbXSk7XG5cbiAgcXVlcnkgPSBpbnB1dDxTZWFyY2hRdWVyeSB8IG51bGw+KG51bGwpO1xuICBxdWVyeUNoYW5nZSA9IG91dHB1dDxTZWFyY2hRdWVyeT4oKTtcbiAgZmlsdGVyc0FjdGl2ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgZmlsdGVyRm9ybSA9IHRoaXMuI2ZiLm5vbk51bGxhYmxlLmdyb3VwKHtcbiAgICB0eXBlOiBbdGhpcy5BTllfT1BUSU9OXSxcbiAgICBzaXplOiBbdGhpcy5BTllfT1BUSU9OXSxcbiAgICBjcmVhdGVkOiBbdGhpcy5BTllfT1BUSU9OXVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChfKSA9PiB0aGlzLiNzZXR1cE9wdGlvbnMoKSk7XG4gICAgdGhpcy4jc2V0dXBPcHRpb25zKCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IHEgPSB0aGlzLnF1ZXJ5KCk7XG4gICAgaWYgKHEpIHtcbiAgICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdChxKTtcbiAgICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gICNvbkZvcm1WYWx1ZUNoYW5nZSh2OiBhbnkpIHtcbiAgICBjb25zdCB1cGRhdGVkUXVlcnk6IFNlYXJjaFF1ZXJ5ID0gdGhpcy4jYXBwbHlGaWx0ZXJzKHYpO1xuICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdCh1cGRhdGVkUXVlcnkpO1xuICAgIHRoaXMuZmlsdGVyc0FjdGl2ZS5zZXQoISF1cGRhdGVkUXVlcnkuZmlsdGVycyAmJiB1cGRhdGVkUXVlcnkuZmlsdGVycy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gICNhcHBseUZpbHRlcnModjogYW55KTogU2VhcmNoUXVlcnkge1xuICAgIGNvbnN0IHVwZGF0ZWRRdWVyeTogU2VhcmNoUXVlcnkgPSB7XG4gICAgICAuLi4odGhpcy5xdWVyeSgpIHx8IHt9KSxcbiAgICAgIGZpbHRlcnM6IFtdXG4gICAgfTtcbiAgICB1cGRhdGVkUXVlcnkuZmlsdGVycyA9IFtdO1xuXG4gICAgLy8gZmlsZSBzaXplIGZpbHRlclxuICAgIGNvbnN0IHR5cGVGaWx0ZXIgPSB0aGlzLiN0b1R5cGVGaWx0ZXIodi50eXBlKTtcbiAgICBpZiAodHlwZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaCh0eXBlRmlsdGVyKTtcblxuICAgIC8vIGZpbGUgc2l6ZSBmaWx0ZXJcbiAgICBjb25zdCBzaXplRmlsdGVyID0gdi5zaXplICE9PSB0aGlzLkFOWV9PUFRJT04gPyB0aGlzLiN0b1NpemVGaWx0ZXIodi5zaXplKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2l6ZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaChzaXplRmlsdGVyKTtcblxuICAgIC8vIGNyZWF0aW9uIGRhdGUgZmlsdGVyXG4gICAgY29uc3QgZGF0ZUZpbHRlciA9IHYuY3JlYXRlZCAhPT0gdGhpcy5BTllfT1BUSU9OID8gdGhpcy4jdG9EYXRlRmlsdGVyKHYuY3JlYXRlZCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGRhdGVGaWx0ZXIpIHVwZGF0ZWRRdWVyeS5maWx0ZXJzLnB1c2goZGF0ZUZpbHRlcik7XG5cbiAgICByZXR1cm4gdXBkYXRlZFF1ZXJ5O1xuICB9XG5cbiAgI3NldHVwT3B0aW9ucygpIHtcbiAgICB0aGlzLiNzZXR1cFR5cGVPcHRpb25zKCk7XG4gIH1cblxuICAjc2V0dXBUeXBlT3B0aW9ucygpIHtcbiAgICB0aGlzLnR5cGVPcHRpb25zLnNldChbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmFueScpLFxuICAgICAgICB2YWx1ZTogdGhpcy5BTllfT1BUSU9OXG4gICAgICB9LFxuICAgICAgLi4udGhpcy4jZmxhdm9ycy5tYXAoKGY6IE9iamVjdEZsYXZvcikgPT4gKHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZi5pZCksXG4gICAgICAgIHZhbHVlOiBmLnNvdFxuICAgICAgfSkpXG4gICAgXSk7XG4gIH1cblxuICAjdG9EYXRlRmlsdGVyKHZhbHVlOiBSYW5nZVNlbGVjdERhdGVWYWx1ZSk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy4jc2VhcmNoLnJhbmdlVmFsdWVUb1NlYXJjaEZpbHRlcih2YWx1ZS5yYW5nZVZhbHVlLCBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUpIDogdW5kZWZpbmVkO1xuICB9XG4gIFxuICAjdG9TaXplRmlsdGVyKHZhbHVlOiBSYW5nZVNlbGVjdEZpbGVzaXplVmFsdWUpOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuI3NlYXJjaC5yYW5nZVZhbHVlVG9TZWFyY2hGaWx0ZXIodmFsdWUucmFuZ2VWYWx1ZSwgQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAjdG9UeXBlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdGhpcy5BTllfT1BUSU9OXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOLFxuICAgICAgICAgIHYxOiBbdmFsdWVdXG4gICAgICAgIH07XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIHl2Y0RyYWdTY3JvbGw+XG4gIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiIFtvcHRpb25zXT1cInR5cGVPcHRpb25zKClcIiBbZGlzYWJsZUNsZWFyQnV0dG9uXT1cInRydWVcIj48L3l2Yy1kcm9wZG93bj5cbiAgPHl1di1yYW5nZS1zZWxlY3QtZmlsZXNpemUgZm9ybUNvbnRyb2xOYW1lPVwic2l6ZVwiPjwveXV2LXJhbmdlLXNlbGVjdC1maWxlc2l6ZT5cbiAgPHl1di1yYW5nZS1zZWxlY3QtZGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJjcmVhdGVkXCI+PC95dXYtcmFuZ2Utc2VsZWN0LWRhdGU+XG5cbiAgQGlmIChmaWx0ZXJzQWN0aXZlKCkpIHtcbiAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJlc2V0KClcIj57eyAneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLmJ1dHRvbi5yZXNldCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgfVxuPC9mb3JtPlxuIl19
|