@rangertechnologies/ngnxt 2.1.246 → 2.1.248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/environments/version.mjs +2 -2
- package/esm2022/lib/components/button/nxt-button.component.mjs +1 -2
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +3 -7
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +11 -28
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +11 -15
- package/esm2022/lib/components/datatable/datatable.component.mjs +45 -40
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +16 -4
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +18 -6
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +11 -15
- package/esm2022/lib/components/search-box/search-box.component.mjs +76 -37
- package/esm2022/lib/interfaces/apimeta.mjs +1 -1
- package/esm2022/lib/interfaces/dependencyMeta.mjs +1 -1
- package/esm2022/lib/model/changeWrapper.mjs +1 -2
- package/esm2022/lib/pages/booklet/booklet.component.mjs +2 -2
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +35 -9
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +1 -3
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +27 -43
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +10 -28
- package/esm2022/lib/pipe/get-value.pipe.mjs +22 -17
- package/esm2022/lib/services/form-builder.service.mjs +20 -7
- package/esm2022/lib/services/storage.service.mjs +17 -1
- package/fesm2022/rangertechnologies-ngnxt.mjs +345 -284
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/custom-calendar/custom-calendar.component.d.ts +0 -1
- package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +0 -1
- package/lib/components/datatable/datatable.component.d.ts +1 -1
- package/lib/components/pick-location/pick-location.component.d.ts +0 -1
- package/lib/components/search-box/search-box.component.d.ts +7 -2
- package/lib/interfaces/apimeta.d.ts +1 -1
- package/lib/interfaces/dependencyMeta.d.ts +1 -1
- package/lib/model/changeWrapper.d.ts +0 -1
- package/lib/pages/questionbook/questionbook.component.d.ts +0 -1
- package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -1
- package/lib/services/storage.service.d.ts +5 -0
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.248.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.246.tgz +0 -0
|
@@ -316,7 +316,7 @@ export class BookletComponent {
|
|
|
316
316
|
}
|
|
317
317
|
else {
|
|
318
318
|
currentBook.subQuestions.forEach(ele => {
|
|
319
|
-
if (ques?.id
|
|
319
|
+
if (Array.isArray(ele?.subText?.sourceQuestionId) ? ele?.subText?.sourceQuestionId.includes(ques?.id) : ques?.id === ele?.subText?.sourceQuestionId) {
|
|
320
320
|
dependentElementArray.push(ele.id);
|
|
321
321
|
}
|
|
322
322
|
});
|
|
@@ -670,4 +670,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
670
670
|
type: ViewChild,
|
|
671
671
|
args: ['questionbook']
|
|
672
672
|
}] } });
|
|
673
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2xldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYm9va2xldC9ib29rbGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9ib29rbGV0L2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFJWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFZdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBYTdDLE1BQU0sT0FBTyxnQkFBZ0I7SUE0Q2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWhERCxTQUFTLENBQVM7SUFDbEIsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1osV0FBVyxDQUFNO0lBQ2pCLFFBQVEsQ0FBTSxDQUFDLDBDQUEwQztJQUN6RCxVQUFVLENBQVMsQ0FBQywwQ0FBMEM7SUFDOUQsVUFBVSxDQUFTLENBQUMsMENBQTBDO0lBQzlELHFCQUFxQixDQUFNO0lBQzNCLFVBQVUsQ0FBUztJQUNuQixLQUFLLENBQVM7SUFDZCxZQUFZLENBQVMsQ0FBRSxtQ0FBbUM7SUFDMUQsaUJBQWlCLENBQU0sQ0FBQyx1Q0FBdUM7SUFDL0QsSUFBSSxDQUFNLENBQUMsZ0NBQWdDO0lBQzNDLE1BQU0sQ0FBTSxDQUFDLDZFQUE2RTtJQUMxRixNQUFNLENBQVcsQ0FBQyxrQ0FBa0M7SUFFbkQsd0JBQXdCLEdBQXNCLElBQUksWUFBWSxFQUFF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QUFxQjs7NEZBS1osZ0JBQWdCO2tCQVg1QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLHFCQUFxQjtxQkFDdEI7Nk5BS1EsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQWdCRSxRQUFRO3NCQUFoQixLQUFLO2dCQUdxQixxQkFBcUI7c0JBQS9DLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgRWxlbWVudFJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBBY3Rpb25NZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb25NZXRhJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uLy4uL3dyYXBwZXJcIjtcbmltcG9ydCB7IEJvb2tsZXRXcmFwcGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL2Jvb2tsZXRXcmFwcGVyXCI7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IFF1ZXN0aW9uYm9va0NvbXBvbmVudCB9IGZyb20gXCIuLi9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWJvb2tsZXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFF1ZXN0aW9uYm9va0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9va2xldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Jvb2tsZXQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJvb2tsZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBib29rbGV0SWQ6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYm9va2xldEpTT046IGFueTtcbiAgQElucHV0KCkgYWxsSWNvbnM6IGFueTsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIEBJbnB1dCgpIHRoZW1lQ29sb3I6IHN0cmluZzsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIEBJbnB1dCgpIGNkbkljb25VUkw6IHN0cmluZzsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIEBJbnB1dCgpIGRyb3Bkb3duRGVwZW5kZW50RGF0YTogYW55O1xuICBASW5wdXQoKSBsYWJlbFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhbmd1YWdlQ29kZTogc3RyaW5nOyAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgQElucHV0KCkgZmllbGRSZXN0cmljdGlvbnM6IGFueTsgLy8gVkQgMTJKdW4yNCAtIGZpZWxkIHBlcm1pc3Npb24gY2hhbmdlXG4gIEBJbnB1dCgpIGZyb206IGFueTsgLy8gRm9ybSBCdWlsZGVyIGRlcGVuZGVudCBjaGFuZ2VcbiAgQElucHV0KCkgYXBpVXJsOiBhbnk7IC8vIEFQLTE2QVBSMjUgSW5wdXQgcHJvcGVydHkgdG8gcmVjZWl2ZSB0aGUgQVBJIFVSTCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gIEBJbnB1dCgpIGlzRWRpdDogYm9vbGVhbiA7IC8vIEFQLTE5TUFZMjUgLSBBZGRlZCBpc0VkaXQgaW5wdXRcblxuICBAT3V0cHV0KCkgaGFuZGxlQm9va2xldEFjdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFkbGVEcm9wRG93bkRlcGVuZGVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyBueHRCb29rbGV0OiBCb29rbGV0V3JhcHBlcjtcblxuICBwdWJsaWMgYm9va2xldDogYW55W10gPSBbXTtcbiAgcHVibGljIGFiSXRlbTogYW55ID0ge307XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25NZXRhW10gPSBbXTtcbiAgcHVibGljIGJvb2tRdWVzdGlvbnNNYXA6IGFueSA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHRyYW5zbGF0ZU1hcDogYW55ID0gbmV3IE1hcCgpOyAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgcHJpdmF0ZSBzcU9wdGlvbnM6IGFueSA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGlzQW5zd2VyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3Bpbm5lck5hbWU6IHN0cmluZztcbiAgcHVibGljIHNwaW5uZXJUeXBlOiBzdHJpbmc7XG4gIC8vIEhBIDE5REVDMjMgbGFuZ0RpcmVjdGlvbiB2YXJpYWJsZSBpcyBjcmVhdGVkIHRvIGFzc2lnbiB0aGUgZGlyZWN0aW9uIGFzIGNsYXNzXG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJzsgLy8gSEEgMjhERUMyMyBtYWtpbmcgbHRyIGFzIGRlZmF1bHQgZGlyZWN0aW9uXG4gIGFuc3dlckxpc3QgPSBbXTsgLy8gSEEgMTEtSkFOLTI0IEFuc3dlcmxpc3QgdG8gc3RvcmUgdGhlIG1pbmltYWwgdmFsdWVcbiAgQElucHV0KCkgZGF0YUJpbmQ6IGFueTsvLyBIQSAxOC1KQU4tMjQgVG8gaW5zZXJ0IHRoZSBlbmRwb2ludCB2YWx1ZSB0byB0aGUgcXVlc3Rpb25cbiAgYWxsRXZlbnRzOiBhbnlbXSA9IFtdOyAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIC8vQVAtMTlNQVkyNSAtIEFjY2Vzc2luZyB0aGUgUXVlc3Rpb25ib29rQ29tcG9uZW50IGluc3RhbmNlIHVzaW5nIFZpZXdDaGlsZCByZWZlcmVuY2VcbiAgQFZpZXdDaGlsZCgncXVlc3Rpb25ib29rJykgcXVlc3Rpb25ib29rQ29tcG9uZW50ITogUXVlc3Rpb25ib29rQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XG4gICAgdGhpcy5zcGlubmVyVHlwZSA9IFwiYmFsbC1zcGluLWNsb2Nrd2lzZVwiO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzQm9va2xldCgpO1xuICAgIC8vQVAtMTZBUFIyNSAvLyBHZXQgdGhlIGR5bmFtaWMgQVBJIFVSTCBhbmQgcGFzcyBpdCB0byB0aGUgc2VydmljZSBtZXRob2RcbiAgICBsZXQgYXBpZGF0YSA9ICB0aGlzLmFwaVVybDtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaWtleShhcGlkYXRhKTtcbiAgfVxuICAvLyBWRCBOT1YyMyAtIHVwZGF0ZSB0aGUganNvbiBkYXRhIHdoZW4gYm9va2xldElkIGFuZCBib29rbGV0SlNPTiBjaGFuZ2VzXG4gIG5nT25DaGFuZ2VzKHNpbXBsZWNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAvLyBIQSAyM0pBTjI0IFRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxuICAgIGlmIChzaW1wbGVjaGFuZ2VzWydib29rbGV0SWQnXSB8fCAoc2ltcGxlY2hhbmdlc1snYm9va2xldEpTT04nXSAmJiBzaW1wbGVjaGFuZ2VzWydib29rbGV0SlNPTiddLmN1cnJlbnRWYWx1ZSAhPSBudWxsKSB8fCAoc2ltcGxlY2hhbmdlc1snZGF0YUJpbmQnXSAmJiBzaW1wbGVjaGFuZ2VzWydkYXRhQmluZCddLmN1cnJlbnRWYWx1ZSAhPSBudWxsKSkge1xuICAgICAgdGhpcy5hbGxFdmVudHMgPSBbXTtcbiAgICAgIHRoaXMucHJvY2Vzc0Jvb2tsZXQoKTtcbiAgICB9XG4gICAgLy9BUC0xOU1BWTI1IC0gSWYgYm9va2xldEpTT04gaW5wdXQgY2hhbmdlcywgdHJpZ2dlciBwcm9jZXNzRGF0YSBvbiBRdWVzdGlvbmJvb2tDb21wb25lbnRcbiAgICBpZiAoc2ltcGxlY2hhbmdlc1snYm9va2xldEpTT04nXSkge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gc2ltcGxlY2hhbmdlc1snYm9va2xldEpTT04nXS5jdXJyZW50VmFsdWU7XG4gICAgLy9BUC0yOE1BWTI1IC0gSWYgdGhlIGFjdGlvbiBpcyBhIHN0cmluZywgdXBncmFkZSBpdCB0byB0aGUgbmV3IGFjdGlvbiBtb2RlbCAoYXJyYXkgb2Ygb2JqZWN0cylcbiAgICAgIGlmIChjdXJyZW50VmFsdWU/LnF1ZXN0aW9uYm9vaz8uYWN0aW9uICYmIHR5cGVvZiBjdXJyZW50VmFsdWUucXVlc3Rpb25ib29rLmFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY3VycmVudFZhbHVlLnF1ZXN0aW9uYm9vay5hY3Rpb24gPSB0aGlzLnVwZ3JhZGVBY3Rpb25zKGN1cnJlbnRWYWx1ZS5xdWVzdGlvbmJvb2suYWN0aW9uKTtcbiAgICAgIH0gIFxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25ib29rQ29tcG9uZW50KXtcbiAgICAgICAgdGhpcy5xdWVzdGlvbmJvb2tDb21wb25lbnQucHJvY2Vzc0RhdGEoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBBUC0yOE1BWTI1IC0gQ29udmVydHMgb2xkIGFjdGlvbiBzdHJpbmcgKEpTT04pIGludG8gYSBuZXcgbW9kZWwgKGFycmF5IG9mIGFjdGlvbiBvYmplY3RzKVxuICB1cGdyYWRlQWN0aW9ucyhhY3Rpb25TdHJpbmc6IHN0cmluZyk6IGFueVtdIHtcbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBhY3Rpb24gc3RyaW5nIHRvIEpTT05cbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoYWN0aW9uU3RyaW5nKTtcbiAgLy8gQVAtMjhNQVkyNSBJZiBwYXJzZWQgcmVzdWx0IGlzIGFuIGFycmF5LCBhcHBseSBkZWZhdWx0IHN0eWxlcyBhbmQgYWRqdXN0IHBvc2l0aW9uXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIHBvc2l0aW9uUGVyY2VudDogaXRlbS5uYW1lID09PSAnQ2FuY2VsJyA/IDMgOiAxNCwgLy8gU2V0IHBvc2l0aW9uIGJhc2VkIG9uIGFjdGlvbiBuYW1lXG4gICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICB0ZXh0Q29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgICAgICAgaWQ6IGluZGV4XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBKU09OIGFjdGlvbiBmb3JtYXRcIiwgZSk7XG4gICAgfVxuICBcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcm9jZXNzQm9va2xldCgpIHsgXG4gICAgaWYgKHRoaXMuYm9va2xldElkKSB7XG4gICAgICBpZiAodGhpcy5ib29rbGV0SWQubGVuZ3RoID09IDE4KSB7XG4gICAgICAgIHRoaXMucmVhZEJvb2tsZXQodGhpcy5ib29rbGV0SWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5ib29rbGV0SlNPTikge1xuICAgICAgLy8gVHJ5IHRvIHBhc3MgYSB2YWx1ZSBmcm9tIEJhY2tlbmQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgUXVlc3Rpb25Cb29rIFJlYWQgYW5kIEFuc3dlckJvb2sgUmVhZFxuICAgICAgdGhpcy5pc0Fuc3dlckZsYWcgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5ib29rbGV0SlNPTiAhPSBudWxsICYmIHRoaXMuYm9va2xldEpTT04gIT0gdW5kZWZpbmVkICYmIHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXApIHtcbiAgICAgICAgLy8gU0tTMjhNQVIyNSBnZXQgdGhlIG5lc3RlZCByZWZlcmVuY2UgcWIgXG4gICAgICAgIGxldCB0ZW1wYm9vayA9IHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXBbT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcClbMF1dLnN1YlF1ZXN0aW9ucztcbiAgICAgICAgdGVtcGJvb2suZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwiYm9va1wiICYmIGVsZW1lbnQ/LnFiUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmdldFJlZlFiRGF0YShlbGVtZW50Py5xYlJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddID0gcmVzcG9uc2U7IC8vIEFzc2lnbiByZXNwb25zZSB0byBxYlJlZmVyZW5jZVF1ZXN0aW9uc1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQVBJIEVycm9yOlwiLCBlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ib29rbGV0SlNPTlsnYm9va1F1ZXN0aW9uc01hcCddW09iamVjdC5rZXlzKHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXApWzBdXS5zdWJRdWVzdGlvbnMgPSB0ZW1wYm9va1xuICAgICAgICAvLyBTdG9yaW5nIHRoZSBBUEkgcmVzcG9uc2UgZm9yIGZ1dHVyZSB1c2VcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlKHRoaXMuYm9va2xldEpTT04pO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIHRoZSBTdWIgUXVlc3Rpb24gT3B0aW9ucyAtIFRoaXMgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGJvb2tRdWVzdGlvbnNNYXAgaW4gZnV0dXJlXG4gICAgICBmb3IgKHZhciBzcSBpbiB0aGlzLmJvb2tsZXRKU09OPy5zcU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zcU9wdGlvbnMuc2V0KHNxLCB0aGlzLmJvb2tsZXRKU09OPy5zcU9wdGlvbnNbc3FdKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyB0aGUgUXVlc3Rpb25zXG4gICAgICAvLyBIQSAyOERFQzIzIHRoaXMgYXBwbGllcyBmb3IgYm9va2xldFxuICAgICAgLy8gSEEgMTdKQU4yNCBBZGRlZCB0ZXJuYXJ5IG9wZXJhdG9yIHRvIGF2b2lkIHVuZGVmaW5lZCBzY2VuYXJpb1xuICAgICAgLy8gSEEgMDlGRUIyNCBBZGRpbmcgY29uZGl0aW9uIHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxuICAgICAgaWYgKHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXAgJiYgT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcCkubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKHZhciB2YWx1ZSBpbiB0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwKSB7XG4gICAgICAgICAgdGhpcy5ib29rUXVlc3Rpb25zTWFwLnNldCh2YWx1ZSwgdGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcFt2YWx1ZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBIQSAyOERFQzIzIHRoaXMgYXBwbGllcyBmb3IgYm9vayBvciBxdWVzdGlvbnNcbiAgICAgIGVsc2UgaWYodGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkcykge1xuICAgICAgICB2YXIgdmFsdWUgPSAnJztcbiAgICAgICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XG4gICAgICAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gICAgICAgIHZhbHVlID0gdGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkc1swXT8uaWQ7XG4gICAgICAgIHRoaXMuYm9va1F1ZXN0aW9uc01hcC5zZXQodmFsdWUsIHRoaXMuYm9va2xldEpTT04/LnF1ZXN0aW9uYm9vayk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZEIDIwSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICBmb3IgKHZhciB2YWx1ZSBpbiB0aGlzLmJvb2tsZXRKU09OPy50cmFuc2xhdGlvbk1hcCkge1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZU1hcC5zZXQodmFsdWUsIHRoaXMuYm9va2xldEpTT04/LnRyYW5zbGF0aW9uTWFwW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgICAvLyBBUCAyM01BWTI1IC0gc3VwcG9ydHMgYm90aCBzdHJpbmdpZmllZCBhbmQgb2JqZWN0IGZvcm1hdHNcbiAgICAgIGlmICh0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2s/LmFjdGlvbiAhPSB1bmRlZmluZWQgJiYgdGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5hY3Rpb24gIT0gJycpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdHlwZW9mIHRoaXMuYm9va2xldEpTT04/LnF1ZXN0aW9uYm9vay5hY3Rpb24gPT09ICdzdHJpbmcnXG4gICAgICAgID8gSlNPTi5wYXJzZSh0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2suYWN0aW9uKVxuICAgICAgICA6IHRoaXMuYm9va2xldEpTT04/LnF1ZXN0aW9uYm9vay5hY3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhBIDE5REVDMjMgbGFuZ0RpcmVjdGlvbiB2YXJpYWJsZSB2YWx1ZSBhc3NpZ25pbmdcbiAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgIGlmICh0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2s/LnN0eWxlKSB7XG4gICAgICB2YXIgc3R5bGUgPSB0eXBlb2YgdGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5zdHlsZSA9PT0gJ29iamVjdCcgPyB0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2s/LnN0eWxlIDogSlNPTi5wYXJzZSh0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2s/LnN0eWxlKTtcbiAgICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHN0eWxlPy5kaXJlY3Rpb247XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYm9va2xldEpTT04/LnJlY29yZHMgJiYgdGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkc1swXT8uc3R5bGUpIHtcbiAgICAgIHZhciBzdHlsZSA9IHR5cGVvZiB0aGlzLmJvb2tsZXRKU09OPy5yZWNvcmRzWzBdPy5zdHlsZSA9PT0gJ29iamVjdCcgPyB0aGlzLmJvb2tsZXRKU09OPy5yZWNvcmRzWzBdPy5zdHlsZSA6IEpTT04ucGFyc2UodGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkc1swXT8uc3R5bGUpO1xuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICAvLyBIQSAxOC1KQU4tMjQgVGhlIGNvbmRpdGlvbiBpcyB1c2VkIGZvciBCaW5kLUluIExvZ2ljIFxuICAgIHRoaXMuaGFuZGxlQ29tcGxldGVCb29rbGV0KHRoaXMuYm9va2xldEpTT04pO1xuICAgIHRoaXMuYm9va2xldCA9IHRoaXMuYm9va2xldEpTT04/LnJlY29yZHM7XG4gICAgdGhpcy5hYkl0ZW0gPSB0aGlzLmJvb2tsZXRKU09OPy5hbnN3ZXJib29rO1xuICB9XG4gIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIHByaXZhdGUgcmVhZEJvb2tsZXQgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAgIHRoaXMudGtuLFxuICAgICAgICBbXCJCb29rbGV0XCIsIFwicmVhZFwiLCB1dWlkLCB0aGlzLmxhbmd1YWdlQ29kZV0sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rbGV0LFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va2xldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgbGV0IHBhcmEgPSB7XG4gICAgICAgIGRhdGFUeXBlOiBcIkJvb2tsZXRcIixcbiAgICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcbiAgICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZVxuICAgICAgfVxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEpXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2tsZXQsXG4gICAgICAgIHRoaXMuZmFpbHVyZVJlYWRCb29rbGV0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc1JlYWRCb29rbGV0ID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlICE9IG51bGwgfHwgcmVzcG9uc2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTdG9yaW5nIHRoZSBBUEkgcmVzcG9uc2UgZm9yIGZ1dHVyZSB1c2VcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZShyZXNwb25zZSk7XG5cbiAgICAgIC8vIFRyeSB0byBwYXNzIGEgdmFsdWUgZnJvbSBCYWNrZW5kIHRvIGRpZmZlcmVudGlhdGUgdGhlIFF1ZXN0aW9uQm9vayBSZWFkIGFuZCBBbnN3ZXJCb29rIFJlYWRcbiAgICAgIC8vIHRoaXMuaXNBbnN3ZXJGbGFnID0gdHJ1ZTtcblxuICAgICAgdGhpcy5ib29rbGV0ID0gcmVzcG9uc2UucmVjb3JkcztcbiAgICAgIHRoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcblxuICAgICAgLy8gUHJvY2VzcyB0aGUgU3ViIFF1ZXN0aW9uIE9wdGlvbnMgLSBUaGlzIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBib29rUXVlc3Rpb25zTWFwIGluIGZ1dHVyZVxuICAgICAgZm9yICh2YXIgc3EgaW4gcmVzcG9uc2Uuc3FPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc3FPcHRpb25zLnNldChzcSwgcmVzcG9uc2Uuc3FPcHRpb25zW3NxXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgdGhlIFF1ZXN0aW9uc1xuICAgICAgZm9yICh2YXIgdmFsdWUgaW4gcmVzcG9uc2UuYm9va1F1ZXN0aW9uc01hcCkge1xuICAgICAgICB0aGlzLmJvb2tRdWVzdGlvbnNNYXAuc2V0KHZhbHVlLCByZXNwb25zZS5ib29rUXVlc3Rpb25zTWFwW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgZm9yICh2YXIgdmFsdWUgaW4gcmVzcG9uc2UudHJhbnNsYXRpb25NYXApIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVNYXAuc2V0KHZhbHVlLCByZXNwb25zZS50cmFuc2xhdGlvbk1hcFt2YWx1ZV0pO1xuICAgICAgfVxuICAgICAgLy8gVkQgMzFOT1YyNCB3cmFwcGVyIGNoYW5nZXNcbiAgICAgIGlmIChyZXNwb25zZS5xdWVzdGlvbmJvb2s/LmFjdGlvbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdHlwZW9mIHJlc3BvbnNlLnF1ZXN0aW9uYm9vaz8uYWN0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgICA/IEpTT04ucGFyc2UocmVzcG9uc2UucXVlc3Rpb25ib29rPy5hY3Rpb24pXG4gICAgICAgIDogcmVzcG9uc2UucXVlc3Rpb25ib29rPy5hY3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhBIDE5REVDMjMgbGFuZ0RpcmVjdGlvbiB2YXJpYWJsZSB2YWx1ZSBhc3NpZ25pbmdcbiAgICBpZiAocmVzcG9uc2U/LnF1ZXN0aW9uYm9vaz8uc3R5bGUpIHtcbiAgICAgIHZhciBzdHlsZSA9IHR5cGVvZiByZXNwb25zZT8ucXVlc3Rpb25ib29rPy5zdHlsZSA9PT0gJ29iamVjdCcgPyByZXNwb25zZT8ucXVlc3Rpb25ib29rPy5zdHlsZSA6IEpTT04ucGFyc2UocmVzcG9uc2U/LnF1ZXN0aW9uYm9vaz8uc3R5bGUpO1xuICAgICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gc3R5bGU/LmRpcmVjdGlvbjtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVzcG9uc2U/LnJlY29yZHNbMF0/LnN0eWxlKSB7XG4gICAgICB2YXIgc3R5bGUgPSB0eXBlb2YgcmVzcG9uc2U/LnJlY29yZHNbMF0/LnN0eWxlID09PSAnb2JqZWN0JyA/IHJlc3BvbnNlPy5yZWNvcmRzWzBdPy5zdHlsZSA6IEpTT04ucGFyc2UocmVzcG9uc2U/LnJlY29yZHNbMF0/LnN0eWxlKTtcbiAgICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHN0eWxlPy5kaXJlY3Rpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmYWlsdXJlUmVhZEJvb2tsZXQgPSAocmVzcG9uc2UpID0+IHtcblxuICB9XG4gIC8vU0tTMjhNQVIyNSBGdW5jdGlvbiB0byBmZXRjaCByZWZxYiBkYXRhXG4gIGdldFJlZlFiRGF0YShyZWZxYmlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYGh0dHBzOi8vZGV2LWFwaS52YWxhcmhyLmNvbS9ueHQ/bmFtZT0ke3JlZnFiaWR9YCk7XG4gIH1cbiAgc2luZ2xlRmllbGRDaGFuZ2UoZXZlbnQ6IGFueSl7XG4gICAgbGV0IGFjdGlvbkJ1dHRvblxuICAgIHRoaXMuYWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICBpZiAoYWN0aW9uLmV2ZW50dG9lbWl0ID09PSAnc3VibWl0Jyl7XG4gICAgICAgIGFjdGlvbkJ1dHRvbiA9IGFjdGlvblxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaGFuZGxlQm9va2xldEFjdGlvbkNsaWNrKGFjdGlvbkJ1dHRvbixldmVudClcbiAgfVxuICBoYW5kbGVCb29rbGV0QWN0aW9uQ2xpY2soYWN0aW9uOiBBY3Rpb25NZXRhLHF1ZXM/OmFueSkge1xuICAgIC8vIEhBIDE5SkFOMjQgQWN0aW9uIGNoYW5nZXNcbiAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgIHRoaXMuYW5zd2VyTGlzdCA9IFtdO1xuICAgIHRoaXMuZGF0YUJpbmQgPSBbXTsgLy8gSEEgMTJGRUIyNCBDbGVhcmluZyBkYXRhQmluZCB1cG9uIGJ1dHRvbiBhY3Rpb24gc28gdGhhdCBkYXRhQmluZCB2YWx1ZSB3aWxsIG5vdCBvdmVycmlkZSB0aGUgY2hhbmdlZCB2YWx1ZVxuICAgIGxldCBkYXRhVG9QYXJlbnQ6YW55ID0ge307XG4gICAgbGV0IHZhbGlkRm9ybSA9IHRydWU7IC8vIFZEIDAxQXVnMjQgLSB2YWxpZGF0aW9uIGNoYW5nZVxuICAgIGxldCBpc1ByaW1hcnlLZXkgPSBmYWxzZTtcbiAgICBsZXQgcHJpbWFyeUtleUVsZW1lbnQ6IGFueTtcbiAgICBsZXQgZGVwZW5kZW50RWxlbWVudEFycmF5IDogYW55W10gPSBbXTtcbiAgICAvLyBIQSAyMkpBTjI0IHRoaXMgY2hhbmdlIHRvIG1ha2UgY2xvc2UgZXZlbnQgd29ya1xuICAgIGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPSBhY3Rpb24uZXZlbnR0b2VtaXQ7XG4gICAgaWYgKCEoYWN0aW9uLmV2ZW50dG9lbWl0ID09PSAnY2xvc2UnIHx8IGFjdGlvbi5ldmVudHRvZW1pdCA9PT0gJ3ByaW50JykpIHtcbiAgICAgIC8vIEhBIDE4LUpBTi0yNCBTZW5kaW5nIHRoZSBjb21wbGV0ZSBqc29uIGRhdGEgYWxzbyBcbiAgICAgIGRhdGFUb1BhcmVudFsnanNvbkJvb2snXSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCk7XG4gICAgICAvLyBIQSAxN0pBTjI0IG54dElkIHRvIGRhdGFQYXJlbnQgb2JqZWN0XG4gICAgICBpZiAodGhpcy5ib29rbGV0SlNPTikge1xuICAgICAgICBkYXRhVG9QYXJlbnRbJ254dElkJ10gPSBPYmplY3Qua2V5cyh0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwKVswXTtcbiAgICAgIH1cbiAgICAgIC8vIEhBIDExLUpBTi0yNCBNaW5pbWl6aW5nIHRoZSB2YWx1ZSB3aGljaCBoYXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBzZXJ2ZXJcbiAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVCb29rbGV0KGRhdGFUb1BhcmVudFsnanNvbkJvb2snXSk7XG4gICAgICBkYXRhVG9QYXJlbnRbJ2RhdGEnXSA9IHRoaXMuYW5zd2VyTGlzdCA/IHRoaXMuYW5zd2VyTGlzdCA6IGRhdGFUb1BhcmVudFsnZGF0YSddO1xuICAgICAgLy8gd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvbiB2YWxpZGF0aW5nIHRoZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhVG9QYXJlbnRbJ2pzb25Cb29rJ10uYm9va1F1ZXN0aW9uc01hcCkge1xuICAgICAgICBjb25zdCBjdXJyZW50Qm9vayA9IGRhdGFUb1BhcmVudFsnanNvbkJvb2snXS5ib29rUXVlc3Rpb25zTWFwW2tleV07XG4gICAgICAgIGN1cnJlbnRCb29rLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmICghaXNQcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudD8ucHJpbWFyeUtleSA9PT0gdHJ1ZSAmJiBlbGVtZW50Py5pbnB1dCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQ/LmlucHV0ICE9PSAnJyAmJiBlbGVtZW50Py5pbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBpc1ByaW1hcnlLZXkgPSB0cnVlO1xuICAgICAgICAgICAgICBwcmltYXJ5S2V5RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDAxQXVnMjQgLSB2YWxpZGF0aW9uIGNoYW5nZVxuICAgICAgICAgIGlmIChlbGVtZW50LmlzT3B0aW9uYWwgJiYgZGF0YVRvUGFyZW50WydhY3Rpb24nXSA9PSAnc3VibWl0JyAmJiAoIWVsZW1lbnQuaW5wdXQgfHwgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5pbnB1dCkgJiYgZWxlbWVudC5pbnB1dC5sZW5ndGggPT09IDApKSAmJiAhZWxlbWVudC5pc0hpZGRlbiAmJiBlbGVtZW50LnR5cGUgIT0gJ0xhYmVsJyAmJiBlbGVtZW50LnR5cGUgIT0gJ0ltYWdlJykgeyAvL1NLUzVOT1YyNSBcbiAgICAgICAgICAgIGVsZW1lbnQuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdmFsaWRGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2Uuc3VibWl0Q2hhbmdlKGVsZW1lbnQuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAwMkF1ZzI0IC0gY2xlYXIgYWN0aW9uIGNoYW5nZXNcbiAgICAgICAgICBpZiAoZGF0YVRvUGFyZW50WydhY3Rpb24nXSA9PSAnY2xlYXInKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09ICdEcm9wZG93bicgfHwgZWxlbWVudC50eXBlID09ICdMb2NhdGlvbicgfHwgZWxlbWVudC50eXBlID09ICdSYWRpbycpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSBbXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZihlbGVtZW50LnR5cGUgPT09IFwiQm9vbGVhblwiKSB7IC8vIFNLUzIzSlVOMjUgZGVmYXVsdGx5IHNldCB2YWx1ZSBmYWxzZVxuICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZihxdWVzPy5zdWJUZXh0Py5zb3VyY2VRdWVzdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcXVlcz8uc3ViVGV4dD8uc291cmNlUXVlc3Rpb25JZCAhPT0gbnVsbCAmJiBxdWVzPy5zdWJUZXh0Py5zb3VyY2VRdWVzdGlvbklkICE9PSAnJyAmJiAhcXVlcz8uc3ViVGV4dD8uaXNEZXBlbmRlbnRGaWVsZCkge1xuXG4gICAgICAgIH0gZWxzZSBpZihxdWVzPy5zdWJUZXh0Py5zb3VyY2VRdWVzdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcXVlcz8uc3ViVGV4dD8uc291cmNlUXVlc3Rpb25JZCAhPT0gbnVsbCAmJiBxdWVzPy5zdWJUZXh0Py5zb3VyY2VRdWVzdGlvbklkICE9PSAnJyAmJiAgcXVlcz8uc3ViVGV4dD8uaXNEZXBlbmRlbnRGaWVsZCl7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50Qm9vay5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGUgPT4ge1xuICAgICAgICAgICAgaWYocXVlcz8uaWQgJiYgcXVlcz8uaWQgPT09IGVsZT8uc3ViVGV4dD8uc291cmNlUXVlc3Rpb25JZCl7XG4gICAgICAgICAgICAgIGRlcGVuZGVudEVsZW1lbnRBcnJheS5wdXNoKGVsZS5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFZEIDEzTUFZMjQgLSBwcmludCBRUiBidXR0b24gY2hhbmdlc1xuICAgIGlmIChhY3Rpb24uZXZlbnR0b2VtaXQgPT09ICdwcmludCcpIHtcbiAgICAgIGRhdGFUb1BhcmVudFsnYWN0aW9uRGF0YSddID0gYWN0aW9uWydkYXRhJ107XG4gICAgfVxuICAgIC8vIE1TTSAxN0pVTjI1IC0gQ2xvc2UgYnV0dG9uIGV2ZW50IGNoYW5nZXNcbiAgICBpZiAoYWN0aW9uLmV2ZW50dG9lbWl0ID09PSAnY2xvc2UnICYmIHRoaXMuaXNFZGl0KSB7XG4gICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBIQSAyM0pBTjI0IFRvIGNhbGwgdGhlIGFjdGlvbiBvbiBhbnkgZXZlbnRcbiAgICAvLyAgVkQgMDFBdWcyNCAtIHZhbGlkYXRpb24gY2hhbmdlXG4gICAgaWYgKHZhbGlkRm9ybSkge1xuICAgICAgLy8gU0tTMTNKVU4yNSBzaW5nbGUgZmllbGQgY2hhbmdlIGVtaXRcbiAgICAgIGlmIChxdWVzICYmIHF1ZXMuc2luZ2xlRmllbGRDaGFuZ2UpIHtcbiAgICAgICAgZGF0YVRvUGFyZW50LmRhdGEgPSBkYXRhVG9QYXJlbnQuZGF0YS5maWx0ZXIoKGlucHV0RGF0YTogYW55KSA9PiBpbnB1dERhdGEuaWQgPT09IHF1ZXMuaWQgfHwgaW5wdXREYXRhLmlkID09PSBwcmltYXJ5S2V5RWxlbWVudD8uaWQgfHwgZGVwZW5kZW50RWxlbWVudEFycmF5LmluY2x1ZGVzKGlucHV0RGF0YS5pZCkgKTtcbiAgICAgIH1cbiAgICAgIGlmKGlzUHJpbWFyeUtleSkge1xuICAgICAgICBkYXRhVG9QYXJlbnQuYWN0aW9uID0gIGRhdGFUb1BhcmVudC5hY3Rpb24gPT09ICdzdWJtaXQnID8gJ3NhdmUnIDogIGRhdGFUb1BhcmVudC5hY3Rpb247XG4gICAgICB9XG4gICAgICB0aGlzLmhhbmRsZUJvb2tsZXRBY3Rpb25FdmVudC5lbWl0KGRhdGFUb1BhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPSAnZXJyb3InO1xuICAgICAgdGhpcy5oYW5kbGVCb29rbGV0QWN0aW9uRXZlbnQuZW1pdChkYXRhVG9QYXJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhBIDE4LUpBTi0yNCBoYW5kbGVDb21wbGV0ZUJvb2tsZXQgaXMgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljXG4gIGhhbmRsZUNvbXBsZXRlQm9va2xldChjb21wbGV0ZUJvb2tsZXQpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoY29tcGxldGVCb29rbGV0Py5ib29rUXVlc3Rpb25zTWFwID8/IHt9KS5sZW5ndGggPT09IDApIHsgLy8gSEEgMTEtSkFOLTI0IElmIGNvbmRpdGlvbiB0byBsb2FkIGJvb2tsZXRcbiAgICAgIHRoaXMuaGFuZGxlQm9vayhjb21wbGV0ZUJvb2tsZXQ/LnF1ZXN0aW9uYm9vaz8uc3ViUXVlc3Rpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIEhBIDExLUpBTi0yNCBUbyBsb2FkIGJvb2sgcXVlc3Rpb25zXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wbGV0ZUJvb2tsZXQuYm9va1F1ZXN0aW9uc01hcCkge1xuICAgICAgICBjb25zdCB2YWwgPSBjb21wbGV0ZUJvb2tsZXQuYm9va1F1ZXN0aW9uc01hcFtrZXldO1xuICAgICAgICBpZiAodmFsLnR5cGUgPT09ICdCb29rJykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQm9vayh2YWwuc3ViUXVlc3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXModmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhBIDExLUpBTi0yNCBoYW5kbGVCb29rIGxvYWRzIHRoZSBCb29rXG4gIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIGhhbmRsZUJvb2socXVlc0xpc3Q6IGFueSkge1xuICAgIHF1ZXNMaXN0Py5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0Jvb2snICYmIGVsZW1lbnQucWJSZWZlcmVuY2VRdWVzdGlvbnMpIHtcbiAgICAgICAgLy8gSEEgMjRKQU4yNCBGZXRjaGluZyBmcm9tIFFCIHJlZmVyZW5jZVxuICAgICAgICB2YXIgYm9vayA9IHR5cGVvZiBlbGVtZW50LnFiUmVmZXJlbmNlUXVlc3Rpb25zID09PSAnb2JqZWN0JyA/IGVsZW1lbnQucWJSZWZlcmVuY2VRdWVzdGlvbnMgOiBKU09OLnBhcnNlKGVsZW1lbnQucWJSZWZlcmVuY2VRdWVzdGlvbnMpXG4gICAgICAgIGNvbnN0IGZpcnN0S2V5ID0gT2JqZWN0LmtleXMoYm9vaz8uYm9va1F1ZXN0aW9uc01hcCB8fCB7fSlbMF07XG4gICAgICAgIGJvb2s/LmJvb2tRdWVzdGlvbnNNYXBbZmlyc3RLZXldPy5zdWJRdWVzdGlvbnM/LmZvckVhY2gocXVlcyA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVzKHF1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZVF1ZXMoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gVkQgMTNTZXAyNCAtIGRhdGFiaW5kIGNoYW5nZXNcbiAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXG4gICAgaWYgKHRoaXMuZGF0YUJpbmQgJiYgT2JqZWN0LmtleXModGhpcy5kYXRhQmluZCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmRhdGFDaGFuZ2VzKCdkYXRhQmluZCcpO1xuICAgIH1cbiAgfVxuICAvLyBTS1MyME1BUjI1IGZsYXR0ZW5pbmcgbmVzdGVkIG9iamVjdHMsIG1hcHBpbmcgdmFsdWVzIHVzaW5nICByZWZlcmVuY2VGaWVsZFxuICBmbGF0dGVuT2JqZWN0KG9iajogYW55LCBwYXJlbnRLZXkgPSAnJyk6IGFueVtdIHtcbiAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICBcbiAgICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGxldCBuZXdLZXkgPSBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9LiR7a2V5fWAgOiBrZXk7XG4gIFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIGFycmF5XG4gIFxuICAgICAgICB2YWwuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmxhdHRlbk9iamVjdChpdGVtLCBgJHtuZXdLZXl9WyR7aW5kZXh9XWApKTsgLy8gRmxhdHRlbiBvYmplY3RzIGluIGFycmF5c1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbYCR7bmV3S2V5fVske2luZGV4fV1gLCBpdGVtXSk7IC8vIFN0b3JlIHByaW1pdGl2ZSB2YWx1ZXMgaW4gYXJyYXlzXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBBbHdheXMgaW5jbHVkZSBmdWxsIG9iamVjdFxuICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QodmFsLCBuZXdLZXkpKTsgLy8gQ29udGludWUgZmxhdHRlbmluZ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIFN0b3JlIHByaW1pdGl2ZSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIFxuICAvLyBTS1MyME1BUjI1IHJlZmVyZW5jZUZpZWxkIHNldCBsaWtlIHRoaXNcbiAgLy8gbmFtZSAgLS0+IG5vcm1hbFxuICAvLyBpdGVtc1swXS5uYW1lICAtLT4gdmFsdWUgaW4gYSBhcnJheSBzZXQgbGlrZSB0aGlzXG4gIC8vIGFkZHJlc3Nlcy5saW5lMiAgLS0tPiBpZiB2YWx1ZSBpbiBhIGpzb24gc2V0IGxpa2UgdGhpc1xuICAvLyBhZGRyZXNzZXMubGluZTQuZGQgLS0tPiBpZiB2YWx1ZSBpbiBhIG5lc3RlZCBqc29uIHNldCBsaWtlIHRoaXNcblxuICAvLyBIQSAxMS1KQU4tMjQgaGFuZGxlUXVlcyB0byBsb2FkIHF1ZXN0aW9uXG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBoYW5kbGVRdWVzKHF1ZXM6IGFueSkge1xuICAgIC8vIEhBIDE5LUpBTi0yNCBJZiBjb25kaXRpb24gaXMgZm9yIGJpbmQtaW4sIGNvcnJlY3Rpb25cbiAgICAvLyBIQSAwOUZFQjI0IEFkZGluZyBjb25kaXRpb24gdG8gYXZvaWQgdW5kZWZpbmVkIGVycm9yXG4gICAgaWYgKHRoaXMuZGF0YUJpbmQgJiYgT2JqZWN0LmtleXModGhpcy5kYXRhQmluZCkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZmxhdHRlbk9iamVjdCh0aGlzLmRhdGFCaW5kKVxuICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIHJlc3VsdCkge1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IHZhbDtcbiAgICAgICAgaWYgKHF1ZXMucmVmZXJlbmNlRmllbGQgPT09IGtleSkge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocXVlcy50eXBlID09PSAnRHJvcGRvd24nIHx8IHF1ZXMudHlwZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgdGhpcy5zcU9wdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRbJ3JlZmVyZW5jZUZpZWxkJ10gPT09IGtleSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRbJ2lucHV0J10gPSBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgZWxlbWVudFsnc2VsZWN0ZWRWYWx1ZSddID0gcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAyNEpBTjI0IFRvIGJpbmQtaW4gRGF0ZSBhbmQgRGF0ZVRpbWVcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IG5ldyBEYXRlKHZhbHVlPy50b1N0cmluZygpKSAgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDEyRkVCMjQgVG8gYmluZC1pbiBMb2NhdGlvbiBUeXBlXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnTG9jYXRpb24nKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVsnYWRkcmVzcyddID8gdmFsdWVbJ2FkZHJlc3MnXSA6IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXMgZm9yIGRhdGEgYmluZEluXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnQ2FsZW5kYXInKSB7XG4gICAgICAgICAgICBsZXQgZW50cmllcyA9IHR5cGVvZiBxdWVzWydmaWVsZHNNZXRhJ10gPT09ICdvYmplY3QnID8gcXVlc1snZmllbGRzTWV0YSddIDogSlNPTi5wYXJzZShxdWVzWydmaWVsZHNNZXRhJ10pO1xuICAgICAgICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgbGV0IHJlZmVyZW5jZVF1ZXN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHFSZWZlcmVuY2UgPSBKU09OLnBhcnNlKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMucHVzaChxUmVmZXJlbmNlPy5xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZVF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWU/LmZvckVhY2goY2FsZW5kYXJBcnJheSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGNhbGVuZGFyQXJyYXkuZGF0ZSk7XG4gICAgICAgICAgICAgICAgICBjYWxlbmRhckFycmF5LmVudHJpZXMuZm9yRWFjaChpbnB1dEVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0RW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUXVlc3Rpb25zLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlZmVyZW5jZUZpZWxkID09IGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdEYXRlJyB8fCBmaWVsZC50eXBlID09ICdEYXRlVGltZScgfHwgZmllbGQudHlwZSA9PSAnVGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IG5ldyBEYXRlKHY/LnRvU3RyaW5nKCkpIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGlmIChmaWVsZC50eXBlID09PSAnRHJvcGRvd24nIHx8IGZpZWxkLnR5cGUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5zZWxlY3RlZFZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHYgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdiB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnQoZGF0ZSwgcmVmZXJlbmNlUXVlc3Rpb25zKTsvL1NLUyAyN1NFUDI0IGVhY2ggZXZlbnQgYWRkZWQgdG8gYWxsRXZlbnRzIGFycmF5XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5hZGRFdmVudChkYXRlLHJlZmVyZW5jZVF1ZXN0aW9ucyk7IC8vdGhpcyBpcyBvbmx5IGxhc3QgZXZlbnQgYWRkZWQgdG8gYWxsRXZlbnRzIGFycmF5XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmFsbEV2ZW50cy5sZW5ndGggPiAwID8gdGhpcy5hbGxFdmVudHMgOiAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgMjMgT2N0MjQgLSBmaWxlIHR5cGUgY2hhbmdlc1xuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gW107XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gXCJCb29sZWFuXCIpIHsgLy8gU0tTMjNKVU4yNSBkZWZhdWx0bHkgc2V0IHZhbHVlIGZhbHNlXG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScgOiB0eXBlb2YgcXVlcy5kZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnID8gcXVlcy5kZWZhdWx0VmFsdWUgPT09IHRydWUgfHwgcXVlcy5kZWZhdWx0VmFsdWUgPT09ICd0cnVlJyA6IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYW5zd2VyTGlzdC5wdXNoKHF1ZXMpOyAvLyBIQSAxMkZFQjI0IFRvIGdpdmUgdGhlIHZhbHVlIGZvciBkYXRhXG4gICAgICAgICAgYnJlYWs7IC8vIEFQLTAzSlVOMjUgLSBNYXRjaCBmb3VuZCBhbmQgdmFsdWUgYm91bmQ7IG5vIG5lZWQgdG8gY29udGludWUgdGhlIGxvb3BcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyA/IHF1ZXMuaW5wdXQgPSBmYWxzZSA6IHF1ZXMuaW5wdXQgPSBudWxsICAvLyBTS1MyM0pVTjI1IGRlZmF1bHRseSBzZXQgdmFsdWUgZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHt9O1xuICAgICAgcXVlc3Rpb25bJ2lkJ10gPSBxdWVzLmlkO1xuICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlICB8fCBudWxsO1xuICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLW91dCBMb2NhdGlvbiBUeXBlXG4gICAgICBpZiAocXVlcy50eXBlID09PSAnTG9jYXRpb24nKSB7XG4gICAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCA/IHF1ZXMuaW5wdXQgOiBxdWVzLnNlbGVjdGVkVmFsdWUgfHwgbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdGaWxlJykge1xuICAgICAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXG4gICAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCA/IHF1ZXMuaW5wdXQgOiBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBbXTtcbiAgICAgIH0gIGVsc2UgaWYocXVlcy50eXBlID09PSBcIkJvb2xlYW5cIikgeyAvLyBTS1MyM0pVTjI1IGRlZmF1bHRseSBzZXQgdmFsdWUgZmFsc2VcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSB0eXBlb2YgcXVlcy5pbnB1dCAhPT0gJ3VuZGVmaW5lZCcgPyBxdWVzLmlucHV0ID09PSB0cnVlIHx8IHF1ZXMuaW5wdXQgPT09ICd0cnVlJyA6IHR5cGVvZiBxdWVzLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gdHJ1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gJ3RydWUnIDogZmFsc2U7XG4gICAgICB9XG4gICAgICBxdWVzdGlvblsndHlwZSddID0gcXVlcy50eXBlO1xuICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uTnVtYmVyJ10gPSBxdWVzLnF1ZXN0aW9uTnVtYmVyO1xuICAgICAgcXVlc3Rpb25bJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzPy5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIHF1ZXN0aW9uWydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzPy5zZWxlY3RlZFZhbHVlOyAgLy8gTVIgMzFKQU4yNCBOZWVkIHRvIHBhc3MgdGhlIHNlbGVjdGVkIHZhbHVlIHRvb1xuICAgICAgdGhpcy5hbnN3ZXJMaXN0LnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcyBmb3IgZGF0YSBiaW5kSW5cbiAgYWRkRXZlbnQoZGF5OiBhbnksIGVudHJ5UXVlcykge1xuICAgIC8vIFRyYW5zZm9ybSBuZXcgZW50cmllcyBpbnRvIHRoZSBkZXNpcmVkIGZvcm1hdFxuICAgIGNvbnN0IG5ld0VudHJpZXMgPSBlbnRyeVF1ZXMucmVkdWNlKChhY2MsIHEpID0+IHtcbiAgICAgIGFjY1txLmlkXSA9IHsgLi4ucSB9O1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICAvLyBGaW5kIGlmIGFuIGV2ZW50IGFscmVhZHkgZXhpc3RzIGZvciB0aGUgZ2l2ZW4gZGF0ZVxuICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSB0aGlzLmFsbEV2ZW50cy5maW5kKGV2ZW50ID0+IGV2ZW50LmRhdGUudG9EYXRlU3RyaW5nKCkgPT09IGRheS50b0RhdGVTdHJpbmcoKSk7XG5cbiAgICBpZiAoZXhpc3RpbmdFdmVudCkge1xuICAgICAgLy8gSWYgdGhlIGV2ZW50IGV4aXN0cywgcHVzaCB0aGUgbmV3IGVudHJpZXMgdG8gdGhlIGV4aXN0aW5nIGVudHJpZXNcbiAgICAgIGNvbnN0IGV4aXN0aW5nRW50cmllcyA9IGV4aXN0aW5nRXZlbnQuZW50cmllcy5tYXAoZW50cnkgPT4gKHsgLi4uZW50cnkgfSkpO1xuICAgICAgZXhpc3RpbmdFbnRyaWVzLnB1c2gobmV3RW50cmllcyk7XG4gICAgICBleGlzdGluZ0V2ZW50LmVudHJpZXMgPSBleGlzdGluZ0VudHJpZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBldmVudCBpZiBpdCBkb2Vzbid0IGV4aXN0IGZvciB0aGUgZ2l2ZW4gZGF0ZVxuICAgICAgY29uc3QgbmV3RXZlbnQgPSB7XG4gICAgICAgIGlkOiAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSksXG4gICAgICAgIGRhdGU6IGRheSxcbiAgICAgICAgZW50cmllczogW25ld0VudHJpZXNdIC8vIFdyYXAgdGhlIG5ldyBlbnRyaWVzIGluIGFuIGFycmF5XG4gICAgICB9O1xuICAgICAgdGhpcy5hbGxFdmVudHMucHVzaChuZXdFdmVudCk7XG4gICAgfVxuICB9XG5cblxuICByZWFkUXVlc3Rpb25zKHFiSWQ6IHN0cmluZykge1xuICAgIGxldCBxdWVzdGlvbnMgPSBbXTtcbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGVybmFyeSB0byBhdm9pZCB1bmRlZmluZWRcbiAgICBmb3IgKHZhciBzcSBpbiB0aGlzLmJvb2tRdWVzdGlvbnNNYXA/LmdldChxYklkKT8uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAvLyBBUC0xNE1BWTI1IEV4dHJhY3RlZCBxdWVzdGlvbiBmcm9tIHN1YlF1ZXN0aW9ucyBpbnRvIHZhcmlhYmxlICdxJ1xuICAgICAgbGV0IHE6IGFueSA9IHRoaXMuYm9va1F1ZXN0aW9uc01hcD8uZ2V0KHFiSWQpLnN1YlF1ZXN0aW9uc1tzcV07XG4gICAgICAvLyBIQSAwOUZFQjI0IGlmIHF1ZXN0aW9uIGlzIHRoZXJlIHByb2Nlc3NcbiAgICAgIGlmIChxKSB7XG4gICAgICAgIGlmICgocS50eXBlID09ICdEcm9wZG93bicgfHwgcS50eXBlID09ICdSYWRpbycpICYmIHRoaXMuc3FPcHRpb25zLmdldChxLmlkKSkge1xuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHRoaXMuc3FPcHRpb25zLmdldChxLmlkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlc3Rpb25zLnB1c2gocSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWRCAxMkp1bjI0IGZpZWxkIHBlcm1pc2lzaW9uIGNoYW5nZXNcbiAgICBpZiAodGhpcy5maWVsZFJlc3RyaWN0aW9ucykge1xuICAgICAgY29uc3QgZmllbGRSZXN0cmljdGlvbnMgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHRoaXMuZmllbGRSZXN0cmljdGlvbnMuZmllbGRzKSk7XG4gICAgICBxdWVzdGlvbnMuZm9yRWFjaChxdWVzID0+IHtcbiAgICAgICAgY29uc3QgcmVzdHJpY3Rpb24gPSBmaWVsZFJlc3RyaWN0aW9ucy5nZXQocXVlcy51bmlxdWVJZGVudGlmaWVyKTtcblxuICAgICAgICBpZiAocmVzdHJpY3Rpb24pIHtcbiAgICAgICAgICBxdWVzLmlzUmVhZE9ubHkgPSByZXN0cmljdGlvbiA9PT0gJ3JlYWRPbmx5JztcbiAgICAgICAgICBxdWVzLmlzSGlkZGVuID0gcmVzdHJpY3Rpb24gPT09ICdoaWRlJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbnM7XG4gIH1cbiAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgcmVhZFRyYW5zUXVlc3Rpb25zKHFiSWQ6IHN0cmluZykge1xuICAgIGxldCByZWNvcmQgPSBbXTtcbiAgICBsZXQgdHJhbnNsYXRlUmVjb3JkID0gdGhpcy50cmFuc2xhdGVNYXAuZ2V0KHFiSWQpO1xuICAgIGlmICh0cmFuc2xhdGVSZWNvcmQgJiYgdHJhbnNsYXRlUmVjb3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyYW5zbGF0ZVJlY29yZC5mb3JFYWNoKGxhblJlYyA9PiB7XG4gICAgICAgIGlmIChsYW5SZWMubGFuZ3VhZ2VDb2RlID09IHRoaXMubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICAgICAgcmVjb3JkID0gbGFuUmVjLmZpZWxkc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxuXG4gIGdldFRleHQodmFsdWUpIHtcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudFxuICAgICk7XG4gIH1cbiAgZ2V0RHJvcERvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaGFkbGVEcm9wRG93bkRlcGVuZGVudC5lbWl0KGV2ZW50KTtcbiAgfVxuICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgZ2V0Q2FsZW5kYXJEYXRlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcbiAgfVxuICBnZXRDYWxlbmRhckV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBldmVudFtcIm54dElkXCJdID0gT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcClbMF07XG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG4gIGVkaXRDaGFuZ2VDbGljayhhY3Rpb246IGFueSl7XG4gICAgdGhpcy5pc0VkaXQgPSB0cnVlXG4gIH1cbn1cbiIsIjwhLS0gQm9va2xldCBIYW5kbGluZy0tPlxuPCEtLSBIQSAxOURFQzIzIEZvciBEaXJlY3Rpb24gLS0+XG48ZGl2ICpuZ0Zvcj1cImxldCBxYiBvZiBib29rbGV0XCIgW25nQ2xhc3NdPVwibGFuZ0RpcmVjdGlvblwiPlxuICAgIDwhLS0gTVIgQ29tbWVudGVkIGJlbG93IGNvZGUgdG8gZW5zdXJlIHNpbmdsZSBKU09OIGZvciBVTkNPTkRJVElPTkFMIEJvb2tsZXRzIC0tPlxuICAgIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgICA8IS0tIDxsaWItcXVlc3Rpb25uYWlyZSBbc2Vydl09XCJzZXJ2XCIgW3FiSWRdPVwicWIuaWRcIiBbdGtuXT1cInRrblwiPjwvbGliLXF1ZXN0aW9ubmFpcmU+IC0tPlxuICAgIDwhLS0gSEEgMjhERUMyMyBCZWxvdyBJZiBsb2dpYyBpcyB0byBsb2FkIGZyb20gYm9va2xldCAgLS0+XG4gICAgPGRpdiAqbmdJZj1cInFiLnN1YlF1ZXN0aW9uczsgZWxzZSBlbHNlQmxvY2tcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlcyBvZiBxYi5zdWJRdWVzdGlvbnNcIiBjbGFzcz1cInF1ZXN0aW9uZGl2MVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDE3SkFOMjQgLSBJcyB0aXRsZSBpcyBlbmFibGVkIHNvIHRoYXQgYmFzZWQgb24gdGhlIGJvb2xlYW4gZGl2IHdpbGwgYmUgdmlzaWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5pc1RpdGxlXCIgW2NsYXNzXT1cInFiLmlzU2hlbmdlbCA/ICdoZWFkZXItc3R5bGUnIDogJ3F1ZXN0aW9uLWYtc2l6ZSBhZGRpdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFZEIDA4Tk9WMjMgLSBzaG93aW5nIGxhYmVsIHdoZW4gaXRzIGF2YWlsYWJsZS0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzPy5xdWVzdGlvblRleHQpXCIgKm5nSWY9XCJxdWVzPy5xdWVzdGlvblRleHQgJiYgcXVlcz8uc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBxdWVzPy5xdWVzdGlvblRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXQgLS0+IDwhLS1WRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlcy0tPlxuICAgICAgICAgICAgICAgIDwhLS1WRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXMtLT5cbiAgICAgICAgICAgICAgICA8IS0tIEFQLTE0TUFZMjUgLSBBZGRlZCBbZGF0YUJpbmRdIGlucHV0IGJpbmRpbmcgLS0+XG4gICAgICAgICAgICAgICAgIDwhLS0gQVAtMTlNQVkyNSAtIEFkZGVkIFtpc0VkaXRdIGJpbmRpbmcgLS0+IFxuICAgICAgICAgICAgICAgICAgPCEtLSAvL01TTTEwSlVMMjUgIGFsbEljb25zLCB0aGVtZUNvbG9yLCBjZG5JY29uVVJMIGFkZGVkIGZvciBpY29uLXNlbGVjdG9yLS0+XG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxYlwiIFt0b2tlbl09XCJ0b2tlblwiXG4gICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW3F1ZXN0aW9uSXRlbV09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNsYXRlZFF1ZXN0aW9uc109XCJyZWFkVHJhbnNRdWVzdGlvbnMocWIuaWQpXCJcbiAgICAgICAgICAgICAgICBbcXVlc3Rpb25zXT1cInJlYWRRdWVzdGlvbnMocWIuaWQpXCJcbiAgICAgICAgICAgICAgICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGhhbmRsZUNhbGVuZGFyRGF0ZSk9XCJnZXRDYWxlbmRhckRhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGhhbmRsZUNhbGVuZGFyRXZlbnQpPVwiZ2V0Q2FsZW5kYXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2luZ2xlRmllbGRDaGFuZ2VFbWl0KSA9J3NpbmdsZUZpZWxkQ2hhbmdlKCRldmVudCknXG4gICAgICAgICAgICAgICAgW2RhdGFCaW5kXT1cImRhdGFCaW5kXCJcbiAgICAgICAgICAgICAgICBbaXNFZGl0XT1cImlzRWRpdFwiIFxuICAgICAgICAgICAgICAgIFthbGxJY29uc109XCJhbGxJY29uc1wiXG4gICAgICAgICAgICAgICAgW3RoZW1lQ29sb3JdPVwidGhlbWVDb2xvclwiXG4gICAgICAgICAgICAgICAgW2Nkbkljb25VUkxdPVwiY2RuSWNvblVSTFwiXG4gICAgICAgICAgICAgICAgPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEhBIDI4REVDMjMgQmVsb3cgZWxzZSBsb2dpYyBpcyB0byBsb2FkIGZyb20gYm9va3Mgb3IgcXVlc3Rpb25zIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25kaXYxXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcWIuaXNUaXRsZVwiIFtjbGFzc109XCJxYi5pc1NoZW5nZWwgPyAnaGVhZGVyLXN0eWxlJyA6ICdxdWVzdGlvbi1mLXNpemUgYWRkaXRpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBWRCAwOE5PVjIzIC0gc2hvd2luZyBsYWJlbCB3aGVuIGl0cyBhdmFpbGFibGUtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFRleHQocWI/LnF1ZXN0aW9uVGV4dClcIiAqbmdJZj1cInFiPy5xdWVzdGlvblRleHQgJiYgcWI/LnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcWI/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcWI/LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiA8IS0tIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0IC0tPiA8IS0tICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlcy0tPlxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb25ib29rIFtxYkl0ZW1dPVwicWJcIiBbdG9rZW5dPVwidG9rZW5cIiBbbGFiZWxWYWx1ZV09XCJsYWJlbFZhbHVlXCIgW3F1ZXN0aW9uSXRlbV09XCJxYlwiIFt0cmFuc2xhdGVkUXVlc3Rpb25zXT1cInJlYWRUcmFuc1F1ZXN0aW9ucyhxYi5pZClcIiBbcXVlc3Rpb25zXT1cInJlYWRRdWVzdGlvbnMocWIuaWQpXCIgIChoYW5kbGVEcm9wRG93bik9XCJnZXREcm9wRG93bigkZXZlbnQpXCI+PC9saWItcXVlc3Rpb25ib29rPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gICAgPCEtLSBHcm91cCBBY3Rpb25zIC0tPlxuICAgIDwhLS0gSEEgMTlERUMyMyBGb3IgRGlyZWN0aW9uIC0tPlxuICAgIDwhLS0gQVAgMjNNQVkyNSAtIEFjdGlvbiBCdXR0b25zOiBEeW5hbWljYWxseSBwb3NpdGlvbmVkIGJ1dHRvbnMgd2l0aCBKU09OLWNvbmZpZ3VyZWQgc3R5bGVzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1zdWJtaXQtcm93XCIgKm5nSWY9XCJhYkl0ZW0/LnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiIFtuZ0NsYXNzXT1cImxhbmdEaXJlY3Rpb25cIj4gPCEtLSBwb3NpdGlvbi1yZWxhdGl2ZSByZW1vdmVkIGluIHRoaXMgdGFnLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiYWN0aW9uLndpZHRoIHx8IDEwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHg7XCI+ICA8IS0tIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBbc3R5bGUubGVmdC4lXT1cImFjdGlvbi5wb3NpdGlvblBlcmNlbnQgfHwgMFwiICByZW1vdmVkIGluIHRoaXMgdGFnIC0tPlxuICAgICAgICAgICAgICAgIEBpZighaXNFZGl0ICYmIGFjdGlvbi5uYW1lID09PSAnU2F2ZScpe1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRDaGFuZ2VDbGljayhhY3Rpb24pXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmYy1idXR0b24gbnh0QnV0dG9uIGFjdGlvbi1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tYnRuLWJnXT1cImFjdGlvbi5iZ0NvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImFjdGlvbi5iZ0NvbG9yIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJhY3Rpb24udGV4dENvbG9yIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzLnB4XT1cImFjdGlvbi5ib3JkZXJSYWRpdXMgfHwgNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJvb2tsZXRBY3Rpb25DbGljayhhY3Rpb24pXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmYy1idXR0b24gbnh0QnV0dG9uIGFjdGlvbi1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tYnRuLWJnXT1cImFjdGlvbi5iZ0NvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImFjdGlvbi5iZ0NvbG9yIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJhY3Rpb24udGV4dENvbG9yIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzLnB4XT1cImFjdGlvbi5ib3JkZXJSYWRpdXMgfHwgNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
673
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2xldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYm9va2xldC9ib29rbGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9ib29rbGV0L2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFJWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFZdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBYTdDLE1BQU0sT0FBTyxnQkFBZ0I7SUE0Q2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWhERCxTQUFTLENBQVM7SUFDbEIsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1osV0FBVyxDQUFNO0lBQ2pCLFFBQVEsQ0FBTSxDQUFDLDBDQUEwQztJQUN6RCxVQUFVLENBQVMsQ0FBQywwQ0FBMEM7SUFDOUQsVUFBVSxDQUFTLENBQUMsMENBQTBDO0lBQzlELHFCQUFxQixDQUFNO0lBQzNCLFVBQVUsQ0FBUztJQUNuQixLQUFLLENBQVM7SUFDZCxZQUFZLENBQVMsQ0FBRSxtQ0FBbUM7SUFDMUQsaUJBQWlCLENBQU0sQ0FBQyx1Q0FBdUM7SUFDL0QsSUFBSSxDQUFNLENBQUMsZ0NBQWdDO0lBQzNDLE1BQU0sQ0FBTSxDQUFDLDZFQUE2RTtJQUMxRixNQUFNLENBQVcsQ0FBQyxrQ0FBa0M7SUFFbkQsd0JBQXdCLEdBQXNCLElBQUksWUFBWSxFQUFF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UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7SUFDcEIsQ0FBQzt3R0FybkJVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLG8wQkN2QzdCLG93S0EyRk0sbVhEM0RGLFlBQVksNlZBQ1osV0FBVywrQkFDWCxxQkFBcUI7OzRGQUtaLGdCQUFnQjtrQkFYNUIsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxxQkFBcUI7cUJBQ3RCOzZOQUtRLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFnQkUsUUFBUTtzQkFBaEIsS0FBSztnQkFHcUIscUJBQXFCO3NCQUEvQyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEVsZW1lbnRSZWYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgQWN0aW9uTWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uTWV0YSc7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi8uLi93cmFwcGVyXCI7XG5pbXBvcnQgeyBCb29rbGV0V3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9ib29rbGV0V3JhcHBlclwiO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBRdWVzdGlvbmJvb2tDb21wb25lbnQgfSBmcm9tIFwiLi4vcXVlc3Rpb25ib29rL3F1ZXN0aW9uYm9vay5jb21wb25lbnRcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1ib29rbGV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBRdWVzdGlvbmJvb2tDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ib29rbGV0LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCb29rbGV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgYm9va2xldElkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlcnY6IHN0cmluZztcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvb2tsZXRKU09OOiBhbnk7XG4gIEBJbnB1dCgpIGFsbEljb25zOiBhbnk7IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSB0aGVtZUNvbG9yOiBzdHJpbmc7IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSBjZG5JY29uVVJMOiBzdHJpbmc7IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSBkcm9wZG93bkRlcGVuZGVudERhdGE6IGFueTtcbiAgQElucHV0KCkgbGFiZWxWYWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKSB0b2tlbjogc3RyaW5nO1xuICBASW5wdXQoKSBsYW5ndWFnZUNvZGU6IHN0cmluZzsgIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIEBJbnB1dCgpIGZpZWxkUmVzdHJpY3Rpb25zOiBhbnk7IC8vIFZEIDEySnVuMjQgLSBmaWVsZCBwZXJtaXNzaW9uIGNoYW5nZVxuICBASW5wdXQoKSBmcm9tOiBhbnk7IC8vIEZvcm0gQnVpbGRlciBkZXBlbmRlbnQgY2hhbmdlXG4gIEBJbnB1dCgpIGFwaVVybDogYW55OyAvLyBBUC0xNkFQUjI1IElucHV0IHByb3BlcnR5IHRvIHJlY2VpdmUgdGhlIEFQSSBVUkwgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudFxuICBASW5wdXQoKSBpc0VkaXQ6IGJvb2xlYW4gOyAvLyBBUC0xOU1BWTI1IC0gQWRkZWQgaXNFZGl0IGlucHV0XG5cbiAgQE91dHB1dCgpIGhhbmRsZUJvb2tsZXRBY3Rpb25FdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVQYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgbnh0Qm9va2xldDogQm9va2xldFdyYXBwZXI7XG5cbiAgcHVibGljIGJvb2tsZXQ6IGFueVtdID0gW107XG4gIHB1YmxpYyBhYkl0ZW06IGFueSA9IHt9O1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uTWV0YVtdID0gW107XG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyB0cmFuc2xhdGVNYXA6IGFueSA9IG5ldyBNYXAoKTsgIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIHByaXZhdGUgc3FPcHRpb25zOiBhbnkgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBpc0Fuc3dlckZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNwaW5uZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyVHlwZTogc3RyaW5nO1xuICAvLyBIQSAxOURFQzIzIGxhbmdEaXJlY3Rpb24gdmFyaWFibGUgaXMgY3JlYXRlZCB0byBhc3NpZ24gdGhlIGRpcmVjdGlvbiBhcyBjbGFzc1xuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7IC8vIEhBIDI4REVDMjMgbWFraW5nIGx0ciBhcyBkZWZhdWx0IGRpcmVjdGlvblxuICBhbnN3ZXJMaXN0ID0gW107IC8vIEhBIDExLUpBTi0yNCBBbnN3ZXJsaXN0IHRvIHN0b3JlIHRoZSBtaW5pbWFsIHZhbHVlXG4gIEBJbnB1dCgpIGRhdGFCaW5kOiBhbnk7Ly8gSEEgMTgtSkFOLTI0IFRvIGluc2VydCB0aGUgZW5kcG9pbnQgdmFsdWUgdG8gdGhlIHF1ZXN0aW9uXG4gIGFsbEV2ZW50czogYW55W10gPSBbXTsgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICAvL0FQLTE5TUFZMjUgLSBBY2Nlc3NpbmcgdGhlIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBpbnN0YW5jZSB1c2luZyBWaWV3Q2hpbGQgcmVmZXJlbmNlXG4gIEBWaWV3Q2hpbGQoJ3F1ZXN0aW9uYm9vaycpIHF1ZXN0aW9uYm9va0NvbXBvbmVudCE6IFF1ZXN0aW9uYm9va0NvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIHRoaXMuc3Bpbm5lck5hbWUgPSBcInNwMVwiO1xuICAgIHRoaXMuc3Bpbm5lclR5cGUgPSBcImJhbGwtc3Bpbi1jbG9ja3dpc2VcIjtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvY2Vzc0Jvb2tsZXQoKTtcbiAgICAvL0FQLTE2QVBSMjUgLy8gR2V0IHRoZSBkeW5hbWljIEFQSSBVUkwgYW5kIHBhc3MgaXQgdG8gdGhlIHNlcnZpY2UgbWV0aG9kXG4gICAgbGV0IGFwaWRhdGEgPSAgdGhpcy5hcGlVcmw7XG4gICAgdGhpcy5kYXRhU2VydmljZS5hcGlrZXkoYXBpZGF0YSk7XG4gIH1cbiAgLy8gVkQgTk9WMjMgLSB1cGRhdGUgdGhlIGpzb24gZGF0YSB3aGVuIGJvb2tsZXRJZCBhbmQgYm9va2xldEpTT04gY2hhbmdlc1xuICBuZ09uQ2hhbmdlcyhzaW1wbGVjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gSEEgMjNKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3JcbiAgICBpZiAoc2ltcGxlY2hhbmdlc1snYm9va2xldElkJ10gfHwgKHNpbXBsZWNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10gJiYgc2ltcGxlY2hhbmdlc1snYm9va2xldEpTT04nXS5jdXJyZW50VmFsdWUgIT0gbnVsbCkgfHwgKHNpbXBsZWNoYW5nZXNbJ2RhdGFCaW5kJ10gJiYgc2ltcGxlY2hhbmdlc1snZGF0YUJpbmQnXS5jdXJyZW50VmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgIHRoaXMuYWxsRXZlbnRzID0gW107XG4gICAgICB0aGlzLnByb2Nlc3NCb29rbGV0KCk7XG4gICAgfVxuICAgIC8vQVAtMTlNQVkyNSAtIElmIGJvb2tsZXRKU09OIGlucHV0IGNoYW5nZXMsIHRyaWdnZXIgcHJvY2Vzc0RhdGEgb24gUXVlc3Rpb25ib29rQ29tcG9uZW50XG4gICAgaWYgKHNpbXBsZWNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHNpbXBsZWNoYW5nZXNbJ2Jvb2tsZXRKU09OJ10uY3VycmVudFZhbHVlO1xuICAgIC8vQVAtMjhNQVkyNSAtIElmIHRoZSBhY3Rpb24gaXMgYSBzdHJpbmcsIHVwZ3JhZGUgaXQgdG8gdGhlIG5ldyBhY3Rpb24gbW9kZWwgKGFycmF5IG9mIG9iamVjdHMpXG4gICAgICBpZiAoY3VycmVudFZhbHVlPy5xdWVzdGlvbmJvb2s/LmFjdGlvbiAmJiB0eXBlb2YgY3VycmVudFZhbHVlLnF1ZXN0aW9uYm9vay5hY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZS5xdWVzdGlvbmJvb2suYWN0aW9uID0gdGhpcy51cGdyYWRlQWN0aW9ucyhjdXJyZW50VmFsdWUucXVlc3Rpb25ib29rLmFjdGlvbik7XG4gICAgICB9ICBcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uYm9va0NvbXBvbmVudCl7XG4gICAgICAgIHRoaXMucXVlc3Rpb25ib29rQ29tcG9uZW50LnByb2Nlc3NEYXRhKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gQVAtMjhNQVkyNSAtIENvbnZlcnRzIG9sZCBhY3Rpb24gc3RyaW5nIChKU09OKSBpbnRvIGEgbmV3IG1vZGVsIChhcnJheSBvZiBhY3Rpb24gb2JqZWN0cylcbiAgdXBncmFkZUFjdGlvbnMoYWN0aW9uU3RyaW5nOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgYWN0aW9uIHN0cmluZyB0byBKU09OXG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGFjdGlvblN0cmluZyk7XG4gIC8vIEFQLTI4TUFZMjUgSWYgcGFyc2VkIHJlc3VsdCBpcyBhbiBhcnJheSwgYXBwbHkgZGVmYXVsdCBzdHlsZXMgYW5kIGFkanVzdCBwb3NpdGlvblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBwb3NpdGlvblBlcmNlbnQ6IGl0ZW0ubmFtZSA9PT0gJ0NhbmNlbCcgPyAzIDogMTQsIC8vIFNldCBwb3NpdGlvbiBiYXNlZCBvbiBhY3Rpb24gbmFtZVxuICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgdGV4dENvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgICAgICAgIGlkOiBpbmRleFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgSlNPTiBhY3Rpb24gZm9ybWF0XCIsIGUpO1xuICAgIH1cbiAgXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJvY2Vzc0Jvb2tsZXQoKSB7IFxuICAgIGlmICh0aGlzLmJvb2tsZXRJZCkge1xuICAgICAgaWYgKHRoaXMuYm9va2xldElkLmxlbmd0aCA9PSAxOCkge1xuICAgICAgICB0aGlzLnJlYWRCb29rbGV0KHRoaXMuYm9va2xldElkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va2xldEpTT04pIHtcbiAgICAgIC8vIFRyeSB0byBwYXNzIGEgdmFsdWUgZnJvbSBCYWNrZW5kIHRvIGRpZmZlcmVudGlhdGUgdGhlIFF1ZXN0aW9uQm9vayBSZWFkIGFuZCBBbnN3ZXJCb29rIFJlYWRcbiAgICAgIHRoaXMuaXNBbnN3ZXJGbGFnID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuYm9va2xldEpTT04gIT0gbnVsbCAmJiB0aGlzLmJvb2tsZXRKU09OICE9IHVuZGVmaW5lZCAmJiB0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwKSB7XG4gICAgICAgIC8vIFNLUzI4TUFSMjUgZ2V0IHRoZSBuZXN0ZWQgcmVmZXJlbmNlIHFiIFxuICAgICAgICBsZXQgdGVtcGJvb2sgPSB0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwW09iamVjdC5rZXlzKHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXApWzBdXS5zdWJRdWVzdGlvbnM7XG4gICAgICAgIHRlbXBib29rLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcImJvb2tcIiAmJiBlbGVtZW50Py5xYlJlZmVyZW5jZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRSZWZRYkRhdGEoZWxlbWVudD8ucWJSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSA9IHJlc3BvbnNlOyAvLyBBc3NpZ24gcmVzcG9uc2UgdG8gcWJSZWZlcmVuY2VRdWVzdGlvbnNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkFQSSBFcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYm9va2xldEpTT05bJ2Jvb2tRdWVzdGlvbnNNYXAnXVtPYmplY3Qua2V5cyh0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwKVswXV0uc3ViUXVlc3Rpb25zID0gdGVtcGJvb2tcbiAgICAgICAgLy8gU3RvcmluZyB0aGUgQVBJIHJlc3BvbnNlIGZvciBmdXR1cmUgdXNlXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZSh0aGlzLmJvb2tsZXRKU09OKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyB0aGUgU3ViIFF1ZXN0aW9uIE9wdGlvbnMgLSBUaGlzIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBib29rUXVlc3Rpb25zTWFwIGluIGZ1dHVyZVxuICAgICAgZm9yICh2YXIgc3EgaW4gdGhpcy5ib29rbGV0SlNPTj8uc3FPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc3FPcHRpb25zLnNldChzcSwgdGhpcy5ib29rbGV0SlNPTj8uc3FPcHRpb25zW3NxXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgdGhlIFF1ZXN0aW9uc1xuICAgICAgLy8gSEEgMjhERUMyMyB0aGlzIGFwcGxpZXMgZm9yIGJvb2tsZXRcbiAgICAgIC8vIEhBIDE3SkFOMjQgQWRkZWQgdGVybmFyeSBvcGVyYXRvciB0byBhdm9pZCB1bmRlZmluZWQgc2NlbmFyaW9cbiAgICAgIC8vIEhBIDA5RkVCMjQgQWRkaW5nIGNvbmRpdGlvbiB0byBhdm9pZCB1bmRlZmluZWQgZXJyb3JcbiAgICAgIGlmICh0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwICYmIE9iamVjdC5rZXlzKHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgdmFsdWUgaW4gdGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcCkge1xuICAgICAgICAgIHRoaXMuYm9va1F1ZXN0aW9uc01hcC5zZXQodmFsdWUsIHRoaXMuYm9va2xldEpTT04/LmJvb2tRdWVzdGlvbnNNYXBbdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gSEEgMjhERUMyMyB0aGlzIGFwcGxpZXMgZm9yIGJvb2sgb3IgcXVlc3Rpb25zXG4gICAgICBlbHNlIGlmKHRoaXMuYm9va2xldEpTT04/LnJlY29yZHMpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gJyc7XG4gICAgICAgIC8vIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeVxuICAgICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgICB2YWx1ZSA9IHRoaXMuYm9va2xldEpTT04/LnJlY29yZHNbMF0/LmlkO1xuICAgICAgICB0aGlzLmJvb2tRdWVzdGlvbnNNYXAuc2V0KHZhbHVlLCB0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2spO1xuICAgICAgfVxuXG4gICAgICAvLyBWRCAyMEp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgZm9yICh2YXIgdmFsdWUgaW4gdGhpcy5ib29rbGV0SlNPTj8udHJhbnNsYXRpb25NYXApIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVNYXAuc2V0KHZhbHVlLCB0aGlzLmJvb2tsZXRKU09OPy50cmFuc2xhdGlvbk1hcFt2YWx1ZV0pO1xuICAgICAgfVxuICAgICAgLy8gQVAgMjNNQVkyNSAtIHN1cHBvcnRzIGJvdGggc3RyaW5naWZpZWQgYW5kIG9iamVjdCBmb3JtYXRzXG4gICAgICBpZiAodGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5hY3Rpb24gIT0gdW5kZWZpbmVkICYmIHRoaXMuYm9va2xldEpTT04/LnF1ZXN0aW9uYm9vaz8uYWN0aW9uICE9ICcnKSB7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHR5cGVvZiB0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2suYWN0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgICA/IEpTT04ucGFyc2UodGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rLmFjdGlvbilcbiAgICAgICAgOiB0aGlzLmJvb2tsZXRKU09OPy5xdWVzdGlvbmJvb2suYWN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBIQSAxOURFQzIzIGxhbmdEaXJlY3Rpb24gdmFyaWFibGUgdmFsdWUgYXNzaWduaW5nXG4gICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgICBpZiAodGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5zdHlsZSkge1xuICAgICAgdmFyIHN0eWxlID0gdHlwZW9mIHRoaXMuYm9va2xldEpTT04/LnF1ZXN0aW9uYm9vaz8uc3R5bGUgPT09ICdvYmplY3QnID8gdGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5zdHlsZSA6IEpTT04ucGFyc2UodGhpcy5ib29rbGV0SlNPTj8ucXVlc3Rpb25ib29rPy5zdHlsZSk7XG4gICAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSBzdHlsZT8uZGlyZWN0aW9uO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmJvb2tsZXRKU09OPy5yZWNvcmRzICYmIHRoaXMuYm9va2xldEpTT04/LnJlY29yZHNbMF0/LnN0eWxlKSB7XG4gICAgICB2YXIgc3R5bGUgPSB0eXBlb2YgdGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkc1swXT8uc3R5bGUgPT09ICdvYmplY3QnID8gdGhpcy5ib29rbGV0SlNPTj8ucmVjb3Jkc1swXT8uc3R5bGUgOiBKU09OLnBhcnNlKHRoaXMuYm9va2xldEpTT04/LnJlY29yZHNbMF0/LnN0eWxlKTtcbiAgICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHN0eWxlPy5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgLy8gSEEgMTgtSkFOLTI0IFRoZSBjb25kaXRpb24gaXMgdXNlZCBmb3IgQmluZC1JbiBMb2dpYyBcbiAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQm9va2xldCh0aGlzLmJvb2tsZXRKU09OKTtcbiAgICB0aGlzLmJvb2tsZXQgPSB0aGlzLmJvb2tsZXRKU09OPy5yZWNvcmRzO1xuICAgIHRoaXMuYWJJdGVtID0gdGhpcy5ib29rbGV0SlNPTj8uYW5zd2VyYm9vaztcbiAgfVxuICAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICBwcml2YXRlIHJlYWRCb29rbGV0ID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmICh0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgICB0aGlzLnRrbixcbiAgICAgICAgW1wiQm9va2xldFwiLCBcInJlYWRcIiwgdXVpZCwgdGhpcy5sYW5ndWFnZUNvZGVdLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9va2xldCxcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tsZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIGxldCBwYXJhID0ge1xuICAgICAgICBkYXRhVHlwZTogXCJCb29rbGV0XCIsXG4gICAgICAgIG9wZXJhdGlvbjogXCJyZWFkXCIsXG4gICAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGVcbiAgICAgIH1cbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhKV0sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rbGV0LFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va2xldFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NSZWFkQm9va2xldCA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZSAhPSBudWxsIHx8IHJlc3BvbnNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU3RvcmluZyB0aGUgQVBJIHJlc3BvbnNlIGZvciBmdXR1cmUgdXNlXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmUocmVzcG9uc2UpO1xuXG4gICAgICAvLyBUcnkgdG8gcGFzcyBhIHZhbHVlIGZyb20gQmFja2VuZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBRdWVzdGlvbkJvb2sgUmVhZCBhbmQgQW5zd2VyQm9vayBSZWFkXG4gICAgICAvLyB0aGlzLmlzQW5zd2VyRmxhZyA9IHRydWU7XG5cbiAgICAgIHRoaXMuYm9va2xldCA9IHJlc3BvbnNlLnJlY29yZHM7XG4gICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG5cbiAgICAgIC8vIFByb2Nlc3MgdGhlIFN1YiBRdWVzdGlvbiBPcHRpb25zIC0gVGhpcyBzaG91bGQgYmUgbWVyZ2VkIHdpdGggYm9va1F1ZXN0aW9uc01hcCBpbiBmdXR1cmVcbiAgICAgIGZvciAodmFyIHNxIGluIHJlc3BvbnNlLnNxT3B0aW9ucykge1xuICAgICAgICB0aGlzLnNxT3B0aW9ucy5zZXQoc3EsIHJlc3BvbnNlLnNxT3B0aW9uc1tzcV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIHRoZSBRdWVzdGlvbnNcbiAgICAgIGZvciAodmFyIHZhbHVlIGluIHJlc3BvbnNlLmJvb2tRdWVzdGlvbnNNYXApIHtcbiAgICAgICAgdGhpcy5ib29rUXVlc3Rpb25zTWFwLnNldCh2YWx1ZSwgcmVzcG9uc2UuYm9va1F1ZXN0aW9uc01hcFt2YWx1ZV0pO1xuICAgICAgfVxuICAgICAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIGZvciAodmFyIHZhbHVlIGluIHJlc3BvbnNlLnRyYW5zbGF0aW9uTWFwKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlTWFwLnNldCh2YWx1ZSwgcmVzcG9uc2UudHJhbnNsYXRpb25NYXBbdmFsdWVdKTtcbiAgICAgIH1cbiAgICAgIC8vIFZEIDMxTk9WMjQgd3JhcHBlciBjaGFuZ2VzXG4gICAgICBpZiAocmVzcG9uc2UucXVlc3Rpb25ib29rPy5hY3Rpb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHR5cGVvZiByZXNwb25zZS5xdWVzdGlvbmJvb2s/LmFjdGlvbiA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBKU09OLnBhcnNlKHJlc3BvbnNlLnF1ZXN0aW9uYm9vaz8uYWN0aW9uKVxuICAgICAgICA6IHJlc3BvbnNlLnF1ZXN0aW9uYm9vaz8uYWN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBIQSAxOURFQzIzIGxhbmdEaXJlY3Rpb24gdmFyaWFibGUgdmFsdWUgYXNzaWduaW5nXG4gICAgaWYgKHJlc3BvbnNlPy5xdWVzdGlvbmJvb2s/LnN0eWxlKSB7XG4gICAgICB2YXIgc3R5bGUgPSB0eXBlb2YgcmVzcG9uc2U/LnF1ZXN0aW9uYm9vaz8uc3R5bGUgPT09ICdvYmplY3QnID8gcmVzcG9uc2U/LnF1ZXN0aW9uYm9vaz8uc3R5bGUgOiBKU09OLnBhcnNlKHJlc3BvbnNlPy5xdWVzdGlvbmJvb2s/LnN0eWxlKTtcbiAgICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHN0eWxlPy5kaXJlY3Rpb247XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlc3BvbnNlPy5yZWNvcmRzWzBdPy5zdHlsZSkge1xuICAgICAgdmFyIHN0eWxlID0gdHlwZW9mIHJlc3BvbnNlPy5yZWNvcmRzWzBdPy5zdHlsZSA9PT0gJ29iamVjdCcgPyByZXNwb25zZT8ucmVjb3Jkc1swXT8uc3R5bGUgOiBKU09OLnBhcnNlKHJlc3BvbnNlPy5yZWNvcmRzWzBdPy5zdHlsZSk7XG4gICAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSBzdHlsZT8uZGlyZWN0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rbGV0ID0gKHJlc3BvbnNlKSA9PiB7XG5cbiAgfVxuICAvL1NLUzI4TUFSMjUgRnVuY3Rpb24gdG8gZmV0Y2ggcmVmcWIgZGF0YVxuICBnZXRSZWZRYkRhdGEocmVmcWJpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGBodHRwczovL2Rldi1hcGkudmFsYXJoci5jb20vbnh0P25hbWU9JHtyZWZxYmlkfWApO1xuICB9XG4gIHNpbmdsZUZpZWxkQ2hhbmdlKGV2ZW50OiBhbnkpe1xuICAgIGxldCBhY3Rpb25CdXR0b25cbiAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgaWYgKGFjdGlvbi5ldmVudHRvZW1pdCA9PT0gJ3N1Ym1pdCcpe1xuICAgICAgICBhY3Rpb25CdXR0b24gPSBhY3Rpb25cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbmRsZUJvb2tsZXRBY3Rpb25DbGljayhhY3Rpb25CdXR0b24sZXZlbnQpXG4gIH1cbiAgaGFuZGxlQm9va2xldEFjdGlvbkNsaWNrKGFjdGlvbjogQWN0aW9uTWV0YSxxdWVzPzphbnkpIHtcbiAgICAvLyBIQSAxOUpBTjI0IEFjdGlvbiBjaGFuZ2VzXG4gICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgICB0aGlzLmFuc3dlckxpc3QgPSBbXTtcbiAgICB0aGlzLmRhdGFCaW5kID0gW107IC8vIEhBIDEyRkVCMjQgQ2xlYXJpbmcgZGF0YUJpbmQgdXBvbiBidXR0b24gYWN0aW9uIHNvIHRoYXQgZGF0YUJpbmQgdmFsdWUgd2lsbCBub3Qgb3ZlcnJpZGUgdGhlIGNoYW5nZWQgdmFsdWVcbiAgICBsZXQgZGF0YVRvUGFyZW50OmFueSA9IHt9O1xuICAgIGxldCB2YWxpZEZvcm0gPSB0cnVlOyAvLyBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2VcbiAgICBsZXQgaXNQcmltYXJ5S2V5ID0gZmFsc2U7XG4gICAgbGV0IHByaW1hcnlLZXlFbGVtZW50OiBhbnk7XG4gICAgbGV0IGRlcGVuZGVudEVsZW1lbnRBcnJheSA6IGFueVtdID0gW107XG4gICAgLy8gSEEgMjJKQU4yNCB0aGlzIGNoYW5nZSB0byBtYWtlIGNsb3NlIGV2ZW50IHdvcmtcbiAgICBkYXRhVG9QYXJlbnRbJ2FjdGlvbiddID0gYWN0aW9uLmV2ZW50dG9lbWl0O1xuICAgIGlmICghKGFjdGlvbi5ldmVudHRvZW1pdCA9PT0gJ2Nsb3NlJyB8fCBhY3Rpb24uZXZlbnR0b2VtaXQgPT09ICdwcmludCcpKSB7XG4gICAgICAvLyBIQSAxOC1KQU4tMjQgU2VuZGluZyB0aGUgY29tcGxldGUganNvbiBkYXRhIGFsc28gXG4gICAgICBkYXRhVG9QYXJlbnRbJ2pzb25Cb29rJ10gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgpO1xuICAgICAgLy8gSEEgMTdKQU4yNCBueHRJZCB0byBkYXRhUGFyZW50IG9iamVjdFxuICAgICAgaWYgKHRoaXMuYm9va2xldEpTT04pIHtcbiAgICAgICAgZGF0YVRvUGFyZW50WydueHRJZCddID0gT2JqZWN0LmtleXModGhpcy5ib29rbGV0SlNPTj8uYm9va1F1ZXN0aW9uc01hcClbMF07XG4gICAgICB9XG4gICAgICAvLyBIQSAxMS1KQU4tMjQgTWluaW1pemluZyB0aGUgdmFsdWUgd2hpY2ggaGFzIHRvIGJlIHBhc3NlZCB0byB0aGUgc2VydmVyXG4gICAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQm9va2xldChkYXRhVG9QYXJlbnRbJ2pzb25Cb29rJ10pO1xuICAgICAgZGF0YVRvUGFyZW50WydkYXRhJ10gPSB0aGlzLmFuc3dlckxpc3QgPyB0aGlzLmFuc3dlckxpc3QgOiBkYXRhVG9QYXJlbnRbJ2RhdGEnXTtcbiAgICAgIC8vIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b24gdmFsaWRhdGluZyB0aGUgcmVxdWlyZWQgZmllbGRzXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YVRvUGFyZW50Wydqc29uQm9vayddLmJvb2tRdWVzdGlvbnNNYXApIHtcbiAgICAgICAgY29uc3QgY3VycmVudEJvb2sgPSBkYXRhVG9QYXJlbnRbJ2pzb25Cb29rJ10uYm9va1F1ZXN0aW9uc01hcFtrZXldO1xuICAgICAgICBjdXJyZW50Qm9vay5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBpZiAoIWlzUHJpbWFyeUtleSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQ/LnByaW1hcnlLZXkgPT09IHRydWUgJiYgZWxlbWVudD8uaW5wdXQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50Py5pbnB1dCAhPT0gJycgJiYgZWxlbWVudD8uaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgaXNQcmltYXJ5S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcHJpbWFyeUtleUVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2VcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc09wdGlvbmFsICYmIGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPT0gJ3N1Ym1pdCcgJiYgKCFlbGVtZW50LmlucHV0IHx8IChBcnJheS5pc0FycmF5KGVsZW1lbnQuaW5wdXQpICYmIGVsZW1lbnQuaW5wdXQubGVuZ3RoID09PSAwKSkgJiYgIWVsZW1lbnQuaXNIaWRkZW4gJiYgZWxlbWVudC50eXBlICE9ICdMYWJlbCcgJiYgZWxlbWVudC50eXBlICE9ICdJbWFnZScpIHsgLy9TS1M1Tk9WMjUgXG4gICAgICAgICAgICBlbGVtZW50LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhbGlkRm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLnN1Ym1pdENoYW5nZShlbGVtZW50LmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgMDJBdWcyNCAtIGNsZWFyIGFjdGlvbiBjaGFuZ2VzXG4gICAgICAgICAgaWYgKGRhdGFUb1BhcmVudFsnYWN0aW9uJ10gPT0gJ2NsZWFyJykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSAnRHJvcGRvd24nIHx8IGVsZW1lbnQudHlwZSA9PSAnTG9jYXRpb24nIHx8IGVsZW1lbnQudHlwZSA9PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09ICdGaWxlJykge1xuICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYoZWxlbWVudC50eXBlID09PSBcIkJvb2xlYW5cIikgeyAvLyBTS1MyM0pVTjI1IGRlZmF1bHRseSBzZXQgdmFsdWUgZmFsc2VcbiAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYocXVlcz8uc3ViVGV4dD8uc291cmNlUXVlc3Rpb25JZCAhPT0gdW5kZWZpbmVkICYmIHF1ZXM/LnN1YlRleHQ/LnNvdXJjZVF1ZXN0aW9uSWQgIT09IG51bGwgJiYgcXVlcz8uc3ViVGV4dD8uc291cmNlUXVlc3Rpb25JZCAhPT0gJycgJiYgIXF1ZXM/LnN1YlRleHQ/LmlzRGVwZW5kZW50RmllbGQpIHtcblxuICAgICAgICB9IGVsc2UgaWYocXVlcz8uc3ViVGV4dD8uc291cmNlUXVlc3Rpb25JZCAhPT0gdW5kZWZpbmVkICYmIHF1ZXM/LnN1YlRleHQ/LnNvdXJjZVF1ZXN0aW9uSWQgIT09IG51bGwgJiYgcXVlcz8uc3ViVGV4dD8uc291cmNlUXVlc3Rpb25JZCAhPT0gJycgJiYgIHF1ZXM/LnN1YlRleHQ/LmlzRGVwZW5kZW50RmllbGQpe1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudEJvb2suc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlID0+IHtcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWxlPy5zdWJUZXh0Py5zb3VyY2VRdWVzdGlvbklkKT8gZWxlPy5zdWJUZXh0Py5zb3VyY2VRdWVzdGlvbklkLmluY2x1ZGVzKHF1ZXM/LmlkKSA6IHF1ZXM/LmlkID09PSBlbGU/LnN1YlRleHQ/LnNvdXJjZVF1ZXN0aW9uSWQgKXtcbiAgICAgICAgICAgICAgZGVwZW5kZW50RWxlbWVudEFycmF5LnB1c2goZWxlLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVkQgMTNNQVkyNCAtIHByaW50IFFSIGJ1dHRvbiBjaGFuZ2VzXG4gICAgaWYgKGFjdGlvbi5ldmVudHRvZW1pdCA9PT0gJ3ByaW50Jykge1xuICAgICAgZGF0YVRvUGFyZW50WydhY3Rpb25EYXRhJ10gPSBhY3Rpb25bJ2RhdGEnXTtcbiAgICB9XG4gICAgLy8gTVNNIDE3SlVOMjUgLSBDbG9zZSBidXR0b24gZXZlbnQgY2hhbmdlc1xuICAgIGlmIChhY3Rpb24uZXZlbnR0b2VtaXQgPT09ICdjbG9zZScgJiYgdGhpcy5pc0VkaXQpIHtcbiAgICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIEhBIDIzSkFOMjQgVG8gY2FsbCB0aGUgYWN0aW9uIG9uIGFueSBldmVudFxuICAgIC8vICBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2VcbiAgICBpZiAodmFsaWRGb3JtKSB7XG4gICAgICAvLyBTS1MxM0pVTjI1IHNpbmdsZSBmaWVsZCBjaGFuZ2UgZW1pdFxuICAgICAgaWYgKHF1ZXMgJiYgcXVlcy5zaW5nbGVGaWVsZENoYW5nZSkge1xuICAgICAgICBkYXRhVG9QYXJlbnQuZGF0YSA9IGRhdGFUb1BhcmVudC5kYXRhLmZpbHRlcigoaW5wdXREYXRhOiBhbnkpID0+IGlucHV0RGF0YS5pZCA9PT0gcXVlcy5pZCB8fCBpbnB1dERhdGEuaWQgPT09IHByaW1hcnlLZXlFbGVtZW50Py5pZCB8fCBkZXBlbmRlbnRFbGVtZW50QXJyYXkuaW5jbHVkZXMoaW5wdXREYXRhLmlkKSApO1xuICAgICAgfVxuICAgICAgaWYoaXNQcmltYXJ5S2V5KSB7XG4gICAgICAgIGRhdGFUb1BhcmVudC5hY3Rpb24gPSAgZGF0YVRvUGFyZW50LmFjdGlvbiA9PT0gJ3N1Ym1pdCcgPyAnc2F2ZScgOiAgZGF0YVRvUGFyZW50LmFjdGlvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlQm9va2xldEFjdGlvbkV2ZW50LmVtaXQoZGF0YVRvUGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVRvUGFyZW50WydhY3Rpb24nXSA9ICdlcnJvcic7XG4gICAgICB0aGlzLmhhbmRsZUJvb2tsZXRBY3Rpb25FdmVudC5lbWl0KGRhdGFUb1BhcmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gSEEgMTgtSkFOLTI0IGhhbmRsZUNvbXBsZXRlQm9va2xldCBpcyB0byBzaW1wbGlmeSB0aGUgbG9naWNcbiAgaGFuZGxlQ29tcGxldGVCb29rbGV0KGNvbXBsZXRlQm9va2xldCkge1xuICAgIGlmIChPYmplY3Qua2V5cyhjb21wbGV0ZUJvb2tsZXQ/LmJvb2tRdWVzdGlvbnNNYXAgPz8ge30pLmxlbmd0aCA9PT0gMCkgeyAvLyBIQSAxMS1KQU4tMjQgSWYgY29uZGl0aW9uIHRvIGxvYWQgYm9va2xldFxuICAgICAgdGhpcy5oYW5kbGVCb29rKGNvbXBsZXRlQm9va2xldD8ucXVlc3Rpb25ib29rPy5zdWJRdWVzdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gSEEgMTEtSkFOLTI0IFRvIGxvYWQgYm9vayBxdWVzdGlvbnNcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBsZXRlQm9va2xldC5ib29rUXVlc3Rpb25zTWFwKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IGNvbXBsZXRlQm9va2xldC5ib29rUXVlc3Rpb25zTWFwW2tleV07XG4gICAgICAgIGlmICh2YWwudHlwZSA9PT0gJ0Jvb2snKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVCb29rKHZhbC5zdWJRdWVzdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuaGFuZGxlUXVlcyh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSEEgMTEtSkFOLTI0IGhhbmRsZUJvb2sgbG9hZHMgdGhlIEJvb2tcbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgaGFuZGxlQm9vayhxdWVzTGlzdDogYW55KSB7XG4gICAgcXVlc0xpc3Q/LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnQm9vaycgJiYgZWxlbWVudC5xYlJlZmVyZW5jZVF1ZXN0aW9ucykge1xuICAgICAgICAvLyBIQSAyNEpBTjI0IEZldGNoaW5nIGZyb20gUUIgcmVmZXJlbmNlXG4gICAgICAgIHZhciBib29rID0gdHlwZW9mIGVsZW1lbnQucWJSZWZlcmVuY2VRdWVzdGlvbnMgPT09ICdvYmplY3QnID8gZWxlbWVudC5xYlJlZmVyZW5jZVF1ZXN0aW9ucyA6IEpTT04ucGFyc2UoZWxlbWVudC5xYlJlZmVyZW5jZVF1ZXN0aW9ucylcbiAgICAgICAgY29uc3QgZmlyc3RLZXkgPSBPYmplY3Qua2V5cyhib29rPy5ib29rUXVlc3Rpb25zTWFwIHx8IHt9KVswXTtcbiAgICAgICAgYm9vaz8uYm9va1F1ZXN0aW9uc01hcFtmaXJzdEtleV0/LnN1YlF1ZXN0aW9ucz8uZm9yRWFjaChxdWVzID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXMocXVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcyhlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBWRCAxM1NlcDI0IC0gZGF0YWJpbmQgY2hhbmdlc1xuICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICBpZiAodGhpcy5kYXRhQmluZCAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGFCaW5kKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuZGF0YUNoYW5nZXMoJ2RhdGFCaW5kJyk7XG4gICAgfVxuICB9XG4gIC8vIFNLUzIwTUFSMjUgZmxhdHRlbmluZyBuZXN0ZWQgb2JqZWN0cywgbWFwcGluZyB2YWx1ZXMgdXNpbmcgIHJlZmVyZW5jZUZpZWxkXG4gIGZsYXR0ZW5PYmplY3Qob2JqOiBhbnksIHBhcmVudEtleSA9ICcnKTogYW55W10ge1xuICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG4gIFxuICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgbGV0IG5ld0tleSA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX0uJHtrZXl9YCA6IGtleTtcbiAgXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBJbmNsdWRlIGZ1bGwgYXJyYXlcbiAgXG4gICAgICAgIHZhbC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5mbGF0dGVuT2JqZWN0KGl0ZW0sIGAke25ld0tleX1bJHtpbmRleH1dYCkpOyAvLyBGbGF0dGVuIG9iamVjdHMgaW4gYXJyYXlzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtgJHtuZXdLZXl9WyR7aW5kZXh9XWAsIGl0ZW1dKTsgLy8gU3RvcmUgcHJpbWl0aXZlIHZhbHVlcyBpbiBhcnJheXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIEFsd2F5cyBpbmNsdWRlIGZ1bGwgb2JqZWN0XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmxhdHRlbk9iamVjdCh2YWwsIG5ld0tleSkpOyAvLyBDb250aW51ZSBmbGF0dGVuaW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gU3RvcmUgcHJpbWl0aXZlIHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgXG4gIC8vIFNLUzIwTUFSMjUgcmVmZXJlbmNlRmllbGQgc2V0IGxpa2UgdGhpc1xuICAvLyBuYW1lICAtLT4gbm9ybWFsXG4gIC8vIGl0ZW1zWzBdLm5hbWUgIC0tPiB2YWx1ZSBpbiBhIGFycmF5IHNldCBsaWtlIHRoaXNcbiAgLy8gYWRkcmVzc2VzLmxpbmUyICAtLS0+IGlmIHZhbHVlIGluIGEganNvbiBzZXQgbGlrZSB0aGlzXG4gIC8vIGFkZHJlc3Nlcy5saW5lNC5kZCAtLS0+IGlmIHZhbHVlIGluIGEgbmVzdGVkIGpzb24gc2V0IGxpa2UgdGhpc1xuXG4gIC8vIEhBIDExLUpBTi0yNCBoYW5kbGVRdWVzIHRvIGxvYWQgcXVlc3Rpb25cbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIGhhbmRsZVF1ZXMocXVlczogYW55KSB7XG4gICAgLy8gSEEgMTktSkFOLTI0IElmIGNvbmRpdGlvbiBpcyBmb3IgYmluZC1pbiwgY29ycmVjdGlvblxuICAgIC8vIEhBIDA5RkVCMjQgQWRkaW5nIGNvbmRpdGlvbiB0byBhdm9pZCB1bmRlZmluZWQgZXJyb3JcbiAgICBpZiAodGhpcy5kYXRhQmluZCAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGFCaW5kKS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5mbGF0dGVuT2JqZWN0KHRoaXMuZGF0YUJpbmQpXG4gICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgcmVzdWx0KSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gdmFsO1xuICAgICAgICBpZiAocXVlcy5yZWZlcmVuY2VGaWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGlmIChxdWVzLnR5cGUgPT09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICB0aGlzLnNxT3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudFsncmVmZXJlbmNlRmllbGQnXSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICBlbGVtZW50WydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDI0SkFOMjQgVG8gYmluZC1pbiBEYXRlIGFuZCBEYXRlVGltZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gbmV3IERhdGUodmFsdWU/LnRvU3RyaW5nKCkpICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLWluIExvY2F0aW9uIFR5cGVcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlWydhZGRyZXNzJ10gPyB2YWx1ZVsnYWRkcmVzcyddIDogdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcyBmb3IgZGF0YSBiaW5kSW5cbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gdHlwZW9mIHF1ZXNbJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyBxdWVzWydmaWVsZHNNZXRhJ10gOiBKU09OLnBhcnNlKHF1ZXNbJ2ZpZWxkc01ldGEnXSk7XG4gICAgICAgICAgICBpZiAoZW50cmllcykge1xuICAgICAgICAgICAgICBsZXQgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcVJlZmVyZW5jZSA9IEpTT04ucGFyc2UoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5wdXNoKHFSZWZlcmVuY2U/LnF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZT8uZm9yRWFjaChjYWxlbmRhckFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY2FsZW5kYXJBcnJheS5kYXRlKTtcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFyQXJyYXkuZW50cmllcy5mb3JFYWNoKGlucHV0RW50cnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXRFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQucmVmZXJlbmNlRmllbGQgPT0gaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ0RhdGUnIHx8IGZpZWxkLnR5cGUgPT0gJ0RhdGVUaW1lJyB8fCBmaWVsZC50eXBlID09ICdUaW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gbmV3IERhdGUodj8udG9TdHJpbmcoKSkgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gaWYgKGZpZWxkLnR5cGUgPT09ICdEcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdGVkVmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdiAgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudChkYXRlLCByZWZlcmVuY2VRdWVzdGlvbnMpOy8vU0tTIDI3U0VQMjQgZWFjaCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUscmVmZXJlbmNlUXVlc3Rpb25zKTsgLy90aGlzIGlzIG9ubHkgbGFzdCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuYWxsRXZlbnRzLmxlbmd0aCA+IDAgPyB0aGlzLmFsbEV2ZW50cyA6ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRmlsZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBbXTtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYocXVlcy50eXBlID09PSBcIkJvb2xlYW5cIikgeyAvLyBTS1MyM0pVTjI1IGRlZmF1bHRseSBzZXQgdmFsdWUgZmFsc2VcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnID8gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJyA6IHR5cGVvZiBxdWVzLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gdHJ1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gJ3RydWUnIDogZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hbnN3ZXJMaXN0LnB1c2gocXVlcyk7IC8vIEhBIDEyRkVCMjQgVG8gZ2l2ZSB0aGUgdmFsdWUgZm9yIGRhdGFcbiAgICAgICAgICBicmVhazsgLy8gQVAtMDNKVU4yNSAtIE1hdGNoIGZvdW5kIGFuZCB2YWx1ZSBib3VuZDsgbm8gbmVlZCB0byBjb250aW51ZSB0aGUgbG9vcFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nID8gcXVlcy5pbnB1dCA9IGZhbHNlIDogcXVlcy5pbnB1dCA9IG51bGwgIC8vIFNLUzIzSlVOMjUgZGVmYXVsdGx5IHNldCB2YWx1ZSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0ge307XG4gICAgICBxdWVzdGlvblsnaWQnXSA9IHF1ZXMuaWQ7XG4gICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgfHwgcXVlcy5kZWZhdWx0VmFsdWUgIHx8IG51bGw7XG4gICAgICAvLyBIQSAxMkZFQjI0IFRvIGJpbmQtb3V0IExvY2F0aW9uIFR5cGVcbiAgICAgIGlmIChxdWVzLnR5cGUgPT09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZSB8fCBudWxsO1xuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IFtdO1xuICAgICAgfSAgZWxzZSBpZihxdWVzLnR5cGUgPT09IFwiQm9vbGVhblwiKSB7IC8vIFNLUzIzSlVOMjUgZGVmYXVsdGx5IHNldCB2YWx1ZSBmYWxzZVxuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHR5cGVvZiBxdWVzLmlucHV0ICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuaW5wdXQgPT09IHRydWUgfHwgcXVlcy5pbnB1dCA9PT0gJ3RydWUnIDogdHlwZW9mIHF1ZXMuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuZGVmYXVsdFZhbHVlID09PSB0cnVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgOiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uWyd0eXBlJ10gPSBxdWVzLnR5cGU7XG4gICAgICBxdWVzdGlvblsncXVlc3Rpb25OdW1iZXInXSA9IHF1ZXMucXVlc3Rpb25OdW1iZXI7XG4gICAgICBxdWVzdGlvblsncmVmZXJlbmNlRmllbGQnXSA9IHF1ZXM/LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgcXVlc3Rpb25bJ3NlbGVjdGVkVmFsdWUnXSA9IHF1ZXM/LnNlbGVjdGVkVmFsdWU7ICAvLyBNUiAzMUpBTjI0IE5lZWQgdG8gcGFzcyB0aGUgc2VsZWN0ZWQgdmFsdWUgdG9vXG4gICAgICB0aGlzLmFuc3dlckxpc3QucHVzaChxdWVzdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzIGZvciBkYXRhIGJpbmRJblxuICBhZGRFdmVudChkYXk6IGFueSwgZW50cnlRdWVzKSB7XG4gICAgLy8gVHJhbnNmb3JtIG5ldyBlbnRyaWVzIGludG8gdGhlIGRlc2lyZWQgZm9ybWF0XG4gICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJ5UXVlcy5yZWR1Y2UoKGFjYywgcSkgPT4ge1xuICAgICAgYWNjW3EuaWRdID0geyAuLi5xIH07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIC8vIEZpbmQgaWYgYW4gZXZlbnQgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSBnaXZlbiBkYXRlXG4gICAgY29uc3QgZXhpc3RpbmdFdmVudCA9IHRoaXMuYWxsRXZlbnRzLmZpbmQoZXZlbnQgPT4gZXZlbnQuZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gZGF5LnRvRGF0ZVN0cmluZygpKTtcblxuICAgIGlmIChleGlzdGluZ0V2ZW50KSB7XG4gICAgICAvLyBJZiB0aGUgZXZlbnQgZXhpc3RzLCBwdXNoIHRoZSBuZXcgZW50cmllcyB0byB0aGUgZXhpc3RpbmcgZW50cmllc1xuICAgICAgY29uc3QgZXhpc3RpbmdFbnRyaWVzID0gZXhpc3RpbmdFdmVudC5lbnRyaWVzLm1hcChlbnRyeSA9PiAoeyAuLi5lbnRyeSB9KSk7XG4gICAgICBleGlzdGluZ0VudHJpZXMucHVzaChuZXdFbnRyaWVzKTtcbiAgICAgIGV4aXN0aW5nRXZlbnQuZW50cmllcyA9IGV4aXN0aW5nRW50cmllcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgbmV3IGV2ZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBnaXZlbiBkYXRlXG4gICAgICBjb25zdCBuZXdFdmVudCA9IHtcbiAgICAgICAgaWQ6ICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KSxcbiAgICAgICAgZGF0ZTogZGF5LFxuICAgICAgICBlbnRyaWVzOiBbbmV3RW50cmllc10gLy8gV3JhcCB0aGUgbmV3IGVudHJpZXMgaW4gYW4gYXJyYXlcbiAgICAgIH07XG4gICAgICB0aGlzLmFsbEV2ZW50cy5wdXNoKG5ld0V2ZW50KTtcbiAgICB9XG4gIH1cblxuXG4gIHJlYWRRdWVzdGlvbnMocWJJZDogc3RyaW5nKSB7XG4gICAgbGV0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IHRvIGF2b2lkIHVuZGVmaW5lZFxuICAgIGZvciAodmFyIHNxIGluIHRoaXMuYm9va1F1ZXN0aW9uc01hcD8uZ2V0KHFiSWQpPy5zdWJRdWVzdGlvbnMpIHtcbiAgICAgIC8vIEFQLTE0TUFZMjUgRXh0cmFjdGVkIHF1ZXN0aW9uIGZyb20gc3ViUXVlc3Rpb25zIGludG8gdmFyaWFibGUgJ3EnXG4gICAgICBsZXQgcTogYW55ID0gdGhpcy5ib29rUXVlc3Rpb25zTWFwPy5nZXQocWJJZCkuc3ViUXVlc3Rpb25zW3NxXTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgaWYgcXVlc3Rpb24gaXMgdGhlcmUgcHJvY2Vzc1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgaWYgKChxLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxLnR5cGUgPT0gJ1JhZGlvJykgJiYgdGhpcy5zcU9wdGlvbnMuZ2V0KHEuaWQpKSB7XG4gICAgICAgICAgcXVlc3Rpb25zLnB1c2godGhpcy5zcU9wdGlvbnMuZ2V0KHEuaWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZEIDEySnVuMjQgZmllbGQgcGVybWlzaXNpb24gY2hhbmdlc1xuICAgIGlmICh0aGlzLmZpZWxkUmVzdHJpY3Rpb25zKSB7XG4gICAgICBjb25zdCBmaWVsZFJlc3RyaWN0aW9ucyA9IG5ldyBNYXAoT2JqZWN0LmVudHJpZXModGhpcy5maWVsZFJlc3RyaWN0aW9ucy5maWVsZHMpKTtcbiAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgICBjb25zdCByZXN0cmljdGlvbiA9IGZpZWxkUmVzdHJpY3Rpb25zLmdldChxdWVzLnVuaXF1ZUlkZW50aWZpZXIpO1xuXG4gICAgICAgIGlmIChyZXN0cmljdGlvbikge1xuICAgICAgICAgIHF1ZXMuaXNSZWFkT25seSA9IHJlc3RyaWN0aW9uID09PSAncmVhZE9ubHknO1xuICAgICAgICAgIHF1ZXMuaXNIaWRkZW4gPSByZXN0cmljdGlvbiA9PT0gJ2hpZGUnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxuICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICByZWFkVHJhbnNRdWVzdGlvbnMocWJJZDogc3RyaW5nKSB7XG4gICAgbGV0IHJlY29yZCA9IFtdO1xuICAgIGxldCB0cmFuc2xhdGVSZWNvcmQgPSB0aGlzLnRyYW5zbGF0ZU1hcC5nZXQocWJJZCk7XG4gICAgaWYgKHRyYW5zbGF0ZVJlY29yZCAmJiB0cmFuc2xhdGVSZWNvcmQubGVuZ3RoID4gMCkge1xuICAgICAgdHJhbnNsYXRlUmVjb3JkLmZvckVhY2gobGFuUmVjID0+IHtcbiAgICAgICAgaWYgKGxhblJlYy5sYW5ndWFnZUNvZGUgPT0gdGhpcy5sYW5ndWFnZUNvZGUpIHtcbiAgICAgICAgICByZWNvcmQgPSBsYW5SZWMuZmllbGRzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG5cbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuICBnZXREcm9wRG93bihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xuICB9XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBnZXRDYWxlbmRhckRhdGUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJEYXRlLmVtaXQoZXZlbnQpO1xuICB9XG4gIGdldENhbGVuZGFyRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50W1wibnh0SWRcIl0gPSBPYmplY3Qua2V5cyh0aGlzLmJvb2tsZXRKU09OPy5ib29rUXVlc3Rpb25zTWFwKVswXTtcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRXZlbnQuZW1pdChldmVudCk7XG4gIH1cbiAgZWRpdENoYW5nZUNsaWNrKGFjdGlvbjogYW55KXtcbiAgICB0aGlzLmlzRWRpdCA9IHRydWVcbiAgfVxufVxuIiwiPCEtLSBCb29rbGV0IEhhbmRsaW5nLS0+XG48IS0tIEhBIDE5REVDMjMgRm9yIERpcmVjdGlvbiAtLT5cbjxkaXYgKm5nRm9yPVwibGV0IHFiIG9mIGJvb2tsZXRcIiBbbmdDbGFzc109XCJsYW5nRGlyZWN0aW9uXCI+XG4gICAgPCEtLSBNUiBDb21tZW50ZWQgYmVsb3cgY29kZSB0byBlbnN1cmUgc2luZ2xlIEpTT04gZm9yIFVOQ09ORElUSU9OQUwgQm9va2xldHMgLS0+XG4gICAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICAgIDwhLS0gPGxpYi1xdWVzdGlvbm5haXJlIFtzZXJ2XT1cInNlcnZcIiBbcWJJZF09XCJxYi5pZFwiIFt0a25dPVwidGtuXCI+PC9saWItcXVlc3Rpb25uYWlyZT4gLS0+XG4gICAgPCEtLSBIQSAyOERFQzIzIEJlbG93IElmIGxvZ2ljIGlzIHRvIGxvYWQgZnJvbSBib29rbGV0ICAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicWIuc3ViUXVlc3Rpb25zOyBlbHNlIGVsc2VCbG9ja1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzIG9mIHFiLnN1YlF1ZXN0aW9uc1wiIGNsYXNzPVwicXVlc3Rpb25kaXYxXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMTdKQU4yNCAtIElzIHRpdGxlIGlzIGVuYWJsZWQgc28gdGhhdCBiYXNlZCBvbiB0aGUgYm9vbGVhbiBkaXYgd2lsbCBiZSB2aXNpYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLmlzVGl0bGVcIiBbY2xhc3NdPVwicWIuaXNTaGVuZ2VsID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplIGFkZGl0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVkQgMDhOT1YyMyAtIHNob3dpbmcgbGFiZWwgd2hlbiBpdHMgYXZhaWxhYmxlLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXM/LnF1ZXN0aW9uVGV4dClcIiAqbmdJZj1cInF1ZXM/LnF1ZXN0aW9uVGV4dCAmJiBxdWVzPy5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHF1ZXM/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gPCEtLSBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dCAtLT4gPCEtLVZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzLS0+XG4gICAgICAgICAgICAgICAgPCEtLVZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcy0tPlxuICAgICAgICAgICAgICAgIDwhLS0gQVAtMTRNQVkyNSAtIEFkZGVkIFtkYXRhQmluZF0gaW5wdXQgYmluZGluZyAtLT5cbiAgICAgICAgICAgICAgICAgPCEtLSBBUC0xOU1BWTI1IC0gQWRkZWQgW2lzRWRpdF0gYmluZGluZyAtLT4gXG4gICAgICAgICAgICAgICAgICA8IS0tIC8vTVNNMTBKVUwyNSAgYWxsSWNvbnMsIHRoZW1lQ29sb3IsIGNkbkljb25VUkwgYWRkZWQgZm9yIGljb24tc2VsZWN0b3ItLT5cbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiXCIgW3Rva2VuXT1cInRva2VuXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJsYWJlbFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbcXVlc3Rpb25JdGVtXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVkUXVlc3Rpb25zXT1cInJlYWRUcmFuc1F1ZXN0aW9ucyhxYi5pZClcIlxuICAgICAgICAgICAgICAgIFtxdWVzdGlvbnNdPVwicmVhZFF1ZXN0aW9ucyhxYi5pZClcIlxuICAgICAgICAgICAgICAgIChoYW5kbGVEcm9wRG93bik9XCJnZXREcm9wRG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoaGFuZGxlQ2FsZW5kYXJEYXRlKT1cImdldENhbGVuZGFyRGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoaGFuZGxlQ2FsZW5kYXJFdmVudCk9XCJnZXRDYWxlbmRhckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzaW5nbGVGaWVsZENoYW5nZUVtaXQpID0nc2luZ2xlRmllbGRDaGFuZ2UoJGV2ZW50KSdcbiAgICAgICAgICAgICAgICBbZGF0YUJpbmRdPVwiZGF0YUJpbmRcIlxuICAgICAgICAgICAgICAgIFtpc0VkaXRdPVwiaXNFZGl0XCIgXG4gICAgICAgICAgICAgICAgW2FsbEljb25zXT1cImFsbEljb25zXCJcbiAgICAgICAgICAgICAgICBbdGhlbWVDb2xvcl09XCJ0aGVtZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbY2RuSWNvblVSTF09XCJjZG5JY29uVVJMXCJcbiAgICAgICAgICAgICAgICA+PC9saWItcXVlc3Rpb25ib29rPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gSEEgMjhERUMyMyBCZWxvdyBlbHNlIGxvZ2ljIGlzIHRvIGxvYWQgZnJvbSBib29rcyBvciBxdWVzdGlvbnMgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbmRpdjFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYi5pc1RpdGxlXCIgW2NsYXNzXT1cInFiLmlzU2hlbmdlbCA/ICdoZWFkZXItc3R5bGUnIDogJ3F1ZXN0aW9uLWYtc2l6ZSBhZGRpdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFZEIDA4Tk9WMjMgLSBzaG93aW5nIGxhYmVsIHdoZW4gaXRzIGF2YWlsYWJsZS0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYj8ucXVlc3Rpb25UZXh0KVwiICpuZ0lmPVwicWI/LnF1ZXN0aW9uVGV4dCAmJiBxYj8uc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBxYj8ucXVlc3Rpb25UZXh0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBxYj8udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXQgLS0+IDwhLS0gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzLS0+XG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxYlwiIFt0b2tlbl09XCJ0b2tlblwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIiBbcXVlc3Rpb25JdGVtXT1cInFiXCIgW3RyYW5zbGF0ZWRRdWVzdGlvbnNdPVwicmVhZFRyYW5zUXVlc3Rpb25zKHFiLmlkKVwiIFtxdWVzdGlvbnNdPVwicmVhZFF1ZXN0aW9ucyhxYi5pZClcIiAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgICA8IS0tIEdyb3VwIEFjdGlvbnMgLS0+XG4gICAgPCEtLSBIQSAxOURFQzIzIEZvciBEaXJlY3Rpb24gLS0+XG4gICAgPCEtLSBBUCAyM01BWTI1IC0gQWN0aW9uIEJ1dHRvbnM6IER5bmFtaWNhbGx5IHBvc2l0aW9uZWQgYnV0dG9ucyB3aXRoIEpTT04tY29uZmlndXJlZCBzdHlsZXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImFsaWduLXN1Ym1pdC1yb3dcIiAqbmdJZj1cImFiSXRlbT8uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgW25nQ2xhc3NdPVwibGFuZ0RpcmVjdGlvblwiPiA8IS0tIHBvc2l0aW9uLXJlbGF0aXZlIHJlbW92ZWQgaW4gdGhpcyB0YWctLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJhY3Rpb24ud2lkdGggfHwgMTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweDtcIj4gIDwhLS0gc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IFtzdHlsZS5sZWZ0LiVdPVwiYWN0aW9uLnBvc2l0aW9uUGVyY2VudCB8fCAwXCIgIHJlbW92ZWQgaW4gdGhpcyB0YWcgLS0+XG4gICAgICAgICAgICAgICAgQGlmKCFpc0VkaXQgJiYgYWN0aW9uLm5hbWUgPT09ICdTYXZlJyl7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdENoYW5nZUNsaWNrKGFjdGlvbilcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGZjLWJ1dHRvbiBueHRCdXR0b24gYWN0aW9uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1idG4tYmddPVwiYWN0aW9uLmJnQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYWN0aW9uLmJnQ29sb3IgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImFjdGlvbi50ZXh0Q29sb3IgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlci1yYWRpdXMucHhdPVwiYWN0aW9uLmJvcmRlclJhZGl1cyB8fCA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQm9va2xldEFjdGlvbkNsaWNrKGFjdGlvbilcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGZjLWJ1dHRvbiBueHRCdXR0b24gYWN0aW9uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1idG4tYmddPVwiYWN0aW9uLmJnQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYWN0aW9uLmJnQ29sb3IgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImFjdGlvbi50ZXh0Q29sb3IgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlci1yYWRpdXMucHhdPVwiYWN0aW9uLmJvcmRlclJhZGl1cyB8fCA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|