@cqa-lib/cqa-ui 1.1.406 → 1.1.408
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/simulator/simulator.component.mjs +47 -18
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +41 -14
- package/esm2020/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.mjs +8 -5
- package/fesm2015/cqa-lib-cqa-ui.mjs +87 -34
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +93 -34
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/simulator/simulator.component.d.ts +5 -1
- package/lib/test-case-details/condition-step/condition-step.component.d.ts +10 -2
- package/package.json +1 -1
|
@@ -298,12 +298,15 @@ export class TestCaseDetailsRendererComponent {
|
|
|
298
298
|
existingSub.unsubscribe();
|
|
299
299
|
}
|
|
300
300
|
const deleteSub = instance.delete.subscribe((v) => {
|
|
301
|
-
if (
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
else if (v != null && typeof v === 'object' && v.step) {
|
|
301
|
+
if (v != null && typeof v === 'object' && v.step) {
|
|
302
|
+
// A nested step is propagating its own deletion (e.g. normal step inside a loop inside a branch).
|
|
303
|
+
// Forward it so it bubbles up to step-list for correct single-step deletion, do NOT treat as parent step deletion.
|
|
305
304
|
this.delete.emit(v);
|
|
306
305
|
}
|
|
306
|
+
else if (this.branch != null && this.index != null) {
|
|
307
|
+
// The current step (directly inside a condition branch) is deleting itself.
|
|
308
|
+
this.deleteStepWithBranch.emit({ branch: this.branch, stepIndex: this.index });
|
|
309
|
+
}
|
|
307
310
|
else {
|
|
308
311
|
this.delete.emit({ step: this.step });
|
|
309
312
|
}
|
|
@@ -523,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
523
526
|
}], editInDepth: [{
|
|
524
527
|
type: Output
|
|
525
528
|
}] } });
|
|
526
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUVoQixZQUFZLEVBRVosTUFBTSxHQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw0QkFBNEIsRUFBNEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUd2QixNQUFNLDBCQUEwQixDQUFDOzs7QUFPbEMsTUFBTSxPQUFPLGdDQUFnQztJQW1GM0MsWUFDZ0QsWUFBc0MsRUFDNUUsR0FBc0I7UUFEZ0IsaUJBQVksR0FBWixZQUFZLENBQTBCO1FBQzVFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBaEZ2QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLHVHQUF1RztRQUM5RixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDNUMscUZBQXFGO1FBQzVFLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBR2xDLGlHQUFpRztRQUN4RixjQUFTLEdBQVksS0FBSyxDQUFDO1FBR3BDLHNHQUFzRztRQUM3RixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUN4QyxvREFBb0Q7UUFDM0Msd0JBQW1CLEdBQVksSUFBSSxDQUFDO1FBQzdDLG9EQUFvRDtRQUMzQyx3QkFBbUIsR0FBWSxJQUFJLENBQUM7UUFDN0MsNEdBQTRHO1FBQ25HLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ3pDLDJIQUEySDtRQUNsSCxhQUFRLEdBQVksSUFBSSxDQUFDO1FBRXhCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUErQyxDQUFDO1FBQ25GLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25DLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3hDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQTZELENBQUM7UUFDL0Ysb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDL0MsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7UUFDOUQsU0FBSSxHQUFHLElBQUksWUFBWSxFQUE2QyxDQUFDO1FBQ3JFLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3JDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBdUMsQ0FBQztRQUNqRSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUE4RSxDQUFDO1FBQzdHLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUM5QyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0MscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTRFLENBQUM7UUFDaEgscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFDN0Usa0hBQWtIO1FBQ3hHLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXNDLENBQUM7UUFDeEUseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQWtELENBQUM7UUFDMUYsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDL0Msb0lBQW9JO1FBQzFILFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUMxRSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQ25ELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2pELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBbUQsQ0FBQztRQUM1Rix5SEFBeUg7UUFDL0csa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBb0QsQ0FBQztRQUMvRiwwQ0FBMEM7UUFDakMsdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBQ3hDLGdFQUFnRTtRQUN2RCx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDOUMsc0NBQXNDO1FBQzdCLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUNoRCw0REFBNEQ7UUFDbkQsOEJBQXlCLEdBQVUsRUFBRSxDQUFDO1FBQy9DLGlFQUFpRTtRQUN4RCxrQ0FBNkIsR0FBNkIsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzVFLHFEQUFxRDtRQUMzQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzVELGtEQUFrRDtRQUN4Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFELHNGQUFzRjtRQUM1RSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDcEQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTBFLENBQUM7UUFDM0gsK0ZBQStGO1FBQ3JGLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXVFLENBQUM7UUFFeEcsaUJBQVksR0FBNkIsSUFBSSxDQUFDO0lBS25ELENBQUM7SUFFSixlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQzFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztZQUMxSCxPQUFPLENBQUMsMkJBQTJCLENBQUMsSUFBSSxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFM0csSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7YUFBTSxJQUFJLGlCQUFpQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtZQUN4RixzR0FBc0c7WUFDdEcscUZBQXFGO1lBQ3JGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7YUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7YUFBTSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFnQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsa0hBQWtIO0lBQzFHLG1CQUFtQixDQUFDLFFBQWE7UUFDdkMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSyxDQUFDLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFLLENBQUMsRUFBRTtZQUN0RyxNQUFNLFdBQVcsR0FBSSxRQUFnQixDQUFDLGtCQUFrQixDQUFDO1lBQ3pELE1BQU0sV0FBVyxHQUFJLFFBQWdCLENBQUMsbUJBQW1CLENBQUM7WUFDMUQsTUFBTSxXQUFXLEdBQUksUUFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQztZQUMzRCxRQUFnQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUM5RCxRQUFnQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNoRSxRQUFnQixDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUNwRSxRQUFnQixDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztZQUM1RSxRQUFnQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNoRSxRQUFnQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNoRSxRQUFnQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3ZELDBHQUEwRztZQUMxRyx5RkFBeUY7WUFDekYsSUFBSSxPQUFPLFFBQVEsQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO2dCQUM5QyxNQUFNLE9BQU8sR0FBa0I7b0JBQzdCLGtCQUFrQixFQUFFLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDO29CQUNqRixtQkFBbUIsRUFBRSxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQztvQkFDbkYscUJBQXFCLEVBQUUsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUM7aUJBQ3hGLENBQUM7Z0JBQ0YsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvQjtTQUNGO1FBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSyxDQUFDLEVBQUU7WUFDL0IsUUFBZ0IsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFDNUUsUUFBZ0IsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUM7U0FDdEY7UUFDRCxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFLLENBQUMsRUFBRTtZQUNwQyxRQUFnQixDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztZQUM1RSxRQUFnQixDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUF3QjtRQUMvQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDaEUsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBQ3hFLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM5RCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzVELElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUN0RSxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7UUFDcEUsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQ3RFLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNsRSxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFDMUUsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ2xFLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUN4RSxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRixJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFDMUUsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFekMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBRTVDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixRQUFRLENBQUMsVUFBVSxHQUFJLElBQUksQ0FBQyxJQUFZLENBQUMsVUFBVSxDQUFDO1FBQ25ELFFBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyw0RUFBNEU7UUFDbEgsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3BELFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxRQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2xELFFBQWdCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDcEQsUUFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckMsSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLEdBQUcsS0FBSyxhQUFhLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRTtnQkFDcEUsUUFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBSSxJQUFJLENBQUMsSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFLLElBQUksQ0FBQyxJQUFZLENBQUMsV0FBVztZQUFHLFFBQWdCLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQyxJQUFZLENBQUMsV0FBVyxDQUFDO1FBQ25HLElBQUssSUFBSSxDQUFDLElBQVksQ0FBQyxRQUFRO1lBQUcsUUFBZ0IsQ0FBQyxRQUFRLEdBQUksSUFBSSxDQUFDLElBQVksQ0FBQyxRQUFRLENBQUM7UUFFMUYsZ0ZBQWdGO1FBQ2hGLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEcsUUFBZ0IsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDOUQsUUFBZ0IsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDaEUsUUFBZ0IsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDckUscUdBQXFHO1lBQ3BHLFFBQWdCLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQzdFLHVEQUF1RDtZQUN0RCxRQUFnQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNoRSxRQUFnQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNqRSw2REFBNkQ7WUFDNUQsUUFBZ0IsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN0RCxRQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQztTQUN0RDtRQUVELHFJQUFxSTtRQUNySSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixRQUFnQixDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztZQUM1RSxRQUFnQixDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztTQUN0RjtRQUVELHVGQUF1RjtRQUN2RixJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxRQUFnQixDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztZQUM1RSxRQUFnQixDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztTQUN0RjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWE7UUFDL0IsNERBQTREO1FBQzVELElBQUksQ0FBRSxRQUFnQixDQUFDLGlCQUFpQixFQUFFO1lBQ3ZDLFFBQWdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztTQUM5RDtRQUNELE1BQU0sYUFBYSxHQUFJLFFBQWdCLENBQUMsaUJBQWlCLENBQUM7UUFFMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBMEIsRUFBRSxFQUFFO1lBQ3ZELElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7Z0JBQ2xFLG1EQUFtRDtnQkFDbkQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUMzQjtnQkFFRCwwQkFBMEI7Z0JBQzFCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDdEM7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGdCQUF1QixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLENBQUM7b0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDbEYsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOztvQkFDN0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQztTQUNLLENBQUMsQ0FBQztRQUNWLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsSUFBSSxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLFdBQVcsSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUMxRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDO1NBQ0ssQ0FBQyxDQUFDO1FBQ1YsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3JCLElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUNmLHlDQUF5QztnQkFDekMsNERBQTREO2dCQUM1RCx3Q0FBd0M7Z0JBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7U0FDSyxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGlCQUF3QixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFxQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBbUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDZix1RUFBdUU7Z0JBQ3ZFLDJFQUEyRTtnQkFDM0UsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7b0JBQ3JFLHlDQUF5QztvQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ25CO3FCQUFNO29CQUNMLG1DQUFtQztvQkFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3hEO1lBQ0gsQ0FBQztTQUNLLENBQUMsQ0FBQztRQUNWLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQVcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQWdCLENBQUMsQ0FBQztRQUN6Qyx1SEFBdUg7UUFDdkgsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3RFLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQzNCO1lBQ0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDckQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtvQkFDN0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDaEY7cUJBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3ZDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQWtCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGdCQUF1QixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxnQkFBdUIsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsb0JBQTJCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFnQixDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBYyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBbUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBcUIsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMscUJBQTRCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFvQixDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxtQkFBMEIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBc0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBc0IsQ0FBQyxDQUFDO1FBQ3JELG9EQUFvRDtRQUNwRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7WUFDaEYsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDM0I7WUFDRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUMvRCw4R0FBOEc7Z0JBQzlHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUI7cUJBQU07b0JBQ0wsc0RBQXNEO29CQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFlLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNwRTtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsYUFBYSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFvQixDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxvQkFBMkIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsa0JBQXlCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLG1CQUEwQixDQUFDLENBQUM7UUFDN0Qsb0RBQW9EO1FBQ3BELElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUNoRixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELElBQUksV0FBVyxFQUFFO2dCQUNmLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMzQjtZQUNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQy9ELDZGQUE2RjtnQkFDN0YsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUNyRCxNQUFNLE9BQU8sR0FBZ0c7d0JBQzNHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTt3QkFDWixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSztxQkFDN0IsQ0FBQztvQkFDRixJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDdEIsT0FBTyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDL0M7b0JBQ0QsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO3dCQUNsQixPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztxQkFDN0I7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRDtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsYUFBYSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxtREFBbUQ7UUFDbkQsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0RBQW9ELENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFpQixDQUFDLENBQUM7U0FDNUM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEVBQTRFLEVBQUU7Z0JBQ3pGLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVE7Z0JBQzdCLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNwQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QscURBQXFEO1FBQ3JELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUU7WUFDL0IsTUFBTSxhQUFhLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFnQixDQUFDLGlCQUFpQixDQUFDO1lBQzVFLElBQUksYUFBYSxFQUFFO2dCQUNqQixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pDLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7d0JBQ2hELEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztxQkFDbkI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3ZCO1NBQ0Y7SUFDSCxDQUFDOzs2SEExWVUsZ0NBQWdDLGtCQW9GakMsNEJBQTRCO2lIQXBGM0IsZ0NBQWdDLCs4REFDWixnQkFBZ0Isa0RDM0NqRCx1K0RBd0JNOzJGRGtCTyxnQ0FBZ0M7a0JBTDVDLFNBQVM7K0JBQ0UsZ0NBQWdDLFFBRXBDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTs7MEJBc0YzQixNQUFNOzJCQUFDLDRCQUE0Qjs0RUFuRmEsUUFBUTtzQkFBMUQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRXhDLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFFRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEluamVjdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25EZXN0cm95LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRFU1RfQ0FTRV9TVEVQX0NPTVBPTkVOVF9NQVAsIFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCB9IGZyb20gJy4uL3Rlc3QtY2FzZS1zdGVwLWNvbXBvbmVudHMudG9rZW4nO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VTdGVwQ29uZmlnLFxuICBpc1N0ZXBHcm91cENvbmZpZyxcbiAgaXNDb25kaXRpb25TdGVwQ29uZmlnLFxuICBpc0xvb3BTdGVwQ29uZmlnLFxuICBpc05vcm1hbFN0ZXBDb25maWcsXG4gIGlzQXBpU3RlcENvbmZpZyxcbiAgaXNEYXRhYmFzZVN0ZXBDb25maWcsXG4gIGlzQWlBZ2VudFN0ZXBDb25maWcsXG4gIGlzQWlWZXJpZnlTdGVwQ29uZmlnLFxuICBpc1VwbG9hZFN0ZXBDb25maWcsXG4gIGlzU2NyZWVuc2hvdFN0ZXBDb25maWcsXG4gIGlzU2Nyb2xsU3RlcENvbmZpZyxcbiAgaXNWZXJpZnlVcmxTdGVwQ29uZmlnLFxuICBpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyxcbiAgaXNDdXN0b21Db2RlU3RlcENvbmZpZyxcbiAgQ29uZGl0aW9uQnJhbmNoLFxuICBMb29wU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc3RlcEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RlcEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpIHN0ZXAhOiBUZXN0Q2FzZVN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gdHJ1ZSwgc3RlcCBpcyByZW5kZXJlZCBpbnNpZGUgYSBzdGVwLWdyb3VwOyByb3cgYWN0aW9ucyAoRWRpdC9EdXBsaWNhdGUvRGVsZXRlKSBhcmUgaGlkZGVuLiAqL1xuICBASW5wdXQoKSBpc0luc2lkZVN0ZXBHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVmlzdWFsIGluZGVudGF0aW9uIGxldmVsIGZvciBuZXN0ZWQgc3RydWN0dXJlcyAobG9vcHMvc3RlcC1ncm91cHMvY29uZGl0aW9ucykuICovXG4gIEBJbnB1dCgpIG5lc3RpbmdMZXZlbDogbnVtYmVyID0gMDtcbiAgLyoqIFdoZW4gcmVuZGVyaW5nIGEgc3RlcCBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoLCB0aGUgYnJhbmNoIGNvbnRleHQgKGZvciBhZGRTdGVwRm9yQnJhbmNoIC8gZGVsZXRlU3RlcFdpdGhCcmFuY2gpLiAqL1xuICBASW5wdXQoKSBicmFuY2g/OiBDb25kaXRpb25CcmFuY2g7XG4gIC8qKiBXaGVuIHRydWUsIGVuYWJsZXMgZHJhZy1hbmQtZHJvcCByZW9yZGVyaW5nIGFuZCBzaG93cyBkcmFnIGhhbmRsZSBpY29uIGluc3RlYWQgb2YgY2hlY2tib3ggKi9cbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBDdXJyZW50IHNlbGVjdGlvbiBzdGF0ZTsgd2hlbiBjaGFuZ2VkIChlLmcuIGZyb20gU2VsZWN0IGFsbCksIHRoZSBjcmVhdGVkIHN0ZXAgY29tcG9uZW50IGlzIHVwZGF0ZWQgc28gdGhlIGNoZWNrYm94IHJlZmxlY3RzIGl0ICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgLyoqIEdsb2JhbCBkdXBsaWNhdGUtaW4tcHJvZ3Jlc3Mgc3RhdGUgdXNlZCB0byBkaXNhYmxlIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBzaG93IGxvYWRpbmcgZmVlZGJhY2suICovXG4gIEBJbnB1dCgpIGlzRHVwbGljYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFNob3cgXCJBZGQgU3RlcCBCZXR3ZWVuXCIgYnV0dG9uIGFib3ZlIHRoZSBzdGVwICovXG4gIEBJbnB1dCgpIGFkZFN0ZXBCZXR3ZWVuQWJvdmU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKiogU2hvdyBcIkFkZCBTdGVwIEJldHdlZW5cIiBidXR0b24gYmVsb3cgdGhlIHN0ZXAgKi9cbiAgQElucHV0KCkgYWRkU3RlcEJldHdlZW5CZWxvdzogYm9vbGVhbiA9IHRydWU7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYWRkU3RlcEJldHdlZW5BYm92ZSBhbmQgYWRkU3RlcEJldHdlZW5CZWxvdyBpbnN0ZWFkLiBJZiBzZXQsIGFwcGxpZXMgdG8gYm90aCBidXR0b25zLiAqL1xuICBASW5wdXQoKSBhZGRTdGVwQmV0d2VlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV2hlbiBmYWxzZSwgaGlkZXMgZWRpdC9kdXBsaWNhdGUvZGVsZXRlIGFjdGlvbnMgYW5kIGFkZC1zdGVwLWJldHdlZW4gYnV0dG9ucyBvbiBzdGVwcyAoZS5nLiBmb3IgdHJhc2hlZCB0ZXN0IGNhc2VzKS4gKi9cbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBuZXN0ZWRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgaW5kZXg6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHRvZ2dsZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuIHwge2NvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnLCBleHBhbmRlZDogYm9vbGVhbn0+KCk7XG4gIEBPdXRwdXQoKSBncm91cE5hbWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGRlc2NyaXB0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZXVzYWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9wZW5FeHRlcm5hbCA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZ30+KCk7XG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7c3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyfT4oKTtcbiAgQE91dHB1dCgpIGxpbmsgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkdXBsaWNhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnIH0gfCB2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0RldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyPGltcG9ydCgnLi4vc3RlcC1kZXRhaWxzLW1vZGFsL3N0ZXAtZGV0YWlscy1tb2RhbC1kYXRhJykuVmlld0RldGFpbHNQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY29uZGl0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBicmFuY2hTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoOyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IHN0ZXBJbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwRm9yQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gZW1wdHkgbG9vcCBzdGVwIHBsdXMgaXMgY2xpY2tlZDsgc2FtZSBiZWhhdmlvdXIgYXMgYWRkLXN0ZXAtYmV0d2VlbiAocGFyZW50SWQgPSBsb29wIHN0ZXAgaWQpLiAqL1xuICBAT3V0cHV0KCkgYWRkU3RlcEZvckxvb3AgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbG9vcFN0ZXBDb25maWc6IExvb3BTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwV2l0aEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBcIkFkZCBFbHNlXCIgaW4gYSBjb25kaXRpb24gc3RlcDsgcGFyZW50IHNob3VsZCBjYWxsIFBPU1QgdGVzdF9zdGVwcyB3aXRoIGNvbmRpdGlvblR5cGUgQ09ORElUSU9OX0VMU0UgKi9cbiAgQE91dHB1dCgpIGFkZEVsc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29uZGl0aW9uU3RlcENvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIHRlc3REYXRhUHJvZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc3RhcnRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBlbmRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBtYXhJdGVyYXRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBldmVudFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhcmFtZXRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY2xpY2tBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQ7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyB9PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGEgc3RlcCBpcyBkcm9wcGVkIGluIGEgbmVzdGVkIGRyb3B6b25lIChzdGVwLWdyb3VwLCBsb29wLCBjb25kaXRpb24pLiBQYXlsb2FkOiB7IGV2ZW50LCB0YXJnZXRMaXN0IH0uICovXG4gIEBPdXRwdXQoKSBkbmREcm9wSW5ab25lID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBhbnk7IHRhcmdldExpc3Q6IFRlc3RDYXNlU3RlcENvbmZpZ1tdIH0+KCk7XG4gIC8qKiBEYXRhIHByb2ZpbGUgb3B0aW9ucyBmb3IgbG9vcCBzdGVwcyAqL1xuICBASW5wdXQoKSBkYXRhUHJvZmlsZU9wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBJbmRpY2F0ZXMgaWYgbW9yZSBkYXRhIHByb2ZpbGVzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZURhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZGF0YSBwcm9maWxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdEYXRhUHJvZmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIE5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgZm9yIHdoaWxlIGxvb3AgY29uZGl0aW9uICovXG4gIEBJbnB1dCgpIG5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBGdW5jdGlvbiB0byBwcm9jZXNzIHRlbXBsYXRlIHZhcmlhYmxlcyBmb3IgY29uZGl0aW9uIHN0ZXBzICovXG4gIEBJbnB1dCgpIHNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiAodGVtcGxhdGU6IGFueSkgPT4gYW55W10gPSAoKSA9PiBbXTtcbiAgLyoqIEVtaXQgd2hlbiBtb3JlIGRhdGEgcHJvZmlsZXMgbmVlZCB0byBiZSBsb2FkZWQgKi9cbiAgQE91dHB1dCgpIGxvYWRNb3JlRGF0YVByb2ZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0IHdoZW4gZGF0YSBwcm9maWxlIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiBhIHN0ZXAgaXMgdXBkYXRlZCAoZS5nLiwgQXBwbHkgYnV0dG9uIGNsaWNrZWQgaW4gbG9vcC1zdGVwIGVkaXQgbW9kZSkgKi9cbiAgQE91dHB1dCgpIHN0ZXBVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlU3RlcENvbmZpZz4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXBCZXR3ZWVuQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGluZGV4OiBudW1iZXIsIHBvc2l0aW9uOiAnQUJPVkUnIHwgJ0JFTE9XJ30+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBjbGlja3MgXCJFZGl0IEluIGRlcHRoXCIgaW4gY29uZGl0aW9uLXN0ZXAgKG9yIG90aGVyIHN0ZXBzIHRoYXQgc3VwcG9ydCBpdCkgKi9cbiAgQE91dHB1dCgpIGVkaXRJbkRlcHRoID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgaW5kZXg6IG51bWJlcjsgdGVtcGxhdGVPdmVycmlkZT86IGFueSB9PigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVEVTVF9DQVNFX1NURVBfQ09NUE9ORU5UX01BUCkgcHJpdmF0ZSBjb21wb25lbnRNYXA6IFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlclN0ZXAoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmFsQ2hhbmdlID0gY2hhbmdlc1snc3RlcCddIHx8IGNoYW5nZXNbJ2luZGV4J10gfHwgY2hhbmdlc1snaXNOZXN0ZWQnXSB8fCBjaGFuZ2VzWydpc0luc2lkZUxvb3AnXSB8fFxuICAgICAgICBjaGFuZ2VzWydpc0luc2lkZVN0ZXBHcm91cCddIHx8IGNoYW5nZXNbJ2lzUmVvcmRlciddIHx8IGNoYW5nZXNbJ2VkaXRhYmxlJ107XG4gICAgY29uc3Qgb3B0aW9uc09ubHlDaGFuZ2UgPSAoY2hhbmdlc1snZGF0YVByb2ZpbGVPcHRpb25zJ10gfHwgY2hhbmdlc1snaGFzTW9yZURhdGFQcm9maWxlcyddIHx8IGNoYW5nZXNbJ2lzTG9hZGluZ0RhdGFQcm9maWxlcyddIHx8XG4gICAgICAgIGNoYW5nZXNbJ25hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMnXSB8fCBjaGFuZ2VzWydzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyddKSAmJiAhc3RydWN0dXJhbENoYW5nZTtcblxuICAgIGlmIChzdHJ1Y3R1cmFsQ2hhbmdlKSB7XG4gICAgICB0aGlzLnJlbmRlclN0ZXAoKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNPbmx5Q2hhbmdlICYmIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAhPSBudWxsICYmIHRoaXMuc3RlcCAhPSBudWxsKSB7XG4gICAgICAvLyBVcGRhdGUgb25seSBwcm9maWxlL29wdGlvbnMgaW5wdXRzIHNvIHdlIGRvbid0IGRlc3Ryb3kgdGhlIHN0ZXAgKGUuZy4gb3BlbmluZyBkYXRhIHByb2ZpbGUgZHJvcGRvd25cbiAgICAgIC8vIGxvYWRzIG9wdGlvbnMgYW5kIHdvdWxkIG90aGVyd2lzZSByZWNyZWF0ZSB0aGUgY29tcG9uZW50IGFuZCBjb2xsYXBzZSBpbmxpbmUgZWRpdClcbiAgICAgIHRoaXMudXBkYXRlT3B0aW9uc0lucHV0cyh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydzZWxlY3RlZCddICYmIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydpc0R1cGxpY2F0aW5nJ10gJiYgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLmlzRHVwbGljYXRpbmcgPSB0aGlzLmlzRHVwbGljYXRpbmc7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVwZGF0ZSBvbmx5IGRhdGEgcHJvZmlsZSAvIG9wdGlvbnMgaW5wdXRzIG9uIGV4aXN0aW5nIGluc3RhbmNlIChhdm9pZHMgZnVsbCByZWNyZWF0ZSBhbmQgbG9zaW5nIGlzRWRpdGluZykuICovXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9uc0lucHV0cyhpbnN0YW5jZTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwISkgfHwgaXNDb25kaXRpb25TdGVwQ29uZmlnKHRoaXMuc3RlcCEpIHx8IGlzU3RlcEdyb3VwQ29uZmlnKHRoaXMuc3RlcCEpKSB7XG4gICAgICBjb25zdCBwcmV2T3B0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLmRhdGFQcm9maWxlT3B0aW9ucztcbiAgICAgIGNvbnN0IHByZXZIYXNNb3JlID0gKGluc3RhbmNlIGFzIGFueSkuaGFzTW9yZURhdGFQcm9maWxlcztcbiAgICAgIGNvbnN0IHByZXZMb2FkaW5nID0gKGluc3RhbmNlIGFzIGFueSkuaXNMb2FkaW5nRGF0YVByb2ZpbGVzO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuZGF0YVByb2ZpbGVPcHRpb25zID0gdGhpcy5kYXRhUHJvZmlsZU9wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5oYXNNb3JlRGF0YVByb2ZpbGVzID0gdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNMb2FkaW5nRGF0YVByb2ZpbGVzID0gdGhpcy5pc0xvYWRpbmdEYXRhUHJvZmlsZXM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW5BYm92ZSA9IHRoaXMuYWRkU3RlcEJldHdlZW5BYm92ZTtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuQmVsb3cgPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuQmVsb3c7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbiA9IHRoaXMuYWRkU3RlcEJldHdlZW47XG4gICAgICAvLyBUcmlnZ2VyIG5nT25DaGFuZ2VzIHNvIHRoZSBzdGVwIHVwZGF0ZXMgaXRzIFRlc3QgRGF0YSBwcm9maWxlIHNlbGVjdCBjb25maWcgKHNlYXJjaC9sb2FkIG1vcmUgb3B0aW9ucykuXG4gICAgICAvLyBEeW5hbWljYWxseSBjcmVhdGVkIGNvbXBvbmVudHMgZG8gbm90IGdldCBASW5wdXQoKSBjaGFuZ2UgZGV0ZWN0aW9uIGZyb20gdGhlIHRlbXBsYXRlLlxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5uZ09uQ2hhbmdlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzID0ge1xuICAgICAgICAgIGRhdGFQcm9maWxlT3B0aW9uczogbmV3IFNpbXBsZUNoYW5nZShwcmV2T3B0aW9ucywgdGhpcy5kYXRhUHJvZmlsZU9wdGlvbnMsIGZhbHNlKSxcbiAgICAgICAgICBoYXNNb3JlRGF0YVByb2ZpbGVzOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZIYXNNb3JlLCB0aGlzLmhhc01vcmVEYXRhUHJvZmlsZXMsIGZhbHNlKSxcbiAgICAgICAgICBpc0xvYWRpbmdEYXRhUHJvZmlsZXM6IG5ldyBTaW1wbGVDaGFuZ2UocHJldkxvYWRpbmcsIHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzLCBmYWxzZSksXG4gICAgICAgIH07XG4gICAgICAgIGluc3RhbmNlLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyh0aGlzLnN0ZXAhKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB9XG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXAhKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudFR5cGUoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogYW55IHtcbiAgICBpZiAoaXNTdGVwR3JvdXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zdGVwR3JvdXA7XG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmNvbmRpdGlvblN0ZXA7XG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5sb29wU3RlcDtcbiAgICBpZiAoaXNBcGlTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuYXBpU3RlcDtcbiAgICBpZiAoaXNEYXRhYmFzZVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5kYXRhYmFzZVN0ZXA7XG4gICAgaWYgKGlzQWlBZ2VudFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5haUFnZW50U3RlcDtcbiAgICBpZiAoaXNBaVZlcmlmeVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5haVZlcmlmeVN0ZXA7XG4gICAgaWYgKGlzVXBsb2FkU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnVwbG9hZFN0ZXA7XG4gICAgaWYgKGlzU2NyZWVuc2hvdFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zY3JlZW5zaG90U3RlcDtcbiAgICBpZiAoaXNTY3JvbGxTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuc2Nyb2xsU3RlcDtcbiAgICBpZiAoaXNWZXJpZnlVcmxTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAudmVyaWZ5VXJsU3RlcDtcbiAgICBpZiAoaXNSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5yZXN0b3JlU2Vzc2lvblN0ZXA7XG4gICAgaWYgKGlzQ3VzdG9tQ29kZVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5jdXN0b21Db2RlU3RlcDtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAubm9ybWFsU3RlcDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RlcEhvc3QgfHwgIXRoaXMuc3RlcCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMuZ2V0Q29tcG9uZW50VHlwZSh0aGlzLnN0ZXApO1xuICAgIGlmICghY29tcG9uZW50VHlwZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGVwSG9zdC5jbGVhcigpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5zdGVwSG9zdC5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgIGluc3RhbmNlLmNvbmZpZyA9IHRoaXMuc3RlcDtcbiAgICBpbnN0YW5jZS5zdGVwTnVtYmVyID0gKHRoaXMuc3RlcCBhcyBhbnkpLnN0ZXBOdW1iZXI7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuaW5kZXggPSB0aGlzLmluZGV4OyAvLyBDb3JyZWN0IGVkaXQtaW4tZGVwdGggZm9yIGFsbCBzdGVwIHR5cGVzIChzdGVwTnVtYmVyIFwiMTAuM1wiIHBhcnNlcyB3cm9uZylcbiAgICBpbnN0YW5jZS5pc05lc3RlZCA9IHRoaXMuaXNOZXN0ZWQ7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVMb29wID0gdGhpcy5pc0luc2lkZUxvb3A7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVTdGVwR3JvdXAgPSB0aGlzLmlzSW5zaWRlU3RlcEdyb3VwO1xuICAgIGluc3RhbmNlLmlzUmVvcmRlciA9IHRoaXMuaXNSZW9yZGVyO1xuICAgIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RpbmdMZXZlbCA9IHRoaXMubmVzdGluZ0xldmVsO1xuICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzRHVwbGljYXRpbmcgPSB0aGlzLmlzRHVwbGljYXRpbmc7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuZWRpdGFibGUgPSB0aGlzLmVkaXRhYmxlICE9PSBmYWxzZTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0ZXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSAhPT0gJ3N0ZXBUeXBlJyAmJiBrZXkgIT09ICduZXN0ZWRTdGVwcycgJiYga2V5ICE9PSAnYnJhbmNoZXMnKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSAodGhpcy5zdGVwIGFzIGFueSlba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzKSAoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcztcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzKSAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcztcblxuICAgIC8vIFBhc3MgZGF0YSBwcm9maWxlIGlucHV0cyB0byBzdGVwIGluc3RhbmNlcyB0aGF0IGNhbiBjb250YWluIG5lc3RlZCBsb29wIHN0ZXBzXG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwKSB8fCBpc0NvbmRpdGlvblN0ZXBDb25maWcodGhpcy5zdGVwKSB8fCBpc1N0ZXBHcm91cENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5kYXRhUHJvZmlsZU9wdGlvbnMgPSB0aGlzLmRhdGFQcm9maWxlT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmhhc01vcmVEYXRhUHJvZmlsZXMgPSB0aGlzLmhhc01vcmVEYXRhUHJvZmlsZXM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0xvYWRpbmdEYXRhUHJvZmlsZXMgPSB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcztcbiAgICAgIC8vIEFsc28gcGFzcyBuYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIChmb3IgbmVzdGVkIGxvb3Agc3RlcHMgd2l0aCB3aGlsZSBsb29wIGFuZCBjb25kaXRpb24gc3RlcHMpXG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgLy8gUGFzcyBhZGRTdGVwQmV0d2VlbiBpbnB1dHMgdG8gbmVzdGVkIHN0ZXAgY29tcG9uZW50c1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW5BYm92ZSA9IHRoaXMuYWRkU3RlcEJldHdlZW5BYm92ZTtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuQmVsb3cgPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuQmVsb3c7XG4gICAgICAvLyBLZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBkZXByZWNhdGVkIGFkZFN0ZXBCZXR3ZWVuXG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbiA9IHRoaXMuYWRkU3RlcEJldHdlZW47XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5lZGl0YWJsZSA9IHRoaXMuZWRpdGFibGUgIT09IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBQYXNzIG5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgYW5kIHRlbXBsYXRlIHZhcmlhYmxlcyBmdW5jdGlvbiB0byBsb29wIHN0ZXBzIChmb3Igd2hpbGUgbG9vcCBjb25kaXRpb24sIHNhbWUgYXMgY29uZGl0aW9uLXN0ZXApXG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB9XG4gICAgXG4gICAgLy8gUGFzcyBuYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIGFuZCB0ZW1wbGF0ZSB2YXJpYWJsZXMgZnVuY3Rpb24gdG8gY29uZGl0aW9uIHN0ZXBzXG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHRoaXMud2lyZU91dHB1dHMoaW5zdGFuY2UpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2lyZU91dHB1dHMoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xuICAgIC8vIFN0b3JlIHN1YnNjcmlwdGlvbnMgb24gdGhlIGluc3RhbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlc1xuICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zO1xuICAgIFxuICAgIGNvbnN0IHdpcmUgPSAoa2V5OiBzdHJpbmcsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+KSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2Vba2V5XSAmJiB0eXBlb2YgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU3ViID0gc3Vic2NyaXB0aW9ucy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgICAgZXhpc3RpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBzdWJzY3JpcHRpb25cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIGVtaXR0ZXIuZW1pdCh2KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KGtleSwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpcmUoJ25lc3RlZFN0ZXBDaGFuZ2UnLCB0aGlzLm5lc3RlZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnYnJhbmNoJyBpbiB2KSB0aGlzLmFkZFN0ZXBGb3JCcmFuY2guZW1pdCh2KTtcbiAgICAgICAgZWxzZSBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnbG9vcFN0ZXBDb25maWcnIGluIHYpIHRoaXMuYWRkU3RlcEZvckxvb3AuZW1pdCh2KTtcbiAgICAgICAgZWxzZSB0aGlzLmFkZFN0ZXAuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXAnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdicmFuY2gnIGluIHYgJiYgJ3N0ZXBJbmRleCcgaW4gdikgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaC5lbWl0KHYpO1xuICAgICAgICBlbHNlIHRoaXMuZGVsZXRlU3RlcC5lbWl0KHYpO1xuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgndG9nZ2xlRXhwYW5kZWQnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGJvb2xlYW4gYW5kIG9iamVjdCBmb3JtYXRzXG4gICAgICAgIC8vIElmIGl0J3MgYW4gb2JqZWN0IHdpdGggY29uZmlnIGFuZCBleHBhbmRlZCwgZW1pdCBpdCBhcy1pc1xuICAgICAgICAvLyBJZiBpdCdzIGp1c3QgYSBib29sZWFuLCBlbWl0IGl0IGFzLWlzXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2dyb3VwTmFtZUNoYW5nZScsIHRoaXMuZ3JvdXBOYW1lQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVzY3JpcHRpb25DaGFuZ2UnLCB0aGlzLmRlc2NyaXB0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgncmV1c2FibGVDaGFuZ2UnLCB0aGlzLnJldXNhYmxlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnb3BlbkV4dGVybmFsJywgdGhpcy5vcGVuRXh0ZXJuYWwgYXMgYW55KTtcbiAgICB3aXJlKCdlZGl0Jywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgZW1pdHMgdm9pZCBvciBub3RoaW5nLCB1c2UgY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgYWxyZWFkeSBlbWl0cyBhbiBvYmplY3QsIG1lcmdlIGl0IHdpdGggc3RlcCBhbmQgaW5kZXhcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ3N0ZXAnIGluIHYgJiYgJ2luZGV4JyBpbiB2KSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSBoYXMgc3RlcCBhbmQgaW5kZXgsIGVtaXQgYXMtaXNcbiAgICAgICAgICB0aGlzLmVkaXQuZW1pdCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbWl0IHdpdGggY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgc3RlcDogdGhpcy5zdGVwLCBpbmRleDogdGhpcy5pbmRleCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgnbGluaycsIHRoaXMubGluayBhcyBhbnkpO1xuICAgIHdpcmUoJ2R1cGxpY2F0ZScsIHRoaXMuZHVwbGljYXRlIGFzIGFueSk7XG4gICAgLy8gV2lyZSBkZWxldGUgZXZlbnQgLSBpbnRlcmNlcHQgYW5kIGVtaXQgd2l0aCBzdGVwIGRhdGEgKGZvcndhcmQgcGF5bG9hZCB3aGVuIGNoaWxkIGVtaXRzIHsgc3RlcCB9IGZvciBuZXN0ZWQgZGVsZXRlcylcbiAgICBpZiAoaW5zdGFuY2UuZGVsZXRlICYmIHR5cGVvZiBpbnN0YW5jZS5kZWxldGUuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdkZWxldGUnKTtcbiAgICAgIGlmIChleGlzdGluZ1N1Yikge1xuICAgICAgICBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsZXRlU3ViID0gaW5zdGFuY2UuZGVsZXRlLnN1YnNjcmliZSgodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJyYW5jaCAhPSBudWxsICYmIHRoaXMuaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlU3RlcFdpdGhCcmFuY2guZW1pdCh7IGJyYW5jaDogdGhpcy5icmFuY2gsIHN0ZXBJbmRleDogdGhpcy5pbmRleCB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYuc3RlcCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlLmVtaXQodik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh7IHN0ZXA6IHRoaXMuc3RlcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzdWJzY3JpcHRpb25zLnNldCgnZGVsZXRlJywgZGVsZXRlU3ViKTtcbiAgICB9XG4gICAgd2lyZSgndmlld0RldGFpbHMnLCB0aGlzLnZpZXdEZXRhaWxzIGFzIGFueSk7XG4gICAgd2lyZSgnc2VsZWN0aW9uQ2hhbmdlJywgdGhpcy5zZWxlY3Rpb25DaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdjb25kaXRpb25DaGFuZ2UnLCB0aGlzLmNvbmRpdGlvbkNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2JyYW5jaFN0ZXBDaGFuZ2UnLCB0aGlzLmJyYW5jaFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwRm9yQnJhbmNoJywgdGhpcy5hZGRTdGVwRm9yQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnZGVsZXRlU3RlcFdpdGhCcmFuY2gnLCB0aGlzLmRlbGV0ZVN0ZXBXaXRoQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkQnJhbmNoJywgdGhpcy5hZGRCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdhZGRFbHNlJywgdGhpcy5hZGRFbHNlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVsZXRlQnJhbmNoJywgdGhpcy5kZWxldGVCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwRm9yTG9vcCcsIHRoaXMuYWRkU3RlcEZvckxvb3AgYXMgYW55KTtcbiAgICB3aXJlKCd0ZXN0RGF0YVByb2ZpbGVDaGFuZ2UnLCB0aGlzLnRlc3REYXRhUHJvZmlsZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ3N0YXJ0U3RlcENoYW5nZScsIHRoaXMuc3RhcnRTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZW5kU3RlcENoYW5nZScsIHRoaXMuZW5kU3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ21heEl0ZXJhdGlvbnNDaGFuZ2UnLCB0aGlzLm1heEl0ZXJhdGlvbnNDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdldmVudFR5cGVDaGFuZ2UnLCB0aGlzLmV2ZW50VHlwZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ3BhcmFtZXRlckNoYW5nZScsIHRoaXMucGFyYW1ldGVyQ2hhbmdlIGFzIGFueSk7XG4gICAgLy8gV2lyZSBjbGlja0FjdGlvbiAtIHdyYXAgTW91c2VFdmVudCB3aXRoIHN0ZXAgZGF0YVxuICAgIGlmIChpbnN0YW5jZS5jbGlja0FjdGlvbiAmJiB0eXBlb2YgaW5zdGFuY2UuY2xpY2tBY3Rpb24uc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdjbGlja0FjdGlvbicpO1xuICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgIGV4aXN0aW5nU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGlja0FjdGlvblN1YiA9IGluc3RhbmNlLmNsaWNrQWN0aW9uLnN1YnNjcmliZSgodjogYW55KSA9PiB7XG4gICAgICAgIC8vIElmIGNoaWxkIGNvbXBvbmVudCBlbWl0cyBhbiBvYmplY3Qgd2l0aCBldmVudCBhbmQgc3RlcCwgdXNlIGl0OyBvdGhlcndpc2Ugd3JhcCBNb3VzZUV2ZW50IHdpdGggY3VycmVudCBzdGVwXG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdldmVudCcgaW4gdiAmJiAnc3RlcCcgaW4gdikge1xuICAgICAgICAgIHRoaXMuY2xpY2tBY3Rpb24uZW1pdCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdiBpcyBhIE1vdXNlRXZlbnQsIHdyYXAgaXQgd2l0aCBjdXJyZW50IHN0ZXBcbiAgICAgICAgICB0aGlzLmNsaWNrQWN0aW9uLmVtaXQoeyBldmVudDogdiBhcyBNb3VzZUV2ZW50LCBzdGVwOiB0aGlzLnN0ZXAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQoJ2NsaWNrQWN0aW9uJywgY2xpY2tBY3Rpb25TdWIpO1xuICAgIH1cbiAgICB3aXJlKCdkbmREcm9wSW5ab25lJywgdGhpcy5kbmREcm9wSW5ab25lIGFzIGFueSk7XG4gICAgd2lyZSgnbG9hZE1vcmVEYXRhUHJvZmlsZXMnLCB0aGlzLmxvYWRNb3JlRGF0YVByb2ZpbGVzIGFzIGFueSk7XG4gICAgd2lyZSgnc2VhcmNoRGF0YVByb2ZpbGVzJywgdGhpcy5zZWFyY2hEYXRhUHJvZmlsZXMgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwQmV0d2VlbkNsaWNrJywgdGhpcy5hZGRTdGVwQmV0d2VlbkNsaWNrIGFzIGFueSk7XG4gICAgLy8gV2lyZSBlZGl0SW5EZXB0aCAtIGNoZWNrIGlmIGl0IGV4aXN0cyBvbiBpbnN0YW5jZVxuICAgIGlmIChpbnN0YW5jZS5lZGl0SW5EZXB0aCAmJiB0eXBlb2YgaW5zdGFuY2UuZWRpdEluRGVwdGguc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdlZGl0SW5EZXB0aCcpO1xuICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgIGV4aXN0aW5nU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlZGl0SW5EZXB0aFN1YiA9IGluc3RhbmNlLmVkaXRJbkRlcHRoLnN1YnNjcmliZSgodjogYW55KSA9PiB7XG4gICAgICAgIC8vIElmIGNoaWxkIGNvbXBvbmVudCBlbWl0cyBhbiBvYmplY3Qgd2l0aCBzdGVwLCB1c2UgaXQ7IG90aGVyd2lzZSB1c2UgY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnc3RlcCcgaW4gdikge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnOyBpbmRleDogbnVtYmVyOyB0ZW1wbGF0ZU92ZXJyaWRlPzogYW55OyBpc0NyZWF0ZU1vZGU/OiBib29sZWFuIH0gPSB7XG4gICAgICAgICAgICBzdGVwOiB2LnN0ZXAsXG4gICAgICAgICAgICBpbmRleDogdi5pbmRleCA/PyB0aGlzLmluZGV4LFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHYudGVtcGxhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgcGF5bG9hZC50ZW1wbGF0ZU92ZXJyaWRlID0gdi50ZW1wbGF0ZU92ZXJyaWRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodi5pc0NyZWF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNDcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lZGl0SW5EZXB0aC5lbWl0KHBheWxvYWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdCh7IHN0ZXA6IHRoaXMuc3RlcCwgaW5kZXg6IHRoaXMuaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQoJ2VkaXRJbkRlcHRoJywgZWRpdEluRGVwdGhTdWIpO1xuICAgIH1cbiAgICAvLyBXaXJlIHN0ZXBVcGRhdGUgLSBjaGVjayBpZiBpdCBleGlzdHMgb24gaW5zdGFuY2VcbiAgICBpZiAoaW5zdGFuY2Uuc3RlcFVwZGF0ZSkge1xuICAgICAgY29uc29sZS5sb2coJ1JlbmRlcmVyOiBGb3VuZCBzdGVwVXBkYXRlIEV2ZW50RW1pdHRlciwgd2lyaW5nIGl0Jyk7XG4gICAgICB3aXJlKCdzdGVwVXBkYXRlJywgdGhpcy5zdGVwVXBkYXRlIGFzIGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignUmVuZGVyZXI6IHN0ZXBVcGRhdGUgRXZlbnRFbWl0dGVyIG5vdCBmb3VuZCBvbiBpbnN0YW5jZSBkdXJpbmcgd2lyZU91dHB1dHMnLCB7XG4gICAgICAgIHN0ZXBJZDogdGhpcy5zdGVwPy5pZCxcbiAgICAgICAgc3RlcFR5cGU6IHRoaXMuc3RlcD8uc3RlcFR5cGUsXG4gICAgICAgIGluc3RhbmNlS2V5czogT2JqZWN0LmtleXMoaW5zdGFuY2UpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhbiB1cCBzdWJzY3JpcHRpb25zIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZj8uaW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS5fY3FhU3Vic2NyaXB0aW9ucztcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoc3ViICYmIHR5cGVvZiBzdWIudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1yZWxhdGl2ZSBjcWEtc3RlcC1yZW5kZXJlci1ob3Zlci1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdGFibGUgJiYgIWlzUmVvcmRlciAmJiAoYWRkU3RlcEJldHdlZW5BYm92ZSAmJiBhZGRTdGVwQmV0d2VlbilcIlxuICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLVtjYWxjKDAgLSAxMnB4KV0gY3FhLWxlZnQtWzUwJV0gY3FhLXRyYW5zbGF0ZS14LVstNTAlXSBjcWEtcC0wIGNxYS16LVsxXSBjcWEtYWRkLXN0ZXAtYmV0d2Vlbi1idG5cIlxuICAgICAgICBzdHlsZT1cInRvcDogLTEycHg7XCIgKGNsaWNrKT1cImFkZFN0ZXBCZXR3ZWVuQ2xpY2suZW1pdCh7c3RlcDogc3RlcCwgaW5kZXg6IGluZGV4LCBwb3NpdGlvbjogJ0FCT1ZFJ30pXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC41IDEySDE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgOC41VjE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zdGVwLWhvc3Qtd3JhcHBlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICNzdGVwSG9zdD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdGFibGUgJiYgIWlzUmVvcmRlciAmJiAoYWRkU3RlcEJldHdlZW5CZWxvdyAmJiBhZGRTdGVwQmV0d2VlbilcIlxuICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLVtjYWxjKDEwMCUtMTJweCldIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXAtMCBjcWEtei1bMV0gY3FhLWFkZC1zdGVwLWJldHdlZW4tYnRuXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZFN0ZXBCZXR3ZWVuQ2xpY2suZW1pdCh7c3RlcDogc3RlcCwgaW5kZXg6IGluZGV4LCBwb3NpdGlvbjogJ0JFTE9XJ30pXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC41IDEySDE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgOC41VjE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9idXR0b24+XG48L2Rpdj4iXX0=
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUVoQixZQUFZLEVBRVosTUFBTSxHQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw0QkFBNEIsRUFBNEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUd2QixNQUFNLDBCQUEwQixDQUFDOzs7QUFPbEMsTUFBTSxPQUFPLGdDQUFnQztJQW1GM0MsWUFDZ0QsWUFBc0MsRUFDNUUsR0FBc0I7UUFEZ0IsaUJBQVksR0FBWixZQUFZLENBQTBCO1FBQzVFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBaEZ2QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLHVHQUF1RztRQUM5RixzQkFB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O2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFFRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEluamVjdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25EZXN0cm95LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRFU1RfQ0FTRV9TVEVQX0NPTVBPTkVOVF9NQVAsIFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCB9IGZyb20gJy4uL3Rlc3QtY2FzZS1zdGVwLWNvbXBvbmVudHMudG9rZW4nO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VTdGVwQ29uZmlnLFxuICBpc1N0ZXBHcm91cENvbmZpZyxcbiAgaXNDb25kaXRpb25TdGVwQ29uZmlnLFxuICBpc0xvb3BTdGVwQ29uZmlnLFxuICBpc05vcm1hbFN0ZXBDb25maWcsXG4gIGlzQXBpU3RlcENvbmZpZyxcbiAgaXNEYXRhYmFzZVN0ZXBDb25maWcsXG4gIGlzQWlBZ2VudFN0ZXBDb25maWcsXG4gIGlzQWlWZXJpZnlTdGVwQ29uZmlnLFxuICBpc1VwbG9hZFN0ZXBDb25maWcsXG4gIGlzU2NyZWVuc2hvdFN0ZXBDb25maWcsXG4gIGlzU2Nyb2xsU3RlcENvbmZpZyxcbiAgaXNWZXJpZnlVcmxTdGVwQ29uZmlnLFxuICBpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyxcbiAgaXNDdXN0b21Db2RlU3RlcENvbmZpZyxcbiAgQ29uZGl0aW9uQnJhbmNoLFxuICBMb29wU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc3RlcEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RlcEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpIHN0ZXAhOiBUZXN0Q2FzZVN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gdHJ1ZSwgc3RlcCBpcyByZW5kZXJlZCBpbnNpZGUgYSBzdGVwLWdyb3VwOyByb3cgYWN0aW9ucyAoRWRpdC9EdXBsaWNhdGUvRGVsZXRlKSBhcmUgaGlkZGVuLiAqL1xuICBASW5wdXQoKSBpc0luc2lkZVN0ZXBHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVmlzdWFsIGluZGVudGF0aW9uIGxldmVsIGZvciBuZXN0ZWQgc3RydWN0dXJlcyAobG9vcHMvc3RlcC1ncm91cHMvY29uZGl0aW9ucykuICovXG4gIEBJbnB1dCgpIG5lc3RpbmdMZXZlbDogbnVtYmVyID0gMDtcbiAgLyoqIFdoZW4gcmVuZGVyaW5nIGEgc3RlcCBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoLCB0aGUgYnJhbmNoIGNvbnRleHQgKGZvciBhZGRTdGVwRm9yQnJhbmNoIC8gZGVsZXRlU3RlcFdpdGhCcmFuY2gpLiAqL1xuICBASW5wdXQoKSBicmFuY2g/OiBDb25kaXRpb25CcmFuY2g7XG4gIC8qKiBXaGVuIHRydWUsIGVuYWJsZXMgZHJhZy1hbmQtZHJvcCByZW9yZGVyaW5nIGFuZCBzaG93cyBkcmFnIGhhbmRsZSBpY29uIGluc3RlYWQgb2YgY2hlY2tib3ggKi9cbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBDdXJyZW50IHNlbGVjdGlvbiBzdGF0ZTsgd2hlbiBjaGFuZ2VkIChlLmcuIGZyb20gU2VsZWN0IGFsbCksIHRoZSBjcmVhdGVkIHN0ZXAgY29tcG9uZW50IGlzIHVwZGF0ZWQgc28gdGhlIGNoZWNrYm94IHJlZmxlY3RzIGl0ICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgLyoqIEdsb2JhbCBkdXBsaWNhdGUtaW4tcHJvZ3Jlc3Mgc3RhdGUgdXNlZCB0byBkaXNhYmxlIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBzaG93IGxvYWRpbmcgZmVlZGJhY2suICovXG4gIEBJbnB1dCgpIGlzRHVwbGljYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFNob3cgXCJBZGQgU3RlcCBCZXR3ZWVuXCIgYnV0dG9uIGFib3ZlIHRoZSBzdGVwICovXG4gIEBJbnB1dCgpIGFkZFN0ZXBCZXR3ZWVuQWJvdmU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKiogU2hvdyBcIkFkZCBTdGVwIEJldHdlZW5cIiBidXR0b24gYmVsb3cgdGhlIHN0ZXAgKi9cbiAgQElucHV0KCkgYWRkU3RlcEJldHdlZW5CZWxvdzogYm9vbGVhbiA9IHRydWU7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYWRkU3RlcEJldHdlZW5BYm92ZSBhbmQgYWRkU3RlcEJldHdlZW5CZWxvdyBpbnN0ZWFkLiBJZiBzZXQsIGFwcGxpZXMgdG8gYm90aCBidXR0b25zLiAqL1xuICBASW5wdXQoKSBhZGRTdGVwQmV0d2VlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV2hlbiBmYWxzZSwgaGlkZXMgZWRpdC9kdXBsaWNhdGUvZGVsZXRlIGFjdGlvbnMgYW5kIGFkZC1zdGVwLWJldHdlZW4gYnV0dG9ucyBvbiBzdGVwcyAoZS5nLiBmb3IgdHJhc2hlZCB0ZXN0IGNhc2VzKS4gKi9cbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBuZXN0ZWRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgaW5kZXg6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHRvZ2dsZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuIHwge2NvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnLCBleHBhbmRlZDogYm9vbGVhbn0+KCk7XG4gIEBPdXRwdXQoKSBncm91cE5hbWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGRlc2NyaXB0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZXVzYWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9wZW5FeHRlcm5hbCA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZ30+KCk7XG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7c3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyfT4oKTtcbiAgQE91dHB1dCgpIGxpbmsgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkdXBsaWNhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnIH0gfCB2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0RldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyPGltcG9ydCgnLi4vc3RlcC1kZXRhaWxzLW1vZGFsL3N0ZXAtZGV0YWlscy1tb2RhbC1kYXRhJykuVmlld0RldGFpbHNQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY29uZGl0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBicmFuY2hTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoOyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IHN0ZXBJbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwRm9yQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gZW1wdHkgbG9vcCBzdGVwIHBsdXMgaXMgY2xpY2tlZDsgc2FtZSBiZWhhdmlvdXIgYXMgYWRkLXN0ZXAtYmV0d2VlbiAocGFyZW50SWQgPSBsb29wIHN0ZXAgaWQpLiAqL1xuICBAT3V0cHV0KCkgYWRkU3RlcEZvckxvb3AgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbG9vcFN0ZXBDb25maWc6IExvb3BTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwV2l0aEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBcIkFkZCBFbHNlXCIgaW4gYSBjb25kaXRpb24gc3RlcDsgcGFyZW50IHNob3VsZCBjYWxsIFBPU1QgdGVzdF9zdGVwcyB3aXRoIGNvbmRpdGlvblR5cGUgQ09ORElUSU9OX0VMU0UgKi9cbiAgQE91dHB1dCgpIGFkZEVsc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29uZGl0aW9uU3RlcENvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIHRlc3REYXRhUHJvZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc3RhcnRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBlbmRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBtYXhJdGVyYXRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBldmVudFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhcmFtZXRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY2xpY2tBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQ7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyB9PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGEgc3RlcCBpcyBkcm9wcGVkIGluIGEgbmVzdGVkIGRyb3B6b25lIChzdGVwLWdyb3VwLCBsb29wLCBjb25kaXRpb24pLiBQYXlsb2FkOiB7IGV2ZW50LCB0YXJnZXRMaXN0IH0uICovXG4gIEBPdXRwdXQoKSBkbmREcm9wSW5ab25lID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBhbnk7IHRhcmdldExpc3Q6IFRlc3RDYXNlU3RlcENvbmZpZ1tdIH0+KCk7XG4gIC8qKiBEYXRhIHByb2ZpbGUgb3B0aW9ucyBmb3IgbG9vcCBzdGVwcyAqL1xuICBASW5wdXQoKSBkYXRhUHJvZmlsZU9wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBJbmRpY2F0ZXMgaWYgbW9yZSBkYXRhIHByb2ZpbGVzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZURhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZGF0YSBwcm9maWxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdEYXRhUHJvZmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIE5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgZm9yIHdoaWxlIGxvb3AgY29uZGl0aW9uICovXG4gIEBJbnB1dCgpIG5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBGdW5jdGlvbiB0byBwcm9jZXNzIHRlbXBsYXRlIHZhcmlhYmxlcyBmb3IgY29uZGl0aW9uIHN0ZXBzICovXG4gIEBJbnB1dCgpIHNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiAodGVtcGxhdGU6IGFueSkgPT4gYW55W10gPSAoKSA9PiBbXTtcbiAgLyoqIEVtaXQgd2hlbiBtb3JlIGRhdGEgcHJvZmlsZXMgbmVlZCB0byBiZSBsb2FkZWQgKi9cbiAgQE91dHB1dCgpIGxvYWRNb3JlRGF0YVByb2ZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0IHdoZW4gZGF0YSBwcm9maWxlIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiBhIHN0ZXAgaXMgdXBkYXRlZCAoZS5nLiwgQXBwbHkgYnV0dG9uIGNsaWNrZWQgaW4gbG9vcC1zdGVwIGVkaXQgbW9kZSkgKi9cbiAgQE91dHB1dCgpIHN0ZXBVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlU3RlcENvbmZpZz4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXBCZXR3ZWVuQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGluZGV4OiBudW1iZXIsIHBvc2l0aW9uOiAnQUJPVkUnIHwgJ0JFTE9XJ30+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBjbGlja3MgXCJFZGl0IEluIGRlcHRoXCIgaW4gY29uZGl0aW9uLXN0ZXAgKG9yIG90aGVyIHN0ZXBzIHRoYXQgc3VwcG9ydCBpdCkgKi9cbiAgQE91dHB1dCgpIGVkaXRJbkRlcHRoID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgaW5kZXg6IG51bWJlcjsgdGVtcGxhdGVPdmVycmlkZT86IGFueSB9PigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVEVTVF9DQVNFX1NURVBfQ09NUE9ORU5UX01BUCkgcHJpdmF0ZSBjb21wb25lbnRNYXA6IFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlclN0ZXAoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmFsQ2hhbmdlID0gY2hhbmdlc1snc3RlcCddIHx8IGNoYW5nZXNbJ2luZGV4J10gfHwgY2hhbmdlc1snaXNOZXN0ZWQnXSB8fCBjaGFuZ2VzWydpc0luc2lkZUxvb3AnXSB8fFxuICAgICAgICBjaGFuZ2VzWydpc0luc2lkZVN0ZXBHcm91cCddIHx8IGNoYW5nZXNbJ2lzUmVvcmRlciddIHx8IGNoYW5nZXNbJ2VkaXRhYmxlJ107XG4gICAgY29uc3Qgb3B0aW9uc09ubHlDaGFuZ2UgPSAoY2hhbmdlc1snZGF0YVByb2ZpbGVPcHRpb25zJ10gfHwgY2hhbmdlc1snaGFzTW9yZURhdGFQcm9maWxlcyddIHx8IGNoYW5nZXNbJ2lzTG9hZGluZ0RhdGFQcm9maWxlcyddIHx8XG4gICAgICAgIGNoYW5nZXNbJ25hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMnXSB8fCBjaGFuZ2VzWydzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyddKSAmJiAhc3RydWN0dXJhbENoYW5nZTtcblxuICAgIGlmIChzdHJ1Y3R1cmFsQ2hhbmdlKSB7XG4gICAgICB0aGlzLnJlbmRlclN0ZXAoKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNPbmx5Q2hhbmdlICYmIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAhPSBudWxsICYmIHRoaXMuc3RlcCAhPSBudWxsKSB7XG4gICAgICAvLyBVcGRhdGUgb25seSBwcm9maWxlL29wdGlvbnMgaW5wdXRzIHNvIHdlIGRvbid0IGRlc3Ryb3kgdGhlIHN0ZXAgKGUuZy4gb3BlbmluZyBkYXRhIHByb2ZpbGUgZHJvcGRvd25cbiAgICAgIC8vIGxvYWRzIG9wdGlvbnMgYW5kIHdvdWxkIG90aGVyd2lzZSByZWNyZWF0ZSB0aGUgY29tcG9uZW50IGFuZCBjb2xsYXBzZSBpbmxpbmUgZWRpdClcbiAgICAgIHRoaXMudXBkYXRlT3B0aW9uc0lucHV0cyh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydzZWxlY3RlZCddICYmIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydpc0R1cGxpY2F0aW5nJ10gJiYgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLmlzRHVwbGljYXRpbmcgPSB0aGlzLmlzRHVwbGljYXRpbmc7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVwZGF0ZSBvbmx5IGRhdGEgcHJvZmlsZSAvIG9wdGlvbnMgaW5wdXRzIG9uIGV4aXN0aW5nIGluc3RhbmNlIChhdm9pZHMgZnVsbCByZWNyZWF0ZSBhbmQgbG9zaW5nIGlzRWRpdGluZykuICovXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9uc0lucHV0cyhpbnN0YW5jZTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwISkgfHwgaXNDb25kaXRpb25TdGVwQ29uZmlnKHRoaXMuc3RlcCEpIHx8IGlzU3RlcEdyb3VwQ29uZmlnKHRoaXMuc3RlcCEpKSB7XG4gICAgICBjb25zdCBwcmV2T3B0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLmRhdGFQcm9maWxlT3B0aW9ucztcbiAgICAgIGNvbnN0IHByZXZIYXNNb3JlID0gKGluc3RhbmNlIGFzIGFueSkuaGFzTW9yZURhdGFQcm9maWxlcztcbiAgICAgIGNvbnN0IHByZXZMb2FkaW5nID0gKGluc3RhbmNlIGFzIGFueSkuaXNMb2FkaW5nRGF0YVByb2ZpbGVzO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuZGF0YVByb2ZpbGVPcHRpb25zID0gdGhpcy5kYXRhUHJvZmlsZU9wdGlvbnM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5oYXNNb3JlRGF0YVByb2ZpbGVzID0gdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNMb2FkaW5nRGF0YVByb2ZpbGVzID0gdGhpcy5pc0xvYWRpbmdEYXRhUHJvZmlsZXM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW5BYm92ZSA9IHRoaXMuYWRkU3RlcEJldHdlZW5BYm92ZTtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuQmVsb3cgPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuQmVsb3c7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbiA9IHRoaXMuYWRkU3RlcEJldHdlZW47XG4gICAgICAvLyBUcmlnZ2VyIG5nT25DaGFuZ2VzIHNvIHRoZSBzdGVwIHVwZGF0ZXMgaXRzIFRlc3QgRGF0YSBwcm9maWxlIHNlbGVjdCBjb25maWcgKHNlYXJjaC9sb2FkIG1vcmUgb3B0aW9ucykuXG4gICAgICAvLyBEeW5hbWljYWxseSBjcmVhdGVkIGNvbXBvbmVudHMgZG8gbm90IGdldCBASW5wdXQoKSBjaGFuZ2UgZGV0ZWN0aW9uIGZyb20gdGhlIHRlbXBsYXRlLlxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5uZ09uQ2hhbmdlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzID0ge1xuICAgICAgICAgIGRhdGFQcm9maWxlT3B0aW9uczogbmV3IFNpbXBsZUNoYW5nZShwcmV2T3B0aW9ucywgdGhpcy5kYXRhUHJvZmlsZU9wdGlvbnMsIGZhbHNlKSxcbiAgICAgICAgICBoYXNNb3JlRGF0YVByb2ZpbGVzOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZIYXNNb3JlLCB0aGlzLmhhc01vcmVEYXRhUHJvZmlsZXMsIGZhbHNlKSxcbiAgICAgICAgICBpc0xvYWRpbmdEYXRhUHJvZmlsZXM6IG5ldyBTaW1wbGVDaGFuZ2UocHJldkxvYWRpbmcsIHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzLCBmYWxzZSksXG4gICAgICAgIH07XG4gICAgICAgIGluc3RhbmNlLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyh0aGlzLnN0ZXAhKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB9XG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXAhKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudFR5cGUoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogYW55IHtcbiAgICBpZiAoaXNTdGVwR3JvdXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zdGVwR3JvdXA7XG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmNvbmRpdGlvblN0ZXA7XG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5sb29wU3RlcDtcbiAgICBpZiAoaXNBcGlTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuYXBpU3RlcDtcbiAgICBpZiAoaXNEYXRhYmFzZVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5kYXRhYmFzZVN0ZXA7XG4gICAgaWYgKGlzQWlBZ2VudFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5haUFnZW50U3RlcDtcbiAgICBpZiAoaXNBaVZlcmlmeVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5haVZlcmlmeVN0ZXA7XG4gICAgaWYgKGlzVXBsb2FkU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnVwbG9hZFN0ZXA7XG4gICAgaWYgKGlzU2NyZWVuc2hvdFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zY3JlZW5zaG90U3RlcDtcbiAgICBpZiAoaXNTY3JvbGxTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuc2Nyb2xsU3RlcDtcbiAgICBpZiAoaXNWZXJpZnlVcmxTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAudmVyaWZ5VXJsU3RlcDtcbiAgICBpZiAoaXNSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5yZXN0b3JlU2Vzc2lvblN0ZXA7XG4gICAgaWYgKGlzQ3VzdG9tQ29kZVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5jdXN0b21Db2RlU3RlcDtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAubm9ybWFsU3RlcDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RlcEhvc3QgfHwgIXRoaXMuc3RlcCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMuZ2V0Q29tcG9uZW50VHlwZSh0aGlzLnN0ZXApO1xuICAgIGlmICghY29tcG9uZW50VHlwZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGVwSG9zdC5jbGVhcigpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5zdGVwSG9zdC5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgIGluc3RhbmNlLmNvbmZpZyA9IHRoaXMuc3RlcDtcbiAgICBpbnN0YW5jZS5zdGVwTnVtYmVyID0gKHRoaXMuc3RlcCBhcyBhbnkpLnN0ZXBOdW1iZXI7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuaW5kZXggPSB0aGlzLmluZGV4OyAvLyBDb3JyZWN0IGVkaXQtaW4tZGVwdGggZm9yIGFsbCBzdGVwIHR5cGVzIChzdGVwTnVtYmVyIFwiMTAuM1wiIHBhcnNlcyB3cm9uZylcbiAgICBpbnN0YW5jZS5pc05lc3RlZCA9IHRoaXMuaXNOZXN0ZWQ7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVMb29wID0gdGhpcy5pc0luc2lkZUxvb3A7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVTdGVwR3JvdXAgPSB0aGlzLmlzSW5zaWRlU3RlcEdyb3VwO1xuICAgIGluc3RhbmNlLmlzUmVvcmRlciA9IHRoaXMuaXNSZW9yZGVyO1xuICAgIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RpbmdMZXZlbCA9IHRoaXMubmVzdGluZ0xldmVsO1xuICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzRHVwbGljYXRpbmcgPSB0aGlzLmlzRHVwbGljYXRpbmc7XG4gICAgKGluc3RhbmNlIGFzIGFueSkuZWRpdGFibGUgPSB0aGlzLmVkaXRhYmxlICE9PSBmYWxzZTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0ZXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSAhPT0gJ3N0ZXBUeXBlJyAmJiBrZXkgIT09ICduZXN0ZWRTdGVwcycgJiYga2V5ICE9PSAnYnJhbmNoZXMnKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSAodGhpcy5zdGVwIGFzIGFueSlba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzKSAoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcztcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzKSAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcztcblxuICAgIC8vIFBhc3MgZGF0YSBwcm9maWxlIGlucHV0cyB0byBzdGVwIGluc3RhbmNlcyB0aGF0IGNhbiBjb250YWluIG5lc3RlZCBsb29wIHN0ZXBzXG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwKSB8fCBpc0NvbmRpdGlvblN0ZXBDb25maWcodGhpcy5zdGVwKSB8fCBpc1N0ZXBHcm91cENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5kYXRhUHJvZmlsZU9wdGlvbnMgPSB0aGlzLmRhdGFQcm9maWxlT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmhhc01vcmVEYXRhUHJvZmlsZXMgPSB0aGlzLmhhc01vcmVEYXRhUHJvZmlsZXM7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0xvYWRpbmdEYXRhUHJvZmlsZXMgPSB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcztcbiAgICAgIC8vIEFsc28gcGFzcyBuYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIChmb3IgbmVzdGVkIGxvb3Agc3RlcHMgd2l0aCB3aGlsZSBsb29wIGFuZCBjb25kaXRpb24gc3RlcHMpXG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgLy8gUGFzcyBhZGRTdGVwQmV0d2VlbiBpbnB1dHMgdG8gbmVzdGVkIHN0ZXAgY29tcG9uZW50c1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWRkU3RlcEJldHdlZW5BYm92ZSA9IHRoaXMuYWRkU3RlcEJldHdlZW5BYm92ZTtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFkZFN0ZXBCZXR3ZWVuQmVsb3cgPSB0aGlzLmFkZFN0ZXBCZXR3ZWVuQmVsb3c7XG4gICAgICAvLyBLZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBkZXByZWNhdGVkIGFkZFN0ZXBCZXR3ZWVuXG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5hZGRTdGVwQmV0d2VlbiA9IHRoaXMuYWRkU3RlcEJldHdlZW47XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5lZGl0YWJsZSA9IHRoaXMuZWRpdGFibGUgIT09IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBQYXNzIG5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgYW5kIHRlbXBsYXRlIHZhcmlhYmxlcyBmdW5jdGlvbiB0byBsb29wIHN0ZXBzIChmb3Igd2hpbGUgbG9vcCBjb25kaXRpb24sIHNhbWUgYXMgY29uZGl0aW9uLXN0ZXApXG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB9XG4gICAgXG4gICAgLy8gUGFzcyBuYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIGFuZCB0ZW1wbGF0ZSB2YXJpYWJsZXMgZnVuY3Rpb24gdG8gY29uZGl0aW9uIHN0ZXBzXG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHRoaXMud2lyZU91dHB1dHMoaW5zdGFuY2UpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2lyZU91dHB1dHMoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xuICAgIC8vIFN0b3JlIHN1YnNjcmlwdGlvbnMgb24gdGhlIGluc3RhbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlc1xuICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zO1xuICAgIFxuICAgIGNvbnN0IHdpcmUgPSAoa2V5OiBzdHJpbmcsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+KSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2Vba2V5XSAmJiB0eXBlb2YgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU3ViID0gc3Vic2NyaXB0aW9ucy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgICAgZXhpc3RpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBzdWJzY3JpcHRpb25cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIGVtaXR0ZXIuZW1pdCh2KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KGtleSwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpcmUoJ25lc3RlZFN0ZXBDaGFuZ2UnLCB0aGlzLm5lc3RlZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnYnJhbmNoJyBpbiB2KSB0aGlzLmFkZFN0ZXBGb3JCcmFuY2guZW1pdCh2KTtcbiAgICAgICAgZWxzZSBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnbG9vcFN0ZXBDb25maWcnIGluIHYpIHRoaXMuYWRkU3RlcEZvckxvb3AuZW1pdCh2KTtcbiAgICAgICAgZWxzZSB0aGlzLmFkZFN0ZXAuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXAnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdicmFuY2gnIGluIHYgJiYgJ3N0ZXBJbmRleCcgaW4gdikgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaC5lbWl0KHYpO1xuICAgICAgICBlbHNlIHRoaXMuZGVsZXRlU3RlcC5lbWl0KHYpO1xuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgndG9nZ2xlRXhwYW5kZWQnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGJvb2xlYW4gYW5kIG9iamVjdCBmb3JtYXRzXG4gICAgICAgIC8vIElmIGl0J3MgYW4gb2JqZWN0IHdpdGggY29uZmlnIGFuZCBleHBhbmRlZCwgZW1pdCBpdCBhcy1pc1xuICAgICAgICAvLyBJZiBpdCdzIGp1c3QgYSBib29sZWFuLCBlbWl0IGl0IGFzLWlzXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2dyb3VwTmFtZUNoYW5nZScsIHRoaXMuZ3JvdXBOYW1lQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVzY3JpcHRpb25DaGFuZ2UnLCB0aGlzLmRlc2NyaXB0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgncmV1c2FibGVDaGFuZ2UnLCB0aGlzLnJldXNhYmxlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnb3BlbkV4dGVybmFsJywgdGhpcy5vcGVuRXh0ZXJuYWwgYXMgYW55KTtcbiAgICB3aXJlKCdlZGl0Jywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgZW1pdHMgdm9pZCBvciBub3RoaW5nLCB1c2UgY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgYWxyZWFkeSBlbWl0cyBhbiBvYmplY3QsIG1lcmdlIGl0IHdpdGggc3RlcCBhbmQgaW5kZXhcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ3N0ZXAnIGluIHYgJiYgJ2luZGV4JyBpbiB2KSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSBoYXMgc3RlcCBhbmQgaW5kZXgsIGVtaXQgYXMtaXNcbiAgICAgICAgICB0aGlzLmVkaXQuZW1pdCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbWl0IHdpdGggY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgc3RlcDogdGhpcy5zdGVwLCBpbmRleDogdGhpcy5pbmRleCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgnbGluaycsIHRoaXMubGluayBhcyBhbnkpO1xuICAgIHdpcmUoJ2R1cGxpY2F0ZScsIHRoaXMuZHVwbGljYXRlIGFzIGFueSk7XG4gICAgLy8gV2lyZSBkZWxldGUgZXZlbnQgLSBpbnRlcmNlcHQgYW5kIGVtaXQgd2l0aCBzdGVwIGRhdGEgKGZvcndhcmQgcGF5bG9hZCB3aGVuIGNoaWxkIGVtaXRzIHsgc3RlcCB9IGZvciBuZXN0ZWQgZGVsZXRlcylcbiAgICBpZiAoaW5zdGFuY2UuZGVsZXRlICYmIHR5cGVvZiBpbnN0YW5jZS5kZWxldGUuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdkZWxldGUnKTtcbiAgICAgIGlmIChleGlzdGluZ1N1Yikge1xuICAgICAgICBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsZXRlU3ViID0gaW5zdGFuY2UuZGVsZXRlLnN1YnNjcmliZSgodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYuc3RlcCkge1xuICAgICAgICAgIC8vIEEgbmVzdGVkIHN0ZXAgaXMgcHJvcGFnYXRpbmcgaXRzIG93biBkZWxldGlvbiAoZS5nLiBub3JtYWwgc3RlcCBpbnNpZGUgYSBsb29wIGluc2lkZSBhIGJyYW5jaCkuXG4gICAgICAgICAgLy8gRm9yd2FyZCBpdCBzbyBpdCBidWJibGVzIHVwIHRvIHN0ZXAtbGlzdCBmb3IgY29ycmVjdCBzaW5nbGUtc3RlcCBkZWxldGlvbiwgZG8gTk9UIHRyZWF0IGFzIHBhcmVudCBzdGVwIGRlbGV0aW9uLlxuICAgICAgICAgIHRoaXMuZGVsZXRlLmVtaXQodik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5icmFuY2ggIT0gbnVsbCAmJiB0aGlzLmluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgY3VycmVudCBzdGVwIChkaXJlY3RseSBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoKSBpcyBkZWxldGluZyBpdHNlbGYuXG4gICAgICAgICAgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaC5lbWl0KHsgYnJhbmNoOiB0aGlzLmJyYW5jaCwgc3RlcEluZGV4OiB0aGlzLmluZGV4IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVsZXRlLmVtaXQoeyBzdGVwOiB0aGlzLnN0ZXAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQoJ2RlbGV0ZScsIGRlbGV0ZVN1Yik7XG4gICAgfVxuICAgIHdpcmUoJ3ZpZXdEZXRhaWxzJywgdGhpcy52aWV3RGV0YWlscyBhcyBhbnkpO1xuICAgIHdpcmUoJ3NlbGVjdGlvbkNoYW5nZScsIHRoaXMuc2VsZWN0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnY29uZGl0aW9uQ2hhbmdlJywgdGhpcy5jb25kaXRpb25DaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdicmFuY2hTdGVwQ2hhbmdlJywgdGhpcy5icmFuY2hTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcEZvckJyYW5jaCcsIHRoaXMuYWRkU3RlcEZvckJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXBXaXRoQnJhbmNoJywgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZEJyYW5jaCcsIHRoaXMuYWRkQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkRWxzZScsIHRoaXMuYWRkRWxzZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZUJyYW5jaCcsIHRoaXMuZGVsZXRlQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcEZvckxvb3AnLCB0aGlzLmFkZFN0ZXBGb3JMb29wIGFzIGFueSk7XG4gICAgd2lyZSgndGVzdERhdGFQcm9maWxlQ2hhbmdlJywgdGhpcy50ZXN0RGF0YVByb2ZpbGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdzdGFydFN0ZXBDaGFuZ2UnLCB0aGlzLnN0YXJ0U3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2VuZFN0ZXBDaGFuZ2UnLCB0aGlzLmVuZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdtYXhJdGVyYXRpb25zQ2hhbmdlJywgdGhpcy5tYXhJdGVyYXRpb25zQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZXZlbnRUeXBlQ2hhbmdlJywgdGhpcy5ldmVudFR5cGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdwYXJhbWV0ZXJDaGFuZ2UnLCB0aGlzLnBhcmFtZXRlckNoYW5nZSBhcyBhbnkpO1xuICAgIC8vIFdpcmUgY2xpY2tBY3Rpb24gLSB3cmFwIE1vdXNlRXZlbnQgd2l0aCBzdGVwIGRhdGFcbiAgICBpZiAoaW5zdGFuY2UuY2xpY2tBY3Rpb24gJiYgdHlwZW9mIGluc3RhbmNlLmNsaWNrQWN0aW9uLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZXhpc3RpbmdTdWIgPSBzdWJzY3JpcHRpb25zLmdldCgnY2xpY2tBY3Rpb24nKTtcbiAgICAgIGlmIChleGlzdGluZ1N1Yikge1xuICAgICAgICBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpY2tBY3Rpb25TdWIgPSBpbnN0YW5jZS5jbGlja0FjdGlvbi5zdWJzY3JpYmUoKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgZW1pdHMgYW4gb2JqZWN0IHdpdGggZXZlbnQgYW5kIHN0ZXAsIHVzZSBpdDsgb3RoZXJ3aXNlIHdyYXAgTW91c2VFdmVudCB3aXRoIGN1cnJlbnQgc3RlcFxuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnZXZlbnQnIGluIHYgJiYgJ3N0ZXAnIGluIHYpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrQWN0aW9uLmVtaXQodik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXNzdW1lIHYgaXMgYSBNb3VzZUV2ZW50LCB3cmFwIGl0IHdpdGggY3VycmVudCBzdGVwXG4gICAgICAgICAgdGhpcy5jbGlja0FjdGlvbi5lbWl0KHsgZXZlbnQ6IHYgYXMgTW91c2VFdmVudCwgc3RlcDogdGhpcy5zdGVwIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KCdjbGlja0FjdGlvbicsIGNsaWNrQWN0aW9uU3ViKTtcbiAgICB9XG4gICAgd2lyZSgnZG5kRHJvcEluWm9uZScsIHRoaXMuZG5kRHJvcEluWm9uZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2xvYWRNb3JlRGF0YVByb2ZpbGVzJywgdGhpcy5sb2FkTW9yZURhdGFQcm9maWxlcyBhcyBhbnkpO1xuICAgIHdpcmUoJ3NlYXJjaERhdGFQcm9maWxlcycsIHRoaXMuc2VhcmNoRGF0YVByb2ZpbGVzIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcEJldHdlZW5DbGljaycsIHRoaXMuYWRkU3RlcEJldHdlZW5DbGljayBhcyBhbnkpO1xuICAgIC8vIFdpcmUgZWRpdEluRGVwdGggLSBjaGVjayBpZiBpdCBleGlzdHMgb24gaW5zdGFuY2VcbiAgICBpZiAoaW5zdGFuY2UuZWRpdEluRGVwdGggJiYgdHlwZW9mIGluc3RhbmNlLmVkaXRJbkRlcHRoLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZXhpc3RpbmdTdWIgPSBzdWJzY3JpcHRpb25zLmdldCgnZWRpdEluRGVwdGgnKTtcbiAgICAgIGlmIChleGlzdGluZ1N1Yikge1xuICAgICAgICBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZWRpdEluRGVwdGhTdWIgPSBpbnN0YW5jZS5lZGl0SW5EZXB0aC5zdWJzY3JpYmUoKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgZW1pdHMgYW4gb2JqZWN0IHdpdGggc3RlcCwgdXNlIGl0OyBvdGhlcndpc2UgdXNlIGN1cnJlbnQgc3RlcCBhbmQgaW5kZXhcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ3N0ZXAnIGluIHYpIHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkOiB7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgaW5kZXg6IG51bWJlcjsgdGVtcGxhdGVPdmVycmlkZT86IGFueTsgaXNDcmVhdGVNb2RlPzogYm9vbGVhbiB9ID0ge1xuICAgICAgICAgICAgc3RlcDogdi5zdGVwLFxuICAgICAgICAgICAgaW5kZXg6IHYuaW5kZXggPz8gdGhpcy5pbmRleCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh2LnRlbXBsYXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHBheWxvYWQudGVtcGxhdGVPdmVycmlkZSA9IHYudGVtcGxhdGVPdmVycmlkZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYuaXNDcmVhdGVNb2RlKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzQ3JlYXRlTW9kZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdChwYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVkaXRJbkRlcHRoLmVtaXQoeyBzdGVwOiB0aGlzLnN0ZXAsIGluZGV4OiB0aGlzLmluZGV4IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KCdlZGl0SW5EZXB0aCcsIGVkaXRJbkRlcHRoU3ViKTtcbiAgICB9XG4gICAgLy8gV2lyZSBzdGVwVXBkYXRlIC0gY2hlY2sgaWYgaXQgZXhpc3RzIG9uIGluc3RhbmNlXG4gICAgaWYgKGluc3RhbmNlLnN0ZXBVcGRhdGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdSZW5kZXJlcjogRm91bmQgc3RlcFVwZGF0ZSBFdmVudEVtaXR0ZXIsIHdpcmluZyBpdCcpO1xuICAgICAgd2lyZSgnc3RlcFVwZGF0ZScsIHRoaXMuc3RlcFVwZGF0ZSBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1JlbmRlcmVyOiBzdGVwVXBkYXRlIEV2ZW50RW1pdHRlciBub3QgZm91bmQgb24gaW5zdGFuY2UgZHVyaW5nIHdpcmVPdXRwdXRzJywge1xuICAgICAgICBzdGVwSWQ6IHRoaXMuc3RlcD8uaWQsXG4gICAgICAgIHN0ZXBUeXBlOiB0aGlzLnN0ZXA/LnN0ZXBUeXBlLFxuICAgICAgICBpbnN0YW5jZUtleXM6IE9iamVjdC5rZXlzKGluc3RhbmNlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gQ2xlYW4gdXAgc3Vic2NyaXB0aW9ucyB3aGVuIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlKSB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnM7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9ucykge1xuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHN1YiAmJiB0eXBlb2Ygc3ViLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdWJzY3JpcHRpb25zLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmUgY3FhLXN0ZXAtcmVuZGVyZXItaG92ZXItY29udGFpbmVyXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlICYmICFpc1Jlb3JkZXIgJiYgKGFkZFN0ZXBCZXR3ZWVuQWJvdmUgJiYgYWRkU3RlcEJldHdlZW4pXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXRvcC1bY2FsYygwIC0gMTJweCldIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXAtMCBjcWEtei1bMV0gY3FhLWFkZC1zdGVwLWJldHdlZW4tYnRuXCJcbiAgICAgICAgc3R5bGU9XCJ0b3A6IC0xMnB4O1wiIChjbGljayk9XCJhZGRTdGVwQmV0d2VlbkNsaWNrLmVtaXQoe3N0ZXA6IHN0ZXAsIGluZGV4OiBpbmRleCwgcG9zaXRpb246ICdBQk9WRSd9KVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguNSAxMkgxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDguNVYxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RlcC1ob3N0LXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjc3RlcEhvc3Q+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlICYmICFpc1Jlb3JkZXIgJiYgKGFkZFN0ZXBCZXR3ZWVuQmVsb3cgJiYgYWRkU3RlcEJldHdlZW4pXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXRvcC1bY2FsYygxMDAlLTEycHgpXSBjcWEtbGVmdC1bNTAlXSBjcWEtdHJhbnNsYXRlLXgtWy01MCVdIGNxYS1wLTAgY3FhLXotWzFdIGNxYS1hZGQtc3RlcC1iZXR3ZWVuLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJhZGRTdGVwQmV0d2VlbkNsaWNrLmVtaXQoe3N0ZXA6IHN0ZXAsIGluZGV4OiBpbmRleCwgcG9zaXRpb246ICdCRUxPVyd9KVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguNSAxMkgxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDguNVYxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+Il19
|