@wemake4u/form-player-se 1.0.45 → 1.0.47
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/builtIn/builtIn.mjs +6 -2
- package/esm2022/lib/builtIn/cache.json +30 -0
- package/esm2022/lib/builtIn/form.json +25 -0
- package/esm2022/lib/builtIn/function.json +28 -0
- package/esm2022/lib/builtIn/nav.json +37 -0
- package/esm2022/lib/dialog/dialog.component.mjs +5 -4
- package/esm2022/lib/directives/collapse.directive.mjs +22 -2
- package/esm2022/lib/directives/dropdown.directive.mjs +38 -8
- package/esm2022/lib/directives/required.directive.mjs +2 -2
- package/esm2022/lib/directives/tabcontrol.directive.mjs +1 -1
- package/esm2022/lib/directives/treelist.directive.mjs +98 -0
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +96 -34
- package/esm2022/lib/services/builder.service.mjs +9 -1
- package/esm2022/lib/services/dialog.service.mjs +1 -1
- package/esm2022/lib/services/feel.service.mjs +25 -7
- package/esm2022/lib/services/form.service.mjs +17 -1
- package/esm2022/lib/services/function.service.mjs +26 -8
- package/esm2022/lib/services/programmability.service.mjs +26 -12
- package/esm2022/lib/services/validation.service.mjs +89 -54
- package/esm2022/lib/services/weak.service.mjs +4 -3
- package/esm2022/lib/utils/cacheControl.mjs +24 -0
- package/esm2022/lib/utils/deepEqual.mjs +27 -19
- package/esm2022/lib/utils/flatten.mjs +44 -0
- package/esm2022/lib/utils/observable.mjs +7 -3
- package/fesm2022/wemake4u-form-player-se.mjs +710 -190
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/directives/collapse.directive.d.ts +6 -1
- package/lib/directives/dropdown.directive.d.ts +5 -2
- package/lib/directives/treelist.directive.d.ts +23 -0
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +18 -4
- package/lib/services/dialog.service.d.ts +10 -3
- package/lib/services/feel.service.d.ts +7 -2
- package/lib/services/form.service.d.ts +3 -0
- package/lib/services/function.service.d.ts +4 -1
- package/lib/services/programmability.service.d.ts +3 -2
- package/lib/services/validation.service.d.ts +5 -2
- package/lib/services/weak.service.d.ts +1 -1
- package/lib/utils/cacheControl.d.ts +9 -0
- package/lib/utils/deepEqual.d.ts +3 -1
- package/lib/utils/flatten.d.ts +13 -0
- package/lib/utils/observable.d.ts +1 -1
- package/package.json +3 -3
|
@@ -18,6 +18,17 @@ export class FormService {
|
|
|
18
18
|
const result = this.getControl(control, path, pathOptions);
|
|
19
19
|
return result?.value;
|
|
20
20
|
}
|
|
21
|
+
reset(control, path) {
|
|
22
|
+
const targetControl = this.getControl(control, path);
|
|
23
|
+
targetControl?.reset();
|
|
24
|
+
}
|
|
25
|
+
resetAll(control, ...paths) {
|
|
26
|
+
if (!paths?.length)
|
|
27
|
+
return;
|
|
28
|
+
for (const path of paths) {
|
|
29
|
+
this.reset(control, path);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
21
32
|
getControl(control, path, pathOptions) {
|
|
22
33
|
return this.applyPath(control, path, pathOptions);
|
|
23
34
|
}
|
|
@@ -262,6 +273,8 @@ export class FormService {
|
|
|
262
273
|
return {
|
|
263
274
|
set: (path, value, pathOptions) => this.set(formGroup, path, value, pathOptions, patchOptions),
|
|
264
275
|
get: (path, pathOptions) => this.get(formGroup, path, pathOptions),
|
|
276
|
+
reset: (path) => this.reset(formGroup, path),
|
|
277
|
+
resetAll: (...paths) => this.resetAll(formGroup, ...paths),
|
|
265
278
|
status: (path, pathOptions) => this.status(formGroup, path, pathOptions),
|
|
266
279
|
prepend: (path, value, pathOptions) => this.prepend(formGroup, path, value, pathOptions, patchOptions),
|
|
267
280
|
append: (path, value, pathOptions) => this.append(formGroup, path, value, pathOptions, patchOptions),
|
|
@@ -335,6 +348,9 @@ export class FormService {
|
|
|
335
348
|
}
|
|
336
349
|
if (current.get(segment)) {
|
|
337
350
|
current = current.get(segment);
|
|
351
|
+
if (!isLeaf && current instanceof FormControl && current.value === null && options?.breakOnNull) {
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
338
354
|
}
|
|
339
355
|
else {
|
|
340
356
|
if (createPath) {
|
|
@@ -446,4 +462,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
446
462
|
providedIn: 'root'
|
|
447
463
|
}]
|
|
448
464
|
}] });
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFtQixTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFRLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBbUI5QyxDQUFDO0FBS0YsTUFBTSxPQUFPLFdBQVc7SUFFdEIsR0FBRyxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLEtBQVUsRUFBRSxXQUF5QixFQUFFLFlBQTJCO1FBRTFHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RixJQUFJLENBQUMsY0FBYztZQUNqQixPQUFPLEtBQUssQ0FBQztRQUVmLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVoRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsV0FBeUI7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNELE9BQU8sTUFBTSxFQUFFLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLFdBQXlCO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxPQUFPLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQUUsWUFBMkI7UUFDOUcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEcsSUFBSSxTQUFTLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQUUsWUFBMkI7UUFDN0csTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEcsSUFBSSxTQUFTLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLEtBQWEsRUFBRSxLQUFVLEVBQUUsV0FBeUIsRUFBRSxZQUEyQjtRQUM1SCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRyxJQUFJLFNBQVMsWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUF3QixFQUFFLElBQVUsRUFBRSxLQUFhO1FBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksU0FBUyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUF3QixFQUFFLElBQVUsRUFBRSxLQUFhO1FBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksU0FBUyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFMUQsTUFBTSxPQUFPLEdBQW9CLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLEtBQWE7UUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFN0QsTUFBTSxPQUFPLEdBQW9CLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLFdBQXlCO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRCxPQUFPLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELHlCQUF5QixDQUFDLE9BQXdCLEVBQUUsWUFBcUIsSUFBSTtRQUMzRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsUUFBbUM7UUFDOUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQXdCO1FBQ3pDLE1BQU0sT0FBTyxHQUFpRCxFQUFFLENBQUM7UUFFakUsSUFBSSxPQUFPLENBQUMsUUFBUTtZQUNsQixPQUFPLE9BQU8sQ0FBQztRQUVqQixJQUFJLE9BQU8sWUFBWSxTQUFTLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQzthQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FDSCxPQUF3QixFQUFFLEtBQVUsRUFBRSxPQUFzQjtRQUU1RCxNQUFNLGNBQWMsR0FBRztZQUNyQixTQUFTLEVBQUUsSUFBSTtZQUNmLFlBQVksRUFBRSxLQUFLO1lBQ25CLGFBQWEsRUFBRSxJQUFJO1lBQ25CLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxPQUFPLEVBQUUsUUFBUTtnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUM3QyxDQUFDLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQ2hDLElBQUksT0FBTyxFQUFFLFNBQVM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBRUYsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUNwRCxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFFdEMsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFLENBQUM7WUFDbkMsSUFBSSxZQUFZLElBQUksT0FBTyxLQUFLLEtBQUssT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxpQ0FBaUMsT0FBTyxPQUFPLENBQUMsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUU1RixJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUNqRCxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7Z0JBQzVELE9BQU87WUFDVCxDQUFDO1lBQ0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFDSSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDbEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNsQixPQUFPO2dCQUNULENBQUM7cUJBQ0ksSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztvQkFDMUIsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3pELENBQUM7cUJBQ0ksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzNELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7cUJBQ0ksQ0FBQztvQkFDSixJQUFJLENBQUMsUUFBUSxHQUFHLCtCQUErQixDQUFDLENBQUM7Z0JBQ25ELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDakIsSUFBSSxlQUFlLENBQUMsWUFBWSxDQUFDOzRCQUMvQixZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7OzRCQUV2QixZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUNJLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixDQUFDO3FCQUNJLENBQUM7b0JBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQ0ksQ0FBQztZQUNKLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQXdCO1FBQzlCLE1BQU0sSUFBSSxHQUF3QixFQUFFLENBQUM7UUFDckMsSUFBSSxPQUFPLEdBQTJCLE9BQU8sQ0FBQztRQUU5QyxPQUFPLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDO1lBRW5DLElBQUksTUFBTSxZQUFZLFNBQVMsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO2lCQUFNLElBQUksTUFBTSxZQUFZLFNBQVMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUNaLFNBQW9CLEVBQ2xCLElBQVUsRUFDVixXQUF5QjtRQUczQixNQUFNLE9BQU8sR0FBRyxHQUFnQyxFQUFFLENBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVoRCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUMzQixJQUFJLFFBQVE7WUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVsQyxPQUFPLElBQUksVUFBVSxDQUFrQixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xELE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDaEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNwQixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUF3QixFQUNsQyxjQUEyQjtRQUc3QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7aUJBQzNCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBRXJCLElBQUksS0FBSyxZQUFZLFdBQVc7WUFDOUIsS0FBSyxZQUFZLFNBQVM7WUFDMUIsS0FBSyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxTQUFTLENBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JDLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBRWhELE1BQU0sUUFBUSxHQUF1QyxFQUFFLENBQUM7WUFFeEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFFRCxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBYztRQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFpQjtZQUNqQyxNQUFNLEVBQUUsS0FBSztTQUNkLENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRyxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQVUsRUFBRSxXQUF5QixFQUFXLEVBQUUsQ0FDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDO1lBRTdELEdBQUcsRUFBRSxDQUFDLElBQVUsRUFBRSxXQUF5QixFQUErQixFQUFFLENBQzFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUM7WUFFeEMsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLFdBQXlCLEVBQWlDLEVBQUUsQ0FDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztZQUUzQyxPQUFPLEVBQUUsQ0FBQyxJQUFVLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQVcsRUFBRSxDQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUM7WUFFakUsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQVUsRUFBRSxXQUF5QixFQUFXLEVBQUUsQ0FDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDO1lBRWhFLE1BQU0sRUFBRSxDQUFDLElBQVUsRUFBRSxLQUFhLEVBQUUsS0FBVSxFQUFFLFdBQXlCLEVBQVcsRUFBRSxDQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDO1lBRXZFLE1BQU0sRUFBRSxDQUFDLElBQVUsRUFBRSxLQUFhLEVBQVcsRUFBRSxDQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1lBRXJDLE1BQU0sRUFBRSxDQUFDLElBQVUsRUFBRSxLQUFhLEVBQVcsRUFBRSxDQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1lBRXJDLFFBQVEsRUFBRSxDQUFDLElBQVUsRUFBRSxLQUFhLEVBQVcsRUFBRSxDQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1lBRXZDLFlBQVksRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7U0FDdkQsQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQ2YsT0FBd0IsRUFDeEIsSUFBVSxFQUNWLE9BQXFCO1FBRXJCLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxPQUFPLEVBQUUsUUFBUTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBUyxFQUFFO1lBQ3ZDLElBQUksT0FBTyxFQUFFLFNBQVM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7UUFDekUsQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFpQixFQUFtQixFQUFFO1lBQzNELFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLEtBQUssU0FBUyxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLE9BQU8sR0FBMkIsT0FBTyxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDO1FBRTVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNLFFBQVEsR0FDWixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxTQUFTLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPO29CQUM3QyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBRWhCLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFaEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sS0FBSyxDQUFDLCtCQUErQixjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUVELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBWSxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNwQyxPQUFPLEtBQUssQ0FBQyxrQ0FBa0MsY0FBYyxFQUFFLFVBQVUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RyxDQUFDO2dCQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztnQkFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxTQUFTLEtBQUssOEJBQThCLGNBQWMsRUFBRSxlQUFlLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNuRyxPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQztnQkFFRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QixDQUFDO2lCQUFNLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBRXZDLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN6QixPQUFPLEdBQUcsQ0FBQyxPQUFPLFlBQVksU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7d0JBQzlELENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQzt3QkFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ25CLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDdkIsT0FBTyxHQUFHLENBQUMsT0FBTyxZQUFZLFNBQVMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUM5RCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7d0JBQ3RCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNqQixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sWUFBWSxTQUFTLENBQUMsSUFBSSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7b0JBQzVELE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsT0FBTyxLQUFLLENBQUMsa0NBQWtDLGNBQWMsRUFBRSxVQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkcsQ0FBQztnQkFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNmLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3hDLE9BQU8sR0FBRyxVQUFVLENBQUM7b0JBQ3ZCLENBQUM7eUJBQ0ksQ0FBQzt3QkFDSixJQUFJLENBQUMscUJBQXFCLGNBQWMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO3dCQUN2RSxPQUFPLFNBQVMsQ0FBQztvQkFDbkIsQ0FBQztnQkFDSCxDQUFDO1lBRUgsQ0FBQztpQkFDSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLFNBQVM7WUFDYixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osT0FBTyxLQUFLLENBQUMseUJBQXlCLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQVU7UUFDekIsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sS0FBNEIsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxFQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sT0FBTyxDQUFDLEtBQVU7UUFDeEIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFvQixFQUFFLEtBQWEsRUFBRSxLQUFVLEVBQUUsT0FBc0I7UUFDN0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQW9CLEVBQUUsS0FBYTtRQUN6RCxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNO1lBQUUsS0FBSyxDQUFDO1FBQ25ELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQW9CO1FBRTFDLE1BQU0sVUFBVSxHQUFHLFNBQWdCLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQztZQUMvRCxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtZQUN6QixDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQVU7UUFDdkMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQVk7UUFDekMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLENBQUMsaUJBQWlCLENBQUMsT0FBd0I7UUFDakQsTUFBTSxPQUFPLENBQUM7UUFFZCxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQXdCO1FBRTVDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLElBQUksT0FBTyxDQUFDLFFBQVE7WUFDbEIsT0FBTyxNQUFNLENBQUM7UUFFaEIsSUFBSSxPQUFPLFlBQVksU0FBUyxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQzthQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sRUFBRSxDQUFDO1FBQ1gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBWTtRQUM3QixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRU8sU0FBUyxDQUFDLE9BQVk7UUFDNUIsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7SUFDOUMsQ0FBQztJQUVPLGdCQUFnQixDQUN0QixPQUF3QixFQUN4QixZQUFZLEdBQUcsR0FBRztRQUVsQixPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQ2hDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSLENBQUM7SUFDSixDQUFDO3dHQXRpQlUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4vcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGlzTnVsbGFibGVHcm91cCB9IGZyb20gJy4uL3V0aWxzL0Zvcm1Hcm91cEV4JztcclxuaW1wb3J0IHsgUGF0aCwgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL2NvbW1vbi9wYXRoJztcclxuaW1wb3J0IHsgZmlsdGVyLCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBoYXNGYWN0b3J5IH0gZnJvbSAnLi9idWlsZGVyLnNlcnZpY2UnO1xyXG5cclxudHlwZSBDb250cm9sVHlwZSA9ICdhcnJheScgfCAnZ3JvdXAnIHwgJ2NvbnRyb2wnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXRjaE9wdGlvbnMge1xyXG4gIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgZW1pdEVycm9yPzogYm9vbGVhbjtcclxuICBlbWl0V2Fybj86IGJvb2xlYW47XHJcbiAgdmFsaWRhdGVUeXBlPzogYm9vbGVhbjtcclxuICBmYWxsYmFja1ZhbHVlPzogYW55O1xyXG4gIHN0cmljdDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXRoT3B0aW9ucyB7XHJcbiAgZW1pdEVycm9yPzogYm9vbGVhbjtcclxuICBlbWl0V2Fybj86IGJvb2xlYW47XHJcbiAgY3JlYXRlPzogYm9vbGVhbjtcclxuICBleHBlY3RlZD86IENvbnRyb2xUeXBlO1xyXG4gIGJyZWFrT25BcnJheT86IGJvb2xlYW47XHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtU2VydmljZSBpbXBsZW1lbnRzIElFdmFsdWF0b3JQcm92aWRlciB7XHJcblxyXG4gIHNldChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRDb250cm9sID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMgPz8geyBjcmVhdGU6IHRydWUgfSk7XHJcblxyXG4gICAgaWYgKCFjdXJyZW50Q29udHJvbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMucGF0Y2goY3VycmVudENvbnRyb2wsIHZhbHVlLCBwYXRjaE9wdGlvbnMpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IGFueSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldENvbnRyb2woY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdD8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJlcGVuZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMgPz8geyBleHBlY3RlZDogXCJhcnJheVwiLCBjcmVhdGU6IHRydWUgfSk7XHJcbiAgICBpZiAoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluc2VydEludG9BcnJheShmb3JtQXJyYXksIDAsIHZhbHVlLCBwYXRjaE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXBwZW5kKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zPzogUGF0Y2hPcHRpb25zKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyA/PyB7IGV4cGVjdGVkOiBcImFycmF5XCIsIGNyZWF0ZTogdHJ1ZSB9KTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW50b0FycmF5KGZvcm1BcnJheSwgZm9ybUFycmF5Lmxlbmd0aCwgdmFsdWUsIHBhdGNoT3B0aW9ucyk7ICAgICAgXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpbnNlcnQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnM/OiBQYXRjaE9wdGlvbnMpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zID8/IHsgZXhwZWN0ZWQ6IFwiYXJyYXlcIiwgY3JlYXRlOiB0cnVlIH0pO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRJbnRvQXJyYXkoZm9ybUFycmF5LCBpbmRleCwgdmFsdWUsIHBhdGNoT3B0aW9ucyk7ICBcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgpO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVGcm9tQXJyYXkoZm9ybUFycmF5LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3ZlVXAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoKTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgaWYgKGluZGV4IDw9IDAgfHwgaW5kZXggPj0gZm9ybUFycmF5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY29uc3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5Lmluc2VydChpbmRleCAtIDEsIGNvbnRyb2wpO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9ICAgIFxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW92ZURvd24oY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoKTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBmb3JtQXJyYXkubGVuZ3RoIC0gMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY29uc3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgZm9ybUFycmF5Lmluc2VydChpbmRleCArIDEsIGNvbnRyb2wpO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdGF0dXMoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKSA6IEZvcm1Db250cm9sU3RhdHVzIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zKTtcclxuICAgIHJldHVybiByZXN1bHQ/LnN0YXR1cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFsbFZhbHVlQW5kVmFsaWRpdHkoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlbWl0RXZlbnQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5lbnVtZXJhdGVDb250cm9scyhjb250cm9sKSkge1xyXG4gICAgICBjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3VudEludmFsaWQoY29udHJvbHM6IEl0ZXJhYmxlPEFic3RyYWN0Q29udHJvbD4pIHtcclxuICAgIGxldCBlcnJvcnMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XHJcbiAgICAgIGVycm9ycyArPSB0aGlzLmNvbGxlY3RFcnJvcnMoY29udHJvbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW52YWxpZENvbnRyb2xzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgcGF0aDogc3RyaW5nLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfVtdIHtcclxuICAgIGNvbnN0IGludmFsaWQ6IHsgcGF0aDogc3RyaW5nLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfVtdID0gW107XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuZGlzYWJsZWQpXHJcbiAgICAgIHJldHVybiBpbnZhbGlkO1xyXG5cclxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgaW52YWxpZC5wdXNoKC4uLnRoaXMuZ2V0SW52YWxpZENvbnRyb2xzKGNoaWxkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICBpbnZhbGlkLnB1c2goeyBwYXRoOiB0aGlzLmdldFBhdGgoY29udHJvbCkuam9pbihcIi5cIiksIGNvbnRyb2wgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBwYXRjaChcclxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdmFsdWU6IGFueSwgb3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gICAgICBlbWl0RXZlbnQ6IHRydWUsXHJcbiAgICAgIHZhbGlkYXRlVHlwZTogZmFsc2UsXHJcbiAgICAgIGZhbGxiYWNrVmFsdWU6IG51bGwsXHJcbiAgICAgIHN0cmljdDogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB3YXJuID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucz8uZW1pdFdhcm4pXHJcbiAgICAgICAgY29uc29sZS53YXJuKGBbcGF0Y2hDb250cm9sXSAke21lc3NhZ2V9YClcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXJyb3IgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zPy5lbWl0RXJyb3IpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB7IGVtaXRFdmVudCwgdmFsaWRhdGVUeXBlLCBmYWxsYmFja1ZhbHVlLCBzdHJpY3QgfVxyXG4gICAgICA9IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcclxuXHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XHJcbiAgICAgIGlmICh2YWxpZGF0ZVR5cGUgJiYgdHlwZW9mIHZhbHVlICE9PSB0eXBlb2YgY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHdhcm4oYFZhbHVlIHR5cGUgbWlzbWF0Y2g6IGV4cGVjdGVkICR7dHlwZW9mIGNvbnRyb2wudmFsdWV9LCBidXQgcmVjZWl2ZWQgJHt0eXBlb2YgdmFsdWV9YCk7XHJcblxyXG4gICAgICAgIGlmIChmYWxsYmFja1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUoZmFsbGJhY2tWYWx1ZSwgeyBlbWl0RXZlbnQgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlIHR5cGUgYW5kIG5vIGZhbGxiYWNrIHZhbHVlIHByb3ZpZGVkLicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50IH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICBpZiAoaXNOdWxsYWJsZUdyb3VwKGNvbnRyb2wpKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnRyb2wuc2V0TnVsbCgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb250cm9sLmlzTnVsbCgpKSB7XHJcbiAgICAgICAgICBjb250cm9sLnNldE5vdE51bGwoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5hc09iamVjdCh2YWx1ZSk7XHJcbiAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgdGhpcy5wYXRjaChjb250cm9sLmNvbnRyb2xzW2tleV0sIHZhbHVlW2tleV0sIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghc3RyaWN0KSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdDb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sRnJvbVZhbHVlKHZhbHVlW2tleV0pO1xyXG4gICAgICAgICAgdGhpcy5zZXRVbmtub3duKG5ld0NvbnRyb2wpO1xyXG4gICAgICAgICAgY29udHJvbC5hZGRDb250cm9sKGtleSwgbmV3Q29udHJvbCk7XHJcbiAgICAgICAgICB0aGlzLnBhdGNoKG5ld0NvbnRyb2wsIHZhbHVlW2tleV0sIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdhcm4oYEtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiB0aGUgRm9ybUdyb3VwLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghKGtleSBpbiBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICBjb25zdCBjaGlsZENvbnRyb2wgPSBjb250cm9sLmdldChrZXkpO1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29udHJvbCkge1xyXG4gICAgICAgICAgICBpZiAoaXNOdWxsYWJsZUdyb3VwKGNoaWxkQ29udHJvbCkpXHJcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnNldE51bGwoKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7ICAgICBcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5hc0FycmF5KHZhbHVlKTtcclxuICAgICAgd2hpbGUgKGNvbnRyb2wubGVuZ3RoIDwgY3VycmVudFZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Ub0FkZCA9IGN1cnJlbnRWYWx1ZVtjb250cm9sLmxlbmd0aF07XHJcbiAgICAgICAgaWYgKGhhc0ZhY3RvcnkoY29udHJvbCkpIHtcclxuICAgICAgICAgIGNvbnRyb2wuYWRkSXRlbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnRyb2wucHVzaCh0aGlzLmNyZWF0ZUNvbnRyb2xGcm9tVmFsdWUoaXRlbVRvQWRkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChjb250cm9sLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBjb250cm9sLnJlbW92ZUF0KGNvbnRyb2wubGVuZ3RoIC0gMSk7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudFZhbHVlLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHRoaXMucGF0Y2goY29udHJvbC5hdChpbmRleCksIGl0ZW0sIG9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBlcnJvcignVW5zdXBwb3J0ZWQgQWJzdHJhY3RDb250cm9sIHR5cGUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYXRoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xyXG4gICAgY29uc3QgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnQ6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBjb250cm9sO1xyXG5cclxuICAgIHdoaWxlIChjdXJyZW50Py5wYXJlbnQpIHtcclxuICAgICAgY29uc3QgcGFyZW50OiBhbnkgPSBjdXJyZW50LnBhcmVudDtcclxuXHJcbiAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jb250cm9scy5pbmRleE9mKGN1cnJlbnQpO1xyXG4gICAgICAgIHBhdGgudW5zaGlmdChpbmRleCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMocGFyZW50LmNvbnRyb2xzKS5maW5kKGsgPT4gcGFyZW50LmdldChrKSA9PT0gY3VycmVudCk7XHJcbiAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgcGF0aC51bnNoaWZ0KGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyZW50ID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgd2FpdEZvckNvbnRyb2woXHJcbiAgICBmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBwYXRoOiBQYXRoXHJcbiAgICAsIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnNcclxuICApOiBPYnNlcnZhYmxlPEFic3RyYWN0Q29udHJvbD4ge1xyXG5cclxuICAgIGNvbnN0IHJlc29sdmUgPSAoKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkID0+XHJcbiAgICAgIHRoaXMuZ2V0Q29udHJvbChmb3JtR3JvdXAsIHBhdGgsIHBhdGhPcHRpb25zKTtcclxuXHJcbiAgICBjb25zdCBleGlzdGluZyA9IHJlc29sdmUoKTtcclxuICAgIGlmIChleGlzdGluZykgcmV0dXJuIG9mKGV4aXN0aW5nKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8QWJzdHJhY3RDb250cm9sPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgY29uc3Qgc3ViID0gZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGN0cmwgPSByZXNvbHZlKCk7XHJcbiAgICAgICAgaWYgKGN0cmwpIHtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQoY3RybCk7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiAoKSA9PiBzdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdHVzQ2hhbmdlcyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwgd2FpdEZvclBlbmRpbmc/OiAoKSA9PiB2b2lkXHJcbiAgKTogT2JzZXJ2YWJsZTxGb3JtQ29udHJvbFN0YXR1cz4ge1xyXG5cclxuICAgIGlmIChjb250cm9sLnN0YXR1cyA9PT0gJ1BFTkRJTkcnICYmIHdhaXRGb3JQZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMud2FpdFVudGlsU2V0dGxlZChjb250cm9sKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gd2FpdEZvclBlbmRpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbnRyb2wuc3RhdHVzQ2hhbmdlcztcclxuICB9XHJcblxyXG4gIGJ1aWxkQ29udHJvbCh2YWx1ZTogYW55KSA6IEFic3RyYWN0Q29udHJvbFxyXG4gIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8XHJcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8XHJcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIG5ldyBGb3JtQXJyYXkoXHJcbiAgICAgICAgdmFsdWUubWFwKHYgPT4gdGhpcy5idWlsZENvbnRyb2wodikpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcclxuICAgICAgICBjb250cm9sc1trZXldID0gdGhpcy5idWlsZENvbnRyb2wodmFsdWVba2V5XSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldENvbnRleHQoZm9ybUdyb3VwOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGlmICghKGZvcm1Hcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NvcGUgaXMgbm90IGEgRm9ybUdyb3VwXCIpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGF0Y2hPcHRpb25zOiBQYXRjaE9wdGlvbnMgPSB7XHJcbiAgICAgIHN0cmljdDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2V0OiAocGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLnNldChmb3JtR3JvdXAsIHBhdGgsIHZhbHVlLCBwYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zKSxcclxuXHJcbiAgICAgIGdldDogKHBhdGg6IFBhdGgsIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQgPT5cclxuICAgICAgICB0aGlzLmdldChmb3JtR3JvdXAsIHBhdGgsIHBhdGhPcHRpb25zKSxcclxuXHJcbiAgICAgIHN0YXR1czogKHBhdGg6IFBhdGgsIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBGb3JtQ29udHJvbFN0YXR1cyB8IHVuZGVmaW5lZCA9PlxyXG4gICAgICAgIHRoaXMuc3RhdHVzKGZvcm1Hcm91cCwgcGF0aCwgcGF0aE9wdGlvbnMpLFxyXG5cclxuICAgICAgcHJlcGVuZDogKHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5wcmVwZW5kKGZvcm1Hcm91cCwgcGF0aCwgdmFsdWUsIHBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnMpLFxyXG5cclxuICAgICAgYXBwZW5kOiAocGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLmFwcGVuZChmb3JtR3JvdXAsIHBhdGgsIHZhbHVlLCBwYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zKSxcclxuXHJcbiAgICAgIGluc2VydDogKHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5pbnNlcnQoZm9ybUdyb3VwLCBwYXRoLCBpbmRleCwgdmFsdWUsIHBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnMpLFxyXG5cclxuICAgICAgcmVtb3ZlOiAocGF0aDogUGF0aCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLnJlbW92ZShmb3JtR3JvdXAsIHBhdGgsIGluZGV4KSxcclxuXHJcbiAgICAgIG1vdmVVcDogKHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5tb3ZlVXAoZm9ybUdyb3VwLCBwYXRoLCBpbmRleCksXHJcblxyXG4gICAgICBtb3ZlRG93bjogKHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5tb3ZlRG93bihmb3JtR3JvdXAsIHBhdGgsIGluZGV4KSxcclxuXHJcbiAgICAgIGJ1aWxkQ29udHJvbDogKHZhbHVlOiBhbnkpID0+IHRoaXMuYnVpbGRDb250cm9sKHZhbHVlKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlQYXRoKFxyXG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxyXG4gICAgcGF0aDogUGF0aCxcclxuICAgIG9wdGlvbnM/OiBQYXRoT3B0aW9uc1xyXG4gICk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCB3YXJuID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucz8uZW1pdFdhcm4pIGNvbnNvbGUud2FybihgW2FwcGx5UGF0aF0gJHttZXNzYWdlfWApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBlcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpOiBuZXZlciA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zPy5lbWl0RXJyb3IpIHRocm93IG5ldyBFcnJvcihgW2FwcGx5UGF0aF0gJHttZXNzYWdlfWApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFthcHBseVBhdGhdICR7bWVzc2FnZX1gKTsgLy8gZmFsbGJhY2sgZGVmYXVsdCBiZWhhdmlvclxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVDb250cm9sID0gKHR5cGU6IENvbnRyb2xUeXBlKTogQWJzdHJhY3RDb250cm9sID0+IHtcclxuICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnYXJyYXknOiByZXR1cm4gbmV3IEZvcm1BcnJheShbXSk7XHJcbiAgICAgICAgY2FzZSAnZ3JvdXAnOiByZXR1cm4gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgICAgY2FzZSAnY29udHJvbCc6IGRlZmF1bHQ6IHJldHVybiBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VnbWVudHMgPSBub3JtYWxpemVQYXRoKHBhdGgpO1xyXG4gICAgbGV0IGN1cnJlbnQ6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBjb250cm9sO1xyXG4gICAgY29uc3QgY3JlYXRlUGF0aCA9IG9wdGlvbnM/LmNyZWF0ZSA/PyBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcclxuICAgICAgY29uc3QgaXNMZWFmID0gaSA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMTtcclxuICAgICAgY29uc3QgbmV4dFR5cGU6IENvbnRyb2xUeXBlID1cclxuICAgICAgICBpc0xlYWYgPyAob3B0aW9ucz8uZXhwZWN0ZWQgPz8gJ2NvbnRyb2wnKVxyXG4gICAgICAgICAgOiB0eXBlb2Ygc2VnbWVudHNbaSArIDFdID09PSAnbnVtYmVyJyA/ICdhcnJheSdcclxuICAgICAgICAgICAgOiAnZ3JvdXAnO1xyXG5cclxuICAgICAgY29uc3QgZ2V0Q3VycmVudFBhdGggPSAoKSA9PiBzZWdtZW50cy5zbGljZSgwLCBpICsgMSkuam9pbignLicpO1xyXG5cclxuICAgICAgaWYgKCFjdXJyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yKGBDb250cm9sIGlzIG51bGwgYXQgc2VnbWVudCBcIiR7Z2V0Q3VycmVudFBhdGgoKX1cImApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHNlZ21lbnQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKCEoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcihgRXhwZWN0ZWQgRm9ybUFycmF5IGF0IHNlZ21lbnQgWyR7Z2V0Q3VycmVudFBhdGgoKX1dLCBnb3QgJHtjdXJyZW50LmNvbnN0cnVjdG9yLm5hbWV9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbmRleCA9IHNlZ21lbnQ7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjdXJyZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgd2FybihgSW5kZXggJHtpbmRleH0gaXMgb3V0IG9mIGJvdW5kcyBhdCBwYXRoIFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiIChsZW5ndGggPSAke2N1cnJlbnQubGVuZ3RofSlgKTtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5hdChpbmRleCk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWdtZW50ID09PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ3BhcmVudCcpIHtcclxuICAgICAgICAgIGN1cnJlbnQgPSAoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkgJiYgY3VycmVudC5nZXQoc2VnbWVudClcclxuICAgICAgICAgICAgPyBjdXJyZW50LmdldChzZWdtZW50KVxyXG4gICAgICAgICAgICA6IGN1cnJlbnQucGFyZW50O1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ3Jvb3QnKSB7XHJcbiAgICAgICAgICBjdXJyZW50ID0gKGN1cnJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXAgJiYgY3VycmVudC5nZXQoc2VnbWVudCkpXHJcbiAgICAgICAgICAgID8gY3VycmVudC5nZXQoc2VnbWVudClcclxuICAgICAgICAgICAgOiBjdXJyZW50LnJvb3Q7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgJiYgb3B0aW9ucz8uYnJlYWtPbkFycmF5KSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghKGN1cnJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXJyb3IoYEV4cGVjdGVkIEZvcm1Hcm91cCBhdCBzZWdtZW50IFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiLCBnb3QgJHtjdXJyZW50LmNvbnN0cnVjdG9yLm5hbWV9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudC5nZXQoc2VnbWVudCkpIHtcclxuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmdldChzZWdtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGNyZWF0ZVBhdGgpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29udHJvbCA9IGNyZWF0ZUNvbnRyb2wobmV4dFR5cGUpO1xyXG4gICAgICAgICAgICBjdXJyZW50LmFkZENvbnRyb2woc2VnbWVudCwgbmV3Q29udHJvbCk7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBuZXdDb250cm9sO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdhcm4oYENvbnRyb2wgd2l0aCBrZXkgXCIke2dldEN1cnJlbnRQYXRoKCl9XCIgbm90IGZvdW5kIGluIEZvcm1Hcm91cC5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCFzZWdtZW50KSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZXJyb3IoYEludmFsaWQgc2VnbWVudCB0eXBlOiAke3R5cGVvZiBzZWdtZW50fWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnQgPz8gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc09iamVjdCh2YWx1ZTogYW55KTogb2JqZWN0IHtcclxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcclxuICAgIH1cclxuICAgIHJldHVybiB7IH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzQXJyYXkodmFsdWU6IGFueSk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5zZXJ0SW50b0FycmF5KGZvcm1BcnJheTogRm9ybUFycmF5LCBpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBvcHRpb25zPzogUGF0Y2hPcHRpb25zKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpdGVtVG9BZGQgPSB0aGlzLmNyZWF0ZUFycmF5SXRlbShmb3JtQXJyYXkpO1xyXG4gICAgdGhpcy5wYXRjaChpdGVtVG9BZGQsIHZhbHVlLCBvcHRpb25zKTtcclxuICAgIGZvcm1BcnJheS5pbnNlcnQoaW5kZXgsIGl0ZW1Ub0FkZCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRnJvbUFycmF5KGZvcm1BcnJheTogRm9ybUFycmF5LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaW5kZXggPD0gMCB8fCBpbmRleCA+PSBmb3JtQXJyYXkubGVuZ3RoKSBmYWxzZTtcclxuICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXJyYXlJdGVtKGZvcm1BcnJheTogRm9ybUFycmF5KTogRm9ybUdyb3VwXHJcbiAge1xyXG4gICAgY29uc3QgYW55Q29udHJvbCA9IGZvcm1BcnJheSBhcyBhbnk7XHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSAodHlwZW9mIChhbnlDb250cm9sKS5jcmVhdGVJdGVtID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICA/IGFueUNvbnRyb2wuY3JlYXRlSXRlbSgpXHJcbiAgICAgIDogbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb250cm9sRnJvbVZhbHVlKHZhbHVlOiBhbnkpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIG5ldyBGb3JtQXJyYXkodGhpcy5jcmVhdGVDb250cm9sRnJvbUFycmF5KHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbnRyb2xGcm9tQXJyYXkoYXJyYXk6IGFueVtdKTogQWJzdHJhY3RDb250cm9sW10ge1xyXG4gICAgcmV0dXJuIGFycmF5Lm1hcChpdGVtID0+IHRoaXMuY3JlYXRlQ29udHJvbEZyb21WYWx1ZShpdGVtKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlICplbnVtZXJhdGVDb250cm9scyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBHZW5lcmF0b3I8QWJzdHJhY3RDb250cm9sPiB7XHJcbiAgICB5aWVsZCBjb250cm9sO1xyXG5cclxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgT2JqZWN0LnZhbHVlcyhjb250cm9sLmNvbnRyb2xzKSkge1xyXG4gICAgICAgIHlpZWxkKiB0aGlzLmVudW1lcmF0ZUNvbnRyb2xzKGNoaWxkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29udHJvbC5jb250cm9scykge1xyXG4gICAgICAgIHlpZWxkKiB0aGlzLmVudW1lcmF0ZUNvbnRyb2xzKGNoaWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0RXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IGVycm9ycyA9IDA7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuZGlzYWJsZWQpXHJcbiAgICAgIHJldHVybiBlcnJvcnM7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC52YWx1ZXMoY29udHJvbC5jb250cm9scyk7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgICBlcnJvcnMgKz0gdGhpcy5jb2xsZWN0RXJyb3JzKGNoaWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29udHJvbC5pbnZhbGlkKSB7XHJcbiAgICAgIGVycm9ycysrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFVua25vd24oY29udHJvbDogYW55KSB7XHJcbiAgICBjb250cm9sLl91bmtub3duID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVbmtub3duKGNvbnRyb2w6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC5fdW5rbm93biA9PT0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2FpdFVudGlsU2V0dGxlZChcclxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcclxuICAgIHBvbGxJbnRlcnZhbCA9IDEwMFxyXG4gICk6IE9ic2VydmFibGU8Rm9ybUNvbnRyb2xTdGF0dXM+IHtcclxuICAgIHJldHVybiBpbnRlcnZhbChwb2xsSW50ZXJ2YWwpLnBpcGUoXHJcbiAgICAgIG1hcCgoKSA9PiBjb250cm9sLnN0YXR1cyksXHJcbiAgICAgIGZpbHRlcihzdGF0dXMgPT4gc3RhdHVzICE9PSAnUEVORElORycpLFxyXG4gICAgICB0YWtlKDEpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFtQixTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFRLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBb0I5QyxDQUFDO0FBS0YsTUFBTSxPQUFPLFdBQVc7SUFFdEIsR0FBRyxDQUFDLE9BQXdCLEVBQUUsSUFBVSxFQUFFLEtBQVUsRUFBRSxXQUF5QixFQUFFLFlBQTJCO1FBRTFHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RixJQUFJLENBQUMsY0FBYztZQUNqQixPQUFPLEtBQUssQ0FBQztRQUVmLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVoRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBd0IsRUFBRSxJQUFVLEVBQUUsV0FBeUI7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FB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QVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQ2hDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSLENBQUM7SUFDSixDQUFDO3dHQTlqQlUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4vcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGlzTnVsbGFibGVHcm91cCB9IGZyb20gJy4uL3V0aWxzL0Zvcm1Hcm91cEV4JztcclxuaW1wb3J0IHsgUGF0aCwgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL2NvbW1vbi9wYXRoJztcclxuaW1wb3J0IHsgZmlsdGVyLCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBoYXNGYWN0b3J5IH0gZnJvbSAnLi9idWlsZGVyLnNlcnZpY2UnO1xyXG5cclxudHlwZSBDb250cm9sVHlwZSA9ICdhcnJheScgfCAnZ3JvdXAnIHwgJ2NvbnRyb2wnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXRjaE9wdGlvbnMge1xyXG4gIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgZW1pdEVycm9yPzogYm9vbGVhbjtcclxuICBlbWl0V2Fybj86IGJvb2xlYW47XHJcbiAgdmFsaWRhdGVUeXBlPzogYm9vbGVhbjtcclxuICBmYWxsYmFja1ZhbHVlPzogYW55O1xyXG4gIHN0cmljdDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXRoT3B0aW9ucyB7XHJcbiAgZW1pdEVycm9yPzogYm9vbGVhbjtcclxuICBlbWl0V2Fybj86IGJvb2xlYW47XHJcbiAgY3JlYXRlPzogYm9vbGVhbjtcclxuICBleHBlY3RlZD86IENvbnRyb2xUeXBlO1xyXG4gIGJyZWFrT25BcnJheT86IGJvb2xlYW47XHJcbiAgYnJlYWtPbk51bGw/OiBib29sZWFuO1xyXG59O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybVNlcnZpY2UgaW1wbGVtZW50cyBJRXZhbHVhdG9yUHJvdmlkZXIge1xyXG5cclxuICBzZXQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnM/OiBQYXRjaE9wdGlvbnMpOiBib29sZWFuIHtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50Q29udHJvbCA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zID8/IHsgY3JlYXRlOiB0cnVlIH0pO1xyXG5cclxuICAgIGlmICghY3VycmVudENvbnRyb2wpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnBhdGNoKGN1cnJlbnRDb250cm9sLCB2YWx1ZSwgcGF0Y2hPcHRpb25zKTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBhbnkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRDb250cm9sKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zKTtcclxuICAgIHJldHVybiByZXN1bHQ/LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoKTogYW55IHtcclxuICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woY29udHJvbCwgcGF0aCk7XHJcbiAgICB0YXJnZXRDb250cm9sPy5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRBbGwoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCAuLi5wYXRoczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGlmICghcGF0aHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xyXG4gICAgICB0aGlzLnJlc2V0KGNvbnRyb2wsIHBhdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByZXBlbmQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCB2YWx1ZTogYW55LCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnM/OiBQYXRjaE9wdGlvbnMpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuYXBwbHlQYXRoKGNvbnRyb2wsIHBhdGgsIHBhdGhPcHRpb25zID8/IHsgZXhwZWN0ZWQ6IFwiYXJyYXlcIiwgY3JlYXRlOiB0cnVlIH0pO1xyXG4gICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRJbnRvQXJyYXkoZm9ybUFycmF5LCAwLCB2YWx1ZSwgcGF0Y2hPcHRpb25zKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFwcGVuZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCwgcGF0aE9wdGlvbnMgPz8geyBleHBlY3RlZDogXCJhcnJheVwiLCBjcmVhdGU6IHRydWUgfSk7XHJcbiAgICBpZiAoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluc2VydEludG9BcnJheShmb3JtQXJyYXksIGZvcm1BcnJheS5sZW5ndGgsIHZhbHVlLCBwYXRjaE9wdGlvbnMpOyAgICAgIFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zPzogUGF0Y2hPcHRpb25zKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyA/PyB7IGV4cGVjdGVkOiBcImFycmF5XCIsIGNyZWF0ZTogdHJ1ZSB9KTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW50b0FycmF5KGZvcm1BcnJheSwgaW5kZXgsIHZhbHVlLCBwYXRjaE9wdGlvbnMpOyAgXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZW1vdmUoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBQYXRoLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoKTtcclxuICAgIGlmIChmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRnJvbUFycmF5KGZvcm1BcnJheSwgaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW92ZVVwKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCk7XHJcbiAgICBpZiAoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGlmIChpbmRleCA8PSAwIHx8IGluZGV4ID49IGZvcm1BcnJheS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IGZvcm1BcnJheS5hdChpbmRleCk7XHJcbiAgICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgIGZvcm1BcnJheS5pbnNlcnQoaW5kZXggLSAxLCBjb250cm9sKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSAgICBcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1vdmVEb3duKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5hcHBseVBhdGgoY29udHJvbCwgcGF0aCk7XHJcbiAgICBpZiAoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZm9ybUFycmF5Lmxlbmd0aCAtIDEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IGZvcm1BcnJheS5hdChpbmRleCk7XHJcbiAgICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgIGZvcm1BcnJheS5pbnNlcnQoaW5kZXggKyAxLCBjb250cm9sKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdHVzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogUGF0aCwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucykgOiBGb3JtQ29udHJvbFN0YXR1cyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFwcGx5UGF0aChjb250cm9sLCBwYXRoLCBwYXRoT3B0aW9ucyk7XHJcbiAgICByZXR1cm4gcmVzdWx0Py5zdGF0dXM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBbGxWYWx1ZUFuZFZhbGlkaXR5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZW1pdEV2ZW50OiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuZW51bWVyYXRlQ29udHJvbHMoY29udHJvbCkpIHtcclxuICAgICAgYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY291bnRJbnZhbGlkKGNvbnRyb2xzOiBJdGVyYWJsZTxBYnN0cmFjdENvbnRyb2w+KSB7XHJcbiAgICBsZXQgZXJyb3JzID0gMDtcclxuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBjb250cm9scykge1xyXG4gICAgICBlcnJvcnMgKz0gdGhpcy5jb2xsZWN0RXJyb3JzKGNvbnRyb2wpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVycm9ycztcclxuICB9XHJcblxyXG4gIGdldEludmFsaWRDb250cm9scyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IHBhdGg6IHN0cmluZywgY29udHJvbDogQWJzdHJhY3RDb250cm9sIH1bXSB7XHJcbiAgICBjb25zdCBpbnZhbGlkOiB7IHBhdGg6IHN0cmluZywgY29udHJvbDogQWJzdHJhY3RDb250cm9sIH1bXSA9IFtdO1xyXG5cclxuICAgIGlmIChjb250cm9sLmRpc2FibGVkKVxyXG4gICAgICByZXR1cm4gaW52YWxpZDtcclxuXHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LnZhbHVlcyhjb250cm9sLmNvbnRyb2xzKTtcclxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICAgIGludmFsaWQucHVzaCguLi50aGlzLmdldEludmFsaWRDb250cm9scyhjaGlsZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb250cm9sLmludmFsaWQpIHtcclxuICAgICAgaW52YWxpZC5wdXNoKHsgcGF0aDogdGhpcy5nZXRQYXRoKGNvbnRyb2wpLmpvaW4oXCIuXCIpLCBjb250cm9sIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgcGF0Y2goXHJcbiAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXRjaE9wdGlvbnMpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgICAgZW1pdEV2ZW50OiB0cnVlLFxyXG4gICAgICB2YWxpZGF0ZVR5cGU6IGZhbHNlLFxyXG4gICAgICBmYWxsYmFja1ZhbHVlOiBudWxsLFxyXG4gICAgICBzdHJpY3Q6IHRydWVcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgd2FybiA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRXYXJuKVxyXG4gICAgICAgIGNvbnNvbGUud2FybihgW3BhdGNoQ29udHJvbF0gJHttZXNzYWdlfWApXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGVycm9yID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucz8uZW1pdEVycm9yKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgeyBlbWl0RXZlbnQsIHZhbGlkYXRlVHlwZSwgZmFsbGJhY2tWYWx1ZSwgc3RyaWN0IH1cclxuICAgICAgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XHJcblxyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xyXG4gICAgICBpZiAodmFsaWRhdGVUeXBlICYmIHR5cGVvZiB2YWx1ZSAhPT0gdHlwZW9mIGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICB3YXJuKGBWYWx1ZSB0eXBlIG1pc21hdGNoOiBleHBlY3RlZCAke3R5cGVvZiBjb250cm9sLnZhbHVlfSwgYnV0IHJlY2VpdmVkICR7dHlwZW9mIHZhbHVlfWApO1xyXG5cclxuICAgICAgICBpZiAoZmFsbGJhY2tWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGZhbGxiYWNrVmFsdWUsIHsgZW1pdEV2ZW50IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlcnJvcignSW52YWxpZCB2YWx1ZSB0eXBlIGFuZCBubyBmYWxsYmFjayB2YWx1ZSBwcm92aWRlZC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudCB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgaWYgKGlzTnVsbGFibGVHcm91cChjb250cm9sKSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb250cm9sLnNldE51bGwoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udHJvbC5pc051bGwoKSkge1xyXG4gICAgICAgICAgY29udHJvbC5zZXROb3ROdWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuYXNPYmplY3QodmFsdWUpO1xyXG4gICAgICBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xzW2tleV0pIHtcclxuICAgICAgICAgIHRoaXMucGF0Y2goY29udHJvbC5jb250cm9sc1trZXldLCB2YWx1ZVtrZXldLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIXN0cmljdCkge1xyXG4gICAgICAgICAgY29uc3QgbmV3Q29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbEZyb21WYWx1ZSh2YWx1ZVtrZXldKTtcclxuICAgICAgICAgIHRoaXMuc2V0VW5rbm93bihuZXdDb250cm9sKTtcclxuICAgICAgICAgIGNvbnRyb2wuYWRkQ29udHJvbChrZXksIG5ld0NvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy5wYXRjaChuZXdDb250cm9sLCB2YWx1ZVtrZXldLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3YXJuKGBLZXkgXCIke2tleX1cIiBub3QgZm91bmQgaW4gdGhlIEZvcm1Hcm91cC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICBpZiAoIShrZXkgaW4gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGRDb250cm9sID0gY29udHJvbC5nZXQoa2V5KTtcclxuICAgICAgICAgIGlmIChjaGlsZENvbnRyb2wpIHtcclxuICAgICAgICAgICAgaWYgKGlzTnVsbGFibGVHcm91cChjaGlsZENvbnRyb2wpKVxyXG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC5zZXROdWxsKCk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBjaGlsZENvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pOyAgICAgXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuYXNBcnJheSh2YWx1ZSk7XHJcbiAgICAgIHdoaWxlIChjb250cm9sLmxlbmd0aCA8IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpdGVtVG9BZGQgPSBjdXJyZW50VmFsdWVbY29udHJvbC5sZW5ndGhdO1xyXG4gICAgICAgIGlmIChoYXNGYWN0b3J5KGNvbnRyb2wpKSB7XHJcbiAgICAgICAgICBjb250cm9sLmFkZEl0ZW0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb250cm9sLnB1c2godGhpcy5jcmVhdGVDb250cm9sRnJvbVZhbHVlKGl0ZW1Ub0FkZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAoY29udHJvbC5sZW5ndGggPiBjdXJyZW50VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgY29udHJvbC5yZW1vdmVBdChjb250cm9sLmxlbmd0aCAtIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnRWYWx1ZS5mb3JFYWNoKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICB0aGlzLnBhdGNoKGNvbnRyb2wuYXQoaW5kZXgpLCBpdGVtLCBvcHRpb25zKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIEFic3RyYWN0Q29udHJvbCB0eXBlLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UGF0aChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcclxuICAgIGNvbnN0IHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcclxuICAgIGxldCBjdXJyZW50OiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gY29udHJvbDtcclxuXHJcbiAgICB3aGlsZSAoY3VycmVudD8ucGFyZW50KSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudDogYW55ID0gY3VycmVudC5wYXJlbnQ7XHJcblxyXG4gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY29udHJvbHMuaW5kZXhPZihjdXJyZW50KTtcclxuICAgICAgICBwYXRoLnVuc2hpZnQoaW5kZXgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHBhcmVudC5jb250cm9scykuZmluZChrID0+IHBhcmVudC5nZXQoaykgPT09IGN1cnJlbnQpO1xyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgIHBhdGgudW5zaGlmdChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY3VycmVudCA9IHBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIHdhaXRGb3JDb250cm9sKFxyXG4gICAgZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgcGF0aDogUGF0aFxyXG4gICAgLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zXHJcbiAgKTogT2JzZXJ2YWJsZTxBYnN0cmFjdENvbnRyb2w+IHtcclxuXHJcbiAgICBjb25zdCByZXNvbHZlID0gKCk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCA9PlxyXG4gICAgICB0aGlzLmdldENvbnRyb2woZm9ybUdyb3VwLCBwYXRoLCBwYXRoT3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmcgPSByZXNvbHZlKCk7XHJcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBvZihleGlzdGluZyk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEFic3RyYWN0Q29udHJvbD4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN1YiA9IGZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjb25zdCBjdHJsID0gcmVzb2x2ZSgpO1xyXG4gICAgICAgIGlmIChjdHJsKSB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGN0cmwpO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gKCkgPT4gc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXR1c0NoYW5nZXMoY29udHJvbDogQWJzdHJhY3RDb250cm9sXHJcbiAgICAsIHdhaXRGb3JQZW5kaW5nPzogKCkgPT4gdm9pZFxyXG4gICk6IE9ic2VydmFibGU8Rm9ybUNvbnRyb2xTdGF0dXM+IHtcclxuXHJcbiAgICBpZiAoY29udHJvbC5zdGF0dXMgPT09ICdQRU5ESU5HJyAmJiB3YWl0Rm9yUGVuZGluZykge1xyXG4gICAgICB0aGlzLndhaXRVbnRpbFNldHRsZWQoY29udHJvbClcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHdhaXRGb3JQZW5kaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb250cm9sLnN0YXR1c0NoYW5nZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZENvbnRyb2wodmFsdWU6IGFueSkgOiBBYnN0cmFjdENvbnRyb2xcclxuICB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fFxyXG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fFxyXG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUFycmF5KFxyXG4gICAgICAgIHZhbHVlLm1hcCh2ID0+IHRoaXMuYnVpbGRDb250cm9sKHYpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICBjb25zdCBjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSA9IHt9O1xyXG5cclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XHJcbiAgICAgICAgY29udHJvbHNba2V5XSA9IHRoaXMuYnVpbGRDb250cm9sKHZhbHVlW2tleV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChjb250cm9scyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0KGZvcm1Hcm91cDogYW55KTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBpZiAoIShmb3JtR3JvdXAgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3BlIGlzIG5vdCBhIEZvcm1Hcm91cFwiKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhdGNoT3B0aW9uczogUGF0Y2hPcHRpb25zID0ge1xyXG4gICAgICBzdHJpY3Q6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNldDogKHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5zZXQoZm9ybUdyb3VwLCBwYXRoLCB2YWx1ZSwgcGF0aE9wdGlvbnMsIHBhdGNoT3B0aW9ucyksXHJcblxyXG4gICAgICBnZXQ6IChwYXRoOiBQYXRoLCBwYXRoT3B0aW9ucz86IFBhdGhPcHRpb25zKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkID0+XHJcbiAgICAgICAgdGhpcy5nZXQoZm9ybUdyb3VwLCBwYXRoLCBwYXRoT3B0aW9ucyksXHJcblxyXG4gICAgICByZXNldDogKHBhdGg6IFBhdGgpOiB2b2lkID0+XHJcbiAgICAgICAgdGhpcy5yZXNldChmb3JtR3JvdXAsIHBhdGgpLFxyXG5cclxuICAgICAgcmVzZXRBbGw6ICguLi5wYXRoczogc3RyaW5nW10pOiB2b2lkID0+XHJcbiAgICAgICAgdGhpcy5yZXNldEFsbChmb3JtR3JvdXAsIC4uLnBhdGhzKSxcclxuXHJcbiAgICAgIHN0YXR1czogKHBhdGg6IFBhdGgsIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBGb3JtQ29udHJvbFN0YXR1cyB8IHVuZGVmaW5lZCA9PlxyXG4gICAgICAgIHRoaXMuc3RhdHVzKGZvcm1Hcm91cCwgcGF0aCwgcGF0aE9wdGlvbnMpLFxyXG5cclxuICAgICAgcHJlcGVuZDogKHBhdGg6IFBhdGgsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5wcmVwZW5kKGZvcm1Hcm91cCwgcGF0aCwgdmFsdWUsIHBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnMpLFxyXG5cclxuICAgICAgYXBwZW5kOiAocGF0aDogUGF0aCwgdmFsdWU6IGFueSwgcGF0aE9wdGlvbnM/OiBQYXRoT3B0aW9ucyk6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLmFwcGVuZChmb3JtR3JvdXAsIHBhdGgsIHZhbHVlLCBwYXRoT3B0aW9ucywgcGF0Y2hPcHRpb25zKSxcclxuXHJcbiAgICAgIGluc2VydDogKHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnksIHBhdGhPcHRpb25zPzogUGF0aE9wdGlvbnMpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5pbnNlcnQoZm9ybUdyb3VwLCBwYXRoLCBpbmRleCwgdmFsdWUsIHBhdGhPcHRpb25zLCBwYXRjaE9wdGlvbnMpLFxyXG5cclxuICAgICAgcmVtb3ZlOiAocGF0aDogUGF0aCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT5cclxuICAgICAgICB0aGlzLnJlbW92ZShmb3JtR3JvdXAsIHBhdGgsIGluZGV4KSxcclxuXHJcbiAgICAgIG1vdmVVcDogKHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5tb3ZlVXAoZm9ybUdyb3VwLCBwYXRoLCBpbmRleCksXHJcblxyXG4gICAgICBtb3ZlRG93bjogKHBhdGg6IFBhdGgsIGluZGV4OiBudW1iZXIpOiBib29sZWFuID0+XHJcbiAgICAgICAgdGhpcy5tb3ZlRG93bihmb3JtR3JvdXAsIHBhdGgsIGluZGV4KSxcclxuXHJcbiAgICAgIGJ1aWxkQ29udHJvbDogKHZhbHVlOiBhbnkpID0+IHRoaXMuYnVpbGRDb250cm9sKHZhbHVlKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlQYXRoKFxyXG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxyXG4gICAgcGF0aDogUGF0aCxcclxuICAgIG9wdGlvbnM/OiBQYXRoT3B0aW9uc1xyXG4gICk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCB3YXJuID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucz8uZW1pdFdhcm4pIGNvbnNvbGUud2FybihgW2FwcGx5UGF0aF0gJHttZXNzYWdlfWApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBlcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpOiBuZXZlciA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zPy5lbWl0RXJyb3IpIHRocm93IG5ldyBFcnJvcihgW2FwcGx5UGF0aF0gJHttZXNzYWdlfWApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFthcHBseVBhdGhdICR7bWVzc2FnZX1gKTsgLy8gZmFsbGJhY2sgZGVmYXVsdCBiZWhhdmlvclxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVDb250cm9sID0gKHR5cGU6IENvbnRyb2xUeXBlKTogQWJzdHJhY3RDb250cm9sID0+IHtcclxuICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnYXJyYXknOiByZXR1cm4gbmV3IEZvcm1BcnJheShbXSk7XHJcbiAgICAgICAgY2FzZSAnZ3JvdXAnOiByZXR1cm4gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgICAgY2FzZSAnY29udHJvbCc6IGRlZmF1bHQ6IHJldHVybiBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VnbWVudHMgPSBub3JtYWxpemVQYXRoKHBhdGgpO1xyXG4gICAgbGV0IGN1cnJlbnQ6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBjb250cm9sO1xyXG4gICAgY29uc3QgY3JlYXRlUGF0aCA9IG9wdGlvbnM/LmNyZWF0ZSA/PyBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcclxuICAgICAgY29uc3QgaXNMZWFmID0gaSA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMTtcclxuICAgICAgY29uc3QgbmV4dFR5cGU6IENvbnRyb2xUeXBlID1cclxuICAgICAgICBpc0xlYWYgPyAob3B0aW9ucz8uZXhwZWN0ZWQgPz8gJ2NvbnRyb2wnKVxyXG4gICAgICAgICAgOiB0eXBlb2Ygc2VnbWVudHNbaSArIDFdID09PSAnbnVtYmVyJyA/ICdhcnJheSdcclxuICAgICAgICAgICAgOiAnZ3JvdXAnO1xyXG5cclxuICAgICAgY29uc3QgZ2V0Q3VycmVudFBhdGggPSAoKSA9PiBzZWdtZW50cy5zbGljZSgwLCBpICsgMSkuam9pbignLicpO1xyXG5cclxuICAgICAgaWYgKCFjdXJyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yKGBDb250cm9sIGlzIG51bGwgYXQgc2VnbWVudCBcIiR7Z2V0Q3VycmVudFBhdGgoKX1cImApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHNlZ21lbnQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKCEoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcihgRXhwZWN0ZWQgRm9ybUFycmF5IGF0IHNlZ21lbnQgWyR7Z2V0Q3VycmVudFBhdGgoKX1dLCBnb3QgJHtjdXJyZW50LmNvbnN0cnVjdG9yLm5hbWV9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbmRleCA9IHNlZ21lbnQ7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjdXJyZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgd2FybihgSW5kZXggJHtpbmRleH0gaXMgb3V0IG9mIGJvdW5kcyBhdCBwYXRoIFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiIChsZW5ndGggPSAke2N1cnJlbnQubGVuZ3RofSlgKTtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5hdChpbmRleCk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWdtZW50ID09PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ3BhcmVudCcpIHtcclxuICAgICAgICAgIGN1cnJlbnQgPSAoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkgJiYgY3VycmVudC5nZXQoc2VnbWVudClcclxuICAgICAgICAgICAgPyBjdXJyZW50LmdldChzZWdtZW50KVxyXG4gICAgICAgICAgICA6IGN1cnJlbnQucGFyZW50O1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ3Jvb3QnKSB7XHJcbiAgICAgICAgICBjdXJyZW50ID0gKGN1cnJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXAgJiYgY3VycmVudC5nZXQoc2VnbWVudCkpXHJcbiAgICAgICAgICAgID8gY3VycmVudC5nZXQoc2VnbWVudClcclxuICAgICAgICAgICAgOiBjdXJyZW50LnJvb3Q7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgoY3VycmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgJiYgb3B0aW9ucz8uYnJlYWtPbkFycmF5KSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghKGN1cnJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXJyb3IoYEV4cGVjdGVkIEZvcm1Hcm91cCBhdCBzZWdtZW50IFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiLCBnb3QgJHtjdXJyZW50LmNvbnN0cnVjdG9yLm5hbWV9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudC5nZXQoc2VnbWVudCkpIHtcclxuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmdldChzZWdtZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAoIWlzTGVhZiAmJiBjdXJyZW50IGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgJiYgY3VycmVudC52YWx1ZSA9PT0gbnVsbCAmJiBvcHRpb25zPy5icmVha09uTnVsbCkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChjcmVhdGVQYXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRyb2wgPSBjcmVhdGVDb250cm9sKG5leHRUeXBlKTtcclxuICAgICAgICAgICAgY3VycmVudC5hZGRDb250cm9sKHNlZ21lbnQsIG5ld0NvbnRyb2wpO1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gbmV3Q29udHJvbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3YXJuKGBDb250cm9sIHdpdGgga2V5IFwiJHtnZXRDdXJyZW50UGF0aCgpfVwiIG5vdCBmb3VuZCBpbiBGb3JtR3JvdXAuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICghc2VnbWVudCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIHNlZ21lbnQgdHlwZTogJHt0eXBlb2Ygc2VnbWVudH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50ID8/IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNPYmplY3QodmFsdWU6IGFueSk6IG9iamVjdCB7XHJcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc0FycmF5KHZhbHVlOiBhbnkpOiBBcnJheTxhbnk+IHtcclxuICAgIGlmICh2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEludG9BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgb3B0aW9ucz86IFBhdGNoT3B0aW9ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaXRlbVRvQWRkID0gdGhpcy5jcmVhdGVBcnJheUl0ZW0oZm9ybUFycmF5KTtcclxuICAgIHRoaXMucGF0Y2goaXRlbVRvQWRkLCB2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4LCBpdGVtVG9BZGQpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUZyb21BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGluZGV4IDw9IDAgfHwgaW5kZXggPj0gZm9ybUFycmF5Lmxlbmd0aCkgZmFsc2U7XHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5SXRlbShmb3JtQXJyYXk6IEZvcm1BcnJheSk6IEZvcm1Hcm91cFxyXG4gIHtcclxuICAgIGNvbnN0IGFueUNvbnRyb2wgPSBmb3JtQXJyYXkgYXMgYW55O1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gKHR5cGVvZiAoYW55Q29udHJvbCkuY3JlYXRlSXRlbSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgPyBhbnlDb250cm9sLmNyZWF0ZUl0ZW0oKVxyXG4gICAgICA6IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29udHJvbEZyb21WYWx1ZSh2YWx1ZTogYW55KTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUFycmF5KHRoaXMuY3JlYXRlQ29udHJvbEZyb21BcnJheSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb250cm9sRnJvbUFycmF5KGFycmF5OiBhbnlbXSk6IEFic3RyYWN0Q29udHJvbFtdIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoaXRlbSA9PiB0aGlzLmNyZWF0ZUNvbnRyb2xGcm9tVmFsdWUoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSAqZW51bWVyYXRlQ29udHJvbHMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogR2VuZXJhdG9yPEFic3RyYWN0Q29udHJvbD4ge1xyXG4gICAgeWllbGQgY29udHJvbDtcclxuXHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC52YWx1ZXMoY29udHJvbC5jb250cm9scykpIHtcclxuICAgICAgICB5aWVsZCogdGhpcy5lbnVtZXJhdGVDb250cm9scyhjaGlsZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICB5aWVsZCogdGhpcy5lbnVtZXJhdGVDb250cm9scyhjaGlsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29sbGVjdEVycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBudW1iZXIge1xyXG5cclxuICAgIGxldCBlcnJvcnMgPSAwO1xyXG5cclxuICAgIGlmIChjb250cm9sLmRpc2FibGVkKVxyXG4gICAgICByZXR1cm4gZXJyb3JzO1xyXG5cclxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgZXJyb3JzICs9IHRoaXMuY29sbGVjdEVycm9ycyhjaGlsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICBlcnJvcnMrKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVbmtub3duKGNvbnRyb2w6IGFueSkge1xyXG4gICAgY29udHJvbC5fdW5rbm93biA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVW5rbm93bihjb250cm9sOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb250cm9sICYmIGNvbnRyb2wuX3Vua25vd24gPT09IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhaXRVbnRpbFNldHRsZWQoXHJcbiAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXHJcbiAgICBwb2xsSW50ZXJ2YWwgPSAxMDBcclxuICApOiBPYnNlcnZhYmxlPEZvcm1Db250cm9sU3RhdHVzPiB7XHJcbiAgICByZXR1cm4gaW50ZXJ2YWwocG9sbEludGVydmFsKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gY29udHJvbC5zdGF0dXMpLFxyXG4gICAgICBmaWx0ZXIoc3RhdHVzID0+IHN0YXR1cyAhPT0gJ1BFTkRJTkcnKSxcclxuICAgICAgdGFrZSgxKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { ToBoundArrows } from '../utils/bound';
|
|
3
|
-
import { take } from 'rxjs';
|
|
3
|
+
import { take, of } from 'rxjs';
|
|
4
4
|
import { generateGuid } from '../utils/uuid';
|
|
5
5
|
import { openWindow } from '../utils/window';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
@@ -16,12 +16,10 @@ export class FunctionService {
|
|
|
16
16
|
this.injector = injector;
|
|
17
17
|
}
|
|
18
18
|
invokable(func) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return () => { };
|
|
24
|
-
}
|
|
19
|
+
return makeInvokable(func, () => { });
|
|
20
|
+
}
|
|
21
|
+
asInvokable(func) {
|
|
22
|
+
return makeInvokable(func, null);
|
|
25
23
|
}
|
|
26
24
|
executeOnce(observable, callback) {
|
|
27
25
|
if (!observable)
|
|
@@ -32,6 +30,15 @@ export class FunctionService {
|
|
|
32
30
|
next: this.invokable(callback)
|
|
33
31
|
});
|
|
34
32
|
}
|
|
33
|
+
asObservable(value) {
|
|
34
|
+
return of(value);
|
|
35
|
+
}
|
|
36
|
+
setTimeout(callback, delay) {
|
|
37
|
+
if (!callback)
|
|
38
|
+
return;
|
|
39
|
+
const func = this.invokable(callback);
|
|
40
|
+
setTimeout(func, delay);
|
|
41
|
+
}
|
|
35
42
|
openForm(template, options) {
|
|
36
43
|
let formSchema;
|
|
37
44
|
if (typeof template === 'string') {
|
|
@@ -60,6 +67,8 @@ export class FunctionService {
|
|
|
60
67
|
"openWindow",
|
|
61
68
|
"invokable",
|
|
62
69
|
"executeOnce",
|
|
70
|
+
"asObservable",
|
|
71
|
+
"setTimeout",
|
|
63
72
|
"newGuid"
|
|
64
73
|
]);
|
|
65
74
|
}
|
|
@@ -69,4 +78,13 @@ export class FunctionService {
|
|
|
69
78
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunctionService, decorators: [{
|
|
70
79
|
type: Injectable
|
|
71
80
|
}], ctorParameters: () => [{ type: i1.MetadataService }, { type: i2.DialogService }, { type: i0.Injector }] });
|
|
72
|
-
|
|
81
|
+
function isFunctionWrapper(func) {
|
|
82
|
+
return (typeof func?.invoke === 'function');
|
|
83
|
+
}
|
|
84
|
+
function makeInvokable(func, fallback) {
|
|
85
|
+
if (isFunctionWrapper(func)) {
|
|
86
|
+
return (...args) => func.invoke(args);
|
|
87
|
+
}
|
|
88
|
+
return fallback;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3NlcnZpY2VzL2Z1bmN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0MsT0FBTyxFQUFjLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGlCQUFpQixDQUFDOzs7O0FBRy9FLE1BQU0sT0FBTyxlQUFlO0lBRUo7SUFDTjtJQUNBO0lBRmQsWUFBb0IsUUFBeUIsRUFDL0IsTUFBcUIsRUFDckIsUUFBa0I7UUFGWixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBSSxDQUFDO0lBRXJDLFNBQVMsQ0FBQyxJQUFTO1FBQ2YsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBUztRQUNqQixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBSSxVQUF5QixFQUFFLFFBQWE7UUFDbkQsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQ3hCLFVBQVU7YUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDO1lBQ1AsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUF1QjtTQUN2RCxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsWUFBWSxDQUFJLEtBQVE7UUFDcEIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVUsQ0FBSSxRQUFhLEVBQUUsS0FBYTtRQUN0QyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQXVCLENBQUE7UUFDM0QsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQXlCLEVBQUUsT0FBc0I7UUFDdEQsSUFBSSxVQUFlLENBQUM7UUFFcEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxDQUFDO2FBQU0sQ0FBQztZQUNKLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixNQUFNLFdBQVcsR0FBc0I7Z0JBQ25DLEdBQUcsT0FBTztnQkFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDMUIsQ0FBQTtZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXLEVBQUUsU0FBdUIsUUFBUSxFQUFFLFdBQStCLEVBQUU7UUFDdEYsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsT0FBTztRQUNILE9BQU8sWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDdkIsVUFBVTtZQUNWLFlBQVk7WUFDWixXQUFXO1lBQ1gsYUFBYTtZQUNiLGNBQWM7WUFDZCxZQUFZO1lBQ1osU0FBUztTQUNaLENBQUMsQ0FBQztJQUNQLENBQUM7d0dBdEVRLGVBQWU7NEdBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7QUEwRVgsU0FBUyxpQkFBaUIsQ0FBQyxJQUFTO0lBQ2hDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFJLElBQVMsRUFBRSxRQUFXO0lBQzVDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRGlhbG9nT3B0aW9ucywgRm9ybURpYWxvZ09wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvQm91bmRBcnJvd3MgfSBmcm9tICcuLi91dGlscy9ib3VuZCc7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGFrZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVHdWlkIH0gZnJvbSAnLi4vdXRpbHMvdXVpZCc7XHJcbmltcG9ydCB7IG9wZW5XaW5kb3csIFdpbmRvd1RhcmdldCwgT3BlbldpbmRvd0ZlYXR1cmVzIH0gZnJvbSAnLi4vdXRpbHMvd2luZG93JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uU2VydmljZSBpbXBsZW1lbnRzIElFdmFsdWF0b3JQcm92aWRlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtZXRhZGF0YTogTWV0YWRhdGFTZXJ2aWNlXHJcbiAgICAgICAgLCBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxyXG4gICAgICAgICwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHsgfVxyXG5cclxuICAgIGludm9rYWJsZShmdW5jOiBhbnkpOiAoLi4uYXJnczogYW55W10pID0+IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VJbnZva2FibGUoZnVuYywgKCkgPT4geyB9KTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzSW52b2thYmxlKGZ1bmM6IGFueSk6ICgoLi4uYXJnczogYW55W10pID0+IGFueSkgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbWFrZUludm9rYWJsZShmdW5jLCBudWxsKTsgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0ZU9uY2U8VD4ob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiwgY2FsbGJhY2s6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghb2JzZXJ2YWJsZSkgcmV0dXJuO1xyXG4gICAgICAgIG9ic2VydmFibGVcclxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiB0aGlzLmludm9rYWJsZShjYWxsYmFjaykgYXMgKHZhbHVlOiBUKSA9PiB2b2lkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzT2JzZXJ2YWJsZTxUPih2YWx1ZTogVCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dDxUPihjYWxsYmFjazogYW55LCBkZWxheTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmludm9rYWJsZShjYWxsYmFjaykgYXMgKHZhbHVlOiBUKSA9PiB2b2lkXHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jLCBkZWxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZvcm0odGVtcGxhdGU6IHN0cmluZyB8IG9iamVjdCwgb3B0aW9uczogRGlhbG9nT3B0aW9ucykge1xyXG4gICAgICAgIGxldCBmb3JtU2NoZW1hOiBhbnk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGZvcm1TY2hlbWEgPSB0aGlzLm1ldGFkYXRhLmdldFRlbXBsYXRlQnlOYW1lKHRlbXBsYXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3JtU2NoZW1hID0gdGVtcGxhdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybVNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtT3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3JcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5XaW5kb3codXJsOiBzdHJpbmcsIHRhcmdldDogV2luZG93VGFyZ2V0ID0gJ19ibGFuaycsIGZlYXR1cmVzOiBPcGVuV2luZG93RmVhdHVyZXMgPSB7fSk6IFdpbmRvdyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiBvcGVuV2luZG93KHVybCwgdGFyZ2V0LCBmZWF0dXJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3R3VpZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBnZW5lcmF0ZUd1aWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250ZXh0KCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgICAgIHJldHVybiBUb0JvdW5kQXJyb3dzKHRoaXMsIFtcclxuICAgICAgICAgICAgXCJvcGVuRm9ybVwiLFxyXG4gICAgICAgICAgICBcIm9wZW5XaW5kb3dcIixcclxuICAgICAgICAgICAgXCJpbnZva2FibGVcIixcclxuICAgICAgICAgICAgXCJleGVjdXRlT25jZVwiLFxyXG4gICAgICAgICAgICBcImFzT2JzZXJ2YWJsZVwiLFxyXG4gICAgICAgICAgICBcInNldFRpbWVvdXRcIixcclxuICAgICAgICAgICAgXCJuZXdHdWlkXCJcclxuICAgICAgICBdKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNGdW5jdGlvbldyYXBwZXIoZnVuYzogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBmdW5jPy5pbnZva2UgPT09ICdmdW5jdGlvbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYWtlSW52b2thYmxlPFQ+KGZ1bmM6IGFueSwgZmFsbGJhY2s6IFQpOiAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgVCB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbldyYXBwZXIoZnVuYykpIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3M6IGFueVtdKSA9PiBmdW5jLmludm9rZShhcmdzKTsgICAgICAgIFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbGxiYWNrO1xyXG59XHJcbiJdfQ==
|