emanate-ai-chat-lib 0.1.3 → 0.1.4

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.
@@ -289,13 +289,7 @@ export class AiChatComponent {
289
289
  this.authorName = '';
290
290
  this.intent = '';
291
291
  this.isLoading = true;
292
- const request = {
293
- query: inquiry,
294
- conversationId: this.conversationId,
295
- userId: this.userId,
296
- userName: this.userName,
297
- appSource: this.appSource
298
- };
292
+ const request = Object.assign(Object.assign(Object.assign(Object.assign({ query: inquiry }, (this.conversationId && { conversationId: String(this.conversationId) })), (this.userId && { userId: this.userId })), (this.userName && { userName: this.userName })), (this.appSource && { appSource: this.appSource }));
299
293
  this.aiAgentService.processInquiry(request)
300
294
  .pipe(takeUntil(this.destroy$))
301
295
  .subscribe({
@@ -746,4 +740,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
746
740
  }], sizeChanged: [{
747
741
  type: Output
748
742
  }] } });
749
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbWFuYXRlLWFpLWNoYXQtbGliL3NyYy9saWIvY29tcG9uZW50cy9haS1jaGF0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VtYW5hdGUtYWktY2hhdC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FpLWNoYXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFFcEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUErQixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7O0FBZ0MxRixNQUFNLE9BQU8sZUFBZTtJQStEMUIsWUFDVSxjQUE4QixFQUM5QixTQUF1QjtRQUR2QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQWhFeEIsVUFBSyxHQUFXLG1CQUFtQixDQUFDO1FBQ3BDLGdCQUFXLEdBQVcsMkVBQTJFLENBQUM7UUFDbEcsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFXL0Isc0JBQWlCLEdBQVksS0FBSyxDQUFDLENBQUMscUNBQXFDO1FBQ3pFLHFCQUFnQixHQUFZLEtBQUssQ0FBQyxDQUFFLG9DQUFvQztRQUN4RSxZQUFPLEdBQWdCLFNBQVMsQ0FBQyxDQUFHLHFCQUFxQjtRQUV6RCxxQkFBZ0IsR0FBWSxJQUFJLENBQUMsQ0FBRyxnQ0FBZ0M7UUFDcEUsbUJBQWMsR0FBK0IsUUFBUSxDQUFDLENBQUMsMEJBQTBCO1FBQ2pGLDRCQUF1QixHQUFZLElBQUksQ0FBQyxDQUFDLDhDQUE4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QkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQWlBZ2VudFNlcnZpY2UsIEFnZW50UmVzcG9uc2UsIFN1cHBvcnRCb3RSZXF1ZXN0LCBTdXBwb3J0Qm90UmVzcG9uc2UsIENoYXRDb250ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvYWktYWdlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEljb25TZXRUeXBlLCBDaGF0SWNvbkNvbmZpZywgZ2V0SWNvblNldCB9IGZyb20gJy4uL21vZGVscy9pY29uLWNvbmZpZy5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGF0TWVzc2FnZSB7XHJcbiAgbWVzc2FnZUlkPzogc3RyaW5nOyAgICAgICAgICAgLy8gVW5pcXVlIG1lc3NhZ2UgaWRlbnRpZmllclxyXG4gIGNvbnZlcnNhdGlvbklkPzogc3RyaW5nOyAgICAgICAvLyBDb252ZXJzYXRpb24vc2Vzc2lvbiBpZGVudGlmaWVyXHJcbiAgaXNVc2VyOiBib29sZWFuO1xyXG4gIGNvbnRlbnQ6IHN0cmluZztcclxuICBzZW5kZXI/OiBzdHJpbmc7ICAgICAgICAgICAgICAgLy8gU2VuZGVyIG5hbWUgKG1hcHMgdG8geW91ciAnc2VuZGVyJyBmaWVsZClcclxuICBpbnRlbnQ/OiBzdHJpbmc7XHJcbiAgYXV0aG9yTmFtZT86IHN0cmluZztcclxuICBjb25maWRlbmNlU2NvcmU/OiBudW1iZXI7ICAgICAgLy8gQUkgY29uZmlkZW5jZSBzY29yZVxyXG4gIHRpbWVzdGFtcDogRGF0ZTtcclxuICBpc0xvYWRpbmc/OiBib29sZWFuO1xyXG4gIGF0dGFjaG1lbnRzPzogRmlsZUF0dGFjaG1lbnRbXTsgLy8gRmlsZS9JbWFnZSBhdHRhY2htZW50c1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVBdHRhY2htZW50IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgc2l6ZTogbnVtYmVyO1xyXG4gIHVybD86IHN0cmluZztcclxuICBkYXRhPzogc3RyaW5nIHwgQXJyYXlCdWZmZXI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENoYXRTaXplID0gJ2NvbXBhY3QnIHwgJ2RlZmF1bHQnIHwgJ2V4cGFuZGVkJyB8ICdmdWxsc2NyZWVuJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZW1hbmF0ZS1haS1jaGF0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWktY2hhdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWktY2hhdC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBaUNoYXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ0NoYXQgd2l0aCBNYWVzdHJvJztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1R5cGUgeW91ciBpbnF1aXJ5IGhlcmUuLi4gKFByZXNzIEVudGVyIHRvIHNlbmQsIFNoaWZ0K0VudGVyIGZvciBuZXcgbGluZSknO1xyXG4gIEBJbnB1dCgpIHNob3dEZWJ1Z0luZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhcGlVcmw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwS2V5Pzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcFNvdXJjZT86IHN0cmluZztcclxuICBASW5wdXQoKSB1c2VySWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZmlyc3ROYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVzZXJOYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlRGVzaWduPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHdlbGNvbWVNZXNzYWdlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhpc3RvcmljYWxNZXNzYWdlcz86IGFueVtdOyAvLyBIaXN0b3JpY2FsIG1lc3NhZ2VzIGZyb20gcGFyZW50XHJcbiAgQElucHV0KCkgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7ICAgIC8vIEN1cnJlbnQgY29udmVyc2F0aW9uIElEXHJcbiAgQElucHV0KCkgZW5hYmxlSW1hZ2VVcGxvYWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRW5hYmxlL2Rpc2FibGUgaW1hZ2UgdXBsb2FkIGJ1dHRvblxyXG4gIEBJbnB1dCgpIGVuYWJsZUZpbGVVcGxvYWQ6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIEVuYWJsZS9kaXNhYmxlIGZpbGUgdXBsb2FkIGJ1dHRvblxyXG4gIEBJbnB1dCgpIGljb25TZXQ6IEljb25TZXRUeXBlID0gJ2ZlYXRoZXInOyAgIC8vIEljb24gc2V0IHNlbGVjdGlvblxyXG4gIEBJbnB1dCgpIGN1c3RvbUljb25zPzogUGFydGlhbDxDaGF0SWNvbkNvbmZpZz47IC8vIEN1c3RvbSBpY29uIG92ZXJyaWRlc1xyXG4gIEBJbnB1dCgpIGVuYWJsZUFuaW1hdGlvbnM6IGJvb2xlYW4gPSB0cnVlOyAgIC8vIEVuYWJsZS9kaXNhYmxlIGFsbCBhbmltYXRpb25zXHJcbiAgQElucHV0KCkgYW5pbWF0aW9uU3BlZWQ6ICdzbG93JyB8ICdub3JtYWwnIHwgJ2Zhc3QnID0gJ25vcm1hbCc7IC8vIEFuaW1hdGlvbiBzcGVlZCBjb250cm9sXHJcbiAgQElucHV0KCkgZW5hYmxlU3RhdHVzVHJhbnNpdGlvbnM6IGJvb2xlYW4gPSB0cnVlOyAvLyBFbmFibGUvZGlzYWJsZSBzdGF0dXMgaW5kaWNhdG9yIHRyYW5zaXRpb25zXHJcbiAgQE91dHB1dCgpIG1lc3NhZ2VSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgQE91dHB1dCgpIG1lc3NhZ2VTZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGF0TWVzc2FnZT4oKTtcclxuICBAT3V0cHV0KCkgZmlsZVVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlQXR0YWNobWVudD4oKTtcclxuICBAT3V0cHV0KCkgc2l6ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc2l6ZTogQ2hhdFNpemUsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0+KCk7XHJcblxyXG4gIG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdID0gW107XHJcbiAgY3VycmVudElucXVpcnkgPSAnJztcclxuICBhdXRob3JOYW1lID0gJyc7XHJcbiAgaW50ZW50ID0gJyc7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgY29uZmlndXJhdGlvblN0YXR1cyA9ICcnO1xyXG4gIHByZXZpb3VzU3RhdHVzID0gJyc7IC8vIFRyYWNrIHByZXZpb3VzIHN0YXR1cyBmb3IgdHJhbnNpdGlvbnNcclxuICBcclxuICAvLyBSZXNpemluZyBwcm9wZXJ0aWVzXHJcbiAgY3VycmVudFNpemU6IENoYXRTaXplID0gJ2RlZmF1bHQnO1xyXG4gIGlzRnVsbHNjcmVlbiA9IGZhbHNlO1xyXG4gIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICBjb250YWluZXJXaWR0aCA9IDgwMDtcclxuICBjb250YWluZXJIZWlnaHQgPSA2MDA7XHJcbiAgbWluV2lkdGggPSA0MDA7XHJcbiAgbWF4V2lkdGggPSAxNDAwO1xyXG4gIG1pbkhlaWdodCA9IDQwMDtcclxuICBtYXhIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMDA7XHJcbiAgc3RhcnRYID0gMDtcclxuICBzdGFydFkgPSAwO1xyXG4gIHN0YXJ0V2lkdGggPSAwO1xyXG4gIHN0YXJ0SGVpZ2h0ID0gMDtcclxuICBcclxuICAvLyBGaWxlIHVwbG9hZCBwcm9wZXJ0aWVzXHJcbiAgbWF4RmlsZVNpemUgPSAxMCAqIDEwMjQgKiAxMDI0OyAvLyAxME1CXHJcbiAgYWxsb3dlZEltYWdlVHlwZXMgPSBbJ2ltYWdlL3BuZycsICdpbWFnZS9qcGVnJywgJ2ltYWdlL2pwZycsICdpbWFnZS9naWYnLCAnaW1hZ2Uvd2VicCddO1xyXG4gIGFsbG93ZWRGaWxlVHlwZXMgPSBbJ2FwcGxpY2F0aW9uL3BkZicsICdhcHBsaWNhdGlvbi9tc3dvcmQnLCBcclxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXHJcbiAgICAndGV4dC9wbGFpbicsICd0ZXh0L2NzdiddO1xyXG4gIHNlbGVjdGVkRmlsZXM6IEZpbGVBdHRhY2htZW50W10gPSBbXTtcclxuICBcclxuICAvLyBJY29uIGNvbmZpZ3VyYXRpb25cclxuICBpY29uczogQ2hhdEljb25Db25maWcgPSBnZXRJY29uU2V0KCdmZWF0aGVyJyk7XHJcbiAgc2FuaXRpemVkSWNvbnM6IHsgW2tleTogc3RyaW5nXTogU2FmZUh0bWwgfSA9IHt9O1xyXG4gIFxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWlBZ2VudFNlcnZpY2U6IEFpQWdlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cygnSW5pdGlhbGl6aW5nLi4uJyk7XHJcbiAgICBjb25zb2xlLmxvZygnQUkgQ2hhdCBDb21wb25lbnQgaW5pdGlhbGl6ZWQnKTtcclxuICAgIFxyXG4gICAgLy8gTG9hZCBpY29uIHNldFxyXG4gICAgdGhpcy5pY29ucyA9IGdldEljb25TZXQodGhpcy5pY29uU2V0LCB0aGlzLmN1c3RvbUljb25zKTtcclxuICAgIHRoaXMuc2FuaXRpemVJY29ucygpO1xyXG4gICAgXHJcbiAgICAvLyBDb25maWd1cmUgQVBJIFVSTCBhbmQgQXBwIEtleSBpZiBwcm92aWRlZFxyXG4gICAgaWYgKHRoaXMuYXBpVXJsIHx8IHRoaXMuYXBwS2V5KSB7XHJcbiAgICAgIHRoaXMuYWlBZ2VudFNlcnZpY2UuY29uZmlndXJlKHsgXHJcbiAgICAgICAgYXBpVXJsOiB0aGlzLmFwaVVybCxcclxuICAgICAgICBhcHBLZXk6IHRoaXMuYXBwS2V5IFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gTG9hZCBoaXN0b3JpY2FsIG1lc3NhZ2VzIGlmIHByb3ZpZGVkXHJcbiAgICAgIGlmICh0aGlzLmhpc3RvcmljYWxNZXNzYWdlcyAmJiB0aGlzLmhpc3RvcmljYWxNZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkSGlzdG9yaWNhbE1lc3NhZ2VzKHRoaXMuaGlzdG9yaWNhbE1lc3NhZ2VzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFkZFdlbGNvbWVNZXNzYWdlKCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRoaXMudGVzdENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgdGhpcy5sb2FkU2F2ZWRTaXplKCk7XHJcbiAgICAgIHRoaXMuYXBwbHlTaXplUHJlc2V0KHRoaXMuY3VycmVudFNpemUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbjonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdHVzKCdJbml0aWFsaXphdGlvbiBlcnJvcicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gRGV0ZWN0IHdoZW4gaGlzdG9yaWNhbE1lc3NhZ2VzIGlucHV0IGNoYW5nZXNcclxuICAgIGlmIChjaGFuZ2VzWydoaXN0b3JpY2FsTWVzc2FnZXMnXSAmJiAhY2hhbmdlc1snaGlzdG9yaWNhbE1lc3NhZ2VzJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgY29uc3QgbmV3TWVzc2FnZXMgPSBjaGFuZ2VzWydoaXN0b3JpY2FsTWVzc2FnZXMnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdIaXN0b3JpY2FsIG1lc3NhZ2VzIGNoYW5nZWQ6JywgbmV3TWVzc2FnZXMpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2xlYXIgZXhpc3RpbmcgbWVzc2FnZXMgYW5kIHJlbG9hZFxyXG4gICAgICB0aGlzLm1lc3NhZ2VzID0gW107XHJcbiAgICAgIFxyXG4gICAgICBpZiAobmV3TWVzc2FnZXMgJiYgbmV3TWVzc2FnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMubG9hZEhpc3RvcmljYWxNZXNzYWdlcyhuZXdNZXNzYWdlcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZGRXZWxjb21lTWVzc2FnZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIERldGVjdCB3aGVuIGNvbnZlcnNhdGlvbklkIGNoYW5nZXNcclxuICAgIGlmIChjaGFuZ2VzWydjb252ZXJzYXRpb25JZCddICYmICFjaGFuZ2VzWydjb252ZXJzYXRpb25JZCddLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdDb252ZXJzYXRpb24gSUQgY2hhbmdlZDonLCBjaGFuZ2VzWydjb252ZXJzYXRpb25JZCddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIC8vIFVwZGF0ZSBhbGwgZXhpc3RpbmcgbWVzc2FnZXMgd2l0aCBuZXcgY29udmVyc2F0aW9uSWQgaWYgbmVlZGVkXHJcbiAgICAgIHRoaXMubWVzc2FnZXMuZm9yRWFjaChtc2cgPT4ge1xyXG4gICAgICAgIGlmIChtc2cuY29udmVyc2F0aW9uSWQgIT09IHRoaXMuY29udmVyc2F0aW9uSWQpIHtcclxuICAgICAgICAgIG1zZy5jb252ZXJzYXRpb25JZCA9IHRoaXMuY29udmVyc2F0aW9uSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRGV0ZWN0IHdoZW4gaWNvbiBzZXQgY2hhbmdlc1xyXG4gICAgaWYgKGNoYW5nZXNbJ2ljb25TZXQnXSB8fCBjaGFuZ2VzWydjdXN0b21JY29ucyddKSB7XHJcbiAgICAgIHRoaXMuaWNvbnMgPSBnZXRJY29uU2V0KHRoaXMuaWNvblNldCwgdGhpcy5jdXN0b21JY29ucyk7XHJcbiAgICAgIHRoaXMuc2FuaXRpemVJY29ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbmltYXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIGJhc2VkIG9uIHNwZWVkIHNldHRpbmdcclxuICAgKi9cclxuICBnZXRBbmltYXRpb25EdXJhdGlvbigpOiBudW1iZXIge1xyXG4gICAgaWYgKCF0aGlzLmVuYWJsZUFuaW1hdGlvbnMpIHJldHVybiAwO1xyXG4gICAgc3dpdGNoICh0aGlzLmFuaW1hdGlvblNwZWVkKSB7XHJcbiAgICAgIGNhc2UgJ3Nsb3cnOiByZXR1cm4gNTAwO1xyXG4gICAgICBjYXNlICdmYXN0JzogcmV0dXJuIDE1MDtcclxuICAgICAgZGVmYXVsdDogcmV0dXJuIDI1MDsgLy8gbm9ybWFsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYW5pbWF0aW9uIENTUyBjbGFzcyBiYXNlZCBvbiBzZXR0aW5nc1xyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuZW5hYmxlQW5pbWF0aW9ucykgcmV0dXJuICduby1hbmltYXRpb25zJztcclxuICAgIHJldHVybiBgYW5pbWF0aW9uLXNwZWVkLSR7dGhpcy5hbmltYXRpb25TcGVlZH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHN0YXR1cyB3aXRoIHRyYW5zaXRpb24gdHJhY2tpbmdcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVN0YXR1cyhuZXdTdGF0dXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlU3RhdHVzVHJhbnNpdGlvbnMgJiYgdGhpcy5jb25maWd1cmF0aW9uU3RhdHVzICE9PSBuZXdTdGF0dXMpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c1N0YXR1cyA9IHRoaXMuY29uZmlndXJhdGlvblN0YXR1cztcclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlndXJhdGlvblN0YXR1cyA9IG5ld1N0YXR1cztcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogU2FuaXRpemUgaWNvbiBTVkcgc3RyaW5ncyBmb3Igc2FmZSByZW5kZXJpbmcgaW4gaW5uZXJIVE1MIGJpbmRpbmdzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzYW5pdGl6ZUljb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zYW5pdGl6ZWRJY29ucyA9IHt9O1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5pY29ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBjb25zdCBzdmdTdHJpbmcgPSB0aGlzLmljb25zW2tleSBhcyBrZXlvZiBDaGF0SWNvbkNvbmZpZ107XHJcbiAgICAgIGlmIChzdmdTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNhbml0aXplZEljb25zW2tleV0gPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChzdmdTdHJpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRlc3RDb25maWd1cmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoJ1Rlc3RpbmcgY29ubmVjdGlvbi4uLicpO1xyXG4gICAgXHJcbiAgICB0aGlzLmFpQWdlbnRTZXJ2aWNlLnRlc3RDb25maWd1cmF0aW9uKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IEFnZW50UmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzKCdBSSBBZ2VudCBpcyByZWFkeScpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0dXMoYENvbmZpZ3VyYXRpb24gZXJyb3I6ICR7cmVzcG9uc2UuZXJyb3J9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yUmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0dXMoYENvbm5lY3Rpb24gZXJyb3I6IENhbm5vdCBjb25uZWN0IHRvIGJhY2tlbmQgc2VydmljZWApO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignQVBJIGNvbm5lY3Rpb24gdGVzdCBmYWlsZWQ6JywgZXJyb3JSZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFdlbGNvbWVNZXNzYWdlKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgd2VsY29tZVRleHQgPSB0aGlzLndlbGNvbWVNZXNzYWdlIHx8IFxyXG4gICAgICBgPGgzPkhlbGxvICR7dGhpcy5maXJzdE5hbWV9ITwvaDM+SGksIEknbSBNYWVzdHJv4oCUeW91ciBBSSBhc3Npc3RhbnQuIEknbSBoZXJlIHRvIGhlbHAgd2l0aCB5b3VyIHBvbGljeS1yZWxhdGVkIGlucXVpcmllcy48YnI+PGJyPkhvdyBjYW4gSSBhc3Npc3QgeW91IHRvZGF5P2A7XHJcbiAgICBcclxuICAgIHRoaXMubWVzc2FnZXMucHVzaCh7XHJcbiAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgIGNvbnRlbnQ6IHdlbGNvbWVUZXh0LCAvLyBEb24ndCBmb3JtYXQgSFRNTCBjb250ZW50LCB1c2UgaXQgZGlyZWN0bHlcclxuICAgICAgaW50ZW50OiAnd2VsY29tZScsXHJcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGFuZCB0cmFuc2Zvcm0gaGlzdG9yaWNhbCBtZXNzYWdlcyBmcm9tIHBhcmVudCBjb21wb25lbnRcclxuICAgKiBBY2NlcHRzIG1lc3NhZ2VzIGluIHRoZSBmb3JtYXQgZnJvbSB5b3VyIGJhY2tlbmQvc3RhdGUgbWFuYWdlbWVudFxyXG4gICAqL1xyXG4gIGxvYWRIaXN0b3JpY2FsTWVzc2FnZXMoaGlzdG9yaWNhbE1lc3NhZ2VzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0xvYWRpbmcgaGlzdG9yaWNhbCBtZXNzYWdlczonLCBoaXN0b3JpY2FsTWVzc2FnZXMpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ051bWJlciBvZiBtZXNzYWdlcyB0byBsb2FkOicsIGhpc3RvcmljYWxNZXNzYWdlcy5sZW5ndGgpO1xyXG4gICAgXHJcbiAgICAvLyBUcmFuc2Zvcm0geW91ciBiYWNrZW5kIGZvcm1hdCB0byBDaGF0TWVzc2FnZSBmb3JtYXRcclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVzc2FnZXM6IENoYXRNZXNzYWdlW10gPSBoaXN0b3JpY2FsTWVzc2FnZXMubWFwKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICAvLyBEZXRlcm1pbmUgaWYgbWVzc2FnZSBpcyBmcm9tIHVzZXIgYmFzZWQgb24gc2VuZGVyIG9yIHJvbGVcclxuICAgICAgY29uc3QgaXNVc2VyTWVzc2FnZSA9IHRoaXMuaXNVc2VyTWVzc2FnZShtc2cpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB7XHJcbiAgICAgICAgbWVzc2FnZUlkOiBtc2cubWVzc2FnZUlkIHx8IG1zZy5pZCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZDogbXNnLmNvbnZlcnNhdGlvbklkIHx8IHRoaXMuY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgaXNVc2VyOiBpc1VzZXJNZXNzYWdlLFxyXG4gICAgICAgIGNvbnRlbnQ6IG1zZy5tZXNzYWdlVGV4dCB8fCBtc2cubWVzc2FnZSB8fCBtc2cudGV4dCB8fCBtc2cuY29udGVudCB8fCAnJyxcclxuICAgICAgICBzZW5kZXI6IG1zZy5zZW5kZXIgfHwgKGlzVXNlck1lc3NhZ2UgPyB0aGlzLnVzZXJOYW1lIHx8ICdVc2VyJyA6ICdNYWVzdHJvJyksXHJcbiAgICAgICAgaW50ZW50OiBtc2cuaW50ZW50IHx8ICcnLFxyXG4gICAgICAgIGF1dGhvck5hbWU6IG1zZy5hdXRob3JOYW1lIHx8IG1zZy5zZW5kZXIsXHJcbiAgICAgICAgY29uZmlkZW5jZVNjb3JlOiBtc2cuY29uZmlkZW5jZVNjb3JlIHx8IG1zZy5jb25maWRlbmNlIHx8IDAsXHJcbiAgICAgICAgdGltZXN0YW1wOiBtc2cudGltZXN0YW1wIHx8IG1zZy5jcmVhdGVkQXQgXHJcbiAgICAgICAgICA/IG5ldyBEYXRlKG1zZy50aW1lc3RhbXAgfHwgbXNnLmNyZWF0ZWRBdCkgXHJcbiAgICAgICAgICA6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxyXG4gICAgICB9IGFzIENoYXRNZXNzYWdlO1xyXG4gICAgICBcclxuICAgICAgLy8gY29uc29sZS5sb2coJ1RyYW5zZm9ybWVkIG1lc3NhZ2U6JywgdHJhbnNmb3JtZWQpO1xyXG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gU29ydCBtZXNzYWdlcyBieSB0aW1lc3RhbXAgdG8gbWFpbnRhaW4gY2hyb25vbG9naWNhbCBvcmRlclxyXG4gICAgdHJhbnNmb3JtZWRNZXNzYWdlcy5zb3J0KChhLCBiKSA9PiBcclxuICAgICAgYS50aW1lc3RhbXAuZ2V0VGltZSgpIC0gYi50aW1lc3RhbXAuZ2V0VGltZSgpXHJcbiAgICApO1xyXG4gICAgXHJcbiAgICAvLyBjb25zb2xlLmxvZygnU29ydGVkIG1lc3NhZ2VzIGNvdW50OicsIHRyYW5zZm9ybWVkTWVzc2FnZXMubGVuZ3RoKTtcclxuICAgIFxyXG4gICAgLy8gQWRkIHdlbGNvbWUgbWVzc2FnZSBmaXJzdCBpZiBubyBtZXNzYWdlcyBvciBsb2FkIGhpc3RvcmljYWwgbWVzc2FnZXNcclxuICAgIGlmICh0cmFuc2Zvcm1lZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnTm8gbWVzc2FnZXMgdG8gbG9hZCwgYWRkaW5nIHdlbGNvbWUgbWVzc2FnZScpO1xyXG4gICAgICB0aGlzLmFkZFdlbGNvbWVNZXNzYWdlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDaGVjayBpZiBmaXJzdCBtZXNzYWdlIGlzIGEgd2VsY29tZSBtZXNzYWdlLCBpZiBub3QgYWRkIG9uZVxyXG4gICAgICBjb25zdCBoYXNXZWxjb21lID0gdHJhbnNmb3JtZWRNZXNzYWdlcy5zb21lKG1zZyA9PiBcclxuICAgICAgICBtc2cuaW50ZW50ID09PSAnd2VsY29tZScgfHwgbXNnLmNvbnRlbnQuaW5jbHVkZXMoJ0hlbGxvJylcclxuICAgICAgKTtcclxuICAgICAgXHJcbiAgICAgIGlmICghaGFzV2VsY29tZSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdObyB3ZWxjb21lIG1lc3NhZ2UgZm91bmQsIGFkZGluZyBvbmUnKTtcclxuICAgICAgICB0aGlzLmFkZFdlbGNvbWVNZXNzYWdlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdQdXNoaW5nIHRyYW5zZm9ybWVkIG1lc3NhZ2VzIHRvIG1lc3NhZ2VzIGFycmF5Jyk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMucHVzaCguLi50cmFuc2Zvcm1lZE1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZygnVG90YWwgbG9hZGVkIG1lc3NhZ2VzIGluIGNvbXBvbmVudDonLCB0aGlzLm1lc3NhZ2VzLmxlbmd0aCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnTWVzc2FnZXMgYXJyYXk6JywgdGhpcy5tZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGRldGVybWluZSBpZiBhIG1lc3NhZ2UgaXMgZnJvbSB0aGUgdXNlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNVc2VyTWVzc2FnZShtc2c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgLy8gQ2hlY2sgdmFyaW91cyBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgaW5kaWNhdGUgdXNlciBtZXNzYWdlXHJcbiAgICBpZiAobXNnLmlzVXNlciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbXNnLmlzVXNlcjtcclxuICAgIGlmIChtc2cucm9sZSkgcmV0dXJuIG1zZy5yb2xlLnRvTG93ZXJDYXNlKCkgPT09ICd1c2VyJztcclxuICAgIGlmIChtc2cuc2VuZGVyKSB7XHJcbiAgICAgIGNvbnN0IHNlbmRlciA9IG1zZy5zZW5kZXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgcmV0dXJuIHNlbmRlciA9PT0gJ3VzZXInIHx8IFxyXG4gICAgICAgICAgICAgc2VuZGVyID09PSB0aGlzLnVzZXJOYW1lPy50b0xvd2VyQ2FzZSgpIHx8XHJcbiAgICAgICAgICAgICBzZW5kZXIgPT09IHRoaXMudXNlcklkPy50b0xvd2VyQ2FzZSgpIHx8XHJcbiAgICAgICAgICAgICBzZW5kZXIuaW5jbHVkZXMoJ3VzZXInKTtcclxuICAgIH1cclxuICAgIC8vIERlZmF1bHQgdG8gZmFsc2UgKGJvdCBtZXNzYWdlKSBpZiBjYW4ndCBkZXRlcm1pbmVcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRJbnF1aXJ5KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRJbnF1aXJ5LnRyaW0oKSB8fCB0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXNlck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICBtZXNzYWdlSWQ6IHRoaXMuZ2VuZXJhdGVNZXNzYWdlSWQoKSxcclxuICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuY29udmVyc2F0aW9uSWQsXHJcbiAgICAgIGlzVXNlcjogdHJ1ZSxcclxuICAgICAgc2VuZGVyOiB0aGlzLnVzZXJOYW1lIHx8ICdVc2VyJyxcclxuICAgICAgaW50ZW50OiB0aGlzLmludGVudCxcclxuICAgICAgY29udGVudDogdGhpcy5jdXJyZW50SW5xdWlyeSxcclxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpXHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2godXNlck1lc3NhZ2UpO1xyXG4gICAgdGhpcy5tZXNzYWdlU2VudC5lbWl0KHVzZXJNZXNzYWdlKTtcclxuXHJcbiAgICAvLyBBZGQgbG9hZGluZyBtZXNzYWdlXHJcbiAgICBjb25zdCBsb2FkaW5nTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgIGludGVudDogJycsXHJcbiAgICAgIGNvbnRlbnQ6ICdQcm9jZXNzaW5nIHlvdXIgaW5xdWlyeS4uLicsXHJcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcclxuICAgICAgaXNMb2FkaW5nOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5tZXNzYWdlcy5wdXNoKGxvYWRpbmdNZXNzYWdlKTtcclxuXHJcbiAgICBjb25zdCBpbnF1aXJ5ID0gdGhpcy5jdXJyZW50SW5xdWlyeS50cmltKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRJbnF1aXJ5ID0gJyc7XHJcbiAgICB0aGlzLmF1dGhvck5hbWUgPSAnJztcclxuICAgIHRoaXMuaW50ZW50ID0gJyc7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdDogU3VwcG9ydEJvdFJlcXVlc3QgPSB7XHJcbiAgICAgIHF1ZXJ5OiBpbnF1aXJ5LFxyXG4gICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5jb252ZXJzYXRpb25JZCxcclxuICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcclxuICAgICAgdXNlck5hbWU6IHRoaXMudXNlck5hbWUsXHJcbiAgICAgIGFwcFNvdXJjZTogdGhpcy5hcHBTb3VyY2VcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5haUFnZW50U2VydmljZS5wcm9jZXNzSW5xdWlyeShyZXF1ZXN0KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogU3VwcG9ydEJvdFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBVcGRhdGUgY29udmVyc2F0aW9uSWQgaWYgcHJvdmlkZWQgaW4gcmVzcG9uc2VcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5jb252ZXJzYXRpb25JZCAmJiAhdGhpcy5jb252ZXJzYXRpb25JZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gcmVzcG9uc2UuY29udmVyc2F0aW9uSWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJlbW92ZSBsb2FkaW5nIG1lc3NhZ2VcclxuICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gIW1zZy5pc0xvYWRpbmcpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZiAocmVzcG9uc2UuYW5zd2VyIHx8IChyZXNwb25zZS5jb250ZW50cyAmJiByZXNwb25zZS5jb250ZW50cy5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuYW5zd2VyKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm90TWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHRoaXMuZ2VuZXJhdGVNZXNzYWdlSWQoKSxcclxuICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmNvbnZlcnNhdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNlbmRlcjogJ01hZXN0cm8nLFxyXG4gICAgICAgICAgICAgICAgaW50ZW50OiByZXNwb25zZS5zZWFyY2hJbnRlbnQgfHwgaW5xdWlyeSxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuZm9ybWF0TWVzc2FnZUNvbnRlbnQocmVzcG9uc2UuYW5zd2VyKSxcclxuICAgICAgICAgICAgICAgIGF1dGhvck5hbWU6IHJlc3BvbnNlLmNvbnRlbnRzICYmIHJlc3BvbnNlLmNvbnRlbnRzLmxlbmd0aCA+IDAgPyByZXNwb25zZS5jb250ZW50c1swXS5hdXRob3JOYW1lIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2goYm90TWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQuZW1pdChib3RNZXNzYWdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5jb250ZW50cyAmJiByZXNwb25zZS5jb250ZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgLy8gUHVzaCBlYWNoIGNvbnRlbnQgYXMgYSBzZXBhcmF0ZSBtZXNzYWdlXHJcbiAgICAgICAgICAgICAgcmVzcG9uc2UuY29udGVudHMuZm9yRWFjaChjb250ZW50SXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudEl0ZW0uY29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBib3RNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHRoaXMuZ2VuZXJhdGVNZXNzYWdlSWQoKSxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5jb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbmRlcjogY29udGVudEl0ZW0uYXV0aG9yTmFtZSB8fCAnTWFlc3RybycsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZW50OiByZXNwb25zZS5zZWFyY2hJbnRlbnQgfHwgaW5xdWlyeSxcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLmZvcm1hdE1lc3NhZ2VDb250ZW50KGNvbnRlbnRJdGVtLmNvbnRlbnQgfHwgJ05vIGNvbnRlbnQgYXZhaWxhYmxlJyksXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0aG9yTmFtZTogY29udGVudEl0ZW0uYXV0aG9yTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKGJvdE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VSZWNlaXZlZC5lbWl0KGJvdE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogdGhpcy5nZW5lcmF0ZU1lc3NhZ2VJZCgpLFxyXG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmNvbnZlcnNhdGlvbklkLFxyXG4gICAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgc2VuZGVyOiAnTWFlc3RybycsXHJcbiAgICAgICAgICAgICAgaW50ZW50OiBpbnF1aXJ5LFxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGBTb3JyeSwgSSBkaWRuJ3QgcmVjZWl2ZSBhIHZhbGlkIHJlc3BvbnNlLmAsXHJcbiAgICAgICAgICAgICAgYXV0aG9yTmFtZTogdGhpcy5hdXRob3JOYW1lLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2goZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQuZW1pdChlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGxvYWRpbmcgbWVzc2FnZVxyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMubWVzc2FnZXMuZmlsdGVyKG1zZyA9PiAhbXNnLmlzTG9hZGluZyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogdGhpcy5nZW5lcmF0ZU1lc3NhZ2VJZCgpLFxyXG4gICAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5jb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgc2VuZGVyOiAnTWFlc3RybycsXHJcbiAgICAgICAgICAgIGludGVudDogaW5xdWlyeSxcclxuICAgICAgICAgICAgY29udGVudDogJ1NvcnJ5LCBJIGVuY291bnRlcmVkIGFuIGVycm9yIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0LiBQbGVhc2UgdHJ5IGFnYWluLicsXHJcbiAgICAgICAgICAgIGF1dGhvck5hbWU6IHRoaXMuYXV0aG9yTmFtZSxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VSZWNlaXZlZC5lbWl0KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgaW5xdWlyeTonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyQ2hhdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcclxuICAgIHRoaXMuYWRkV2VsY29tZU1lc3NhZ2UoKTtcclxuICB9XHJcblxyXG4gIG9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuc2VuZElucXVpcnkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIGdldFRoZW1lQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIC8vIERlZmF1bHQgdGhlbWUgaWYgbm8gdGVtcGxhdGUgZGVzaWduIGlzIHNwZWNpZmllZFxyXG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlRGVzaWduKSB7XHJcbiAgICAgIHJldHVybiAndGhlbWUtZGVmYXVsdCc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgYW5kIHJldHVybiB0aGVtZSBjbGFzc1xyXG4gICAgY29uc3QgdmFsaWRUaGVtZXMgPSBbJ2RlZmF1bHQnLCAnZGFyaycsICdibHVlJywgJ2dyZWVuJywgJ3B1cnBsZScsICdtaW5pbWFsJywgJ2NvcnBvcmF0ZScsICdyZWQnLCAneWVsbG93JywgJ29yYW5nZSddO1xyXG4gICAgY29uc3QgdGhlbWUgPSB0aGlzLnRlbXBsYXRlRGVzaWduLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBcclxuICAgIGlmICh2YWxpZFRoZW1lcy5pbmNsdWRlcyh0aGVtZSkpIHtcclxuICAgICAgcmV0dXJuIGB0aGVtZS0ke3RoZW1lfWA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEZhbGxiYWNrIHRvIGRlZmF1bHQgaWYgaW52YWxpZCB0aGVtZVxyXG4gICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHRoZW1lICcke3RoaXMudGVtcGxhdGVEZXNpZ259JyBwcm92aWRlZC4gVXNpbmcgZGVmYXVsdCB0aGVtZS5gKTtcclxuICAgIHJldHVybiAndGhlbWUtZGVmYXVsdCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE1lc3NhZ2VDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWNvbnRlbnQpIHJldHVybiAnJztcclxuICAgIFxyXG4gICAgLy8gSWYgY29udGVudCBhbHJlYWR5IGNvbnRhaW5zIEhUTUwgdGFncywgcmV0dXJuIGFzLWlzXHJcbiAgICBpZiAoY29udGVudC5pbmNsdWRlcygnPCcpICYmIGNvbnRlbnQuaW5jbHVkZXMoJz4nKSkge1xyXG4gICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQ29udmVydCBuZXdsaW5lcyB0byBIVE1MIGJyZWFrc1xyXG4gICAgbGV0IGZvcm1hdHRlZCA9IGNvbnRlbnQucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XHJcbiAgICBcclxuICAgIC8vIENvbnZlcnQgZXNjYXBlZCBuZXdsaW5lcyB0byBIVE1MIGJyZWFrc1xyXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+Jyk7XHJcbiAgICBcclxuICAgIC8vIENvbnZlcnQgbWFya2Rvd24tc3R5bGUgYm9sZCB0byBIVE1MXHJcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcclxuICAgIFxyXG4gICAgLy8gQ29udmVydCBidWxsZXQgcG9pbnRzIHRvIEhUTUwgbGlzdHNcclxuICAgIGNvbnN0IGxpbmVzID0gZm9ybWF0dGVkLnNwbGl0KCc8YnI+Jyk7XHJcbiAgICBsZXQgaW5MaXN0ID0gZmFsc2U7XHJcbiAgICBjb25zdCBwcm9jZXNzZWRMaW5lczogc3RyaW5nW10gPSBbXTtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgbGluZSBvZiBsaW5lcykge1xyXG4gICAgICBpZiAobGluZS50cmltKCkuc3RhcnRzV2l0aCgn4oCiICcpKSB7XHJcbiAgICAgICAgaWYgKCFpbkxpc3QpIHtcclxuICAgICAgICAgIHByb2Nlc3NlZExpbmVzLnB1c2goJzx1bD4nKTtcclxuICAgICAgICAgIGluTGlzdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb2Nlc3NlZExpbmVzLnB1c2goJzxsaT4nICsgbGluZS5yZXBsYWNlKC9e4oCiIC8sICcnKSArICc8L2xpPicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpbkxpc3QpIHtcclxuICAgICAgICAgIHByb2Nlc3NlZExpbmVzLnB1c2goJzwvdWw+Jyk7XHJcbiAgICAgICAgICBpbkxpc3QgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvY2Vzc2VkTGluZXMucHVzaChsaW5lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoaW5MaXN0KSB7XHJcbiAgICAgIHByb2Nlc3NlZExpbmVzLnB1c2goJzwvdWw+Jyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBwcm9jZXNzZWRMaW5lcy5qb2luKCc8YnI+JykucmVwbGFjZSgvPGJyPjx1bD4vZywgJzx1bD4nKS5yZXBsYWNlKC88XFwvdWw+PGJyPi9nLCAnPC91bD4nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVTZXNzaW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnc2Vzc2lvbl8nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpICsgJ18nICsgRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVNZXNzYWdlSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnbXNnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSkgKyAnXycgKyBEYXRlLm5vdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybWF0dGVkVGltZSh0aW1lc3RhbXA6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRpbWVzdGFtcC50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT0gUmVzaXplIE1ldGhvZHMgPT09PT09PT09PT09PVxyXG4gIFxyXG4gIHN0YXJ0UmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50LCBkaXJlY3Rpb246ICd3aWR0aCcgfCAnYm90aCcpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmlzUmVzaXppbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xyXG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgdGhpcy5zdGFydFdpZHRoID0gdGhpcy5jb250YWluZXJXaWR0aDtcclxuICAgIHRoaXMuc3RhcnRIZWlnaHQgPSB0aGlzLmNvbnRhaW5lckhlaWdodDtcclxuICAgIFxyXG4gICAgY29uc3QgbW91c2VNb3ZlSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLm9uUmVzaXplKGUsIGRpcmVjdGlvbik7XHJcbiAgICBjb25zdCBtb3VzZVVwSGFuZGxlciA9ICgpID0+IHRoaXMuc3RvcFJlc2l6ZShtb3VzZU1vdmVIYW5kbGVyLCBtb3VzZVVwSGFuZGxlcik7XHJcbiAgICBcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQsIGRpcmVjdGlvbjogJ3dpZHRoJyB8ICdib3RoJyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzUmVzaXppbmcpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuc3RhcnRYO1xyXG4gICAgY29uc3QgZGVsdGFZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xyXG4gICAgXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnd2lkdGgnIHx8IGRpcmVjdGlvbiA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5taW4oXHJcbiAgICAgICAgTWF0aC5tYXgodGhpcy5zdGFydFdpZHRoICsgZGVsdGFYLCB0aGlzLm1pbldpZHRoKSxcclxuICAgICAgICB0aGlzLm1heFdpZHRoXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBuZXdXaWR0aDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKFxyXG4gICAgICAgIE1hdGgubWF4KHRoaXMuc3RhcnRIZWlnaHQgKyBkZWx0YVksIHRoaXMubWluSGVpZ2h0KSxcclxuICAgICAgICB0aGlzLm1heEhlaWdodFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IG5ld0hlaWdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcFJlc2l6ZShtb3VzZU1vdmVIYW5kbGVyOiAoZTogTW91c2VFdmVudCkgPT4gdm9pZCwgbW91c2VVcEhhbmRsZXI6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgXHJcbiAgICB0aGlzLnNhdmVTaXplUHJlZmVyZW5jZSgpO1xyXG4gICAgdGhpcy5lbWl0U2l6ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTaXplUHJlc2V0KHNpemU6IENoYXRTaXplKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRTaXplID0gc2l6ZTtcclxuICAgIFxyXG4gICAgc3dpdGNoIChzaXplKSB7XHJcbiAgICAgIGNhc2UgJ2NvbXBhY3QnOlxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSA0MDA7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSA1MDA7XHJcbiAgICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGVmYXVsdCc6XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IDgwMDtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IDYwMDtcclxuICAgICAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBhbmRlZCc6XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IDEyMDA7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSA4MDA7XHJcbiAgICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZnVsbHNjcmVlbic6XHJcbiAgICAgICAgdGhpcy50b2dnbGVGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLnNhdmVTaXplUHJlZmVyZW5jZSgpO1xyXG4gICAgdGhpcy5lbWl0U2l6ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRnVsbHNjcmVlbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc0Z1bGxzY3JlZW4pIHtcclxuICAgICAgLy8gRW50ZXJpbmcgZnVsbHNjcmVlbiAtIHNhdmUgY3VycmVudCBzdGF0ZSBmaXJzdFxyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjaGF0Ym94LXByZXZpb3VzLXNpemUnLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnRhaW5lckhlaWdodCxcclxuICAgICAgICBzaXplOiB0aGlzLmN1cnJlbnRTaXplLFxyXG4gICAgICAgIHdhc0Z1bGxzY3JlZW46IHRoaXMuaXNGdWxsc2NyZWVuXHJcbiAgICAgIH0pKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuaXNGdWxsc2NyZWVuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jdXJyZW50U2l6ZSA9ICdmdWxsc2NyZWVuJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEV4aXRpbmcgZnVsbHNjcmVlbiAtIHJlc3RvcmUgcHJldmlvdXMgc3RhdGVcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2NoYXRib3gtcHJldmlvdXMtc2l6ZScpO1xyXG4gICAgICAgIGlmIChwcmV2aW91cykge1xyXG4gICAgICAgICAgY29uc3QgcHJldkRhdGEgPSBKU09OLnBhcnNlKHByZXZpb3VzKTtcclxuICAgICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBwcmV2RGF0YS53aWR0aCB8fCA4MDA7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHByZXZEYXRhLmhlaWdodCB8fCA2MDA7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTaXplID0gcHJldkRhdGEuc2l6ZSA9PT0gJ2Z1bGxzY3JlZW4nID8gJ2RlZmF1bHQnIDogcHJldkRhdGEuc2l6ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U2l6ZSA9ICdkZWZhdWx0JztcclxuICAgICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSA4MDA7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IDYwMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2l6ZSA9ICdkZWZhdWx0JztcclxuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gODAwO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gNjAwO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLnNhdmVTaXplUHJlZmVyZW5jZSgpO1xyXG4gICAgdGhpcy5lbWl0U2l6ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlU2l6ZVByZWZlcmVuY2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzaXplRGF0YSA9IHtcclxuICAgICAgc2l6ZTogdGhpcy5jdXJyZW50U2l6ZSxcclxuICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5jb250YWluZXJIZWlnaHQsXHJcbiAgICAgIGlzRnVsbHNjcmVlbjogdGhpcy5pc0Z1bGxzY3JlZW5cclxuICAgIH07XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NoYXRib3gtc2l6ZS1wcmVmZXJlbmNlJywgSlNPTi5zdHJpbmdpZnkoc2l6ZURhdGEpKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNhdmUgc2l6ZSBwcmVmZXJlbmNlOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFNhdmVkU2l6ZSgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNhdmVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY2hhdGJveC1zaXplLXByZWZlcmVuY2UnKTtcclxuICAgICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBKU09OLnBhcnNlKHNhdmVkKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTaXplID0gc2l6ZURhdGEuc2l6ZSB8fCAnZGVmYXVsdCc7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IHNpemVEYXRhLndpZHRoIHx8IDgwMDtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHNpemVEYXRhLmhlaWdodCB8fCA2MDA7XHJcbiAgICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSBzaXplRGF0YS5pc0Z1bGxzY3JlZW4gfHwgZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgc2l6ZSBwcmVmZXJlbmNlOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdFNpemVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNpemVDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICBzaXplOiB0aGlzLmN1cnJlbnRTaXplLFxyXG4gICAgICB3aWR0aDogdGhpcy5jb250YWluZXJXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLmNvbnRhaW5lckhlaWdodFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb250YWluZXJTdHlsZSgpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgd2lkdGg6ICcxMDB2dyAhaW1wb3J0YW50JyxcclxuICAgICAgICBoZWlnaHQ6ICcxMDB2aCAhaW1wb3J0YW50JyxcclxuICAgICAgICBtYXhXaWR0aDogJzEwMHZ3ICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzEwMHZoICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxyXG4gICAgICAgIHRvcDogJzAnLFxyXG4gICAgICAgIGxlZnQ6ICcwJyxcclxuICAgICAgICByaWdodDogJzAnLFxyXG4gICAgICAgIGJvdHRvbTogJzAnLFxyXG4gICAgICAgIG1hcmdpbjogJzAnLFxyXG4gICAgICAgIHpJbmRleDogOTk5OTlcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGg6IGAke3RoaXMuY29udGFpbmVyV2lkdGh9cHhgLFxyXG4gICAgICBoZWlnaHQ6IGAke3RoaXMuY29udGFpbmVySGVpZ2h0fXB4YCxcclxuICAgICAgbWF4V2lkdGg6IGAke3RoaXMubWF4V2lkdGh9cHhgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PSBGaWxlIFVwbG9hZCBNZXRob2RzID09PT09PT09PT09PT1cclxuICBcclxuICBvbkltYWdlVXBsb2FkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsZVNlbGVjdGlvbihBcnJheS5mcm9tKGlucHV0LmZpbGVzKSwgJ2ltYWdlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpbGVVcGxvYWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5oYW5kbGVGaWxlU2VsZWN0aW9uKEFycmF5LmZyb20oaW5wdXQuZmlsZXMpLCAnZmlsZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVGaWxlU2VsZWN0aW9uKGZpbGVzOiBGaWxlW10sIHR5cGU6ICdpbWFnZScgfCAnZmlsZScpOiB2b2lkIHtcclxuICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgIC8vIFZhbGlkYXRlIGZpbGUgdHlwZVxyXG4gICAgICBjb25zdCBhbGxvd2VkVHlwZXMgPSB0eXBlID09PSAnaW1hZ2UnID8gdGhpcy5hbGxvd2VkSW1hZ2VUeXBlcyA6IHRoaXMuYWxsb3dlZEZpbGVUeXBlcztcclxuICAgICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgRmlsZSB0eXBlICR7ZmlsZS50eXBlfSBub3QgYWxsb3dlZGApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVmFsaWRhdGUgZmlsZSBzaXplXHJcbiAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBGaWxlICR7ZmlsZS5uYW1lfSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke3RoaXMubWF4RmlsZVNpemUgLyAxMDI0IC8gMTAyNH1NQmApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBQcm9ncmVzc0V2ZW50PEZpbGVSZWFkZXI+KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudDogRmlsZUF0dGFjaG1lbnQgPSB7XHJcbiAgICAgICAgICBpZDogdGhpcy5nZW5lcmF0ZU1lc3NhZ2VJZCgpLFxyXG4gICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxyXG4gICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxyXG4gICAgICAgICAgZGF0YTogZS50YXJnZXQ/LnJlc3VsdCB8fCB1bmRlZmluZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgIHRoaXMuZmlsZVVwbG9hZGVkLmVtaXQoYXR0YWNobWVudCk7XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICBpZiAodHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBdHRhY2htZW50KGF0dGFjaG1lbnRJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSB0aGlzLnNlbGVjdGVkRmlsZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gYXR0YWNobWVudElkKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJJbWFnZVVwbG9hZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLXVwbG9hZC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXQpIHtcclxuICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyaWdnZXJGaWxlVXBsb2FkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS11cGxvYWQtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGaWxlSWNvbihmaWxlVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuICfwn5a877iPJztcclxuICAgIGlmIChmaWxlVHlwZS5pbmNsdWRlcygncGRmJykpIHJldHVybiAn8J+ThCc7XHJcbiAgICBpZiAoZmlsZVR5cGUuaW5jbHVkZXMoJ3dvcmQnKSB8fCBmaWxlVHlwZS5pbmNsdWRlcygnZG9jdW1lbnQnKSkgcmV0dXJuICfwn5OdJztcclxuICAgIGlmIChmaWxlVHlwZS5pbmNsdWRlcygndGV4dCcpKSByZXR1cm4gJ/Cfk4MnO1xyXG4gICAgcmV0dXJuICfwn5OOJztcclxuICB9XHJcblxyXG4gIGdldEZpbGVTaXplRm9ybWF0dGVkKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGJ5dGVzICsgJyBCJztcclxuICAgIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSByZXR1cm4gKGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKSArICcgS0InO1xyXG4gICAgcmV0dXJuIChieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSkgKyAnIE1CJztcclxuICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwiYWktY2hhdC1jb250YWluZXJcIiBcclxuICAgICBbbmdDbGFzc109XCJnZXRUaGVtZUNsYXNzKClcIiBcclxuICAgICBbbmdTdHlsZV09XCJnZXRDb250YWluZXJTdHlsZSgpXCJcclxuICAgICBbY2xhc3MuZnVsbHNjcmVlbl09XCJpc0Z1bGxzY3JlZW5cIlxyXG4gICAgIFtjbGFzcy5yZXNpemluZ109XCJpc1Jlc2l6aW5nXCJcclxuICAgICBbY2xhc3NdPVwiZ2V0QW5pbWF0aW9uQ2xhc3MoKVwiPlxyXG4gIFxyXG4gIDwhLS0gUmVzaXplIEhhbmRsZXMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1yaWdodFwiIFxyXG4gICAgICAgKG1vdXNlZG93bik9XCJzdGFydFJlc2l6ZSgkZXZlbnQsICd3aWR0aCcpXCJcclxuICAgICAgICpuZ0lmPVwiIWlzRnVsbHNjcmVlblwiXHJcbiAgICAgICB0aXRsZT1cIkRyYWcgdG8gcmVzaXplIHdpZHRoXCI+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cInJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1jb3JuZXJcIiBcclxuICAgICAgIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCAnYm90aCcpXCJcclxuICAgICAgICpuZ0lmPVwiIWlzRnVsbHNjcmVlblwiXHJcbiAgICAgICB0aXRsZT1cIkRyYWcgdG8gcmVzaXplXCI+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPCEtLSBEZWJ1ZyBJbmZvcm1hdGlvbiAob25seSBzaG93biB3aGVuIHNob3dEZWJ1Z0luZm8gaXMgdHJ1ZSkgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInNob3dEZWJ1Z0luZm9cIiBjbGFzcz1cImRlYnVnLWluZm9cIj5cclxuICAgIDxoMz5ERUJVRzogQUkgQ2hhdCBDb21wb25lbnQgTG9hZGVkPC9oMz5cclxuICAgIDxwPlN0YXR1czoge3sgY29uZmlndXJhdGlvblN0YXR1cyB8fCAnTG9hZGluZy4uLicgfX08L3A+XHJcbiAgICA8cD5NZXNzYWdlcyBjb3VudDoge3sgbWVzc2FnZXMubGVuZ3RoIHx8IDAgfX08L3A+XHJcbiAgICA8cD5UaGVtZToge3sgdGVtcGxhdGVEZXNpZ24gfHwgJ2RlZmF1bHQnIH19PC9wPlxyXG4gICAgPHA+U2l6ZToge3sgY3VycmVudFNpemUgfX0gKHt7IGNvbnRhaW5lcldpZHRoIH19eHt7IGNvbnRhaW5lckhlaWdodCB9fSk8L3A+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjaGF0LWhlYWRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1sZWZ0XCI+XHJcbiAgICAgIDxoMj57eyB0aXRsZSB9fTwvaDI+XHJcbiAgICAgIDwhLS0gSWNvbi1vbmx5IHN0YXR1cyBpbmRpY2F0b3IgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtaW5kaWNhdG9yLWljb25cIiBcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J3N0YXR1cy1yZWFkeSc6IGNvbmZpZ3VyYXRpb25TdGF0dXMgPT09ICdBSSBBZ2VudCBpcyByZWFkeScsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cy1lcnJvcic6IGNvbmZpZ3VyYXRpb25TdGF0dXMgIT09ICdBSSBBZ2VudCBpcyByZWFkeScgJiYgY29uZmlndXJhdGlvblN0YXR1cyAhPT0gJ0luaXRpYWxpemluZy4uLicgJiYgY29uZmlndXJhdGlvblN0YXR1cyAhPT0gJ1Rlc3RpbmcgY29ubmVjdGlvbi4uLicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzLWxvYWRpbmcnOiBjb25maWd1cmF0aW9uU3RhdHVzID09PSAnSW5pdGlhbGl6aW5nLi4uJyB8fCBjb25maWd1cmF0aW9uU3RhdHVzID09PSAnVGVzdGluZyBjb25uZWN0aW9uLi4uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2l0aW9uLWVuYWJsZWQnOiBlbmFibGVTdGF0dXNUcmFuc2l0aW9uc31cIlxyXG4gICAgICAgICAgIFt0aXRsZV09XCJjb25maWd1cmF0aW9uU3RhdHVzXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udHJvbHNcIj5cclxuICAgICAgPCEtLSBTaXplIFByZXNldCBCdXR0b25zIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2l6ZS1jb250cm9sc1wiICpuZ0lmPVwiIWlzRnVsbHNjcmVlblwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250cm9sLWJ1dHRvbiBzaXplLWJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5U2l6ZVByZXNldCgnY29tcGFjdCcpXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNpemUgPT09ICdjb21wYWN0J1wiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkNvbXBhY3QgVmlld1wiXHJcbiAgICAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJDb21wYWN0IFZpZXdcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1zdmdcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZEljb25zLmNvbXBhY3RWaWV3XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250cm9sLWJ1dHRvbiBzaXplLWJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5U2l6ZVByZXNldCgnZGVmYXVsdCcpXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNpemUgPT09ICdkZWZhdWx0J1wiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkRlZmF1bHQgVmlld1wiXHJcbiAgICAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJEZWZhdWx0IFZpZXdcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1zdmdcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZEljb25zLmRlZmF1bHRWaWV3XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250cm9sLWJ1dHRvbiBzaXplLWJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5U2l6ZVByZXNldCgnZXhwYW5kZWQnKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRTaXplID09PSAnZXhwYW5kZWQnXCJcclxuICAgICAgICAgICAgICAgIHRpdGxlPVwiRXhwYW5kZWQgVmlld1wiXHJcbiAgICAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJFeHBhbmRlZCBWaWV3XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tc3ZnXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5leHBhbmRlZFZpZXdcIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjaGF0LW1lc3NhZ2VzXCIgI21lc3NhZ2VzQ29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgY2xhc3M9XCJtZXNzYWdlLXdyYXBwZXJcIj5cclxuICAgICAgPCEtLSBNZXNzYWdlIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiIFxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsndXNlci1tZXNzYWdlJzogbWVzc2FnZS5pc1VzZXIsICdhaS1tZXNzYWdlJzogIW1lc3NhZ2UuaXNVc2VyLCAnbG9hZGluZy1tZXNzYWdlJzogbWVzc2FnZS5pc0xvYWRpbmd9XCI+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGVudFwiPlxyXG4gICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1lc3NhZ2UuY29udGVudFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtdGltZXN0YW1wXCI+e3sgZ2V0Rm9ybWF0dGVkVGltZShtZXNzYWdlLnRpbWVzdGFtcCkgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1hdmF0YXJcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVzc2FnZS5pc1VzZXJcIiBjbGFzcz1cImF2YXRhci1pY29uXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy51c2VyQXZhdGFyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbWVzc2FnZS5pc1VzZXIgJiYgIW1lc3NhZ2UuaXNMb2FkaW5nXCIgY2xhc3M9XCJhdmF0YXItaWNvblwiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkSWNvbnMuYWlBdmF0YXJcIj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1lc3NhZ2UuaXNMb2FkaW5nXCIgY2xhc3M9XCJhdmF0YXItaWNvbiBsb2FkaW5nLXNwaW5uZXJcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZEljb25zLmxvYWRpbmdBdmF0YXJcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjaGF0LWlucHV0XCI+XHJcbiAgICA8IS0tIEF0dGFjaG1lbnRzIFByZXZpZXcgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudHMtcHJldmlld1wiICpuZ0lmPVwic2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LWl0ZW1cIiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBzZWxlY3RlZEZpbGVzXCI+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cImF0dGFjaG1lbnQtaWNvblwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNDQgMTEuMDVsLTkuMTkgOS4xOWE2IDYgMCAwIDEtOC40OS04LjQ5bDkuMTktOS4xOWE0IDQgMCAwIDEgNS42NiA1LjY2bC05LjIgOS4xOWEyIDIgMCAwIDEtMi44My0yLjgzbDguNDktOC40OFwiPjwvcGF0aD5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImF0dGFjaG1lbnQtbmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImF0dGFjaG1lbnQtc2l6ZVwiPnt7IGdldEZpbGVTaXplRm9ybWF0dGVkKGZpbGUuc2l6ZSkgfX08L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1hdHRhY2htZW50XCIgKGNsaWNrKT1cInJlbW92ZUF0dGFjaG1lbnQoZmlsZS5pZClcIiB0aXRsZT1cIlJlbW92ZVwiIGF0dHIuYXJpYS1sYWJlbD1cIlJlbW92ZSBhdHRhY2htZW50XCI+XHJcbiAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj5cclxuICAgICAgICAgICAgPGxpbmUgeDE9XCIxOFwiIHkxPVwiNlwiIHgyPVwiNlwiIHkyPVwiMThcIj48L2xpbmU+XHJcbiAgICAgICAgICAgIDxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCI+PC9saW5lPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgPCEtLSBGaWxlIFVwbG9hZCBJbnB1dHMgKEhpZGRlbikgLS0+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIFxyXG4gICAgICAgICAgICAgaWQ9XCJpbWFnZS11cGxvYWQtaW5wdXRcIiBcclxuICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIiBcclxuICAgICAgICAgICAgIG11bHRpcGxlIFxyXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkltYWdlVXBsb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiXHJcbiAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVuYWJsZUltYWdlVXBsb2FkXCI+XHJcbiAgICAgIFxyXG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBcclxuICAgICAgICAgICAgIGlkPVwiZmlsZS11cGxvYWQtaW5wdXRcIiBcclxuICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmRvYywuZG9jeCwudHh0LC5jc3ZcIiBcclxuICAgICAgICAgICAgIG11bHRpcGxlIFxyXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVVcGxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZW5hYmxlRmlsZVVwbG9hZFwiPlxyXG4gICAgICBcclxuICAgICAgPCEtLSBVcGxvYWQgQnV0dG9ucyAoQ29uZGl0aW9uYWxseSByZW5kZXJlZCkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uc1wiICpuZ0lmPVwiZW5hYmxlSW1hZ2VVcGxvYWQgfHwgZW5hYmxlRmlsZVVwbG9hZFwiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJlbmFibGVJbWFnZVVwbG9hZFwiIFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uIGltYWdlLXVwbG9hZFwiIFxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRyaWdnZXJJbWFnZVVwbG9hZCgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiVXBsb2FkIEltYWdlXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tc3ZnXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5pbWFnZVVwbG9hZFwiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBcclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZW5hYmxlRmlsZVVwbG9hZFwiIFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uIGZpbGUtdXBsb2FkXCIgXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidHJpZ2dlckZpbGVVcGxvYWQoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoIEZpbGVcIlxyXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiQXR0YWNoIEZpbGVcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1zdmdcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZEljb25zLmZpbGVVcGxvYWRcIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgPHRleHRhcmVhIFxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudElucXVpcnlcIiBcclxuICAgICAgICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIHJvd3M9XCIyXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICBjbGFzcz1cImlucXVpcnktdGV4dGFyZWFcIlxyXG4gICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cIlR5cGUgeW91ciBtZXNzYWdlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbmRJbnF1aXJ5KClcIiBcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRJbnF1aXJ5LnRyaW0oKSB8fCBpc0xvYWRpbmdcIlxyXG4gICAgICAgIGNsYXNzPVwic2VuZC1idXR0b25cIlxyXG4gICAgICAgIHRpdGxlPVwiU2VuZCBNZXNzYWdlXCJcclxuICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJTZW5kIE1lc3NhZ2VcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0xvYWRpbmdcIiBjbGFzcz1cImljb24tc3ZnXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5zZW5kXCI+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJpY29uLXN2ZyBsb2FkaW5nLWljb25cIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZEljb25zLnNlbmRMb2FkaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dFwiPnt7IGlzTG9hZGluZyA/ICdTZW5kaW5nLi4uJyA6ICdTZW5kJyB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
743
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbWFuYXRlLWFpLWNoYXQtbGliL3NyYy9saWIvY29tcG9uZW50cy9haS1jaGF0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VtYW5hdGUtYWktY2hhdC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FpLWNoYXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFFcEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUErQixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7O0FBZ0MxRixNQUFNLE9BQU8sZUFBZTtJQStEMUIsWUFDVSxjQUE4QixFQUM5QixTQUF1QjtRQUR2QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQWhFeEIsVUFBSyxHQUFXLG1CQUFtQixDQUFDO1FBQ3BDLGdCQUFXLEdBQVcsMkVBQTJFLENBQUM7UUFDbEcsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFXL0Isc0JBQWlCLEdBQVksS0FBSyxDQUFDLENBQUMscUNBQXFDO1FBQ3pFLHFCQUFnQixHQUFZLEtBQUssQ0FBQyxDQUFFLG9DQUFvQztRQUN4RSxZQUFPLEdBQWdCLFNBQVMsQ0FBQyxDQUFHLHFCQUFxQjtRQUV6RCxxQkFBZ0IsR0FBWSxJQUFJLENBQUMsQ0FBRyxnQ0FBZ0M7UUFDcEUsbUJBQWMsR0FBK0IsUUFBUSxDQUFDLENBQUMsMEJBQTBCO1FBQ2pGLDRCQUF1QixHQUFZLElBQUksQ0FBQyxDQUFDLDhDQUE4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QkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFpQWdlbnRTZXJ2aWNlLCBBZ2VudFJlc3BvbnNlLCBTdXBwb3J0Qm90UmVxdWVzdCwgU3VwcG9ydEJvdFJlc3BvbnNlLCBDaGF0Q29udGVudCB9IGZyb20gJy4uL3NlcnZpY2VzL2FpLWFnZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJY29uU2V0VHlwZSwgQ2hhdEljb25Db25maWcsIGdldEljb25TZXQgfSBmcm9tICcuLi9tb2RlbHMvaWNvbi1jb25maWcuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdE1lc3NhZ2Uge1xyXG4gIG1lc3NhZ2VJZD86IHN0cmluZzsgICAgICAgICAgIC8vIFVuaXF1ZSBtZXNzYWdlIGlkZW50aWZpZXJcclxuICBjb252ZXJzYXRpb25JZD86IHN0cmluZzsgICAgICAgLy8gQ29udmVyc2F0aW9uL3Nlc3Npb24gaWRlbnRpZmllclxyXG4gIGlzVXNlcjogYm9vbGVhbjtcclxuICBjb250ZW50OiBzdHJpbmc7XHJcbiAgc2VuZGVyPzogc3RyaW5nOyAgICAgICAgICAgICAgIC8vIFNlbmRlciBuYW1lIChtYXBzIHRvIHlvdXIgJ3NlbmRlcicgZmllbGQpXHJcbiAgaW50ZW50Pzogc3RyaW5nO1xyXG4gIGF1dGhvck5hbWU/OiBzdHJpbmc7XHJcbiAgY29uZmlkZW5jZVNjb3JlPzogbnVtYmVyOyAgICAgIC8vIEFJIGNvbmZpZGVuY2Ugc2NvcmVcclxuICB0aW1lc3RhbXA6IERhdGU7XHJcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcclxuICBhdHRhY2htZW50cz86IEZpbGVBdHRhY2htZW50W107IC8vIEZpbGUvSW1hZ2UgYXR0YWNobWVudHNcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlQXR0YWNobWVudCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIHNpemU6IG51bWJlcjtcclxuICB1cmw/OiBzdHJpbmc7XHJcbiAgZGF0YT86IHN0cmluZyB8IEFycmF5QnVmZmVyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDaGF0U2l6ZSA9ICdjb21wYWN0JyB8ICdkZWZhdWx0JyB8ICdleHBhbmRlZCcgfCAnZnVsbHNjcmVlbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VtYW5hdGUtYWktY2hhdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FpLWNoYXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FpLWNoYXQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWlDaGF0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdDaGF0IHdpdGggTWFlc3Rybyc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdUeXBlIHlvdXIgaW5xdWlyeSBoZXJlLi4uIChQcmVzcyBFbnRlciB0byBzZW5kLCBTaGlmdCtFbnRlciBmb3IgbmV3IGxpbmUpJztcclxuICBASW5wdXQoKSBzaG93RGVidWdJbmZvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXBpVXJsPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcEtleT86IHN0cmluZztcclxuICBASW5wdXQoKSBhcHBTb3VyY2U/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXNlcklkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZpcnN0TmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSB1c2VyTmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSB0ZW1wbGF0ZURlc2lnbj86IHN0cmluZztcclxuICBASW5wdXQoKSB3ZWxjb21lTWVzc2FnZT86IHN0cmluZztcclxuICBASW5wdXQoKSBoaXN0b3JpY2FsTWVzc2FnZXM/OiBhbnlbXTsgLy8gSGlzdG9yaWNhbCBtZXNzYWdlcyBmcm9tIHBhcmVudFxyXG4gIEBJbnB1dCgpIGNvbnZlcnNhdGlvbklkPzogc3RyaW5nOyAgICAvLyBDdXJyZW50IGNvbnZlcnNhdGlvbiBJRFxyXG4gIEBJbnB1dCgpIGVuYWJsZUltYWdlVXBsb2FkOiBib29sZWFuID0gZmFsc2U7IC8vIEVuYWJsZS9kaXNhYmxlIGltYWdlIHVwbG9hZCBidXR0b25cclxuICBASW5wdXQoKSBlbmFibGVGaWxlVXBsb2FkOiBib29sZWFuID0gZmFsc2U7ICAvLyBFbmFibGUvZGlzYWJsZSBmaWxlIHVwbG9hZCBidXR0b25cclxuICBASW5wdXQoKSBpY29uU2V0OiBJY29uU2V0VHlwZSA9ICdmZWF0aGVyJzsgICAvLyBJY29uIHNldCBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBjdXN0b21JY29ucz86IFBhcnRpYWw8Q2hhdEljb25Db25maWc+OyAvLyBDdXN0b20gaWNvbiBvdmVycmlkZXNcclxuICBASW5wdXQoKSBlbmFibGVBbmltYXRpb25zOiBib29sZWFuID0gdHJ1ZTsgICAvLyBFbmFibGUvZGlzYWJsZSBhbGwgYW5pbWF0aW9uc1xyXG4gIEBJbnB1dCgpIGFuaW1hdGlvblNwZWVkOiAnc2xvdycgfCAnbm9ybWFsJyB8ICdmYXN0JyA9ICdub3JtYWwnOyAvLyBBbmltYXRpb24gc3BlZWQgY29udHJvbFxyXG4gIEBJbnB1dCgpIGVuYWJsZVN0YXR1c1RyYW5zaXRpb25zOiBib29sZWFuID0gdHJ1ZTsgLy8gRW5hYmxlL2Rpc2FibGUgc3RhdHVzIGluZGljYXRvciB0cmFuc2l0aW9uc1xyXG4gIEBPdXRwdXQoKSBtZXNzYWdlUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENoYXRNZXNzYWdlPigpO1xyXG4gIEBPdXRwdXQoKSBtZXNzYWdlU2VudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgQE91dHB1dCgpIGZpbGVVcGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUF0dGFjaG1lbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHNpemVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNpemU6IENoYXRTaXplLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9PigpO1xyXG5cclxuICBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSA9IFtdO1xyXG4gIGN1cnJlbnRJbnF1aXJ5ID0gJyc7XHJcbiAgYXV0aG9yTmFtZSA9ICcnO1xyXG4gIGludGVudCA9ICcnO1xyXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIGNvbmZpZ3VyYXRpb25TdGF0dXMgPSAnJztcclxuICBwcmV2aW91c1N0YXR1cyA9ICcnOyAvLyBUcmFjayBwcmV2aW91cyBzdGF0dXMgZm9yIHRyYW5zaXRpb25zXHJcbiAgXHJcbiAgLy8gUmVzaXppbmcgcHJvcGVydGllc1xyXG4gIGN1cnJlbnRTaXplOiBDaGF0U2l6ZSA9ICdkZWZhdWx0JztcclxuICBpc0Z1bGxzY3JlZW4gPSBmYWxzZTtcclxuICBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgY29udGFpbmVyV2lkdGggPSA4MDA7XHJcbiAgY29udGFpbmVySGVpZ2h0ID0gNjAwO1xyXG4gIG1pbldpZHRoID0gNDAwO1xyXG4gIG1heFdpZHRoID0gMTQwMDtcclxuICBtaW5IZWlnaHQgPSA0MDA7XHJcbiAgbWF4SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwO1xyXG4gIHN0YXJ0WCA9IDA7XHJcbiAgc3RhcnRZID0gMDtcclxuICBzdGFydFdpZHRoID0gMDtcclxuICBzdGFydEhlaWdodCA9IDA7XHJcbiAgXHJcbiAgLy8gRmlsZSB1cGxvYWQgcHJvcGVydGllc1xyXG4gIG1heEZpbGVTaXplID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBNQlxyXG4gIGFsbG93ZWRJbWFnZVR5cGVzID0gWydpbWFnZS9wbmcnLCAnaW1hZ2UvanBlZycsICdpbWFnZS9qcGcnLCAnaW1hZ2UvZ2lmJywgJ2ltYWdlL3dlYnAnXTtcclxuICBhbGxvd2VkRmlsZVR5cGVzID0gWydhcHBsaWNhdGlvbi9wZGYnLCAnYXBwbGljYXRpb24vbXN3b3JkJywgXHJcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxyXG4gICAgJ3RleHQvcGxhaW4nLCAndGV4dC9jc3YnXTtcclxuICBzZWxlY3RlZEZpbGVzOiBGaWxlQXR0YWNobWVudFtdID0gW107XHJcbiAgXHJcbiAgLy8gSWNvbiBjb25maWd1cmF0aW9uXHJcbiAgaWNvbnM6IENoYXRJY29uQ29uZmlnID0gZ2V0SWNvblNldCgnZmVhdGhlcicpO1xyXG4gIHNhbml0aXplZEljb25zOiB7IFtrZXk6IHN0cmluZ106IFNhZmVIdG1sIH0gPSB7fTtcclxuICBcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFpQWdlbnRTZXJ2aWNlOiBBaUFnZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoJ0luaXRpYWxpemluZy4uLicpO1xyXG4gICAgY29uc29sZS5sb2coJ0FJIENoYXQgQ29tcG9uZW50IGluaXRpYWxpemVkJyk7XHJcbiAgICBcclxuICAgIC8vIExvYWQgaWNvbiBzZXRcclxuICAgIHRoaXMuaWNvbnMgPSBnZXRJY29uU2V0KHRoaXMuaWNvblNldCwgdGhpcy5jdXN0b21JY29ucyk7XHJcbiAgICB0aGlzLnNhbml0aXplSWNvbnMoKTtcclxuICAgIFxyXG4gICAgLy8gQ29uZmlndXJlIEFQSSBVUkwgYW5kIEFwcCBLZXkgaWYgcHJvdmlkZWRcclxuICAgIGlmICh0aGlzLmFwaVVybCB8fCB0aGlzLmFwcEtleSkge1xyXG4gICAgICB0aGlzLmFpQWdlbnRTZXJ2aWNlLmNvbmZpZ3VyZSh7IFxyXG4gICAgICAgIGFwaVVybDogdGhpcy5hcGlVcmwsXHJcbiAgICAgICAgYXBwS2V5OiB0aGlzLmFwcEtleSBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIExvYWQgaGlzdG9yaWNhbCBtZXNzYWdlcyBpZiBwcm92aWRlZFxyXG4gICAgICBpZiAodGhpcy5oaXN0b3JpY2FsTWVzc2FnZXMgJiYgdGhpcy5oaXN0b3JpY2FsTWVzc2FnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMubG9hZEhpc3RvcmljYWxNZXNzYWdlcyh0aGlzLmhpc3RvcmljYWxNZXNzYWdlcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZGRXZWxjb21lTWVzc2FnZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnRlc3RDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgIHRoaXMubG9hZFNhdmVkU2l6ZSgpO1xyXG4gICAgICB0aGlzLmFwcGx5U2l6ZVByZXNldCh0aGlzLmN1cnJlbnRTaXplKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBjb21wb25lbnQgaW5pdGlhbGl6YXRpb246JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXR1cygnSW5pdGlhbGl6YXRpb24gZXJyb3InKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIERldGVjdCB3aGVuIGhpc3RvcmljYWxNZXNzYWdlcyBpbnB1dCBjaGFuZ2VzXHJcbiAgICBpZiAoY2hhbmdlc1snaGlzdG9yaWNhbE1lc3NhZ2VzJ10gJiYgIWNoYW5nZXNbJ2hpc3RvcmljYWxNZXNzYWdlcyddLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VzID0gY2hhbmdlc1snaGlzdG9yaWNhbE1lc3NhZ2VzJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnSGlzdG9yaWNhbCBtZXNzYWdlcyBjaGFuZ2VkOicsIG5ld01lc3NhZ2VzKTtcclxuICAgICAgXHJcbiAgICAgIC8vIENsZWFyIGV4aXN0aW5nIG1lc3NhZ2VzIGFuZCByZWxvYWRcclxuICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xyXG4gICAgICBcclxuICAgICAgaWYgKG5ld01lc3NhZ2VzICYmIG5ld01lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmxvYWRIaXN0b3JpY2FsTWVzc2FnZXMobmV3TWVzc2FnZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWRkV2VsY29tZU1lc3NhZ2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBEZXRlY3Qgd2hlbiBjb252ZXJzYXRpb25JZCBjaGFuZ2VzXHJcbiAgICBpZiAoY2hhbmdlc1snY29udmVyc2F0aW9uSWQnXSAmJiAhY2hhbmdlc1snY29udmVyc2F0aW9uSWQnXS5maXJzdENoYW5nZSkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnQ29udmVyc2F0aW9uIElEIGNoYW5nZWQ6JywgY2hhbmdlc1snY29udmVyc2F0aW9uSWQnXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAvLyBVcGRhdGUgYWxsIGV4aXN0aW5nIG1lc3NhZ2VzIHdpdGggbmV3IGNvbnZlcnNhdGlvbklkIGlmIG5lZWRlZFxyXG4gICAgICB0aGlzLm1lc3NhZ2VzLmZvckVhY2gobXNnID0+IHtcclxuICAgICAgICBpZiAobXNnLmNvbnZlcnNhdGlvbklkICE9PSB0aGlzLmNvbnZlcnNhdGlvbklkKSB7XHJcbiAgICAgICAgICBtc2cuY29udmVyc2F0aW9uSWQgPSB0aGlzLmNvbnZlcnNhdGlvbklkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIERldGVjdCB3aGVuIGljb24gc2V0IGNoYW5nZXNcclxuICAgIGlmIChjaGFuZ2VzWydpY29uU2V0J10gfHwgY2hhbmdlc1snY3VzdG9tSWNvbnMnXSkge1xyXG4gICAgICB0aGlzLmljb25zID0gZ2V0SWNvblNldCh0aGlzLmljb25TZXQsIHRoaXMuY3VzdG9tSWNvbnMpO1xyXG4gICAgICB0aGlzLnNhbml0aXplSWNvbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYW5pbWF0aW9uIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyBiYXNlZCBvbiBzcGVlZCBzZXR0aW5nXHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uRHVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVBbmltYXRpb25zKSByZXR1cm4gMDtcclxuICAgIHN3aXRjaCAodGhpcy5hbmltYXRpb25TcGVlZCkge1xyXG4gICAgICBjYXNlICdzbG93JzogcmV0dXJuIDUwMDtcclxuICAgICAgY2FzZSAnZmFzdCc6IHJldHVybiAxNTA7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAyNTA7IC8vIG5vcm1hbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFuaW1hdGlvbiBDU1MgY2xhc3MgYmFzZWQgb24gc2V0dGluZ3NcclxuICAgKi9cclxuICBnZXRBbmltYXRpb25DbGFzcygpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmVuYWJsZUFuaW1hdGlvbnMpIHJldHVybiAnbm8tYW5pbWF0aW9ucyc7XHJcbiAgICByZXR1cm4gYGFuaW1hdGlvbi1zcGVlZC0ke3RoaXMuYW5pbWF0aW9uU3BlZWR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzdGF0dXMgd2l0aCB0cmFuc2l0aW9uIHRyYWNraW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGF0dXMobmV3U3RhdHVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVuYWJsZVN0YXR1c1RyYW5zaXRpb25zICYmIHRoaXMuY29uZmlndXJhdGlvblN0YXR1cyAhPT0gbmV3U3RhdHVzKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNTdGF0dXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25TdGF0dXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TdGF0dXMgPSBuZXdTdGF0dXM7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIFNhbml0aXplIGljb24gU1ZHIHN0cmluZ3MgZm9yIHNhZmUgcmVuZGVyaW5nIGluIGlubmVySFRNTCBiaW5kaW5nc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc2FuaXRpemVJY29ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2FuaXRpemVkSWNvbnMgPSB7fTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuaWNvbnMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgY29uc3Qgc3ZnU3RyaW5nID0gdGhpcy5pY29uc1trZXkgYXMga2V5b2YgQ2hhdEljb25Db25maWddO1xyXG4gICAgICBpZiAoc3ZnU3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRJY29uc1trZXldID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoc3ZnU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0ZXN0Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdHVzKCdUZXN0aW5nIGNvbm5lY3Rpb24uLi4nKTtcclxuICAgIFxyXG4gICAgdGhpcy5haUFnZW50U2VydmljZS50ZXN0Q29uZmlndXJhdGlvbigpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBBZ2VudFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXR1cygnQUkgQWdlbnQgaXMgcmVhZHknKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzKGBDb25maWd1cmF0aW9uIGVycm9yOiAke3Jlc3BvbnNlLmVycm9yfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvclJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzKGBDb25uZWN0aW9uIGVycm9yOiBDYW5ub3QgY29ubmVjdCB0byBiYWNrZW5kIHNlcnZpY2VgKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FQSSBjb25uZWN0aW9uIHRlc3QgZmFpbGVkOicsIGVycm9yUmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRXZWxjb21lTWVzc2FnZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdlbGNvbWVUZXh0ID0gdGhpcy53ZWxjb21lTWVzc2FnZSB8fCBcclxuICAgICAgYDxoMz5IZWxsbyAke3RoaXMuZmlyc3ROYW1lfSE8L2gzPkhpLCBJJ20gTWFlc3Ryb+KAlHlvdXIgQUkgYXNzaXN0YW50LiBJJ20gaGVyZSB0byBoZWxwIHdpdGggeW91ciBwb2xpY3ktcmVsYXRlZCBpbnF1aXJpZXMuPGJyPjxicj5Ib3cgY2FuIEkgYXNzaXN0IHlvdSB0b2RheT9gO1xyXG4gICAgXHJcbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2goe1xyXG4gICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICBjb250ZW50OiB3ZWxjb21lVGV4dCwgLy8gRG9uJ3QgZm9ybWF0IEhUTUwgY29udGVudCwgdXNlIGl0IGRpcmVjdGx5XHJcbiAgICAgIGludGVudDogJ3dlbGNvbWUnLFxyXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKClcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBhbmQgdHJhbnNmb3JtIGhpc3RvcmljYWwgbWVzc2FnZXMgZnJvbSBwYXJlbnQgY29tcG9uZW50XHJcbiAgICogQWNjZXB0cyBtZXNzYWdlcyBpbiB0aGUgZm9ybWF0IGZyb20geW91ciBiYWNrZW5kL3N0YXRlIG1hbmFnZW1lbnRcclxuICAgKi9cclxuICBsb2FkSGlzdG9yaWNhbE1lc3NhZ2VzKGhpc3RvcmljYWxNZXNzYWdlczogYW55W10pOiB2b2lkIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdMb2FkaW5nIGhpc3RvcmljYWwgbWVzc2FnZXM6JywgaGlzdG9yaWNhbE1lc3NhZ2VzKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdOdW1iZXIgb2YgbWVzc2FnZXMgdG8gbG9hZDonLCBoaXN0b3JpY2FsTWVzc2FnZXMubGVuZ3RoKTtcclxuICAgIFxyXG4gICAgLy8gVHJhbnNmb3JtIHlvdXIgYmFja2VuZCBmb3JtYXQgdG8gQ2hhdE1lc3NhZ2UgZm9ybWF0XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZE1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdID0gaGlzdG9yaWNhbE1lc3NhZ2VzLm1hcCgobXNnOiBhbnkpID0+IHtcclxuICAgICAgLy8gRGV0ZXJtaW5lIGlmIG1lc3NhZ2UgaXMgZnJvbSB1c2VyIGJhc2VkIG9uIHNlbmRlciBvciByb2xlXHJcbiAgICAgIGNvbnN0IGlzVXNlck1lc3NhZ2UgPSB0aGlzLmlzVXNlck1lc3NhZ2UobXNnKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0ge1xyXG4gICAgICAgIG1lc3NhZ2VJZDogbXNnLm1lc3NhZ2VJZCB8fCBtc2cuaWQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IG1zZy5jb252ZXJzYXRpb25JZCB8fCB0aGlzLmNvbnZlcnNhdGlvbklkLFxyXG4gICAgICAgIGlzVXNlcjogaXNVc2VyTWVzc2FnZSxcclxuICAgICAgICBjb250ZW50OiBtc2cubWVzc2FnZVRleHQgfHwgbXNnLm1lc3NhZ2UgfHwgbXNnLnRleHQgfHwgbXNnLmNvbnRlbnQgfHwgJycsXHJcbiAgICAgICAgc2VuZGVyOiBtc2cuc2VuZGVyIHx8IChpc1VzZXJNZXNzYWdlID8gdGhpcy51c2VyTmFtZSB8fCAnVXNlcicgOiAnTWFlc3RybycpLFxyXG4gICAgICAgIGludGVudDogbXNnLmludGVudCB8fCAnJyxcclxuICAgICAgICBhdXRob3JOYW1lOiBtc2cuYXV0aG9yTmFtZSB8fCBtc2cuc2VuZGVyLFxyXG4gICAgICAgIGNvbmZpZGVuY2VTY29yZTogbXNnLmNvbmZpZGVuY2VTY29yZSB8fCBtc2cuY29uZmlkZW5jZSB8fCAwLFxyXG4gICAgICAgIHRpbWVzdGFtcDogbXNnLnRpbWVzdGFtcCB8fCBtc2cuY3JlYXRlZEF0IFxyXG4gICAgICAgICAgPyBuZXcgRGF0ZShtc2cudGltZXN0YW1wIHx8IG1zZy5jcmVhdGVkQXQpIFxyXG4gICAgICAgICAgOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2VcclxuICAgICAgfSBhcyBDaGF0TWVzc2FnZTtcclxuICAgICAgXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdUcmFuc2Zvcm1lZCBtZXNzYWdlOicsIHRyYW5zZm9ybWVkKTtcclxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIFNvcnQgbWVzc2FnZXMgYnkgdGltZXN0YW1wIHRvIG1haW50YWluIGNocm9ub2xvZ2ljYWwgb3JkZXJcclxuICAgIHRyYW5zZm9ybWVkTWVzc2FnZXMuc29ydCgoYSwgYikgPT4gXHJcbiAgICAgIGEudGltZXN0YW1wLmdldFRpbWUoKSAtIGIudGltZXN0YW1wLmdldFRpbWUoKVxyXG4gICAgKTtcclxuICAgIFxyXG4gICAgLy8gY29uc29sZS5sb2coJ1NvcnRlZCBtZXNzYWdlcyBjb3VudDonLCB0cmFuc2Zvcm1lZE1lc3NhZ2VzLmxlbmd0aCk7XHJcbiAgICBcclxuICAgIC8vIEFkZCB3ZWxjb21lIG1lc3NhZ2UgZmlyc3QgaWYgbm8gbWVzc2FnZXMgb3IgbG9hZCBoaXN0b3JpY2FsIG1lc3NhZ2VzXHJcbiAgICBpZiAodHJhbnNmb3JtZWRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ05vIG1lc3NhZ2VzIHRvIGxvYWQsIGFkZGluZyB3ZWxjb21lIG1lc3NhZ2UnKTtcclxuICAgICAgdGhpcy5hZGRXZWxjb21lTWVzc2FnZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgZmlyc3QgbWVzc2FnZSBpcyBhIHdlbGNvbWUgbWVzc2FnZSwgaWYgbm90IGFkZCBvbmVcclxuICAgICAgY29uc3QgaGFzV2VsY29tZSA9IHRyYW5zZm9ybWVkTWVzc2FnZXMuc29tZShtc2cgPT4gXHJcbiAgICAgICAgbXNnLmludGVudCA9PT0gJ3dlbGNvbWUnIHx8IG1zZy5jb250ZW50LmluY2x1ZGVzKCdIZWxsbycpXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWhhc1dlbGNvbWUpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnTm8gd2VsY29tZSBtZXNzYWdlIGZvdW5kLCBhZGRpbmcgb25lJyk7XHJcbiAgICAgICAgdGhpcy5hZGRXZWxjb21lTWVzc2FnZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjb25zb2xlLmxvZygnUHVzaGluZyB0cmFuc2Zvcm1lZCBtZXNzYWdlcyB0byBtZXNzYWdlcyBhcnJheScpO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2goLi4udHJhbnNmb3JtZWRNZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coJ1RvdGFsIGxvYWRlZCBtZXNzYWdlcyBpbiBjb21wb25lbnQ6JywgdGhpcy5tZXNzYWdlcy5sZW5ndGgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ01lc3NhZ2VzIGFycmF5OicsIHRoaXMubWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYSBtZXNzYWdlIGlzIGZyb20gdGhlIHVzZXJcclxuICAgKi9cclxuICBwcml2YXRlIGlzVXNlck1lc3NhZ2UobXNnOiBhbnkpOiBib29sZWFuIHtcclxuICAgIC8vIENoZWNrIHZhcmlvdXMgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGluZGljYXRlIHVzZXIgbWVzc2FnZVxyXG4gICAgaWYgKG1zZy5pc1VzZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIG1zZy5pc1VzZXI7XHJcbiAgICBpZiAobXNnLnJvbGUpIHJldHVybiBtc2cucm9sZS50b0xvd2VyQ2FzZSgpID09PSAndXNlcic7XHJcbiAgICBpZiAobXNnLnNlbmRlcikge1xyXG4gICAgICBjb25zdCBzZW5kZXIgPSBtc2cuc2VuZGVyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHJldHVybiBzZW5kZXIgPT09ICd1c2VyJyB8fCBcclxuICAgICAgICAgICAgIHNlbmRlciA9PT0gdGhpcy51c2VyTmFtZT8udG9Mb3dlckNhc2UoKSB8fFxyXG4gICAgICAgICAgICAgc2VuZGVyID09PSB0aGlzLnVzZXJJZD8udG9Mb3dlckNhc2UoKSB8fFxyXG4gICAgICAgICAgICAgc2VuZGVyLmluY2x1ZGVzKCd1c2VyJyk7XHJcbiAgICB9XHJcbiAgICAvLyBEZWZhdWx0IHRvIGZhbHNlIChib3QgbWVzc2FnZSkgaWYgY2FuJ3QgZGV0ZXJtaW5lXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZW5kSW5xdWlyeSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50SW5xdWlyeS50cmltKCkgfHwgdGhpcy5pc0xvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVzZXJNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcclxuICAgICAgbWVzc2FnZUlkOiB0aGlzLmdlbmVyYXRlTWVzc2FnZUlkKCksXHJcbiAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmNvbnZlcnNhdGlvbklkLFxyXG4gICAgICBpc1VzZXI6IHRydWUsXHJcbiAgICAgIHNlbmRlcjogdGhpcy51c2VyTmFtZSB8fCAnVXNlcicsXHJcbiAgICAgIGludGVudDogdGhpcy5pbnRlbnQsXHJcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY3VycmVudElucXVpcnksXHJcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgdGhpcy5tZXNzYWdlcy5wdXNoKHVzZXJNZXNzYWdlKTtcclxuICAgIHRoaXMubWVzc2FnZVNlbnQuZW1pdCh1c2VyTWVzc2FnZSk7XHJcblxyXG4gICAgLy8gQWRkIGxvYWRpbmcgbWVzc2FnZVxyXG4gICAgY29uc3QgbG9hZGluZ01lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICBpbnRlbnQ6ICcnLFxyXG4gICAgICBjb250ZW50OiAnUHJvY2Vzc2luZyB5b3VyIGlucXVpcnkuLi4nLFxyXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXHJcbiAgICAgIGlzTG9hZGluZzogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMubWVzc2FnZXMucHVzaChsb2FkaW5nTWVzc2FnZSk7XHJcblxyXG4gICAgY29uc3QgaW5xdWlyeSA9IHRoaXMuY3VycmVudElucXVpcnkudHJpbSgpO1xyXG4gICAgdGhpcy5jdXJyZW50SW5xdWlyeSA9ICcnO1xyXG4gICAgdGhpcy5hdXRob3JOYW1lID0gJyc7XHJcbiAgICB0aGlzLmludGVudCA9ICcnO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3Q6IFN1cHBvcnRCb3RSZXF1ZXN0ID0ge1xyXG4gICAgICBxdWVyeTogaW5xdWlyeSxcclxuICAgICAgLi4uKHRoaXMuY29udmVyc2F0aW9uSWQgJiYgeyBjb252ZXJzYXRpb25JZDogU3RyaW5nKHRoaXMuY29udmVyc2F0aW9uSWQpIH0pLFxyXG4gICAgICAuLi4odGhpcy51c2VySWQgJiYgeyB1c2VySWQ6IHRoaXMudXNlcklkIH0pLFxyXG4gICAgICAuLi4odGhpcy51c2VyTmFtZSAmJiB7IHVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lIH0pLFxyXG4gICAgICAuLi4odGhpcy5hcHBTb3VyY2UgJiYgeyBhcHBTb3VyY2U6IHRoaXMuYXBwU291cmNlIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYWlBZ2VudFNlcnZpY2UucHJvY2Vzc0lucXVpcnkocmVxdWVzdClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IFN1cHBvcnRCb3RSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gVXBkYXRlIGNvbnZlcnNhdGlvbklkIGlmIHByb3ZpZGVkIGluIHJlc3BvbnNlXHJcbiAgICAgICAgICBpZiAocmVzcG9uc2UuY29udmVyc2F0aW9uSWQgJiYgIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IHJlc3BvbnNlLmNvbnZlcnNhdGlvbklkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBSZW1vdmUgbG9hZGluZyBtZXNzYWdlXHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlcy5maWx0ZXIobXNnID0+ICFtc2cuaXNMb2FkaW5nKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmFuc3dlciB8fCAocmVzcG9uc2UuY29udGVudHMgJiYgcmVzcG9uc2UuY29udGVudHMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmFuc3dlcikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGJvdE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiB0aGlzLmdlbmVyYXRlTWVzc2FnZUlkKCksXHJcbiAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5jb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZW5kZXI6ICdNYWVzdHJvJyxcclxuICAgICAgICAgICAgICAgIGludGVudDogcmVzcG9uc2Uuc2VhcmNoSW50ZW50IHx8IGlucXVpcnksXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLmZvcm1hdE1lc3NhZ2VDb250ZW50KHJlc3BvbnNlLmFuc3dlciksXHJcbiAgICAgICAgICAgICAgICBhdXRob3JOYW1lOiByZXNwb25zZS5jb250ZW50cyAmJiByZXNwb25zZS5jb250ZW50cy5sZW5ndGggPiAwID8gcmVzcG9uc2UuY29udGVudHNbMF0uYXV0aG9yTmFtZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKGJvdE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVJlY2VpdmVkLmVtaXQoYm90TWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuY29udGVudHMgJiYgcmVzcG9uc2UuY29udGVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIC8vIFB1c2ggZWFjaCBjb250ZW50IGFzIGEgc2VwYXJhdGUgbWVzc2FnZVxyXG4gICAgICAgICAgICAgIHJlc3BvbnNlLmNvbnRlbnRzLmZvckVhY2goY29udGVudEl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRJdGVtLmNvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYm90TWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUlkOiB0aGlzLmdlbmVyYXRlTWVzc2FnZUlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IGNvbnRlbnRJdGVtLmF1dGhvck5hbWUgfHwgJ01hZXN0cm8nLFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudDogcmVzcG9uc2Uuc2VhcmNoSW50ZW50IHx8IGlucXVpcnksXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5mb3JtYXRNZXNzYWdlQ29udGVudChjb250ZW50SXRlbS5jb250ZW50IHx8ICdObyBjb250ZW50IGF2YWlsYWJsZScpLFxyXG4gICAgICAgICAgICAgICAgICAgIGF1dGhvck5hbWU6IGNvbnRlbnRJdGVtLmF1dGhvck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChib3RNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQuZW1pdChib3RNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHRoaXMuZ2VuZXJhdGVNZXNzYWdlSWQoKSxcclxuICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5jb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHNlbmRlcjogJ01hZXN0cm8nLFxyXG4gICAgICAgICAgICAgIGludGVudDogaW5xdWlyeSxcclxuICAgICAgICAgICAgICBjb250ZW50OiBgU29ycnksIEkgZGlkbid0IHJlY2VpdmUgYSB2YWxpZCByZXNwb25zZS5gLFxyXG4gICAgICAgICAgICAgIGF1dGhvck5hbWU6IHRoaXMuYXV0aG9yTmFtZSxcclxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVJlY2VpdmVkLmVtaXQoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJlbW92ZSBsb2FkaW5nIG1lc3NhZ2VcclxuICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gIW1zZy5pc0xvYWRpbmcpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IHRoaXMuZ2VuZXJhdGVNZXNzYWdlSWQoKSxcclxuICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHNlbmRlcjogJ01hZXN0cm8nLFxyXG4gICAgICAgICAgICBpbnRlbnQ6IGlucXVpcnksXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdTb3JyeSwgSSBlbmNvdW50ZXJlZCBhbiBlcnJvciBwcm9jZXNzaW5nIHlvdXIgcmVxdWVzdC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxyXG4gICAgICAgICAgICBhdXRob3JOYW1lOiB0aGlzLmF1dGhvck5hbWUsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQuZW1pdChlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIGlucXVpcnk6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckNoYXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2VzID0gW107XHJcbiAgICB0aGlzLmFkZFdlbGNvbWVNZXNzYWdlKCk7XHJcbiAgfVxyXG5cclxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLnNlbmRJbnF1aXJ5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBnZXRUaGVtZUNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICAvLyBEZWZhdWx0IHRoZW1lIGlmIG5vIHRlbXBsYXRlIGRlc2lnbiBpcyBzcGVjaWZpZWRcclxuICAgIGlmICghdGhpcy50ZW1wbGF0ZURlc2lnbikge1xyXG4gICAgICByZXR1cm4gJ3RoZW1lLWRlZmF1bHQnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbGlkYXRlIGFuZCByZXR1cm4gdGhlbWUgY2xhc3NcclxuICAgIGNvbnN0IHZhbGlkVGhlbWVzID0gWydkZWZhdWx0JywgJ2RhcmsnLCAnYmx1ZScsICdncmVlbicsICdwdXJwbGUnLCAnbWluaW1hbCcsICdjb3Jwb3JhdGUnLCAncmVkJywgJ3llbGxvdycsICdvcmFuZ2UnXTtcclxuICAgIGNvbnN0IHRoZW1lID0gdGhpcy50ZW1wbGF0ZURlc2lnbi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgXHJcbiAgICBpZiAodmFsaWRUaGVtZXMuaW5jbHVkZXModGhlbWUpKSB7XHJcbiAgICAgIHJldHVybiBgdGhlbWUtJHt0aGVtZX1gO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBGYWxsYmFjayB0byBkZWZhdWx0IGlmIGludmFsaWQgdGhlbWVcclxuICAgIGNvbnNvbGUud2FybihgSW52YWxpZCB0aGVtZSAnJHt0aGlzLnRlbXBsYXRlRGVzaWdufScgcHJvdmlkZWQuIFVzaW5nIGRlZmF1bHQgdGhlbWUuYCk7XHJcbiAgICByZXR1cm4gJ3RoZW1lLWRlZmF1bHQnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRNZXNzYWdlQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFjb250ZW50KSByZXR1cm4gJyc7XHJcbiAgICBcclxuICAgIC8vIElmIGNvbnRlbnQgYWxyZWFkeSBjb250YWlucyBIVE1MIHRhZ3MsIHJldHVybiBhcy1pc1xyXG4gICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJzwnKSAmJiBjb250ZW50LmluY2x1ZGVzKCc+JykpIHtcclxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENvbnZlcnQgbmV3bGluZXMgdG8gSFRNTCBicmVha3NcclxuICAgIGxldCBmb3JtYXR0ZWQgPSBjb250ZW50LnJlcGxhY2UoL1xcbi9nLCAnPGJyPicpO1xyXG4gICAgXHJcbiAgICAvLyBDb252ZXJ0IGVzY2FwZWQgbmV3bGluZXMgdG8gSFRNTCBicmVha3NcclxuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9cXFxcbi9nLCAnPGJyPicpO1xyXG4gICAgXHJcbiAgICAvLyBDb252ZXJ0IG1hcmtkb3duLXN0eWxlIGJvbGQgdG8gSFRNTFxyXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1xcKlxcKiguKj8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7XHJcbiAgICBcclxuICAgIC8vIENvbnZlcnQgYnVsbGV0IHBvaW50cyB0byBIVE1MIGxpc3RzXHJcbiAgICBjb25zdCBsaW5lcyA9IGZvcm1hdHRlZC5zcGxpdCgnPGJyPicpO1xyXG4gICAgbGV0IGluTGlzdCA9IGZhbHNlO1xyXG4gICAgY29uc3QgcHJvY2Vzc2VkTGluZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBcclxuICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcclxuICAgICAgaWYgKGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ+KAoiAnKSkge1xyXG4gICAgICAgIGlmICghaW5MaXN0KSB7XHJcbiAgICAgICAgICBwcm9jZXNzZWRMaW5lcy5wdXNoKCc8dWw+Jyk7XHJcbiAgICAgICAgICBpbkxpc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9jZXNzZWRMaW5lcy5wdXNoKCc8bGk+JyArIGxpbmUucmVwbGFjZSgvXuKAoiAvLCAnJykgKyAnPC9saT4nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaW5MaXN0KSB7XHJcbiAgICAgICAgICBwcm9jZXNzZWRMaW5lcy5wdXNoKCc8L3VsPicpO1xyXG4gICAgICAgICAgaW5MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb2Nlc3NlZExpbmVzLnB1c2gobGluZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGluTGlzdCkge1xyXG4gICAgICBwcm9jZXNzZWRMaW5lcy5wdXNoKCc8L3VsPicpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gcHJvY2Vzc2VkTGluZXMuam9pbignPGJyPicpLnJlcGxhY2UoLzxicj48dWw+L2csICc8dWw+JykucmVwbGFjZSgvPFxcL3VsPjxicj4vZywgJzwvdWw+Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlU2Vzc2lvbklkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ3Nlc3Npb25fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KSArICdfJyArIERhdGUubm93KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlTWVzc2FnZUlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ21zZ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpICsgJ18nICsgRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1hdHRlZFRpbWUodGltZXN0YW1wOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aW1lc3RhbXAudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09IFJlc2l6ZSBNZXRob2RzID09PT09PT09PT09PT1cclxuICBcclxuICBzdGFydFJlc2l6ZShldmVudDogTW91c2VFdmVudCwgZGlyZWN0aW9uOiAnd2lkdGgnIHwgJ2JvdGgnKTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5pc1Jlc2l6aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcclxuICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcclxuICAgIHRoaXMuc3RhcnRXaWR0aCA9IHRoaXMuY29udGFpbmVyV2lkdGg7XHJcbiAgICB0aGlzLnN0YXJ0SGVpZ2h0ID0gdGhpcy5jb250YWluZXJIZWlnaHQ7XHJcbiAgICBcclxuICAgIGNvbnN0IG1vdXNlTW92ZUhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4gdGhpcy5vblJlc2l6ZShlLCBkaXJlY3Rpb24pO1xyXG4gICAgY29uc3QgbW91c2VVcEhhbmRsZXIgPSAoKSA9PiB0aGlzLnN0b3BSZXNpemUobW91c2VNb3ZlSGFuZGxlciwgbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50LCBkaXJlY3Rpb246ICd3aWR0aCcgfCAnYm90aCcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nKSByZXR1cm47XHJcbiAgICBcclxuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcclxuICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnN0YXJ0WTtcclxuICAgIFxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3dpZHRoJyB8fCBkaXJlY3Rpb24gPT09ICdib3RoJykge1xyXG4gICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWluKFxyXG4gICAgICAgIE1hdGgubWF4KHRoaXMuc3RhcnRXaWR0aCArIGRlbHRhWCwgdGhpcy5taW5XaWR0aCksXHJcbiAgICAgICAgdGhpcy5tYXhXaWR0aFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gbmV3V2lkdGg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdib3RoJykge1xyXG4gICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1pbihcclxuICAgICAgICBNYXRoLm1heCh0aGlzLnN0YXJ0SGVpZ2h0ICsgZGVsdGFZLCB0aGlzLm1pbkhlaWdodCksXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBuZXdIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0b3BSZXNpemUobW91c2VNb3ZlSGFuZGxlcjogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQsIG1vdXNlVXBIYW5kbGVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcclxuICAgIFxyXG4gICAgdGhpcy5zYXZlU2l6ZVByZWZlcmVuY2UoKTtcclxuICAgIHRoaXMuZW1pdFNpemVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2l6ZVByZXNldChzaXplOiBDaGF0U2l6ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50U2l6ZSA9IHNpemU7XHJcbiAgICBcclxuICAgIHN3aXRjaCAoc2l6ZSkge1xyXG4gICAgICBjYXNlICdjb21wYWN0JzpcclxuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gNDAwO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gNTAwO1xyXG4gICAgICAgIHRoaXMuaXNGdWxsc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOlxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSA4MDA7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSA2MDA7XHJcbiAgICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZXhwYW5kZWQnOlxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSAxMjAwO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gODAwO1xyXG4gICAgICAgIHRoaXMuaXNGdWxsc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Z1bGxzY3JlZW4nOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlRnVsbHNjcmVlbigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5zYXZlU2l6ZVByZWZlcmVuY2UoKTtcclxuICAgIHRoaXMuZW1pdFNpemVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNGdWxsc2NyZWVuKSB7XHJcbiAgICAgIC8vIEVudGVyaW5nIGZ1bGxzY3JlZW4gLSBzYXZlIGN1cnJlbnQgc3RhdGUgZmlyc3RcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2hhdGJveC1wcmV2aW91cy1zaXplJywgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIHdpZHRoOiB0aGlzLmNvbnRhaW5lcldpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5jb250YWluZXJIZWlnaHQsXHJcbiAgICAgICAgc2l6ZTogdGhpcy5jdXJyZW50U2l6ZSxcclxuICAgICAgICB3YXNGdWxsc2NyZWVuOiB0aGlzLmlzRnVsbHNjcmVlblxyXG4gICAgICB9KSk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3VycmVudFNpemUgPSAnZnVsbHNjcmVlbic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBFeGl0aW5nIGZ1bGxzY3JlZW4gLSByZXN0b3JlIHByZXZpb3VzIHN0YXRlXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjaGF0Ym94LXByZXZpb3VzLXNpemUnKTtcclxuICAgICAgICBpZiAocHJldmlvdXMpIHtcclxuICAgICAgICAgIGNvbnN0IHByZXZEYXRhID0gSlNPTi5wYXJzZShwcmV2aW91cyk7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gcHJldkRhdGEud2lkdGggfHwgODAwO1xyXG4gICAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBwcmV2RGF0YS5oZWlnaHQgfHwgNjAwO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U2l6ZSA9IHByZXZEYXRhLnNpemUgPT09ICdmdWxsc2NyZWVuJyA/ICdkZWZhdWx0JyA6IHByZXZEYXRhLnNpemU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFNpemUgPSAnZGVmYXVsdCc7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gODAwO1xyXG4gICAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSA2MDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNpemUgPSAnZGVmYXVsdCc7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IDgwMDtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IDYwMDtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5zYXZlU2l6ZVByZWZlcmVuY2UoKTtcclxuICAgIHRoaXMuZW1pdFNpemVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZVNpemVQcmVmZXJlbmNlKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2l6ZURhdGEgPSB7XHJcbiAgICAgIHNpemU6IHRoaXMuY3VycmVudFNpemUsXHJcbiAgICAgIHdpZHRoOiB0aGlzLmNvbnRhaW5lcldpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuY29udGFpbmVySGVpZ2h0LFxyXG4gICAgICBpc0Z1bGxzY3JlZW46IHRoaXMuaXNGdWxsc2NyZWVuXHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjaGF0Ym94LXNpemUtcHJlZmVyZW5jZScsIEpTT04uc3RyaW5naWZ5KHNpemVEYXRhKSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIHNpemUgcHJlZmVyZW5jZTonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRTYXZlZFNpemUoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzYXZlZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2NoYXRib3gtc2l6ZS1wcmVmZXJlbmNlJyk7XHJcbiAgICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIGNvbnN0IHNpemVEYXRhID0gSlNPTi5wYXJzZShzYXZlZCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2l6ZSA9IHNpemVEYXRhLnNpemUgfHwgJ2RlZmF1bHQnO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBzaXplRGF0YS53aWR0aCB8fCA4MDA7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBzaXplRGF0YS5oZWlnaHQgfHwgNjAwO1xyXG4gICAgICAgIHRoaXMuaXNGdWxsc2NyZWVuID0gc2l6ZURhdGEuaXNGdWxsc2NyZWVuIHx8IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIHNpemUgcHJlZmVyZW5jZTonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRTaXplQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaXplQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgc2l6ZTogdGhpcy5jdXJyZW50U2l6ZSxcclxuICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5jb250YWluZXJIZWlnaHRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGFpbmVyU3R5bGUoKTogYW55IHtcclxuICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHdpZHRoOiAnMTAwdncgIWltcG9ydGFudCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMTAwdmggIWltcG9ydGFudCcsXHJcbiAgICAgICAgbWF4V2lkdGg6ICcxMDB2dyAhaW1wb3J0YW50JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCAhaW1wb3J0YW50JyxcclxuICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcclxuICAgICAgICB0b3A6ICcwJyxcclxuICAgICAgICBsZWZ0OiAnMCcsXHJcbiAgICAgICAgcmlnaHQ6ICcwJyxcclxuICAgICAgICBib3R0b206ICcwJyxcclxuICAgICAgICBtYXJnaW46ICcwJyxcclxuICAgICAgICB6SW5kZXg6IDk5OTk5XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZHRoOiBgJHt0aGlzLmNvbnRhaW5lcldpZHRofXB4YCxcclxuICAgICAgaGVpZ2h0OiBgJHt0aGlzLmNvbnRhaW5lckhlaWdodH1weGAsXHJcbiAgICAgIG1heFdpZHRoOiBgJHt0aGlzLm1heFdpZHRofXB4YFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT0gRmlsZSBVcGxvYWQgTWV0aG9kcyA9PT09PT09PT09PT09XHJcbiAgXHJcbiAgb25JbWFnZVVwbG9hZChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUZpbGVTZWxlY3Rpb24oQXJyYXkuZnJvbShpbnB1dC5maWxlcyksICdpbWFnZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25GaWxlVXBsb2FkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsZVNlbGVjdGlvbihBcnJheS5mcm9tKGlucHV0LmZpbGVzKSwgJ2ZpbGUnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRmlsZVNlbGVjdGlvbihmaWxlczogRmlsZVtdLCB0eXBlOiAnaW1hZ2UnIHwgJ2ZpbGUnKTogdm9pZCB7XHJcbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAvLyBWYWxpZGF0ZSBmaWxlIHR5cGVcclxuICAgICAgY29uc3QgYWxsb3dlZFR5cGVzID0gdHlwZSA9PT0gJ2ltYWdlJyA/IHRoaXMuYWxsb3dlZEltYWdlVHlwZXMgOiB0aGlzLmFsbG93ZWRGaWxlVHlwZXM7XHJcbiAgICAgIGlmICghYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYEZpbGUgdHlwZSAke2ZpbGUudHlwZX0gbm90IGFsbG93ZWRgKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFZhbGlkYXRlIGZpbGUgc2l6ZVxyXG4gICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5tYXhGaWxlU2l6ZSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUubmFtZX0gZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHt0aGlzLm1heEZpbGVTaXplIC8gMTAyNCAvIDEwMjR9TUJgKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogUHJvZ3Jlc3NFdmVudDxGaWxlUmVhZGVyPikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQ6IEZpbGVBdHRhY2htZW50ID0ge1xyXG4gICAgICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVNZXNzYWdlSWQoKSxcclxuICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcclxuICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcclxuICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcclxuICAgICAgICAgIGRhdGE6IGUudGFyZ2V0Py5yZXN1bHQgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICB0aGlzLmZpbGVVcGxvYWRlZC5lbWl0KGF0dGFjaG1lbnQpO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgaWYgKHR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gdGhpcy5zZWxlY3RlZEZpbGVzLmZpbHRlcihmID0+IGYuaWQgIT09IGF0dGFjaG1lbnRJZCk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VySW1hZ2VVcGxvYWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS11cGxvYWQtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyRmlsZVVwbG9hZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkLWlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmlsZUljb24oZmlsZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoZmlsZVR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHJldHVybiAn8J+WvO+4jyc7XHJcbiAgICBpZiAoZmlsZVR5cGUuaW5jbHVkZXMoJ3BkZicpKSByZXR1cm4gJ/Cfk4QnO1xyXG4gICAgaWYgKGZpbGVUeXBlLmluY2x1ZGVzKCd3b3JkJykgfHwgZmlsZVR5cGUuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHJldHVybiAn8J+TnSc7XHJcbiAgICBpZiAoZmlsZVR5cGUuaW5jbHVkZXMoJ3RleHQnKSkgcmV0dXJuICfwn5ODJztcclxuICAgIHJldHVybiAn8J+Tjic7XHJcbiAgfVxyXG5cclxuICBnZXRGaWxlU2l6ZUZvcm1hdHRlZChieXRlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChieXRlcyA8IDEwMjQpIHJldHVybiBieXRlcyArICcgQic7XHJcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSkgKyAnIEtCJztcclxuICAgIHJldHVybiAoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpICsgJyBNQic7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImFpLWNoYXQtY29udGFpbmVyXCIgXHJcbiAgICAgW25nQ2xhc3NdPVwiZ2V0VGhlbWVDbGFzcygpXCIgXHJcbiAgICAgW25nU3R5bGVdPVwiZ2V0Q29udGFpbmVyU3R5bGUoKVwiXHJcbiAgICAgW2NsYXNzLmZ1bGxzY3JlZW5dPVwiaXNGdWxsc2NyZWVuXCJcclxuICAgICBbY2xhc3MucmVzaXppbmddPVwiaXNSZXNpemluZ1wiXHJcbiAgICAgW2NsYXNzXT1cImdldEFuaW1hdGlvbkNsYXNzKClcIj5cclxuICBcclxuICA8IS0tIFJlc2l6ZSBIYW5kbGVzIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtcmlnaHRcIiBcclxuICAgICAgIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCAnd2lkdGgnKVwiXHJcbiAgICAgICAqbmdJZj1cIiFpc0Z1bGxzY3JlZW5cIlxyXG4gICAgICAgdGl0bGU9XCJEcmFnIHRvIHJlc2l6ZSB3aWR0aFwiPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtY29ybmVyXCIgXHJcbiAgICAgICAobW91c2Vkb3duKT1cInN0YXJ0UmVzaXplKCRldmVudCwgJ2JvdGgnKVwiXHJcbiAgICAgICAqbmdJZj1cIiFpc0Z1bGxzY3JlZW5cIlxyXG4gICAgICAgdGl0bGU9XCJEcmFnIHRvIHJlc2l6ZVwiPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDwhLS0gRGVidWcgSW5mb3JtYXRpb24gKG9ubHkgc2hvd24gd2hlbiBzaG93RGVidWdJbmZvIGlzIHRydWUpIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVidWdJbmZvXCIgY2xhc3M9XCJkZWJ1Zy1pbmZvXCI+XHJcbiAgICA8aDM+REVCVUc6IEFJIENoYXQgQ29tcG9uZW50IExvYWRlZDwvaDM+XHJcbiAgICA8cD5TdGF0dXM6IHt7IGNvbmZpZ3VyYXRpb25TdGF0dXMgfHwgJ0xvYWRpbmcuLi4nIH19PC9wPlxyXG4gICAgPHA+TWVzc2FnZXMgY291bnQ6IHt7IG1lc3NhZ2VzLmxlbmd0aCB8fCAwIH19PC9wPlxyXG4gICAgPHA+VGhlbWU6IHt7IHRlbXBsYXRlRGVzaWduIHx8ICdkZWZhdWx0JyB9fTwvcD5cclxuICAgIDxwPlNpemU6IHt7IGN1cnJlbnRTaXplIH19ICh7eyBjb250YWluZXJXaWR0aCB9fXh7eyBjb250YWluZXJIZWlnaHQgfX0pPC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY2hhdC1oZWFkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItbGVmdFwiPlxyXG4gICAgICA8aDI+e3sgdGl0bGUgfX08L2gyPlxyXG4gICAgICA8IS0tIEljb24tb25seSBzdGF0dXMgaW5kaWNhdG9yIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWluZGljYXRvci1pY29uXCIgXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydzdGF0dXMtcmVhZHknOiBjb25maWd1cmF0aW9uU3RhdHVzID09PSAnQUkgQWdlbnQgaXMgcmVhZHknLCBcclxuICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMtZXJyb3InOiBjb25maWd1cmF0aW9uU3RhdHVzICE9PSAnQUkgQWdlbnQgaXMgcmVhZHknICYmIGNvbmZpZ3VyYXRpb25TdGF0dXMgIT09ICdJbml0aWFsaXppbmcuLi4nICYmIGNvbmZpZ3VyYXRpb25TdGF0dXMgIT09ICdUZXN0aW5nIGNvbm5lY3Rpb24uLi4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cy1sb2FkaW5nJzogY29uZmlndXJhdGlvblN0YXR1cyA9PT0gJ0luaXRpYWxpemluZy4uLicgfHwgY29uZmlndXJhdGlvblN0YXR1cyA9PT0gJ1Rlc3RpbmcgY29ubmVjdGlvbi4uLicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1lbmFibGVkJzogZW5hYmxlU3RhdHVzVHJhbnNpdGlvbnN9XCJcclxuICAgICAgICAgICBbdGl0bGVdPVwiY29uZmlndXJhdGlvblN0YXR1c1wiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRyb2xzXCI+XHJcbiAgICAgIDwhLS0gU2l6ZSBQcmVzZXQgQnV0dG9ucyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpemUtY29udHJvbHNcIiAqbmdJZj1cIiFpc0Z1bGxzY3JlZW5cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udHJvbC1idXR0b24gc2l6ZS1idXR0b25cIiBcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseVNpemVQcmVzZXQoJ2NvbXBhY3QnKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRTaXplID09PSAnY29tcGFjdCdcIlxyXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJDb21wYWN0IFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiQ29tcGFjdCBWaWV3XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tc3ZnXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5jb21wYWN0Vmlld1wiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udHJvbC1idXR0b24gc2l6ZS1idXR0b25cIiBcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseVNpemVQcmVzZXQoJ2RlZmF1bHQnKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRTaXplID09PSAnZGVmYXVsdCdcIlxyXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJEZWZhdWx0IFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiRGVmYXVsdCBWaWV3XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tc3ZnXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5kZWZhdWx0Vmlld1wiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udHJvbC1idXR0b24gc2l6ZS1idXR0b25cIiBcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseVNpemVQcmVzZXQoJ2V4cGFuZGVkJylcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50U2l6ZSA9PT0gJ2V4cGFuZGVkJ1wiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkV4cGFuZGVkIFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiRXhwYW5kZWQgVmlld1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXN2Z1wiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkSWNvbnMuZXhwYW5kZWRWaWV3XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY2hhdC1tZXNzYWdlc1wiICNtZXNzYWdlc0NvbnRhaW5lcj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgbWVzc2FnZXM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiIGNsYXNzPVwibWVzc2FnZS13cmFwcGVyXCI+XHJcbiAgICAgIDwhLS0gTWVzc2FnZSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIiBcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J3VzZXItbWVzc2FnZSc6IG1lc3NhZ2UuaXNVc2VyLCAnYWktbWVzc2FnZSc6ICFtZXNzYWdlLmlzVXNlciwgJ2xvYWRpbmctbWVzc2FnZSc6IG1lc3NhZ2UuaXNMb2FkaW5nfVwiPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJtZXNzYWdlLmNvbnRlbnRcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLXRpbWVzdGFtcFwiPnt7IGdldEZvcm1hdHRlZFRpbWUobWVzc2FnZS50aW1lc3RhbXApIH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtYXZhdGFyXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1lc3NhZ2UuaXNVc2VyXCIgY2xhc3M9XCJhdmF0YXItaWNvblwiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkSWNvbnMudXNlckF2YXRhclwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW1lc3NhZ2UuaXNVc2VyICYmICFtZXNzYWdlLmlzTG9hZGluZ1wiIGNsYXNzPVwiYXZhdGFyLWljb25cIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZEljb25zLmFpQXZhdGFyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJtZXNzYWdlLmlzTG9hZGluZ1wiIGNsYXNzPVwiYXZhdGFyLWljb24gbG9hZGluZy1zcGlubmVyXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5sb2FkaW5nQXZhdGFyXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY2hhdC1pbnB1dFwiPlxyXG4gICAgPCEtLSBBdHRhY2htZW50cyBQcmV2aWV3IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnRzLXByZXZpZXdcIiAqbmdJZj1cInNlbGVjdGVkRmlsZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudC1pdGVtXCIgKm5nRm9yPVwibGV0IGZpbGUgb2Ygc2VsZWN0ZWRGaWxlc1wiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJhdHRhY2htZW50LWljb25cIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTIxLjQ0IDExLjA1bC05LjE5IDkuMTlhNiA2IDAgMCAxLTguNDktOC40OWw5LjE5LTkuMTlhNCA0IDAgMCAxIDUuNjYgNS42NmwtOS4yIDkuMTlhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDhcIj48L3BhdGg+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRhY2htZW50LW5hbWVcIj57eyBmaWxlLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRhY2htZW50LXNpemVcIj57eyBnZXRGaWxlU2l6ZUZvcm1hdHRlZChmaWxlLnNpemUpIH19PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYXR0YWNobWVudFwiIChjbGljayk9XCJyZW1vdmVBdHRhY2htZW50KGZpbGUuaWQpXCIgdGl0bGU9XCJSZW1vdmVcIiBhdHRyLmFyaWEtbGFiZWw9XCJSZW1vdmUgYXR0YWNobWVudFwiPlxyXG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCI+XHJcbiAgICAgICAgICAgIDxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCI+PC9saW5lPlxyXG4gICAgICAgICAgICA8bGluZSB4MT1cIjZcIiB5MT1cIjZcIiB4Mj1cIjE4XCIgeTI9XCIxOFwiPjwvbGluZT5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDwhLS0gRmlsZSBVcGxvYWQgSW5wdXRzIChIaWRkZW4pIC0tPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBcclxuICAgICAgICAgICAgIGlkPVwiaW1hZ2UtdXBsb2FkLWlucHV0XCIgXHJcbiAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCIgXHJcbiAgICAgICAgICAgICBtdWx0aXBsZSBcclxuICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbWFnZVVwbG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIlxyXG4gICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmFibGVJbWFnZVVwbG9hZFwiPlxyXG4gICAgICBcclxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgXHJcbiAgICAgICAgICAgICBpZD1cImZpbGUtdXBsb2FkLWlucHV0XCIgXHJcbiAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLC5kb2MsLmRvY3gsLnR4dCwuY3N2XCIgXHJcbiAgICAgICAgICAgICBtdWx0aXBsZSBcclxuICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlVXBsb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiXHJcbiAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVuYWJsZUZpbGVVcGxvYWRcIj5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gVXBsb2FkIEJ1dHRvbnMgKENvbmRpdGlvbmFsbHkgcmVuZGVyZWQpIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJ1dHRvbnNcIiAqbmdJZj1cImVuYWJsZUltYWdlVXBsb2FkIHx8IGVuYWJsZUZpbGVVcGxvYWRcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZW5hYmxlSW1hZ2VVcGxvYWRcIiBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLWJ1dHRvbiBpbWFnZS11cGxvYWRcIiBcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VySW1hZ2VVcGxvYWQoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEltYWdlXCJcclxuICAgICAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cIlVwbG9hZCBJbWFnZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXN2Z1wiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkSWNvbnMuaW1hZ2VVcGxvYWRcIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVuYWJsZUZpbGVVcGxvYWRcIiBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLWJ1dHRvbiBmaWxlLXVwbG9hZFwiIFxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRyaWdnZXJGaWxlVXBsb2FkKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaCBGaWxlXCJcclxuICAgICAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cIkF0dGFjaCBGaWxlXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tc3ZnXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5maWxlVXBsb2FkXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDx0ZXh0YXJlYSBcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRJbnF1aXJ5XCIgXHJcbiAgICAgICAgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICByb3dzPVwiMlwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgY2xhc3M9XCJpbnF1aXJ5LXRleHRhcmVhXCJcclxuICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJUeXBlIHlvdXIgbWVzc2FnZVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgIFxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIChjbGljayk9XCJzZW5kSW5xdWlyeSgpXCIgXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50SW5xdWlyeS50cmltKCkgfHwgaXNMb2FkaW5nXCJcclxuICAgICAgICBjbGFzcz1cInNlbmQtYnV0dG9uXCJcclxuICAgICAgICB0aXRsZT1cIlNlbmQgTWVzc2FnZVwiXHJcbiAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiU2VuZCBNZXNzYWdlXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMb2FkaW5nXCIgY2xhc3M9XCJpY29uLXN2Z1wiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkSWNvbnMuc2VuZFwiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwiaWNvbi1zdmcgbG9hZGluZy1pY29uXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRJY29ucy5zZW5kTG9hZGluZ1wiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHRcIj57eyBpc0xvYWRpbmcgPyAnU2VuZGluZy4uLicgOiAnU2VuZCcgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
@@ -523,13 +523,7 @@ class AiChatComponent {
523
523
  this.authorName = '';
524
524
  this.intent = '';
525
525
  this.isLoading = true;
526
- const request = {
527
- query: inquiry,
528
- conversationId: this.conversationId,
529
- userId: this.userId,
530
- userName: this.userName,
531
- appSource: this.appSource
532
- };
526
+ const request = Object.assign(Object.assign(Object.assign(Object.assign({ query: inquiry }, (this.conversationId && { conversationId: String(this.conversationId) })), (this.userId && { userId: this.userId })), (this.userName && { userName: this.userName })), (this.appSource && { appSource: this.appSource }));
533
527
  this.aiAgentService.processInquiry(request)
534
528
  .pipe(takeUntil(this.destroy$))
535
529
  .subscribe({