barsa-novin-ray-core 1.0.382 → 1.0.384
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/esm2020/lib/abstract-classes/form-toolbar-base.mjs +8 -2
- package/esm2020/lib/constants.mjs +6 -6
- package/esm2020/lib/services/notification.service.mjs +2 -2
- package/fesm2015/barsa-novin-ray-core.mjs +13 -7
- package/fesm2015/barsa-novin-ray-core.mjs.map +1 -1
- package/fesm2020/barsa-novin-ray-core.mjs +13 -7
- package/fesm2020/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/abstract-classes/form-toolbar-base.d.ts +4 -1
- package/lib/constants.d.ts +1 -1
- package/package.json +1 -1
|
@@ -16,7 +16,7 @@ export class FormToolbarBaseComponent extends BaseComponent {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
FormToolbarBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormToolbarBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
FormToolbarBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FormToolbarBaseComponent, selector: "bnrc-form-toolbar-base", inputs: { buttons: "buttons", visible: "visible", size: "size", device: "device", deviceSize: "deviceSize", rtl: "rtl", landscape: "landscape", standalone: "standalone" }, outputs: { toolClick: "toolClick" }, host: { properties: { "attr.rtl": "this._rtl" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
19
|
+
FormToolbarBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FormToolbarBaseComponent, selector: "bnrc-form-toolbar-base", inputs: { buttons: "buttons", visible: "visible", size: "size", device: "device", deviceSize: "deviceSize", rtl: "rtl", landscape: "landscape", standalone: "standalone", toolbarVisible: "toolbarVisible", isFirefox: "isFirefox", dirValue: "dirValue" }, outputs: { toolClick: "toolClick" }, host: { properties: { "attr.rtl": "this._rtl" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormToolbarBaseComponent, decorators: [{
|
|
21
21
|
type: Component,
|
|
22
22
|
args: [{
|
|
@@ -40,10 +40,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
40
40
|
type: Input
|
|
41
41
|
}], standalone: [{
|
|
42
42
|
type: Input
|
|
43
|
+
}], toolbarVisible: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], isFirefox: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], dirValue: [{
|
|
48
|
+
type: Input
|
|
43
49
|
}], toolClick: [{
|
|
44
50
|
type: Output
|
|
45
51
|
}], _rtl: [{
|
|
46
52
|
type: HostBinding,
|
|
47
53
|
args: ['attr.rtl']
|
|
48
54
|
}] } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10b29sYmFyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL2Fic3RyYWN0LWNsYXNzZXMvZm9ybS10b29sYmFyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQVUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQU1qRCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsYUFBYTtJQUwzRDs7UUFPYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBVWQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7S0FVakQ7SUFSRyxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDOztxSEFyQlEsd0JBQXdCO3lHQUF4Qix3QkFBd0IseWFBSHZCLEVBQUU7MkZBR0gsd0JBQXdCO2tCQUxwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDs4QkFFWSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ2tCLElBQUk7c0JBQTVCLFdBQVc7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBIb3N0QmluZGluZywgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdibnJjLWZvcm0tdG9vbGJhci1iYXNlJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVRvb2xiYXJCYXNlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgYnV0dG9uczogYW55W107XG4gICAgQElucHV0KCkgdmlzaWJsZSA9IHRydWU7XG4gICAgQElucHV0KCkgc2l6ZTogYW55O1xuICAgIEBJbnB1dCgpIGRldmljZTogYW55O1xuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IGFueTtcbiAgICBASW5wdXQoKSBydGw6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbGFuZHNjYXBlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0YW5kYWxvbmU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdG9vbGJhclZpc2libGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNGaXJlZm94OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpclZhbHVlOiBzdHJpbmc7XG4gICAgQE91dHB1dCgpIHRvb2xDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5ydGwnKSBfcnRsO1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLl9ydGwgPSB0aGlzLnJ0bDtcbiAgICB9XG5cbiAgICBvblRvb2xDbGljayhidG4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b29sQ2xpY2suZW1pdChidG4pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -370,26 +370,26 @@ export function FillAllLayoutControls(item, layoutControls) {
|
|
|
370
370
|
}
|
|
371
371
|
item.items.forEach((c) => FillAllLayoutControls(c, layoutControls));
|
|
372
372
|
}
|
|
373
|
-
export function FindToolbarItem(toolbarItems,
|
|
373
|
+
export function FindToolbarItem(toolbarItems, value, prop = 'text') {
|
|
374
374
|
if (!toolbarItems?.length) {
|
|
375
375
|
return null;
|
|
376
376
|
}
|
|
377
|
-
const findInArray = (toolbarItems,
|
|
377
|
+
const findInArray = (toolbarItems, value) => {
|
|
378
378
|
let item = null;
|
|
379
379
|
toolbarItems.forEach((c) => {
|
|
380
380
|
if (typeof c === 'object' && !item) {
|
|
381
|
-
if (c
|
|
381
|
+
if (c[prop] === value) {
|
|
382
382
|
item = c;
|
|
383
383
|
return;
|
|
384
384
|
}
|
|
385
385
|
else if (c.menu?.items?.length) {
|
|
386
|
-
item = findInArray(c.menu.items,
|
|
386
|
+
item = findInArray(c.menu.items, value);
|
|
387
387
|
}
|
|
388
388
|
}
|
|
389
389
|
});
|
|
390
390
|
return item;
|
|
391
391
|
};
|
|
392
|
-
return findInArray(toolbarItems,
|
|
392
|
+
return findInArray(toolbarItems, value);
|
|
393
393
|
}
|
|
394
394
|
export function FindLayoutSettingFromLayout94(layout94, layoutTitle) {
|
|
395
395
|
if (!layoutTitle) {
|
|
@@ -714,4 +714,4 @@ export const PdfMimeType = '.pdf';
|
|
|
714
714
|
export const AllFilesMimeType = '.txt,.ppt,.pdf,.*';
|
|
715
715
|
export const VideoMimeType = 'video/*';
|
|
716
716
|
export const AudioMimeType = 'audio/*';
|
|
717
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1Qiw2RUFBVyxDQUFBO0lBQ1gscUZBQWUsQ0FBQTtJQUNmLG1GQUFjLENBQUE7SUFDZCxtRkFBYyxDQUFBO0FBQ2xCLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxTQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBNEIsRUFDNUIsMEJBQW1DLEVBQ25DLElBQTBCLEVBRTFCLFVBQWlDLEVBQ2pDLE9BQTJCO0lBRTNCLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXO1lBQ2pDLE9BQU8sb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RyxLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsT0FBTyxrQ0FBa0MsQ0FDckMsU0FBUyxFQUNULE9BQU8sRUFDUCwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDVixDQUFDO1FBQ04sS0FBSyxvQkFBb0IsQ0FBQyxjQUFjO1lBQ3BDLE1BQU0sZ0JBQWdC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LElBQUksQ0FBQztJQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsZUFBZTtJQUM3QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUU7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVk7SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSTtJQUN4QixJQUFJLENBQUMsSUFBSSxFQUFF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RSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFDckUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ1IsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdEM7U0FBTTtRQUNILE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuRDtBQUNMLENBQUM7QUFVRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3JCLHVHQUF1RyxDQUFDO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx3Q0FBd0MsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xuaW1wb3J0IHtcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXG4gICAgQ29sU2V0dGluZyxcbiAgICBDb21tYW5kQ29udHJvbEluZm9Nb2RlbCxcbiAgICBGb3JtU2V0dGluZyxcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbCxcbiAgICBHcmlkU2V0dGluZyxcbiAgICBMYXlvdXRTZXR0aW5nLFxuICAgIE1lbnVJdGVtLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcbiAgICBTb3J0U2V0dGluZ1xufSBmcm9tICcuL2Fic3RyYWN0LWNsYXNzZXMvbW9kZWxzJztcbmltcG9ydCB7IERhdGVIaWpyaVNlcnZpY2UsIERhdGVNaWxhZGlTZXJ2aWNlLCBEYXRlU2VydmljZSwgRGF0ZVNoYW1zaVNlcnZpY2UgfSBmcm9tICcuL2RhdGUtc2VydmljZXMnO1xuaW1wb3J0ICogYXMgRGV2aWNlIGZyb20gJy4vZGV2aWNlJztcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2xvZy5zZXJ2aWNlJztcblxuZXhwb3J0IGVudW0gVGFibGVIZWFkZXJXaWR0aE1vZGUge1xuICAgIEZpdFRvQ29sdW1uLFxuICAgIEZpdFRvUm93Q29udGVudCxcbiAgICBGaXRUb0NvbnRhaW5lcixcbiAgICBGcmVlQ29sdW1uU2l6ZVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVdpZHRoT2ZMaXN0Q29sdW1uKFxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgY2FuVmlldzogYm9vbGVhbixcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxuICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuLFxuICAgIG1vZGU6IFRhYmxlSGVhZGVyV2lkdGhNb2RlLFxuXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxuICAgIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXVxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbHVtbjpcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVDb2x1bW5XaWR0aChjb250YWluZXIsIGNvbHVtbnMsIG1vRGF0YUxpc3QsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93LCBjb250ZXh0TWVudUl0ZW1zKTtcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbnRhaW5lcjpcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBjYW5WaWV3LFxuICAgICAgICAgICAgICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93LFxuICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZTpcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+ICh7IC4uLmNvbHVtbiwgJFdpZHRoMjogY29sdW1uLiRXaWR0aCB9KSk7XG4gICAgICAgICAgICByZXR1cm4geyBjb2x1bW5zOiBuZXdDb2x1bW5zLCBjb250ZXh0TWVudVdpZHRoOiBjb250ZXh0TWVudVdpZHRoIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcbiAgICAgICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgY2FuVmlldyxcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyxcbiAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1zLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbHVtbldpZHRoKFxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLFxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdXG4pOiB7IGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTsgY29udGV4dE1lbnVXaWR0aDogbnVtYmVyIH0ge1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbENhcHRpb25XaWR0aCA9IG1lYXN1cmVUZXh0KGNvbHVtbi5BbGlhcykgKyAxNiArIDEwO1xuICAgICAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbChjb2xDYXB0aW9uV2lkdGgpfXB4YDtcbiAgICAgICAgLy8gaWYgKG1vZGUgPT09IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29sdW1uKSB7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAobWF4V2lkdGggPCBjb2xDYXB0aW9uV2lkdGgpIHtcbiAgICAgICAgLy8gICAgIGNvbHVtbi4kV2lkdGgyID0gYCR7TWF0aC5jZWlsKGNvbENhcHRpb25XaWR0aCl9cHhgO1xuICAgICAgICAvLyB9XG4gICAgfSk7XG4gICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uV2lkdGhCeU1heE1vQ29udGVudFdpZHRoKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKSB7XG4gICAgY29uc3Qgd2lkdGggPSBjYWxjdWxhdGVNb0RhdGFMaXN0Q29udGVudFdpZHRoQnlDb2x1bW5OYW1lKG1vRGF0YUxpc3QsIGNvbHVtbik7XG4gICAgY29sdW1uLiRXaWR0aDIgPSBgJHtNYXRoLmNlaWwod2lkdGgpfXB4YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZU1vRGF0YUxpc3RDb250ZW50V2lkdGhCeUNvbHVtbk5hbWUoXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxuICAgIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtblxuKTogbnVtYmVyIHtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2FwdGlvbiA9IGdldENvbHVtblZhbHVlT2ZNb0RhdGFMaXN0KGNvbHVtbi5OYW1lLCBjLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICBjb25zdCBjYXB0aW9uV2lkdGggPSBtZWFzdXJlVGV4dChjYXB0aW9uKSArIDE2O1xuICAgICAgICBpZiAobWF4V2lkdGggPCBjYXB0aW9uV2lkdGgpIHtcbiAgICAgICAgICAgIG1heFdpZHRoID0gY2FwdGlvbldpZHRoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIE1hdGguY2VpbChtYXhXaWR0aCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIGNhblZpZXc6IGJvb2xlYW4sXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXG4gICAgY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXSxcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW11cbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgbGV0IGFsbENvbFdpZHRoID0gMDtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29sLldpZHRoID0gY29sLldpZHRoICYmIGNvbC5XaWR0aCA+IDAgPyBjb2wuV2lkdGggOiBtZWFzdXJlVGV4dChjb2wuQWxpYXMpICsgMTY7XG4gICAgICAgIGFsbENvbFdpZHRoICs9IGNvbC5XaWR0aDtcbiAgICB9KTtcbiAgICBjb25zdCBjYW5WaWV3QnV0dG9uV2lkdGggPSBjYW5WaWV3ID8gNDAgOiAwO1xuICAgIGNvbnN0IHNlbGVjdGlvbldpZHRoID0gMzA7XG5cbiAgICBjb25zdCBjb250ZXh0TWVudVdpZHRoID0gX2NhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93KTtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aEFsbENvbHVtbnMgPSBjb250YWluZXJXaWR0aCAtIHNlbGVjdGlvbldpZHRoIC0gY2FuVmlld0J1dHRvbldpZHRoIC0gY29udGV4dE1lbnVXaWR0aCAtIDEyO1xuICAgIC8vIGFsbENvbFdpZHRoICs9IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAtIGFsbENvbFdpZHRoOy8vINmF2K3Yp9iz2KjZhyDYotiu2LHbjNmGINiz2KrZiNmGLtqG2YjZhiB3aWR0aCDZhdi02K7YtduMINmG2K/Yp9ix2K9cbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGguY2VpbCgoY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zICogY29sLldpZHRoKSAvIGFsbENvbFdpZHRoKTtcbiAgICAgICAgY29sLldpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgIGNvbC4kV2lkdGgyID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGNvbHVtbnM6IFsuLi5jb2x1bW5zXSwgY29udGV4dE1lbnVXaWR0aCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgbGV0IGNvbnRleHRNZW51V2lkdGggPSBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDEgPyA0MCA6IDA7XG4gICAgY29uc3QgYnRuUGFkZGluZyA9IDE0ICsgMiArIDEwOyAvLyBwYWRkaW5nICsgYm9yZGVyICsgaWYgdGV4dCBpcyBvdmVyZmxvd2VkIHRoZW4gYWRkIDUgcGl4ZWwuc28gd2UgYWx3YXlzIDUgcHggdG8gaXQuXG4gICAgY29uc3QgdGRQYWRkaW5nID0gMTUgKyAxOyAvLyBwYWRkaW5nICsgYm9yZGVyXG4gICAgY29uc3QgYnV0dG9uSWNvbldpZHRoID0gMTYgKyA2OyAvLyBzaXplICsgbWFyZ2luXG4gICAgaWYgKGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93IHx8IGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnRleHRNZW51V2lkdGggPSAwO1xuICAgICAgICBjb250ZXh0TWVudUl0ZW1zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnRleHRNZW51V2lkdGggKz0gbWVhc3VyZVRleHQoYy50ZXh0KSArIGJ0blBhZGRpbmcgKyB0ZFBhZGRpbmc7XG4gICAgICAgICAgICBjb250ZXh0TWVudVdpZHRoICs9IGMuaWNvbiA/IGJ1dHRvbkljb25XaWR0aCA6IDA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dE1lbnVXaWR0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5WYWx1ZU9mTW9EYXRhTGlzdChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgQ29sdW1ucz86IHsgW2tleTogc3RyaW5nXTogYW55OyBOYW1lOiBzdHJpbmc7IENhcHRpb246IHN0cmluZyB9W10sXG4gICAgY2FwdGlvbj86IGJvb2xlYW5cbik6IGFueSB7XG4gICAgbGV0IGZpZWxkTmFtZSA9IENvbHVtbnMgPyBDb2x1bW5zLmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gbmFtZSB8fCBjLkFsaWFzID09PSBuYW1lKT8uTmFtZSA6IG5hbWU7XG4gICAgaWYgKCFmaWVsZE5hbWUpIHtcbiAgICAgICAgZmllbGROYW1lID0gbmFtZTtcbiAgICB9XG4gICAgbGV0IHZhbCA9IGZpZWxkTmFtZSA/IG1vW2ZpZWxkTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNhcHRpb24pIHtcbiAgICAgICAgbGV0IGNhcHRpb25WYWwgPSBmaWVsZE5hbWUgPyBtb1tmaWVsZE5hbWVdPy4kQ2FwdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZSArICckQ2FwdGlvbiddO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gY2FwdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmQWxyZWFkeUxvYWRlZChwYXJlbnRNb2R1bGU6IGFueSwgbW9kdWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHBhcmVudE1vZHVsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kdWxlTmFtZX0gaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuIEltcG9ydCAke21vZHVsZU5hbWV9IGluIHRoZSBBcHBNb2R1bGUgb25seS5gKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHQodGV4dDogc3RyaW5nLCBmb250U2l6ZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgbWVhc3VyZVRleHREb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVhc3VyZVRleHQnKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBpZiAoIW1lYXN1cmVUZXh0RG9tKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY29uc3QgY3R4ID0gbWVhc3VyZVRleHREb20uZ2V0Q29udGV4dCgnMmQnKSBhcyBhbnk7XG4gICAgZm9udFNpemUgPSBmb250U2l6ZSA/IGZvbnRTaXplIDogJzAuODg1cmVtJztcbiAgICBjdHguZm9udCA9IGBub3JtYWwgJHtmb250U2l6ZX0gSVJBTllla2FuRGlnaXRzYDtcbiAgICByZXR1cm4gY3R4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbnJhdGVJbmxpbmVNb0lkKCkge1xuICAgIHJldHVybiAoQmFyc2FBcGkuaWRHZW5lcmF0b3ItLSkudG9TdHJpbmcoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnVtVmFsdWVUb1N0cmluZ1NpemUodmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgICAgICByZXR1cm4gJ3MnO1xuICAgICAgICBjYXNlICcyJzpcbiAgICAgICAgICAgIHJldHVybiAnbSc7XG4gICAgICAgIGNhc2UgJzMnOlxuICAgICAgICAgICAgcmV0dXJuICdsJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVVbHZDb21tYW5kSGFuZGxlcihidXR0b24sIG9wdGlvbnM/KTogdm9pZCB7XG4gICAgaWYgKGJ1dHRvbi5Db21tYW5kICYmIGJ1dHRvbi5Db21tYW5kLkhhbmRsZXIpIHtcbiAgICAgICAgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcihidXR0b24sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoYnV0dG9uLmhhbmRsZXIpIHtcbiAgICAgICAgYnV0dG9uLmhhbmRsZXIuYmluZChidXR0b24uc2NvcGUpKGJ1dHRvbiwgb3B0aW9ucyk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXF1ZUlkKHBhcnRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmluZ0Fycjogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgY29uc3QgUzQgPSAoKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKSB8IDApLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY29uc3QgUzRfOiBzdHJpbmcgPSBTNC5sZW5ndGggPiAwID8gUzQuc3Vic3RyaW5nKDEpIDogJyc7XG4gICAgICAgIHN0cmluZ0Fyci5wdXNoKFM0Xyk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdBcnIuam9pbignLScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVNlcnZpY2UobG9nU2VydmljZTogTG9nU2VydmljZSwgY3VsdHVyZT8pOiBEYXRlU2VydmljZSB7XG4gICAgY29uc3QgZGVmYXVsdEN1bHR1cmUgPSBjdWx0dXJlID8/IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuQ3VsdHVyZTtcbiAgICBzd2l0Y2ggKGRlZmF1bHRDdWx0dXJlKSB7XG4gICAgICAgIGNhc2UgJ2ZhLUlSJzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVNoYW1zaVNlcnZpY2UobG9nU2VydmljZSk7XG4gICAgICAgIGNhc2UgJ2FyLUFFJzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZUhpanJpU2VydmljZShsb2dTZXJ2aWNlKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZU1pbGFkaVNlcnZpY2UobG9nU2VydmljZSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyZWZveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUGF0aChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbW9JZDogc3RyaW5nIHwgbnVsbCxcbiAgICBmaWxlSWQ6IHN0cmluZyxcbiAgICBmaWVsZERlZklkPzogc3RyaW5nLFxuICAgIHNpemU/OiBudW1iZXIsXG4gICAgc2l6ZUg/OiBudW1iZXJcbik6IHN0cmluZyB7XG4gICAgbW9JZCA9IG1vSWQgPT0gbnVsbCA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KG1vSWQpO1xuICAgIGZpbGVJZCA9IGZpbGVJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmlsZUlkKTtcbiAgICBmaWVsZERlZklkID0gZmllbGREZWZJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmllbGREZWZJZCk7XG4gICAgc2l6ZSA9IHNpemUgPT0gbnVsbCA/IDEyOCA6IHNpemU7XG4gICAgc2l6ZUggPSBzaXplSCA9PSBudWxsID8gc2l6ZSA6IHNpemVIO1xuICAgIGNvbnN0IHVybCA9IGAvSUguYXNoeD90eT0ke3R5cGV9Jm1vSWQ9JHttb0lkfSZpZD0ke2ZpbGVJZH0mZmRJZD0ke2ZpZWxkRGVmSWR9JnNpPSR7c2l6ZX0mc2lIPSR7c2l6ZUh9YDtcbiAgICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIHt9LnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBEZXZpY2VXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDAgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZShmaWVsZFZhbHVlKTogYW55IHtcbiAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkVmFsdWUuVmFsdWU7XG4gICAgY29uc3QgdmFsdWVDYXB0aW9uOiBzdHJpbmcgPSBmaWVsZFZhbHVlLlZhbHVlJENhcHRpb247XG4gICAgbGV0IHZhbHVlT2JqZWN0Q2FwdGlvbiA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsdWVPYmplY3RDYXB0aW9uID0gZmllbGRWYWx1ZS5WYWx1ZS4kQ2FwdGlvbjtcbiAgICB9XG4gICAgaWYgKHZhbHVlT2JqZWN0Q2FwdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsdWVPYmplY3RDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVDYXB0aW9uICYmICF2YWx1ZUNhcHRpb24uc3RhcnRzV2l0aCgndG1wJykpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlQ2FwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRJblZpZXdwb3J0MihlbDogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IHRvcCA9IGVsLm9mZnNldFRvcDtcbiAgICBsZXQgbGVmdCA9IGVsLm9mZnNldExlZnQ7XG4gICAgY29uc3Qgd2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICB3aGlsZSAoZWwub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xuICAgICAgICB0b3AgKz0gZWwub2Zmc2V0VG9wO1xuICAgICAgICBsZWZ0ICs9IGVsLm9mZnNldExlZnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgdG9wIDwgd2luZG93LnBhZ2VZT2Zmc2V0ICsgd2luZG93LmlubmVySGVpZ2h0ICYmXG4gICAgICAgIGxlZnQgPCB3aW5kb3cucGFnZVhPZmZzZXQgKyB3aW5kb3cuaW5uZXJXaWR0aCAmJlxuICAgICAgICB0b3AgKyBoZWlnaHQgPiB3aW5kb3cucGFnZVlPZmZzZXQgJiZcbiAgICAgICAgbGVmdCArIHdpZHRoID4gd2luZG93LnBhZ2VYT2Zmc2V0XG4gICAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQcmV2ZW50RGVmYXVsRXZlbnQoZSk6IHZvaWQge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SGVpZ2h0KGVsRG9tOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gICAgbGV0IHBhcmVudERvbSA9IGVsRG9tLnBhcmVudEVsZW1lbnQ7XG4gICAgbGV0IHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgd2hpbGUgKHBhcmVudERvbSAhPSBudWxsICYmIHBhcmVudEhlaWdodCA8IDQwKSB7XG4gICAgICAgIHBhcmVudERvbSA9IHBhcmVudERvbS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBwYXJlbnRIZWlnaHQgPSBwYXJlbnREb20/LmNsaWVudEhlaWdodCA/PyAwO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50SGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50RGVmaW5lZChcbiAgICBjb250cm9sVWk6IHsgb3JpZ2luYWxYdHlwZTogc3RyaW5nIH0sXG4gICAgY3VzdG9tVWlTZXR0aW5nOiB7IE1vZHVsZTogc3RyaW5nOyBOYW1lOiBzdHJpbmc7IFNlbGVjdG9yOiBzdHJpbmcgfVxuKToge1xuICAgIG1vZHVsZU5hbWU6IHN0cmluZztcbiAgICBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gICAgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG59IHtcbiAgICBsZXQgbW9kdWxlTmFtZSA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGVmYXVsdFVpTW9kdWxlO1xuICAgIGxldCBtb2R1bGVLZWJhYk5hbWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UobW9kdWxlTmFtZSk7XG4gICAgbGV0IGNvbXBvbmVudE5hbWUgPSBjb250cm9sVWkub3JpZ2luYWxYdHlwZS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoJ18nLCAnJyk7XG4gICAgbGV0IHNlbGVjdG9yOiBzdHJpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UoY29tcG9uZW50TmFtZSk7XG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSwgc2VsZWN0b3IubGVuZ3RoKTtcbiAgICBzZWxlY3RvciA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuQ3VzdG9tVWlQcmVmaXggKyAnLScgKyBzZWxlY3RvcjtcbiAgICBpZiAoY3VzdG9tVWlTZXR0aW5nICYmIGN1c3RvbVVpU2V0dGluZy5Nb2R1bGUpIHtcbiAgICAgICAgbW9kdWxlTmFtZSA9IGN1c3RvbVVpU2V0dGluZy5Nb2R1bGU7XG4gICAgICAgIG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICAgICAgY29tcG9uZW50TmFtZSA9IGN1c3RvbVVpU2V0dGluZy5OYW1lO1xuICAgICAgICBzZWxlY3RvciA9IGN1c3RvbVVpU2V0dGluZy5TZWxlY3RvcjtcbiAgICB9XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IG1vZHVsZUtlYmFiTmFtZS5zbGljZSgxLCBtb2R1bGVLZWJhYk5hbWUubGVuZ3RoKTtcbiAgICByZXR1cm4geyBtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNQaG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzUGhvbmUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc1RhYmxldCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzVGFibGV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBEZXZpY2UuaXNUYWJsZXQoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdtb2JpJykgPiAwIHx8IGdldERldmljZUlzUGhvbmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xTaXplTW9kZShlbDogSFRNTEVsZW1lbnQsIGRldmljZVNpemU6ICdzJyB8ICdtJyB8ICdsJyB8ICd4bCcgPSAnbCcpOiBBYmJyZXZhdGlvbkRldmljZVNpemUge1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgaWYgKGNvbnRhaW5lcldpZHRoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBkZXZpY2VTaXplO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlU2l6ZSA9PT0gJ3MnIHx8IGNvbnRhaW5lcldpZHRoIDwgNjAwKSB7XG4gICAgICAgIGRldmljZVNpemUgPSAncyc7XG4gICAgfSBlbHNlIGlmIChkZXZpY2VTaXplID09PSAnbScgfHwgKGNvbnRhaW5lcldpZHRoID4gNjAwICYmIGNvbnRhaW5lcldpZHRoIDwgMTIwMCkpIHtcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdtJztcbiAgICB9XG4gICAgcmV0dXJuIGRldmljZVNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhcbiAgICBieXRlcyxcbiAgICBkZWNpbWFscyA9IDIsXG4gICAgc2l6ZTogJ0J5dGVzJyB8ICdLQicgfCAnTUInIHwgJ0dCJyB8ICdUQicgfCAnUEInIHwgJ0VCJyB8ICdaQicgfCAnWUInXG4pOiBzdHJpbmcge1xuICAgIGlmIChieXRlcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJzAgQnl0ZXMnO1xuICAgIH1cblxuICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgIGNvbnN0IGRtID0gZGVjaW1hbHMgPCAwID8gMCA6IGRlY2ltYWxzO1xuICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xuICAgIGNvbnN0IGkgPSBzaXplcy5maW5kSW5kZXgoKGMpID0+IGMgPT09IHNpemUpO1xuICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSkgKyAnICcgKyBzaXplc1tpXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZEV4dGVuc2lvbih2YWxpZEV4dGVuc2lvbnMpOiBzdHJpbmcge1xuICAgIGxldCBfdmFsaWRFeHRlbnNpb25zID0gJyc7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRFeHRlbnNpb25zKSkge1xuICAgICAgICBfdmFsaWRFeHRlbnNpb25zID0gdmFsaWRFeHRlbnNpb25zLm1hcCgoYykgPT4gJy4nICsgYy5FeHRlbnNpb24pLmpvaW4oJywnKTtcbiAgICB9XG4gICAgcmV0dXJuIF92YWxpZEV4dGVuc2lvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBCYXJzYUFwaS5Db21tb24uRmlsZS5GaWxlSWNvbkRpY3QxMjhbdHlwZV07XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbWFnZSh0eXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gWydpbWcnLCAncG5nJywgJ2pwZWcnLCAnanBnJywgJ2dpZicsICdibXAnLCAndGlmZicsICdpbWFnZSddLmluZGV4T2YodHlwZSkgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdldEFsbENvbHVtbnNTb3J0ZWQoY29udGV4dCk6IEFycmF5PFJlcG9ydFZpZXdDb2x1bW4+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5Db2x1bW5zJywgW10pLmZpbHRlcihcbiAgICAgICAgKGMpID0+IGMuTmFtZSAhPT0gJ0lkJyAmJiBjLk5hbWUgIT09ICckU3R5bGVJbmRleCcgJiYgIWMuSGlkZGVuXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbExpc3Q6IENvbFNldHRpbmdbXSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nLkNvbFNldHRpbmdMaXN0JyxcbiAgICAgICAgW11cbiAgICApO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBuZXcgQXJyYXk8UmVwb3J0Vmlld0NvbHVtbj4oKTtcbiAgICBjb2xMaXN0LmZvckVhY2goKGNvbFMpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uT2ZDb2xMaXN0ID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLk5hbWUgPT09IGNvbFMuTmFtZSk7XG4gICAgICAgIGlmIChjb2x1bW5PZkNvbExpc3QpIHtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaCh7IC4uLmNvbHVtbk9mQ29sTGlzdCwgSGlkZGVuOiBjb2xTLklzSGlkZGVuLCBXaWR0aDogY29sUy5XaWR0aCB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGFsbENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjb2xTZXR0aW5nID0gY29sTGlzdC5maW5kKChjKSA9PiBjLk5hbWUgPT09IGNvbHVtbi5OYW1lKTtcbiAgICAgICAgaWYgKCFjb2xTZXR0aW5nKSB7XG4gICAgICAgICAgICBjb2x1bW5zLnNwbGljZShpbmRleCwgMCwgeyAuLi5jb2x1bW4sIEhpZGRlbjogY29sTGlzdC5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29sdW1ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBHZXRWaXNpYmxlVmFsdWUob2JqZWN0LCBmaWVsZCk6IHN0cmluZyB7XG4gICAgbGV0IG91dHB1dFZhbHVlO1xuICAgIGlmIChvYmplY3RbZmllbGRdPy4kQ2FwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG91dHB1dFZhbHVlID0gb2JqZWN0W2ZpZWxkXS4kQ2FwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddICE9PSB1bmRlZmluZWQgPyBvYmplY3RbZmllbGQgKyAnJENhcHRpb24nXSA6IG9iamVjdFtmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXRWYWx1ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICAgICRHcm91cDogYW55O1xuICAgICRMZXZlbDogbnVtYmVyO1xuICAgICRDb3VudDogbnVtYmVyO1xuICAgICRFeHBhbmRlZDogYm9vbGVhbjtcbiAgICAkUGFyZW50OiBhbnk7XG4gICAgJENoaWxkcmVuOiBhbnlbXTtcbiAgICAkVmlzaWJpbGl0eTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdyb3VwQnkoY29sbGVjdGlvbjogYW55W10sIHNvcnRTZXR0aW5nczogU29ydFNldHRpbmdbXSk6IHsgZ3JvdXBlZDogR3JvdXA7IGdyb3VwczogYW55W10gfSB7XG4gICAgY29uc3QgZ3JvdXBlZDogYW55ID0ge307XG5cbiAgICBjb25zdCBncm91cHMgPSBzb3J0U2V0dGluZ3MubWFwKChjKSA9PiBjLk5hbWUpO1xuICAgIGNvbnN0IGdldFRpdGxlID0gKG1vLCBmaWVsZE5hbWUpOiBzdHJpbmcgPT4gR2V0VmlzaWJsZVZhbHVlKG1vLCBmaWVsZE5hbWUpO1xuICAgIGNvbGxlY3Rpb24uZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgICBncm91cHNcbiAgICAgICAgICAgIC5yZWR1Y2UoKG8sIGcsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFRpdGxlID0gZ2V0VGl0bGUoYSwgZyk7XG4gICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXSA9IG9bZ3JvdXBUaXRsZV0gfHwgKGkgKyAxID09PSBncm91cHMubGVuZ3RoID8gW10gOiB7fSk7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1tncm91cFRpdGxlXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYS4kTGV2ZWwgPSBncm91cHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBnZXRUaXRsZShhLCBncm91cHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZ3JvdXBlZFt0aXRsZV07XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC4kQ291bnQgPSAocGFyZW50LiRDb3VudCA/PyAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgZ3JvdXBzLmxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBnZXRUaXRsZShhLCBncm91cHNbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W3RpdGxlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC4kQ291bnQgPSBvW2dyb3VwVGl0bGVdLmxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhMiA9IEZpbmRHcm91cChncm91cFRpdGxlLCBhKTtcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kRXhwYW5kZWQgPSBhMj8uJEV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICBvW2dyb3VwVGl0bGVdLiRWaXNpYmlsaXR5ID0gYTI/LiRWaXNpYmlsaXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb1tncm91cFRpdGxlXTtcbiAgICAgICAgICAgIH0sIGdyb3VwZWQpXG4gICAgICAgICAgICAucHVzaChhKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBncm91cGVkLCBncm91cHMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpbmRHcm91cChncm91cFRpdGxlOiBzdHJpbmcsIGE6IGFueSk6IGFueSB7XG4gICAgaWYgKGEuJEdyb3VwID09PSBncm91cFRpdGxlKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgICBpZiAoYS4kUGFyZW50KSB7XG4gICAgICAgIHJldHVybiBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYS4kUGFyZW50KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gRmlsbEFsbExheW91dENvbnRyb2xzKGl0ZW06IExheW91dFNldHRpbmcsIGxheW91dENvbnRyb2xzOiBMYXlvdXRTZXR0aW5nW10pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS54dHlwZSA9PT0gJ0x5LkxheW91dENvbnRyb2wnKSB7XG4gICAgICAgIGxheW91dENvbnRyb2xzLnB1c2goaXRlbSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpdGVtLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLml0ZW1zLmZvckVhY2goKGMpID0+IEZpbGxBbGxMYXlvdXRDb250cm9scyhjLCBsYXlvdXRDb250cm9scykpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmRUb29sYmFySXRlbSh0b29sYmFySXRlbXM6IE1lbnVJdGVtW10sIHRpdGxlOiBzdHJpbmcpOiBNZW51SXRlbSB8IG51bGwge1xuICAgIGlmICghdG9vbGJhckl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpbmRJbkFycmF5ID0gKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdGl0bGU6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgaXRlbTogTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgdG9vbGJhckl0ZW1zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoYy50ZXh0ID09PSB0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtID0gYztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYy5tZW51Py5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBmaW5kSW5BcnJheShjLm1lbnUuaXRlbXMsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9O1xuICAgIHJldHVybiBmaW5kSW5BcnJheSh0b29sYmFySXRlbXMsIHRpdGxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NChsYXlvdXQ5NDogTGF5b3V0U2V0dGluZywgbGF5b3V0VGl0bGU6IHN0cmluZyk6IExheW91dFNldHRpbmcgfCBudWxsIHtcbiAgICBpZiAoIWxheW91dFRpdGxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobGF5b3V0OTQuVGl0bGUgPT09IGxheW91dFRpdGxlKSB7XG4gICAgICAgIHJldHVybiBsYXlvdXQ5NDtcbiAgICB9XG4gICAgbGV0IHRlbXBMYXlvdXQ5NDogTGF5b3V0U2V0dGluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChsYXlvdXQ5NC5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0OTQuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGVtcExheW91dDk0KSB7XG4gICAgICAgICAgICAgICAgdGVtcExheW91dDk0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQuaXRlbXNbaV0sIGxheW91dFRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcExheW91dDk0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRTZXR0aW5ncyhjb250ZXh0KTogR3JpZFNldHRpbmcge1xuICAgIGNvbnN0IGdyaWRTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5HcmlkU2V0dGluZycsIG51bGwpO1xuICAgIHJldHVybiB7XG4gICAgICAgIENvbFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uQ29sU2V0dGluZ0xpc3QgPz8gbnVsbCxcbiAgICAgICAgU29ydFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0ID8/IFtdLFxuICAgICAgICBBdXRvU2l6ZUNvbHVtbnM6IGdyaWRTZXR0aW5nPy5BdXRvU2l6ZUNvbHVtbnMgPz8gZmFsc2VcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkOiBzdHJpbmcpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBJZDogJzAnLFxuICAgICAgICAkQ2FwdGlvbjogJycsXG4gICAgICAgICRUeXBlRGVmSWQ6IHR5cGVEZWZJZCxcbiAgICAgICAgJFN0YXRlOiAnTmV3JyxcbiAgICAgICAgJFR5cGU6ICdDb21tb24uTWV0YU9iamVjdFdlYicsXG4gICAgICAgICRGaWVsZERpY3Q6IHt9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTogTGF5b3V0U2V0dGluZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgVHlwZTogJ1Jvb3QnLFxuICAgICAgICBDb250cm9sSWQ6ICfYsduM2LTZhycsXG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udGFpbmVyJyxcbiAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogMjQgfSxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBUeXBlOiAnVmVydGljYWxKb2luJyxcbiAgICAgICAgICAgICAgICB4dHlwZTogJ0x5LkxheW91dEpvaW4nLFxuICAgICAgICAgICAgICAgIElzVmVydGljYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogODIgfSxcbiAgICAgICAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZDogc3RyaW5nKTogRm9ybVNldHRpbmcge1xuICAgIGNvbnN0IG1vID0gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQpO1xuXG4gICAgY29uc3QgZm9ybVBhbmVsU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0ge1xuICAgICAgICBWaWV3OiB7XG4gICAgICAgICAgICBMYXlvdXQ5NDogZ2V0TGF5b3V0OTRPYmplY3RJbmZvLFxuICAgICAgICAgICAgQ29udHJvbEluZm86IFtdLFxuICAgICAgICAgICAgVHlwZURlZklkOiB0eXBlRGVmSWRcbiAgICAgICAgfSxcbiAgICAgICAgSXNTZWFyY2hQYW5lbDogdHJ1ZSxcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgTW86IG1vXG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBmb3JtUGFuZWxTZXR0aW5ncztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtUGFuZWxNZXRhQ29uZGl0aW9ucyhcbiAgICB0eXBlRGVmSWQ6IHN0cmluZyxcbiAgICBjb250cm9sc0luZm86IEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10sXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55XG4pOiBhbnkge1xuICAgIGNvbnN0IGZvcm1TZXR0aW5ncyA9IGdldEZvcm1TZXR0aW5ncyh0eXBlRGVmSWQpO1xuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb250cm9sc0luZm8pKTtcblxuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0Lml0ZW1zWzBdLml0ZW1zLnB1c2goLi4uY29udHJvbHNJbmZvLm1hcCgoYykgPT4gZ2V0TGF5b3V0Q29udHJvbChjLkNvbnRyb2xOYW1lKSkpO1xuICAgIGZvcm1TZXR0aW5ncy5EYXRhLk1vW2NvbnRyb2xOYW1lXSA9IHZhbHVlO1xuICAgIGNvbnN0IGZvcm1QYW5lbEN0cmxyID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1QYW5lbEN0cmxyKHtcbiAgICAgICAgU2V0dGluZzogZm9ybVNldHRpbmdzLFxuICAgICAgICBGZWF0dXJlczoge1xuICAgICAgICAgICAgV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgICAgICAgVG9vbGJhcjogZmFsc2UsXG4gICAgICAgICAgICBJbmZvQmFyOiBmYWxzZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld01vR3JpZEVkaXRvcihmb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nLCB0eXBlZGVmSWQ6IHN0cmluZyk6IFBhcnRpYWw8Rm9ybVNldHRpbmc+IHtcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcbiAgICByZXR1cm4geyAuLi5uZXdGb3JtU2V0dGluZ3MuRGF0YS5NbywgJFR5cGVEZWZJZDogdHlwZWRlZklkIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3JpZEVkaXRvckZvcm1QYW5lbChcbiAgICBmb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nLFxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIHR5cGVkZWY6IHN0cmluZyxcbiAgICByZWxhdGlvbjogYW55LFxuICAgIHJld3JpdGVMYXlvdXQ6IGJvb2xlYW4gPSB0cnVlXG4pOiBhbnkge1xuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xuICAgIG5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vID0geyAuLi5tbywgJFR5cGVEZWZJZDogdHlwZWRlZiB9O1xuICAgIGlmIChyZXdyaXRlTGF5b3V0KSB7XG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0ID0gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk7XG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0Lml0ZW1zWzBdLml0ZW1zLnB1c2goXG4gICAgICAgICAgICAuLi5uZXdGb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mby5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgZ2V0TGF5b3V0Q29udHJvbChjLkNvbnRyb2xOYW1lLCBjLkNvbnRyb2xGaWVsZENhcHRpb25UcmFuc2xhdGVkLCBmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJlcXVlc3RQYXJhbXMgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVJlcXVlc3RQYXJhbXMoe1xuICAgICAgICBNb0lkOiBuZXdGb3JtU2V0dGluZ3MuRGF0YS5Nby5JZCxcbiAgICAgICAgVHlwZURlZklkOiB0eXBlZGVmLFxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb25cbiAgICAgICAgLy8gTW9Db250ZXh0OiB7XG4gICAgICAgIC8vICAgICBSZXBvcnRJZDogJycsXG4gICAgICAgIC8vICAgICBWaWV3SWQ6ICcnLFxuICAgICAgICAvLyAgICAgVmlld05hbWU6ICcnLFxuICAgICAgICAvLyAgICAgQ29uZEZvcm1hdGluZzogJycsXG4gICAgICAgIC8vICAgICBJbmNsdWRlSW5SZXBvcnQ6ICcnXG4gICAgICAgIC8vIH1cbiAgICB9KTtcbiAgICBjb25zdCBmb3JtUGFuZWxDdHJsciA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUGFuZWxDdHJscih7XG4gICAgICAgIFNldHRpbmc6IG5ld0Zvcm1TZXR0aW5ncyxcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uLFxuICAgICAgICBGZWF0dXJlczoge1xuICAgICAgICAgICAgV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgICAgICAgVG9vbGJhcjogZmFsc2UsXG4gICAgICAgICAgICBJbmZvQmFyOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBGb3JtUmVxdWVzdFBhcmFtczogZm9ybVJlcXVlc3RQYXJhbXNcbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXRDb250cm9sKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICAgY29udHJvbENhcHRpb246IHN0cmluZyA9ICcnLFxuICAgIGhpZGU6IGJvb2xlYW4gPSB0cnVlXG4pOiBQYXJ0aWFsPEdlbmVyYWxDb250cm9sSW5mb01vZGVsPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250cm9sJyxcbiAgICAgICAgVHlwZTogJ0xheW91dENvbnRyb2xJdGVtJyxcbiAgICAgICAgQ29udHJvbElkOiBjb250cm9sTmFtZSxcbiAgICAgICAgSXNWZXJ0aWNhbDogZmFsc2UsXG4gICAgICAgIFRleHRMb2NhdGlvbjogJ1JpZ2h0JyxcbiAgICAgICAgVGV4dFZpc2libGU6IGZhbHNlLFxuICAgICAgICBWaXNpYmxlOiAhaGlkZSxcbiAgICAgICAgaGlkZSxcbiAgICAgICAgVXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sOiBmYWxzZSxcbiAgICAgICAgQ2FwdGlvbjogY29udHJvbENhcHRpb24sXG4gICAgICAgIEFjY2Vzc2libGVOYW1lOiAnJyxcbiAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogMjQgfSxcbiAgICAgICAgTWluU2l6ZTogeyB3aWR0aDogODksIGhlaWdodDogMjQgfSxcbiAgICAgICAgTWF4U2l6ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBDb250cm9sQm91bmRzOiB7IHdpZHRoOiAzODgsIGhlaWdodDogMjAgfSxcbiAgICAgICAgQ29udHJvbE1pblNpemU6IHsgd2lkdGg6IDQ1LCBoZWlnaHQ6IDIwIH0sXG4gICAgICAgIENvbnRyb2xNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDIwIH0sXG4gICAgICAgIFBhZGRpbmc6IFsyLCAyLCAyLCAyXSxcbiAgICAgICAgTGFiZWxTaXplOiB7IHdpZHRoOiAzNSwgaGVpZ2h0OiAxMyB9LFxuICAgICAgICBvcmlnaW5hbFh0eXBlOiAnJ1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sTGlzdChcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBjb250cm9sRGJOYW1lczogc3RyaW5nW10sXG4gICAgaXNTZWFyY2hQYW5lbDogYm9vbGVhbixcbiAgICBpc0dyaWRFZGl0b3I6IGJvb2xlYW5cbik6IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXG4gICAgICAgICAgICAnRm9ybTk0LkdldENvbnRyb2xJbmZvcycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udHJvbEluZm9QYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgRmllbGREYk5hbWVzOiBjb250cm9sRGJOYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgTW86IG5ldyBCYXJzYUFwaS5Db21tb24uTWV0YU9iamVjdFdlYihtbyksXG4gICAgICAgICAgICAgICAgICAgIElzU2VhcmNoUGFuZWw6IGlzU2VhcmNoUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgIElzR3JpZEVkaXRvcjogaXNHcmlkRWRpdG9yXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShtKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIE56U2FmZUFueSA9IGFueTtcbmV4cG9ydCB0eXBlIE51bWJlcklucHV0ID0gbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbmV4cG9ydCBpbnRlcmZhY2UgTmdTdHlsZUludGVyZmFjZSB7XG4gICAgW2tsYXNzOiBzdHJpbmddOiBOelNhZmVBbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhhYmxlT2JqZWN0IHtcbiAgICBba2V5OiBzdHJpbmddOiBOelNhZmVBbnk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakE/OiBJbmRleGFibGVPYmplY3QsIG9iakI/OiBJbmRleGFibGVPYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8ICFvYmpBIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCAhb2JqQikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBrZXlzQS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNBW2lkeF07XG4gICAgICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqQVtrZXldICE9PSBvYmpCW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXI7XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXI8RD4odmFsdWU6IG51bWJlciB8IHN0cmluZywgZmFsbGJhY2s6IEQpOiBudW1iZXIgfCBEO1xuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIGZhbGxiYWNrVmFsdWU6IG51bWJlciA9IDApOiBudW1iZXIge1xuICAgIHJldHVybiBfaXNOdW1iZXJWYWx1ZSh2YWx1ZSkgPyBOdW1iZXIodmFsdWUpIDogZmFsbGJhY2tWYWx1ZTtcbn1cbmZ1bmN0aW9uIHByb3BEZWNvcmF0b3JGYWN0b3J5PFQsIEQ+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmYWxsYmFjazogKHY6IFQpID0+IERcbik6ICh0YXJnZXQ6IE56U2FmZUFueSwgcHJvcE5hbWU6IHN0cmluZykgPT4gdm9pZCB7XG4gICAgZnVuY3Rpb24gcHJvcERlY29yYXRvcihcbiAgICAgICAgdGFyZ2V0OiBOelNhZmVBbnksXG4gICAgICAgIHByb3BOYW1lOiBzdHJpbmcsXG4gICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPE56U2FmZUFueT5cbiAgICApOiBOelNhZmVBbnkge1xuICAgICAgICBjb25zdCBwcml2YXRlUHJvcE5hbWUgPSBgJCRfX3pvcnJvUHJvcERlY29yYXRvcl9fJHtwcm9wTmFtZX1gO1xuXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAvLyB3YXJuKGBUaGUgcHJvcCBcIiR7cHJpdmF0ZVByb3BOYW1lfVwiIGlzIGFscmVhZHkgZXhpc3QsIGl0IHdpbGwgYmUgb3ZlcnJpZGVkIGJ5ICR7bmFtZX0gZGVjb3JhdG9yLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJpdmF0ZVByb3BOYW1lLCB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0KCk6IHN0cmluZyB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0XG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luYWxEZXNjcmlwdG9yLmdldC5iaW5kKHRoaXMpKClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzW3ByaXZhdGVQcm9wTmFtZV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQuYmluZCh0aGlzKShmYWxsYmFjayh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3ByaXZhdGVQcm9wTmFtZV0gPSBmYWxsYmFjayh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BEZWNvcmF0b3I7XG59XG5leHBvcnQgZnVuY3Rpb24gSW5wdXROdW1iZXIoZmFsbGJhY2tWYWx1ZT86IE56U2FmZUFueSk6IE56U2FmZUFueSB7XG4gICAgcmV0dXJuIHByb3BEZWNvcmF0b3JGYWN0b3J5KCdJbnB1dE51bWJlcicsICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB0b051bWJlcih2YWx1ZSwgZmFsbGJhY2tWYWx1ZSkpO1xufVxuZXhwb3J0IGVudW0gQWZmaXhSZXNwb25kRXZlbnRzIHtcbiAgICByZXNpemUgPSAncmVzaXplJyxcbiAgICBzY3JvbGwgPSAnc2Nyb2xsJyxcbiAgICB0b3VjaHN0YXJ0ID0gJ3RvdWNoc3RhcnQnLFxuICAgIHRvdWNobW92ZSA9ICd0b3VjaG1vdmUnLFxuICAgIHRvdWNoZW5kID0gJ3RvdWNoZW5kJyxcbiAgICBwYWdlc2hvdyA9ICdwYWdlc2hvdycsXG4gICAgbG9hZCA9ICdMT0FEJ1xufVxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVSZWN0IHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICBsZWZ0OiBudW1iZXI7XG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIGJvdHRvbT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFyZ2V0V2luZG93KHRhcmdldDogRWxlbWVudCB8IFdpbmRvdyk6IHRhcmdldCBpcyBXaW5kb3cge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0YXJnZXQgPT09IHdpbmRvdztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFJlY3QodGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogU2ltcGxlUmVjdCB7XG4gICAgcmV0dXJuICFpc1RhcmdldFdpbmRvdyh0YXJnZXQpXG4gICAgICAgID8gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZShuYW1lOiBzdHJpbmcsIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBjYXB0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3QgZmllbGROYW1lID0gbW8uJEZpZWxkRGljdCAmJiBtby4kRmllbGREaWN0W25hbWVdID8gbW8uJEZpZWxkRGljdFtuYW1lXSA6IG5hbWU7XG4gICAgbGV0IHZhbCA9IG1vW2ZpZWxkTmFtZV07XG4gICAgaWYgKGNhcHRpb24pIHtcbiAgICAgICAgbGV0IGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWVdPy4kQ2FwdGlvbjtcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKCFjYXB0aW9uVmFsKSB7XG4gICAgICAgICAgICAgICAgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZSArICckQ2FwdGlvbiddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYXB0aW9uVmFsKSB7XG4gICAgICAgICAgICAgICAgY2FwdGlvblZhbCA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YWwgPSBjYXB0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cbmV4cG9ydCBjb25zdCBhdmFpbGFibGVQcmVmaXhlcyA9IFsnbW96JywgJ21zJywgJ3dlYmtpdCddO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XG4gICAgbGV0IGxhc3RUaW1lID0gMDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrOiBGcmFtZVJlcXVlc3RDYWxsYmFjayk6IGFueSB7XG4gICAgICAgIGNvbnN0IGN1cnJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSk7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhjdXJyVGltZSArIHRpbWVUb0NhbGwpO1xuICAgICAgICB9LCB0aW1lVG9DYWxsKTtcbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4ZWN1dGVEeW5hbWljQ29tbWFuZChjb21tYW5kOiB7IElkOiBzdHJpbmcgfSwgbW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGUgPSB7IGNvbW1hbmQsIER5bmFtaWNTZXR0aW5nOiBtbywgTW86IG1vIH07XG4gICAgQmFyc2FBcGkuQ29tbW9uLkN1c3RvbUNvZGVNYW5hZ2VyLlJ1bkR5bmFtaWNDb21tYW5kKGNvbW1hbmQuSWQsIGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4ZWN1dGVXb3JrZmxvd0Nob2ljZURlZihzY29wZSwgcGFyYW0sIHN1Y2Nlc3M6IChyZXN1bHQpID0+IHZvaWQsIGZhaWxlZDogKGVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcbiAgICAgICAgJ1dvcmtmbG93OTQuQ2hvaWNlU2VsZWN0JyxcbiAgICAgICAgcGFyYW0sXG4gICAgICAgIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzdWx0KTtcbiAgICAgICAgfSwgLy8gc3VjY2Vzc1xuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGZhaWxlZChlcnJvcik7XG4gICAgICAgIH0sIC8vICBlcnJvclxuICAgICAgICAoKSA9PiB7fSwgLy8gZG9SZXR1cm5cbiAgICAgICAgc2NvcGUsXG4gICAgICAgIHRydWVcbiAgICApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcXVlc3RBbmltYXRpb25GcmFtZSgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IDA7XG4gICAgfVxuICAgIGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzQ0NjVcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9IGF2YWlsYWJsZVByZWZpeGVzLmZpbHRlcigoa2V5KSA9PiBgJHtrZXl9UmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3cpWzBdO1xuXG4gICAgcmV0dXJuIHByZWZpeCA/ICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9UmVxdWVzdEFuaW1hdGlvbkZyYW1lYF0gOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZShpZDogbnVtYmVyKTogTnpTYWZlQW55IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeCA9IGF2YWlsYWJsZVByZWZpeGVzLmZpbHRlcihcbiAgICAgICAgKGtleSkgPT4gYCR7a2V5fUNhbmNlbEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3cgfHwgYCR7a2V5fUNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZWAgaW4gd2luZG93XG4gICAgKVswXTtcblxuICAgIHJldHVybiBwcmVmaXhcbiAgICAgICAgPyAoXG4gICAgICAgICAgICAgICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgXSB8fFxuICAgICAgICAgICAgICAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fUNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZWBdXG4gICAgICAgICAgKVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIC5jYWxsKHRoaXMsIGlkKVxuICAgICAgICA6IGNsZWFyVGltZW91dChpZCk7XG59XG5cbmV4cG9ydCB0eXBlIEVhc3lpbmdGbiA9ICh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpID0+IG51bWJlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dEN1YmljKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgY2MgPSBjIC0gYjtcbiAgICBsZXQgdHQgPSB0IC8gKGQgLyAyKTtcbiAgICBpZiAodHQgPCAxKSB7XG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqIHR0ICogdHQgKiB0dCArIGI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChjYyAvIDIpICogKCh0dCAtPSAyKSAqIHR0ICogdHQgKyAyKSArIGI7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE56U2Nyb2xsVG9PcHRpb25zIHtcbiAgICAvKiogQW5pbWF0aW9uIGR1cmF0aW9uLCBkZWZhdWx0IGFzIDQ1MCAqL1xuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xuICAgIC8qKiBTY3JvbGwgY29udGFpbmVyLCBkZWZhdWx0IGFzIHdpbmRvdyAqL1xuICAgIGVhc2luZz86IEVhc3lpbmdGbjtcbiAgICAvKiogU2Nyb2xsIGVuZCBjYWxsYmFjayAqL1xuICAgIGNhbGxiYWNrPygpOiB2b2lkO1xufVxuZXhwb3J0IGNvbnN0IFdvcmRNaW1lVHlwZSA9XG4gICAgJy5kb2MsLmRvY3gsYXBwbGljYXRpb24vbXN3b3JkLGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JztcbmV4cG9ydCBjb25zdCBJbWFnZU1pbWVUeXBlID0gJy5qcGVnLC5qcGcsLmdpZiwucG5nLC5ibXAsLnRpZixpbWFnZS8qJztcbmV4cG9ydCBjb25zdCBQZGZNaW1lVHlwZSA9ICcucGRmJztcbmV4cG9ydCBjb25zdCBBbGxGaWxlc01pbWVUeXBlID0gJy50eHQsLnBwdCwucGRmLC4qJztcbmV4cG9ydCBjb25zdCBWaWRlb01pbWVUeXBlID0gJ3ZpZGVvLyonO1xuZXhwb3J0IGNvbnN0IEF1ZGlvTWltZVR5cGUgPSAnYXVkaW8vKic7XG4iXX0=
|
|
717
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1Qiw2RUFBVyxDQUFBO0lBQ1gscUZBQWUsQ0FBQTtJQUNmLG1GQUFjLENBQUE7SUFDZCxtRkFBYyxDQUFBO0FBQ2xCLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxTQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBNEIsRUFDNUIsMEJBQW1DLEVBQ25DLElBQTBCLEVBRTFCLFVBQWlDLEVBQ2pDLE9BQTJCO0lBRTNCLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXO1lBQ2pDLE9BQU8sb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RyxLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsT0FBTyxrQ0FBa0MsQ0FDckMsU0FBUyxFQUNULE9BQU8sRUFDUCwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDVixDQUFDO1FBQ04sS0FBSyxvQkFBb0IsQ0FBQyxjQUFjO1lBQ3BDLE1BQU0sZ0JBQWdC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LElBQUksQ0FBQztJQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsZUFBZTtJQUM3QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUU7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVk7SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSTtJQUN4QixJQUFJLENBQUMsSUFBSSxFQUFF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VSxjQUFjLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUNyRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDUixPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN0QztTQUFNO1FBQ0gsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ25EO0FBQ0wsQ0FBQztBQVVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FDckIsdUdBQXVHLENBQUM7QUFDNUcsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLHdDQUF3QyxDQUFDO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IF9pc051bWJlclZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XG5pbXBvcnQge1xuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcbiAgICBDb2xTZXR0aW5nLFxuICAgIENvbW1hbmRDb250cm9sSW5mb01vZGVsLFxuICAgIEZvcm1TZXR0aW5nLFxuICAgIEdlbmVyYWxDb250cm9sSW5mb01vZGVsLFxuICAgIEdyaWRTZXR0aW5nLFxuICAgIExheW91dFNldHRpbmcsXG4gICAgTWVudUl0ZW0sXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFNvcnRTZXR0aW5nXG59IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0ZUhpanJpU2VydmljZSwgRGF0ZU1pbGFkaVNlcnZpY2UsIERhdGVTZXJ2aWNlLCBEYXRlU2hhbXNpU2VydmljZSB9IGZyb20gJy4vZGF0ZS1zZXJ2aWNlcyc7XG5pbXBvcnQgKiBhcyBEZXZpY2UgZnJvbSAnLi9kZXZpY2UnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbG9nLnNlcnZpY2UnO1xuXG5leHBvcnQgZW51bSBUYWJsZUhlYWRlcldpZHRoTW9kZSB7XG4gICAgRml0VG9Db2x1bW4sXG4gICAgRml0VG9Sb3dDb250ZW50LFxuICAgIEZpdFRvQ29udGFpbmVyLFxuICAgIEZyZWVDb2x1bW5TaXplXG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlV2lkdGhPZkxpc3RDb2x1bW4oXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICBjYW5WaWV3OiBib29sZWFuLFxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXG4gICAgbW9kZTogVGFibGVIZWFkZXJXaWR0aE1vZGUsXG5cbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdXG4pOiB7IGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTsgY29udGV4dE1lbnVXaWR0aDogbnVtYmVyIH0ge1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29sdW1uOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbHVtbldpZHRoKGNvbnRhaW5lciwgY29sdW1ucywgbW9EYXRhTGlzdCwgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3csIGNvbnRleHRNZW51SXRlbXMpO1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29udGFpbmVyOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbHVtbldpZHRoRml0VG9Db250YWluZXIoXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIGNhblZpZXcsXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICApO1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxuICAgICAgICAgICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XG4gICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gKHsgLi4uY29sdW1uLCAkV2lkdGgyOiBjb2x1bW4uJFdpZHRoIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbHVtbnM6IG5ld0NvbHVtbnMsIGNvbnRleHRNZW51V2lkdGg6IGNvbnRleHRNZW51V2lkdGggfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBjYW5WaWV3LFxuICAgICAgICAgICAgICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93LFxuICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGgoXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxuICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuLFxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW11cbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgY29sQ2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY29sdW1uLkFsaWFzKSArIDE2ICsgMTA7XG4gICAgICAgIGNvbHVtbi4kV2lkdGgyID0gYCR7TWF0aC5jZWlsKGNvbENhcHRpb25XaWR0aCl9cHhgO1xuICAgICAgICAvLyBpZiAobW9kZSA9PT0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db2x1bW4pIHtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChtYXhXaWR0aCA8IGNvbENhcHRpb25XaWR0aCkge1xuICAgICAgICAvLyAgICAgY29sdW1uLiRXaWR0aDIgPSBgJHtNYXRoLmNlaWwoY29sQ2FwdGlvbldpZHRoKX1weGA7XG4gICAgICAgIC8vIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb250ZXh0TWVudVdpZHRoID0gX2NhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93KTtcbiAgICByZXR1cm4geyBjb2x1bW5zOiBbLi4uY29sdW1uc10sIGNvbnRleHRNZW51V2lkdGggfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5XaWR0aEJ5TWF4TW9Db250ZW50V2lkdGgobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4pIHtcbiAgICBjb25zdCB3aWR0aCA9IGNhbGN1bGF0ZU1vRGF0YUxpc3RDb250ZW50V2lkdGhCeUNvbHVtbk5hbWUobW9EYXRhTGlzdCwgY29sdW1uKTtcbiAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbCh3aWR0aCl9cHhgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uXG4pOiBudW1iZXIge1xuICAgIGxldCBtYXhXaWR0aCA9IDA7XG4gICAgbW9EYXRhTGlzdC5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoY29sdW1uLk5hbWUsIGMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGNhcHRpb25XaWR0aCA9IG1lYXN1cmVUZXh0KGNhcHRpb24pICsgMTY7XG4gICAgICAgIGlmIChtYXhXaWR0aCA8IGNhcHRpb25XaWR0aCkge1xuICAgICAgICAgICAgbWF4V2lkdGggPSBjYXB0aW9uV2lkdGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKG1heFdpZHRoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgY2FuVmlldzogYm9vbGVhbixcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxuICAgIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXVxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICBsZXQgYWxsQ29sV2lkdGggPSAwO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgICBjb2wuV2lkdGggPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IG1lYXN1cmVUZXh0KGNvbC5BbGlhcykgKyAxNjtcbiAgICAgICAgYWxsQ29sV2lkdGggKz0gY29sLldpZHRoO1xuICAgIH0pO1xuICAgIGNvbnN0IGNhblZpZXdCdXR0b25XaWR0aCA9IGNhblZpZXcgPyA0MCA6IDA7XG4gICAgY29uc3Qgc2VsZWN0aW9uV2lkdGggPSAzMDtcblxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyA9IGNvbnRhaW5lcldpZHRoIC0gc2VsZWN0aW9uV2lkdGggLSBjYW5WaWV3QnV0dG9uV2lkdGggLSBjb250ZXh0TWVudVdpZHRoIC0gMTI7XG4gICAgLy8gYWxsQ29sV2lkdGggKz0gY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zIC0gYWxsQ29sV2lkdGg7Ly8g2YXYrdin2LPYqNmHINii2K7YsduM2YYg2LPYqtmI2YYu2obZiNmGIHdpZHRoINmF2LTYrti124wg2YbYr9in2LHYr1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5jZWlsKChjb250YWluZXJXaWR0aEFsbENvbHVtbnMgKiBjb2wuV2lkdGgpIC8gYWxsQ29sV2lkdGgpO1xuICAgICAgICBjb2wuV2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgY29sLiRXaWR0aDIgPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX2NhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgY29udGV4dE1lbnVXaWR0aCA9IGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMSA/IDQwIDogMDtcbiAgICBjb25zdCBidG5QYWRkaW5nID0gMTQgKyAyICsgMTA7IC8vIHBhZGRpbmcgKyBib3JkZXIgKyBpZiB0ZXh0IGlzIG92ZXJmbG93ZWQgdGhlbiBhZGQgNSBwaXhlbC5zbyB3ZSBhbHdheXMgNSBweCB0byBpdC5cbiAgICBjb25zdCB0ZFBhZGRpbmcgPSAxNSArIDE7IC8vIHBhZGRpbmcgKyBib3JkZXJcbiAgICBjb25zdCBidXR0b25JY29uV2lkdGggPSAxNiArIDY7IC8vIHNpemUgKyBtYXJnaW5cbiAgICBpZiAoZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cgfHwgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29udGV4dE1lbnVXaWR0aCA9IDA7XG4gICAgICAgIGNvbnRleHRNZW51SXRlbXMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBtZWFzdXJlVGV4dChjLnRleHQpICsgYnRuUGFkZGluZyArIHRkUGFkZGluZztcbiAgICAgICAgICAgIGNvbnRleHRNZW51V2lkdGggKz0gYy5pY29uID8gYnV0dG9uSWNvbldpZHRoIDogMDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0TWVudVdpZHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtblZhbHVlT2ZNb0RhdGFMaXN0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBDb2x1bW5zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IE5hbWU6IHN0cmluZzsgQ2FwdGlvbjogc3RyaW5nIH1bXSxcbiAgICBjYXB0aW9uPzogYm9vbGVhblxuKTogYW55IHtcbiAgICBsZXQgZmllbGROYW1lID0gQ29sdW1ucyA/IENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBuYW1lIHx8IGMuQWxpYXMgPT09IG5hbWUpPy5OYW1lIDogbmFtZTtcbiAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICBmaWVsZE5hbWUgPSBuYW1lO1xuICAgIH1cbiAgICBsZXQgdmFsID0gZmllbGROYW1lID8gbW9bZmllbGROYW1lXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IGZpZWxkTmFtZSA/IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY2FwdGlvblZhbCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICB2YWwgPSBjYXB0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZBbHJlYWR5TG9hZGVkKHBhcmVudE1vZHVsZTogYW55LCBtb2R1bGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocGFyZW50TW9kdWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSW1wb3J0ICR7bW9kdWxlTmFtZX0gaW4gdGhlIEFwcE1vZHVsZSBvbmx5LmApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBtZWFzdXJlVGV4dERvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWFzdXJlVGV4dCcpIGFzIEhUTUxDYW52YXNFbGVtZW50O1xuICAgIGlmICghbWVhc3VyZVRleHREb20pIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCBjdHggPSBtZWFzdXJlVGV4dERvbS5nZXRDb250ZXh0KCcyZCcpIGFzIGFueTtcbiAgICBmb250U2l6ZSA9IGZvbnRTaXplID8gZm9udFNpemUgOiAnMC44ODVyZW0nO1xuICAgIGN0eC5mb250ID0gYG5vcm1hbCAke2ZvbnRTaXplfSBJUkFOWWVrYW5EaWdpdHNgO1xuICAgIHJldHVybiBjdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VucmF0ZUlubGluZU1vSWQoKSB7XG4gICAgcmV0dXJuIChCYXJzYUFwaS5pZEdlbmVyYXRvci0tKS50b1N0cmluZygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVudW1WYWx1ZVRvU3RyaW5nU2l6ZSh2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICAgIHJldHVybiAncyc7XG4gICAgICAgIGNhc2UgJzInOlxuICAgICAgICAgICAgcmV0dXJuICdtJztcbiAgICAgICAgY2FzZSAnMyc6XG4gICAgICAgICAgICByZXR1cm4gJ2wnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyKGJ1dHRvbiwgb3B0aW9ucz8pOiB2b2lkIHtcbiAgICBpZiAoYnV0dG9uLkNvbW1hbmQgJiYgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcikge1xuICAgICAgICBidXR0b24uQ29tbWFuZC5IYW5kbGVyKGJ1dHRvbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChidXR0b24uaGFuZGxlcikge1xuICAgICAgICBidXR0b24uaGFuZGxlci5iaW5kKGJ1dHRvbi5zY29wZSkoYnV0dG9uLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pcXVlSWQocGFydHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyaW5nQXJyOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHM7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBjb25zdCBTNCA9ICgoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApIHwgMCkudG9TdHJpbmcoMTYpO1xuICAgICAgICBjb25zdCBTNF86IHN0cmluZyA9IFM0Lmxlbmd0aCA+IDAgPyBTNC5zdWJzdHJpbmcoMSkgOiAnJztcbiAgICAgICAgc3RyaW5nQXJyLnB1c2goUzRfKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ0Fyci5qb2luKCctJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlU2VydmljZShsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLCBjdWx0dXJlPyk6IERhdGVTZXJ2aWNlIHtcbiAgICBjb25zdCBkZWZhdWx0Q3VsdHVyZSA9IGN1bHR1cmUgPz8gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdWx0dXJlO1xuICAgIHN3aXRjaCAoZGVmYXVsdEN1bHR1cmUpIHtcbiAgICAgICAgY2FzZSAnZmEtSVInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlU2hhbXNpU2VydmljZShsb2dTZXJ2aWNlKTtcbiAgICAgICAgY2FzZSAnYXItQUUnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlSGlqcmlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlTWlsYWRpU2VydmljZShsb2dTZXJ2aWNlKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGaXJlZm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VQYXRoKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBtb0lkOiBzdHJpbmcgfCBudWxsLFxuICAgIGZpbGVJZDogc3RyaW5nLFxuICAgIGZpZWxkRGVmSWQ/OiBzdHJpbmcsXG4gICAgc2l6ZT86IG51bWJlcixcbiAgICBzaXplSD86IG51bWJlclxuKTogc3RyaW5nIHtcbiAgICBtb0lkID0gbW9JZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQobW9JZCk7XG4gICAgZmlsZUlkID0gZmlsZUlkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChmaWxlSWQpO1xuICAgIGZpZWxkRGVmSWQgPSBmaWVsZERlZklkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChmaWVsZERlZklkKTtcbiAgICBzaXplID0gc2l6ZSA9PSBudWxsID8gMTI4IDogc2l6ZTtcbiAgICBzaXplSCA9IHNpemVIID09IG51bGwgPyBzaXplIDogc2l6ZUg7XG4gICAgY29uc3QgdXJsID0gYC9JSC5hc2h4P3R5PSR7dHlwZX0mbW9JZD0ke21vSWR9JmlkPSR7ZmlsZUlkfSZmZElkPSR7ZmllbGREZWZJZH0mc2k9JHtzaXplfSZzaUg9JHtzaXplSH1gO1xuICAgIHJldHVybiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjayk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYge30udG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIERldmljZVdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID4gMCA/IHdpbmRvdy5pbm5lcldpZHRoIDogc2NyZWVuLndpZHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGZpZWxkVmFsdWUpOiBhbnkge1xuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gZmllbGRWYWx1ZS5WYWx1ZTtcbiAgICBjb25zdCB2YWx1ZUNhcHRpb246IHN0cmluZyA9IGZpZWxkVmFsdWUuVmFsdWUkQ2FwdGlvbjtcbiAgICBsZXQgdmFsdWVPYmplY3RDYXB0aW9uID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZU9iamVjdENhcHRpb24gPSBmaWVsZFZhbHVlLlZhbHVlLiRDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVPYmplY3RDYXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZU9iamVjdENhcHRpb247XG4gICAgfVxuICAgIGlmICh2YWx1ZUNhcHRpb24gJiYgIXZhbHVlQ2FwdGlvbi5zdGFydHNXaXRoKCd0bXAnKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVDYXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEluVmlld3BvcnQyKGVsOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdG9wID0gZWwub2Zmc2V0VG9wO1xuICAgIGxldCBsZWZ0ID0gZWwub2Zmc2V0TGVmdDtcbiAgICBjb25zdCB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsLm9mZnNldEhlaWdodDtcblxuICAgIHdoaWxlIChlbC5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIHRvcCArPSBlbC5vZmZzZXRUb3A7XG4gICAgICAgIGxlZnQgKz0gZWwub2Zmc2V0TGVmdDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICB0b3AgPCB3aW5kb3cucGFnZVlPZmZzZXQgKyB3aW5kb3cuaW5uZXJIZWlnaHQgJiZcbiAgICAgICAgbGVmdCA8IHdpbmRvdy5wYWdlWE9mZnNldCArIHdpbmRvdy5pbm5lcldpZHRoICYmXG4gICAgICAgIHRvcCArIGhlaWdodCA+IHdpbmRvdy5wYWdlWU9mZnNldCAmJlxuICAgICAgICBsZWZ0ICsgd2lkdGggPiB3aW5kb3cucGFnZVhPZmZzZXRcbiAgICApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByZXZlbnREZWZhdWxFdmVudChlKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRIZWlnaHQoZWxEb206IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBsZXQgcGFyZW50RG9tID0gZWxEb20ucGFyZW50RWxlbWVudDtcbiAgICBsZXQgcGFyZW50SGVpZ2h0ID0gcGFyZW50RG9tPy5jbGllbnRIZWlnaHQgPz8gMDtcbiAgICB3aGlsZSAocGFyZW50RG9tICE9IG51bGwgJiYgcGFyZW50SGVpZ2h0IDwgNDApIHtcbiAgICAgICAgcGFyZW50RG9tID0gcGFyZW50RG9tLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRIZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnREZWZpbmVkKFxuICAgIGNvbnRyb2xVaTogeyBvcmlnaW5hbFh0eXBlOiBzdHJpbmcgfSxcbiAgICBjdXN0b21VaVNldHRpbmc6IHsgTW9kdWxlOiBzdHJpbmc7IE5hbWU6IHN0cmluZzsgU2VsZWN0b3I6IHN0cmluZyB9XG4pOiB7XG4gICAgbW9kdWxlTmFtZTogc3RyaW5nO1xuICAgIG1vZHVsZVBhdGg6IHN0cmluZztcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmc7XG4gICAgc2VsZWN0b3I6IHN0cmluZztcbn0ge1xuICAgIGxldCBtb2R1bGVOYW1lID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EZWZhdWx0VWlNb2R1bGU7XG4gICAgbGV0IG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICBsZXQgY29tcG9uZW50TmFtZSA9IGNvbnRyb2xVaS5vcmlnaW5hbFh0eXBlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnXycsICcnKTtcbiAgICBsZXQgc2VsZWN0b3I6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShjb21wb25lbnROYW1lKTtcbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cmluZygxLCBzZWxlY3Rvci5sZW5ndGgpO1xuICAgIHNlbGVjdG9yID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdXN0b21VaVByZWZpeCArICctJyArIHNlbGVjdG9yO1xuICAgIGlmIChjdXN0b21VaVNldHRpbmcgJiYgY3VzdG9tVWlTZXR0aW5nLk1vZHVsZSkge1xuICAgICAgICBtb2R1bGVOYW1lID0gY3VzdG9tVWlTZXR0aW5nLk1vZHVsZTtcbiAgICAgICAgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xuICAgICAgICBjb21wb25lbnROYW1lID0gY3VzdG9tVWlTZXR0aW5nLk5hbWU7XG4gICAgICAgIHNlbGVjdG9yID0gY3VzdG9tVWlTZXR0aW5nLlNlbGVjdG9yO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gbW9kdWxlS2ViYWJOYW1lLnNsaWNlKDEsIG1vZHVsZUtlYmFiTmFtZS5sZW5ndGgpO1xuICAgIHJldHVybiB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc1Bob25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBEZXZpY2UuaXNQaG9uZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzRGVza3RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzVGFibGV0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNUYWJsZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc1RhYmxldCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ21vYmknKSA+IDAgfHwgZ2V0RGV2aWNlSXNQaG9uZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbFNpemVNb2RlKGVsOiBIVE1MRWxlbWVudCwgZGV2aWNlU2l6ZTogJ3MnIHwgJ20nIHwgJ2wnIHwgJ3hsJyA9ICdsJyk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBpZiAoY29udGFpbmVyV2lkdGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRldmljZVNpemU7XG4gICAgfVxuICAgIGlmIChkZXZpY2VTaXplID09PSAncycgfHwgY29udGFpbmVyV2lkdGggPCA2MDApIHtcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdzJztcbiAgICB9IGVsc2UgaWYgKGRldmljZVNpemUgPT09ICdtJyB8fCAoY29udGFpbmVyV2lkdGggPiA2MDAgJiYgY29udGFpbmVyV2lkdGggPCAxMjAwKSkge1xuICAgICAgICBkZXZpY2VTaXplID0gJ20nO1xuICAgIH1cbiAgICByZXR1cm4gZGV2aWNlU2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKFxuICAgIGJ5dGVzLFxuICAgIGRlY2ltYWxzID0gMixcbiAgICBzaXplOiAnQnl0ZXMnIHwgJ0tCJyB8ICdNQicgfCAnR0InIHwgJ1RCJyB8ICdQQicgfCAnRUInIHwgJ1pCJyB8ICdZQidcbik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnMCBCeXRlcyc7XG4gICAgfVxuXG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3QgZG0gPSBkZWNpbWFscyA8IDAgPyAwIDogZGVjaW1hbHM7XG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG4gICAgY29uc3QgaSA9IHNpemVzLmZpbmRJbmRleCgoYykgPT4gYyA9PT0gc2l6ZSk7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoZG0pKSArICcgJyArIHNpemVzW2ldO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkRXh0ZW5zaW9uKHZhbGlkRXh0ZW5zaW9ucyk6IHN0cmluZyB7XG4gICAgbGV0IF92YWxpZEV4dGVuc2lvbnMgPSAnJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZEV4dGVuc2lvbnMpKSB7XG4gICAgICAgIF92YWxpZEV4dGVuc2lvbnMgPSB2YWxpZEV4dGVuc2lvbnMubWFwKChjKSA9PiAnLicgKyBjLkV4dGVuc2lvbikuam9pbignLCcpO1xuICAgIH1cbiAgICByZXR1cm4gX3ZhbGlkRXh0ZW5zaW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkZpbGVJY29uRGljdDEyOFt0eXBlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ltYWdlKHR5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBbJ2ltZycsICdwbmcnLCAnanBlZycsICdqcGcnLCAnZ2lmJywgJ2JtcCcsICd0aWZmJywgJ2ltYWdlJ10uaW5kZXhPZih0eXBlKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2V0QWxsQ29sdW1uc1NvcnRlZChjb250ZXh0KTogQXJyYXk8UmVwb3J0Vmlld0NvbHVtbj4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkNvbHVtbnMnLCBbXSkuZmlsdGVyKFxuICAgICAgICAoYykgPT4gYy5OYW1lICE9PSAnSWQnICYmIGMuTmFtZSAhPT0gJyRTdHlsZUluZGV4JyAmJiAhYy5IaWRkZW5cbiAgICApO1xuXG4gICAgY29uc3QgY29sTGlzdDogQ29sU2V0dGluZ1tdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcuQ29sU2V0dGluZ0xpc3QnLFxuICAgICAgICBbXVxuICAgICk7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPigpO1xuICAgIGNvbExpc3QuZm9yRWFjaCgoY29sUykgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5PZkNvbExpc3QgPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gY29sUy5OYW1lKTtcbiAgICAgICAgaWYgKGNvbHVtbk9mQ29sTGlzdCkge1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgLi4uY29sdW1uT2ZDb2xMaXN0LCBIaWRkZW46IGNvbFMuSXNIaWRkZW4sIFdpZHRoOiBjb2xTLldpZHRoIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbFNldHRpbmcgPSBjb2xMaXN0LmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gY29sdW1uLk5hbWUpO1xuICAgICAgICBpZiAoIWNvbFNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGluZGV4LCAwLCB7IC4uLmNvbHVtbiwgSGlkZGVuOiBjb2xMaXN0Lmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEdldFZpc2libGVWYWx1ZShvYmplY3QsIGZpZWxkKTogc3RyaW5nIHtcbiAgICBsZXQgb3V0cHV0VmFsdWU7XG4gICAgaWYgKG9iamVjdFtmaWVsZF0/LiRDYXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0cHV0VmFsdWUgPSBvYmplY3RbZmllbGRdLiRDYXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFZhbHVlID0gb2JqZWN0W2ZpZWxkICsgJyRDYXB0aW9uJ10gIT09IHVuZGVmaW5lZCA/IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddIDogb2JqZWN0W2ZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dFZhbHVlO1xufVxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gICAgJEdyb3VwOiBhbnk7XG4gICAgJExldmVsOiBudW1iZXI7XG4gICAgJENvdW50OiBudW1iZXI7XG4gICAgJEV4cGFuZGVkOiBib29sZWFuO1xuICAgICRQYXJlbnQ6IGFueTtcbiAgICAkQ2hpbGRyZW46IGFueVtdO1xuICAgICRWaXNpYmlsaXR5OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR3JvdXBCeShjb2xsZWN0aW9uOiBhbnlbXSwgc29ydFNldHRpbmdzOiBTb3J0U2V0dGluZ1tdKTogeyBncm91cGVkOiBHcm91cDsgZ3JvdXBzOiBhbnlbXSB9IHtcbiAgICBjb25zdCBncm91cGVkOiBhbnkgPSB7fTtcblxuICAgIGNvbnN0IGdyb3VwcyA9IHNvcnRTZXR0aW5ncy5tYXAoKGMpID0+IGMuTmFtZSk7XG4gICAgY29uc3QgZ2V0VGl0bGUgPSAobW8sIGZpZWxkTmFtZSk6IHN0cmluZyA9PiBHZXRWaXNpYmxlVmFsdWUobW8sIGZpZWxkTmFtZSk7XG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgIGdyb3Vwc1xuICAgICAgICAgICAgLnJlZHVjZSgobywgZywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVGl0bGUgPSBnZXRUaXRsZShhLCBnKTtcbiAgICAgICAgICAgICAgICBvW2dyb3VwVGl0bGVdID0gb1tncm91cFRpdGxlXSB8fCAoaSArIDEgPT09IGdyb3Vwcy5sZW5ndGggPyBbXSA6IHt9KTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2dyb3VwVGl0bGVdKSkge1xuICAgICAgICAgICAgICAgICAgICBhLiRMZXZlbCA9IGdyb3Vwcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGdldFRpdGxlKGEsIGdyb3Vwc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBncm91cGVkW3RpdGxlXTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LiRDb3VudCA9IChwYXJlbnQuJENvdW50ID8/IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBncm91cHMubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGdldFRpdGxlKGEsIGdyb3Vwc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbdGl0bGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LiRDb3VudCA9IG9bZ3JvdXBUaXRsZV0ubGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEyID0gRmluZEdyb3VwKGdyb3VwVGl0bGUsIGEpO1xuICAgICAgICAgICAgICAgICAgICBvW2dyb3VwVGl0bGVdLiRFeHBhbmRlZCA9IGEyPy4kRXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0uJFZpc2liaWxpdHkgPSBhMj8uJFZpc2liaWxpdHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvW2dyb3VwVGl0bGVdO1xuICAgICAgICAgICAgfSwgZ3JvdXBlZClcbiAgICAgICAgICAgIC5wdXNoKGEpO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGdyb3VwZWQsIGdyb3VwcyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmluZEdyb3VwKGdyb3VwVGl0bGU6IHN0cmluZywgYTogYW55KTogYW55IHtcbiAgICBpZiAoYS4kR3JvdXAgPT09IGdyb3VwVGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuICAgIGlmIChhLiRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIEZpbmRHcm91cChncm91cFRpdGxlLCBhLiRQYXJlbnQpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoaXRlbTogTGF5b3V0U2V0dGluZywgbGF5b3V0Q29udHJvbHM6IExheW91dFNldHRpbmdbXSk6IHZvaWQge1xuICAgIGlmIChpdGVtLnh0eXBlID09PSAnTHkuTGF5b3V0Q29udHJvbCcpIHtcbiAgICAgICAgbGF5b3V0Q29udHJvbHMucHVzaChpdGVtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0uaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0uaXRlbXMuZm9yRWFjaCgoYykgPT4gRmlsbEFsbExheW91dENvbnRyb2xzKGMsIGxheW91dENvbnRyb2xzKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRmluZFRvb2xiYXJJdGVtKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZywgcHJvcDogc3RyaW5nID0gJ3RleHQnKTogTWVudUl0ZW0gfCBudWxsIHtcbiAgICBpZiAoIXRvb2xiYXJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaW5kSW5BcnJheSA9ICh0b29sYmFySXRlbXM6IE1lbnVJdGVtW10sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGl0ZW06IE1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHRvb2xiYXJJdGVtcy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGMgPT09ICdvYmplY3QnICYmICFpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNbcHJvcF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBjO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLm1lbnU/Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZpbmRJbkFycmF5KGMubWVudS5pdGVtcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH07XG4gICAgcmV0dXJuIGZpbmRJbkFycmF5KHRvb2xiYXJJdGVtcywgdmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KGxheW91dDk0OiBMYXlvdXRTZXR0aW5nLCBsYXlvdXRUaXRsZTogc3RyaW5nKTogTGF5b3V0U2V0dGluZyB8IG51bGwge1xuICAgIGlmICghbGF5b3V0VGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChsYXlvdXQ5NC5UaXRsZSA9PT0gbGF5b3V0VGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGxheW91dDk0O1xuICAgIH1cbiAgICBsZXQgdGVtcExheW91dDk0OiBMYXlvdXRTZXR0aW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGxheW91dDk0Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXQ5NC5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0ZW1wTGF5b3V0OTQpIHtcbiAgICAgICAgICAgICAgICB0ZW1wTGF5b3V0OTQgPSBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NChsYXlvdXQ5NC5pdGVtc1tpXSwgbGF5b3V0VGl0bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wTGF5b3V0OTQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JpZFNldHRpbmdzKGNvbnRleHQpOiBHcmlkU2V0dGluZyB7XG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nJywgbnVsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgQ29sU2V0dGluZ0xpc3Q6IGdyaWRTZXR0aW5nPy5Db2xTZXR0aW5nTGlzdCA/PyBudWxsLFxuICAgICAgICBTb3J0U2V0dGluZ0xpc3Q6IGdyaWRTZXR0aW5nPy5Tb3J0U2V0dGluZ0xpc3QgPz8gW10sXG4gICAgICAgIEF1dG9TaXplQ29sdW1uczogZ3JpZFNldHRpbmc/LkF1dG9TaXplQ29sdW1ucyA/PyBmYWxzZVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIHJldHVybiB7XG4gICAgICAgIElkOiAnMCcsXG4gICAgICAgICRDYXB0aW9uOiAnJyxcbiAgICAgICAgJFR5cGVEZWZJZDogdHlwZURlZklkLFxuICAgICAgICAkU3RhdGU6ICdOZXcnLFxuICAgICAgICAkVHlwZTogJ0NvbW1vbi5NZXRhT2JqZWN0V2ViJyxcbiAgICAgICAgJEZpZWxkRGljdDoge31cbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dDk0T2JqZWN0SW5mbygpOiBMYXlvdXRTZXR0aW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBUeXBlOiAnUm9vdCcsXG4gICAgICAgIENvbnRyb2xJZDogJ9ix24zYtNmHJyxcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250YWluZXInLFxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFR5cGU6ICdWZXJ0aWNhbEpvaW4nLFxuICAgICAgICAgICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Sm9pbicsXG4gICAgICAgICAgICAgICAgSXNWZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiA4MiB9LFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkOiBzdHJpbmcpOiBGb3JtU2V0dGluZyB7XG4gICAgY29uc3QgbW8gPSBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZCk7XG5cbiAgICBjb25zdCBmb3JtUGFuZWxTZXR0aW5nczogRm9ybVNldHRpbmcgPSB7XG4gICAgICAgIFZpZXc6IHtcbiAgICAgICAgICAgIExheW91dDk0OiBnZXRMYXlvdXQ5NE9iamVjdEluZm8sXG4gICAgICAgICAgICBDb250cm9sSW5mbzogW10sXG4gICAgICAgICAgICBUeXBlRGVmSWQ6IHR5cGVEZWZJZFxuICAgICAgICB9LFxuICAgICAgICBJc1NlYXJjaFBhbmVsOiB0cnVlLFxuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICBNbzogbW9cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGZvcm1QYW5lbFNldHRpbmdzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1QYW5lbE1ldGFDb25kaXRpb25zKFxuICAgIHR5cGVEZWZJZDogc3RyaW5nLFxuICAgIGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSxcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbik6IGFueSB7XG4gICAgY29uc3QgZm9ybVNldHRpbmdzID0gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZCk7XG4gICAgZm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRyb2xzSW5mbykpO1xuXG4gICAgZm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaCguLi5jb250cm9sc0luZm8ubWFwKChjKSA9PiBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUpKSk7XG4gICAgZm9ybVNldHRpbmdzLkRhdGEuTW9bY29udHJvbE5hbWVdID0gdmFsdWU7XG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xuICAgICAgICBTZXR0aW5nOiBmb3JtU2V0dGluZ3MsXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TW9HcmlkRWRpdG9yKGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsIHR5cGVkZWZJZDogc3RyaW5nKTogUGFydGlhbDxGb3JtU2V0dGluZz4ge1xuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xuICAgIHJldHVybiB7IC4uLm5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLCAkVHlwZURlZklkOiB0eXBlZGVmSWQgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmlkRWRpdG9yRm9ybVBhbmVsKFxuICAgIGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgdHlwZWRlZjogc3RyaW5nLFxuICAgIHJlbGF0aW9uOiBhbnksXG4gICAgcmV3cml0ZUxheW91dDogYm9vbGVhbiA9IHRydWVcbik6IGFueSB7XG4gICAgY29uc3QgbmV3Rm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVNldHRpbmdzKSk7XG4gICAgbmV3Rm9ybVNldHRpbmdzLkRhdGEuTW8gPSB7IC4uLm1vLCAkVHlwZURlZklkOiB0eXBlZGVmIH07XG4gICAgaWYgKHJld3JpdGVMYXlvdXQpIHtcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQgPSBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTtcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaChcbiAgICAgICAgICAgIC4uLm5ld0Zvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvLm1hcCgoYykgPT5cbiAgICAgICAgICAgICAgICBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUsIGMuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQsIGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmb3JtUmVxdWVzdFBhcmFtcyA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUmVxdWVzdFBhcmFtcyh7XG4gICAgICAgIE1vSWQ6IG5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLklkLFxuICAgICAgICBUeXBlRGVmSWQ6IHR5cGVkZWYsXG4gICAgICAgIFJlbGF0aW9uOiByZWxhdGlvblxuICAgICAgICAvLyBNb0NvbnRleHQ6IHtcbiAgICAgICAgLy8gICAgIFJlcG9ydElkOiAnJyxcbiAgICAgICAgLy8gICAgIFZpZXdJZDogJycsXG4gICAgICAgIC8vICAgICBWaWV3TmFtZTogJycsXG4gICAgICAgIC8vICAgICBDb25kRm9ybWF0aW5nOiAnJyxcbiAgICAgICAgLy8gICAgIEluY2x1ZGVJblJlcG9ydDogJydcbiAgICAgICAgLy8gfVxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1QYW5lbEN0cmxyID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1QYW5lbEN0cmxyKHtcbiAgICAgICAgU2V0dGluZzogbmV3Rm9ybVNldHRpbmdzLFxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb24sXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIEZvcm1SZXF1ZXN0UGFyYW1zOiBmb3JtUmVxdWVzdFBhcmFtc1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtUGFuZWxDdHJscjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dENvbnRyb2woXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcbiAgICBjb250cm9sQ2FwdGlvbjogc3RyaW5nID0gJycsXG4gICAgaGlkZTogYm9vbGVhbiA9IHRydWVcbik6IFBhcnRpYWw8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4dHlwZTogJ0x5LkxheW91dENvbnRyb2wnLFxuICAgICAgICBUeXBlOiAnTGF5b3V0Q29udHJvbEl0ZW0nLFxuICAgICAgICBDb250cm9sSWQ6IGNvbnRyb2xOYW1lLFxuICAgICAgICBJc1ZlcnRpY2FsOiBmYWxzZSxcbiAgICAgICAgVGV4dExvY2F0aW9uOiAnUmlnaHQnLFxuICAgICAgICBUZXh0VmlzaWJsZTogZmFsc2UsXG4gICAgICAgIFZpc2libGU6ICFoaWRlLFxuICAgICAgICBoaWRlLFxuICAgICAgICBVc2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2w6IGZhbHNlLFxuICAgICAgICBDYXB0aW9uOiBjb250cm9sQ2FwdGlvbixcbiAgICAgICAgQWNjZXNzaWJsZU5hbWU6ICcnLFxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBNaW5TaXplOiB7IHdpZHRoOiA4OSwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIENvbnRyb2xCb3VuZHM6IHsgd2lkdGg6IDM4OCwgaGVpZ2h0OiAyMCB9LFxuICAgICAgICBDb250cm9sTWluU2l6ZTogeyB3aWR0aDogNDUsIGhlaWdodDogMjAgfSxcbiAgICAgICAgQ29udHJvbE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjAgfSxcbiAgICAgICAgUGFkZGluZzogWzIsIDIsIDIsIDJdLFxuICAgICAgICBMYWJlbFNpemU6IHsgd2lkdGg6IDM1LCBoZWlnaHQ6IDEzIH0sXG4gICAgICAgIG9yaWdpbmFsWHR5cGU6ICcnXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xMaXN0KFxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIGNvbnRyb2xEYk5hbWVzOiBzdHJpbmdbXSxcbiAgICBpc1NlYXJjaFBhbmVsOiBib29sZWFuLFxuICAgIGlzR3JpZEVkaXRvcjogYm9vbGVhblxuKTogUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcbiAgICAgICAgICAgICdGb3JtOTQuR2V0Q29udHJvbEluZm9zJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250cm9sSW5mb1BhcmFtZXRlcjoge1xuICAgICAgICAgICAgICAgICAgICBGaWVsZERiTmFtZXM6IGNvbnRyb2xEYk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICBNbzogbmV3IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViKG1vKSxcbiAgICAgICAgICAgICAgICAgICAgSXNTZWFyY2hQYW5lbDogaXNTZWFyY2hQYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgSXNHcmlkRWRpdG9yOiBpc0dyaWRFZGl0b3JcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG0pID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgTnpTYWZlQW55ID0gYW55O1xuZXhwb3J0IHR5cGUgTnVtYmVySW5wdXQgPSBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuZXhwb3J0IGludGVyZmFjZSBOZ1N0eWxlSW50ZXJmYWNlIHtcbiAgICBba2xhc3M6IHN0cmluZ106IE56U2FmZUFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRleGFibGVPYmplY3Qge1xuICAgIFtrZXk6IHN0cmluZ106IE56U2FmZUFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQT86IEluZGV4YWJsZU9iamVjdCwgb2JqQj86IEluZGV4YWJsZU9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgIW9iakEgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8ICFvYmpCKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZChvYmpCKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0FbaWR4XTtcbiAgICAgICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlcjtcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcjxEPih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFjazogRCk6IG51bWJlciB8IEQ7XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZywgZmFsbGJhY2tWYWx1ZTogbnVtYmVyID0gMCk6IG51bWJlciB7XG4gICAgcmV0dXJuIF9pc051bWJlclZhbHVlKHZhbHVlKSA/IE51bWJlcih2YWx1ZSkgOiBmYWxsYmFja1ZhbHVlO1xufVxuZnVuY3Rpb24gcHJvcERlY29yYXRvckZhY3Rvcnk8VCwgRD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZhbGxiYWNrOiAodjogVCkgPT4gRFxuKTogKHRhcmdldDogTnpTYWZlQW55LCBwcm9wTmFtZTogc3RyaW5nKSA9PiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwcm9wRGVjb3JhdG9yKFxuICAgICAgICB0YXJnZXQ6IE56U2FmZUFueSxcbiAgICAgICAgcHJvcE5hbWU6IHN0cmluZyxcbiAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yPzogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8TnpTYWZlQW55PlxuICAgICk6IE56U2FmZUFueSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVQcm9wTmFtZSA9IGAkJF9fem9ycm9Qcm9wRGVjb3JhdG9yX18ke3Byb3BOYW1lfWA7XG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSkpIHtcbiAgICAgICAgICAgIC8vIHdhcm4oYFRoZSBwcm9wIFwiJHtwcml2YXRlUHJvcE5hbWV9XCIgaXMgYWxyZWFkeSBleGlzdCwgaXQgd2lsbCBiZSBvdmVycmlkZWQgYnkgJHtuYW1lfSBkZWNvcmF0b3IuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQoKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5nZXRcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0LmJpbmQodGhpcykoKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbcHJpdmF0ZVByb3BOYW1lXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yLnNldC5iaW5kKHRoaXMpKGZhbGxiYWNrKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcHJpdmF0ZVByb3BOYW1lXSA9IGZhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcERlY29yYXRvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBJbnB1dE51bWJlcihmYWxsYmFja1ZhbHVlPzogTnpTYWZlQW55KTogTnpTYWZlQW55IHtcbiAgICByZXR1cm4gcHJvcERlY29yYXRvckZhY3RvcnkoJ0lucHV0TnVtYmVyJywgKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHRvTnVtYmVyKHZhbHVlLCBmYWxsYmFja1ZhbHVlKSk7XG59XG5leHBvcnQgZW51bSBBZmZpeFJlc3BvbmRFdmVudHMge1xuICAgIHJlc2l6ZSA9ICdyZXNpemUnLFxuICAgIHNjcm9sbCA9ICdzY3JvbGwnLFxuICAgIHRvdWNoc3RhcnQgPSAndG91Y2hzdGFydCcsXG4gICAgdG91Y2htb3ZlID0gJ3RvdWNobW92ZScsXG4gICAgdG91Y2hlbmQgPSAndG91Y2hlbmQnLFxuICAgIHBhZ2VzaG93ID0gJ3BhZ2VzaG93JyxcbiAgICBsb2FkID0gJ0xPQUQnXG59XG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVJlY3Qge1xuICAgIHRvcDogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBoZWlnaHQ/OiBudW1iZXI7XG4gICAgYm90dG9tPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYXJnZXRXaW5kb3codGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogdGFyZ2V0IGlzIFdpbmRvdyB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRhcmdldCA9PT0gd2luZG93O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0UmVjdCh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiBTaW1wbGVSZWN0IHtcbiAgICByZXR1cm4gIWlzVGFyZ2V0V2luZG93KHRhcmdldClcbiAgICAgICAgPyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgYm90dG9tOiAwXG4gICAgICAgICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZFZhbHVlKG5hbWU6IHN0cmluZywgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGNhcHRpb24/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBtby4kRmllbGREaWN0ICYmIG1vLiRGaWVsZERpY3RbbmFtZV0gPyBtby4kRmllbGREaWN0W25hbWVdIDogbmFtZTtcbiAgICBsZXQgdmFsID0gbW9bZmllbGROYW1lXTtcbiAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZVByZWZpeGVzID0gWydtb3onLCAnbXMnLCAnd2Via2l0J107XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcbiAgICBsZXQgbGFzdFRpbWUgPSAwO1xuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKTogYW55IHtcbiAgICAgICAgY29uc3QgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTtcbiAgICAgICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XG4gICAgICAgIH0sIHRpbWVUb0NhbGwpO1xuICAgICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZUR5bmFtaWNDb21tYW5kKGNvbW1hbmQ6IHsgSWQ6IHN0cmluZyB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IHsgY29tbWFuZCwgRHluYW1pY1NldHRpbmc6IG1vLCBNbzogbW8gfTtcbiAgICBCYXJzYUFwaS5Db21tb24uQ3VzdG9tQ29kZU1hbmFnZXIuUnVuRHluYW1pY0NvbW1hbmQoY29tbWFuZC5JZCwgZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZVdvcmtmbG93Q2hvaWNlRGVmKHNjb3BlLCBwYXJhbSwgc3VjY2VzczogKHJlc3VsdCkgPT4gdm9pZCwgZmFpbGVkOiAoZXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxuICAgICAgICAnV29ya2Zsb3c5NC5DaG9pY2VTZWxlY3QnLFxuICAgICAgICBwYXJhbSxcbiAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgc3VjY2VzcyhyZXN1bHQpO1xuICAgICAgICB9LCAvLyBzdWNjZXNzXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZmFpbGVkKGVycm9yKTtcbiAgICAgICAgfSwgLy8gIGVycm9yXG4gICAgICAgICgpID0+IHt9LCAvLyBkb1JldHVyblxuICAgICAgICBzY29wZSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gKCkgPT4gMDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNDQ2NVxuICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKChrZXkpID0+IGAke2tleX1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdylbMF07XG5cbiAgICByZXR1cm4gcHJlZml4ID8gKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGlkOiBudW1iZXIpOiBOelNhZmVBbnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgICAgICByZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PiBgJHtrZXl9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdyB8fCBgJHtrZXl9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3dcbiAgICApWzBdO1xuXG4gICAgcmV0dXJuIHByZWZpeFxuICAgICAgICA/IChcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxBbmltYXRpb25GcmFtZWBdIHx8XG4gICAgICAgICAgICAgICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYF1cbiAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgLmNhbGwodGhpcywgaWQpXG4gICAgICAgIDogY2xlYXJUaW1lb3V0KGlkKTtcbn1cblxuZXhwb3J0IHR5cGUgRWFzeWluZ0ZuID0gKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcikgPT4gbnVtYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0Q3ViaWModDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBjYyA9IGMgLSBiO1xuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xuICAgIGlmICh0dCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIChjYyAvIDIpICogdHQgKiB0dCAqIHR0ICsgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiAoKHR0IC09IDIpICogdHQgKiB0dCArIDIpICsgYjtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnpTY3JvbGxUb09wdGlvbnMge1xuICAgIC8qKiBBbmltYXRpb24gZHVyYXRpb24sIGRlZmF1bHQgYXMgNDUwICovXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gICAgLyoqIFNjcm9sbCBjb250YWluZXIsIGRlZmF1bHQgYXMgd2luZG93ICovXG4gICAgZWFzaW5nPzogRWFzeWluZ0ZuO1xuICAgIC8qKiBTY3JvbGwgZW5kIGNhbGxiYWNrICovXG4gICAgY2FsbGJhY2s/KCk6IHZvaWQ7XG59XG5leHBvcnQgY29uc3QgV29yZE1pbWVUeXBlID1cbiAgICAnLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xuZXhwb3J0IGNvbnN0IEltYWdlTWltZVR5cGUgPSAnLmpwZWcsLmpwZywuZ2lmLC5wbmcsLmJtcCwudGlmLGltYWdlLyonO1xuZXhwb3J0IGNvbnN0IFBkZk1pbWVUeXBlID0gJy5wZGYnO1xuZXhwb3J0IGNvbnN0IEFsbEZpbGVzTWltZVR5cGUgPSAnLnR4dCwucHB0LC5wZGYsLionO1xuZXhwb3J0IGNvbnN0IFZpZGVvTWltZVR5cGUgPSAndmlkZW8vKic7XG5leHBvcnQgY29uc3QgQXVkaW9NaW1lVHlwZSA9ICdhdWRpby8qJztcbiJdfQ==
|