@cloudbase/realtime 2.5.0-beta.0 → 2.5.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +0 -31
- package/dist/cjs/virtual-websocket-client.js +3 -3
- package/dist/cjs/websocket-client.js +1 -1
- package/dist/esm/virtual-websocket-client.js +3 -3
- package/dist/esm/websocket-client.js +1 -1
- package/package.json +3 -3
- package/src/virtual-websocket-client.ts +2 -2
- package/tsconfig.esm.json +1 -19
- package/tsconfig.json +1 -19
|
@@ -556,9 +556,9 @@ var VirtualWebSocketClient = (function () {
|
|
|
556
556
|
CHECK_LAST: DEFAULT_MAX_SEND_ACK_AUTO_RETRY_ON_ERROR,
|
|
557
557
|
};
|
|
558
558
|
this.listener = new RealtimeListener({
|
|
559
|
-
close:
|
|
559
|
+
close: function () {
|
|
560
560
|
_this.closeWatch();
|
|
561
|
-
}
|
|
561
|
+
},
|
|
562
562
|
onChange: options.onChange,
|
|
563
563
|
onError: options.onError,
|
|
564
564
|
debug: this.debug,
|
|
@@ -949,4 +949,4 @@ function getPublicEvent(event) {
|
|
|
949
949
|
}
|
|
950
950
|
return e;
|
|
951
951
|
}
|
|
952
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC13ZWJzb2NrZXQtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZpcnR1YWwtd2Vic29ja2V0LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNoQyxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBZ0J4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYixjQUFjLEVBQ2QsY0FBYyxFQUNkLGdCQUFnQixFQUNoQiwyQkFBMkIsR0FHNUIsTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQXlDL0IsSUFBSyxXQVVKO0FBVkQsV0FBSyxXQUFXO0lBQ2Qsc0NBQXVCLENBQUE7SUFDdkIsa0NBQW1CLENBQUE7SUFDbkIsd0NBQXlCLENBQUE7SUFDekIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7SUFDbkIsa0NBQW1CLENBQUE7SUFDbkIsZ0NBQWlCLENBQUE7SUFDakIsZ0NBQWlCLENBQUE7SUFDakIsb0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVZJLFdBQVcsS0FBWCxXQUFXLFFBVWY7QUFFRCxJQUFNLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQTtBQUM5QyxJQUFNLCtCQUErQixHQUFHLENBQUMsQ0FBQTtBQUN6QyxJQUFNLHdDQUF3QyxHQUFHLENBQUMsQ0FBQTtBQUNsRCxJQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FB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QUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1lBQ3hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUE7U0FDdkM7SUFDSCxDQUFDO0lBQ0gsNkJBQUM7QUFBRCxDQUFDLEFBOTJCRCxJQTgyQkM7O0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBZTtJQUNyQyxJQUFNLENBQUMsR0FBbUI7UUFDeEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ1osUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3pFLENBQUE7SUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBRS9CLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUN2QixDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1NBQ2xEO1FBR0QsSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFLOUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUNsRDtLQUNGO0lBRUQsT0FBTyxDQUFDLENBQUE7QUFDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNldCBmcm9tICdsb2Rhc2guc2V0J1xuaW1wb3J0IHVuc2V0IGZyb20gJ2xvZGFzaC51bnNldCdcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCdcbmltcG9ydCB7IGdlblJlcXVlc3RJZCB9IGZyb20gJy4vbWVzc2FnZSdcbmltcG9ydCB7XG4gIElSZXNwb25zZU1lc3NhZ2UsXG4gIElSZXF1ZXN0TWVzc2FnZUluaXRXYXRjaE1zZyxcbiAgSVJlc3BvbnNlTWVzc2FnZUluaXRFdmVudE1zZyxcbiAgSURCRXZlbnQsXG4gIElSZXF1ZXN0TWVzc2FnZVJlYnVpbGRXYXRjaE1zZyxcbiAgSVJlcXVlc3RNZXNzYWdlQ2xvc2VXYXRjaE1zZyxcbiAgSVJlcXVlc3RNc2dUeXBlLFxuICBJUmVzcG9uc2VNZXNzYWdlTmV4dEV2ZW50TXNnLFxuICBJUmVxdWVzdE1lc3NhZ2VDaGVja0xhc3RNc2csXG4gIElXYXRjaE9wdGlvbnMsXG59IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvcmVhbHRpbWUnXG5pbXBvcnQge1xuICBJU2luZ2xlREJFdmVudCxcbn0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9kYXRhYmFzZSdcbmltcG9ydCB7IFJlYWx0aW1lTGlzdGVuZXIgfSBmcm9tICcuL2xpc3RlbmVyJ1xuaW1wb3J0IHsgU25hcHNob3QgfSBmcm9tICcuL3NuYXBzaG90J1xuaW1wb3J0IHsgSVdTU2VuZE9wdGlvbnMsIElMb2dpblJlc3VsdCB9IGZyb20gJy4vd2Vic29ja2V0LWNsaWVudCdcbmltcG9ydCB7XG4gIEVSUl9DT0RFLFxuICBDbG91ZFNES0Vycm9yLFxuICBpc1RpbWVvdXRFcnJvcixcbiAgQ2FuY2VsbGVkRXJyb3IsXG4gIGlzQ2FuY2VsbGVkRXJyb3IsXG4gIGlzUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcixcbiAgUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcixcbiAgVGltZW91dEVycm9yLFxufSBmcm9tICcuL2Vycm9yJ1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJ1xuXG4vLyA9PT09PT09PT09PT09PT0gUmVhbHRpbWUgVmlydHVhbCBXZWJTb2NrZXQgQ2xpZW50IChJbnRlcm5hbCkgPT09PT09PT09PT09PT09PT09PT1cblxuaW50ZXJmYWNlIElWaXJ0dWFsV2ViU29ja2V0Q2xpZW50Q29uc3RydWN0b3JPcHRpb25zIGV4dGVuZHMgSVdhdGNoT3B0aW9ucyB7XG4gIGVudklkPzogc3RyaW5nXG4gIGNvbGxlY3Rpb25OYW1lOiBzdHJpbmdcbiAgcXVlcnk6IHN0cmluZ1xuICBsaW1pdD86IG51bWJlclxuICBvcmRlckJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBzZW5kOiA8VCA9IGFueT4ob3B0czogSVdTU2VuZE9wdGlvbnMpID0+IFByb21pc2U8VD5cbiAgbG9naW46IChlbnZJZD86IHN0cmluZywgcmVmcmVzaD86IGJvb2xlYW4pID0+IFByb21pc2U8YW55PlxuICBpc1dTQ29ubmVjdGVkOiAoKSA9PiBib29sZWFuXG4gIG9uY2VXU0Nvbm5lY3RlZDogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICBnZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoOiAoKSA9PiBudW1iZXJcbiAgb25XYXRjaFN0YXJ0OiAoY2xpZW50OiBWaXJ0dWFsV2ViU29ja2V0Q2xpZW50LCBxdWVyeUlEOiBzdHJpbmcpID0+IHZvaWRcbiAgb25XYXRjaENsb3NlOiAoY2xpZW50OiBWaXJ0dWFsV2ViU29ja2V0Q2xpZW50LCBxdWVyeUlEOiBzdHJpbmcpID0+IHZvaWRcbiAgZGVidWc/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBJV2F0Y2hTZXNzaW9uSW5mbyB7XG4gIHF1ZXJ5SUQ6IHN0cmluZ1xuICBjdXJyZW50RXZlbnRJZDogbnVtYmVyXG4gIGN1cnJlbnREb2NzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W11cbiAgZXhwZWN0RXZlbnRJZD86IG51bWJlclxufVxuXG5pbnRlcmZhY2UgSUhhbmRsZUNvbW1vbkVycm9yT3B0aW9ucyB7XG4gIG9uU2lnbkVycm9yOiAoZTogUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcikgPT4gdm9pZFxuICBvblRpbWVvdXRFcnJvcjogKGU6IFRpbWVvdXRFcnJvcikgPT4gdm9pZFxuICBvbkNhbmNlbGxlZEVycm9yOiAoZTogQ2FuY2VsbGVkRXJyb3IpID0+IHZvaWRcbiAgb25Ob3RSZXRyeWFibGVFcnJvcjogKGU6IFJlYWx0aW1lRXJyb3JNZXNzYWdlRXJyb3IpID0+IHZvaWRcbiAgb25Vbmtub3duRXJyb3I6IChlOiBhbnkpID0+IHZvaWRcbn1cblxuaW50ZXJmYWNlIElIYW5kbGVXYXRjaEVzdGFibGlzaG1lbnRFcnJvck9wdGlvbnMge1xuICBvcGVyYXRpb25OYW1lOiAnSU5JVF9XQVRDSCcgfCAnUkVCVUlMRF9XQVRDSCdcbiAgcmVzb2x2ZTogKHZhbHVlPzogUHJvbWlzZUxpa2U8dm9pZD4gfCB1bmRlZmluZWQpID0+IHZvaWRcbiAgcmVqZWN0OiAoZTogYW55KSA9PiB2b2lkXG59XG5cbmVudW0gV2F0Y2hTdGF0dXMge1xuICBMT0dHSU5HSU4gPSAnTE9HR0lOR0lOJyxcbiAgSU5JVElORyA9ICdJTklUSU5HJyxcbiAgUkVCVUlMRElORyA9ICdSRUJVSUxESU5HJyxcbiAgQUNUSVZFID0gJ0FDVElWRScsXG4gIEVSUk9SRUQgPSAnRVJST1JFRCcsXG4gIENMT1NJTkcgPSAnQ0xPU0lORycsXG4gIENMT1NFRCA9ICdDTE9TRUQnLFxuICBQQVVTRUQgPSAnUEFVU0VEJyxcbiAgUkVTVU1JTkcgPSAnUkVTVU1JTkcnXG59XG5cbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FX09OX1VOS05PV05fRVJST1IgPSAxMDBcbmNvbnN0IERFRkFVTFRfTUFYX0FVVE9fUkVUUllfT05fRVJST1IgPSAyXG5jb25zdCBERUZBVUxUX01BWF9TRU5EX0FDS19BVVRPX1JFVFJZX09OX0VSUk9SID0gMlxuY29uc3QgREVGQVVMVF9TRU5EX0FDS19ERUJPVU5DRV9USU1FT1VUID0gMTAgKiAxMDAwXG5jb25zdCBERUZBVUxUX0lOSVRfV0FUQ0hfVElNRU9VVCA9IDEwICogMTAwMFxuY29uc3QgREVGQVVMVF9SRUJVSUxEX1dBVENIX1RJTUVPVVQgPSAxMCAqIDEwMDBcblxuZXhwb3J0IGNsYXNzIFZpcnR1YWxXZWJTb2NrZXRDbGllbnQge1xuICAvLyBwYXNzZWQgb3ZlclxuICB3YXRjaElkOiBzdHJpbmdcbiAgLy8gb3duXG4gIGxpc3RlbmVyOiBSZWFsdGltZUxpc3RlbmVyXG4gIHByaXZhdGUgZW52SWQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uTmFtZTogc3RyaW5nXG4gIHByaXZhdGUgcXVlcnk6IHN0cmluZ1xuICBwcml2YXRlIGxpbWl0OiBudW1iZXJcbiAgcHJpdmF0ZSBvcmRlckJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIHByaXZhdGUgc2VuZDogPFQgPSBhbnk+KG9wdHM6IElXU1NlbmRPcHRpb25zKSA9PiBQcm9taXNlPFQ+XG4gIHByaXZhdGUgbG9naW46IChlbnZJZD86IHN0cmluZywgcmVmcmVzaD86IGJvb2xlYW4pID0+IFByb21pc2U8YW55PlxuICBwcml2YXRlIGlzV1NDb25uZWN0ZWQ6ICgpID0+IGJvb2xlYW5cbiAgcHJpdmF0ZSBvbmNlV1NDb25uZWN0ZWQ6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgcHJpdmF0ZSBnZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoOiAoKSA9PiBudW1iZXJcbiAgcHJpdmF0ZSBvbldhdGNoU3RhcnQ6IChcbiAgICBjbGllbnQ6IFZpcnR1YWxXZWJTb2NrZXRDbGllbnQsXG4gICAgcXVlcnlJRDogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBwcml2YXRlIG9uV2F0Y2hDbG9zZTogKFxuICAgIGNsaWVudDogVmlydHVhbFdlYlNvY2tldENsaWVudCxcbiAgICBxdWVyeUlEOiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIHByaXZhdGUgZGVidWc/OiBib29sZWFuXG5cbiAgcHJpdmF0ZSB3YXRjaFN0YXR1czogV2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5JTklUSU5HXG4gIHByaXZhdGUgYXZhaWxhYmxlUmV0cmllczogUGFydGlhbDxSZWNvcmQ8SVJlcXVlc3RNc2dUeXBlLCBudW1iZXI+PlxuICBwcml2YXRlIGFja1RpbWVvdXRJZD86IG51bWJlclxuICBwcml2YXRlIGluaXRXYXRjaFByb21pc2U/OiBQcm9taXNlPHZvaWQ+XG4gIHByaXZhdGUgcmVidWlsZFdhdGNoUHJvbWlzZT86IFByb21pc2U8dm9pZD5cblxuICAvLyBvYnRhaW5lZFxuICBwcml2YXRlIHNlc3Npb25JbmZvPzogSVdhdGNoU2Vzc2lvbkluZm9cblxuICAvLyBpbnRlcm5hbFxuICBwcml2YXRlIHdhaXRFeHBlY3RlZFRpbWVvdXRJZD86IG51bWJlclxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElWaXJ0dWFsV2ViU29ja2V0Q2xpZW50Q29uc3RydWN0b3JPcHRpb25zKSB7XG4gICAgdGhpcy53YXRjaElkID0gYHdhdGNoaWRfJHsrbmV3IERhdGUoKX1fJHtNYXRoLnJhbmRvbSgpfWBcbiAgICB0aGlzLmVudklkID0gb3B0aW9ucy5lbnZJZFxuICAgIHRoaXMuY29sbGVjdGlvbk5hbWUgPSBvcHRpb25zLmNvbGxlY3Rpb25OYW1lXG4gICAgdGhpcy5xdWVyeSA9IG9wdGlvbnMucXVlcnlcbiAgICB0aGlzLmxpbWl0ID0gb3B0aW9ucy5saW1pdFxuICAgIHRoaXMub3JkZXJCeSA9IG9wdGlvbnMub3JkZXJCeVxuICAgIHRoaXMuc2VuZCA9IG9wdGlvbnMuc2VuZFxuICAgIHRoaXMubG9naW4gPSBvcHRpb25zLmxvZ2luXG4gICAgdGhpcy5pc1dTQ29ubmVjdGVkID0gb3B0aW9ucy5pc1dTQ29ubmVjdGVkXG4gICAgdGhpcy5vbmNlV1NDb25uZWN0ZWQgPSBvcHRpb25zLm9uY2VXU0Nvbm5lY3RlZFxuICAgIHRoaXMuZ2V0V2FpdEV4cGVjdGVkVGltZW91dExlbmd0aCA9IG9wdGlvbnMuZ2V0V2FpdEV4cGVjdGVkVGltZW91dExlbmd0aFxuICAgIHRoaXMub25XYXRjaFN0YXJ0ID0gb3B0aW9ucy5vbldhdGNoU3RhcnRcbiAgICB0aGlzLm9uV2F0Y2hDbG9zZSA9IG9wdGlvbnMub25XYXRjaENsb3NlXG4gICAgdGhpcy5kZWJ1ZyA9IG9wdGlvbnMuZGVidWdcblxuICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllcyA9IHtcbiAgICAgIElOSVRfV0FUQ0g6IERFRkFVTFRfTUFYX0FVVE9fUkVUUllfT05fRVJST1IsXG4gICAgICBSRUJVSUxEX1dBVENIOiBERUZBVUxUX01BWF9BVVRPX1JFVFJZX09OX0VSUk9SLFxuICAgICAgQ0hFQ0tfTEFTVDogREVGQVVMVF9NQVhfU0VORF9BQ0tfQVVUT19SRVRSWV9PTl9FUlJPUixcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbmVyID0gbmV3IFJlYWx0aW1lTGlzdGVuZXIoe1xuICAgICAgY2xvc2U6IHZvaWQgKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZVdhdGNoKClcbiAgICAgIH0pLFxuICAgICAgb25DaGFuZ2U6IG9wdGlvbnMub25DaGFuZ2UsXG4gICAgICBvbkVycm9yOiBvcHRpb25zLm9uRXJyb3IsXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcbiAgICAgIHZpcnR1YWxDbGllbnQ6IHRoaXMsXG4gICAgfSlcblxuICAgIHRoaXMuaW5pdFdhdGNoKClcbiAgfVxuXG4gIG9uTWVzc2FnZShtc2c6IElSZXNwb25zZU1lc3NhZ2UpIHtcbiAgICAvLyB3YXRjaFN0YXR1cyBzYW5pdHkgY2hlY2tcbiAgICBzd2l0Y2ggKHRoaXMud2F0Y2hTdGF0dXMpIHtcbiAgICAgIGNhc2UgV2F0Y2hTdGF0dXMuUEFVU0VEOiB7XG4gICAgICAgIC8vIGlnbm9yZSBhbGwgYnV0IGVycm9yIG1lc3NhZ2VcbiAgICAgICAgaWYgKG1zZy5tc2dUeXBlICE9PSAnRVJST1InKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgV2F0Y2hTdGF0dXMuTE9HR0lOR0lOOlxuICAgICAgY2FzZSBXYXRjaFN0YXR1cy5JTklUSU5HOlxuICAgICAgY2FzZSBXYXRjaFN0YXR1cy5SRUJVSUxESU5HOiB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgZXJyb3I6IHVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCB3aGlsZSAke3RoaXMud2F0Y2hTdGF0dXN9YClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjYXNlIFdhdGNoU3RhdHVzLkNMT1NFRDoge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIGVycm9yOiB1bmV4cGVjdGVkIG1lc3NhZ2UgcmVjZWl2ZWQgd2hlbiB0aGUgd2F0Y2ggaGFzIGNsb3NlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FzZSBXYXRjaFN0YXR1cy5FUlJPUkVEOiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgZXJyb3I6IHVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCB3aGVuIHRoZSB3YXRjaCBoYXMgZW5kZWQgd2l0aCBlcnJvcicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5zZXNzaW9uSW5mbykge1xuICAgICAgY29uc29sZS53YXJuKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBlcnJvcjogc2Vzc2lvbkluZm8gbm90IGZvdW5kIHdoaWxlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2NoZWR1bGVTZW5kQUNLKClcblxuICAgIHN3aXRjaCAobXNnLm1zZ1R5cGUpIHtcbiAgICAgIGNhc2UgJ05FWFRfRVZFTlQnOiB7XG4gICAgICAgIC8vIGlmIChwcm9jZXNzLmVudi5ERUJVRykge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIC8vIGlmICh3eC5faWdub3JlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgbmV4dGV2ZW50ICR7bXNnLm1zZ0RhdGEuY3VyckV2ZW50fSBpZ25vcmVkYCwgbXNnKVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIC8vIHd4Ll9pZ25vcmUgPSBmYWxzZVxuICAgICAgICAvLyByZXR1cm5cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJFdmVudHMobXNnKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnQ0hFQ0tfRVZFTlQnOiB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkIDwgbXNnLm1zZ0RhdGEuY3VyckV2ZW50KSB7XG4gICAgICAgICAgLy8gY2xpZW50IGV2ZW50SUQgPCBzZXJ2ZXIgZXZlbnRJRDpcbiAgICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBvbmUgb3IgbW9yZSBwZW5kaW5nIGV2ZW50cyBub3QgeWV0IHJlY2VpdmVkIGJ1dCBzZW50IGJ5IHRoZSBzZXJ2ZXJcbiAgICAgICAgICB0aGlzLnNlc3Npb25JbmZvLmV4cGVjdEV2ZW50SWQgPSBtc2cubXNnRGF0YS5jdXJyRXZlbnRcbiAgICAgICAgICB0aGlzLmNsZWFyV2FpdEV4cGVjdGVkRXZlbnQoKVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB0aGlzLndhaXRFeHBlY3RlZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gbXVzdCByZWJ1aWxkIHdhdGNoXG4gICAgICAgICAgICB0aGlzLnJlYnVpbGRXYXRjaCgpXG4gICAgICAgICAgfSwgdGhpcy5nZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoKCkpXG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSB3YWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoICR7dGhpcy5nZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoKCl9YClcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnRVJST1InOiB7XG4gICAgICAgIC8vIHJlY2VpdmUgc2VydmVyIGVycm9yXG4gICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9TRVJWRVJfRVJST1JfTVNHIGFzIHN0cmluZyxcbiAgICAgICAgICBlcnJNc2c6IGAke21zZy5tc2dEYXRhLmNvZGV9IC0gJHttc2cubXNnRGF0YS5tZXNzYWdlfWAsXG4gICAgICAgIH0pKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtyZWFsdGltZSBsaXN0ZW5lcl0gdmlydHVhbCBjbGllbnQgcmVjZWl2ZSB1bmV4cGVjdGVkIG1zZyAke21zZy5tc2dUeXBlfTogYCxcbiAgICAgICAgICBtc2dcbiAgICAgICAgKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsb3NlV2l0aEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuRVJST1JFRFxuICAgIHRoaXMuY2xlYXJBQ0tTY2hlZHVsZSgpXG4gICAgdGhpcy5saXN0ZW5lci5vbkVycm9yKGVycm9yKVxuICAgIHRoaXMub25XYXRjaENsb3NlKFxuICAgICAgdGhpcyxcbiAgICAgICh0aGlzLnNlc3Npb25JbmZvPy5xdWVyeUlEKSB8fCAnJ1xuICAgIClcblxuICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdIGNsaWVudCBjbG9zZWQgKCR7dGhpcy5jb2xsZWN0aW9uTmFtZX0gJHt0aGlzLnF1ZXJ5fSkgKHdhdGNoSWQgJHt0aGlzLndhdGNoSWR9KWApXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuUEFVU0VEXG4gICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gY2xpZW50IHBhdXNlZCAoJHt0aGlzLmNvbGxlY3Rpb25OYW1lfSAke3RoaXMucXVlcnl9KSAod2F0Y2hJZCAke3RoaXMud2F0Y2hJZH0pYClcbiAgfVxuXG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5SRVNVTUlOR1xuXG4gICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gY2xpZW50IHJlc3VtaW5nIHdpdGggJHtcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm8gPyAnUkVCVUlMRF9XQVRDSCcgOiAnSU5JVF9XQVRDSCdcbiAgICB9ICgke3RoaXMuY29sbGVjdGlvbk5hbWV9ICR7dGhpcy5xdWVyeX0pICgke3RoaXMud2F0Y2hJZH0pYClcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCAodGhpcy5zZXNzaW9uSW5mbyA/IHRoaXMucmVidWlsZFdhdGNoKCkgOiB0aGlzLmluaXRXYXRjaCgpKVxuXG4gICAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSBjbGllbnQgc3VjY2Vzc2Z1bGx5IHJlc3VtZWQgKCR7dGhpcy5jb2xsZWN0aW9uTmFtZX0gJHt0aGlzLnF1ZXJ5fSkgKCR7dGhpcy53YXRjaElkfSlgKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBbcmVhbHRpbWVdIGNsaWVudCByZXN1bWUgZmFpbGVkICgke3RoaXMuY29sbGVjdGlvbk5hbWV9ICR7dGhpcy5xdWVyeX0pICgke3RoaXMud2F0Y2hJZH0pYCxcbiAgICAgICAgZVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3NMb2dpbiA9IGFzeW5jIChcbiAgICBlbnZJZD86IHN0cmluZyxcbiAgICByZWZyZXNoPzogYm9vbGVhblxuICApOiBQcm9taXNlPElMb2dpblJlc3VsdD4gPT4ge1xuICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5MT0dHSU5HSU5cbiAgICBjb25zdCBsb2dpblJlc3VsdCA9IGF3YWl0IHRoaXMubG9naW4oZW52SWQsIHJlZnJlc2gpXG4gICAgaWYgKCF0aGlzLmVudklkKSB7XG4gICAgICB0aGlzLmVudklkID0gbG9naW5SZXN1bHQuZW52SWRcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUmVzdWx0XG4gIH1cblxuICBwcml2YXRlIGluaXRXYXRjaCA9IGFzeW5jIChmb3JjZVJlZnJlc2hMb2dpbj86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAodGhpcy5pbml0V2F0Y2hQcm9taXNlICE9PSBudWxsICYmIHRoaXMuaW5pdFdhdGNoUHJvbWlzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0V2F0Y2hQcm9taXNlXG4gICAgfVxuXG4gICAgdGhpcy5pbml0V2F0Y2hQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0aGlzLndhdGNoU3RhdHVzID09PSBXYXRjaFN0YXR1cy5QQVVTRUQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbcmVhbHRpbWVdIGluaXRXYXRjaCBjYW5jZWxsZWQgb24gcGF1c2UnKVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgZW52SWQgfSA9IGF3YWl0IHRoaXMud3NMb2dpbih0aGlzLmVudklkLCBmb3JjZVJlZnJlc2hMb2dpbilcbiAgICAgICAgICBpZiAoKHRoaXMud2F0Y2hTdGF0dXMgYXMgV2F0Y2hTdGF0dXMpID09PSBXYXRjaFN0YXR1cy5QQVVTRUQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbcmVhbHRpbWVdIGluaXRXYXRjaCBjYW5jZWxsZWQgb24gcGF1c2UnKVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5JTklUSU5HXG5cbiAgICAgICAgICBjb25zdCBpbml0V2F0Y2hNc2c6IElSZXF1ZXN0TWVzc2FnZUluaXRXYXRjaE1zZyA9IHtcbiAgICAgICAgICAgIHdhdGNoSWQ6IHRoaXMud2F0Y2hJZCxcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZ2VuUmVxdWVzdElkKCksXG4gICAgICAgICAgICBtc2dUeXBlOiAnSU5JVF9XQVRDSCcsXG4gICAgICAgICAgICBtc2dEYXRhOiB7XG4gICAgICAgICAgICAgIGVudklkLFxuICAgICAgICAgICAgICBjb2xsTmFtZTogdGhpcy5jb2xsZWN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgcXVlcnk6IHRoaXMucXVlcnksXG4gICAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxpbWl0LFxuICAgICAgICAgICAgICBvcmRlckJ5OiB0aGlzLm9yZGVyQnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluaXRFdmVudE1zZyA9IGF3YWl0IHRoaXMuc2VuZDxJUmVzcG9uc2VNZXNzYWdlSW5pdEV2ZW50TXNnPih7XG4gICAgICAgICAgICBtc2c6IGluaXRXYXRjaE1zZyxcbiAgICAgICAgICAgIHdhaXRSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgICAgIHNraXBPbk1lc3NhZ2U6IHRydWUsXG4gICAgICAgICAgICB0aW1lb3V0OiBERUZBVUxUX0lOSVRfV0FUQ0hfVElNRU9VVCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3QgeyBldmVudHMsIGN1cnJFdmVudCB9ID0gaW5pdEV2ZW50TXNnLm1zZ0RhdGFcblxuICAgICAgICAgIHRoaXMuc2Vzc2lvbkluZm8gPSB7XG4gICAgICAgICAgICBxdWVyeUlEOiBpbml0RXZlbnRNc2cubXNnRGF0YS5xdWVyeUlELFxuICAgICAgICAgICAgY3VycmVudEV2ZW50SWQ6IGN1cnJFdmVudCAtIDEsXG4gICAgICAgICAgICBjdXJyZW50RG9jczogW10sXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRklYOiBpbiBpbml0RXZlbnQgbWVzc2FnZSwgYWxsIGV2ZW50cyBoYXZlIGlkIDAsIHdoaWNoIGlzIGluY29uc2lzdGVudCB3aXRoIGN1cnJFdmVudFxuICAgICAgICAgIGlmIChldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGV2ZW50cykge1xuICAgICAgICAgICAgICBlLklEID0gY3VyckV2ZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNlcnZlckV2ZW50cyhpbml0RXZlbnRNc2cpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQgPSBjdXJyRXZlbnRcbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IFNuYXBzaG90KHtcbiAgICAgICAgICAgICAgaWQ6IGN1cnJFdmVudCxcbiAgICAgICAgICAgICAgZG9jQ2hhbmdlczogW10sXG4gICAgICAgICAgICAgIGRvY3M6IFtdLFxuICAgICAgICAgICAgICB0eXBlOiAnaW5pdCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5vbkNoYW5nZShzbmFwc2hvdClcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTZW5kQUNLKClcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vbldhdGNoU3RhcnQodGhpcywgdGhpcy5zZXNzaW9uSW5mby5xdWVyeUlEKVxuICAgICAgICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5BQ1RJVkVcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZVJldHJpZXMuSU5JVF9XQVRDSCA9IERFRkFVTFRfTUFYX0FVVE9fUkVUUllfT05fRVJST1JcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlV2F0Y2hFc3RhYmxpc2htZW50RXJyb3IoZSwge1xuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogJ0lOSVRfV0FUQ0gnLFxuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KSgpXG4gICAgfSlcblxuICAgIGxldCBzdWNjZXNzID0gZmFsc2VcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRXYXRjaFByb21pc2VcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaW5pdFdhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSBpbml0V2F0Y2ggJHtzdWNjZXNzID8gJ3N1Y2Nlc3MnIDogJ2ZhaWwnfWApXG4gIH1cblxuICBwcml2YXRlIHJlYnVpbGRXYXRjaCA9IGFzeW5jIChmb3JjZVJlZnJlc2hMb2dpbj86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAodGhpcy5yZWJ1aWxkV2F0Y2hQcm9taXNlICE9PSBudWxsICYmIHRoaXMucmVidWlsZFdhdGNoUHJvbWlzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWJ1aWxkV2F0Y2hQcm9taXNlXG4gICAgfVxuXG4gICAgdGhpcy5yZWJ1aWxkV2F0Y2hQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0aGlzLndhdGNoU3RhdHVzID09PSBXYXRjaFN0YXR1cy5QQVVTRUQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbcmVhbHRpbWVdIHJlYnVpbGRXYXRjaCBjYW5jZWxsZWQgb24gcGF1c2UnKVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IGVudklkIH0gPSBhd2FpdCB0aGlzLndzTG9naW4odGhpcy5lbnZJZCwgZm9yY2VSZWZyZXNoTG9naW4pXG5cbiAgICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbkluZm8pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCByZWJ1aWxkV2F0Y2ggd2l0aG91dCBhIHN1Y2Nlc3NmdWwgaW5pdFdhdGNoIChsYWNrIG9mIHNlc3Npb25JbmZvKScpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCh0aGlzLndhdGNoU3RhdHVzIGFzIFdhdGNoU3RhdHVzKSA9PT0gV2F0Y2hTdGF0dXMuUEFVU0VEKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW3JlYWx0aW1lXSByZWJ1aWxkV2F0Y2ggY2FuY2VsbGVkIG9uIHBhdXNlJylcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuUkVCVUlMRElOR1xuXG4gICAgICAgICAgY29uc3QgcmVidWlsZFdhdGNoTXNnOiBJUmVxdWVzdE1lc3NhZ2VSZWJ1aWxkV2F0Y2hNc2cgPSB7XG4gICAgICAgICAgICB3YXRjaElkOiB0aGlzLndhdGNoSWQsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IGdlblJlcXVlc3RJZCgpLFxuICAgICAgICAgICAgbXNnVHlwZTogJ1JFQlVJTERfV0FUQ0gnLFxuICAgICAgICAgICAgbXNnRGF0YToge1xuICAgICAgICAgICAgICBlbnZJZCxcbiAgICAgICAgICAgICAgY29sbE5hbWU6IHRoaXMuY29sbGVjdGlvbk5hbWUsXG4gICAgICAgICAgICAgIHF1ZXJ5SUQ6IHRoaXMuc2Vzc2lvbkluZm8ucXVlcnlJRCxcbiAgICAgICAgICAgICAgZXZlbnRJRDogdGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmV4dEV2ZW50TXNnID0gYXdhaXQgdGhpcy5zZW5kPElSZXNwb25zZU1lc3NhZ2VOZXh0RXZlbnRNc2c+KHtcbiAgICAgICAgICAgIG1zZzogcmVidWlsZFdhdGNoTXNnLFxuICAgICAgICAgICAgd2FpdFJlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgICAgc2tpcE9uTWVzc2FnZTogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiBERUZBVUxUX1JFQlVJTERfV0FUQ0hfVElNRU9VVCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJFdmVudHMobmV4dEV2ZW50TXNnKVxuXG4gICAgICAgICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLkFDVElWRVxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllcy5SRUJVSUxEX1dBVENIID0gREVGQVVMVF9NQVhfQVVUT19SRVRSWV9PTl9FUlJPUlxuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVXYXRjaEVzdGFibGlzaG1lbnRFcnJvcihlLCB7XG4gICAgICAgICAgICBvcGVyYXRpb25OYW1lOiAnUkVCVUlMRF9XQVRDSCcsXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pKClcbiAgICB9KVxuXG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVidWlsZFdhdGNoUHJvbWlzZVxuICAgICAgc3VjY2VzcyA9IHRydWVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZWJ1aWxkV2F0Y2hQcm9taXNlID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gcmVidWlsZFdhdGNoICR7c3VjY2VzcyA/ICdzdWNjZXNzJyA6ICdmYWlsJ31gKVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVXYXRjaEVzdGFibGlzaG1lbnRFcnJvciA9IGFzeW5jIChcbiAgICBlOiBhbnksXG4gICAgb3B0aW9uczogSUhhbmRsZVdhdGNoRXN0YWJsaXNobWVudEVycm9yT3B0aW9uc1xuICApID0+IHtcbiAgICBjb25zdCBpc0luaXRXYXRjaCA9IG9wdGlvbnMub3BlcmF0aW9uTmFtZSA9PT0gJ0lOSVRfV0FUQ0gnXG5cbiAgICBjb25zdCBhYm9ydFdhdGNoID0gKCkgPT4ge1xuICAgICAgLy8gbW9jayB0ZW1wIGNvbW1lbnRcbiAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICBlcnJDb2RlOiBpc0luaXRXYXRjaFxuICAgICAgICAgID8gKEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9JTklUX1dBVENIX0ZBSUwgYXMgc3RyaW5nKVxuICAgICAgICAgIDogKEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9SRUJVSUxEX1dBVENIX0ZBSUwgYXMgc3RyaW5nKSxcbiAgICAgICAgZXJyTXNnOiBlLFxuICAgICAgfSkpXG4gICAgICBvcHRpb25zLnJlamVjdChlKVxuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5ID0gKHJlZnJlc2hMb2dpbj86IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICh0aGlzLnVzZVJldHJ5VGlja2V0KG9wdGlvbnMub3BlcmF0aW9uTmFtZSkpIHtcbiAgICAgICAgaWYgKGlzSW5pdFdhdGNoKSB7XG4gICAgICAgICAgdGhpcy5pbml0V2F0Y2hQcm9taXNlID0gdW5kZWZpbmVkXG4gICAgICAgICAgb3B0aW9ucy5yZXNvbHZlKHRoaXMuaW5pdFdhdGNoKHJlZnJlc2hMb2dpbikpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZWJ1aWxkV2F0Y2hQcm9taXNlID0gdW5kZWZpbmVkXG4gICAgICAgICAgb3B0aW9ucy5yZXNvbHZlKHRoaXMucmVidWlsZFdhdGNoKHJlZnJlc2hMb2dpbikpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFib3J0V2F0Y2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlQ29tbW9uRXJyb3IoZSwge1xuICAgICAgb25TaWduRXJyb3I6ICgpID0+IHJldHJ5KHRydWUpLFxuICAgICAgb25UaW1lb3V0RXJyb3I6ICgpID0+IHJldHJ5KGZhbHNlKSxcbiAgICAgIG9uTm90UmV0cnlhYmxlRXJyb3I6IGFib3J0V2F0Y2gsXG4gICAgICBvbkNhbmNlbGxlZEVycm9yOiBvcHRpb25zLnJlamVjdCxcbiAgICAgIG9uVW5rbm93bkVycm9yOiAoKSA9PiB7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG9uV1NEaXNjb25uZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uY2VXU0Nvbm5lY3RlZCgpXG4gICAgICAgICAgICAgIHJldHJ5KHRydWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1dTQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgYXdhaXQgb25XU0Rpc2Nvbm5lY3RlZCgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUZBVUxUX1dBSVRfVElNRV9PTl9VTktOT1dOX0VSUk9SKVxuICAgICAgICAgICAgICBpZiAodGhpcy53YXRjaFN0YXR1cyA9PT0gV2F0Y2hTdGF0dXMuUEFVU0VEKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FuY2VsXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5yZWplY3QobmV3IENhbmNlbGxlZEVycm9yKGAke29wdGlvbnMub3BlcmF0aW9uTmFtZX0gY2FuY2VsbGVkIGR1ZSB0byBwYXVzZSBhZnRlciB1bmtub3duRXJyb3JgKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1dTQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBvbldTRGlzY29ubmVjdGVkKClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRyeShmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IsIGluIG9yZGVyIHRvIHByb3ZpZGUgbWF4aW11bSBlZmZvcnQgb24gU0VBTUlOR0xFU1MgRkFVTFQgVE9MRVJBTkNFLCBqdXN0IHJldHJ5XG4gICAgICAgICAgICByZXRyeSh0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVdhdGNoID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5SWQgPSB0aGlzLnNlc3Npb25JbmZvID8gdGhpcy5zZXNzaW9uSW5mby5xdWVyeUlEIDogJydcblxuICAgIGlmICh0aGlzLndhdGNoU3RhdHVzICE9PSBXYXRjaFN0YXR1cy5BQ1RJVkUpIHtcbiAgICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5DTE9TRURcbiAgICAgIHRoaXMub25XYXRjaENsb3NlKHRoaXMsIHF1ZXJ5SWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLkNMT1NJTkdcblxuICAgICAgY29uc3QgY2xvc2VXYXRjaE1zZzogSVJlcXVlc3RNZXNzYWdlQ2xvc2VXYXRjaE1zZyA9IHtcbiAgICAgICAgd2F0Y2hJZDogdGhpcy53YXRjaElkLFxuICAgICAgICByZXF1ZXN0SWQ6IGdlblJlcXVlc3RJZCgpLFxuICAgICAgICBtc2dUeXBlOiAnQ0xPU0VfV0FUQ0gnLFxuICAgICAgICBtc2dEYXRhOiBudWxsLFxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgICBtc2c6IGNsb3NlV2F0Y2hNc2csXG4gICAgICB9KVxuXG4gICAgICB0aGlzLnNlc3Npb25JbmZvID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuQ0xPU0VEXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9DTE9TRV9XQVRDSF9GQUlMIGFzIHN0cmluZyxcbiAgICAgICAgZXJyTXNnOiBlLFxuICAgICAgfSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMub25XYXRjaENsb3NlKHRoaXMsIHF1ZXJ5SWQpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVNlbmRBQ0sgPSAoKSA9PiB7XG4gICAgdGhpcy5jbGVhckFDS1NjaGVkdWxlKClcblxuICAgIC8vIFRPRE86IHNob3VsZCB3ZSBjaGVjayBzdGF0dXMgYWZ0ZXIgdGltZW91dFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmFja1RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMud2FpdEV4cGVjdGVkVGltZW91dElkKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVTZW5kQUNLKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VuZEFDSygpXG4gICAgICB9XG4gICAgfSwgREVGQVVMVF9TRU5EX0FDS19ERUJPVU5DRV9USU1FT1VUKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckFDS1NjaGVkdWxlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmFja1RpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYWNrVGltZW91dElkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VuZEFDSyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMud2F0Y2hTdGF0dXMgIT09IFdhdGNoU3RhdHVzLkFDVElWRSkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlU2VuZEFDSygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvbkluZm8pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGNhbiBub3Qgc2VuZCBhY2sgd2l0aG91dCBhIHN1Y2Nlc3NmdWwgaW5pdFdhdGNoIChsYWNrIG9mIHNlc3Npb25JbmZvKScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBhY2tNc2c6IElSZXF1ZXN0TWVzc2FnZUNoZWNrTGFzdE1zZyA9IHtcbiAgICAgICAgd2F0Y2hJZDogdGhpcy53YXRjaElkLFxuICAgICAgICByZXF1ZXN0SWQ6IGdlblJlcXVlc3RJZCgpLFxuICAgICAgICBtc2dUeXBlOiAnQ0hFQ0tfTEFTVCcsXG4gICAgICAgIG1zZ0RhdGE6IHtcbiAgICAgICAgICBxdWVyeUlEOiB0aGlzLnNlc3Npb25JbmZvLnF1ZXJ5SUQsXG4gICAgICAgICAgZXZlbnRJRDogdGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCxcbiAgICAgICAgfSxcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgICAgbXNnOiBhY2tNc2csXG4gICAgICB9KVxuXG4gICAgICB0aGlzLnNjaGVkdWxlU2VuZEFDSygpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gVE9ETzogcmVmYWN0b3JcbiAgICAgIGlmIChpc1JlYWx0aW1lRXJyb3JNZXNzYWdlRXJyb3IoZSkpIHtcbiAgICAgICAgY29uc3QgbXNnID0gZS5wYXlsb2FkXG4gICAgICAgIHN3aXRjaCAobXNnLm1zZ0RhdGEuY29kZSkge1xuICAgICAgICAgIC8vIHNpZ25hdHVyZSBlcnJvciAtPiByZXRyeSB3aXRoIHJlZnJlc2hlZCBzaWduYXR1cmVcbiAgICAgICAgICBjYXNlICdDSEVDS19MT0dJTl9GQUlMRUQnOlxuICAgICAgICAgIGNhc2UgJ1NJR05fRVhQSVJFRF9FUlJPUic6XG4gICAgICAgICAgY2FzZSAnU0lHTl9JTlZBTElEX0VSUk9SJzpcbiAgICAgICAgICBjYXNlICdTSUdOX1BBUkFNX0lOVkFMSUQnOiB7XG4gICAgICAgICAgICB0aGlzLnJlYnVpbGRXYXRjaCgpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gb3RoZXIgLT4gdGhyb3dcbiAgICAgICAgICBjYXNlICdRVUVSWUlEX0lOVkFMSURfRVJST1InOlxuICAgICAgICAgIGNhc2UgJ1NZU19FUlInOlxuICAgICAgICAgIGNhc2UgJ0lOVkFMSUlEX0VOVic6XG4gICAgICAgICAgY2FzZSAnQ09MTEVDVElPTl9QRVJNSVNTSU9OX0RFTklFRCc6IHtcbiAgICAgICAgICAgIC8vIG11c3QgdGhyb3dcbiAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfQ0hFQ0tfTEFTVF9GQUlMIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgZXJyTXNnOiBtc2cubXNnRGF0YS5jb2RlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gbWF5YmUgcmV0cnlhYmxlXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllcy5DSEVDS19MQVNUXG4gICAgICAgICYmIHRoaXMuYXZhaWxhYmxlUmV0cmllcy5DSEVDS19MQVNUID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllcy5DSEVDS19MQVNUIC09IDFcbiAgICAgICAgdGhpcy5zY2hlZHVsZVNlbmRBQ0soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX0NIRUNLX0xBU1RfRkFJTCBhcyBzdHJpbmcsXG4gICAgICAgICAgZXJyTXNnOiBlLFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbW1vbkVycm9yID0gKFxuICAgIGU6IGFueSxcbiAgICBvcHRpb25zOiBJSGFuZGxlQ29tbW9uRXJyb3JPcHRpb25zXG4gICk6IHZvaWQgPT4ge1xuICAgIGlmIChpc1JlYWx0aW1lRXJyb3JNZXNzYWdlRXJyb3IoZSkpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUucGF5bG9hZFxuICAgICAgc3dpdGNoIChtc2cubXNnRGF0YS5jb2RlKSB7XG4gICAgICAgIC8vIHNpZ25hdHVyZSBlcnJvciAtPiByZXRyeSB3aXRoIHJlZnJlc2hlZCBzaWduYXR1cmVcbiAgICAgICAgY2FzZSAnQ0hFQ0tfTE9HSU5fRkFJTEVEJzpcbiAgICAgICAgY2FzZSAnU0lHTl9FWFBJUkVEX0VSUk9SJzpcbiAgICAgICAgY2FzZSAnU0lHTl9JTlZBTElEX0VSUk9SJzpcbiAgICAgICAgY2FzZSAnU0lHTl9QQVJBTV9JTlZBTElEJzoge1xuICAgICAgICAgIG9wdGlvbnMub25TaWduRXJyb3IoZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBub3QtcmV0cnlhYmxlIGVycm9yIC0+IHRocm93XG4gICAgICAgIGNhc2UgJ1FVRVJZSURfSU5WQUxJRF9FUlJPUic6XG4gICAgICAgIGNhc2UgJ1NZU19FUlInOlxuICAgICAgICBjYXNlICdJTlZBTElJRF9FTlYnOlxuICAgICAgICBjYXNlICdDT0xMRUNUSU9OX1BFUk1JU1NJT05fREVOSUVEJzoge1xuICAgICAgICAgIG9wdGlvbnMub25Ob3RSZXRyeWFibGVFcnJvcihlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBvcHRpb25zLm9uTm90UmV0cnlhYmxlRXJyb3IoZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUaW1lb3V0RXJyb3IoZSkpIHtcbiAgICAgIC8vIHRpbWVvdXQgZXJyb3JcbiAgICAgIG9wdGlvbnMub25UaW1lb3V0RXJyb3IoZSlcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAoaXNDYW5jZWxsZWRFcnJvcihlKSkge1xuICAgICAgLy8gY2FuY2VsbGVkIGVycm9yXG4gICAgICBvcHRpb25zLm9uQ2FuY2VsbGVkRXJyb3IoZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHVua25vd24gZXJyb3JcbiAgICBvcHRpb25zLm9uVW5rbm93bkVycm9yKGUpXG4gIH1cblxuICAvLyBjcmVkaXQgYSByZXRyeSBjaGFuY2UgZnJvbSBhdmFpbGFibGVSZXRyaWVzXG4gIHByaXZhdGUgdXNlUmV0cnlUaWNrZXQob3BlcmF0aW9uTmFtZTogSVJlcXVlc3RNc2dUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5hdmFpbGFibGVSZXRyaWVzW29wZXJhdGlvbk5hbWVdXG4gICAgICAmJiB0aGlzLmF2YWlsYWJsZVJldHJpZXNbb3BlcmF0aW9uTmFtZV0hID4gMFxuICAgICkge1xuICAgICAgdGhpcy5hdmFpbGFibGVSZXRyaWVzW29wZXJhdGlvbk5hbWVdISAtPSAxXG4gICAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSAke29wZXJhdGlvbk5hbWV9IHVzZSBhIHJldHJ5IHRpY2tldCwgbm93IG9ubHkgJHt0aGlzLmF2YWlsYWJsZVJldHJpZXNbb3BlcmF0aW9uTmFtZV19IHJldHJ5IGxlZnRgKVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU2VydmVyRXZlbnRzKG1zZzogSVJlc3BvbnNlTWVzc2FnZUluaXRFdmVudE1zZyB8IElSZXNwb25zZU1lc3NhZ2VOZXh0RXZlbnRNc2cpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zY2hlZHVsZVNlbmRBQ0soKVxuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVTZXJ2ZXJFdmVudHNJbnRlcm5lbChtc2cpXG4gICAgICB0aGlzLnBvc3RIYW5kbGVTZXJ2ZXJFdmVudHNWYWxpZGl0eUNoZWNrKG1zZylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBUT0RPOiByZXBvcnRcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBlcnJvcjogaGFuZGxlIHNlcnZlciBldmVudHMgZmFpbGVkIHdpdGggZXJyb3I6ICcsXG4gICAgICAgIGVcbiAgICAgIClcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVNlcnZlckV2ZW50c0ludGVybmVsKG1zZzogSVJlc3BvbnNlTWVzc2FnZUluaXRFdmVudE1zZyB8IElSZXNwb25zZU1lc3NhZ2VOZXh0RXZlbnRNc2cpIHtcbiAgICBjb25zdCB7IHJlcXVlc3RJZCB9ID0gbXNnXG5cbiAgICBjb25zdCB7IGV2ZW50cyB9ID0gbXNnLm1zZ0RhdGFcbiAgICBjb25zdCB7IG1zZ1R5cGUgfSA9IG1zZ1xuXG4gICAgaWYgKCFldmVudHMubGVuZ3RoIHx8ICF0aGlzLnNlc3Npb25JbmZvKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB7IHNlc3Npb25JbmZvIH0gPSB0aGlzXG5cbiAgICBsZXQgYWxsQ2hhbmdlRXZlbnRzOiBJU2luZ2xlREJFdmVudFtdXG4gICAgdHJ5IHtcbiAgICAgIGFsbENoYW5nZUV2ZW50cyA9IGV2ZW50cy5tYXAoZ2V0UHVibGljRXZlbnQpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9SRUNFSVZFX0lOVkFMSURfU0VSVkVSX0RBVEEgYXMgc3RyaW5nLFxuICAgICAgICBlcnJNc2c6IGUsXG4gICAgICB9KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGFnZ3JlZ2F0ZSBkb2NzXG4gICAgbGV0IGRvY3MgPSBbLi4uc2Vzc2lvbkluZm8uY3VycmVudERvY3NdXG4gICAgbGV0IGluaXRFbmNvdW50ZXJlZCA9IGZhbHNlXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFsbENoYW5nZUV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgY2hhbmdlID0gYWxsQ2hhbmdlRXZlbnRzW2ldXG5cbiAgICAgIGlmIChzZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCA+PSBjaGFuZ2UuaWQpIHtcbiAgICAgICAgaWYgKCFhbGxDaGFuZ2VFdmVudHNbaSAtIDFdIHx8IGNoYW5nZS5pZCA+IGFsbENoYW5nZUV2ZW50c1tpIC0gMV0uaWQpIHtcbiAgICAgICAgICAvLyBkdXBsaWNhdGUgZXZlbnQsIGRyb3BhYmxlXG4gICAgICAgICAgLy8gVE9ETzogcmVwb3J0XG4gICAgICAgICAgLy8gaWYgKHByb2Nlc3MuZW52LkRFQlVHKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBbcmVhbHRpbWVdIGR1cGxpY2F0ZSBldmVudCByZWNlaXZlZCwgY3VyICR7c2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWR9IGJ1dCBnb3QgJHtjaGFuZ2UuaWR9YClcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWxsQ2hhbmdlRXZlbnRzIHNob3VsZCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIgYWNjb3JkaW5nIHRvIGV2ZW50SWQsIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbnMsIG11c3QgcmVwb3J0IGEgbm9uLWZhdGFsIGVycm9yXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW3JlYWx0aW1lIGxpc3RlbmVyXSBzZXJ2ZXIgbm9uLWZhdGFsIGVycm9yOiBldmVudHMgb3V0IG9mIG9yZGVyICh0aGUgbGF0dGVyIGV2ZW50J3MgaWQgaXMgc21hbGxlciB0aGFuIHRoYXQgb2YgdGhlIGZvcm1lcikgKHJlcXVlc3RJZCAke3JlcXVlc3RJZH0pYClcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmIChzZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCA9PT0gY2hhbmdlLmlkIC0gMSkge1xuICAgICAgICAvLyBjb3JyZWN0IHNlcXVlbmNlXG4gICAgICAgIC8vIGZpcnN0IGhhbmRsZSBkYXRhVHlwZSB0aGVuIHF1ZXVlVHlwZTpcbiAgICAgICAgLy8gMS4gZGF0YVR5cGU6IHdlIE9OTFkgcG9wdWxhdGUgY2hhbmdlLmRvYyBpZiBuZWNjZXNzYXJ5XG4gICAgICAgIC8vIDIuIHF1ZXVlVHlwZTogd2UgYnVpbGQgdGhlIGRhdGEgc25hcHNob3RcblxuICAgICAgICBzd2l0Y2ggKGNoYW5nZS5kYXRhVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6IHtcbiAgICAgICAgICAgIC8vIG9ubHkgbmVlZCB0byBwb3B1bGF0ZSBjaGFuZ2UuZG9jIHdoZW4gaXQgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAoIWNoYW5nZS5kb2MpIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChjaGFuZ2UucXVldWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkZXF1ZXVlJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYWxEb2MgPSBkb2NzLmZpbmQoZG9jID0+IGRvYy5faWQgPT09IGNoYW5nZS5kb2NJZClcbiAgICAgICAgICAgICAgICAgIGlmIChsb2NhbERvYykge1xuICAgICAgICAgICAgICAgICAgICAvLyBhIHBhcnRpYWwgdXBkYXRlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IGNsb25lRGVlcChsb2NhbERvYylcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlLnVwZGF0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjaGFuZ2UudXBkYXRlZEZpZWxkcykuZm9yRWFjaCgoZmllbGRQYXRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQoZG9jLCBmaWVsZFBhdGgsIGNoYW5nZS51cGRhdGVkRmllbGRzW2ZpZWxkUGF0aF0pXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2UucmVtb3ZlZEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRQYXRoIG9mIGNoYW5nZS5yZW1vdmVkRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bnNldChkb2MsIGZpZWxkUGF0aClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZG9jID0gZG9jXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIHJlcG9ydFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBzZXJ2ZXIgZXJyb3I6IHVuZXhwZWN0ZWQgdXBkYXRlIGRhdGFUeXBlIGV2ZW50IHdoZXJlIG5vIGRvYyBpcyBhc3NvY2lhdGVkLicpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdlbnF1ZXVlJzoge1xuICAgICAgICAgICAgICAgICAgLy8gZG9jIGlzIHByb3ZpZGVkIGJ5IHNlcnZlciwgdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX1VORVhQRUNURURfRkFUQUxfRVJST1IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBlcnJNc2c6IGBIYW5kbGVTZXJ2ZXJFdmVudHM6IGZ1bGwgZG9jIGlzIG5vdCBwcm92aWRlZCB3aXRoIGRhdGFUeXBlPVwidXBkYXRlXCIgYW5kIHF1ZXVlVHlwZT1cImVucXVldWVcIiAocmVxdWVzdElkICR7bXNnLnJlcXVlc3RJZH0pYCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncmVwbGFjZSc6IHtcbiAgICAgICAgICAgIC8vIHZhbGlkYXRpb25cbiAgICAgICAgICAgIGlmICghY2hhbmdlLmRvYykge1xuICAgICAgICAgICAgICAvLyBkb2MgaXMgcHJvdmlkZWQgYnkgc2VydmVyLCB0aGlzIHNob3VsZCBuZXZlciBvY2N1clxuICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgICAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX1VORVhQRUNURURfRkFUQUxfRVJST1IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIGVyck1zZzogYEhhbmRsZVNlcnZlckV2ZW50czogZnVsbCBkb2MgaXMgbm90IHByb3ZpZGVkIHdpdGggZGF0YVR5cGU9XCJyZXBsYWNlXCIgKHJlcXVlc3RJZCAke21zZy5yZXF1ZXN0SWR9KWAsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IoZXJyKVxuICAgICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3JlbW92ZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3MuZmluZChkb2MgPT4gZG9jLl9pZCA9PT0gY2hhbmdlLmRvY0lkKVxuICAgICAgICAgICAgaWYgKGRvYykge1xuICAgICAgICAgICAgICBjaGFuZ2UuZG9jID0gZG9jXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPIHJlcG9ydFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBzZXJ2ZXIgZXJyb3I6IHVuZXhwZWN0ZWQgcmVtb3ZlIGV2ZW50IHdoZXJlIG5vIGRvYyBpcyBhc3NvY2lhdGVkLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdsaW1pdCc6IHtcbiAgICAgICAgICAgIGlmICghY2hhbmdlLmRvYykge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGNoYW5nZS5xdWV1ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkZXF1ZXVlJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZG9jID0gZG9jcy5maW5kKGRvYyA9PiBkb2MuX2lkID09PSBjaGFuZ2UuZG9jSWQpXG4gICAgICAgICAgICAgICAgICBpZiAoZG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kb2MgPSBkb2NcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIHNlcnZlciBlcnJvcjogdW5leHBlY3RlZCBsaW1pdCBkYXRhVHlwZSBldmVudCB3aGVyZSBubyBkb2MgaXMgYXNzb2NpYXRlZC4nKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnZW5xdWV1ZSc6IHtcbiAgICAgICAgICAgICAgICAgIC8vIGRvYyBpcyBwcm92aWRlZCBieSBzZXJ2ZXIsIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyXG4gICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9VTkVYUEVDVEVEX0ZBVEFMX0VSUk9SIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnOiBgSGFuZGxlU2VydmVyRXZlbnRzOiBmdWxsIGRvYyBpcyBub3QgcHJvdmlkZWQgd2l0aCBkYXRhVHlwZT1cImxpbWl0XCIgYW5kIHF1ZXVlVHlwZT1cImVucXVldWVcIiAocmVxdWVzdElkICR7bXNnLnJlcXVlc3RJZH0pYCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGNoYW5nZS5xdWV1ZVR5cGUpIHtcbiAgICAgICAgICBjYXNlICdpbml0Jzoge1xuICAgICAgICAgICAgaWYgKCFpbml0RW5jb3VudGVyZWQpIHtcbiAgICAgICAgICAgICAgaW5pdEVuY291bnRlcmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBkb2NzID0gW2NoYW5nZS5kb2NdXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkb2NzLnB1c2goY2hhbmdlLmRvYylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ2VucXVldWUnOiB7XG4gICAgICAgICAgICBkb2NzLnB1c2goY2hhbmdlLmRvYylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ2RlcXVldWUnOiB7XG4gICAgICAgICAgICBjb25zdCBpbmQgPSBkb2NzLmZpbmRJbmRleChkb2MgPT4gZG9jLl9pZCA9PT0gY2hhbmdlLmRvY0lkKVxuICAgICAgICAgICAgaWYgKGluZCA+IC0xKSB7XG4gICAgICAgICAgICAgIGRvY3Muc3BsaWNlKGluZCwgMSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8gcmVwb3J0XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIHNlcnZlciBlcnJvcjogdW5leHBlY3RlZCBkZXF1ZXVlIGV2ZW50IHdoZXJlIG5vIGRvYyBpcyBhc3NvY2lhdGVkLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICd1cGRhdGUnOiB7XG4gICAgICAgICAgICBjb25zdCBpbmQgPSBkb2NzLmZpbmRJbmRleChkb2MgPT4gZG9jLl9pZCA9PT0gY2hhbmdlLmRvY0lkKVxuICAgICAgICAgICAgaWYgKGluZCA+IC0xKSB7XG4gICAgICAgICAgICAgIGRvY3NbaW5kXSA9IGNoYW5nZS5kb2NcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8gcmVwb3J0XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIHNlcnZlciBlcnJvcjogdW5leHBlY3RlZCBxdWV1ZVR5cGUgdXBkYXRlIGV2ZW50IHdoZXJlIG5vIGRvYyBpcyBhc3NvY2lhdGVkLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpID09PSBsZW4gLSAxXG4gICAgICAgICAgfHwgKGFsbENoYW5nZUV2ZW50c1tpICsgMV0gJiYgYWxsQ2hhbmdlRXZlbnRzW2kgKyAxXS5pZCAhPT0gY2hhbmdlLmlkKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBhIHNoYWxsb3cgc2xpY2UgY3JlYXRlcyBhIHNoYWxsb3cgc25hcHNob3RcbiAgICAgICAgICBjb25zdCBkb2NzU25hcHNob3QgPSBbLi4uZG9jc11cblxuICAgICAgICAgIC8vIHdlIHNsaWNlIGZpcnN0IGNhdXNlJyBpZiB0aGVyZSdyZSBhbGxDaGFuZ2VFdmVudHMgdGhhdCBhcmUgb2YgdGhlIHNhbWUgaWQgYWZ0ZXIgdGhpcyBjaGFuZ2UsIHdlIGRvbid0IHdhbnQgdG8gaW52b2x2ZSBpdCBmb3IgaXQgaXMgdW5leHBlY3RlZCBpbnZhbGlkIG9yZGVyXG4gICAgICAgICAgY29uc3QgZG9jQ2hhbmdlcyA9IGFsbENoYW5nZUV2ZW50c1xuICAgICAgICAgICAgLnNsaWNlKDAsIGkgKyAxKVxuICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaWQgPT09IGNoYW5nZS5pZClcblxuICAgICAgICAgIC8vIGFsbCBjaGFuZ2VzIG9mIHRoaXMgZXZlbnQgaGFzIGJlZW4gaGFuZGxlLCB3ZSBjb3VsZCBkaXNwYXRjaCB0aGUgZXZlbnQgbm93XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCA9IGNoYW5nZS5pZFxuICAgICAgICAgIHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudERvY3MgPSBkb2NzXG5cbiAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBTbmFwc2hvdCh7XG4gICAgICAgICAgICBpZDogY2hhbmdlLmlkLFxuICAgICAgICAgICAgZG9jQ2hhbmdlcyxcbiAgICAgICAgICAgIGRvY3M6IGRvY3NTbmFwc2hvdCxcbiAgICAgICAgICAgIG1zZ1R5cGUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRoaXMubGlzdGVuZXIub25DaGFuZ2Uoc25hcHNob3QpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG91dC1vZi1vcmRlciBldmVudFxuICAgICAgICAvLyBpZiAocHJvY2Vzcy5lbnYuREVCVUcpIHtcbiAgICAgICAgLy8gVE9ETzogcmVwb3J0XG4gICAgICAgIGNvbnNvbGUud2FybihgW3JlYWx0aW1lIGxpc3RlbmVyXSBldmVudCByZWNlaXZlZCBpcyBvdXQgb2Ygb3JkZXIsIGN1ciAke3RoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWR9IGJ1dCBnb3QgJHtjaGFuZ2UuaWR9YClcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyByZWJ1aWxkIHdhdGNoXG4gICAgICAgIGF3YWl0IHRoaXMucmVidWlsZFdhdGNoKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwb3N0SGFuZGxlU2VydmVyRXZlbnRzVmFsaWRpdHlDaGVjayhtc2c6IElSZXNwb25zZU1lc3NhZ2VJbml0RXZlbnRNc2cgfCBJUmVzcG9uc2VNZXNzYWdlTmV4dEV2ZW50TXNnKSB7XG4gICAgaWYgKCF0aGlzLnNlc3Npb25JbmZvKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBlcnJvcjogc2Vzc2lvbkluZm8gbG9zdCBhZnRlciBzZXJ2ZXIgZXZlbnQgaGFuZGxpbmcsIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm8uZXhwZWN0RXZlbnRJZFxuICAgICAgJiYgdGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCA+PSB0aGlzLnNlc3Npb25JbmZvLmV4cGVjdEV2ZW50SWRcbiAgICApIHtcbiAgICAgIHRoaXMuY2xlYXJXYWl0RXhwZWN0ZWRFdmVudCgpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQgPCBtc2cubXNnRGF0YS5jdXJyRXZlbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgZXJyb3I6IGNsaWVudCBldmVudElkIGRvZXMgbm90IG1hdGNoIHdpdGggc2VydmVyIGV2ZW50IGlkIGFmdGVyIHNlcnZlciBldmVudCBoYW5kbGluZycpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyV2FpdEV4cGVjdGVkRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMud2FpdEV4cGVjdGVkVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy53YWl0RXhwZWN0ZWRUaW1lb3V0SWQpXG4gICAgICB0aGlzLndhaXRFeHBlY3RlZFRpbWVvdXRJZCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQdWJsaWNFdmVudChldmVudDogSURCRXZlbnQpOiBJU2luZ2xlREJFdmVudCB7XG4gIGNvbnN0IGU6IElTaW5nbGVEQkV2ZW50ID0ge1xuICAgIGlkOiBldmVudC5JRCxcbiAgICBkYXRhVHlwZTogZXZlbnQuRGF0YVR5cGUsXG4gICAgcXVldWVUeXBlOiBldmVudC5RdWV1ZVR5cGUsXG4gICAgZG9jSWQ6IGV2ZW50LkRvY0lELFxuICAgIGRvYzogZXZlbnQuRG9jICYmIGV2ZW50LkRvYyAhPT0gJ3t9JyA/IEpTT04ucGFyc2UoZXZlbnQuRG9jKSA6IHVuZGVmaW5lZCxcbiAgfVxuXG4gIGlmIChldmVudC5EYXRhVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKGV2ZW50LlVwZGF0ZWRGaWVsZHMpIHtcbiAgICAgIGUudXBkYXRlZEZpZWxkcyA9IEpTT04ucGFyc2UoZXZlbnQuVXBkYXRlZEZpZWxkcylcbiAgICB9XG4gICAgLy8gVE9ETzogd2FpdCBmb3IgdGNiIHRvIGNoYW5nZSByZW1vdmVkRmllbGRzIHRvIFJlbW92ZWRGaWVsZHNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKGV2ZW50LnJlbW92ZWRGaWVsZHMgfHwgZXZlbnQuUmVtb3ZlZEZpZWxkcykge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgLy8gZS5yZW1vdmVkRmllbGRzID0gZXZlbnQucmVtb3ZlZEZpZWxkc1xuICAgICAgLy8gICA/IEpTT04ucGFyc2UoZXZlbnQucmVtb3ZlZEZpZWxkcylcbiAgICAgIC8vICAgOiBKU09OLnBhcnNlKGV2ZW50LlJlbW92ZWRGaWVsZHMpXG4gICAgICBlLnJlbW92ZWRGaWVsZHMgPSBKU09OLnBhcnNlKGV2ZW50LnJlbW92ZWRGaWVsZHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVcbn1cbiJdfQ==
|
|
952
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC13ZWJzb2NrZXQtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZpcnR1YWwtd2Vic29ja2V0LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNoQyxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBZ0J4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYixjQUFjLEVBQ2QsY0FBYyxFQUNkLGdCQUFnQixFQUNoQiwyQkFBMkIsR0FHNUIsTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQXlDL0IsSUFBSyxXQVVKO0FBVkQsV0FBSyxXQUFXO0lBQ2Qsc0NBQXVCLENBQUE7SUFDdkIsa0NBQW1CLENBQUE7SUFDbkIsd0NBQXlCLENBQUE7SUFDekIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7SUFDbkIsa0NBQW1CLENBQUE7SUFDbkIsZ0NBQWlCLENBQUE7SUFDakIsZ0NBQWlCLENBQUE7SUFDakIsb0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVZJLFdBQVcsS0FBWCxXQUFXLFFBVWY7QUFFRCxJQUFNLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQTtBQUM5QyxJQUFNLCtCQUErQixHQUFHLENBQUMsQ0FBQTtBQUN6QyxJQUFNLHdDQUF3QyxHQUFHLENBQUMsQ0FBQTtBQUNsRCxJQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FB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QkFBcUIsQ0FBQyxDQUFBO1lBQ3hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUE7U0FDdkM7SUFDSCxDQUFDO0lBQ0gsNkJBQUM7QUFBRCxDQUFDLEFBOTJCRCxJQTgyQkM7O0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBZTtJQUNyQyxJQUFNLENBQUMsR0FBbUI7UUFDeEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ1osUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3pFLENBQUE7SUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBRS9CLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUN2QixDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1NBQ2xEO1FBR0QsSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFLOUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUNsRDtLQUNGO0lBRUQsT0FBTyxDQUFDLENBQUE7QUFDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNldCBmcm9tICdsb2Rhc2guc2V0J1xuaW1wb3J0IHVuc2V0IGZyb20gJ2xvZGFzaC51bnNldCdcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCdcbmltcG9ydCB7IGdlblJlcXVlc3RJZCB9IGZyb20gJy4vbWVzc2FnZSdcbmltcG9ydCB7XG4gIElSZXNwb25zZU1lc3NhZ2UsXG4gIElSZXF1ZXN0TWVzc2FnZUluaXRXYXRjaE1zZyxcbiAgSVJlc3BvbnNlTWVzc2FnZUluaXRFdmVudE1zZyxcbiAgSURCRXZlbnQsXG4gIElSZXF1ZXN0TWVzc2FnZVJlYnVpbGRXYXRjaE1zZyxcbiAgSVJlcXVlc3RNZXNzYWdlQ2xvc2VXYXRjaE1zZyxcbiAgSVJlcXVlc3RNc2dUeXBlLFxuICBJUmVzcG9uc2VNZXNzYWdlTmV4dEV2ZW50TXNnLFxuICBJUmVxdWVzdE1lc3NhZ2VDaGVja0xhc3RNc2csXG4gIElXYXRjaE9wdGlvbnMsXG59IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvcmVhbHRpbWUnXG5pbXBvcnQge1xuICBJU2luZ2xlREJFdmVudCxcbn0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9kYXRhYmFzZSdcbmltcG9ydCB7IFJlYWx0aW1lTGlzdGVuZXIgfSBmcm9tICcuL2xpc3RlbmVyJ1xuaW1wb3J0IHsgU25hcHNob3QgfSBmcm9tICcuL3NuYXBzaG90J1xuaW1wb3J0IHsgSVdTU2VuZE9wdGlvbnMsIElMb2dpblJlc3VsdCB9IGZyb20gJy4vd2Vic29ja2V0LWNsaWVudCdcbmltcG9ydCB7XG4gIEVSUl9DT0RFLFxuICBDbG91ZFNES0Vycm9yLFxuICBpc1RpbWVvdXRFcnJvcixcbiAgQ2FuY2VsbGVkRXJyb3IsXG4gIGlzQ2FuY2VsbGVkRXJyb3IsXG4gIGlzUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcixcbiAgUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcixcbiAgVGltZW91dEVycm9yLFxufSBmcm9tICcuL2Vycm9yJ1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJ1xuXG4vLyA9PT09PT09PT09PT09PT0gUmVhbHRpbWUgVmlydHVhbCBXZWJTb2NrZXQgQ2xpZW50IChJbnRlcm5hbCkgPT09PT09PT09PT09PT09PT09PT1cblxuaW50ZXJmYWNlIElWaXJ0dWFsV2ViU29ja2V0Q2xpZW50Q29uc3RydWN0b3JPcHRpb25zIGV4dGVuZHMgSVdhdGNoT3B0aW9ucyB7XG4gIGVudklkPzogc3RyaW5nXG4gIGNvbGxlY3Rpb25OYW1lOiBzdHJpbmdcbiAgcXVlcnk6IHN0cmluZ1xuICBsaW1pdD86IG51bWJlclxuICBvcmRlckJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBzZW5kOiA8VCA9IGFueT4ob3B0czogSVdTU2VuZE9wdGlvbnMpID0+IFByb21pc2U8VD5cbiAgbG9naW46IChlbnZJZD86IHN0cmluZywgcmVmcmVzaD86IGJvb2xlYW4pID0+IFByb21pc2U8YW55PlxuICBpc1dTQ29ubmVjdGVkOiAoKSA9PiBib29sZWFuXG4gIG9uY2VXU0Nvbm5lY3RlZDogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICBnZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoOiAoKSA9PiBudW1iZXJcbiAgb25XYXRjaFN0YXJ0OiAoY2xpZW50OiBWaXJ0dWFsV2ViU29ja2V0Q2xpZW50LCBxdWVyeUlEOiBzdHJpbmcpID0+IHZvaWRcbiAgb25XYXRjaENsb3NlOiAoY2xpZW50OiBWaXJ0dWFsV2ViU29ja2V0Q2xpZW50LCBxdWVyeUlEOiBzdHJpbmcpID0+IHZvaWRcbiAgZGVidWc/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBJV2F0Y2hTZXNzaW9uSW5mbyB7XG4gIHF1ZXJ5SUQ6IHN0cmluZ1xuICBjdXJyZW50RXZlbnRJZDogbnVtYmVyXG4gIGN1cnJlbnREb2NzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W11cbiAgZXhwZWN0RXZlbnRJZD86IG51bWJlclxufVxuXG5pbnRlcmZhY2UgSUhhbmRsZUNvbW1vbkVycm9yT3B0aW9ucyB7XG4gIG9uU2lnbkVycm9yOiAoZTogUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcikgPT4gdm9pZFxuICBvblRpbWVvdXRFcnJvcjogKGU6IFRpbWVvdXRFcnJvcikgPT4gdm9pZFxuICBvbkNhbmNlbGxlZEVycm9yOiAoZTogQ2FuY2VsbGVkRXJyb3IpID0+IHZvaWRcbiAgb25Ob3RSZXRyeWFibGVFcnJvcjogKGU6IFJlYWx0aW1lRXJyb3JNZXNzYWdlRXJyb3IpID0+IHZvaWRcbiAgb25Vbmtub3duRXJyb3I6IChlOiBhbnkpID0+IHZvaWRcbn1cblxuaW50ZXJmYWNlIElIYW5kbGVXYXRjaEVzdGFibGlzaG1lbnRFcnJvck9wdGlvbnMge1xuICBvcGVyYXRpb25OYW1lOiAnSU5JVF9XQVRDSCcgfCAnUkVCVUlMRF9XQVRDSCdcbiAgcmVzb2x2ZTogKHZhbHVlPzogUHJvbWlzZUxpa2U8dm9pZD4gfCB1bmRlZmluZWQpID0+IHZvaWRcbiAgcmVqZWN0OiAoZTogYW55KSA9PiB2b2lkXG59XG5cbmVudW0gV2F0Y2hTdGF0dXMge1xuICBMT0dHSU5HSU4gPSAnTE9HR0lOR0lOJyxcbiAgSU5JVElORyA9ICdJTklUSU5HJyxcbiAgUkVCVUlMRElORyA9ICdSRUJVSUxESU5HJyxcbiAgQUNUSVZFID0gJ0FDVElWRScsXG4gIEVSUk9SRUQgPSAnRVJST1JFRCcsXG4gIENMT1NJTkcgPSAnQ0xPU0lORycsXG4gIENMT1NFRCA9ICdDTE9TRUQnLFxuICBQQVVTRUQgPSAnUEFVU0VEJyxcbiAgUkVTVU1JTkcgPSAnUkVTVU1JTkcnXG59XG5cbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FX09OX1VOS05PV05fRVJST1IgPSAxMDBcbmNvbnN0IERFRkFVTFRfTUFYX0FVVE9fUkVUUllfT05fRVJST1IgPSAyXG5jb25zdCBERUZBVUxUX01BWF9TRU5EX0FDS19BVVRPX1JFVFJZX09OX0VSUk9SID0gMlxuY29uc3QgREVGQVVMVF9TRU5EX0FDS19ERUJPVU5DRV9USU1FT1VUID0gMTAgKiAxMDAwXG5jb25zdCBERUZBVUxUX0lOSVRfV0FUQ0hfVElNRU9VVCA9IDEwICogMTAwMFxuY29uc3QgREVGQVVMVF9SRUJVSUxEX1dBVENIX1RJTUVPVVQgPSAxMCAqIDEwMDBcblxuZXhwb3J0IGNsYXNzIFZpcnR1YWxXZWJTb2NrZXRDbGllbnQge1xuICAvLyBwYXNzZWQgb3ZlclxuICB3YXRjaElkOiBzdHJpbmdcbiAgLy8gb3duXG4gIGxpc3RlbmVyOiBSZWFsdGltZUxpc3RlbmVyXG4gIHByaXZhdGUgZW52SWQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uTmFtZTogc3RyaW5nXG4gIHByaXZhdGUgcXVlcnk6IHN0cmluZ1xuICBwcml2YXRlIGxpbWl0OiBudW1iZXJcbiAgcHJpdmF0ZSBvcmRlckJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIHByaXZhdGUgc2VuZDogPFQgPSBhbnk+KG9wdHM6IElXU1NlbmRPcHRpb25zKSA9PiBQcm9taXNlPFQ+XG4gIHByaXZhdGUgbG9naW46IChlbnZJZD86IHN0cmluZywgcmVmcmVzaD86IGJvb2xlYW4pID0+IFByb21pc2U8YW55PlxuICBwcml2YXRlIGlzV1NDb25uZWN0ZWQ6ICgpID0+IGJvb2xlYW5cbiAgcHJpdmF0ZSBvbmNlV1NDb25uZWN0ZWQ6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgcHJpdmF0ZSBnZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoOiAoKSA9PiBudW1iZXJcbiAgcHJpdmF0ZSBvbldhdGNoU3RhcnQ6IChcbiAgICBjbGllbnQ6IFZpcnR1YWxXZWJTb2NrZXRDbGllbnQsXG4gICAgcXVlcnlJRDogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBwcml2YXRlIG9uV2F0Y2hDbG9zZTogKFxuICAgIGNsaWVudDogVmlydHVhbFdlYlNvY2tldENsaWVudCxcbiAgICBxdWVyeUlEOiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIHByaXZhdGUgZGVidWc/OiBib29sZWFuXG5cbiAgcHJpdmF0ZSB3YXRjaFN0YXR1czogV2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5JTklUSU5HXG4gIHByaXZhdGUgYXZhaWxhYmxlUmV0cmllczogUGFydGlhbDxSZWNvcmQ8SVJlcXVlc3RNc2dUeXBlLCBudW1iZXI+PlxuICBwcml2YXRlIGFja1RpbWVvdXRJZD86IG51bWJlclxuICBwcml2YXRlIGluaXRXYXRjaFByb21pc2U/OiBQcm9taXNlPHZvaWQ+XG4gIHByaXZhdGUgcmVidWlsZFdhdGNoUHJvbWlzZT86IFByb21pc2U8dm9pZD5cblxuICAvLyBvYnRhaW5lZFxuICBwcml2YXRlIHNlc3Npb25JbmZvPzogSVdhdGNoU2Vzc2lvbkluZm9cblxuICAvLyBpbnRlcm5hbFxuICBwcml2YXRlIHdhaXRFeHBlY3RlZFRpbWVvdXRJZD86IG51bWJlclxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElWaXJ0dWFsV2ViU29ja2V0Q2xpZW50Q29uc3RydWN0b3JPcHRpb25zKSB7XG4gICAgdGhpcy53YXRjaElkID0gYHdhdGNoaWRfJHsrbmV3IERhdGUoKX1fJHtNYXRoLnJhbmRvbSgpfWBcbiAgICB0aGlzLmVudklkID0gb3B0aW9ucy5lbnZJZFxuICAgIHRoaXMuY29sbGVjdGlvbk5hbWUgPSBvcHRpb25zLmNvbGxlY3Rpb25OYW1lXG4gICAgdGhpcy5xdWVyeSA9IG9wdGlvbnMucXVlcnlcbiAgICB0aGlzLmxpbWl0ID0gb3B0aW9ucy5saW1pdFxuICAgIHRoaXMub3JkZXJCeSA9IG9wdGlvbnMub3JkZXJCeVxuICAgIHRoaXMuc2VuZCA9IG9wdGlvbnMuc2VuZFxuICAgIHRoaXMubG9naW4gPSBvcHRpb25zLmxvZ2luXG4gICAgdGhpcy5pc1dTQ29ubmVjdGVkID0gb3B0aW9ucy5pc1dTQ29ubmVjdGVkXG4gICAgdGhpcy5vbmNlV1NDb25uZWN0ZWQgPSBvcHRpb25zLm9uY2VXU0Nvbm5lY3RlZFxuICAgIHRoaXMuZ2V0V2FpdEV4cGVjdGVkVGltZW91dExlbmd0aCA9IG9wdGlvbnMuZ2V0V2FpdEV4cGVjdGVkVGltZW91dExlbmd0aFxuICAgIHRoaXMub25XYXRjaFN0YXJ0ID0gb3B0aW9ucy5vbldhdGNoU3RhcnRcbiAgICB0aGlzLm9uV2F0Y2hDbG9zZSA9IG9wdGlvbnMub25XYXRjaENsb3NlXG4gICAgdGhpcy5kZWJ1ZyA9IG9wdGlvbnMuZGVidWdcblxuICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllcyA9IHtcbiAgICAgIElOSVRfV0FUQ0g6IERFRkFVTFRfTUFYX0FVVE9fUkVUUllfT05fRVJST1IsXG4gICAgICBSRUJVSUxEX1dBVENIOiBERUZBVUxUX01BWF9BVVRPX1JFVFJZX09OX0VSUk9SLFxuICAgICAgQ0hFQ0tfTEFTVDogREVGQVVMVF9NQVhfU0VORF9BQ0tfQVVUT19SRVRSWV9PTl9FUlJPUixcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbmVyID0gbmV3IFJlYWx0aW1lTGlzdGVuZXIoe1xuICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZVdhdGNoKClcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZTogb3B0aW9ucy5vbkNoYW5nZSxcbiAgICAgIG9uRXJyb3I6IG9wdGlvbnMub25FcnJvcixcbiAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxuICAgICAgdmlydHVhbENsaWVudDogdGhpcyxcbiAgICB9KVxuXG4gICAgdGhpcy5pbml0V2F0Y2goKVxuICB9XG5cbiAgb25NZXNzYWdlKG1zZzogSVJlc3BvbnNlTWVzc2FnZSkge1xuICAgIC8vIHdhdGNoU3RhdHVzIHNhbml0eSBjaGVja1xuICAgIHN3aXRjaCAodGhpcy53YXRjaFN0YXR1cykge1xuICAgICAgY2FzZSBXYXRjaFN0YXR1cy5QQVVTRUQ6IHtcbiAgICAgICAgLy8gaWdub3JlIGFsbCBidXQgZXJyb3IgbWVzc2FnZVxuICAgICAgICBpZiAobXNnLm1zZ1R5cGUgIT09ICdFUlJPUicpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBXYXRjaFN0YXR1cy5MT0dHSU5HSU46XG4gICAgICBjYXNlIFdhdGNoU3RhdHVzLklOSVRJTkc6XG4gICAgICBjYXNlIFdhdGNoU3RhdHVzLlJFQlVJTERJTkc6IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBlcnJvcjogdW5leHBlY3RlZCBtZXNzYWdlIHJlY2VpdmVkIHdoaWxlICR7dGhpcy53YXRjaFN0YXR1c31gKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhc2UgV2F0Y2hTdGF0dXMuQ0xPU0VEOiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgZXJyb3I6IHVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCB3aGVuIHRoZSB3YXRjaCBoYXMgY2xvc2VkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjYXNlIFdhdGNoU3RhdHVzLkVSUk9SRUQ6IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBlcnJvcjogdW5leHBlY3RlZCBtZXNzYWdlIHJlY2VpdmVkIHdoZW4gdGhlIHdhdGNoIGhhcyBlbmRlZCB3aXRoIGVycm9yJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25JbmZvKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIGVycm9yOiBzZXNzaW9uSW5mbyBub3QgZm91bmQgd2hpbGUgbWVzc2FnZSBpcyByZWNlaXZlZC4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zY2hlZHVsZVNlbmRBQ0soKVxuXG4gICAgc3dpdGNoIChtc2cubXNnVHlwZSkge1xuICAgICAgY2FzZSAnTkVYVF9FVkVOVCc6IHtcbiAgICAgICAgLy8gaWYgKHByb2Nlc3MuZW52LkRFQlVHKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgLy8gaWYgKHd4Ll9pZ25vcmUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBuZXh0ZXZlbnQgJHttc2cubXNnRGF0YS5jdXJyRXZlbnR9IGlnbm9yZWRgLCBtc2cpXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgLy8gd3guX2lnbm9yZSA9IGZhbHNlXG4gICAgICAgIC8vIHJldHVyblxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIH1cblxuICAgICAgICB0aGlzLmhhbmRsZVNlcnZlckV2ZW50cyhtc2cpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdDSEVDS19FVkVOVCc6IHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQgPCBtc2cubXNnRGF0YS5jdXJyRXZlbnQpIHtcbiAgICAgICAgICAvLyBjbGllbnQgZXZlbnRJRCA8IHNlcnZlciBldmVudElEOlxuICAgICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG9uZSBvciBtb3JlIHBlbmRpbmcgZXZlbnRzIG5vdCB5ZXQgcmVjZWl2ZWQgYnV0IHNlbnQgYnkgdGhlIHNlcnZlclxuICAgICAgICAgIHRoaXMuc2Vzc2lvbkluZm8uZXhwZWN0RXZlbnRJZCA9IG1zZy5tc2dEYXRhLmN1cnJFdmVudFxuICAgICAgICAgIHRoaXMuY2xlYXJXYWl0RXhwZWN0ZWRFdmVudCgpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHRoaXMud2FpdEV4cGVjdGVkVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBtdXN0IHJlYnVpbGQgd2F0Y2hcbiAgICAgICAgICAgIHRoaXMucmVidWlsZFdhdGNoKClcbiAgICAgICAgICB9LCB0aGlzLmdldFdhaXRFeHBlY3RlZFRpbWVvdXRMZW5ndGgoKSlcblxuICAgICAgICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdIHdhaXRFeHBlY3RlZFRpbWVvdXRMZW5ndGggJHt0aGlzLmdldFdhaXRFeHBlY3RlZFRpbWVvdXRMZW5ndGgoKX1gKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdFUlJPUic6IHtcbiAgICAgICAgLy8gcmVjZWl2ZSBzZXJ2ZXIgZXJyb3JcbiAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX1NFUlZFUl9FUlJPUl9NU0cgYXMgc3RyaW5nLFxuICAgICAgICAgIGVyck1zZzogYCR7bXNnLm1zZ0RhdGEuY29kZX0gLSAke21zZy5tc2dEYXRhLm1lc3NhZ2V9YCxcbiAgICAgICAgfSkpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW3JlYWx0aW1lIGxpc3RlbmVyXSB2aXJ0dWFsIGNsaWVudCByZWNlaXZlIHVuZXhwZWN0ZWQgbXNnICR7bXNnLm1zZ1R5cGV9OiBgLFxuICAgICAgICAgIG1zZ1xuICAgICAgICApXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xvc2VXaXRoRXJyb3IoZXJyb3I6IGFueSkge1xuICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5FUlJPUkVEXG4gICAgdGhpcy5jbGVhckFDS1NjaGVkdWxlKClcbiAgICB0aGlzLmxpc3RlbmVyLm9uRXJyb3IoZXJyb3IpXG4gICAgdGhpcy5vbldhdGNoQ2xvc2UoXG4gICAgICB0aGlzLFxuICAgICAgKHRoaXMuc2Vzc2lvbkluZm8/LnF1ZXJ5SUQpIHx8ICcnXG4gICAgKVxuXG4gICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gY2xpZW50IGNsb3NlZCAoJHt0aGlzLmNvbGxlY3Rpb25OYW1lfSAke3RoaXMucXVlcnl9KSAod2F0Y2hJZCAke3RoaXMud2F0Y2hJZH0pYClcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5QQVVTRURcbiAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSBjbGllbnQgcGF1c2VkICgke3RoaXMuY29sbGVjdGlvbk5hbWV9ICR7dGhpcy5xdWVyeX0pICh3YXRjaElkICR7dGhpcy53YXRjaElkfSlgKVxuICB9XG5cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLlJFU1VNSU5HXG5cbiAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSBjbGllbnQgcmVzdW1pbmcgd2l0aCAke1xuICAgICAgdGhpcy5zZXNzaW9uSW5mbyA/ICdSRUJVSUxEX1dBVENIJyA6ICdJTklUX1dBVENIJ1xuICAgIH0gKCR7dGhpcy5jb2xsZWN0aW9uTmFtZX0gJHt0aGlzLnF1ZXJ5fSkgKCR7dGhpcy53YXRjaElkfSlgKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0ICh0aGlzLnNlc3Npb25JbmZvID8gdGhpcy5yZWJ1aWxkV2F0Y2goKSA6IHRoaXMuaW5pdFdhdGNoKCkpXG5cbiAgICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdIGNsaWVudCBzdWNjZXNzZnVsbHkgcmVzdW1lZCAoJHt0aGlzLmNvbGxlY3Rpb25OYW1lfSAke3RoaXMucXVlcnl9KSAoJHt0aGlzLndhdGNoSWR9KWApXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFtyZWFsdGltZV0gY2xpZW50IHJlc3VtZSBmYWlsZWQgKCR7dGhpcy5jb2xsZWN0aW9uTmFtZX0gJHt0aGlzLnF1ZXJ5fSkgKCR7dGhpcy53YXRjaElkfSlgLFxuICAgICAgICBlXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3c0xvZ2luID0gYXN5bmMgKFxuICAgIGVudklkPzogc3RyaW5nLFxuICAgIHJlZnJlc2g/OiBib29sZWFuXG4gICk6IFByb21pc2U8SUxvZ2luUmVzdWx0PiA9PiB7XG4gICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLkxPR0dJTkdJTlxuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gYXdhaXQgdGhpcy5sb2dpbihlbnZJZCwgcmVmcmVzaClcbiAgICBpZiAoIXRoaXMuZW52SWQpIHtcbiAgICAgIHRoaXMuZW52SWQgPSBsb2dpblJlc3VsdC5lbnZJZFxuICAgIH1cbiAgICByZXR1cm4gbG9naW5SZXN1bHRcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFdhdGNoID0gYXN5bmMgKGZvcmNlUmVmcmVzaExvZ2luPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICh0aGlzLmluaXRXYXRjaFByb21pc2UgIT09IG51bGwgJiYgdGhpcy5pbml0V2F0Y2hQcm9taXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRXYXRjaFByb21pc2VcbiAgICB9XG5cbiAgICB0aGlzLmluaXRXYXRjaFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRoaXMud2F0Y2hTdGF0dXMgPT09IFdhdGNoU3RhdHVzLlBBVVNFRCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tyZWFsdGltZV0gaW5pdFdhdGNoIGNhbmNlbGxlZCBvbiBwYXVzZScpXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBlbnZJZCB9ID0gYXdhaXQgdGhpcy53c0xvZ2luKHRoaXMuZW52SWQsIGZvcmNlUmVmcmVzaExvZ2luKVxuICAgICAgICAgIGlmICgodGhpcy53YXRjaFN0YXR1cyBhcyBXYXRjaFN0YXR1cykgPT09IFdhdGNoU3RhdHVzLlBBVVNFRCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tyZWFsdGltZV0gaW5pdFdhdGNoIGNhbmNlbGxlZCBvbiBwYXVzZScpXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLklOSVRJTkdcblxuICAgICAgICAgIGNvbnN0IGluaXRXYXRjaE1zZzogSVJlcXVlc3RNZXNzYWdlSW5pdFdhdGNoTXNnID0ge1xuICAgICAgICAgICAgd2F0Y2hJZDogdGhpcy53YXRjaElkLFxuICAgICAgICAgICAgcmVxdWVzdElkOiBnZW5SZXF1ZXN0SWQoKSxcbiAgICAgICAgICAgIG1zZ1R5cGU6ICdJTklUX1dBVENIJyxcbiAgICAgICAgICAgIG1zZ0RhdGE6IHtcbiAgICAgICAgICAgICAgZW52SWQsXG4gICAgICAgICAgICAgIGNvbGxOYW1lOiB0aGlzLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyeSxcbiAgICAgICAgICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICAgICAgICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaW5pdEV2ZW50TXNnID0gYXdhaXQgdGhpcy5zZW5kPElSZXNwb25zZU1lc3NhZ2VJbml0RXZlbnRNc2c+KHtcbiAgICAgICAgICAgIG1zZzogaW5pdFdhdGNoTXNnLFxuICAgICAgICAgICAgd2FpdFJlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgICAgc2tpcE9uTWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IERFRkFVTFRfSU5JVF9XQVRDSF9USU1FT1VULFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB7IGV2ZW50cywgY3VyckV2ZW50IH0gPSBpbml0RXZlbnRNc2cubXNnRGF0YVxuXG4gICAgICAgICAgdGhpcy5zZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgICAgIHF1ZXJ5SUQ6IGluaXRFdmVudE1zZy5tc2dEYXRhLnF1ZXJ5SUQsXG4gICAgICAgICAgICBjdXJyZW50RXZlbnRJZDogY3VyckV2ZW50IC0gMSxcbiAgICAgICAgICAgIGN1cnJlbnREb2NzOiBbXSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGSVg6IGluIGluaXRFdmVudCBtZXNzYWdlLCBhbGwgZXZlbnRzIGhhdmUgaWQgMCwgd2hpY2ggaXMgaW5jb25zaXN0ZW50IHdpdGggY3VyckV2ZW50XG4gICAgICAgICAgaWYgKGV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGUuSUQgPSBjdXJyRXZlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VydmVyRXZlbnRzKGluaXRFdmVudE1zZylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCA9IGN1cnJFdmVudFxuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBuZXcgU25hcHNob3Qoe1xuICAgICAgICAgICAgICBpZDogY3VyckV2ZW50LFxuICAgICAgICAgICAgICBkb2NDaGFuZ2VzOiBbXSxcbiAgICAgICAgICAgICAgZG9jczogW10sXG4gICAgICAgICAgICAgIHR5cGU6ICdpbml0JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLm9uQ2hhbmdlKHNuYXBzaG90KVxuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVNlbmRBQ0soKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uV2F0Y2hTdGFydCh0aGlzLCB0aGlzLnNlc3Npb25JbmZvLnF1ZXJ5SUQpXG4gICAgICAgICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLkFDVElWRVxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllcy5JTklUX1dBVENIID0gREVGQVVMVF9NQVhfQVVUT19SRVRSWV9PTl9FUlJPUlxuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVXYXRjaEVzdGFibGlzaG1lbnRFcnJvcihlLCB7XG4gICAgICAgICAgICBvcGVyYXRpb25OYW1lOiAnSU5JVF9XQVRDSCcsXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pKClcbiAgICB9KVxuXG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFdhdGNoUHJvbWlzZVxuICAgICAgc3VjY2VzcyA9IHRydWVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pbml0V2F0Y2hQcm9taXNlID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdIGluaXRXYXRjaCAke3N1Y2Nlc3MgPyAnc3VjY2VzcycgOiAnZmFpbCd9YClcbiAgfVxuXG4gIHByaXZhdGUgcmVidWlsZFdhdGNoID0gYXN5bmMgKGZvcmNlUmVmcmVzaExvZ2luPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICh0aGlzLnJlYnVpbGRXYXRjaFByb21pc2UgIT09IG51bGwgJiYgdGhpcy5yZWJ1aWxkV2F0Y2hQcm9taXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYnVpbGRXYXRjaFByb21pc2VcbiAgICB9XG5cbiAgICB0aGlzLnJlYnVpbGRXYXRjaFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRoaXMud2F0Y2hTdGF0dXMgPT09IFdhdGNoU3RhdHVzLlBBVVNFRCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tyZWFsdGltZV0gcmVidWlsZFdhdGNoIGNhbmNlbGxlZCBvbiBwYXVzZScpXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgZW52SWQgfSA9IGF3YWl0IHRoaXMud3NMb2dpbih0aGlzLmVudklkLCBmb3JjZVJlZnJlc2hMb2dpbilcblxuICAgICAgICAgIGlmICghdGhpcy5zZXNzaW9uSW5mbykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW4gbm90IHJlYnVpbGRXYXRjaCB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBpbml0V2F0Y2ggKGxhY2sgb2Ygc2Vzc2lvbkluZm8pJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKHRoaXMud2F0Y2hTdGF0dXMgYXMgV2F0Y2hTdGF0dXMpID09PSBXYXRjaFN0YXR1cy5QQVVTRUQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbcmVhbHRpbWVdIHJlYnVpbGRXYXRjaCBjYW5jZWxsZWQgb24gcGF1c2UnKVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5SRUJVSUxESU5HXG5cbiAgICAgICAgICBjb25zdCByZWJ1aWxkV2F0Y2hNc2c6IElSZXF1ZXN0TWVzc2FnZVJlYnVpbGRXYXRjaE1zZyA9IHtcbiAgICAgICAgICAgIHdhdGNoSWQ6IHRoaXMud2F0Y2hJZCxcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZ2VuUmVxdWVzdElkKCksXG4gICAgICAgICAgICBtc2dUeXBlOiAnUkVCVUlMRF9XQVRDSCcsXG4gICAgICAgICAgICBtc2dEYXRhOiB7XG4gICAgICAgICAgICAgIGVudklkLFxuICAgICAgICAgICAgICBjb2xsTmFtZTogdGhpcy5jb2xsZWN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgcXVlcnlJRDogdGhpcy5zZXNzaW9uSW5mby5xdWVyeUlELFxuICAgICAgICAgICAgICBldmVudElEOiB0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBuZXh0RXZlbnRNc2cgPSBhd2FpdCB0aGlzLnNlbmQ8SVJlc3BvbnNlTWVzc2FnZU5leHRFdmVudE1zZz4oe1xuICAgICAgICAgICAgbXNnOiByZWJ1aWxkV2F0Y2hNc2csXG4gICAgICAgICAgICB3YWl0UmVzcG9uc2U6IHRydWUsXG4gICAgICAgICAgICBza2lwT25NZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IERFRkFVTFRfUkVCVUlMRF9XQVRDSF9USU1FT1VULFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aGlzLmhhbmRsZVNlcnZlckV2ZW50cyhuZXh0RXZlbnRNc2cpXG5cbiAgICAgICAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuQUNUSVZFXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVSZXRyaWVzLlJFQlVJTERfV0FUQ0ggPSBERUZBVUxUX01BWF9BVVRPX1JFVFJZX09OX0VSUk9SXG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVdhdGNoRXN0YWJsaXNobWVudEVycm9yKGUsIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbk5hbWU6ICdSRUJVSUxEX1dBVENIJyxcbiAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSkoKVxuICAgIH0pXG5cbiAgICBsZXQgc3VjY2VzcyA9IGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZWJ1aWxkV2F0Y2hQcm9taXNlXG4gICAgICBzdWNjZXNzID0gdHJ1ZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlYnVpbGRXYXRjaFByb21pc2UgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSByZWJ1aWxkV2F0Y2ggJHtzdWNjZXNzID8gJ3N1Y2Nlc3MnIDogJ2ZhaWwnfWApXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVdhdGNoRXN0YWJsaXNobWVudEVycm9yID0gYXN5bmMgKFxuICAgIGU6IGFueSxcbiAgICBvcHRpb25zOiBJSGFuZGxlV2F0Y2hFc3RhYmxpc2htZW50RXJyb3JPcHRpb25zXG4gICkgPT4ge1xuICAgIGNvbnN0IGlzSW5pdFdhdGNoID0gb3B0aW9ucy5vcGVyYXRpb25OYW1lID09PSAnSU5JVF9XQVRDSCdcblxuICAgIGNvbnN0IGFib3J0V2F0Y2ggPSAoKSA9PiB7XG4gICAgICAvLyBtb2NrIHRlbXAgY29tbWVudFxuICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgIGVyckNvZGU6IGlzSW5pdFdhdGNoXG4gICAgICAgICAgPyAoRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX0lOSVRfV0FUQ0hfRkFJTCBhcyBzdHJpbmcpXG4gICAgICAgICAgOiAoRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX1JFQlVJTERfV0FUQ0hfRkFJTCBhcyBzdHJpbmcpLFxuICAgICAgICBlcnJNc2c6IGUsXG4gICAgICB9KSlcbiAgICAgIG9wdGlvbnMucmVqZWN0KGUpXG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnkgPSAocmVmcmVzaExvZ2luPzogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKHRoaXMudXNlUmV0cnlUaWNrZXQob3B0aW9ucy5vcGVyYXRpb25OYW1lKSkge1xuICAgICAgICBpZiAoaXNJbml0V2F0Y2gpIHtcbiAgICAgICAgICB0aGlzLmluaXRXYXRjaFByb21pc2UgPSB1bmRlZmluZWRcbiAgICAgICAgICBvcHRpb25zLnJlc29sdmUodGhpcy5pbml0V2F0Y2gocmVmcmVzaExvZ2luKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlYnVpbGRXYXRjaFByb21pc2UgPSB1bmRlZmluZWRcbiAgICAgICAgICBvcHRpb25zLnJlc29sdmUodGhpcy5yZWJ1aWxkV2F0Y2gocmVmcmVzaExvZ2luKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWJvcnRXYXRjaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVDb21tb25FcnJvcihlLCB7XG4gICAgICBvblNpZ25FcnJvcjogKCkgPT4gcmV0cnkodHJ1ZSksXG4gICAgICBvblRpbWVvdXRFcnJvcjogKCkgPT4gcmV0cnkoZmFsc2UpLFxuICAgICAgb25Ob3RSZXRyeWFibGVFcnJvcjogYWJvcnRXYXRjaCxcbiAgICAgIG9uQ2FuY2VsbGVkRXJyb3I6IG9wdGlvbnMucmVqZWN0LFxuICAgICAgb25Vbmtub3duRXJyb3I6ICgpID0+IHtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgb25XU0Rpc2Nvbm5lY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMub25jZVdTQ29ubmVjdGVkKClcbiAgICAgICAgICAgICAgcmV0cnkodHJ1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzV1NDb25uZWN0ZWQoKSkge1xuICAgICAgICAgICAgICBhd2FpdCBvbldTRGlzY29ubmVjdGVkKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFRkFVTFRfV0FJVF9USU1FX09OX1VOS05PV05fRVJST1IpXG4gICAgICAgICAgICAgIGlmICh0aGlzLndhdGNoU3RhdHVzID09PSBXYXRjaFN0YXR1cy5QQVVTRUQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5jZWxcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoYCR7b3B0aW9ucy5vcGVyYXRpb25OYW1lfSBjYW5jZWxsZWQgZHVlIHRvIHBhdXNlIGFmdGVyIHVua25vd25FcnJvcmApKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzV1NDb25uZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG9uV1NEaXNjb25uZWN0ZWQoKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHJ5KGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gdW5leHBlY3RlZCBlcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvciwgaW4gb3JkZXIgdG8gcHJvdmlkZSBtYXhpbXVtIGVmZm9ydCBvbiBTRUFNSU5HTEVTUyBGQVVMVCBUT0xFUkFOQ0UsIGp1c3QgcmV0cnlcbiAgICAgICAgICAgIHJldHJ5KHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9KSgpXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGNsb3NlV2F0Y2ggPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVlcnlJZCA9IHRoaXMuc2Vzc2lvbkluZm8gPyB0aGlzLnNlc3Npb25JbmZvLnF1ZXJ5SUQgOiAnJ1xuXG4gICAgaWYgKHRoaXMud2F0Y2hTdGF0dXMgIT09IFdhdGNoU3RhdHVzLkFDVElWRSkge1xuICAgICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLkNMT1NFRFxuICAgICAgdGhpcy5vbldhdGNoQ2xvc2UodGhpcywgcXVlcnlJZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuQ0xPU0lOR1xuXG4gICAgICBjb25zdCBjbG9zZVdhdGNoTXNnOiBJUmVxdWVzdE1lc3NhZ2VDbG9zZVdhdGNoTXNnID0ge1xuICAgICAgICB3YXRjaElkOiB0aGlzLndhdGNoSWQsXG4gICAgICAgIHJlcXVlc3RJZDogZ2VuUmVxdWVzdElkKCksXG4gICAgICAgIG1zZ1R5cGU6ICdDTE9TRV9XQVRDSCcsXG4gICAgICAgIG1zZ0RhdGE6IG51bGwsXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICAgIG1zZzogY2xvc2VXYXRjaE1zZyxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuc2Vzc2lvbkluZm8gPSB1bmRlZmluZWRcbiAgICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5DTE9TRURcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX0NMT1NFX1dBVENIX0ZBSUwgYXMgc3RyaW5nLFxuICAgICAgICBlcnJNc2c6IGUsXG4gICAgICB9KSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5vbldhdGNoQ2xvc2UodGhpcywgcXVlcnlJZClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlU2VuZEFDSyA9ICgpID0+IHtcbiAgICB0aGlzLmNsZWFyQUNLU2NoZWR1bGUoKVxuXG4gICAgLy8gVE9ETzogc2hvdWxkIHdlIGNoZWNrIHN0YXR1cyBhZnRlciB0aW1lb3V0XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuYWNrVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy53YWl0RXhwZWN0ZWRUaW1lb3V0SWQpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVNlbmRBQ0soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZW5kQUNLKClcbiAgICAgIH1cbiAgICB9LCBERUZBVUxUX1NFTkRfQUNLX0RFQk9VTkNFX1RJTUVPVVQpXG4gIH1cblxuICBwcml2YXRlIGNsZWFyQUNLU2NoZWR1bGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuYWNrVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5hY2tUaW1lb3V0SWQpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZW5kQUNLID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy53YXRjaFN0YXR1cyAhPT0gV2F0Y2hTdGF0dXMuQUNUSVZFKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVTZW5kQUNLKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zZXNzaW9uSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tyZWFsdGltZSBsaXN0ZW5lcl0gY2FuIG5vdCBzZW5kIGFjayB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBpbml0V2F0Y2ggKGxhY2sgb2Ygc2Vzc2lvbkluZm8pJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFja01zZzogSVJlcXVlc3RNZXNzYWdlQ2hlY2tMYXN0TXNnID0ge1xuICAgICAgICB3YXRjaElkOiB0aGlzLndhdGNoSWQsXG4gICAgICAgIHJlcXVlc3RJZDogZ2VuUmVxdWVzdElkKCksXG4gICAgICAgIG1zZ1R5cGU6ICdDSEVDS19MQVNUJyxcbiAgICAgICAgbXNnRGF0YToge1xuICAgICAgICAgIHF1ZXJ5SUQ6IHRoaXMuc2Vzc2lvbkluZm8ucXVlcnlJRCxcbiAgICAgICAgICBldmVudElEOiB0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkLFxuICAgICAgICB9LFxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgICBtc2c6IGFja01zZyxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuc2NoZWR1bGVTZW5kQUNLKClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBUT0RPOiByZWZhY3RvclxuICAgICAgaWYgKGlzUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcihlKSkge1xuICAgICAgICBjb25zdCBtc2cgPSBlLnBheWxvYWRcbiAgICAgICAgc3dpdGNoIChtc2cubXNnRGF0YS5jb2RlKSB7XG4gICAgICAgICAgLy8gc2lnbmF0dXJlIGVycm9yIC0+IHJldHJ5IHdpdGggcmVmcmVzaGVkIHNpZ25hdHVyZVxuICAgICAgICAgIGNhc2UgJ0NIRUNLX0xPR0lOX0ZBSUxFRCc6XG4gICAgICAgICAgY2FzZSAnU0lHTl9FWFBJUkVEX0VSUk9SJzpcbiAgICAgICAgICBjYXNlICdTSUdOX0lOVkFMSURfRVJST1InOlxuICAgICAgICAgIGNhc2UgJ1NJR05fUEFSQU1fSU5WQUxJRCc6IHtcbiAgICAgICAgICAgIHRoaXMucmVidWlsZFdhdGNoKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBvdGhlciAtPiB0aHJvd1xuICAgICAgICAgIGNhc2UgJ1FVRVJZSURfSU5WQUxJRF9FUlJPUic6XG4gICAgICAgICAgY2FzZSAnU1lTX0VSUic6XG4gICAgICAgICAgY2FzZSAnSU5WQUxJSURfRU5WJzpcbiAgICAgICAgICBjYXNlICdDT0xMRUNUSU9OX1BFUk1JU1NJT05fREVOSUVEJzoge1xuICAgICAgICAgICAgLy8gbXVzdCB0aHJvd1xuICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9DSEVDS19MQVNUX0ZBSUwgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBlcnJNc2c6IG1zZy5tc2dEYXRhLmNvZGUsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBtYXliZSByZXRyeWFibGVcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hdmFpbGFibGVSZXRyaWVzLkNIRUNLX0xBU1RcbiAgICAgICAgJiYgdGhpcy5hdmFpbGFibGVSZXRyaWVzLkNIRUNLX0xBU1QgPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVSZXRyaWVzLkNIRUNLX0xBU1QgLT0gMVxuICAgICAgICB0aGlzLnNjaGVkdWxlU2VuZEFDSygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfQ0hFQ0tfTEFTVF9GQUlMIGFzIHN0cmluZyxcbiAgICAgICAgICBlcnJNc2c6IGUsXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29tbW9uRXJyb3IgPSAoXG4gICAgZTogYW55LFxuICAgIG9wdGlvbnM6IElIYW5kbGVDb21tb25FcnJvck9wdGlvbnNcbiAgKTogdm9pZCA9PiB7XG4gICAgaWYgKGlzUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcihlKSkge1xuICAgICAgY29uc3QgbXNnID0gZS5wYXlsb2FkXG4gICAgICBzd2l0Y2ggKG1zZy5tc2dEYXRhLmNvZGUpIHtcbiAgICAgICAgLy8gc2lnbmF0dXJlIGVycm9yIC0+IHJldHJ5IHdpdGggcmVmcmVzaGVkIHNpZ25hdHVyZVxuICAgICAgICBjYXNlICdDSEVDS19MT0dJTl9GQUlMRUQnOlxuICAgICAgICBjYXNlICdTSUdOX0VYUElSRURfRVJST1InOlxuICAgICAgICBjYXNlICdTSUdOX0lOVkFMSURfRVJST1InOlxuICAgICAgICBjYXNlICdTSUdOX1BBUkFNX0lOVkFMSUQnOiB7XG4gICAgICAgICAgb3B0aW9ucy5vblNpZ25FcnJvcihlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIG5vdC1yZXRyeWFibGUgZXJyb3IgLT4gdGhyb3dcbiAgICAgICAgY2FzZSAnUVVFUllJRF9JTlZBTElEX0VSUk9SJzpcbiAgICAgICAgY2FzZSAnU1lTX0VSUic6XG4gICAgICAgIGNhc2UgJ0lOVkFMSUlEX0VOVic6XG4gICAgICAgIGNhc2UgJ0NPTExFQ1RJT05fUEVSTUlTU0lPTl9ERU5JRUQnOiB7XG4gICAgICAgICAgb3B0aW9ucy5vbk5vdFJldHJ5YWJsZUVycm9yKGUpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIG9wdGlvbnMub25Ob3RSZXRyeWFibGVFcnJvcihlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RpbWVvdXRFcnJvcihlKSkge1xuICAgICAgLy8gdGltZW91dCBlcnJvclxuICAgICAgb3B0aW9ucy5vblRpbWVvdXRFcnJvcihlKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmIChpc0NhbmNlbGxlZEVycm9yKGUpKSB7XG4gICAgICAvLyBjYW5jZWxsZWQgZXJyb3JcbiAgICAgIG9wdGlvbnMub25DYW5jZWxsZWRFcnJvcihlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gdW5rbm93biBlcnJvclxuICAgIG9wdGlvbnMub25Vbmtub3duRXJyb3IoZSlcbiAgfVxuXG4gIC8vIGNyZWRpdCBhIHJldHJ5IGNoYW5jZSBmcm9tIGF2YWlsYWJsZVJldHJpZXNcbiAgcHJpdmF0ZSB1c2VSZXRyeVRpY2tldChvcGVyYXRpb25OYW1lOiBJUmVxdWVzdE1zZ1R5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmF2YWlsYWJsZVJldHJpZXNbb3BlcmF0aW9uTmFtZV1cbiAgICAgICYmIHRoaXMuYXZhaWxhYmxlUmV0cmllc1tvcGVyYXRpb25OYW1lXSEgPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVJldHJpZXNbb3BlcmF0aW9uTmFtZV0hIC09IDFcbiAgICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdICR7b3BlcmF0aW9uTmFtZX0gdXNlIGEgcmV0cnkgdGlja2V0LCBub3cgb25seSAke3RoaXMuYXZhaWxhYmxlUmV0cmllc1tvcGVyYXRpb25OYW1lXX0gcmV0cnkgbGVmdGApXG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXJ2ZXJFdmVudHMobXNnOiBJUmVzcG9uc2VNZXNzYWdlSW5pdEV2ZW50TXNnIHwgSVJlc3BvbnNlTWVzc2FnZU5leHRFdmVudE1zZykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNjaGVkdWxlU2VuZEFDSygpXG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVNlcnZlckV2ZW50c0ludGVybmVsKG1zZylcbiAgICAgIHRoaXMucG9zdEhhbmRsZVNlcnZlckV2ZW50c1ZhbGlkaXR5Q2hlY2sobXNnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFRPRE86IHJlcG9ydFxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIGVycm9yOiBoYW5kbGUgc2VydmVyIGV2ZW50cyBmYWlsZWQgd2l0aCBlcnJvcjogJyxcbiAgICAgICAgZVxuICAgICAgKVxuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU2VydmVyRXZlbnRzSW50ZXJuZWwobXNnOiBJUmVzcG9uc2VNZXNzYWdlSW5pdEV2ZW50TXNnIHwgSVJlc3BvbnNlTWVzc2FnZU5leHRFdmVudE1zZykge1xuICAgIGNvbnN0IHsgcmVxdWVzdElkIH0gPSBtc2dcblxuICAgIGNvbnN0IHsgZXZlbnRzIH0gPSBtc2cubXNnRGF0YVxuICAgIGNvbnN0IHsgbXNnVHlwZSB9ID0gbXNnXG5cbiAgICBpZiAoIWV2ZW50cy5sZW5ndGggfHwgIXRoaXMuc2Vzc2lvbkluZm8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgc2Vzc2lvbkluZm8gfSA9IHRoaXNcblxuICAgIGxldCBhbGxDaGFuZ2VFdmVudHM6IElTaW5nbGVEQkV2ZW50W11cbiAgICB0cnkge1xuICAgICAgYWxsQ2hhbmdlRXZlbnRzID0gZXZlbnRzLm1hcChnZXRQdWJsaWNFdmVudClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX1JFQ0VJVkVfSU5WQUxJRF9TRVJWRVJfREFUQSBhcyBzdHJpbmcsXG4gICAgICAgIGVyck1zZzogZSxcbiAgICAgIH0pKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gYWdncmVnYXRlIGRvY3NcbiAgICBsZXQgZG9jcyA9IFsuLi5zZXNzaW9uSW5mby5jdXJyZW50RG9jc11cbiAgICBsZXQgaW5pdEVuY291bnRlcmVkID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYWxsQ2hhbmdlRXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBhbGxDaGFuZ2VFdmVudHNbaV1cblxuICAgICAgaWYgKHNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkID49IGNoYW5nZS5pZCkge1xuICAgICAgICBpZiAoIWFsbENoYW5nZUV2ZW50c1tpIC0gMV0gfHwgY2hhbmdlLmlkID4gYWxsQ2hhbmdlRXZlbnRzW2kgLSAxXS5pZCkge1xuICAgICAgICAgIC8vIGR1cGxpY2F0ZSBldmVudCwgZHJvcGFibGVcbiAgICAgICAgICAvLyBUT0RPOiByZXBvcnRcbiAgICAgICAgICAvLyBpZiAocHJvY2Vzcy5lbnYuREVCVUcpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtyZWFsdGltZV0gZHVwbGljYXRlIGV2ZW50IHJlY2VpdmVkLCBjdXIgJHtzZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZH0gYnV0IGdvdCAke2NoYW5nZS5pZH1gKVxuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhbGxDaGFuZ2VFdmVudHMgc2hvdWxkIGJlIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8gZXZlbnRJZCwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVucywgbXVzdCByZXBvcnQgYSBub24tZmF0YWwgZXJyb3JcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbcmVhbHRpbWUgbGlzdGVuZXJdIHNlcnZlciBub24tZmF0YWwgZXJyb3I6IGV2ZW50cyBvdXQgb2Ygb3JkZXIgKHRoZSBsYXR0ZXIgZXZlbnQncyBpZCBpcyBzbWFsbGVyIHRoYW4gdGhhdCBvZiB0aGUgZm9ybWVyKSAocmVxdWVzdElkICR7cmVxdWVzdElkfSlgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkID09PSBjaGFuZ2UuaWQgLSAxKSB7XG4gICAgICAgIC8vIGNvcnJlY3Qgc2VxdWVuY2VcbiAgICAgICAgLy8gZmlyc3QgaGFuZGxlIGRhdGFUeXBlIHRoZW4gcXVldWVUeXBlOlxuICAgICAgICAvLyAxLiBkYXRhVHlwZTogd2UgT05MWSBwb3B1bGF0ZSBjaGFuZ2UuZG9jIGlmIG5lY2Nlc3NhcnlcbiAgICAgICAgLy8gMi4gcXVldWVUeXBlOiB3ZSBidWlsZCB0aGUgZGF0YSBzbmFwc2hvdFxuXG4gICAgICAgIHN3aXRjaCAoY2hhbmdlLmRhdGFUeXBlKSB7XG4gICAgICAgICAgY2FzZSAndXBkYXRlJzoge1xuICAgICAgICAgICAgLy8gb25seSBuZWVkIHRvIHBvcHVsYXRlIGNoYW5nZS5kb2Mgd2hlbiBpdCBpcyBub3QgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmICghY2hhbmdlLmRvYykge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGNoYW5nZS5xdWV1ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1cGRhdGUnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2RlcXVldWUnOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbERvYyA9IGRvY3MuZmluZChkb2MgPT4gZG9jLl9pZCA9PT0gY2hhbmdlLmRvY0lkKVxuICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsRG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGEgcGFydGlhbCB1cGRhdGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9jID0gY2xvbmVEZWVwKGxvY2FsRG9jKVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2UudXBkYXRlZEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZS51cGRhdGVkRmllbGRzKS5mb3JFYWNoKChmaWVsZFBhdGgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldChkb2MsIGZpZWxkUGF0aCwgY2hhbmdlLnVwZGF0ZWRGaWVsZHNbZmllbGRQYXRoXSlcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZS5yZW1vdmVkRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFBhdGggb2YgY2hhbmdlLnJlbW92ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KGRvYywgZmllbGRQYXRoKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kb2MgPSBkb2NcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gcmVwb3J0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIHNlcnZlciBlcnJvcjogdW5leHBlY3RlZCB1cGRhdGUgZGF0YVR5cGUgZXZlbnQgd2hlcmUgbm8gZG9jIGlzIGFzc29jaWF0ZWQuJylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2VucXVldWUnOiB7XG4gICAgICAgICAgICAgICAgICAvLyBkb2MgaXMgcHJvdmlkZWQgYnkgc2VydmVyLCB0aGlzIHNob3VsZCBuZXZlciBvY2N1clxuICAgICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfVU5FWFBFQ1RFRF9GQVRBTF9FUlJPUiBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZzogYEhhbmRsZVNlcnZlckV2ZW50czogZnVsbCBkb2MgaXMgbm90IHByb3ZpZGVkIHdpdGggZGF0YVR5cGU9XCJ1cGRhdGVcIiBhbmQgcXVldWVUeXBlPVwiZW5xdWV1ZVwiIChyZXF1ZXN0SWQgJHttc2cucmVxdWVzdElkfSlgLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdyZXBsYWNlJzoge1xuICAgICAgICAgICAgLy8gdmFsaWRhdGlvblxuICAgICAgICAgICAgaWYgKCFjaGFuZ2UuZG9jKSB7XG4gICAgICAgICAgICAgIC8vIGRvYyBpcyBwcm92aWRlZCBieSBzZXJ2ZXIsIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyXG4gICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfVU5FWFBFQ1RFRF9GQVRBTF9FUlJPUiBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgZXJyTXNnOiBgSGFuZGxlU2VydmVyRXZlbnRzOiBmdWxsIGRvYyBpcyBub3QgcHJvdmlkZWQgd2l0aCBkYXRhVHlwZT1cInJlcGxhY2VcIiAocmVxdWVzdElkICR7bXNnLnJlcXVlc3RJZH0pYCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihlcnIpXG4gICAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncmVtb3ZlJzoge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gZG9jcy5maW5kKGRvYyA9PiBkb2MuX2lkID09PSBjaGFuZ2UuZG9jSWQpXG4gICAgICAgICAgICBpZiAoZG9jKSB7XG4gICAgICAgICAgICAgIGNoYW5nZS5kb2MgPSBkb2NcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8gcmVwb3J0XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIHNlcnZlciBlcnJvcjogdW5leHBlY3RlZCByZW1vdmUgZXZlbnQgd2hlcmUgbm8gZG9jIGlzIGFzc29jaWF0ZWQuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ2xpbWl0Jzoge1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UuZG9jKSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoY2hhbmdlLnF1ZXVlVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RlcXVldWUnOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBkb2NzLmZpbmQoZG9jID0+IGRvYy5faWQgPT09IGNoYW5nZS5kb2NJZClcbiAgICAgICAgICAgICAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlLmRvYyA9IGRvY1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgc2VydmVyIGVycm9yOiB1bmV4cGVjdGVkIGxpbWl0IGRhdGFUeXBlIGV2ZW50IHdoZXJlIG5vIGRvYyBpcyBhc3NvY2lhdGVkLicpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdlbnF1ZXVlJzoge1xuICAgICAgICAgICAgICAgICAgLy8gZG9jIGlzIHByb3ZpZGVkIGJ5IHNlcnZlciwgdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX1VORVhQRUNURURfRkFUQUxfRVJST1IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBlcnJNc2c6IGBIYW5kbGVTZXJ2ZXJFdmVudHM6IGZ1bGwgZG9jIGlzIG5vdCBwcm92aWRlZCB3aXRoIGRhdGFUeXBlPVwibGltaXRcIiBhbmQgcXVldWVUeXBlPVwiZW5xdWV1ZVwiIChyZXF1ZXN0SWQgJHttc2cucmVxdWVzdElkfSlgLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoY2hhbmdlLnF1ZXVlVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2luaXQnOiB7XG4gICAgICAgICAgICBpZiAoIWluaXRFbmNvdW50ZXJlZCkge1xuICAgICAgICAgICAgICBpbml0RW5jb3VudGVyZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGRvY3MgPSBbY2hhbmdlLmRvY11cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRvY3MucHVzaChjaGFuZ2UuZG9jKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnZW5xdWV1ZSc6IHtcbiAgICAgICAgICAgIGRvY3MucHVzaChjaGFuZ2UuZG9jKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnZGVxdWV1ZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGluZCA9IGRvY3MuZmluZEluZGV4KGRvYyA9PiBkb2MuX2lkID09PSBjaGFuZ2UuZG9jSWQpXG4gICAgICAgICAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgICAgICAgICAgZG9jcy5zcGxpY2UoaW5kLCAxKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVE9ETyByZXBvcnRcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgc2VydmVyIGVycm9yOiB1bmV4cGVjdGVkIGRlcXVldWUgZXZlbnQgd2hlcmUgbm8gZG9jIGlzIGFzc29jaWF0ZWQuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGluZCA9IGRvY3MuZmluZEluZGV4KGRvYyA9PiBkb2MuX2lkID09PSBjaGFuZ2UuZG9jSWQpXG4gICAgICAgICAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgICAgICAgICAgZG9jc1tpbmRdID0gY2hhbmdlLmRvY1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVE9ETyByZXBvcnRcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgc2VydmVyIGVycm9yOiB1bmV4cGVjdGVkIHF1ZXVlVHlwZSB1cGRhdGUgZXZlbnQgd2hlcmUgbm8gZG9jIGlzIGFzc29jaWF0ZWQuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGkgPT09IGxlbiAtIDFcbiAgICAgICAgICB8fCAoYWxsQ2hhbmdlRXZlbnRzW2kgKyAxXSAmJiBhbGxDaGFuZ2VFdmVudHNbaSArIDFdLmlkICE9PSBjaGFuZ2UuaWQpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGEgc2hhbGxvdyBzbGljZSBjcmVhdGVzIGEgc2hhbGxvdyBzbmFwc2hvdFxuICAgICAgICAgIGNvbnN0IGRvY3NTbmFwc2hvdCA9IFsuLi5kb2NzXVxuXG4gICAgICAgICAgLy8gd2Ugc2xpY2UgZmlyc3QgY2F1c2UnIGlmIHRoZXJlJ3JlIGFsbENoYW5nZUV2ZW50cyB0aGF0IGFyZSBvZiB0aGUgc2FtZSBpZCBhZnRlciB0aGlzIGNoYW5nZSwgd2UgZG9uJ3Qgd2FudCB0byBpbnZvbHZlIGl0IGZvciBpdCBpcyB1bmV4cGVjdGVkIGludmFsaWQgb3JkZXJcbiAgICAgICAgICBjb25zdCBkb2NDaGFuZ2VzID0gYWxsQ2hhbmdlRXZlbnRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgaSArIDEpXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5pZCA9PT0gY2hhbmdlLmlkKVxuXG4gICAgICAgICAgLy8gYWxsIGNoYW5nZXMgb2YgdGhpcyBldmVudCBoYXMgYmVlbiBoYW5kbGUsIHdlIGNvdWxkIGRpc3BhdGNoIHRoZSBldmVudCBub3dcbiAgICAgICAgICB0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkID0gY2hhbmdlLmlkXG4gICAgICAgICAgdGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RG9jcyA9IGRvY3NcblxuICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IFNuYXBzaG90KHtcbiAgICAgICAgICAgIGlkOiBjaGFuZ2UuaWQsXG4gICAgICAgICAgICBkb2NDaGFuZ2VzLFxuICAgICAgICAgICAgZG9jczogZG9jc1NuYXBzaG90LFxuICAgICAgICAgICAgbXNnVHlwZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgdGhpcy5saXN0ZW5lci5vbkNoYW5nZShzbmFwc2hvdClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3V0LW9mLW9yZGVyIGV2ZW50XG4gICAgICAgIC8vIGlmIChwcm9jZXNzLmVudi5ERUJVRykge1xuICAgICAgICAvLyBUT0RPOiByZXBvcnRcbiAgICAgICAgY29uc29sZS53YXJuKGBbcmVhbHRpbWUgbGlzdGVuZXJdIGV2ZW50IHJlY2VpdmVkIGlzIG91dCBvZiBvcmRlciwgY3VyICR7dGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZH0gYnV0IGdvdCAke2NoYW5nZS5pZH1gKVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHJlYnVpbGQgd2F0Y2hcbiAgICAgICAgYXdhaXQgdGhpcy5yZWJ1aWxkV2F0Y2goKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc3RIYW5kbGVTZXJ2ZXJFdmVudHNWYWxpZGl0eUNoZWNrKG1zZzogSVJlc3BvbnNlTWVzc2FnZUluaXRFdmVudE1zZyB8IElSZXNwb25zZU1lc3NhZ2VOZXh0RXZlbnRNc2cpIHtcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbkluZm8pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIGVycm9yOiBzZXNzaW9uSW5mbyBsb3N0IGFmdGVyIHNlcnZlciBldmVudCBoYW5kbGluZywgdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXInKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zZXNzaW9uSW5mby5leHBlY3RFdmVudElkXG4gICAgICAmJiB0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkID49IHRoaXMuc2Vzc2lvbkluZm8uZXhwZWN0RXZlbnRJZFxuICAgICkge1xuICAgICAgdGhpcy5jbGVhcldhaXRFeHBlY3RlZEV2ZW50KClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCA8IG1zZy5tc2dEYXRhLmN1cnJFdmVudCkge1xuICAgICAgY29uc29sZS53YXJuKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBlcnJvcjogY2xpZW50IGV2ZW50SWQgZG9lcyBub3QgbWF0Y2ggd2l0aCBzZXJ2ZXIgZXZlbnQgaWQgYWZ0ZXIgc2VydmVyIGV2ZW50IGhhbmRsaW5nJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJXYWl0RXhwZWN0ZWRFdmVudCgpIHtcbiAgICBpZiAodGhpcy53YWl0RXhwZWN0ZWRUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLndhaXRFeHBlY3RlZFRpbWVvdXRJZClcbiAgICAgIHRoaXMud2FpdEV4cGVjdGVkVGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFB1YmxpY0V2ZW50KGV2ZW50OiBJREJFdmVudCk6IElTaW5nbGVEQkV2ZW50IHtcbiAgY29uc3QgZTogSVNpbmdsZURCRXZlbnQgPSB7XG4gICAgaWQ6IGV2ZW50LklELFxuICAgIGRhdGFUeXBlOiBldmVudC5EYXRhVHlwZSxcbiAgICBxdWV1ZVR5cGU6IGV2ZW50LlF1ZXVlVHlwZSxcbiAgICBkb2NJZDogZXZlbnQuRG9jSUQsXG4gICAgZG9jOiBldmVudC5Eb2MgJiYgZXZlbnQuRG9jICE9PSAne30nID8gSlNPTi5wYXJzZShldmVudC5Eb2MpIDogdW5kZWZpbmVkLFxuICB9XG5cbiAgaWYgKGV2ZW50LkRhdGFUeXBlID09PSAndXBkYXRlJykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoZXZlbnQuVXBkYXRlZEZpZWxkcykge1xuICAgICAgZS51cGRhdGVkRmllbGRzID0gSlNPTi5wYXJzZShldmVudC5VcGRhdGVkRmllbGRzKVxuICAgIH1cbiAgICAvLyBUT0RPOiB3YWl0IGZvciB0Y2IgdG8gY2hhbmdlIHJlbW92ZWRGaWVsZHMgdG8gUmVtb3ZlZEZpZWxkc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoZXZlbnQucmVtb3ZlZEZpZWxkcyB8fCBldmVudC5SZW1vdmVkRmllbGRzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAvLyBlLnJlbW92ZWRGaWVsZHMgPSBldmVudC5yZW1vdmVkRmllbGRzXG4gICAgICAvLyAgID8gSlNPTi5wYXJzZShldmVudC5yZW1vdmVkRmllbGRzKVxuICAgICAgLy8gICA6IEpTT04ucGFyc2UoZXZlbnQuUmVtb3ZlZEZpZWxkcylcbiAgICAgIGUucmVtb3ZlZEZpZWxkcyA9IEpTT04ucGFyc2UoZXZlbnQucmVtb3ZlZEZpZWxkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZVxufVxuIl19
|