mmhglobal-dynamicform 2.36.2 → 2.37.2
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/README.md +26 -0
- package/esm2020/lib/components/buttonfieldbase.component.mjs +10 -1
- package/esm2020/lib/components/datalistingfieldbase.component.mjs +37 -1
- package/esm2020/lib/components/fieldbase.component.mjs +3 -3
- package/esm2020/lib/dropdown_buttons/dropdown_buttons.component.mjs +109 -0
- package/esm2020/lib/kcard/kcard.component.mjs +2 -2
- package/esm2020/lib/ksplitter/ksplitter.component.mjs +19 -2
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +10 -5
- package/esm2020/lib/services/main.service.mjs +83 -18
- package/esm2020/lib/services/zcomponent.debug.service.mjs +7 -3
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +15 -23
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +14 -25
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +21 -13
- package/esm2020/lib/zgrid/zgrid.component.mjs +98 -98
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +3 -7
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +38 -16
- package/esm2020/lib/zudf/zudf.component.mjs +3 -3
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/mmhglobal-dynamicform.mjs +431 -191
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +430 -192
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/components/buttonfieldbase.component.d.ts +3 -0
- package/lib/components/datalistingfieldbase.component.d.ts +2 -0
- package/lib/dropdown_buttons/dropdown_buttons.component.d.ts +21 -0
- package/lib/ksplitter/ksplitter.component.d.ts +2 -0
- package/lib/mmhglobal-dynamicform.module.d.ts +42 -41
- package/lib/services/main.service.d.ts +8 -3
- package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +4 -2
- package/lib/zbuttons/zbuttons.component.d.ts +1 -3
- package/lib/zgrid/zgrid.component.d.ts +4 -4
- package/lib/ztreelist/ztreelist.component.d.ts +2 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -87,7 +87,9 @@ export class ZComponentDebugService {
|
|
|
87
87
|
gridActivityLogOnItemClick: this.gridActivityLogOnItemClick.bind(this),
|
|
88
88
|
updateModel: this.updateModel.bind(this),
|
|
89
89
|
isAllowUpdateFieldElement: true,
|
|
90
|
-
isFieldElementReadOnly: false
|
|
90
|
+
isFieldElementReadOnly: false,
|
|
91
|
+
isLoadViaAsset: false,
|
|
92
|
+
isLoadViaOauthDB: true
|
|
91
93
|
});
|
|
92
94
|
if (!d.zData) {
|
|
93
95
|
d.zData = { collectedActivities: [], activityCount: 0 };
|
|
@@ -97,6 +99,8 @@ export class ZComponentDebugService {
|
|
|
97
99
|
d['isAllowUpdateFieldElement'] = false;
|
|
98
100
|
d['isFieldElementReadOnly'] = true;
|
|
99
101
|
}
|
|
102
|
+
d['isLoadViaAsset'] = true;
|
|
103
|
+
d['isLoadViaOauthDB'] = false;
|
|
100
104
|
}
|
|
101
105
|
me.subscription = d.subject.subscribe((event) => this.subjectEvent(event, d, this));
|
|
102
106
|
this.patchFieldsProperty(fieldElements);
|
|
@@ -523,7 +527,7 @@ export class ZComponentDebugService {
|
|
|
523
527
|
ReadOnly: false,
|
|
524
528
|
ShowLabel: true,
|
|
525
529
|
Visible: true,
|
|
526
|
-
|
|
530
|
+
EnableHiding: false,
|
|
527
531
|
//cellFilter: "",
|
|
528
532
|
//filterCellFiltered: false,
|
|
529
533
|
//enablePinning: true,
|
|
@@ -735,4 +739,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
735
739
|
providedIn: 'root'
|
|
736
740
|
}]
|
|
737
741
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AlertService }, { type: i2.AuthService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.ToastService }, { type: i3.ModalService }, { type: i2.WebApiService }, { type: i2.SignalrService }, { type: i2.ZCoreService }]; } });
|
|
738
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBQ3NCLHNCQUFzQixFQUFFLFlBQVksRUFBbUIsWUFBWSxFQUEyRCxRQUFRLEVBQUUsV0FBVyxFQUU3RyxnQkFBZ0IsRUFDM0QsTUFBTSxFQUM3QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxzQ0FBc0MsRUFBNkIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFLMUksTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsNEJBQTBELEVBQzFELFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFlBQTBCO1FBVjFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFDMUQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBZnBCLGlCQUFZLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixjQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBZXpCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBSUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFhO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUc7WUFDbkIsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixhQUFhLEVBQUUsQ0FBQztZQUNoQix3QkFBd0IsRUFBRSxFQUFFO1lBQzVCLG1CQUFtQixFQUFFLENBQUM7U0FDdkIsQ0FBQztRQUNGLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUM5QixLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBR00sZUFBZSxDQUFDLGFBQTRCLEVBQUUsRUFBTztRQUMxRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDcEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxDQUFDLEdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbEMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNqQixJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUU7WUFDbkIsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMvQjtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ2Ysd0RBQXdEO1lBQ3hELE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUM7WUFDekQsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNwRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUMzQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQy9DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLHNCQUFzQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNwRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzVDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3BELFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDOUUsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDN0Qsa0JBQWtCLEVBQ2xCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQ1YsdUJBQXVCLENBQ3hCO1lBQ0QsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4Qyx5QkFBeUIsRUFBRSxJQUFJO1lBQy9CLHNCQUFzQixFQUFFLEtBQUs7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDWixDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUN6RDtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLEVBQUU7Z0JBQ2hELENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3BDO1NBQ0Y7UUFFRCxFQUFFLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBNEIsRUFBRSxFQUFFLENBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDbEMsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGFBQTRCO1FBQ3RELGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLEVBQU87UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQy9FLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUV6RSxPQUFPLFFBQVEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUUsc0NBQXNDO0lBQ3RGLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sYUFBYSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBWSxFQUFFLG9CQUE0QjtRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssV0FBVyxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUU7WUFDakMsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUM5SDtRQUVELE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFdBQWdCLEVBQUUsS0FBYTtRQUN2RCxNQUFNLE1BQU0sR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDeEUsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1SCw2QkFBNkIsQ0FBQyxJQUFJLENBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLGtCQUFrQixDQUFDLENBQUM7b0JBQ3BMLE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxJQUFJLEdBQUc7b0JBQ1gsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYztvQkFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTtvQkFDN0MsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQzdCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTO2lCQUNmLENBQUM7Z0JBRS9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUVsRCxJQUFJLG1CQUFtQixHQUFHLDBDQUEwQyxDQUFDO2dCQUVyRSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29CQUNsSyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUNqRjtnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsbUJBQW1CLDZCQUE2QixvQ0FBb0MsQ0FBQyxNQUFNLElBQUksc0NBQXNDLENBQUMsV0FBVyxJQUFJLG9DQUFvQyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2TyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLDZCQUE2QixvQ0FBb0MsQ0FBQyxNQUFNLElBQUksc0NBQXNDLENBQUMsV0FBVyxJQUFJLG9DQUFvQyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4TyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsb0JBQTRCO1FBQ3JELE1BQU0sYUFBYSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN6RyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNwQix1Q0FBdUM7WUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtnQkFDM0IsU0FBUyxFQUFFLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQzthQUNyRCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQixDQUFDLG9CQUE0QjtRQUNyRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdkYsU0FBUyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO1lBQzlCLGlEQUFpRDtZQUNqRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3BCLHVDQUF1QztZQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFcEMsc0NBQXNDO1lBQ3RDLElBQUk7Z0JBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtvQkFDM0IsU0FBUyxFQUFFLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztpQkFDckQsQ0FBQyxDQUFDO2FBQ0o7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzdDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxvQkFBNEI7UUFDMUQsTUFBTSxhQUFhLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBb0I7WUFDN0IsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO1lBQ3ZDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsU0FBUyxFQUFFLHNCQUFzQixDQUFDLElBQUk7U0FDdkMsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ3RELEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3BCLElBQUk7Z0JBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BELGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBRXBDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7d0JBQzNCLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3BGLENBQUMsQ0FBQztpQkFDSjtxQkFDSTtvQkFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTt3QkFDM0IsU0FBUyxFQUFFLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO3FCQUN4RSxDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUNELE9BQU8sS0FBSyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDN0M7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLHVCQUF1QixDQUFDLG9CQUE0QjtRQUMxRCxNQUFNLFNBQVMsR0FBb0I7WUFDakMsWUFBWSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0I7WUFDM0MsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixTQUFTLEVBQUUsc0JBQXNCLENBQUMsSUFBSTtTQUN2QyxDQUFBO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDMUQsU0FBUyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBQzFFLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQTRCLEVBQUUsS0FBYSxFQUFFLEVBQU87UUFDdkUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDckUsT0FBTztTQUNSO1FBQ0QsaURBQWlEO1FBQ2pELElBQUksUUFBUSxDQUFDO1FBRWIsSUFBSTtZQUNGLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ2hELEVBQUUsRUFDRixLQUFLLENBQUMsTUFBTSxDQUNiLENBQUM7WUFDRix1REFBdUQ7U0FDeEQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEtBQUssQ0FBQyxNQUFNLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN4RjtRQUVELG1CQUFtQjtRQUNuQixJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUNsQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzNCO2FBQ0ksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDckMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDdkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDN0IsT0FBTzthQUNSO1lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxDQUNiO29CQUNFLGdCQUFnQixFQUFFLEtBQUs7b0JBQ3ZCLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxhQUFhO29CQUM1QyxXQUFXLEVBQUUsS0FBSztvQkFDbEIsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLEVBQUU7b0JBQ2QsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtpQkFDdkIsQ0FDRixDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2Y7U0FDRjthQUNJLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQ3JDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtnQkFDcEMsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO29CQUN4QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM1QixPQUFPO2lCQUNSO2dCQUVELElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FDYjt3QkFDRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsUUFBUTt3QkFDbkMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLGFBQWE7d0JBQzVDLFdBQVcsRUFBRSxLQUFLO3dCQUNsQixNQUFNLEVBQUUsRUFBRTt3QkFDVixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7d0JBQy9CLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7cUJBQ3ZCLENBQ0YsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFFZCxPQUFPO2lCQUNSO2dCQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLFFBQVEsbUJBQW1CLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ25GO1NBQ0Y7YUFDSTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hHO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQVU7UUFDM0Msc0RBQXNEO1FBQ3RELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDM0IsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2hCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixLQUFLLG1CQUFtQjtnQkFDdEIsTUFBTSxjQUFjLEdBQUcsbUNBQW1DLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztnQkFDN0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixNQUFNO1lBQ1IsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxhQUFhO2dCQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUNBQW1DLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFhO1FBQzdCLFlBQVk7UUFDWixrRkFBa0Y7UUFDbEYscUdBQXFHO1FBQ3JHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFnQjtRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUMvQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDM0YsSUFBSSxlQUFlLEVBQUU7WUFDbkIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUFtQyxFQUFFLFVBQWtCLEVBQUUsTUFBYyxFQUMzRixFQUFPLEVBQUUsUUFBYSxFQUFFLFFBQWlCO1FBRXpDLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN4QixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDdkIsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3hCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzVCLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQ3BDLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ3RDLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFO1lBQ25DLEVBQUUsSUFBSSxFQUFFLGdDQUFnQyxFQUFFO1lBQzFDLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFO1lBQzdDLCtDQUErQztZQUMvQyw2QkFBNkI7WUFDN0IsNEJBQTRCO1lBQzVCLGdEQUFnRDtTQUNqRCxDQUFDO1FBRUYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsQ0FBQztRQUNuRSxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFFRCxJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksVUFBVSxFQUFFO1lBQ2QsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEc7UUFFRCxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFO1lBQzlCLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDakM7YUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0lBQzFDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFVLEVBQUUsS0FBYSxFQUFFLEVBQU87UUFDMUQsd0RBQXdEO1FBQ3hELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xDLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxFQUF5QjtRQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBR08sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSTtZQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsMkJBQTJCO1lBQzNCLGlEQUFpRDtZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQUMsTUFBTTtZQUNOLFFBQVEsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEVBQXVCO1FBQzlDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDeEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztRQUNGLE9BQU8sQ0FDTCxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDaEIsTUFBTTtZQUNOLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUNoQixNQUFNO1lBQ04sYUFBYSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQTRCO1FBQzVDLFlBQVk7UUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDckMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDN0MsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQ2I7WUFDRSxnQkFBZ0IsRUFBRSx3QkFBd0I7WUFDMUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUM5QixNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRSxvQkFBb0I7U0FDakMsQ0FDRixDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQXdCLEVBQUUsRUFBRTtZQUN2QyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO2dCQUN2QyxPQUFPO2FBQ1I7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNqQixPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkQsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixrREFBa0Q7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQVksRUFBRSxTQUFjLEVBQUUsS0FBYTtRQUNoRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hFO2FBQ0k7WUFDSCxJQUFJLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDbEMsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDaEQ7WUFDRCxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQVksRUFBRSxTQUFjLEVBQUUsS0FBYTtRQUNoRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDTCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2xELFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7aUJBQ3JDO2dCQUNELFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxTQUFjLEVBQUUsS0FBYTtRQUNsRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNMLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsRUFBeUI7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLE9BQU87UUFDYixNQUFNLEVBQUUsR0FBMEI7WUFDaEMsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7WUFDVixJQUFJLEVBQUUsRUFBRTtZQUNSLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQXlCO1FBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkMsK0NBQStDO1FBQy9DLHdDQUF3QztRQUN4Qyw4QkFBOEI7UUFDOUIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU07WUFDOUQsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFLEdBQUc7WUFDVixRQUFRLEVBQUUsR0FBRztZQUNiLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxzQ0FBc0M7WUFDaEQsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IscUJBQXFCO1lBQ3JCLGlCQUFpQjtZQUNqQiw0QkFBNEI7WUFDNUIsc0JBQXNCO1lBQ3RCLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIsMkJBQTJCO1NBQzVCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRztZQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pELENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUNiO1lBQ0UsZ0JBQWdCLEVBQUUsd0JBQXdCO1lBQzFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDOUIsTUFBTSxFQUFFLE1BQU07WUFDZCxVQUFVLEVBQUUsd0JBQXdCO1NBQ3JDLENBQ0YsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUF3QixFQUFFLEVBQUU7WUFDdkMsSUFBSSxTQUFTLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDdkMsT0FBTzthQUNSO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDakIsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUN0QjtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsa0RBQWtEO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxFQUF5QjtRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUNuRDtZQUNFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFpQjtZQUNwRCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBaUI7U0FDcEQsQ0FBQzthQUNELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFpQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBQ3pFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsT0FBTztTQUNSO1FBRUQsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7YUFDYixJQUFJO1FBQ0gsd0JBQXdCO1FBQ3hCLG1EQUFtRDtRQUNuRCwwQ0FBMEM7UUFDMUMsTUFBTTtRQUNOLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO2dCQUNqQyxNQUFNLE9BQU8sR0FBRyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDM0YsTUFBTSxLQUFLLEdBQW9CO29CQUM3QixFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNuQixXQUFXLEVBQUUsWUFBWSxDQUFDLE1BQU07b0JBQ2hDLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWTtvQkFDdkMsTUFBTSxFQUFFLE9BQU87aUJBQ2hCLENBQUE7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDckQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsaUNBQWlDLENBQUMsQ0FBQyxFQUN0RSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDbkcsQ0FBQzthQUNIO1lBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUM5RixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDLEVBQ3RFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNuRyxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUNELEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixrQ0FBa0M7WUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7YUFDSixTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBR0QsNERBQTREO0lBQzVELHdEQUF3RDtJQUNqRCxnQkFBZ0I7UUFDckIsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZHLElBQUksd0JBQXdCLEVBQUU7WUFDNUIsd0JBQXdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsS0FBVTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBRXhDLGtCQUFrQjtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTthQUM1QixHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUMzRyxHQUFHLENBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ2QsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUUxQixJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RCLFFBQVEsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO2FBQy9CO1lBRUQsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQkFDNUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxHQUFHLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzlCLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7b0JBQ3hELGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RSxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ3pELGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQy9ELHdCQUF3QixFQUFFLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNO2FBQ2xGLENBQUM7WUFFRiw4QkFBOEI7WUFDOUIsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFlBQVksRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNwQixZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDeEIsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUNqQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ2pDLGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTztnQkFDbEMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLFVBQVU7Z0JBQ3hDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRztnQkFDMUIsWUFBWSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQzdCLENBQUM7WUFFRixJQUFJLGVBQWUsR0FBRztnQkFDcEIsY0FBYyxFQUFFLE1BQU07Z0JBQ3RCLGdCQUFnQixFQUFFLE1BQU07Z0JBQ3hCLGdCQUFnQixFQUFFLE1BQU07YUFDekIsQ0FBQztZQUVGLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtnQkFDaEMsZUFBZSxHQUFHO29CQUNoQixjQUFjLEVBQUUsV0FBVyxDQUFDLEVBQUU7b0JBQzlCLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxJQUFJO29CQUNsQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsSUFBSTtpQkFDbkMsQ0FBQTthQUNGO1lBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxVQUFVLENBQ2I7Z0JBQ0UsZ0JBQWdCLEVBQUUsMkJBQTJCO2dCQUM3QyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUM5QixNQUFNLEVBQUUsZUFBZTtnQkFDdkIsVUFBVSxFQUFFLHNCQUFzQjthQUNuQyxDQUNGLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBd0IsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO29CQUN2QyxPQUFPO2lCQUNSO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBbUIsRUFBRSxVQUFrQjtRQUNuRCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUN2RSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7Z0JBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUM5RSxHQUFHLFVBQVUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkY7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELDZGQUE2RjtJQUN0RixVQUFVLENBQUMsZUFBZ0M7UUFDaEQsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFO1lBQy9CLGdEQUFnRDtZQUNoRCxlQUFlLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDakQ7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O21IQTMwQlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50IH0gZnJvbSAnaW9uaWMtc2VsZWN0YWJsZSc7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBBbGVydEJ1dHRvbiwgQWxlcnRTZXJ2aWNlLCBBc3NldHNBbGxvd2VkRXh0ZW5zaW9uLCBBc3NldHNGb2xkZXIsIEFzc2V0c05vZGVQYXJhbSwgQXNzZXRzUm91dGVzLCBBdXRoU2VydmljZSwgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgRmllbGRTZXJ2aWNlLCBGb3JtVHlwZSwgTUVTU0FHRVRZUEUsXHJcbiAgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIFJlc291cmNlQXBpU2VydmljZSwgU2lnbmFsclNlcnZpY2UsIFRvYXN0U2VydmljZSwgV2ViQXBpU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpDb3JlU2VydmljZSwgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXNcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsUmVzcG9uc2UsIE1vZGFsU2VydmljZSB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlckRpcmVjdEFjY2Vzc1F1ZXJ5UGFyYW1LZXksIEZvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbVZhbHVlLCBGb3JtQnVpbGRlclF1ZXJ5UGFyYW1EYXRhIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgWkNvbXBvbmVudERlYnVnU2VydmljZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGdyb3Vwc1RvU2VuZCA9IFsnb2F1dGgnXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXZlbnROYW1lID0gJ0ZpZWxkRWxlbWVudCc7XHJcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNpZ25hbHJTZXJ2aWNlOiBTaWduYWxyU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY29wZTogYW55O1xyXG5cclxuICBnZXQgZGVidWcoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlLmdyb3VwLl9kZWJ1ZztcclxuICB9XHJcblxyXG4gIGdldCBncm91cCgpOiBaR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NvcGUuZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Jbml0RGVidWdnZXIoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgZ3JvdXAuX2RlYnVnID0gbmV3IFpHcm91cCh0cnVlKTtcclxuICAgIGdyb3VwLl9pc0RlYnVnZ2luZyA9IHRydWU7XHJcbiAgICBncm91cC5fZGVidWcuekRhdGEgPSB7XHJcbiAgICAgIGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLFxyXG4gICAgICBhY3Rpdml0eUNvdW50OiAwLFxyXG4gICAgICBjb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnM6IFtdLFxyXG4gICAgICB3b3JrZmxvd0J1dHRvbkNvdW50OiAwXHJcbiAgICB9O1xyXG4gICAgZ3JvdXAuX2RlYnVnLnpDb21wb25lbnRzID0ge307XHJcbiAgICBncm91cC5pc0xpc3RGb3JtID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIG9uU3RhcnREZWJ1Z2dlcihmaWVsZEVsZW1lbnRzOiBBcnJheTxaRmllbGQ+LCBtZTogYW55KSB7XHJcbiAgICB0aGlzLnNjb3BlID0gbWU7XHJcbiAgICBpZiAoIW1lLmdyb3VwLl9kZWJ1Zykge1xyXG4gICAgICBtZS5ncm91cC5fZGVidWcgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkOiBaR3JvdXAgPSBtZS5ncm91cC5fZGVidWc7XHJcbiAgICBtZS5mb3JtID0gbWUudG9Gb3JtR3JvdXAoZmllbGRFbGVtZW50cyk7XHJcbiAgICBkLmZvcm0gPSBtZS5mb3JtO1xyXG4gICAgaWYgKG1lLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICBtZS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGQsIHtcclxuICAgICAgLy8gekRhdGE6IHsgY29sbGVjdGVkQWN0aXZpdGllczogW10sIGFjdGl2aXR5Q291bnQ6IDAgfSxcclxuICAgICAgek1vZGVsOiB7fSxcclxuICAgICAgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxaQ29tcG9uZW50T3V0cHV0RXZlbnQ+KG51bGwpLFxyXG4gICAgICBpc0VkaXQ6IHRydWUsXHJcbiAgICAgIGlzTmV3OiBmYWxzZSxcclxuICAgICAgX2RlYnVnOiBtZS5ncm91cC5fZGVidWcsXHJcbiAgICAgIF9ncm91cDogbWUuZ3JvdXAsXHJcbiAgICAgIHJlc291cmNlVVJMOiB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkJyksXHJcbiAgICAgIHRyZWVJdGVtVGVtcGxhdGU6IHRoaXMudHJlZUl0ZW1UZW1wbGF0ZSxcclxuICAgICAgb25JdGVtQ2xpY2s6IHRoaXMub25JdGVtQ2xpY2ssXHJcbiAgICAgIG9uVHJlZU5vZGVDaGFuZ2U6IHRoaXMub25UcmVlTm9kZUNoYW5nZSxcclxuICAgICAgb25BZGROb2RlOiB0aGlzLm9uQWRkTm9kZSxcclxuICAgICAgb25SZW1vdmVOb2RlOiB0aGlzLm9uUmVtb3ZlTm9kZSxcclxuICAgICAgdHJlZU5vZGVzRXhwYW5kQWxsOiB0aGlzLnRyZWVOb2Rlc0V4cGFuZEFsbCxcclxuICAgICAgdHJlZU5vZGVzQ29sbGFwc2VBbGw6IHRoaXMudHJlZU5vZGVzQ29sbGFwc2VBbGwsXHJcbiAgICAgIHJlZnJlc2hUcmVlTW9kZWw6IHRoaXMucmVmcmVzaFRyZWVNb2RlbCxcclxuICAgICAgZWRpdEluRm9ybUJ1aWxkZXI6IHRoaXMuZWRpdEluRm9ybUJ1aWxkZXIuYmluZCh0aGlzKSxcclxuICAgICAgYWRkTm9kZTogdGhpcy5hZGROb2RlLFxyXG4gICAgICByZWZyZXNoQWN0aXZpdHlMb2dEYXRhOiB0aGlzLmxvYWRHcmlkRGF0YS5iaW5kKHRoaXMpLFxyXG4gICAgICBHb1RvRmllbGRFbGVtZW50OiB0aGlzLmdvdG9GaWVsZEVsZW1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgTGlzdFdhdGNoTmFtZTogdGhpcy5saXN0V2F0Y2hOYW1lLmJpbmQodGhpcyksXHJcbiAgICAgIG9uQ2hhbmdlV2F0Y2hOYW1lOiB0aGlzLm9uQ2hhbmdlV2F0Y2hOYW1lLmJpbmQodGhpcyksXHJcbiAgICAgIGdldFdhdGNoTmFtZTogdGhpcy5nZXRXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlOiB0aGlzLmZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICBncmlkQWN0aXZpdHlMb2dDb2x1bW5GaWVsZHM6IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgICAgJ2RlYnVnQWN0aXZpdHlMb2cnLFxyXG4gICAgICAgIEZvcm1UeXBlLmZvcm1GaWVsZCxcclxuICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgIFwiZGVidWdBY3Rpdml0eUxvZ0ZpZWxkXCJcclxuICAgICAgKSxcclxuICAgICAgZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6IHRoaXMuZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgdXBkYXRlTW9kZWw6IHRoaXMudXBkYXRlTW9kZWwuYmluZCh0aGlzKSxcclxuICAgICAgaXNBbGxvd1VwZGF0ZUZpZWxkRWxlbWVudDogdHJ1ZSxcclxuICAgICAgaXNGaWVsZEVsZW1lbnRSZWFkT25seTogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgaWYgKCFkLnpEYXRhKSB7XHJcbiAgICAgIGQuekRhdGEgPSB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQpIHtcclxuICAgICAgaWYgKCF0aGlzLnpjb3JlU2VydmljZS5pc0FwcFJ1bm5pbmdJbkxvY2FsaG9zdCgpKSB7XHJcbiAgICAgICAgZFsnaXNBbGxvd1VwZGF0ZUZpZWxkRWxlbWVudCddID0gZmFsc2U7XHJcbiAgICAgICAgZFsnaXNGaWVsZEVsZW1lbnRSZWFkT25seSddID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1lLnN1YnNjcmlwdGlvbiA9IGQuc3ViamVjdC5zdWJzY3JpYmUoKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpID0+XHJcbiAgICAgIHRoaXMuc3ViamVjdEV2ZW50KGV2ZW50LCBkLCB0aGlzKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG9hZERlYnVnWk1vZGVsKG1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGF0Y2hGaWVsZHNQcm9wZXJ0eShmaWVsZEVsZW1lbnRzOiBBcnJheTxaRmllbGQ+KSB7XHJcbiAgICBmaWVsZEVsZW1lbnRzLmZvckVhY2goZmllbGRFbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkRWxlbWVudCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkRWxlbWVudC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50LlZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREZWJ1Z1pNb2RlbChtZTogYW55KSB7XHJcbiAgICBjb25zdCBwcm9qZWN0SWQkID0gdGhpcy5nZXRQcm9qZWN0SWQoKTtcclxuICAgIGNvbnN0IGZvcm1UeXBlID0gbWUuZ3JvdXAuaXNMaXN0Rm9ybSA/IEZvcm1UeXBlLmxpc3RGaWVsZCA6IEZvcm1UeXBlLmZvcm1GaWVsZDtcclxuICAgIGNvbnN0IGZpZWxkRWxlbWVudEZvcm1OYW1lID0gbWUuZ3JvdXAuZmllbGROYW1lO1xyXG4gICAgY29uc3QgZmllbGR6TW9kZWwkID0gdGhpcy5nZXRGaWVsZHpNb2RlbChmb3JtVHlwZSwgZmllbGRFbGVtZW50Rm9ybU5hbWUpO1xyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihbcHJvamVjdElkJCwgZmllbGR6TW9kZWwkXSk7ICAvLyBFbWl0cyB3aGVuIGFsbCBvYnNlcnZhYmxlcyBjb21wbGV0ZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcm9qZWN0SWQoKSB7XHJcbiAgICBjb25zdCBkZWJ1Z2dlckdyb3VwOiBaR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdwcm9qZWN0c1VSTCcpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuZ2V0QXBpKHVybCwge30sIGRlYnVnZ2VyR3JvdXAuekRhdGEsICdQcm9qZWN0T3B0aW9ucycsIG51bGwsIGRlYnVnZ2VyR3JvdXAsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGR6TW9kZWwodHlwZTogc3RyaW5nLCBmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpc0Zvcm1GaWVsZCA9IHR5cGUgPT09ICdGb3JtRmllbGQnO1xyXG5cclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmxvYWRWaWFBc3NldCkge1xyXG4gICAgICByZXR1cm4gaXNGb3JtRmllbGQgPyB0aGlzLmdldEFzc2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lKSA6IHRoaXMuZ2V0QXNzZXRMaXN0RmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0Zvcm1GaWVsZCA/IHRoaXMuZ2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lKSA6IHRoaXMuZ2V0TGlzdEZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZWRpdEluRm9ybUJ1aWxkZXIoYnV0dG9uRXZlbnQ6IGFueSwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgY29uc3Qgek1vZGVsID0gZ3JvdXAgJiYgZ3JvdXAuek1vZGVsID8gZ3JvdXAuek1vZGVsIDogdGhpcy5kZWJ1Zy56TW9kZWw7XHJcbiAgICBpZiAoek1vZGVsKSB7XHJcbiAgICAgIGNvbnN0IGlzQWxsb3dUb0FjY2Vzc0Zvcm1CdWlsZGVyT2JzID0gdGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQgPyB0aGlzLndlYkFwaVNlcnZpY2UuaXNBc3NldEh0dHBOb2RlQWN0aXZlKCkgOiBvZih0cnVlKTtcclxuICAgICAgaXNBbGxvd1RvQWNjZXNzRm9ybUJ1aWxkZXJPYnMucGlwZShcclxuICAgICAgICB0YXAoaXNBY3RpdmUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KGBQbGVhc2Ugc3RhcnQgeW91ciBub2RlIHNlcnZlciBhbmQgdHJ5IGFnYWluLmAsICd0b3AnLCBmYWxzZSwgMjAwMCwgJ2RhbmdlcicsIGBMb2NhbCBOb2RlIFNlcnZlciAoUG9ydDogJHt0aGlzLmVudmlyb25tZW50Lm5vZGVTZXJ2ZXJQb3J0fSkgaXMgdW5yZWFjaGFibGVgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG5vZGVTZXJ2ZXJQb3J0OiB0aGlzLmVudmlyb25tZW50Lm5vZGVTZXJ2ZXJQb3J0LFxyXG4gICAgICAgICAgICBpc0xvYWRWaWFBc3NldDogdGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQsXHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6IHpNb2RlbC5OYW1lLFxyXG4gICAgICAgICAgICBmb3JtVHlwZTogek1vZGVsLlR5cGUgPz8gRm9ybVR5cGUuZm9ybUZpZWxkXHJcbiAgICAgICAgICB9IGFzIEZvcm1CdWlsZGVyUXVlcnlQYXJhbURhdGE7XHJcblxyXG4gICAgICAgICAgY29uc3QgZGF0YVN0ciA9IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuXHJcbiAgICAgICAgICBsZXQgb2F1dGhBZG1pblBvcnRhbFVSTCA9ICdodHRwczovL2Uxc2l0Lm11c2ltbWFzLmNvbS9PQXV0aEFkbWluV2ViJztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudCAmJiB0aGlzLmVudmlyb25tZW50LmN1c3RvbVJlc291cmNlICYmIHRoaXMuZW52aXJvbm1lbnQuY3VzdG9tUmVzb3VyY2UubGVuZ3RoID4gMCAmJiB0aGlzLmVudmlyb25tZW50LmN1c3RvbVJlc291cmNlWzBdWydvYXV0aEFkbWluUG9ydGFsVXJsJ10pIHtcclxuICAgICAgICAgICAgb2F1dGhBZG1pblBvcnRhbFVSTCA9IHRoaXMuZW52aXJvbm1lbnQuY3VzdG9tUmVzb3VyY2VbMF1bJ29hdXRoQWRtaW5Qb3J0YWxVcmwnXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgUm91dGUgdG86ICAke29hdXRoQWRtaW5Qb3J0YWxVUkx9L29hdXRoYWRtaW4vZGlyZWN0LWFjY2Vzcz8ke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbUtleS5Nb2R1bGV9PSR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtVmFsdWUuRm9ybUJ1aWxkZXJ9JiR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtS2V5LkRhdGF9PSR7ZGF0YVN0cn1gKTtcclxuICAgICAgICAgIHdpbmRvdy5vcGVuKGAke29hdXRoQWRtaW5Qb3J0YWxVUkx9L29hdXRoYWRtaW4vZGlyZWN0LWFjY2Vzcz8ke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbUtleS5Nb2R1bGV9PSR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtVmFsdWUuRm9ybUJ1aWxkZXJ9JiR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtS2V5LkRhdGF9PSR7ZGF0YVN0cn1gLCBcIl9ibGFua1wiKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGb3JtRmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGVidWdnZXJHcm91cDogWkdyb3VwID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IGZpZWxkVXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZmllbGRVcmwsIHsgbmFtZTogZmllbGRFbGVtZW50Rm9ybU5hbWUsIHR5cGU6IEZvcm1UeXBlLmZvcm1GaWVsZCB9KS5waXBlKFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncmVzcERhdGE6ICcsIHJlc3BEYXRhKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAuek1vZGVsLCByZXNwRGF0YSk7XHJcbiAgICAgICAgZGVidWdnZXJHcm91cC5mb3JtLnBhdGNoVmFsdWUoZGVidWdnZXJHcm91cC56TW9kZWwpO1xyXG4gICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEpTT04ucGFyc2UoZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMaXN0RmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGVidWdnZXJHcm91cCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCBmaWVsZHNNYXBwaW5nVXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZHNNYXBwaW5nJyk7XHJcbiAgICBjb25zdCBmaWVsZFVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGQnKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKGZpZWxkc01hcHBpbmdVcmwsIHsgbmFtZTogZmllbGRFbGVtZW50Rm9ybU5hbWUgfSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChmaWVsZE1hcHBpbmc6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIEZldGNoIGZpZWxkIGRhdGEgYmFzZWQgb24gRmllbGRFbGVtZW50TWFzdGVySWRcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKGZpZWxkVXJsLCB7IGlkOiBmaWVsZE1hcHBpbmcuRmllbGRFbGVtZW50TWFzdGVySWQgfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBVcGRhdGUgZGVidWdnZXJHcm91cCB3aXRoIGZpZWxkIGRhdGFcclxuICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAuek1vZGVsLCByZXNwRGF0YSk7XHJcblxyXG4gICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5wYXRjaFZhbHVlKGRlYnVnZ2VyR3JvdXAuek1vZGVsKTtcclxuICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuXHJcbiAgICAgICAgLy8gUGFyc2UgYW5kIGNvbnZlcnQgQ29kZSB0byB0cmVlTW9kZWxcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmllbGRzID0gSlNPTi5wYXJzZShkZWJ1Z2dlckdyb3VwLnpNb2RlbC5Db2RlKTtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cCwge1xyXG4gICAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBKU09OOicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFzc2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRlYnVnZ2VyR3JvdXA6IFpHcm91cCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCBwYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICBhc3NldHNGb2xkZXI6IEFzc2V0c0ZvbGRlci5maWVsZGVsZW1lbnQsXHJcbiAgICAgIG5hbWU6IGZpZWxkRWxlbWVudEZvcm1OYW1lLFxyXG4gICAgICBleHRlbnNpb246IEFzc2V0c0FsbG93ZWRFeHRlbnNpb24uanNvblxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmFzc2V0c0h0dHBMb2NhbEdldChwYXJhbSkucGlwZShcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cC56TW9kZWwsIHJlc3BEYXRhKTtcclxuICAgICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5wYXRjaFZhbHVlKGRlYnVnZ2VyR3JvdXAuek1vZGVsKTtcclxuICAgICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuICAgICAgICAgIGlmICghWkNvbXBvbmVudEhlbHBlci5pc0pzb24oZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSkpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoSlNPTi5wYXJzZShkZWJ1Z2dlckdyb3VwLnpNb2RlbC5Db2RlKSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBKU09OOicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBc3NldExpc3RGaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBsaXN0UGFyYW06IEFzc2V0c05vZGVQYXJhbSA9IHtcclxuICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIubGlzdGZpZWxkbWFwcGluZyxcclxuICAgICAgbmFtZTogZmllbGRFbGVtZW50Rm9ybU5hbWUsXHJcbiAgICAgIGV4dGVuc2lvbjogQXNzZXRzQWxsb3dlZEV4dGVuc2lvbi5qc29uXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5hc3NldHNIdHRwTG9jYWxHZXQobGlzdFBhcmFtKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKGZpZWxkTWFwcGluZzogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNzZXRGb3JtRmllbGR6TW9kZWwoZmllbGRNYXBwaW5nLkZpZWxkRWxlbWVudE1hc3Rlck5hbWUpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YmplY3RFdmVudChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoXCJtb2RhbEdyb3VwLlwiKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIioqIERlYnVnIC0gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBtZSxcclxuICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGV2ZW50LlRhcmdldCwgZ3JvdXApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS53YXJuKGBFcnJvciBpbiBnZXRHcm91cFZhbHVlLiBFdmVudCB0YXJnZXQ6ICR7ZXZlbnQudGFyZ2V0fS4gRXJyb3I6ICR7ZXJyb3J9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZS5lbmRzV2l0aChcIm9uTmF2aWdhdGVUb1wiKSkge1xyXG4gICAgICAgIGNvbnN0IG5VcmwgPSBldmVudC50YXJnZXQucmVwbGFjZShcIi86aWRcIiwgXCIvXCIgKyBldmVudC5kYXRhKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbblVybF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiemdyaWQtY2VsbENsaWNrXCIpIHtcclxuICAgICAgICBjb25zdCBjTmFtZSA9IGNhbGxGdW5jLnNsaWNlKDQpO1xyXG4gICAgICAgIHRoaXMuc2hvd3pNb2RhbChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGRFbGVtZW50TmFtZTogY05hbWUsXHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE9ic2VydmFibGUkOiBldmVudC5jb2x1bW5GaWVsZHMkLFxyXG4gICAgICAgICAgICBwYXJlbnRHcm91cDogZ3JvdXAsXHJcbiAgICAgICAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgICAgICAgIGZvcm1IZWFkZXI6ICcnLFxyXG4gICAgICAgICAgICByZWZlcklkOiBldmVudC5kYXRhLklkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd3pNb2RhbChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6IGNhbGxGdW5jLmN0cmxOYW1lLFxyXG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudE9ic2VydmFibGUkOiBldmVudC5jb2x1bW5GaWVsZHMkLFxyXG4gICAgICAgICAgICAgIHBhcmVudEdyb3VwOiBncm91cCxcclxuICAgICAgICAgICAgICB6TW9kZWw6IHt9LFxyXG4gICAgICAgICAgICAgIGZvcm1IZWFkZXI6IGNhbGxGdW5jLmZvcm1IZWFkZXIsXHJcbiAgICAgICAgICAgICAgcmVmZXJJZDogZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBjYWxsRnVuYyB0eXBlOiAke2NhbGxGdW5jfS4gRXZlbnQgdGFyZ2V0OiAke2V2ZW50LnRhcmdldH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAuIFRhcmdldDogJHtldmVudC50YXJnZXR9LiBFdmVudCBkZXRhaWxzOiBgLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyaWRBY3Rpdml0eUxvZ09uSXRlbUNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljazogJywgZXZlbnQpO1xyXG4gICAgY29uc3QgcmVjID0gZXZlbnQuZGF0YUl0ZW07XHJcbiAgICBzd2l0Y2ggKHJlYy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xpc3RGaWVsZCc6XHJcbiAgICAgIGNhc2UgJ0Zvcm1GaWVsZCc6XHJcbiAgICAgICAgdGhpcy5nZXRGaWVsZHpNb2RlbChyZWMudHlwZSwgcmVjLmFjdGl2aXR5TmFtZSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSZXNvdXJjZVNlcnZlckFQSSc6XHJcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lVmFsdWUgPSAnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddLnJlZmVyZW5jZSc7XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSh3YXRjaE5hbWVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0h0dHBHZXQkJzpcclxuICAgICAgY2FzZSAnSHR0cFBvc3QkJzpcclxuICAgICAgY2FzZSAnSHR0cFB1dCQnOlxyXG4gICAgICBjYXNlICdIdHRwRGVsZXRlJCc6XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSgnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddJyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdFRhYihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIC8vIHRoaXMuZGVidWcuekNvbXBvbmVudHNbXCJ6dGFiX2RlYnVnZ2VyVGFic1wiXS5zdGF0ZS5sYXN0U2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3p0YWJfZGVidWdnZXJUYWJzJykuc3RhdGUubGFzdFNlbGVjdGVkVGFiSW5kZXggPSBpbmRleDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6dGFiX2RlYnVnZ2VyVGFicycpLnNlbGVjdFRhYihpbmRleCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhdGNoTmFtZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWU7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoJ1dhdGNoTmFtZScsIG5ld1ZhbHVlLCB0aGlzLmRlYnVnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkR3JpZERhdGEoKSB7XHJcbiAgICBjb25zdCBhY3Rpdml0eUxvZ0dyaWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnemdyaWRfQWN0aXZpdHlMb2dHcmlkJyk7XHJcbiAgICBpZiAoYWN0aXZpdHlMb2dHcmlkKSB7XHJcbiAgICAgIGFjdGl2aXR5TG9nR3JpZC5zZXREYXRhKHRoaXMuZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RXYXRjaE5hbWUoY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQsIHNlYXJjaFRleHQ6IHN0cmluZywgcGFnZU5vOiBudW1iZXIsXHJcbiAgICBtZTogYW55LCBkYXRhSXRlbTogYW55LCByZWNvcmRJZD86IHN0cmluZykge1xyXG5cclxuICAgIGNvbnN0IHdhdGNoTGlzdCA9IFtcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuek1vZGVsJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC56RGF0YScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZmllbGRzJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5mb3JtLnZhbHVlJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5wYXJlbnRSZWZlcmVuY2VJZCcgfSxcclxuICAgICAgeyBOYW1lOiAnT2JqZWN0LmtleXMoZ3JvdXAuekNvbXBvbmVudHMpJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5ncmlkT3B0aW9ucy56Z3JpZC5ncmlkLmRhdGEnIH1cclxuICAgICAgLy8geyBOYW1lOiAnT2JqZWN0LmtleXMoX2RlYnVnLnpDb21wb25lbnRzKScgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpNb2RlbCcgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpEYXRhJyB9LFxyXG4gICAgICAvLyB7IE5hbWU6ICdfZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcycgfSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgYWRkaXRpb25hbFdhdGNoTGlzdCA9IHRoaXMuc2NvcGU/Lmdyb3VwPy5hZGRpdGlvbmFsV2F0Y2hMaXN0O1xyXG4gICAgaWYgKGFkZGl0aW9uYWxXYXRjaExpc3QpIHtcclxuICAgICAgYWRkaXRpb25hbFdhdGNoTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIHdhdGNoTGlzdC5wdXNoKHsgTmFtZTogaXRlbSB9KTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0cztcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJlc3VsdHMgPSB3YXRjaExpc3QuZmlsdGVyKChzKSA9PiBzLk5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFnZU5vID09PSAwICYmIHNlYXJjaFRleHQpIHtcclxuICAgICAgcmV0dXJuIG9mKHsgZGF0YVNldDogcmVzdWx0cyB9KTtcclxuICAgIH0gZWxzZSBpZiAocGFnZU5vID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHdhdGNoTGlzdCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IFtdIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXYXRjaE5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWJ1Zy56TW9kZWwuRGVidWdXYXRjaE5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlV2F0Y2hOYW1lKGV2ZW50OiBhbnksIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdvbkNoYW5nZVdhdGNoTmFtZTogJywgZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LmRhdGEudmFsdWU7XHJcbiAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5kZWJ1Zy56TW9kZWxbJ0RlYnVnV2F0Y2hOYW1lJ10gPSBuZXdWYWx1ZS5yZXBsYWNlKCdncm91cCcsICdfZ3JvdXAnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlKGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpIHtcclxuICAgIHRoaXMucmVmcmVzaFRyZWVNb2RlbCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzRXhwYW5kQWxsKCkge1xyXG4gICAgdGhpcy5kZWJ1Zy56Q29tcG9uZW50c1snenRyZWVfZGVidWdaVHJlZSddLmV4cGFuZEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlTm9kZXNDb2xsYXBzZUFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5jb2xsYXBzZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVHJlZU1vZGVsKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UodGhpcy5kZWJ1Zy56TW9kZWwuQ29kZSk7XHJcbiAgICAgIC8vIHRoaXMuX2FkZE5vZGVzVG9UcmVlKGQpO1xyXG4gICAgICAvLyBncm91cFsndHJlZU1vZGVsJ10gPSB0aGlzLmNvbnZlcnRUcmVlTW9kZWwoZCk7XHJcbiAgICAgIHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddID0gWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlSXRlbVRlbXBsYXRlKGVsOiBaVHJlZVRlbXBsYXRlUGFyYW1zKSB7XHJcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGl0ZW0uX0RhdGFWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBpdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFwiLi4uXCI7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZWwuZGF0YUl0ZW0uTmFtZSArXHJcbiAgICAgIFwiIC0gW1wiICtcclxuICAgICAgZWwuZGF0YUl0ZW0uVHlwZSArXHJcbiAgICAgIFwiXSA9IFwiICtcclxuICAgICAgZ2V0RmllbGRWYWx1ZShlbC5kYXRhSXRlbSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkl0ZW1DbGljayhldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIGNvbnNvbGUubG9nKFwib25JdGVtQ2xpY2sgZGF0YSByZWNlaXZlZDogXCIsIGV2ZW50KTtcclxuICAgIGNvbnN0IGRhdGFJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQuZGF0YSk7XHJcbiAgICBkYXRhSXRlbS5WYWx1ZSA9IGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBkZWxldGUgZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGNvbnN0IHptb2RlbCA9IHtcclxuICAgICAgbm9kZU1vZGVsOiBKU09OLnN0cmluZ2lmeShkYXRhSXRlbSwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogJ2lvbm12RWRpdEZpZWxkTm9kZUZvcm0nLFxyXG4gICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICB6TW9kZWw6IHptb2RlbCxcclxuICAgICAgICBmb3JtSGVhZGVyOiAnRmllbGQgRWxlbWVudCBJbmZvJ1xyXG4gICAgICB9XHJcbiAgICApLnN1YnNjcmliZSgobW9kYWxEYXRhOiBNb2RhbFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBKU09OLnBhcnNlKG1vZGFsRGF0YS5kYXRhLm5vZGVNb2RlbCk7XHJcbiAgICAgIGlmIChuZXdEYXRhLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3RGF0YS5fRGF0YVZhbHVlID0gbmV3RGF0YS5WYWx1ZTtcclxuICAgICAgICBuZXdEYXRhLlZhbHVlID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZVRyZWVOb2RlKG5ld0RhdGEsIHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddLCBldmVudC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyZWVOb2RlKG5ld05vZGU6IGFueSwgdHJlZU1vZGVsOiBhbnksIGluZGV4OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRyZWVJbmRleCA9IGluZGV4LnNwbGl0KFwiX1wiKTtcclxuICAgIGlmICh0cmVlSW5kZXgubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRyZWVJbmRleC5zbGljZSgxKS5qb2luKFwiX1wiKTtcclxuICAgICAgdGhpcy51cGRhdGVUcmVlTm9kZShuZXdOb2RlLCB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUsIG5ld0luZGV4KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3Tm9kZS5WYWx1ZSA9IHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0gPSBuZXdOb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMuaW5zZXJ0VHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodHJlZUluZGV4WzBdKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUucHVzaChuZXdOb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmVlTW9kZWwucHVzaChuZXdOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVUcmVlTm9kZSh0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRyZWVOb2RlKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJlZU1vZGVsLnNwbGljZSgrdHJlZUluZGV4WzBdLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UcmVlTm9kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uVHJlZU5vZGVDaGFuZ2U6IFwiLCBlbCk7XHJcbiAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04uc3RyaW5naWZ5KGVsLmRhdGEpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBjb2RlRGF0YSwgdGhpcy5kZWJ1Zyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE5vZGUoKSB7XHJcbiAgICBjb25zdCBlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50ID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgcm93RGF0YToge30sXHJcbiAgICAgIGV2ZW50OiBcIlwiLFxyXG4gICAgICB0YXJnZXQ6IFwiXCIsXHJcbiAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgIGNvbHVtbkZpZWxkcyQ6IG51bGxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uQWRkTm9kZShlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uQWRkTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnb25BZGROb2RlIGlzIGNhbGxlZCcsIGVsKTtcclxuICAgIC8vIGNvbnN0IGRhdGFJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgZWwuZGF0YSk7XHJcbiAgICAvLyBkYXRhSXRlbS5WYWx1ZSA9IGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAvLyBkZWxldGUgZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGNvbnN0IGluaXRpYWxNb2RlbCA9IHtcclxuICAgICAgTmFtZTogJ05hbWUnLCBEaXNwbGF5TmFtZTogJ05hbWUnLCBWYWx1ZTogJ05hbWUnLCBUeXBlOiAndGV4dCcsXHJcbiAgICAgIGdyaWRDb2xWaXNpYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogMTUwLFxyXG4gICAgICBtaW5XaWR0aDogMTAwLFxyXG4gICAgICBlbmFibGVGaWx0ZXJpbmc6IHRydWUsXHJcbiAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgIHBpbm5lZExlZnQ6IGZhbHNlLFxyXG4gICAgICBQbGFjZUhvbGRlcjogXCJOYW1lXCIsXHJcbiAgICAgIElzUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBNaW5MZW5ndGg6IDIsXHJcbiAgICAgIE1heExlbmd0aDogNTAsXHJcbiAgICAgIExhYmVsOiBcIk5hbWU6XCIsXHJcbiAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctM1wiLFxyXG4gICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgIFNob3dMYWJlbDogdHJ1ZSxcclxuICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgLy9FbmFibGVIaWRpbmc6IHRydWUsXHJcbiAgICAgIC8vY2VsbEZpbHRlcjogXCJcIixcclxuICAgICAgLy9maWx0ZXJDZWxsRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICAvL2VuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgIC8vcGlubmVkUmlnaHQ6IGZhbHNlLFxyXG4gICAgICAvL1VwZGF0ZU9uQmx1cjogdHJ1ZSxcclxuICAgICAgLy9BcHBlbmREaXZDbGVhckZpeDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGluaXRpYWxNb2RlbCwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogJ2lvbm12RWRpdEZpZWxkTm9kZUZvcm0nLFxyXG4gICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICB6TW9kZWw6IHptb2RlbCxcclxuICAgICAgICBmb3JtSGVhZGVyOiAnQWRkIEZpZWxkIEVsZW1lbnQgSXRlbSdcclxuICAgICAgfVxyXG4gICAgKS5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVtb3ZlTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdSZW1vdmUgTm9kZScsICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgXSlcclxuICAgICAgLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSBOb2RlJywgZWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ290b0ZpZWxkRWxlbWVudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWRtaW4vZmllbGQnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKCkge1xyXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmRlYnVnLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJUaGUgZGVidWcgZm9ybSBpcyBub3QgZGlydHksIHNvIHRoZSByZWNvcmQgaXMgbm90IHNhdmVkLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmcudmFsaWQpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2YoZGVidWcuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICAvLyBzd2l0Y2hNYXAoem1vZGVsID0+IHtcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIHVwZGF0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHR5cGVvZiBkZWJ1Zy56TW9kZWwgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkZWJ1Zy56TW9kZWwpIDogZGVidWcuek1vZGVsO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICAgICAgICAgIGlkOiBkZWJ1Zy56TW9kZWwuSWQsXHJcbiAgICAgICAgICAgICAgYXNzZXRzUm91dGU6IEFzc2V0c1JvdXRlcy5maWVsZHMsXHJcbiAgICAgICAgICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIuZmllbGRlbGVtZW50LFxyXG4gICAgICAgICAgICAgIHBhcmFtczogcGF5bG9hZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuYXNzZXRzSHR0cE5vZGVQdXQocGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cIikpLFxyXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5zaWduYWxyU2VydmljZS5zZW5kVG9DbGllbnRHcm91cCh0aGlzLmdyb3Vwc1RvU2VuZCwgdGhpcy5ldmVudE5hbWUsIGRlYnVnLnpNb2RlbCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUHV0JChgJHtkZWJ1Zy5yZXNvdXJjZVVSTH0vJHtkZWJ1Zy56TW9kZWwuSWR9YCwgZGVidWcuek1vZGVsKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSksXHJcbiAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5zaWduYWxyU2VydmljZS5zZW5kVG9DbGllbnRHcm91cCh0aGlzLmdyb3Vwc1RvU2VuZCwgdGhpcy5ldmVudE5hbWUsIGRlYnVnLnpNb2RlbCkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgdXBkYXRpbmcgRGVidWcgRm9ybSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHptb2RlbCAmJiB6bW9kZWwuRGF0YSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuYWZ0ZXJVcGRhdGVNb2RlbChncm91cCk7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKiogV29ya2Zsb3cgQnV0dG9uICoqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gbm90IGluIHVzZSwgcGxhbiB0byBlbmhhbmNlIGZvciB0aGUgdXNhZ2UgZm9yIGZ1dHVyZS5cclxuICBwdWJsaWMgbG9hZFdvcmtmbG93RGF0YSgpIHtcclxuICAgIGNvbnN0IHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQnKTtcclxuICAgIGlmICh6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQpIHtcclxuICAgICAgemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkLnNldERhdGEodGhpcy5kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkV29ya2Zsb3dCdXR0b25Pbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgIGNvbnN0IGZpZWxkID0gZGF0YUl0ZW0ucmVmRmllbGQ7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBkYXRhSXRlbS5yZWZBdHRyaWJ1dGU7XHJcblxyXG4gICAgLy8gR2V0IE1hcHBlZCBJbmZvXHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXCJCdXR0b25JZFwiLCBmaWVsZC5JZCk7XHJcbiAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXRtYXBwZWRCdXR0b25JbmZvVVJMXCIpLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcChhc3luYyByZXMgPT4ge1xyXG4gICAgICAgIGxldCByb2xlSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBzdGF0dXNJbmZvID0gW107XHJcbiAgICAgICAgbGV0IHBhcmVudFN0YXR1c0luZm8gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRSb2xlTGlzdCkge1xyXG4gICAgICAgICAgcm9sZUluZm8gPSByZXMuTWFwcGVkUm9sZUxpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRTdGF0dXNMaXN0LmZvckVhY2goKF9zdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdGF0dXNJbmZvLnB1c2goX3N0YXR1cy5OYW1lICsgJyAoJyArIF9zdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUGFyZW50U3RhdHVzTGlzdCkge1xyXG4gICAgICAgICAgcmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QuZm9yRWFjaCgoX3BhcmVudFN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFN0YXR1c0luZm8ucHVzaChfcGFyZW50U3RhdHVzLk5hbWUgKyAnICgnICsgX3BhcmVudFN0YXR1cy5Db2RlICsgJyknKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgX21hcHBlZEluZm8gPSB7XHJcbiAgICAgICAgICAnbWFwcGVkUm9sZUluZm8nOiByb2xlSW5mby5sZW5ndGggPiAwID8gcm9sZUluZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkU3RhdHVzSW5mbyc6IHN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHN0YXR1c0luZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkUGFyZW50U3RhdHVzSW5mbyc6IHBhcmVudFN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHBhcmVudFN0YXR1c0luZm8gOiAnTi5BLidcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyByZXRyZWl2ZSBhbGwgaW1wb3J0YW50IGluZm9cclxuICAgICAgICBjb25zdCBfYnV0dG9uSW5mbyA9IHtcclxuICAgICAgICAgICdXb3JrZmxvd0lkJzogZmllbGQuV29ya2Zsb3dJZCxcclxuICAgICAgICAgICdCdXR0b25JZCc6IGZpZWxkLklkLFxyXG4gICAgICAgICAgJ0J1dHRvbk5hbWUnOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvbkNvZGUnOiBmaWVsZC5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVJZCc6IGZpZWxkLlR5cGUuSWQsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZU5hbWUnOiBmaWVsZC5UeXBlLk5hbWUsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZUNvZGUnOiBmaWVsZC5UeXBlLkNvZGUsXHJcbiAgICAgICAgICAnQnV0dG9uVmlzaWJsZSc6IGF0dHJpYnV0ZS5WaXNpYmxlLFxyXG4gICAgICAgICAgJ0J1dHRvbkNsaWNrRXZlbnQnOiBhdHRyaWJ1dGUuQ2xpY2tFdmVudCxcclxuICAgICAgICAgICdCdXR0b25VUkwnOiBhdHRyaWJ1dGUuVVJMLFxyXG4gICAgICAgICAgJ0J1dHRvbkljb24nOiBhdHRyaWJ1dGUuSWNvblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAnR290b1N0YXR1c0lkJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLlN0YXR1cykge1xyXG4gICAgICAgICAgY29uc3QgX2dvdG9TdGF0dXMgPSBmaWVsZC5TdGF0dXNcclxuICAgICAgICAgIF9nb3RvU3RhdHVzSW5mbyA9IHtcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6IF9nb3RvU3RhdHVzLklkLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c05hbWUnOiBfZ290b1N0YXR1cy5OYW1lLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c0NvZGUnOiBfZ290b1N0YXR1cy5Db2RlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTW9kZWwgPSBPYmplY3QuYXNzaWduKF9idXR0b25JbmZvLCBfZ290b1N0YXR1c0luZm8sIF9tYXBwZWRJbmZvKTtcclxuICAgICAgICB0aGlzLnNob3d6TW9kYWwoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6ICdtdldvcmtmbG93QnV0dG9uRGVidWdGb3JtJyxcclxuICAgICAgICAgICAgcGFyZW50R3JvdXA6IHRoaXMuZGVidWcuX2dyb3VwLFxyXG4gICAgICAgICAgICB6TW9kZWw6IHByb3BlcnRpZXNNb2RlbCxcclxuICAgICAgICAgICAgZm9ybUhlYWRlcjogJ1dvcmtmbG93IEJ1dHRvbiBJbmZvJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTdWNjZXNzKHJlczogUmVzcG9uc2UgfCBhbnksIHN1Y2Nlc3NNc2c6IHN0cmluZyk6IFJlc3BvbnNlIHtcclxuICAgIGlmIChyZXMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHN1Y2Nlc3NNc2cpO1xyXG4gICAgfSBlbHNlIGlmIChyZXMuRGF0YSAhPT0gdW5kZWZpbmVkICYmIHJlcy5Qcm9jZXNzaW5nU3RhdHVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHJlcy5Qcm9jZXNzaW5nU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzLkRhdGEpKSB7XHJcbiAgICAgICAgICByZXMuRGF0YS5tYXAocyA9PiB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoTUVTU0FHRVRZUEUuU3VjY2VzcyxcclxuICAgICAgICAgICAgYCR7c3VjY2Vzc01zZ30gOiAke3MuQ29zdENvZGV9YCwgbnVsbCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoTUVTU0FHRVRZUEUuU3VjY2Vzcywgc3VjY2Vzc01zZywgbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHN1Y2Nlc3NNc2cpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKHJlczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaGFuZGxlRXJyb3IocmVzKTtcclxuICB9XHJcblxyXG4gIC8vIENsb25lIHRoZSBtZXRob2QgZnJvbSBtYWluc2VydmljZTogVG8gcHJldmVudCBjaXJjdWxhciBkZXBlbmRlbmN5IHdoZW4gaW5qZWN0IG1haW4gc2VydmljZVxyXG4gIHB1YmxpYyBzaG93ek1vZGFsKG1vZGFsUGFnZVBhcmFtczogTW9kYWxQYWdlUGFyYW1zKTogT2JzZXJ2YWJsZTxNb2RhbFJlc3BvbnNlPiB7XHJcbiAgICBpZiAobW9kYWxQYWdlUGFyYW1zLnBhcmVudEdyb3VwKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgaXNUcmlnZ2VyZWQgYmVmb3JlIGRpc3BsYXkgdGhlIHBvcHVwLlxyXG4gICAgICBtb2RhbFBhZ2VQYXJhbXMucGFyZW50R3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsUGFnZVBhcmFtcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
742
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBQ3NCLHNCQUFzQixFQUFFLFlBQVksRUFBbUIsWUFBWSxFQUEyRCxRQUFRLEVBQUUsV0FBVyxFQUU3RyxnQkFBZ0IsRUFDM0QsTUFBTSxFQUM3QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxzQ0FBc0MsRUFBNkIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFLMUksTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsNEJBQTBELEVBQzFELFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFlBQTBCO1FBVjFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix1QkFBa0IsR0FBbEIs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QUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUM5RSxHQUFHLFVBQVUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkY7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELDZGQUE2RjtJQUN0RixVQUFVLENBQUMsZUFBZ0M7UUFDaEQsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFO1lBQy9CLGdEQUFnRDtZQUNoRCxlQUFlLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDakQ7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O21IQS8wQlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50IH0gZnJvbSAnaW9uaWMtc2VsZWN0YWJsZSc7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBBbGVydEJ1dHRvbiwgQWxlcnRTZXJ2aWNlLCBBc3NldHNBbGxvd2VkRXh0ZW5zaW9uLCBBc3NldHNGb2xkZXIsIEFzc2V0c05vZGVQYXJhbSwgQXNzZXRzUm91dGVzLCBBdXRoU2VydmljZSwgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgRmllbGRTZXJ2aWNlLCBGb3JtVHlwZSwgTUVTU0FHRVRZUEUsXHJcbiAgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIFJlc291cmNlQXBpU2VydmljZSwgU2lnbmFsclNlcnZpY2UsIFRvYXN0U2VydmljZSwgV2ViQXBpU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpDb3JlU2VydmljZSwgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXNcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsUmVzcG9uc2UsIE1vZGFsU2VydmljZSB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlckRpcmVjdEFjY2Vzc1F1ZXJ5UGFyYW1LZXksIEZvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbVZhbHVlLCBGb3JtQnVpbGRlclF1ZXJ5UGFyYW1EYXRhIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgWkNvbXBvbmVudERlYnVnU2VydmljZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGdyb3Vwc1RvU2VuZCA9IFsnb2F1dGgnXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXZlbnROYW1lID0gJ0ZpZWxkRWxlbWVudCc7XHJcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNpZ25hbHJTZXJ2aWNlOiBTaWduYWxyU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY29wZTogYW55O1xyXG5cclxuICBnZXQgZGVidWcoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlLmdyb3VwLl9kZWJ1ZztcclxuICB9XHJcblxyXG4gIGdldCBncm91cCgpOiBaR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NvcGUuZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Jbml0RGVidWdnZXIoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgZ3JvdXAuX2RlYnVnID0gbmV3IFpHcm91cCh0cnVlKTtcclxuICAgIGdyb3VwLl9pc0RlYnVnZ2luZyA9IHRydWU7XHJcbiAgICBncm91cC5fZGVidWcuekRhdGEgPSB7XHJcbiAgICAgIGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLFxyXG4gICAgICBhY3Rpdml0eUNvdW50OiAwLFxyXG4gICAgICBjb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnM6IFtdLFxyXG4gICAgICB3b3JrZmxvd0J1dHRvbkNvdW50OiAwXHJcbiAgICB9O1xyXG4gICAgZ3JvdXAuX2RlYnVnLnpDb21wb25lbnRzID0ge307XHJcbiAgICBncm91cC5pc0xpc3RGb3JtID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIG9uU3RhcnREZWJ1Z2dlcihmaWVsZEVsZW1lbnRzOiBBcnJheTxaRmllbGQ+LCBtZTogYW55KSB7XHJcbiAgICB0aGlzLnNjb3BlID0gbWU7XHJcbiAgICBpZiAoIW1lLmdyb3VwLl9kZWJ1Zykge1xyXG4gICAgICBtZS5ncm91cC5fZGVidWcgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkOiBaR3JvdXAgPSBtZS5ncm91cC5fZGVidWc7XHJcbiAgICBtZS5mb3JtID0gbWUudG9Gb3JtR3JvdXAoZmllbGRFbGVtZW50cyk7XHJcbiAgICBkLmZvcm0gPSBtZS5mb3JtO1xyXG4gICAgaWYgKG1lLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICBtZS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGQsIHtcclxuICAgICAgLy8gekRhdGE6IHsgY29sbGVjdGVkQWN0aXZpdGllczogW10sIGFjdGl2aXR5Q291bnQ6IDAgfSxcclxuICAgICAgek1vZGVsOiB7fSxcclxuICAgICAgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxaQ29tcG9uZW50T3V0cHV0RXZlbnQ+KG51bGwpLFxyXG4gICAgICBpc0VkaXQ6IHRydWUsXHJcbiAgICAgIGlzTmV3OiBmYWxzZSxcclxuICAgICAgX2RlYnVnOiBtZS5ncm91cC5fZGVidWcsXHJcbiAgICAgIF9ncm91cDogbWUuZ3JvdXAsXHJcbiAgICAgIHJlc291cmNlVVJMOiB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkJyksXHJcbiAgICAgIHRyZWVJdGVtVGVtcGxhdGU6IHRoaXMudHJlZUl0ZW1UZW1wbGF0ZSxcclxuICAgICAgb25JdGVtQ2xpY2s6IHRoaXMub25JdGVtQ2xpY2ssXHJcbiAgICAgIG9uVHJlZU5vZGVDaGFuZ2U6IHRoaXMub25UcmVlTm9kZUNoYW5nZSxcclxuICAgICAgb25BZGROb2RlOiB0aGlzLm9uQWRkTm9kZSxcclxuICAgICAgb25SZW1vdmVOb2RlOiB0aGlzLm9uUmVtb3ZlTm9kZSxcclxuICAgICAgdHJlZU5vZGVzRXhwYW5kQWxsOiB0aGlzLnRyZWVOb2Rlc0V4cGFuZEFsbCxcclxuICAgICAgdHJlZU5vZGVzQ29sbGFwc2VBbGw6IHRoaXMudHJlZU5vZGVzQ29sbGFwc2VBbGwsXHJcbiAgICAgIHJlZnJlc2hUcmVlTW9kZWw6IHRoaXMucmVmcmVzaFRyZWVNb2RlbCxcclxuICAgICAgZWRpdEluRm9ybUJ1aWxkZXI6IHRoaXMuZWRpdEluRm9ybUJ1aWxkZXIuYmluZCh0aGlzKSxcclxuICAgICAgYWRkTm9kZTogdGhpcy5hZGROb2RlLFxyXG4gICAgICByZWZyZXNoQWN0aXZpdHlMb2dEYXRhOiB0aGlzLmxvYWRHcmlkRGF0YS5iaW5kKHRoaXMpLFxyXG4gICAgICBHb1RvRmllbGRFbGVtZW50OiB0aGlzLmdvdG9GaWVsZEVsZW1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgTGlzdFdhdGNoTmFtZTogdGhpcy5saXN0V2F0Y2hOYW1lLmJpbmQodGhpcyksXHJcbiAgICAgIG9uQ2hhbmdlV2F0Y2hOYW1lOiB0aGlzLm9uQ2hhbmdlV2F0Y2hOYW1lLmJpbmQodGhpcyksXHJcbiAgICAgIGdldFdhdGNoTmFtZTogdGhpcy5nZXRXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlOiB0aGlzLmZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICBncmlkQWN0aXZpdHlMb2dDb2x1bW5GaWVsZHM6IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgICAgJ2RlYnVnQWN0aXZpdHlMb2cnLFxyXG4gICAgICAgIEZvcm1UeXBlLmZvcm1GaWVsZCxcclxuICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgIFwiZGVidWdBY3Rpdml0eUxvZ0ZpZWxkXCJcclxuICAgICAgKSxcclxuICAgICAgZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6IHRoaXMuZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgdXBkYXRlTW9kZWw6IHRoaXMudXBkYXRlTW9kZWwuYmluZCh0aGlzKSxcclxuICAgICAgaXNBbGxvd1VwZGF0ZUZpZWxkRWxlbWVudDogdHJ1ZSxcclxuICAgICAgaXNGaWVsZEVsZW1lbnRSZWFkT25seTogZmFsc2UsXHJcbiAgICAgIGlzTG9hZFZpYUFzc2V0OiBmYWxzZSxcclxuICAgICAgaXNMb2FkVmlhT2F1dGhEQjogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBpZiAoIWQuekRhdGEpIHtcclxuICAgICAgZC56RGF0YSA9IHsgY29sbGVjdGVkQWN0aXZpdGllczogW10sIGFjdGl2aXR5Q291bnQ6IDAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLmVudmlyb25tZW50LmxvYWRWaWFBc3NldCkge1xyXG4gICAgICBpZiAoIXRoaXMuemNvcmVTZXJ2aWNlLmlzQXBwUnVubmluZ0luTG9jYWxob3N0KCkpIHtcclxuICAgICAgICBkWydpc0FsbG93VXBkYXRlRmllbGRFbGVtZW50J10gPSBmYWxzZTtcclxuICAgICAgICBkWydpc0ZpZWxkRWxlbWVudFJlYWRPbmx5J10gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGRbJ2lzTG9hZFZpYUFzc2V0J10gPSB0cnVlO1xyXG4gICAgICBkWydpc0xvYWRWaWFPYXV0aERCJ10gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBtZS5zdWJzY3JpcHRpb24gPSBkLnN1YmplY3Quc3Vic2NyaWJlKChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSA9PlxyXG4gICAgICB0aGlzLnN1YmplY3RFdmVudChldmVudCwgZCwgdGhpcylcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wYXRjaEZpZWxkc1Byb3BlcnR5KGZpZWxkRWxlbWVudHMpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmxvYWREZWJ1Z1pNb2RlbChtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50czogQXJyYXk8WkZpZWxkPikge1xyXG4gICAgZmllbGRFbGVtZW50cy5mb3JFYWNoKGZpZWxkRWxlbWVudCA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLnBhdGNoRmllbGRQcm9wZXJ0eShmaWVsZEVsZW1lbnQpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZEVsZW1lbnQuVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5wYXRjaEZpZWxkc1Byb3BlcnR5KGZpZWxkRWxlbWVudC5WYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGVidWdaTW9kZWwobWU6IGFueSkge1xyXG4gICAgY29uc3QgcHJvamVjdElkJCA9IHRoaXMuZ2V0UHJvamVjdElkKCk7XHJcbiAgICBjb25zdCBmb3JtVHlwZSA9IG1lLmdyb3VwLmlzTGlzdEZvcm0gPyBGb3JtVHlwZS5saXN0RmllbGQgOiBGb3JtVHlwZS5mb3JtRmllbGQ7XHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRGb3JtTmFtZSA9IG1lLmdyb3VwLmZpZWxkTmFtZTtcclxuICAgIGNvbnN0IGZpZWxkek1vZGVsJCA9IHRoaXMuZ2V0RmllbGR6TW9kZWwoZm9ybVR5cGUsIGZpZWxkRWxlbWVudEZvcm1OYW1lKTtcclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oW3Byb2plY3RJZCQsIGZpZWxkek1vZGVsJF0pOyAgLy8gRW1pdHMgd2hlbiBhbGwgb2JzZXJ2YWJsZXMgY29tcGxldGVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UHJvamVjdElkKCkge1xyXG4gICAgY29uc3QgZGVidWdnZXJHcm91cDogWkdyb3VwID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgncHJvamVjdHNVUkwnKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmdldEFwaSh1cmwsIHt9LCBkZWJ1Z2dlckdyb3VwLnpEYXRhLCAnUHJvamVjdE9wdGlvbnMnLCBudWxsLCBkZWJ1Z2dlckdyb3VwLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpZWxkek1vZGVsKHR5cGU6IHN0cmluZywgZmllbGRFbGVtZW50Rm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgaXNGb3JtRmllbGQgPSB0eXBlID09PSAnRm9ybUZpZWxkJztcclxuXHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQpIHtcclxuICAgICAgcmV0dXJuIGlzRm9ybUZpZWxkID8gdGhpcy5nZXRBc3NldEZvcm1GaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZSkgOiB0aGlzLmdldEFzc2V0TGlzdEZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNGb3JtRmllbGQgPyB0aGlzLmdldEZvcm1GaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZSkgOiB0aGlzLmdldExpc3RGaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVkaXRJbkZvcm1CdWlsZGVyKGJ1dHRvbkV2ZW50OiBhbnksIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IHpNb2RlbCA9IGdyb3VwICYmIGdyb3VwLnpNb2RlbCA/IGdyb3VwLnpNb2RlbCA6IHRoaXMuZGVidWcuek1vZGVsO1xyXG4gICAgaWYgKHpNb2RlbCkge1xyXG4gICAgICBjb25zdCBpc0FsbG93VG9BY2Nlc3NGb3JtQnVpbGRlck9icyA9IHRoaXMuZW52aXJvbm1lbnQubG9hZFZpYUFzc2V0ID8gdGhpcy53ZWJBcGlTZXJ2aWNlLmlzQXNzZXRIdHRwTm9kZUFjdGl2ZSgpIDogb2YodHJ1ZSk7XHJcbiAgICAgIGlzQWxsb3dUb0FjY2Vzc0Zvcm1CdWlsZGVyT2JzLnBpcGUoXHJcbiAgICAgICAgdGFwKGlzQWN0aXZlID0+IHtcclxuICAgICAgICAgIGlmICghaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhgUGxlYXNlIHN0YXJ0IHlvdXIgbm9kZSBzZXJ2ZXIgYW5kIHRyeSBhZ2Fpbi5gLCAndG9wJywgZmFsc2UsIDIwMDAsICdkYW5nZXInLCBgTG9jYWwgTm9kZSBTZXJ2ZXIgKFBvcnQ6ICR7dGhpcy5lbnZpcm9ubWVudC5ub2RlU2VydmVyUG9ydH0pIGlzIHVucmVhY2hhYmxlYCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgICBub2RlU2VydmVyUG9ydDogdGhpcy5lbnZpcm9ubWVudC5ub2RlU2VydmVyUG9ydCxcclxuICAgICAgICAgICAgaXNMb2FkVmlhQXNzZXQ6IHRoaXMuZW52aXJvbm1lbnQubG9hZFZpYUFzc2V0LFxyXG4gICAgICAgICAgICBmaWVsZEVsZW1lbnROYW1lOiB6TW9kZWwuTmFtZSxcclxuICAgICAgICAgICAgZm9ybVR5cGU6IHpNb2RlbC5UeXBlID8/IEZvcm1UeXBlLmZvcm1GaWVsZFxyXG4gICAgICAgICAgfSBhcyBGb3JtQnVpbGRlclF1ZXJ5UGFyYW1EYXRhO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcblxyXG4gICAgICAgICAgbGV0IG9hdXRoQWRtaW5Qb3J0YWxVUkwgPSAnaHR0cHM6Ly9lMXNpdC5tdXNpbW1hcy5jb20vT0F1dGhBZG1pbldlYic7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5jdXN0b21SZXNvdXJjZSAmJiB0aGlzLmVudmlyb25tZW50LmN1c3RvbVJlc291cmNlLmxlbmd0aCA+IDAgJiYgdGhpcy5lbnZpcm9ubWVudC5jdXN0b21SZXNvdXJjZVswXVsnb2F1dGhBZG1pblBvcnRhbFVybCddKSB7XHJcbiAgICAgICAgICAgIG9hdXRoQWRtaW5Qb3J0YWxVUkwgPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbVJlc291cmNlWzBdWydvYXV0aEFkbWluUG9ydGFsVXJsJ107XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coYFJvdXRlIHRvOiAgJHtvYXV0aEFkbWluUG9ydGFsVVJMfS9vYXV0aGFkbWluL2RpcmVjdC1hY2Nlc3M/JHtGb3JtQnVpbGRlckRpcmVjdEFjY2Vzc1F1ZXJ5UGFyYW1LZXkuTW9kdWxlfT0ke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbVZhbHVlLkZvcm1CdWlsZGVyfSYke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbUtleS5EYXRhfT0ke2RhdGFTdHJ9YCk7XHJcbiAgICAgICAgICB3aW5kb3cub3BlbihgJHtvYXV0aEFkbWluUG9ydGFsVVJMfS9vYXV0aGFkbWluL2RpcmVjdC1hY2Nlc3M/JHtGb3JtQnVpbGRlckRpcmVjdEFjY2Vzc1F1ZXJ5UGFyYW1LZXkuTW9kdWxlfT0ke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbVZhbHVlLkZvcm1CdWlsZGVyfSYke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbUtleS5EYXRhfT0ke2RhdGFTdHJ9YCwgXCJfYmxhbmtcIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRlYnVnZ2VyR3JvdXA6IFpHcm91cCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCBmaWVsZFVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGQnKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKGZpZWxkVXJsLCB7IG5hbWU6IGZpZWxkRWxlbWVudEZvcm1OYW1lLCB0eXBlOiBGb3JtVHlwZS5mb3JtRmllbGQgfSkucGlwZShcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc3BEYXRhOiAnLCByZXNwRGF0YSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLnpNb2RlbCwgcmVzcERhdGEpO1xyXG4gICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5wYXRjaFZhbHVlKGRlYnVnZ2VyR3JvdXAuek1vZGVsKTtcclxuICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb25zdCBmaWVsZHMgPSBKU09OLnBhcnNlKGRlYnVnZ2VyR3JvdXAuek1vZGVsLkNvZGUpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cCwge1xyXG4gICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoZmllbGRzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGlzdEZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRlYnVnZ2VyR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmllbGRzTWFwcGluZ1VybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGRzTWFwcGluZycpO1xyXG4gICAgY29uc3QgZmllbGRVcmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JChmaWVsZHNNYXBwaW5nVXJsLCB7IG5hbWU6IGZpZWxkRWxlbWVudEZvcm1OYW1lIH0pLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoZmllbGRNYXBwaW5nOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBGZXRjaCBmaWVsZCBkYXRhIGJhc2VkIG9uIEZpZWxkRWxlbWVudE1hc3RlcklkXHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JChmaWVsZFVybCwgeyBpZDogZmllbGRNYXBwaW5nLkZpZWxkRWxlbWVudE1hc3RlcklkIH0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gVXBkYXRlIGRlYnVnZ2VyR3JvdXAgd2l0aCBmaWVsZCBkYXRhXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLnpNb2RlbCwgcmVzcERhdGEpO1xyXG5cclxuICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ucGF0Y2hWYWx1ZShkZWJ1Z2dlckdyb3VwLnpNb2RlbCk7XHJcbiAgICAgICAgZGVidWdnZXJHcm91cC5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIGFuZCBjb252ZXJ0IENvZGUgdG8gdHJlZU1vZGVsXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IEpTT04ucGFyc2UoZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSk7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAsIHtcclxuICAgICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoZmllbGRzKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgSlNPTjonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBc3NldEZvcm1GaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkZWJ1Z2dlckdyb3VwOiBaR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgcGFyYW06IEFzc2V0c05vZGVQYXJhbSA9IHtcclxuICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIuZmllbGRlbGVtZW50LFxyXG4gICAgICBuYW1lOiBmaWVsZEVsZW1lbnRGb3JtTmFtZSxcclxuICAgICAgZXh0ZW5zaW9uOiBBc3NldHNBbGxvd2VkRXh0ZW5zaW9uLmpzb25cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5hc3NldHNIdHRwTG9jYWxHZXQocGFyYW0pLnBpcGUoXHJcbiAgICAgIHRhcCgocmVzcERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAuek1vZGVsLCByZXNwRGF0YSk7XHJcbiAgICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ucGF0Y2hWYWx1ZShkZWJ1Z2dlckdyb3VwLnpNb2RlbCk7XHJcbiAgICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuXHJcbiAgICAgICAgICBpZiAoIVpDb21wb25lbnRIZWxwZXIuaXNKc29uKGRlYnVnZ2VyR3JvdXAuek1vZGVsLkNvZGUpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cCwge1xyXG4gICAgICAgICAgICAgIHRyZWVNb2RlbDogWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKEpTT04ucGFyc2UoZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSkpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cCwge1xyXG4gICAgICAgICAgICAgIHRyZWVNb2RlbDogWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGRlYnVnZ2VyR3JvdXAuek1vZGVsLkNvZGUpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgSlNPTjonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXNzZXRMaXN0RmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgbGlzdFBhcmFtOiBBc3NldHNOb2RlUGFyYW0gPSB7XHJcbiAgICAgIGFzc2V0c0ZvbGRlcjogQXNzZXRzRm9sZGVyLmxpc3RmaWVsZG1hcHBpbmcsXHJcbiAgICAgIG5hbWU6IGZpZWxkRWxlbWVudEZvcm1OYW1lLFxyXG4gICAgICBleHRlbnNpb246IEFzc2V0c0FsbG93ZWRFeHRlbnNpb24uanNvblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuYXNzZXRzSHR0cExvY2FsR2V0KGxpc3RQYXJhbSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChmaWVsZE1hcHBpbmc6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFzc2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkTWFwcGluZy5GaWVsZEVsZW1lbnRNYXN0ZXJOYW1lKVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJqZWN0RXZlbnQoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldC5zdGFydHNXaXRoKFwibW9kYWxHcm91cC5cIikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coXCIqKiBEZWJ1ZyAtIFN1YmplY3RFdmVudFwiLCBldmVudCk7XHJcbiAgICBsZXQgY2FsbEZ1bmM7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY2FsbEZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgbWUsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0XHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShldmVudC5UYXJnZXQsIGdyb3VwKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgRXJyb3IgaW4gZ2V0R3JvdXBWYWx1ZS4gRXZlbnQgdGFyZ2V0OiAke2V2ZW50LnRhcmdldH0uIEVycm9yOiAke2Vycm9yfWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZChtZSk7XHJcbiAgICAgIG5ld0Z1bmMoZXZlbnQsIGdyb3VwLCBtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGV2ZW50LnR5cGUuZW5kc1dpdGgoXCJvbk5hdmlnYXRlVG9cIikpIHtcclxuICAgICAgICBjb25zdCBuVXJsID0gZXZlbnQudGFyZ2V0LnJlcGxhY2UoXCIvOmlkXCIsIFwiL1wiICsgZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25VcmxdKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgY29uc3QgY05hbWUgPSBjYWxsRnVuYy5zbGljZSg0KTtcclxuICAgICAgICB0aGlzLnNob3d6TW9kYWwoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6IGNOYW1lLFxyXG4gICAgICAgICAgICBmaWVsZEVsZW1lbnRPYnNlcnZhYmxlJDogZXZlbnQuY29sdW1uRmllbGRzJCxcclxuICAgICAgICAgICAgcGFyZW50R3JvdXA6IGdyb3VwLFxyXG4gICAgICAgICAgICB6TW9kZWw6IHt9LFxyXG4gICAgICAgICAgICBmb3JtSGVhZGVyOiAnJyxcclxuICAgICAgICAgICAgcmVmZXJJZDogZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIGlmIChjYWxsRnVuYy5uYXZpZ2F0ZVVybCkge1xyXG4gICAgICAgICAgY29uc3QgdXJsID0gY2FsbEZ1bmMubmF2aWdhdGVVcmwucmVwbGFjZShcIjppZFwiLCBldmVudC5kYXRhLklkKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjYWxsRnVuYy5mb3JtSGVhZGVyKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3d6TW9kYWwoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZEVsZW1lbnROYW1lOiBjYWxsRnVuYy5jdHJsTmFtZSxcclxuICAgICAgICAgICAgICBmaWVsZEVsZW1lbnRPYnNlcnZhYmxlJDogZXZlbnQuY29sdW1uRmllbGRzJCxcclxuICAgICAgICAgICAgICBwYXJlbnRHcm91cDogZ3JvdXAsXHJcbiAgICAgICAgICAgICAgek1vZGVsOiB7fSxcclxuICAgICAgICAgICAgICBmb3JtSGVhZGVyOiBjYWxsRnVuYy5mb3JtSGVhZGVyLFxyXG4gICAgICAgICAgICAgIHJlZmVySWQ6IGV2ZW50LmRhdGEuSWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY2FsbEZ1bmMgdHlwZTogJHtjYWxsRnVuY30uIEV2ZW50IHRhcmdldDogJHtldmVudC50YXJnZXR9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwLiBUYXJnZXQ6ICR7ZXZlbnQudGFyZ2V0fS4gRXZlbnQgZGV0YWlsczogYCwgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6ICcsIGV2ZW50KTtcclxuICAgIGNvbnN0IHJlYyA9IGV2ZW50LmRhdGFJdGVtO1xyXG4gICAgc3dpdGNoIChyZWMudHlwZSkge1xyXG4gICAgICBjYXNlICdMaXN0RmllbGQnOlxyXG4gICAgICBjYXNlICdGb3JtRmllbGQnOlxyXG4gICAgICAgIHRoaXMuZ2V0RmllbGR6TW9kZWwocmVjLnR5cGUsIHJlYy5hY3Rpdml0eU5hbWUpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdFRhYigwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUmVzb3VyY2VTZXJ2ZXJBUEknOlxyXG4gICAgICAgIGNvbnN0IHdhdGNoTmFtZVZhbHVlID0gJ19kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRBY3Rpdml0aWVzWycgKyAocmVjLmluZGV4IC0gMSkgKyAnXS5yZWZlcmVuY2UnO1xyXG4gICAgICAgIHRoaXMuc2V0V2F0Y2hOYW1lVmFsdWUod2F0Y2hOYW1lVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0VGFiKDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIdHRwR2V0JCc6XHJcbiAgICAgIGNhc2UgJ0h0dHBQb3N0JCc6XHJcbiAgICAgIGNhc2UgJ0h0dHBQdXQkJzpcclxuICAgICAgY2FzZSAnSHR0cERlbGV0ZSQnOlxyXG4gICAgICAgIHRoaXMuc2V0V2F0Y2hOYW1lVmFsdWUoJ19kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRBY3Rpdml0aWVzWycgKyAocmVjLmluZGV4IC0gMSkgKyAnXScpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0VGFiKDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RUYWIoaW5kZXg6IG51bWJlcikge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICAvLyB0aGlzLmRlYnVnLnpDb21wb25lbnRzW1wienRhYl9kZWJ1Z2dlclRhYnNcIl0uc3RhdGUubGFzdFNlbGVjdGVkVGFiSW5kZXggPSBpbmRleDtcclxuICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6dGFiX2RlYnVnZ2VyVGFicycpLnN0YXRlLmxhc3RTZWxlY3RlZFRhYkluZGV4ID0gaW5kZXg7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnenRhYl9kZWJ1Z2dlclRhYnMnKS5zZWxlY3RUYWIoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRXYXRjaE5hbWVWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRlYnVnLnpNb2RlbFsnRGVidWdXYXRjaE5hbWUnXSA9IG5ld1ZhbHVlO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKCdXYXRjaE5hbWUnLCBuZXdWYWx1ZSwgdGhpcy5kZWJ1ZywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEdyaWREYXRhKCkge1xyXG4gICAgY29uc3QgYWN0aXZpdHlMb2dHcmlkID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3pncmlkX0FjdGl2aXR5TG9nR3JpZCcpO1xyXG4gICAgaWYgKGFjdGl2aXR5TG9nR3JpZCkge1xyXG4gICAgICBhY3Rpdml0eUxvZ0dyaWQuc2V0RGF0YSh0aGlzLmRlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0V2F0Y2hOYW1lKGNvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50LCBzZWFyY2hUZXh0OiBzdHJpbmcsIHBhZ2VObzogbnVtYmVyLFxyXG4gICAgbWU6IGFueSwgZGF0YUl0ZW06IGFueSwgcmVjb3JkSWQ/OiBzdHJpbmcpIHtcclxuXHJcbiAgICBjb25zdCB3YXRjaExpc3QgPSBbXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnpNb2RlbCcgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuekRhdGEnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLmZpZWxkcycgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZm9ybS52YWx1ZScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5wYXJlbnRSZWZlcmVuY2VGaWVsZCcgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAucGFyZW50UmVmZXJlbmNlSWQnIH0sXHJcbiAgICAgIHsgTmFtZTogJ09iamVjdC5rZXlzKGdyb3VwLnpDb21wb25lbnRzKScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZ3JpZE9wdGlvbnMuemdyaWQuZ3JpZC5kYXRhJyB9XHJcbiAgICAgIC8vIHsgTmFtZTogJ09iamVjdC5rZXlzKF9kZWJ1Zy56Q29tcG9uZW50cyknIH0sXHJcbiAgICAgIC8vIHsgTmFtZTogJ19kZWJ1Zy56TW9kZWwnIH0sXHJcbiAgICAgIC8vIHsgTmFtZTogJ19kZWJ1Zy56RGF0YScgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGFkZGl0aW9uYWxXYXRjaExpc3QgPSB0aGlzLnNjb3BlPy5ncm91cD8uYWRkaXRpb25hbFdhdGNoTGlzdDtcclxuICAgIGlmIChhZGRpdGlvbmFsV2F0Y2hMaXN0KSB7XHJcbiAgICAgIGFkZGl0aW9uYWxXYXRjaExpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB3YXRjaExpc3QucHVzaCh7IE5hbWU6IGl0ZW0gfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdHM7XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICByZXN1bHRzID0gd2F0Y2hMaXN0LmZpbHRlcigocykgPT4gcy5OYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhZ2VObyA9PT0gMCAmJiBzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHJlc3VsdHMgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhZ2VObyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiB3YXRjaExpc3QgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiBbXSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0V2F0Y2hOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVidWcuek1vZGVsLkRlYnVnV2F0Y2hOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZVdhdGNoTmFtZShldmVudDogYW55LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnb25DaGFuZ2VXYXRjaE5hbWU6ICcsIGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC5kYXRhLnZhbHVlO1xyXG4gICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWUucmVwbGFjZSgnZ3JvdXAnLCAnX2dyb3VwJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLnJlZnJlc2hUcmVlTW9kZWwoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHRyZWVOb2Rlc0V4cGFuZEFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5leHBhbmRBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzQ29sbGFwc2VBbGwoKSB7XHJcbiAgICB0aGlzLmRlYnVnLnpDb21wb25lbnRzWyd6dHJlZV9kZWJ1Z1pUcmVlJ10uY29sbGFwc2VBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFRyZWVNb2RlbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKHRoaXMuZGVidWcuek1vZGVsLkNvZGUpO1xyXG4gICAgICAvLyB0aGlzLl9hZGROb2Rlc1RvVHJlZShkKTtcclxuICAgICAgLy8gZ3JvdXBbJ3RyZWVNb2RlbCddID0gdGhpcy5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgICB0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSA9IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChkKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZUl0ZW1UZW1wbGF0ZShlbDogWlRyZWVUZW1wbGF0ZVBhcmFtcykge1xyXG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBpdGVtLl9EYXRhVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBcIi4uLlwiO1xyXG4gICAgfTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVsLmRhdGFJdGVtLk5hbWUgK1xyXG4gICAgICBcIiAtIFtcIiArXHJcbiAgICAgIGVsLmRhdGFJdGVtLlR5cGUgK1xyXG4gICAgICBcIl0gPSBcIiArXHJcbiAgICAgIGdldEZpZWxkVmFsdWUoZWwuZGF0YUl0ZW0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25JdGVtQ2xpY2soZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uSXRlbUNsaWNrIGRhdGEgcmVjZWl2ZWQ6IFwiLCBldmVudCk7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGEpO1xyXG4gICAgZGF0YUl0ZW0uVmFsdWUgPSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgZGVsZXRlIGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBjb25zdCB6bW9kZWwgPSB7XHJcbiAgICAgIG5vZGVNb2RlbDogSlNPTi5zdHJpbmdpZnkoZGF0YUl0ZW0sIG51bGwsIDIpXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2hvd3pNb2RhbChcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkRWxlbWVudE5hbWU6ICdpb25tdkVkaXRGaWVsZE5vZGVGb3JtJyxcclxuICAgICAgICBwYXJlbnRHcm91cDogdGhpcy5kZWJ1Zy5fZ3JvdXAsXHJcbiAgICAgICAgek1vZGVsOiB6bW9kZWwsXHJcbiAgICAgICAgZm9ybUhlYWRlcjogJ0ZpZWxkIEVsZW1lbnQgSW5mbydcclxuICAgICAgfVxyXG4gICAgKS5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSwgZXZlbnQuZXZlbnQpO1xyXG4gICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgIGNvbnN0IHJldmVydGVkTW9kZWwgPSBaQ29tcG9uZW50SGVscGVyLnJldmVydFRyZWVNb2RlbChuZXdUcmVlTW9kZWwpO1xyXG4gICAgICBjb25zdCBuZXdDb2RlID0gSlNPTi5zdHJpbmdpZnkocmV2ZXJ0ZWRNb2RlbCwgbnVsbCwgMik7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICAgICAgLy8gdGhpcy5tYWluU2VydmljZS51cGRhdGVNb2RlbChudWxsLCB0aGlzLmRlYnVnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMudXBkYXRlVHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld05vZGUuVmFsdWUgPSB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dID0gbmV3Tm9kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5zZXJ0VHJlZU5vZGUobmV3Tm9kZTogYW55LCB0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLmluc2VydFRyZWVOb2RlKG5ld05vZGUsIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRyZWVJbmRleFswXSkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUpKSB7XHJcbiAgICAgICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLnB1c2gobmV3Tm9kZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJlZU1vZGVsLnB1c2gobmV3Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlVHJlZU5vZGUodHJlZU1vZGVsOiBhbnksIGluZGV4OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRyZWVJbmRleCA9IGluZGV4LnNwbGl0KFwiX1wiKTtcclxuICAgIGlmICh0cmVlSW5kZXgubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRyZWVJbmRleC5zbGljZSgxKS5qb2luKFwiX1wiKTtcclxuICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUsIG5ld0luZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyZWVNb2RlbC5zcGxpY2UoK3RyZWVJbmRleFswXSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uVHJlZU5vZGVDaGFuZ2UoZWw6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgY29uc29sZS5sb2coXCJvblRyZWVOb2RlQ2hhbmdlOiBcIiwgZWwpO1xyXG4gICAgY29uc3QgY29kZURhdGEgPSBKU09OLnN0cmluZ2lmeShlbC5kYXRhKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgY29kZURhdGEsIHRoaXMuZGVidWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGROb2RlKCkge1xyXG4gICAgY29uc3QgZWw6IFpDb21wb25lbnRPdXRwdXRFdmVudCA9IHtcclxuICAgICAgZGF0YToge30sXHJcbiAgICAgIHJvd0RhdGE6IHt9LFxyXG4gICAgICBldmVudDogXCJcIixcclxuICAgICAgdGFyZ2V0OiBcIlwiLFxyXG4gICAgICB0eXBlOiBcIlwiLFxyXG4gICAgICBjb2x1bW5GaWVsZHMkOiBudWxsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5vbkFkZE5vZGUoZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvbkFkZE5vZGUoZWw6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgY29uc29sZS5sb2coJ29uQWRkTm9kZSBpcyBjYWxsZWQnLCBlbCk7XHJcbiAgICAvLyBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmRhdGEpO1xyXG4gICAgLy8gZGF0YUl0ZW0uVmFsdWUgPSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgLy8gZGVsZXRlIGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBjb25zdCBpbml0aWFsTW9kZWwgPSB7XHJcbiAgICAgIE5hbWU6ICdOYW1lJywgRGlzcGxheU5hbWU6ICdOYW1lJywgVmFsdWU6ICdOYW1lJywgVHlwZTogJ3RleHQnLFxyXG4gICAgICBncmlkQ29sVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDE1MCxcclxuICAgICAgbWluV2lkdGg6IDEwMCxcclxuICAgICAgZW5hYmxlRmlsdGVyaW5nOiB0cnVlLFxyXG4gICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICBwaW5uZWRMZWZ0OiBmYWxzZSxcclxuICAgICAgUGxhY2VIb2xkZXI6IFwiTmFtZVwiLFxyXG4gICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgTWluTGVuZ3RoOiAyLFxyXG4gICAgICBNYXhMZW5ndGg6IDUwLFxyXG4gICAgICBMYWJlbDogXCJOYW1lOlwiLFxyXG4gICAgICBEaXZDbGFzczogXCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTNcIixcclxuICAgICAgUmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgICBTaG93TGFiZWw6IHRydWUsXHJcbiAgICAgIFZpc2libGU6IHRydWUsXHJcbiAgICAgIEVuYWJsZUhpZGluZzogZmFsc2UsXHJcbiAgICAgIC8vY2VsbEZpbHRlcjogXCJcIixcclxuICAgICAgLy9maWx0ZXJDZWxsRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICAvL2VuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgIC8vcGlubmVkUmlnaHQ6IGZhbHNlLFxyXG4gICAgICAvL1VwZGF0ZU9uQmx1cjogdHJ1ZSxcclxuICAgICAgLy9BcHBlbmREaXZDbGVhckZpeDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGluaXRpYWxNb2RlbCwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogJ2lvbm12RWRpdEZpZWxkTm9kZUZvcm0nLFxyXG4gICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICB6TW9kZWw6IHptb2RlbCxcclxuICAgICAgICBmb3JtSGVhZGVyOiAnQWRkIEZpZWxkIEVsZW1lbnQgSXRlbSdcclxuICAgICAgfVxyXG4gICAgKS5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVtb3ZlTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdSZW1vdmUgTm9kZScsICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgXSlcclxuICAgICAgLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSBOb2RlJywgZWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ290b0ZpZWxkRWxlbWVudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWRtaW4vZmllbGQnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKCkge1xyXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmRlYnVnLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJUaGUgZGVidWcgZm9ybSBpcyBub3QgZGlydHksIHNvIHRoZSByZWNvcmQgaXMgbm90IHNhdmVkLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmcudmFsaWQpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2YoZGVidWcuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICAvLyBzd2l0Y2hNYXAoem1vZGVsID0+IHtcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIHVwZGF0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHR5cGVvZiBkZWJ1Zy56TW9kZWwgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkZWJ1Zy56TW9kZWwpIDogZGVidWcuek1vZGVsO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICAgICAgICAgIGlkOiBkZWJ1Zy56TW9kZWwuSWQsXHJcbiAgICAgICAgICAgICAgYXNzZXRzUm91dGU6IEFzc2V0c1JvdXRlcy5maWVsZHMsXHJcbiAgICAgICAgICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIuZmllbGRlbGVtZW50LFxyXG4gICAgICAgICAgICAgIHBhcmFtczogcGF5bG9hZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuYXNzZXRzSHR0cE5vZGVQdXQocGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cIikpLFxyXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5zaWduYWxyU2VydmljZS5zZW5kVG9DbGllbnRHcm91cCh0aGlzLmdyb3Vwc1RvU2VuZCwgdGhpcy5ldmVudE5hbWUsIGRlYnVnLnpNb2RlbCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUHV0JChgJHtkZWJ1Zy5yZXNvdXJjZVVSTH0vJHtkZWJ1Zy56TW9kZWwuSWR9YCwgZGVidWcuek1vZGVsKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSksXHJcbiAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5zaWduYWxyU2VydmljZS5zZW5kVG9DbGllbnRHcm91cCh0aGlzLmdyb3Vwc1RvU2VuZCwgdGhpcy5ldmVudE5hbWUsIGRlYnVnLnpNb2RlbCkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgdXBkYXRpbmcgRGVidWcgRm9ybSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHptb2RlbCAmJiB6bW9kZWwuRGF0YSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuYWZ0ZXJVcGRhdGVNb2RlbChncm91cCk7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKiogV29ya2Zsb3cgQnV0dG9uICoqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gbm90IGluIHVzZSwgcGxhbiB0byBlbmhhbmNlIGZvciB0aGUgdXNhZ2UgZm9yIGZ1dHVyZS5cclxuICBwdWJsaWMgbG9hZFdvcmtmbG93RGF0YSgpIHtcclxuICAgIGNvbnN0IHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQnKTtcclxuICAgIGlmICh6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQpIHtcclxuICAgICAgemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkLnNldERhdGEodGhpcy5kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkV29ya2Zsb3dCdXR0b25Pbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgIGNvbnN0IGZpZWxkID0gZGF0YUl0ZW0ucmVmRmllbGQ7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBkYXRhSXRlbS5yZWZBdHRyaWJ1dGU7XHJcblxyXG4gICAgLy8gR2V0IE1hcHBlZCBJbmZvXHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXCJCdXR0b25JZFwiLCBmaWVsZC5JZCk7XHJcbiAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXRtYXBwZWRCdXR0b25JbmZvVVJMXCIpLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcChhc3luYyByZXMgPT4ge1xyXG4gICAgICAgIGxldCByb2xlSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBzdGF0dXNJbmZvID0gW107XHJcbiAgICAgICAgbGV0IHBhcmVudFN0YXR1c0luZm8gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRSb2xlTGlzdCkge1xyXG4gICAgICAgICAgcm9sZUluZm8gPSByZXMuTWFwcGVkUm9sZUxpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRTdGF0dXNMaXN0LmZvckVhY2goKF9zdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdGF0dXNJbmZvLnB1c2goX3N0YXR1cy5OYW1lICsgJyAoJyArIF9zdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUGFyZW50U3RhdHVzTGlzdCkge1xyXG4gICAgICAgICAgcmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QuZm9yRWFjaCgoX3BhcmVudFN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFN0YXR1c0luZm8ucHVzaChfcGFyZW50U3RhdHVzLk5hbWUgKyAnICgnICsgX3BhcmVudFN0YXR1cy5Db2RlICsgJyknKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgX21hcHBlZEluZm8gPSB7XHJcbiAgICAgICAgICAnbWFwcGVkUm9sZUluZm8nOiByb2xlSW5mby5sZW5ndGggPiAwID8gcm9sZUluZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkU3RhdHVzSW5mbyc6IHN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHN0YXR1c0luZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkUGFyZW50U3RhdHVzSW5mbyc6IHBhcmVudFN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHBhcmVudFN0YXR1c0luZm8gOiAnTi5BLidcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyByZXRyZWl2ZSBhbGwgaW1wb3J0YW50IGluZm9cclxuICAgICAgICBjb25zdCBfYnV0dG9uSW5mbyA9IHtcclxuICAgICAgICAgICdXb3JrZmxvd0lkJzogZmllbGQuV29ya2Zsb3dJZCxcclxuICAgICAgICAgICdCdXR0b25JZCc6IGZpZWxkLklkLFxyXG4gICAgICAgICAgJ0J1dHRvbk5hbWUnOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvbkNvZGUnOiBmaWVsZC5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVJZCc6IGZpZWxkLlR5cGUuSWQsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZU5hbWUnOiBmaWVsZC5UeXBlLk5hbWUsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZUNvZGUnOiBmaWVsZC5UeXBlLkNvZGUsXHJcbiAgICAgICAgICAnQnV0dG9uVmlzaWJsZSc6IGF0dHJpYnV0ZS5WaXNpYmxlLFxyXG4gICAgICAgICAgJ0J1dHRvbkNsaWNrRXZlbnQnOiBhdHRyaWJ1dGUuQ2xpY2tFdmVudCxcclxuICAgICAgICAgICdCdXR0b25VUkwnOiBhdHRyaWJ1dGUuVVJMLFxyXG4gICAgICAgICAgJ0J1dHRvbkljb24nOiBhdHRyaWJ1dGUuSWNvblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAnR290b1N0YXR1c0lkJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLlN0YXR1cykge1xyXG4gICAgICAgICAgY29uc3QgX2dvdG9TdGF0dXMgPSBmaWVsZC5TdGF0dXNcclxuICAgICAgICAgIF9nb3RvU3RhdHVzSW5mbyA9IHtcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6IF9nb3RvU3RhdHVzLklkLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c05hbWUnOiBfZ290b1N0YXR1cy5OYW1lLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c0NvZGUnOiBfZ290b1N0YXR1cy5Db2RlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTW9kZWwgPSBPYmplY3QuYXNzaWduKF9idXR0b25JbmZvLCBfZ290b1N0YXR1c0luZm8sIF9tYXBwZWRJbmZvKTtcclxuICAgICAgICB0aGlzLnNob3d6TW9kYWwoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6ICdtdldvcmtmbG93QnV0dG9uRGVidWdGb3JtJyxcclxuICAgICAgICAgICAgcGFyZW50R3JvdXA6IHRoaXMuZGVidWcuX2dyb3VwLFxyXG4gICAgICAgICAgICB6TW9kZWw6IHByb3BlcnRpZXNNb2RlbCxcclxuICAgICAgICAgICAgZm9ybUhlYWRlcjogJ1dvcmtmbG93IEJ1dHRvbiBJbmZvJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTdWNjZXNzKHJlczogUmVzcG9uc2UgfCBhbnksIHN1Y2Nlc3NNc2c6IHN0cmluZyk6IFJlc3BvbnNlIHtcclxuICAgIGlmIChyZXMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHN1Y2Nlc3NNc2cpO1xyXG4gICAgfSBlbHNlIGlmIChyZXMuRGF0YSAhPT0gdW5kZWZpbmVkICYmIHJlcy5Qcm9jZXNzaW5nU3RhdHVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHJlcy5Qcm9jZXNzaW5nU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzLkRhdGEpKSB7XHJcbiAgICAgICAgICByZXMuRGF0YS5tYXAocyA9PiB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoTUVTU0FHRVRZUEUuU3VjY2VzcyxcclxuICAgICAgICAgICAgYCR7c3VjY2Vzc01zZ30gOiAke3MuQ29zdENvZGV9YCwgbnVsbCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoTUVTU0FHRVRZUEUuU3VjY2Vzcywgc3VjY2Vzc01zZywgbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHN1Y2Nlc3NNc2cpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKHJlczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaGFuZGxlRXJyb3IocmVzKTtcclxuICB9XHJcblxyXG4gIC8vIENsb25lIHRoZSBtZXRob2QgZnJvbSBtYWluc2VydmljZTogVG8gcHJldmVudCBjaXJjdWxhciBkZXBlbmRlbmN5IHdoZW4gaW5qZWN0IG1haW4gc2VydmljZVxyXG4gIHB1YmxpYyBzaG93ek1vZGFsKG1vZGFsUGFnZVBhcmFtczogTW9kYWxQYWdlUGFyYW1zKTogT2JzZXJ2YWJsZTxNb2RhbFJlc3BvbnNlPiB7XHJcbiAgICBpZiAobW9kYWxQYWdlUGFyYW1zLnBhcmVudEdyb3VwKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgaXNUcmlnZ2VyZWQgYmVmb3JlIGRpc3BsYXkgdGhlIHBvcHVwLlxyXG4gICAgICBtb2RhbFBhZ2VQYXJhbXMucGFyZW50R3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsUGFnZVBhcmFtcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/********** Angular **********/
|
|
2
2
|
import { Component, Input } from '@angular/core';
|
|
3
|
-
import { ZComponentHelper } from 'mmhglobal-zcore';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
import * as i1 from "@angular/router";
|
|
6
5
|
import * as i2 from "mmhglobal-zcore";
|
|
@@ -17,32 +16,25 @@ export class UiappmenucontentComponent {
|
|
|
17
16
|
this.authService = authService;
|
|
18
17
|
this.zcoreService = zcoreService;
|
|
19
18
|
this.mainService = mainService;
|
|
19
|
+
this.MENU_TYPE_DROPDOWN_SUBMENU = 'dropdown-submenu';
|
|
20
20
|
}
|
|
21
21
|
ngOnInit() {
|
|
22
22
|
}
|
|
23
23
|
getDivClass(item) {
|
|
24
|
-
|
|
24
|
+
if (!item || !item.Type)
|
|
25
|
+
return 'col-xs-4 col-sm-4 col-md-3 col-xl-2 menu-col';
|
|
26
|
+
return (item.Type === this.MENU_TYPE_DROPDOWN_SUBMENU ? 'flex-show' : 'col-xs-4 col-sm-4 col-md-3 col-xl-2') + ' menu-col';
|
|
25
27
|
}
|
|
26
28
|
getMenuList(item) {
|
|
27
|
-
|
|
29
|
+
if (!item || item.Type !== this.MENU_TYPE_DROPDOWN_SUBMENU)
|
|
30
|
+
return null;
|
|
31
|
+
return this.menuService.getMenuFolder(item.URL);
|
|
28
32
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
if (startupPage.indexOf('_', 0) == 0) {
|
|
37
|
-
// menu page
|
|
38
|
-
this.mainService.setNavigationParams([startupPage]);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
// home page
|
|
42
|
-
this.mainService.setNavigationParams([pathName]);
|
|
43
|
-
}
|
|
44
|
-
this.router.navigate([pathName]);
|
|
45
|
-
}
|
|
33
|
+
trackByFn(index, item) {
|
|
34
|
+
return item.URL || index.toString(); // Unique identifier or fallback to index
|
|
35
|
+
}
|
|
36
|
+
menuOnClick(item) {
|
|
37
|
+
return this.mainService.menuOnClick(item);
|
|
46
38
|
}
|
|
47
39
|
setMapInput(key, value) {
|
|
48
40
|
const mapInput = document.createElement('input');
|
|
@@ -53,11 +45,11 @@ export class UiappmenucontentComponent {
|
|
|
53
45
|
}
|
|
54
46
|
}
|
|
55
47
|
UiappmenucontentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiappmenucontentComponent, deps: [{ token: i1.Router }, { token: i2.MenuService }, { token: i2.AuthService }, { token: i2.ZCoreService }, { token: i3.MainService }], target: i0.ɵɵFactoryTarget.Component });
|
|
56
|
-
UiappmenucontentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UiappmenucontentComponent, selector: "app-uiappmenucontent", inputs: { items: "items" }, ngImport: i0, template: "<ion-grid>\r\n <ion-row>\r\n <ion-col
|
|
48
|
+
UiappmenucontentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UiappmenucontentComponent, selector: "app-uiappmenucontent", inputs: { items: "items" }, ngImport: i0, template: "<ion-grid>\r\n <ion-row>\r\n <ion-col\r\n [ngClass]=\"getDivClass(item)\"\r\n *ngFor=\"let item of items; index as i; trackBy: trackByFn\"\r\n >\r\n\r\n <!-- Regular Menu Item (non-submenu) -->\r\n <div\r\n *ngIf=\"item.Type !== MENU_TYPE_DROPDOWN_SUBMENU\"\r\n class=\"menu-btn ion-activatable ripple-parent\"\r\n (click)=\"menuOnClick(item)\">\r\n <ion-label class=\"menu-btn-label menu-btn-icon\">\r\n <fa-icon\r\n class=\"menu-icon\"\r\n [icon]=\"['fas', item.Icon]\"\r\n [inverse]=\"true\"\r\n ></fa-icon>\r\n\r\n <!-- 1) Spinner if loading -->\r\n <ion-badge \r\n class=\"pending-counter\"\r\n *ngIf=\"item.counterLoading\">\r\n <ion-spinner name=\"bubbles\"></ion-spinner>\r\n </ion-badge>\r\n\r\n <!-- 2) Numeric badge if loaded & > 0 -->\r\n <ion-badge\r\n class=\"pending-counter\"\r\n *ngIf=\"!item.counterLoading && item.PendingCounter && item.PendingCounter > 0\">\r\n {{ item.PendingCounter }}\r\n </ion-badge>\r\n </ion-label>\r\n\r\n <ion-label class=\"menu-btn-label-text\">\r\n {{ item.Label }}\r\n </ion-label>\r\n\r\n <ion-label\r\n *ngIf=\"item.Description\"\r\n class=\"menu-btn-label-text menu-btn-label-text-desc\"\r\n >\r\n {{ item.Description }}\r\n </ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </div>\r\n\r\n <!-- Dropdown Submenu -->\r\n <kendo-card *ngIf=\"item.Type === MENU_TYPE_DROPDOWN_SUBMENU\">\r\n <kendo-card-header class=\"k-hstack\">\r\n <ion-label class=\"card-title\" kendoCardTitle>\r\n {{ item.Label }}\r\n </ion-label>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <div>\r\n <app-uiappmenucontent [items]=\"getMenuList(item) || []\"></app-uiappmenucontent>\r\n </div>\r\n </kendo-card-body>\r\n </kendo-card>\r\n </ion-col>\r\n </ion-row>\r\n</ion-grid>\r\n", styles: ["ion-grid{max-width:2000px;margin-top:10px}:host ::ng-deep kendo-card{width:95%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card .k-card-body{padding-top:0}.menu-col{padding:10px}.menu-btn{margin:0;padding:0;border:0px;display:flex;flex-flow:column;align-items:stretch;background-color:#fff;cursor:pointer;border-radius:5px;box-shadow:1px 1px 4px #797979;min-width:180px;max-width:250px;min-height:123px;max-height:123px;color:#fff;background:var(--ion-color-primary)}.menu-btn:hover{box-shadow:0 0 2px 2px var(--ion-color-secondary)}.menu-btn:hover .menu-btn-label-text-desc{bottom:0;transition:.5s ease bottom;width:100%}.menu-btn-label-text{text-align:center;font-size:16px;font-weight:600;padding:10px 5px}.menu-btn-label-text-desc{bottom:-100%;transition:.5s ease bottom;display:block;position:absolute;color:#000;font-size:16px;background-color:#fff;padding:8px 10px;border:1px solid #797979;border-radius:5px;text-shadow:0px 0px black;width:100%;text-align:left;font-size:14px;font-weight:500}.ripple-parent{position:relative;overflow:hidden}.menu-btn-label{text-align:center;font-size:15px}.menu-icon{zoom:3;position:relative;top:2px}.menu-btn-icon{position:relative;background-size:100%;text-align:center;font-size:15px;top:.4em}.pending-counter{position:absolute;top:.4em;right:.4em;background-color:#ff243a;color:#fff;border-radius:1em;min-width:2.5em;max-width:6em;height:1.5em;display:inline-flex;align-items:center;justify-content:center;text-align:center;padding:0 .5em;box-sizing:border-box;font-size:1.2rem;line-height:1.1}\n"], components: [{ type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i4.IonRow, selector: "ion-row" }, { type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i4.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { type: i4.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i4.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }, { type: i6.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { type: i6.CardHeaderComponent, selector: "kendo-card-header" }, { type: i6.CardBodyComponent, selector: "kendo-card-body" }, { type: UiappmenucontentComponent, selector: "app-uiappmenucontent", inputs: ["items"] }], directives: [{ type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.CardTitleDirective, selector: "[kendoCardTitle]" }] });
|
|
57
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiappmenucontentComponent, decorators: [{
|
|
58
50
|
type: Component,
|
|
59
|
-
args: [{ selector: 'app-uiappmenucontent', template: "<ion-grid>\r\n <ion-row>\r\n <ion-col
|
|
51
|
+
args: [{ selector: 'app-uiappmenucontent', template: "<ion-grid>\r\n <ion-row>\r\n <ion-col\r\n [ngClass]=\"getDivClass(item)\"\r\n *ngFor=\"let item of items; index as i; trackBy: trackByFn\"\r\n >\r\n\r\n <!-- Regular Menu Item (non-submenu) -->\r\n <div\r\n *ngIf=\"item.Type !== MENU_TYPE_DROPDOWN_SUBMENU\"\r\n class=\"menu-btn ion-activatable ripple-parent\"\r\n (click)=\"menuOnClick(item)\">\r\n <ion-label class=\"menu-btn-label menu-btn-icon\">\r\n <fa-icon\r\n class=\"menu-icon\"\r\n [icon]=\"['fas', item.Icon]\"\r\n [inverse]=\"true\"\r\n ></fa-icon>\r\n\r\n <!-- 1) Spinner if loading -->\r\n <ion-badge \r\n class=\"pending-counter\"\r\n *ngIf=\"item.counterLoading\">\r\n <ion-spinner name=\"bubbles\"></ion-spinner>\r\n </ion-badge>\r\n\r\n <!-- 2) Numeric badge if loaded & > 0 -->\r\n <ion-badge\r\n class=\"pending-counter\"\r\n *ngIf=\"!item.counterLoading && item.PendingCounter && item.PendingCounter > 0\">\r\n {{ item.PendingCounter }}\r\n </ion-badge>\r\n </ion-label>\r\n\r\n <ion-label class=\"menu-btn-label-text\">\r\n {{ item.Label }}\r\n </ion-label>\r\n\r\n <ion-label\r\n *ngIf=\"item.Description\"\r\n class=\"menu-btn-label-text menu-btn-label-text-desc\"\r\n >\r\n {{ item.Description }}\r\n </ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </div>\r\n\r\n <!-- Dropdown Submenu -->\r\n <kendo-card *ngIf=\"item.Type === MENU_TYPE_DROPDOWN_SUBMENU\">\r\n <kendo-card-header class=\"k-hstack\">\r\n <ion-label class=\"card-title\" kendoCardTitle>\r\n {{ item.Label }}\r\n </ion-label>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <div>\r\n <app-uiappmenucontent [items]=\"getMenuList(item) || []\"></app-uiappmenucontent>\r\n </div>\r\n </kendo-card-body>\r\n </kendo-card>\r\n </ion-col>\r\n </ion-row>\r\n</ion-grid>\r\n", styles: ["ion-grid{max-width:2000px;margin-top:10px}:host ::ng-deep kendo-card{width:95%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card .k-card-body{padding-top:0}.menu-col{padding:10px}.menu-btn{margin:0;padding:0;border:0px;display:flex;flex-flow:column;align-items:stretch;background-color:#fff;cursor:pointer;border-radius:5px;box-shadow:1px 1px 4px #797979;min-width:180px;max-width:250px;min-height:123px;max-height:123px;color:#fff;background:var(--ion-color-primary)}.menu-btn:hover{box-shadow:0 0 2px 2px var(--ion-color-secondary)}.menu-btn:hover .menu-btn-label-text-desc{bottom:0;transition:.5s ease bottom;width:100%}.menu-btn-label-text{text-align:center;font-size:16px;font-weight:600;padding:10px 5px}.menu-btn-label-text-desc{bottom:-100%;transition:.5s ease bottom;display:block;position:absolute;color:#000;font-size:16px;background-color:#fff;padding:8px 10px;border:1px solid #797979;border-radius:5px;text-shadow:0px 0px black;width:100%;text-align:left;font-size:14px;font-weight:500}.ripple-parent{position:relative;overflow:hidden}.menu-btn-label{text-align:center;font-size:15px}.menu-icon{zoom:3;position:relative;top:2px}.menu-btn-icon{position:relative;background-size:100%;text-align:center;font-size:15px;top:.4em}.pending-counter{position:absolute;top:.4em;right:.4em;background-color:#ff243a;color:#fff;border-radius:1em;min-width:2.5em;max-width:6em;height:1.5em;display:inline-flex;align-items:center;justify-content:center;text-align:center;padding:0 .5em;box-sizing:border-box;font-size:1.2rem;line-height:1.1}\n"] }]
|
|
60
52
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.MenuService }, { type: i2.AuthService }, { type: i2.ZCoreService }, { type: i3.MainService }]; }, propDecorators: { items: [{
|
|
61
53
|
type: Input
|
|
62
54
|
}] } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlhcHBtZW51Y29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi91aWFwcG1lbnVjb250ZW50L3VpYXBwbWVudWNvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdWlhcHBtZW51Y29udGVudC91aWFwcG1lbnVjb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQWtCekQsTUFBTSxPQUFPLHlCQUF5QjtJQUlwQyxZQUNVLE1BQWMsRUFDZCxXQUF3QixFQUN4QixXQUF3QixFQUN4QixZQUEwQixFQUMxQixXQUF3QjtRQUp4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFQM0IsK0JBQTBCLEdBQUcsa0JBQWtCLENBQUM7SUFRbkQsQ0FBQztJQUVMLFFBQVE7SUFDUixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyw4Q0FBOEMsQ0FBQztRQUMvRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDN0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFTO1FBQzFCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsMEJBQTBCO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBbUI7UUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLHlDQUF5QztJQUNoRixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUM1QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7O3NIQXhDVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qix3RkNuQnRDLGltRUErREEsNnlGRDVDYSx5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSxzQkFBc0I7c01BTXZCLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IE1haW5TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT0F1dGhNZW51SXRlbSwgTWVudVNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaQ29yZVNlcnZpY2UgfSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVpYXBwbWVudWNvbnRlbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91aWFwcG1lbnVjb250ZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91aWFwcG1lbnVjb250ZW50LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVWlhcHBtZW51Y29udGVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PE9BdXRoTWVudUl0ZW0+O1xyXG4gIHB1YmxpYyBNRU5VX1RZUEVfRFJPUERPV05fU1VCTUVOVSA9ICdkcm9wZG93bi1zdWJtZW51JztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1haW5TZXJ2aWNlOiBNYWluU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERpdkNsYXNzKGl0ZW06IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uVHlwZSkgcmV0dXJuICdjb2wteHMtNCBjb2wtc20tNCBjb2wtbWQtMyBjb2wteGwtMiBtZW51LWNvbCc7XHJcbiAgICByZXR1cm4gKGl0ZW0uVHlwZSA9PT0gdGhpcy5NRU5VX1RZUEVfRFJPUERPV05fU1VCTUVOVSA/ICdmbGV4LXNob3cnIDogJ2NvbC14cy00IGNvbC1zbS00IGNvbC1tZC0zIGNvbC14bC0yJykgKyAnIG1lbnUtY29sJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNZW51TGlzdChpdGVtOiBhbnkpOiBhbnkgfCBudWxsIHtcclxuICAgIGlmICghaXRlbSB8fCBpdGVtLlR5cGUgIT09IHRoaXMuTUVOVV9UWVBFX0RST1BET1dOX1NVQk1FTlUpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMubWVudVNlcnZpY2UuZ2V0TWVudUZvbGRlcihpdGVtLlVSTCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IE9BdXRoTWVudUl0ZW0pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGl0ZW0uVVJMIHx8IGluZGV4LnRvU3RyaW5nKCk7IC8vIFVuaXF1ZSBpZGVudGlmaWVyIG9yIGZhbGxiYWNrIHRvIGluZGV4XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWVudU9uQ2xpY2soaXRlbTogT0F1dGhNZW51SXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgIHJldHVybiB0aGlzLm1haW5TZXJ2aWNlLm1lbnVPbkNsaWNrKGl0ZW0pO1xyXG4gIH1cclxuICAgXHJcbiAgcHJpdmF0ZSBzZXRNYXBJbnB1dChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgbWFwSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgbWFwSW5wdXQudHlwZSA9ICdoaWRkZW4nO1xyXG4gICAgbWFwSW5wdXQubmFtZSA9IGtleTtcclxuICAgIG1hcElucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB2YWx1ZSk7XHJcblxyXG4gICAgcmV0dXJuIG1hcElucHV0O1xyXG4gIH1cclxufVxyXG4iLCI8aW9uLWdyaWQ+XHJcbiAgPGlvbi1yb3c+XHJcbiAgICA8aW9uLWNvbFxyXG4gICAgICBbbmdDbGFzc109XCJnZXREaXZDbGFzcyhpdGVtKVwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgPlxyXG5cclxuICAgICAgPCEtLSBSZWd1bGFyIE1lbnUgSXRlbSAobm9uLXN1Ym1lbnUpIC0tPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJpdGVtLlR5cGUgIT09IE1FTlVfVFlQRV9EUk9QRE9XTl9TVUJNRU5VXCJcclxuICAgICAgICBjbGFzcz1cIm1lbnUtYnRuIGlvbi1hY3RpdmF0YWJsZSByaXBwbGUtcGFyZW50XCJcclxuICAgICAgICAoY2xpY2spPVwibWVudU9uQ2xpY2soaXRlbSlcIj5cclxuICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwibWVudS1idG4tbGFiZWwgbWVudS1idG4taWNvblwiPlxyXG4gICAgICAgICAgPGZhLWljb25cclxuICAgICAgICAgICAgY2xhc3M9XCJtZW51LWljb25cIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJbJ2ZhcycsIGl0ZW0uSWNvbl1cIlxyXG4gICAgICAgICAgICBbaW52ZXJzZV09XCJ0cnVlXCJcclxuICAgICAgICAgID48L2ZhLWljb24+XHJcblxyXG4gICAgICAgICAgPCEtLSAxKSBTcGlubmVyIGlmIGxvYWRpbmcgLS0+XHJcbiAgICAgICAgICA8aW9uLWJhZGdlIFxyXG4gICAgICAgICAgICBjbGFzcz1cInBlbmRpbmctY291bnRlclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jb3VudGVyTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImJ1YmJsZXNcIj48L2lvbi1zcGlubmVyPlxyXG4gICAgICAgICAgPC9pb24tYmFkZ2U+XHJcblxyXG4gICAgICAgICAgPCEtLSAyKSBOdW1lcmljIGJhZGdlIGlmIGxvYWRlZCAmID4gMCAtLT5cclxuICAgICAgICAgIDxpb24tYmFkZ2VcclxuICAgICAgICAgICAgY2xhc3M9XCJwZW5kaW5nLWNvdW50ZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpdGVtLmNvdW50ZXJMb2FkaW5nICYmIGl0ZW0uUGVuZGluZ0NvdW50ZXIgJiYgaXRlbS5QZW5kaW5nQ291bnRlciA+IDBcIj5cclxuICAgICAgICAgICAge3sgaXRlbS5QZW5kaW5nQ291bnRlciB9fVxyXG4gICAgICAgICAgPC9pb24tYmFkZ2U+XHJcbiAgICAgICAgPC9pb24tbGFiZWw+XHJcblxyXG4gICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJtZW51LWJ0bi1sYWJlbC10ZXh0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLkxhYmVsIH19XHJcbiAgICAgICAgPC9pb24tbGFiZWw+XHJcblxyXG4gICAgICAgIDxpb24tbGFiZWxcclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtYnRuLWxhYmVsLXRleHQgbWVudS1idG4tbGFiZWwtdGV4dC1kZXNjXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBpdGVtLkRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgPGlvbi1yaXBwbGUtZWZmZWN0PjwvaW9uLXJpcHBsZS1lZmZlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBEcm9wZG93biBTdWJtZW51IC0tPlxyXG4gICAgICA8a2VuZG8tY2FyZCAqbmdJZj1cIml0ZW0uVHlwZSA9PT0gTUVOVV9UWVBFX0RST1BET1dOX1NVQk1FTlVcIj5cclxuICAgICAgICA8a2VuZG8tY2FyZC1oZWFkZXIgY2xhc3M9XCJrLWhzdGFja1wiPlxyXG4gICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImNhcmQtdGl0bGVcIiBrZW5kb0NhcmRUaXRsZT5cclxuICAgICAgICAgICAge3sgaXRlbS5MYWJlbCB9fVxyXG4gICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgPC9rZW5kby1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8a2VuZG8tY2FyZC1ib2R5PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGFwcC11aWFwcG1lbnVjb250ZW50IFtpdGVtc109XCJnZXRNZW51TGlzdChpdGVtKSB8fCBbXVwiPjwvYXBwLXVpYXBwbWVudWNvbnRlbnQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2tlbmRvLWNhcmQtYm9keT5cclxuICAgICAgPC9rZW5kby1jYXJkPlxyXG4gICAgPC9pb24tY29sPlxyXG4gIDwvaW9uLXJvdz5cclxuPC9pb24tZ3JpZD5cclxuIl19
|