@hivegpt/hiveai-angular 0.0.573 → 0.0.575
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/bundles/hivegpt-hiveai-angular.umd.js +526 -271
- package/bundles/hivegpt-hiveai-angular.umd.js.map +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js.map +1 -1
- package/esm2015/lib/components/chat-drawer/chat-drawer.component.js +6 -6
- package/esm2015/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.js +85 -54
- package/esm2015/lib/components/voice-agent/services/daily-voice-client.service.js +153 -63
- package/esm2015/lib/components/voice-agent/services/voice-agent.service.js +149 -85
- package/esm2015/lib/components/voice-agent/services/websocket-voice-client.service.js +79 -34
- package/fesm2015/hivegpt-hiveai-angular.js +465 -236
- package/fesm2015/hivegpt-hiveai-angular.js.map +1 -1
- package/hivegpt-hiveai-angular.metadata.json +1 -1
- package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts +7 -1
- package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts.map +1 -1
- package/lib/components/voice-agent/services/daily-voice-client.service.d.ts +37 -3
- package/lib/components/voice-agent/services/daily-voice-client.service.d.ts.map +1 -1
- package/lib/components/voice-agent/services/voice-agent.service.d.ts +19 -6
- package/lib/components/voice-agent/services/voice-agent.service.d.ts.map +1 -1
- package/lib/components/voice-agent/services/websocket-voice-client.service.d.ts +5 -12
- package/lib/components/voice-agent/services/websocket-voice-client.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -3372,7 +3372,7 @@ export class ChatDrawerComponent {
|
|
|
3372
3372
|
}); // returns current time in 'shortTime' format
|
|
3373
3373
|
}
|
|
3374
3374
|
openVoiceModal() {
|
|
3375
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m
|
|
3375
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
3376
3376
|
const conversationId = (_b = (_a = this.conversationKey) !== null && _a !== void 0 ? _a : this.conversationService.getKey(this.botId, false, this.eventId)) !== null && _b !== void 0 ? _b : '';
|
|
3377
3377
|
this.voiceModalConversationId = conversationId;
|
|
3378
3378
|
this.setupVoiceTranscripts();
|
|
@@ -3389,13 +3389,13 @@ export class ChatDrawerComponent {
|
|
|
3389
3389
|
conversationId,
|
|
3390
3390
|
apiKey: (_g = this.apiKey) !== null && _g !== void 0 ? _g : '',
|
|
3391
3391
|
eventToken: (_h = this.eventToken) !== null && _h !== void 0 ? _h : '',
|
|
3392
|
-
eventId:
|
|
3393
|
-
eventUrl: (
|
|
3394
|
-
domainAuthority: (
|
|
3392
|
+
eventId: this.eventId,
|
|
3393
|
+
eventUrl: (_j = this.eventUrl) !== null && _j !== void 0 ? _j : '',
|
|
3394
|
+
domainAuthority: (_k = this.domainAuthorityValue) !== null && _k !== void 0 ? _k : 'prod-lite',
|
|
3395
3395
|
agentName: this.botName || 'AI Assistant',
|
|
3396
3396
|
agentRole: this.botSkills || 'AI Agent Specialist',
|
|
3397
3397
|
agentAvatar: this.botIcon,
|
|
3398
|
-
usersApiUrl: (
|
|
3398
|
+
usersApiUrl: (_m = (_l = this.environment) === null || _l === void 0 ? void 0 : _l.USERS_API) !== null && _m !== void 0 ? _m : '',
|
|
3399
3399
|
};
|
|
3400
3400
|
const closeCallback = () => {
|
|
3401
3401
|
if (this.voiceModalOverlayRef) {
|
|
@@ -3806,4 +3806,4 @@ ChatDrawerComponent.propDecorators = {
|
|
|
3806
3806
|
tokensRefreshed: [{ type: Output }],
|
|
3807
3807
|
openSupport: [{ type: Output }]
|
|
3808
3808
|
};
|
|
3809
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFN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SztrQ0FDTCxLQUFLO3dCQUNMLEtBQUs7aUNBQ0wsS0FBSzs4QkFDTCxLQUFLO3VCQUVMLEtBQUs7K0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3FCQUNMLEtBQUs7b0JBQ0wsS0FBSztxQ0FFTCxLQUFLO3NCQUVMLEtBQUs7OEJBRUwsS0FBSzt3Q0FFTCxLQUFLO21DQUVMLEtBQUs7d0JBRUwsS0FBSzsrQkFFTCxLQUFLO21DQUNMLEtBQUs7NEJBQ0wsTUFBTTsyQkFDTixNQUFNO3VCQUNOLE1BQU07NkJBQ04sTUFBTTttQ0FFTixNQUFNO3VCQUNOLE1BQU07OEJBQ04sTUFBTTtpQ0FFTixNQUFNO3dCQUVOLE1BQU07OEJBQ04sTUFBTTsyQkFDTixNQUFNOzhCQUVOLE1BQU07MEJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERyYXdlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQbGF0Zm9ybVRva2VuUmVmcmVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbGF0Zm9ybS10b2tlbi1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgZm9ybWF0Tm93LCBmb3JtYXRUaW1lU3RhbXBzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgZGV2X2Vudmlyb25tZW50LFxuICBwcm9kX2Vudmlyb25tZW50LFxufSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvbnZlcnNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi9zb2NrZXQtc2VydmljZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBTcGVlY2hTREsgZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsnO1xuaW1wb3J0IHsgQm90c1NlcnZpY2UgfSBmcm9tICcuLi9ib3Quc2VydmljZSc7XG5pbXBvcnQgKiBhcyBtYXJrZWQgZnJvbSAnbWFya2VkJzsgLy8gSW1wb3J0IG1hcmtlZFxuaW1wb3J0IHsgVm9pY2VBZ2VudFNlcnZpY2UgfSBmcm9tICcuLi92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlJztcbmltcG9ydCB7IFZvaWNlQWdlbnRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3ZvaWNlLWFnZW50L2NvbXBvbmVudHMvdm9pY2UtYWdlbnQtbW9kYWwvdm9pY2UtYWdlbnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFZPSUNFX01PREFMX0NPTkZJRyxcbiAgVk9JQ0VfTU9EQUxfQ0xPU0VfQ0FMTEJBQ0ssXG4gIFZvaWNlTW9kYWxDb25maWcsXG59IGZyb20gJy4uL3ZvaWNlLWFnZW50L3ZvaWNlLW1vZGFsLXRva2Vucyc7XG5cbmV4cG9ydCBlbnVtIGVDbGFzc2lmaWNhdGlvblR5cGUge1xuICBMaXZlID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1NicsXG4gIE9uRGVtYW5kID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1NycsXG4gIEJyZWFrb3V0ID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1OCcsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hpdmVncHQtY2hhdC1kcmF3ZXItcGFja2FnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LWRyYXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0RHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdjaGF0TWFpbicpIHByaXZhdGUgY2hhdE1haW46IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ215SW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbXlJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47IC8vIFJlZmVyZW5jZSB0byB0aGUgdGV4dGFyZWFcbiAgQFZpZXdDaGlsZHJlbignY2xvc2VwbGF5Z3JvdW5kYnV0dG9uJylcbiAgY2xvc2VQbGF5Z3JvdW5kQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdkcmF3ZXInKSBkcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ3NvdXJjZXNEcmF3ZXInKSBzb3VyY2VzRHJhd2VyITogTWF0RHJhd2VyO1xuICBAVmlld0NoaWxkKCdlZGl0b3JzRHJhd2VyJykgZWRpdG9yc0RyYXdlciE6IE1hdERyYXdlcjtcbiAgcHJpdmF0ZSBib2R5T3ZlcmZsb3dDbGFzcyA9ICdib2R5LW92ZXJmbG93LWhpZGRlbic7XG4gIGlzQ29sbGFwc2VkVHJ1ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb3BpbG90TmFtZTogc3RyaW5nID0gJ0hpdmVYR1BUJztcbiAgQElucHV0KCkgZmlyc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBsYXN0TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgYXBpS2V5ITogc3RyaW5nO1xuICBASW5wdXQoKSBiZ0J1YmJsZUFpITogc3RyaW5nO1xuICBASW5wdXQoKSBiZ0J1YmJsZVVzZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnR3JhZGllbnQhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgYm90TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgYm90U2tpbGxzITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RJZCE6IHN0cmluZztcbiAgQElucHV0KCkgb3JnSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uYmdDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY3JlZGVudGlhbHMhOiBbXTtcbiAgQElucHV0KCkgZGF0ZVRpbWVDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZGF0ZVRleHRDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRVcmwhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGV2ZW50VG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdvcmtzcGFjZVRva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBzMjdUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RJY29uITogc3RyaW5nO1xuICByZWFkb25seSBkaXNwbGF5QXZhdGFyVXJsID1cbiAgICAnaHR0cHM6Ly93d3cuam90Zm9ybS5jb20vdXBsb2Fkcy9tZWhtZXRrYXJha2FzbGkvZm9ybV9maWxlcy8xNTY0NTkzNjY3Njc2YThlODVmMjM3NTguODY5NDU1MzdfaWNvbi5wbmcnO1xuICAvKiogVXNlciBwcm9maWxlIGltYWdlIFVSTC4gRmFsbHMgYmFjayB0byBpbml0aWFscyAoZ2V0VXNlcklkSW5pdGlhbHMoKSkgaWYgbm90IHNldC4gKi9cbiAgQElucHV0KCkgdXNlckF2YXRhclVybD86IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUZpZWxkQmdDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUZpZWxkVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBmdWxsVmlldyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyYWRpZW50Q29sb3JzITogc3RyaW5nW107XG4gIEBJbnB1dCgpIGdyZWV0aW5nITogc3RyaW5nO1xuICBASW5wdXQoKSBtZXNzYWdlVGV4dENvbG9yQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JVc2VyITogc3RyaW5nO1xuICBASW5wdXQoKSBydWxlcyE6IHN0cmluZztcbiAgQElucHV0KCkgc2VuZEJ1dHRvbkNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBzZW5kQnV0dG9uVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q2xvc2UhOiBib29sZWFuO1xuICBASW5wdXQoKSB0aHVtYnNEb3duTWVzc2FnZXMhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgdGh1bWJzVXBNZXNzYWdlITogc3RyaW5nO1xuICAvKiogVXNlcidzIHNlbGVjdGVkIHRpbWV6b25lIChlLmcuICdBbWVyaWNhL05ld19Zb3JrJyk7IHVzZWQgZm9yIHRpbWVzdGFtcHMgYW5kIHNlc3Npb24gY2FyZCB0aW1lcy4gV2hlbiBub3Qgc2V0LCBzZXNzaW9uIGRhdGEgb3IgbG9jYWwgdGltZSBpcyB1c2VkLiAqL1xuICBASW5wdXQoKSB0aW1lem9uZT86IHN0cmluZztcbiAgQElucHV0KCkgdW5rbm93blJlc3BvbnNlcyE6IFtdO1xuICBASW5wdXQoKSB1c2VPcGVuQWkhOiBib29sZWFuO1xuICBASW5wdXQoKSB1c2VySWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRGV2ITogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgY2hhdCBhdXRvLXNjcm9sbHMgdG8gYm90dG9tIHdoZW4gbmV3IGNvbnRlbnQgaXMgYWRkZWQuIERlZmF1bHQ6IGZhbHNlIChubyBhdXRvIHNjcm9sbCkuICovXG4gIEBJbnB1dCgpIGF1dG9TY3JvbGxPbk5ld01lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIE9wdGlvbmFsIEFQSSBiYXNlIFVSTCAoZS5nLiBuZ3JvayB0dW5uZWwpLiBXaGVuIHNldCwgYWxsIGNoYXQvdm9pY2UgcmVxdWVzdHMgdXNlIHRoaXMgaW5zdGVhZCBvZiBkZXYvcHJvZCBkZWZhdWx0LiAqL1xuICBASW5wdXQoKSBiYXNlVXJsPzogc3RyaW5nO1xuICAvKiogQ29ubmVjdGlvbnMgbGlzdCBmcm9tIGhvc3QgKGUuZy4gZnJvbSBzdG9yZSBzZWxlY3RDb25uZWN0aW9uc0xpc3QpLiBFYWNoIGl0ZW0gaGFzIHVzZXJJZC4gV2hlbiBzZXQsIHVzZWQgZm9yIENvbm5lY3QvUmVxdWVzdCBTZW50L0Rpc2Nvbm5lY3QgYnV0dG9uIHN0YXRlLiAqL1xuICBASW5wdXQoKSBjb25uZWN0aW9uc0xpc3Q6IGFueVtdID0gW107XG4gIC8qKiBQZW5kaW5nIHNlbnQgcmVxdWVzdCB1c2VyIElEcyBmcm9tIGhvc3QgKGUuZy4gZnJvbSBzdG9yZSBzZWxlY3RQZW5kaW5nQ29ubmVjdGlvbnNTZW50TGlzdCkuIFdoZW4gc2V0LCB1c2VkIGZvciBSZXF1ZXN0IFNlbnQgc3RhdGUuICovXG4gIEBJbnB1dCgpIHBlbmRpbmdTZW50UmVxdWVzdFVzZXJJZHM6IGFueVtdID0gW107XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgQ29ubmVjdCAvIFJlcXVlc3QgU2VudCAvIERpc2Nvbm5lY3QgYnV0dG9ucyBvbiBhdHRlbmRlZSBjYXJkcyAoZS5nLiBmcm9tIHVzZXJTZXR0aW5ncz8uaXNDb25uZWN0aW9uc0VuYWJsZWQpLiAqL1xuICBASW5wdXQoKSBpc0Nvbm5lY3Rpb25zRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKFVOL0NPUCBldmVudHMpOiBzZXNzaW9uIGNhcmQgc2hvd3MgXCJTZXNzaW9uIHR5cGVcIiBsYWJlbCBhbmQgSm9pbi9XYXRjaCBidXR0b25zLiBXaGVuIGZhbHNlOiBzaG93cyBcIk1lZXRpbmcgdHlwZVwiIGxhYmVsIGFuZCBzaW5nbGUgUGxheSBidXR0b24gKHNhbWUgYXMgdGVtcGxhdGUyKS4gKi9cbiAgQElucHV0KCkgaXNVbkV2ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgYWdhaW5CdXR0b25Db2xvciE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBhZ2FpbkJ1dHRvblRleHRDb2xvciE6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgZmVlZGJhY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25DbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb3BlblBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgSm9pbi9XYXRjaCBidXQgYWN0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIChlLmcuIHNlc3Npb24gbm90IHN0YXJ0ZWQpLiBIb3N0IGNhbiBzaG93IHRvYXN0ZXIgd2l0aCB0aGUgbWVzc2FnZS4gKi9cbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25CbG9ja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZUJvdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdFdpdGhVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgVmlldyBwcm9maWxlIG9uIGEgc3BlYWtlciBjYXJkIChnZXRfZXZlbnRfc3BlYWtlcnMpLiBIb3N0IHNob3VsZCBvcGVuIHNwZWFrZXIgZGV0YWlsIGRyYXdlciBzYW1lIGFzIC9ldmVudHMvOmlkL3NwZWFrZXJzLiAqL1xuICBAT3V0cHV0KCkgdmlld1NwZWFrZXJQcm9maWxlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNwZWFrZXI6IGFueTsgc3BlYWtlcnM6IGFueVtdIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgVmlldyBCb290aCBvbiBhIHNwb25zb3IvYm9vdGggY2FyZCAoZ2V0X2V2ZW50X3Nwb25zb3JzLCBnZXRfZXZlbnRfYm9vdGhzKS4gSG9zdCBzaG91bGQgbmF2aWdhdGUgdG8gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOmJvb3RoVXJsLiAqL1xuICBAT3V0cHV0KCkgdmlld0Jvb3RoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJvb3RoSWQ/OiBzdHJpbmc7IGJvb3RoVXJsPzogc3RyaW5nOyBzcG9uc29yPzogYW55IH0+KCk7XG4gIEBPdXRwdXQoKSBzY2hlZHVsZU1lZXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2hUb2tlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKiogRW1pdHRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgYHVzZXIvdG9rZW5SZWZyZXNoYCBzbyB0aGUgaG9zdCBjYW4gZGlzcGF0Y2ggTG9naW4gLyBgc2F2ZVRva2VuQW5kTG9naW5Vc2VyYC4gKi9cbiAgQE91dHB1dCgpIHRva2Vuc1JlZnJlc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb3BlblN1cHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBhdXRvZ2VuS2V5ID0gJ0F1dG9nZW5fZURKVHRFVS1OQjBSdElwenExdyc7XG4gIGFkZFRvTXlBZ2VuZGFBY3Rpb24gPSAnYWRkX3RvX215X2FnZW5kYSc7XG4gIG15VXBjb21pbmdTZXNzaW9uQWN0aW9uID0gJ215X3VwY29tbWluZ19zZXNzaW9uJztcbiAgY29ubmVjdE9yRm9sbG93QWN0aW9uID0gJ2Nvbm5lY3Rfb3JfZm9sbG93JztcbiAgYWlSZXNwb25zZTogc3RyaW5nID0gJyc7XG4gIGNoYXRMb2c6IGFueVtdID0gW107XG4gIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgZmVlZGJhY2tEb25lOiBib29sZWFuID0gZmFsc2U7XG4gIGdyZWV0aW5nTXNnOiBzdHJpbmcgPSAnJztcbiAgaGFzQmFja2Ryb3BWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dDogc3RyaW5nID0gJyc7XG4gIGxpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2RlOiBzdHJpbmcgPSAnb3Zlcic7XG4gIHF1aWNrUHJvbXB0czogYW55W10gPSBbXTtcbiAgdGh1bWJzRG93bk1zZ0luZGV4ID0gMDtcbiAgdXNlck5hbWU6IHN0cmluZyA9ICcnO1xuICBzaG93U3RhcnRBZ2FpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0lPU0RldmljZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93RmVlZEJhY2tJY29uc0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdGVtcGVyYXR1cmU6IG51bWJlciA9IDE7XG4gIC8qKiBTcGVha2VyIGNhY2hlIGJ5IHN0YWZmIGlkIChmaWxsZWQgdmlhIGdldC1ieS1zdGFmZi1pZHMpLiAqL1xuICBzcGVha2VyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAvKiogUHJldmVudCBkdXBsaWNhdGUgc3BlYWtlciBmZXRjaGVzIGFjcm9zcyBtZXNzYWdlcy4gKi9cbiAgcHJpdmF0ZSByZXF1ZXN0ZWRTcGVha2VySWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGVudmlyb25tZW50OiB7XG4gICAgVVNFUlNfQVBJO1xuICAgIEJBU0VfVVJMO1xuICAgIEFHRU5UU19BUEk7XG4gIH07XG4gIHBlbmRpbmdSZXF1ZXN0czogYW55O1xuICBteUNvbm5lY3Rpb25zOiBhbnk7XG4gIGNvbnZlcnNhdGlvbktleTogc3RyaW5nO1xuICBjb25TZXNzaW9uS2V5OiBzdHJpbmcgPSAnJztcbiAgaXNGZXRjaERhdGFGb3I6IGJvb2xlYW47XG4gIGlzNDAxOiBib29sZWFuO1xuICBtc2c6IGFueTtcbiAgY2hhdDogYW55O1xuICBpc1dvcmtmbG93T3BlbjogYm9vbGVhbjtcbiAgb3JnV29ya2Zsb3dzOiBhbnk7XG4gIG9wZW5Xb3JrZmxvd0lucHV0OiBib29sZWFuO1xuICBzZWxlY3RlZFdvcmtmbG93OiBhbnk7XG4gIHdvcmtmbG93Rm9ybTogYW55O1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzczogbnVtYmVyID0gMDtcbiAgY3VycmVudFdvcmtmbG93QWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgZXhlY3V0aW5nV29ya2Zsb3c6IGJvb2xlYW47XG4gIHdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuICBzaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcblxuICBzcGVlY2hDb25maWc6IFNwZWVjaFNESy5TcGVlY2hDb25maWc7XG4gIHJlY29nbml6ZXI6IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyO1xuICByZWNvZ25pemVkVGV4dDogc3RyaW5nID0gJyc7XG4gIGF1dGhvcml6YXRpb25Ub2tlbjogc3RyaW5nID0gJyc7XG4gIHJlZ2lvbjogc3RyaW5nID0gJ3dlc3RldXJvcGUnOyAvLyBTZXQgeW91ciBBenVyZSByZWdpb24gaGVyZVxuICBpc1JlY29yZGluZzogYm9vbGVhbjtcbiAgaXNWb2ljZU1vZGFsT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHZvaWNlTW9kYWxPdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGJvdFNlcnZpY2U6IEJvdHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc29ja2V0U2VydmljZTogU29ja2V0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnZlcnNhdGlvblNlcnZpY2U6IENvbnZlcnNhdGlvblNlcnZpY2UsIC8vIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHZvaWNlQWdlbnRTZXJ2aWNlOiBWb2ljZUFnZW50U2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcGxhdGZvcm1Ub2tlblJlZnJlc2g6IFBsYXRmb3JtVG9rZW5SZWZyZXNoU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5jaGF0TWFpbiA9IG5ldyBFbGVtZW50UmVmKG51bGwpO1xuXG4gICAgLy8gaWYgKHRoaXMucGxhdGZvcm0uSU9TKSB7XG4gICAgLy8gICB0aGlzLmlzSU9TRGV2aWNlID0gdHJ1ZTtcbiAgICAvLyB9XG4gIH1cbiAgZ2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0VHJhbnNsYXRpb24oa2V5KTtcbiAgfVxuXG4gIC8qKiBUaW1lIHNob3duIG5leHQgdG8gXCJBc3Npc3RhbnRcIiB3aGVuIGluIHRoaW5raW5nL2xvYWRpbmcgc3RhdGUuICovXG4gIGdldExvYWRpbmdUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKTtcbiAgfVxuXG4gIC8qKiBVc2VyIGluaXRpYWxzIGZvciBhdmF0YXIgZmFsbGJhY2sgKGUuZy4gXCJKRFwiIGZyb20gZmlyc3ROYW1lICsgbGFzdE5hbWUpLiAqL1xuICBnZXRVc2VySWRJbml0aWFscygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpcnN0ID0gKHRoaXMuZmlyc3ROYW1lIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgbGFzdCA9ICh0aGlzLmxhc3ROYW1lIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKGZpcnN0ICYmIGxhc3QpIHJldHVybiAoZmlyc3RbMF0gKyBsYXN0WzBdKS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChmaXJzdCkgcmV0dXJuIGZpcnN0LnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKGxhc3QpIHJldHVybiBsYXN0LnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuICdVJztcbiAgfVxuXG4gIC8qKiBBdHRlbmRlZSBpbml0aWFscyBmb3IgY2FyZCB3aGVuIG5vIHBob3RvIChlLmcuIFwiVmlqYXkgUGFsaXdhbFwiIC0+IFwiVlBcIiwgXCJKaW1cIiAtPiBcIkpcIikuICovXG4gIGdldEF0dGVuZGVlSW5pdGlhbHMobmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuICc/JztcbiAgICBjb25zdCBwYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMilcbiAgICAgIHJldHVybiAocGFydHNbMF1bMF0gKyBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXVswXSkudG9VcHBlckNhc2UoKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSByZXR1cm4gcGFydHNbMF0uc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gJz8nO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBldmVudElkIGNoYW5nZXMgdG8gdXBkYXRlIHRyYW5zbGF0aW9uIHNlcnZpY2VcbiAgICBpZiAoY2hhbmdlcy5ldmVudElkICYmIGNoYW5nZXMuZXZlbnRJZC5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnNldEV2ZW50SWQoY2hhbmdlcy5ldmVudElkLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuczI3VG9rZW4pIHtcbiAgICAgIGlmIChjaGFuZ2VzLnMyN1Rva2VuLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnMyN1Rva2VuLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zMjdUb2tlbiA9IGNoYW5nZXMuczI3VG9rZW4uY3VycmVudFZhbHVlO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0ZldGNoRGF0YUZvcjogJywgdGhpcy5pc0ZldGNoRGF0YUZvcik7XG4gICAgICAgIGNvbnNvbGUubG9nKCdtc2c6ICcsIHRoaXMubXNnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2NoYXQ6ICcsIHRoaXMuY2hhdCk7XG4gICAgICAgIGlmICh0aGlzLmlzNDAxKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNGZXRjaERhdGFGb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhRm9yKHRoaXMubXNnLCB0aGlzLmNoYXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YSh0aGlzLm1zZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG8gTk9UIGNhbGwgaW5pdGlhbGl6ZVNvY2tldCgpIGhlcmUuIFNvY2tldC5JTyBpcyBmb3IgY2hhdCBvbmx5OyB3ZSBkZWZlclxuICAgIC8vIHVudGlsIHRoZSB1c2VyIGFjdHVhbGx5IHVzZXMgY2hhdCAoc2VuZCBtZXNzYWdlIG9yIHN0YXJ0IG5ldyBjb252ZXJzYXRpb24pXG4gICAgLy8gc28gdGhhdCB2b2ljZS1vbmx5IHVzYWdlIG5ldmVyIHRyaWdnZXJzIFNvY2tldC5JTyAoYXZvaWRzIHYyL3YzIG1pc21hdGNoIGVycm9yKS5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLm9yZ0lkICYmXG4gICAgICBjaGFuZ2VzLm9yZ0lkLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLm9yZ0lkLnByZXZpb3VzVmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmJhc2VVcmwgJiYgdGhpcy5lbnZpcm9ubWVudCkge1xuICAgICAgdGhpcy5hcHBseUJhc2VVcmxPdmVycmlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGVuIGJhc2VVcmwgaW5wdXQgaXMgc2V0LCBvdmVycmlkZSBlbnZpcm9ubWVudC5CQVNFX1VSTCBzbyBhbGwgY2hhdC92b2ljZSBzZXJ2aWNlcyB1c2UgaXQgKHN1cHBvcnRzIG5ncm9rIGV0Yy4pLiAqL1xuICBwcml2YXRlIGFwcGx5QmFzZVVybE92ZXJyaWRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRFbnYgPSB0aGlzLmlzRGV2ID8gZGV2X2Vudmlyb25tZW50IDogcHJvZF9lbnZpcm9ubWVudDtcbiAgICBpZiAodGhpcy5iYXNlVXJsICYmIHR5cGVvZiB0aGlzLmJhc2VVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmJhc2VVcmwudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgICAgaWYgKHVybCkge1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0geyAuLi5kZWZhdWx0RW52LCBCQVNFX1VSTDogdXJsIH07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGRlZmF1bHRFbnY7XG4gIH1cblxuICBkb21haW5BdXRob3JpdHlWYWx1ZTogYW55ID0gJ3Byb2QtbGl0ZSc7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2V0IHRoZSBldmVudElkIGluIHRyYW5zbGF0aW9uIHNlcnZpY2UgdG8gZ2V0IHRoZSBjb3JyZWN0IGxhbmd1YWdlIGZyb20gbG9jYWxTdG9yYWdlXG4gICAgaWYgKHRoaXMuZXZlbnRJZCkge1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uuc2V0RXZlbnRJZCh0aGlzLmV2ZW50SWQpO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbHlCYXNlVXJsT3ZlcnJpZGUoKTtcblxuICAgIGNvbnN0IGRvbWFpbiA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcblxuICAgIC8vIERldGVybWluZSB0aGUgaGVhZGVyIHZhbHVlIGJhc2VkIG9uIHRoZSBkb21haW5cblxuICAgIGlmIChkb21haW4uaW5jbHVkZXMoJ3ByZS1hcHAuc29jaWFsMjcuY29tJykpIHtcbiAgICAgIHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUgPSAncHJlLXByb2QtbGl0ZSc7XG4gICAgfSBlbHNlIGlmIChkb21haW4uaW5jbHVkZXMoJ2FwcC5zb2NpYWwyNy5jb20nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdwcm9kLWxpdGUnO1xuICAgIH0gZWxzZSBpZiAoZG9tYWluLmluY2x1ZGVzKCdoaXZlZ3B0LmlvJykpIHtcbiAgICAgIHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUgPSAnaGl2ZWdwdCc7XG4gICAgfVxuXG4gICAgLy8gdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKTtcbiAgICAvLyB0aGlzLmZldGNoUGVuZGluZ1JlcXVlc3RzKCkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmNoYW5nZVRlbXBlcmF0dXJlKHRoaXMudGVtcGVyYXR1cmUpO1xuICAgIHRoaXMuZmV0Y2hCb3RDb25maWcoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIHRoaXMuZmV0Y2hDaGF0SGlzdG9yeSgpLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5tYXBDaGF0SGlzdG9yeShyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTonLCBlcnIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3Rvcnk6JywgZXJyKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICAvLyB0aGlzLmZldGNoQWdlbnRzKCk7XG4gICAgLy8gdGhpcy5mZXRjaEVkaXRvckNvbnRlbnQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAvLyB0aGlzLmluaXRpYWxpemVTb2NrZXQoKTtcbiAgICB0aGlzLmJvdFNlcnZpY2VcbiAgICAgIC5mZXRjaFNwZWVjaEF1dGhvcml6YXRpb25Ub2tlbihcbiAgICAgICAgdGhpcy5ib3RJZCxcbiAgICAgICAgdGhpcy5hcGlLZXksXG4gICAgICAgIHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh0b2tlbikgPT4ge1xuICAgICAgICB0aGlzLmF1dGhvcml6YXRpb25Ub2tlbiA9IHRva2VuO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTcGVlY2hSZWNvZ25pemVyKHRva2VuKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBldmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAvKiogVHJ1ZSBhZnRlciBTb2NrZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGNoYXQgKGF2b2lkcyBjb25uZWN0aW5nIG9uIHZvaWNlLW9ubHkgdXNhZ2UpLiAqL1xuICBwcml2YXRlIGNoYXRTb2NrZXRJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDYWxsIGJlZm9yZSBjaGF0IGFjdGlvbnMgc28gU29ja2V0LklPIGlzIHVzZWQgb25seSBmb3IgY2hhdCwgbm90IGZvciB2b2ljZS5cbiAgICogVm9pY2UgYWdlbnQgdXNlcyBuYXRpdmUgV2ViU29ja2V0ICsgRGFpbHkuanMgb25seTsgU29ja2V0LklPIG11c3Qgbm90IHJ1biBkdXJpbmcgdm9pY2UgZmxvdy5cbiAgICovXG4gIHByaXZhdGUgZW5zdXJlQ2hhdFNvY2tldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGF0U29ja2V0SW5pdGlhbGl6ZWQgfHwgIXRoaXMub3JnSWQpIHJldHVybjtcbiAgICB0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5pbml0aWFsaXplU29ja2V0KCk7XG4gIH1cblxuICBpbml0aWFsaXplU29ja2V0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdFNvY2tldENvbm5lY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc29ja2V0U2VydmljZS5jb25uZWN0U29ja2V0Q29ubmVjdGlvbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdZRVMgSU5JVCcpO1xuICAgICAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KFxuICAgICAgICAgIHRoaXMuYm90SWQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdGhpcy5ldmVudElkLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc29ja2V0U2VydmljZS5yZWdpc3RlclVzZXJTcGVjaWZpY0hpdmVTb2NrZXQoXG4gICAgICAgICAgdGhpcy5ib3RJZCxcbiAgICAgICAgICBjb252ZXJzYXRpb25faWQsXG4gICAgICAgICAgdGhpcy5vcmdJZCxcbiAgICAgICAgKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5saXN0ZW5Tb2NrZXRzKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9LCAyMDApO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBzdWJzY3JpcHRpb25OZXc6IGFueTtcbiAgc29ja2V0RGF0YTogYW55O1xuXG4gIC8qKiBJbml0aWFsIG51bWJlciBvZiBzZXNzaW9uL2F0dGVuZGVlIGNhcmRzIHNob3duIGJlZm9yZSBcIlNob3cgWCBtb3JlXCIuICovXG4gIHJlYWRvbmx5IFNFU1NJT05fQ0FSRFNfSU5JVElBTCA9IDY7XG4gIHJlYWRvbmx5IEFUVEVOREVFX0NBUkRTX0lOSVRJQUwgPSA5O1xuICByZWFkb25seSBTUEVBS0VSX0NBUkRTX0lOSVRJQUwgPSA5O1xuICByZWFkb25seSBTUE9OU09SX0NBUkRTX0lOSVRJQUwgPSA5O1xuICByZWFkb25seSBCT09USF9SRVBfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIC8qKiBNZXNzYWdlIGlkIC0+IHRydWUgd2hlbiB1c2VyIGV4cGFuZGVkIFwiU2hvdyBtb3JlXCIgZm9yIHNlc3Npb25zL2F0dGVuZGVlcy4gKi9cbiAgZXhwYW5kZWRTZXNzaW9uQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRBdHRlbmRlZUNhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIGV4cGFuZGVkU3BlYWtlckNhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIGV4cGFuZGVkU3BvbnNvckNhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIGV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAvKioga2V5OiBgJHttZXNzYWdlSWR9OiR7YXR0ZW5kZWVJZH1gIC0+IHRydWUgd2hlbiBkZXNjcmlwdGlvbiBleHBhbmRlZCAqL1xuICBleHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIC8qKiBrZXk6IGAke21lc3NhZ2VJZH06JHthdHRlbmRlZUlkfWAgLT4gdHJ1ZSB3aGVuIHZpZGVvIGlzIHBsYXlpbmcgKi9cbiAgYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIC8qKiBrZXk6IGAke21lc3NhZ2VJZH06JHthdHRlbmRlZUlkfWAgLT4gdHJ1ZSB3aGVuIHZpZGVvIGlzIG11dGVkIChkZWZhdWx0IHRydWUpICovXG4gIGF0dGVuZGVlVmlkZW9NdXRlZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuICAvKiogU3RyaXAgSFRNTCB0YWdzIHRvIHBsYWluIHRleHQgKGUuZy4gZm9yIHNwZWFrZXIvYXR0ZW5kZWUgZGVzY3JpcHRpb24gZnJvbSBBUEkpLiAqL1xuICBzdHJpcEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWh0bWwgfHwgdHlwZW9mIGh0bWwgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG4gICAgY29uc3QgdGV4dCA9IGRvYy5ib2R5Py50ZXh0Q29udGVudCA/PyAnJztcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuICB9XG5cbiAgZ2V0QXR0ZW5kZWVEZXNjcmlwdGlvbihhdHRlbmRlZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCByYXcgPVxuICAgICAgYXR0ZW5kZWU/LmRlc2NyaXB0aW9uID8/IGF0dGVuZGVlPy5pbnRlcmVzdHMgPz8gYXR0ZW5kZWU/LmpvYlRpdGxlID8/ICcnO1xuICAgIGNvbnN0IHN0ciA9IHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8gcmF3LnRyaW0oKSA6IFN0cmluZyhyYXcgPz8gJycpLnRyaW0oKTtcbiAgICAvLyBJZiBpdCBsb29rcyBsaWtlIEhUTUwsIHN0cmlwIHRhZ3Mgc28gY2FyZCBzaG93cyBwbGFpbiB0ZXh0XG4gICAgaWYgKHN0ciAmJiAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3Qoc3RyKSkgcmV0dXJuIHRoaXMuc3RyaXBIdG1sKHN0cik7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHNob3VsZFNob3dBdHRlbmRlZVJlYWRNb3JlKGF0dGVuZGVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBoZXVyaXN0aWM6IG9ubHkgc2hvdyB0b2dnbGUgZm9yIHJlYXNvbmFibHkgbG9uZyB0ZXh0XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0ZW5kZWVEZXNjcmlwdGlvbihhdHRlbmRlZSkubGVuZ3RoID4gOTA7XG4gIH1cblxuICBwcml2YXRlIGdldEF0dGVuZGVlRGVzY0tleShjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBtc2dJZCA9IGNoYXQ/Ll9pZDtcbiAgICBjb25zdCBhdHRlbmRlZUlkID0gYXR0ZW5kZWU/LmlkID8/IGF0dGVuZGVlPy5faWQgPz8gYXR0ZW5kZWU/LnVzZXJJZDtcbiAgICBpZiAoIW1zZ0lkIHx8ICFhdHRlbmRlZUlkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7bXNnSWR9OiR7YXR0ZW5kZWVJZH1gO1xuICB9XG5cbiAgaXNBdHRlbmRlZURlc2NyaXB0aW9uRXhwYW5kZWQoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZURlc2NLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhdGhpcy5leHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHNba2V5XTtcbiAgfVxuXG4gIHRvZ2dsZUF0dGVuZGVlRGVzY3JpcHRpb24oY2hhdDogYW55LCBhdHRlbmRlZTogYW55LCBldj86IEV2ZW50KTogdm9pZCB7XG4gICAgZXY/LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZURlc2NLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9ICF0aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkc1trZXldO1xuICAgIHRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzID0ge1xuICAgICAgLi4udGhpcy5leHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHMsXG4gICAgICBba2V5XTogbmV4dCxcbiAgICB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0QXR0ZW5kZWVWaWRlb1VybChhdHRlbmRlZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBhdHRlbmRlZT8udXNlclZpZGVvc01vZGVsPy51cmw7XG4gICAgcmV0dXJuIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gdXJsLnRyaW0oKSA6ICcnO1xuICB9XG5cbiAgZ2V0QXR0ZW5kZWVWaWRlb1Bvc3RlcihhdHRlbmRlZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBwb3N0ZXIgPSBhdHRlbmRlZT8udXNlclZpZGVvc01vZGVsPy50aHVtYm5haWw7XG4gICAgcmV0dXJuIHR5cGVvZiBwb3N0ZXIgPT09ICdzdHJpbmcnID8gcG9zdGVyLnRyaW0oKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG1zZ0lkID0gY2hhdD8uX2lkO1xuICAgIGNvbnN0IGF0dGVuZGVlSWQgPSBhdHRlbmRlZT8uaWQgPz8gYXR0ZW5kZWU/Ll9pZCA/PyBhdHRlbmRlZT8udXNlcklkO1xuICAgIGlmICghbXNnSWQgfHwgIWF0dGVuZGVlSWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBgJHttc2dJZH06JHthdHRlbmRlZUlkfWA7XG4gIH1cblxuICBpc0F0dGVuZGVlVmlkZW9NdXRlZChjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBkZWZhdWx0IHRydWUgKG11dGVkKSB1bmxlc3MgZXhwbGljaXRseSBzZXQgdG8gZmFsc2VcbiAgICByZXR1cm4gdGhpcy5hdHRlbmRlZVZpZGVvTXV0ZWRJZHNba2V5XSAhPT0gZmFsc2U7XG4gIH1cblxuICBpc0F0dGVuZGVlVmlkZW9QbGF5aW5nKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISF0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzW2tleV07XG4gIH1cblxuICB0b2dnbGVBdHRlbmRlZVZpZGVvTXV0ZShcbiAgICBjaGF0OiBhbnksXG4gICAgYXR0ZW5kZWU6IGFueSxcbiAgICB2aWRlb0VsPzogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwsXG4gICAgZXY/OiBFdmVudCxcbiAgKTogdm9pZCB7XG4gICAgZXY/LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG5leHQgPSAhdGhpcy5pc0F0dGVuZGVlVmlkZW9NdXRlZChjaGF0LCBhdHRlbmRlZSk7XG4gICAgdGhpcy5hdHRlbmRlZVZpZGVvTXV0ZWRJZHMgPSB7IC4uLnRoaXMuYXR0ZW5kZWVWaWRlb011dGVkSWRzLCBba2V5XTogbmV4dCB9O1xuICAgIGlmICh2aWRlb0VsKSB7XG4gICAgICB2aWRlb0VsLm11dGVkID0gbmV4dDtcbiAgICAgIC8vIFNvbWUgYnJvd3NlcnMgcmVxdWlyZSB2b2x1bWUgdG8gYmUgPjAgd2hlbiB1bm11dGluZ1xuICAgICAgaWYgKCFuZXh0ICYmICh2aWRlb0VsLnZvbHVtZSA9PSBudWxsIHx8IHZpZGVvRWwudm9sdW1lID09PSAwKSkge1xuICAgICAgICB2aWRlb0VsLnZvbHVtZSA9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdG9nZ2xlQXR0ZW5kZWVWaWRlb1BsYXkoXG4gICAgY2hhdDogYW55LFxuICAgIGF0dGVuZGVlOiBhbnksXG4gICAgdmlkZW9FbD86IEhUTUxWaWRlb0VsZW1lbnQgfCBudWxsLFxuICAgIGV2PzogRXZlbnQsXG4gICk6IHZvaWQge1xuICAgIGV2Py5zdG9wUHJvcGFnYXRpb24/LigpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gIXRoaXMuaXNBdHRlbmRlZVZpZGVvUGxheWluZyhjaGF0LCBhdHRlbmRlZSk7XG4gICAgdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyA9IHtcbiAgICAgIC4uLnRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMsXG4gICAgICBba2V5XTogbmV4dCxcbiAgICB9O1xuICAgIGlmICh2aWRlb0VsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgIGNvbnN0IHAgPSB2aWRlb0VsLnBsYXkoKTtcbiAgICAgICAgICBpZiAocCAmJiB0eXBlb2YgKHAgYXMgYW55KS5jYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgKHAgYXMgYW55KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIHBsYXkgZmFpbHMsIHJlZmxlY3QgcGF1c2VkIHN0YXRlXG4gICAgICAgICAgICAgIHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyxcbiAgICAgICAgICAgICAgICBba2V5XTogZmFsc2UsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZGVvRWwucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQXR0ZW5kZWVWaWRlb1BsYXlTdGF0ZShjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnksIGlzUGxheWluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICBpZiAodGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkc1trZXldID09PSBpc1BsYXlpbmcpIHJldHVybjtcbiAgICB0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzID0ge1xuICAgICAgLi4udGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyxcbiAgICAgIFtrZXldOiBpc1BsYXlpbmcsXG4gICAgfTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgc2Vzc2lvbiBkYXRlL3RpbWUgZm9yIGRpc3BsYXkuXG4gICAqIEBwYXJhbSBkYXRlVGltZVJhbmdlIFNlc3Npb24gc3RhcnQvZW5kIChvYmplY3Qgd2l0aCBzdGFydC9lbmQgb3Igc3RyaW5nIHdpdGggXCJTdGFydDogLi4uIEVuZDogLi4uXCIpXG4gICAqIEBwYXJhbSBkaXNwbGF5VGltZVpvbmUgT3B0aW9uYWwgdXNlci1zZWxlY3RlZCB0aW1lem9uZSAoZS5nLiAnQW1lcmljYS9OZXdfWW9yaycpOyB3aGVuIHNldCwgdGltZXMgYXJlIHNob3duIGluIHRoaXMgem9uZS5cbiAgICovXG4gIGZvcm1hdFNlc3Npb25XaGVuKFxuICAgIGRhdGVUaW1lUmFuZ2U6IHN0cmluZyB8IHsgc3RhcnQ/OiBzdHJpbmc7IGVuZD86IHN0cmluZyB9IHwgbnVsbCxcbiAgICBkaXNwbGF5VGltZVpvbmU/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbG9jYWxlT3B0cyA9IGRpc3BsYXlUaW1lWm9uZSA/IHsgdGltZVpvbmU6IGRpc3BsYXlUaW1lWm9uZSB9IDoge307XG4gICAgaWYgKCFkYXRlVGltZVJhbmdlKSByZXR1cm4gJyc7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICBkYXRlVGltZVJhbmdlPy5zdGFydCAmJlxuICAgICAgZGF0ZVRpbWVSYW5nZT8uZW5kXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGFydER0ID0gbmV3IERhdGUoZGF0ZVRpbWVSYW5nZS5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZER0ID0gbmV3IERhdGUoZGF0ZVRpbWVSYW5nZS5lbmQpO1xuICAgICAgICBjb25zdCBkYXRlRm9ybWF0dGVkID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gZW5kRHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGAke2RhdGVGb3JtYXR0ZWR9IHwgJHtzdGFydFRpbWV9IC0gJHtlbmRUaW1lfWA7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGVUaW1lUmFuZ2UgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgY29uc3Qgc3RhcnRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAvU3RhcnQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICk7XG4gICAgY29uc3QgZW5kTWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgL0VuZDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgKTtcbiAgICBpZiAoIXN0YXJ0TWF0Y2ggfHwgIWVuZE1hdGNoKSByZXR1cm4gZGF0ZVRpbWVSYW5nZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRTdHIgPSBzdGFydE1hdGNoWzFdO1xuICAgICAgY29uc3QgZW5kU3RyID0gZW5kTWF0Y2hbMV07XG4gICAgICBjb25zdCBzdGFydER0ID0gbmV3IERhdGUoc3RhcnRTdHIucmVwbGFjZSgnICcsICdUJykgKyAnWicpO1xuICAgICAgY29uc3QgZW5kRHQgPSBuZXcgRGF0ZShlbmRTdHIucmVwbGFjZSgnICcsICdUJykgKyAnWicpO1xuICAgICAgY29uc3QgZGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZVNob3J0ID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmRUaW1lU2hvcnQgPSBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYCR7ZGF0ZUZvcm1hdHRlZH0gfCAke3N0YXJ0VGltZVNob3J0fSAtICR7ZW5kVGltZVNob3J0fWA7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGF0ZVRpbWVSYW5nZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGUgYmFkZ2UgKGRheSArIG1vbnRoKSBmb3Igc2Vzc2lvbiBjYXJkIGZyb20gZGF0ZVRpbWVSYW5nZS5cbiAgICogSGFuZGxlcyBkYXRlVGltZVJhbmdlIGFzIHN0cmluZyAoXCJTdGFydDogMjAyNi0wMi0yMCAwMTowNTowMCwgRW5kOiAuLi5cIikgb3Igb2JqZWN0IHsgc3RhcnQsIGVuZCB9LlxuICAgKiBVc2VzIGRpc3BsYXlUaW1lWm9uZSBvbmx5IHdoZW4gaXQgaXMgYSB2YWxpZCBJQU5BIGlkZW50aWZpZXI7IG90aGVyd2lzZSBmb3JtYXRzIGluIGxvY2FsIHRpbWUuXG4gICAqL1xuICBnZXRTZXNzaW9uRGF0ZUJhZGdlKFxuICAgIGRhdGVUaW1lUmFuZ2U6IHN0cmluZyB8IHsgc3RhcnQ/OiBzdHJpbmc7IGVuZD86IHN0cmluZyB9IHwgbnVsbCxcbiAgICBkaXNwbGF5VGltZVpvbmU/OiBzdHJpbmcsXG4gICk6IHsgZGF5OiBzdHJpbmc7IG1vbnRoOiBzdHJpbmcgfSB7XG4gICAgaWYgKCFkYXRlVGltZVJhbmdlKSByZXR1cm4geyBkYXk6ICcnLCBtb250aDogJycgfTtcbiAgICB0cnkge1xuICAgICAgbGV0IHN0YXJ0RHQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ29iamVjdCcgJiYgZGF0ZVRpbWVSYW5nZT8uc3RhcnQpIHtcbiAgICAgICAgc3RhcnREdCA9IG5ldyBEYXRlKGRhdGVUaW1lUmFuZ2Uuc3RhcnQpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAgICAgL1N0YXJ0OlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHN0YXJ0TWF0Y2gpXG4gICAgICAgICAgc3RhcnREdCA9IG5ldyBEYXRlKHN0YXJ0TWF0Y2hbMV0ucmVwbGFjZSgnICcsICdUJykgKyAnWicpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdGFydER0IHx8IGlzTmFOKHN0YXJ0RHQuZ2V0VGltZSgpKSkgcmV0dXJuIHsgZGF5OiAnJywgbW9udGg6ICcnIH07XG4gICAgICBjb25zdCBsb2NhbGVPcHRzID0gZGlzcGxheVRpbWVab25lID8geyB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lIH0gOiB7fTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRheSA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbW9udGggPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGRheSwgbW9udGggfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBkaXNwbGF5VGltZVpvbmUgbWF5IGJlIG5vbi1JQU5BIChlLmcuIFwiKFVUQy0wMzowMCkgQnJhc2lsaWFcIik7IGZvcm1hdCB3aXRob3V0IHRpbWVab25lXG4gICAgICAgIGNvbnN0IGRheSA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgZGF5OiAnbnVtZXJpYycgfSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ3Nob3J0JyB9KTtcbiAgICAgICAgcmV0dXJuIHsgZGF5LCBtb250aCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgZGF5OiAnJywgbW9udGg6ICcnIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aW1lIHJhbmdlIG9ubHkgKGUuZy4gXCI5OjAwIEFNIC0gMTA6MzAgQU1cIikgZm9yIHNlc3Npb24gY2FyZC5cbiAgICogRmFsbHMgYmFjayB0byBmb3JtYXR0aW5nIHdpdGhvdXQgdGltZVpvbmUgd2hlbiBkaXNwbGF5VGltZVpvbmUgaXMgbm90IGEgdmFsaWQgSUFOQSBpZGVudGlmaWVyLlxuICAgKi9cbiAgZm9ybWF0U2Vzc2lvblRpbWVSYW5nZShcbiAgICBkYXRlVGltZVJhbmdlOiBzdHJpbmcgfCB7IHN0YXJ0Pzogc3RyaW5nOyBlbmQ/OiBzdHJpbmcgfSB8IG51bGwsXG4gICAgZGlzcGxheVRpbWVab25lPzogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIGlmICghZGF0ZVRpbWVSYW5nZSkgcmV0dXJuICcnO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc3RhcnREdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IGVuZER0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBkYXRlVGltZVJhbmdlPy5zdGFydCAmJlxuICAgICAgICBkYXRlVGltZVJhbmdlPy5lbmRcbiAgICAgICkge1xuICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoZGF0ZVRpbWVSYW5nZS5zdGFydCk7XG4gICAgICAgIGVuZER0ID0gbmV3IERhdGUoZGF0ZVRpbWVSYW5nZS5lbmQpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAgICAgL1N0YXJ0OlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZW5kTWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKFxuICAgICAgICAgIC9FbmQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICAgICApO1xuICAgICAgICBpZiAoc3RhcnRNYXRjaClcbiAgICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoc3RhcnRNYXRjaFsxXS5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICAgIGlmIChlbmRNYXRjaCkgZW5kRHQgPSBuZXcgRGF0ZShlbmRNYXRjaFsxXS5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0YXJ0RHQgfHwgaXNOYU4oc3RhcnREdC5nZXRUaW1lKCkpKSByZXR1cm4gJyc7XG4gICAgICBjb25zdCBsb2NhbGVPcHRzID0gZGlzcGxheVRpbWVab25lID8geyB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lIH0gOiB7fTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHN0YXJ0RHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRUaW1lID1cbiAgICAgICAgICBlbmREdCAmJiAhaXNOYU4oZW5kRHQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgPyBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHJldHVybiBlbmRUaW1lID8gYCR7c3RhcnRUaW1lfSAtICR7ZW5kVGltZX1gIDogc3RhcnRUaW1lO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHN0YXJ0RHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9XG4gICAgICAgICAgZW5kRHQgJiYgIWlzTmFOKGVuZER0LmdldFRpbWUoKSlcbiAgICAgICAgICAgID8gZW5kRHQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgcmV0dXJuIGVuZFRpbWUgPyBgJHtzdGFydFRpbWV9IC0gJHtlbmRUaW1lfWAgOiBzdGFydFRpbWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElBTkEgdGltZXpvbmUgSUQgLT4gYWJicmV2aWF0aW9uIG1hcCAobWF0Y2hlcyBwYXJlbnQgYXBwIHNlc3Npb24tbGF5b3V0cyAvIHRpbWV6b25lcy5lbnVtIFRpbWVab25lcykuXG4gICAqIFVzZWQgc28gc2Vzc2lvbiBjYXJkcyBzaG93IFNBU1QsIEVFU1QsIFNBV1NULCBFU0FTVCwgZXRjLiBpbnN0ZWFkIG9mIEdNVCsxLCBHTVQrMi5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRaX0FCQlJfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICdQYWNpZmljL0tpcml0aW1hdGknOiAnTElOVCcsXG4gICAgJ1BhY2lmaWMvQXBpYSc6ICdTU1QnLFxuICAgICdQYWNpZmljL1RvbmdhdGFwdSc6ICdUU1QnLFxuICAgICdFdGMvR01ULTEzJzogJ1VUQycsXG4gICAgJ1BhY2lmaWMvQ2hhdGhhbSc6ICdDSEFEVCcsXG4gICAgJ0FzaWEvS2FtY2hhdGthJzogJ0FOQVQnLFxuICAgICdQYWNpZmljL0ZpamknOiAnRkpUJyxcbiAgICAnRXRjL0dNVC0xMic6ICdVJyxcbiAgICAnUGFjaWZpYy9BdWNrbGFuZCc6ICdOWlNUJyxcbiAgICAnUGFjaWZpYy9HdWFkYWxjYW5hbCc6ICdDUFNUJyxcbiAgICAnQXNpYS9TYWtoYWxpbic6ICdTQUtUJyxcbiAgICAnUGFjaWZpYy9Ob3Jmb2xrJzogJ05GVCcsXG4gICAgJ0FzaWEvTWFnYWRhbic6ICdNQUdUJyxcbiAgICAnQXNpYS9TcmVkbmVrb2x5bXNrJzogJ1NSRVQnLFxuICAgICdQYWNpZmljL0JvdWdhaW52aWxsZSc6ICdCU1QnLFxuICAgICdBdXN0cmFsaWEvTG9yZF9Ib3dlJzogJ0xIU1QnLFxuICAgICdBc2lhL1ZsYWRpdm9zdG9rJzogJ1ZMQVQnLFxuICAgICdBdXN0cmFsaWEvSG9iYXJ0JzogJ0FFU1QnLFxuICAgICdQYWNpZmljL1BvcnRfTW9yZXNieSc6ICdDaFNUJyxcbiAgICAnQXVzdHJhbGlhL1N5ZG5leSc6ICdBRVNUJyxcbiAgICAnQXVzdHJhbGlhL0JyaXNiYW5lJzogJ0FXU1QnLFxuICAgICdBdXN0cmFsaWEvRGFyd2luJzogJ0FDU1QnLFxuICAgICdBdXN0cmFsaWEvQWRlbGFpZGUnOiAnQUNTVCcsXG4gICAgJ0FzaWEvWWFrdXRzayc6ICdZQUtUJyxcbiAgICAnQXNpYS9TZW91bCc6ICdLU1QnLFxuICAgICdBc2lhL1B5b25neWFuZyc6ICdLU1QnLFxuICAgICdBc2lhL1Rva3lvJzogJ1RTVCcsXG4gICAgJ0FzaWEvQ2hpdGEnOiAnWUFLVCcsXG4gICAgJ0F1c3RyYWxpYS9FdWNsYSc6ICdBQ1dTVCcsXG4gICAgJ0FzaWEvVWxhYW5iYWF0YXInOiAnRlNUJyxcbiAgICAnQXNpYS9UYWlwZWknOiAnVUxBVCcsXG4gICAgJ0F1c3RyYWxpYS9QZXJ0aCc6ICdBV1NUJyxcbiAgICAnQXNpYS9TaW5nYXBvcmUnOiAnU05TVCcsXG4gICAgJ0FzaWEvSXJrdXRzayc6ICdJUktUJyxcbiAgICAnQXNpYS9TaGFuZ2hhaSc6ICdDU1QnLFxuICAgICdBc2lhL1RvbXNrJzogJ01TRCcsXG4gICAgJ0FzaWEvTm92b3NpYmlyc2snOiAnTk9WVCcsXG4gICAgJ0FzaWEvS3Jhc25veWFyc2snOiAnS1JBVCcsXG4gICAgJ0FzaWEvSG92ZCc6ICdTQVNUJyxcbiAgICAnQXNpYS9CYXJuYXVsJzogJ01TSycsXG4gICAgJ0FzaWEvQmFuZ2tvayc6ICdUSEEnLFxuICAgICdBc2lhL1lhbmdvbic6ICdNWVNUJyxcbiAgICAnQXNpYS9PbXNrJzogJ09NU1QnLFxuICAgICdBc2lhL0RoYWthJzogJ0JTVCcsXG4gICAgJ0FzaWEvQWxtYXR5JzogJ05DQVNUJyxcbiAgICAnQXNpYS9LYXRobWFuZHUnOiAnTlBUJyxcbiAgICAnQXNpYS9Db2xvbWJvJzogJ1NMVCcsXG4gICAgJ0FzaWEvS29sa2F0YSc6ICdJU1QnLFxuICAgICdBc2lhL0NhbGN1dHRhJzogJ0lTVCcsXG4gICAgJ0FzaWEvUXl6eWxvcmRhJzogJ0NBU1QnLFxuICAgICdBc2lhL0thcmFjaGknOiAnUEtUJyxcbiAgICAnQXNpYS9ZZWthdGVyaW5idXJnJzogJ1lFS1QnLFxuICAgICdBc2lhL1Rhc2hrZW50JzogJ1dBU1QnLFxuICAgICdBc2lhL0thYnVsJzogJ0FGVCcsXG4gICAgJ0FzaWEvWWVyZXZhbic6ICdBTVQnLFxuICAgICdFdXJvcGUvVm9sZ29ncmFkJzogJ1ZTVCcsXG4gICAgJ0FzaWEvVGJpbGlzaSc6ICdHRVQnLFxuICAgICdFdXJvcGUvU2FyYXRvdic6ICdTTFQnLFxuICAgICdJbmRpYW4vTWF1cml0aXVzJzogJ01VVCcsXG4gICAgJ0V1cm9wZS9TYW1hcmEnOiAnU0FNVCcsXG4gICAgJ0FzaWEvQmFrdSc6ICdBWlQnLFxuICAgICdFdXJvcGUvQXN0cmFraGFuJzogJ1NBTVQnLFxuICAgICdBc2lhL0R1YmFpJzogJ0FSQlNUJyxcbiAgICAnQXNpYS9UZWhyYW4nOiAnSURUJyxcbiAgICAnQWZyaWNhL05haXJvYmknOiAnRUFTVCcsXG4gICAgJ0V1cm9wZS9Nb3Njb3cnOiAnTVNLJyxcbiAgICAnRXVyb3BlL01pbnNrJzogJ01TSycsXG4gICAgJ0FzaWEvUml5YWRoJzogJ0FTVCcsXG4gICAgJ0V1cm9wZS9Jc3RhbmJ1bCc6ICdURFQnLFxuICAgICdBc2lhL0JhZ2hkYWQnOiAnQVNUJyxcbiAgICAnQWZyaWNhL1dpbmRob2VrJzogJ05TVCcsXG4gICAgJ0FmcmljYS9Ucmlwb2xpJzogJ0xTVCcsXG4gICAgJ0FmcmljYS9LaGFydG91bSc6ICdFQVNUJyxcbiAgICAnRXVyb3BlL0thbGluaW5ncmFkJzogJ0tTVCcsXG4gICAgJ0FzaWEvSmVydXNhbGVtJzogJ0pEVCcsXG4gICAgJ0V1cm9wZS9LaWV2JzogJ0VFRFQnLFxuICAgICdBZnJpY2EvSm9oYW5uZXNidXJnJzogJ1NBU1QnLFxuICAgICdBc2lhL0hlYnJvbic6ICdFRVQnLFxuICAgICdBc2lhL0RhbWFzY3VzJzogJ1NEVCcsXG4gICAgJ0V1cm9wZS9DaGlzaW5hdSc6ICdHRFQnLFxuICAgICdBZnJpY2EvQ2Fpcm8nOiAnRVNUJyxcbiAgICAnQXNpYS9CZWlydXQnOiAnTUVEVCcsXG4gICAgJ0V1cm9wZS9CdWNoYXJlc3QnOiAnR0RUJyxcbiAgICAnQXNpYS9BbW1hbic6ICdKU1QnLFxuICAgICdBZnJpY2EvTGFnb3MnOiAnRUNUJyxcbiAgICAnRXVyb3BlL1dhcnNhdyc6ICdDRURUJyxcbiAgICAnQWZyaWNhL0Nhc2FibGFuY2EnOiAnTURUJyxcbiAgICAnRXVyb3BlL1BhcmlzJzogJ0NFU1QnLFxuICAgICdFdXJvcGUvQnVkYXBlc3QnOiAnQ0VEVCcsXG4gICAgJ0V1cm9wZS9CZXJsaW4nOiAnV0VEVCcsXG4gICAgJ0FmcmljYS9TYW9fVG9tZSc6ICdHU1QnLFxuICAgICdBdGxhbnRpYy9SZXlramF2aWsnOiAnR1NUJyxcbiAgICAnRXVyb3BlL0xvbmRvbic6ICdHRFQnLFxuICAgICdFdGMvVVRDJzogJ1VUQycsXG4gICAgJ0F0bGFudGljL0F6b3Jlcyc6ICdBRFQnLFxuICAgICdBdGxhbnRpYy9DYXBlX1ZlcmRlJzogJ0NWU1QnLFxuICAgICdFdGMvR01UKzInOiAnTVNUJyxcbiAgICAnQW1lcmljYS9BcmFndWFpbmEnOiAnU0VTVCcsXG4gICAgJ0FtZXJpY2EvU2FvX1BhdWxvJzogJ0VTQVNUJyxcbiAgICAnQW1lcmljYS9DYXllbm5lJzogJ1NFU1QnLFxuICAgICdBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXMnOiAnQVNUJyxcbiAgICAnQW1lcmljYS9OdXVrJzogJ1dHVCcsXG4gICAgJ0FtZXJpY2EvTW9udGV2aWRlbyc6ICdNU1QnLFxuICAgICdBbWVyaWNhL1B1bnRhX0FyZW5hcyc6ICdDTFNUJyxcbiAgICAnQW1lcmljYS9NaXF1ZWxvbic6ICdQTVNUJyxcbiAgICAnQW1lcmljYS9CYWhpYSc6ICdCU1QnLFxuICAgICdBbWVyaWNhL1N0X0pvaG5zJzogJ05TVCcsXG4gICAgJ0FtZXJpY2EvQXN1bmNpb24nOiAnUFJTVCcsXG4gICAgJ0FtZXJpY2EvSGFsaWZheCc6ICdBU1QnLFxuICAgICdBbWVyaWNhL0NhcmFjYXMnOiAnVlNUJyxcbiAgICAnQW1lcmljYS9DdWlhYmEnOiAnQ0JTVCcsXG4gICAgJ0FtZXJpY2EvTGFfUGF6JzogJ1NBV1NUJyxcbiAgICAnQW1lcmljYS9TYW50aWFnbyc6ICdQU1NUJyxcbiAgICAnQW1lcmljYS9Cb2dvdGEnOiAnU1BTVCcsXG4gICAgJ0FtZXJpY2EvQ2FuY3VuJzogJ0VTVCcsXG4gICAgJ0FtZXJpY2EvTmV3X1lvcmsnOiAnRVQnLFxuICAgICdBbWVyaWNhL1BvcnQtYXUtUHJpbmNlJzogJ0VEVCcsXG4gICAgJ0FtZXJpY2EvSGF2YW5hJzogJ0VEVCcsXG4gICAgJ0FtZXJpY2EvSW5kaWFuYS9JbmRpYW5hcG9saXMnOiAnRVNUJyxcbiAgICAnQW1lcmljYS9HcmFuZF9UdXJrJzogJ0VTVCcsXG4gICAgJ0FtZXJpY2EvR3VhdGVtYWxhJzogJ0NBU1QnLFxuICAgICdBbWVyaWNhL0NoaWNhZ28nOiAnQ1QnLFxuICAgICdQYWNpZmljL0Vhc3Rlcic6ICdFQVNUJyxcbiAgICAnQW1lcmljYS9NZXhpY29fQ2l0eSc6ICdDU1QnLFxuICAgICdBbWVyaWNhL1JlZ2luYSc6ICdDQ1NUJyxcbiAgICAnQW1lcmljYS9QaG9lbml4JzogJ01UJyxcbiAgICAnQW1lcmljYS9DaGlodWFodWEnOiAnTURUJyxcbiAgICAnQW1lcmljYS9EZW52ZXInOiAnTVQnLFxuICAgICdBbWVyaWNhL1doaXRlaG9yc2UnOiAnWVNUJyxcbiAgICAnQW1lcmljYS9UaWp1YW5hJzogJ1BTVCcsXG4gICAgJ0V0Yy9HTVQrOCc6ICdVVEMtMDgnLFxuICAgICdBbWVyaWNhL0xvc19BbmdlbGVzJzogJ1BUJyxcbiAgICAnQW1lcmljYS9BbmNob3JhZ2UnOiAnQUsnLFxuICAgICdFdGMvR01UKzknOiAnVVRDLTA5JyxcbiAgICAnUGFjaWZpYy9NYXJxdWVzYXMnOiAnTVNUJyxcbiAgICAnQW1lcmljYS9BZGFrJzogJ0hTVCcsXG4gICAgJ1BhY2lmaWMvSG9ub2x1bHUnOiAnSEFTVCcsXG4gICAgJ0V0Yy9HTVQrMTEnOiAnVVRDLTExJyxcbiAgICAnRXRjL0dNVCsxMic6ICdCSVQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBXaW5kb3dzLXN0eWxlIFwiKFVUQ8KxSEg6TU0pIFBsYWNlXCIgLT4gc2hvcnQgbmFtZSAoSVNULCBCUlQsIGV0Yy4pIHNvIHdlIHNob3cgXCJJU1RcIiBub3QgXCIoKFVUQyswNTozMCkgSW5kaWEpXCIuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBXSU5ET1dTX1RaX0FCQlJfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICcoVVRDLTAzOjAwKSBCcmFzaWxpYSc6ICdCUlQnLFxuICAgICcoVVRDLTAzOjAwKSBCdWVub3MgQWlyZXMnOiAnQVJUJyxcbiAgICAnKFVUQyswNTozMCkgSW5kaWEnOiAnSVNUJyxcbiAgICAnKFVUQyswNTozMCkgQ2hlbm5haSwgS29sa2F0YSwgTXVtYmFpLCBOZXcgRGVsaGknOiAnSVNUJyxcbiAgICAnKFVUQyswMDowMCkgRHVibGluLCBFZGluYnVyZ2gsIExvbmRvbic6ICdHTVQnLFxuICAgICcoVVRDKzAwOjAwKSBNb25yb3ZpYSwgUmV5a2phdmlrJzogJ0dNVCcsXG4gICAgJyhVVEMrMDE6MDApIEFtc3RlcmRhbSwgQmVybGluLCBSb21lLCBTdG9ja2hvbG0nOiAnQ0VUJyxcbiAgICAnKFVUQyswMTowMCkgQnJ1c3NlbHMsIENvcGVuaGFnZW4sIE1hZHJpZCwgUGFyaXMnOiAnQ0VUJyxcbiAgICAnKFVUQyswMjowMCkgQXRoZW5zLCBJc3RhbmJ1bCwgTWluc2snOiAnRUVUJyxcbiAgICAnKFVUQyswMjowMCkgQ2Fpcm8nOiAnRUVUJyxcbiAgICAnKFVUQyswMjowMCkgSmVydXNhbGVtJzogJ0lTVCcsXG4gICAgJyhVVEMrMDM6MDApIE1vc2NvdywgU3QuIFBldGVyc2J1cmcnOiAnTVNLJyxcbiAgICAnKFVUQyswMzowMCkgTmFpcm9iaSc6ICdFQVQnLFxuICAgICcoVVRDKzA0OjAwKSBEdWJhaSc6ICdHU1QnLFxuICAgICcoVVRDKzA1OjAwKSBJc2xhbWFiYWQsIEthcmFjaGknOiAnUEtUJyxcbiAgICAnKFVUQyswNTo0NSkgS2F0aG1hbmR1JzogJ05QVCcsXG4gICAgJyhVVEMrMDY6MDApIERoYWthJzogJ0JTVCcsXG4gICAgJyhVVEMrMDY6MzApIFlhbmdvbiAoUmFuZ29vbiknOiAnTU1UJyxcbiAgICAnKFVUQyswNzowMCkgQmFuZ2tvaywgSGFub2ksIEpha2FydGEnOiAnSUNUJyxcbiAgICAnKFVUQyswODowMCkgQmVpamluZywgQ2hvbmdxaW5nLCBIb25nIEtvbmcsIFVydW1xaSc6ICdDU1QnLFxuICAgICcoVVRDKzA4OjAwKSBLdWFsYSBMdW1wdXIsIFNpbmdhcG9yZSc6ICdTR1QnLFxuICAgICcoVVRDKzA5OjAwKSBPc2FrYSwgU2FwcG9ybywgVG9reW8nOiAnSlNUJyxcbiAgICAnKFVUQyswOTozMCkgQWRlbGFpZGUnOiAnQUNTVCcsXG4gICAgJyhVVEMrMTA6MDApIEJyaXNiYW5lJzogJ0FFU1QnLFxuICAgICcoVVRDKzEwOjAwKSBDYW5iZXJyYSwgTWVsYm91cm5lLCBTeWRuZXknOiAnQUVTVCcsXG4gICAgJyhVVEMrMTI6MDApIEF1Y2tsYW5kLCBXZWxsaW5ndG9uJzogJ05aU1QnLFxuICAgICcoVVRDLTA1OjAwKSBFYXN0ZXJuIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdFVCcsXG4gICAgJyhVVEMtMDY6MDApIENlbnRyYWwgVGltZSAoVVMgJiBDYW5hZGEpJzogJ0NUJyxcbiAgICAnKFVUQy0wNzowMCkgTW91bnRhaW4gVGltZSAoVVMgJiBDYW5hZGEpJzogJ01UJyxcbiAgICAnKFVUQy0wODowMCkgUGFjaWZpYyBUaW1lIChVUyAmIENhbmFkYSknOiAnUFQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBXaW5kb3dzLXN0eWxlIFwiKFVUQ8KxSEg6TU0pIFBsYWNlXCIgLT4gSUFOQSB0aW1lem9uZS5cbiAgICogVGhpcyBwcmV2ZW50cyBJbnRsL0RhdGVQaXBlIGZyb20gZmFsbGluZyBiYWNrIHRvIGJyb3dzZXIgbG9jYWwgdGltZSB3aGVuIGEgV2luZG93cyBsYWJlbCBpcyB1c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgV0lORE9XU19UWl9JQU5BX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnKFVUQy0wMzowMCkgQnJhc2lsaWEnOiAnQW1lcmljYS9TYW9fUGF1bG8nLFxuICAgICcoVVRDLTAzOjAwKSBCdWVub3MgQWlyZXMnOiAnQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzJyxcbiAgICAnKFVUQyswNTozMCkgSW5kaWEnOiAnQXNpYS9Lb2xrYXRhJyxcbiAgICAnKFVUQyswNTozMCkgQ2hlbm5haSwgS29sa2F0YSwgTXVtYmFpLCBOZXcgRGVsaGknOiAnQXNpYS9Lb2xrYXRhJyxcbiAgICAnKFVUQyswMDowMCkgRHVibGluLCBFZGluYnVyZ2gsIExvbmRvbic6ICdFdXJvcGUvTG9uZG9uJyxcbiAgICAnKFVUQyswMDowMCkgTW9ucm92aWEsIFJleWtqYXZpayc6ICdFdGMvVVRDJyxcbiAgICAnKFVUQyswMTowMCkgQW1zdGVyZGFtLCBCZXJsaW4sIFJvbWUsIFN0b2NraG9sbSc6ICdFdXJvcGUvQmVybGluJyxcbiAgICAnKFVUQyswMTowMCkgQnJ1c3NlbHMsIENvcGVuaGFnZW4sIE1hZHJpZCwgUGFyaXMnOiAnRXVyb3BlL1BhcmlzJyxcbiAgICAnKFVUQyswMjowMCkgQXRoZW5zLCBJc3RhbmJ1bCwgTWluc2snOiAnRXVyb3BlL0F0aGVucycsXG4gICAgJyhVVEMrMDI6MDApIENhaXJvJzogJ0FmcmljYS9DYWlybycsXG4gICAgJyhVVEMrMDI6MDApIEplcnVzYWxlbSc6ICdBc2lhL0plcnVzYWxlbScsXG4gICAgJyhVVEMrMDM6MDApIE1vc2NvdywgU3QuIFBldGVyc2J1cmcnOiAnRXVyb3BlL01vc2NvdycsXG4gICAgJyhVVEMrMDM6MDApIE5haXJvYmknOiAnQWZyaWNhL05haXJvYmknLFxuICAgICcoVVRDKzA0OjAwKSBEdWJhaSc6ICdBc2lhL0R1YmFpJyxcbiAgICAnKFVUQyswNTowMCkgSXNsYW1hYmFkLCBLYXJhY2hpJzogJ0FzaWEvS2FyYWNoaScsXG4gICAgJyhVVEMrMDU6NDUpIEthdGhtYW5kdSc6ICdBc2lhL0thdGhtYW5kdScsXG4gICAgJyhVVEMrMDY6MDApIERoYWthJzogJ0FzaWEvRGhha2EnLFxuICAgICcoVVRDKzA2OjMwKSBZYW5nb24gKFJhbmdvb24pJzogJ0FzaWEvWWFuZ29uJyxcbiAgICAnKFVUQyswNzowMCkgQmFuZ2tvaywgSGFub2ksIEpha2FydGEnOiAnQXNpYS9CYW5na29rJyxcbiAgICAnKFVUQyswODowMCkgQmVpamluZywgQ2hvbmdxaW5nLCBIb25nIEtvbmcsIFVydW1xaSc6ICdBc2lhL1NoYW5naGFpJyxcbiAgICAnKFVUQyswODowMCkgS3VhbGEgTHVtcHVyLCBTaW5nYXBvcmUnOiAnQXNpYS9TaW5nYXBvcmUnLFxuICAgICcoVVRDKzA5OjAwKSBPc2FrYSwgU2FwcG9ybywgVG9reW8nOiAnQXNpYS9Ub2t5bycsXG4gICAgJyhVVEMrMDk6MzApIEFkZWxhaWRlJzogJ0F1c3RyYWxpYS9BZGVsYWlkZScsXG4gICAgJyhVVEMrMTA6MDApIEJyaXNiYW5lJzogJ0F1c3RyYWxpYS9CcmlzYmFuZScsXG4gICAgJyhVVEMrMTA6MDApIENhbmJlcnJhLCBNZWxib3VybmUsIFN5ZG5leSc6ICdBdXN0cmFsaWEvU3lkbmV5JyxcbiAgICAnKFVUQysxMjowMCkgQXVja2xhbmQsIFdlbGxpbmd0b24nOiAnUGFjaWZpYy9BdWNrbGFuZCcsXG4gICAgJyhVVEMtMDU6MDApIEVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpJzogJ0FtZXJpY2EvTmV3X1lvcmsnLFxuICAgICcoVVRDLTA2OjAwKSBDZW50cmFsIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdBbWVyaWNhL0NoaWNhZ28nLFxuICAgICcoVVRDLTA3OjAwKSBNb3VudGFpbiBUaW1lIChVUyAmIENhbmFkYSknOiAnQW1lcmljYS9EZW52ZXInLFxuICAgICcoVVRDLTA4OjAwKSBQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdBbWVyaWNhL0xvc19BbmdlbGVzJyxcbiAgfTtcblxuICBwcml2YXRlIG5vcm1hbGl6ZVRvSWFuYVRpbWVab25lKFxuICAgIHR6OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgc2Vzc2lvbklhbmFUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByYXcgPSAodHogPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuIHNlc3Npb25JYW5hVGltZVpvbmUgfHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdXNlciBwYXNzZXMgdGhlIHNlc3Npb24ncyBXaW5kb3dzIGlkL25hbWUsIHByZWZlciB0aGUgc2Vzc2lvbidzIGtub3duIElBTkEgem9uZS5cbiAgICBpZiAoc2Vzc2lvbklhbmFUaW1lWm9uZSAmJiByYXcudG9Mb3dlckNhc2UoKSA9PT0gU3RyaW5nKHNlc3Npb25JYW5hVGltZVpvbmUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gc2Vzc2lvbklhbmFUaW1lWm9uZTtcbiAgICB9XG5cbiAgICBpZiAocmF3LnN0YXJ0c1dpdGgoJyhVVEMnKSB8fCByYXcuc3RhcnRzV2l0aCgnKHV0YycpKSB7XG4gICAgICBjb25zdCBtYXAgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQ2hhdERyYXdlckNvbXBvbmVudCkuV0lORE9XU19UWl9JQU5BX01BUDtcbiAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG1hcCkuZmluZCgoaykgPT4gay50b0xvd2VyQ2FzZSgpID09PSByYXcudG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAoa2V5KSByZXR1cm4gbWFwW2tleV07XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGFzc3VtZSBpdCBtYXkgYWxyZWFkeSBiZSBJQU5BIChlLmcuIFwiQW1lcmljYS9TYW9fUGF1bG9cIilcbiAgICByZXR1cm4gcmF3O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aW1lem9uZSBhYmJyZXZpYXRpb24gKGUuZy4gSVNULCBCUlQsIFNBU1QpIGZvciBkaXNwbGF5IGFmdGVyIHRoZSB0aW1lLlxuICAgKiBVc2VzIElBTkEgbWFwIGFuZCBXaW5kb3dzLXN0eWxlIG1hcCBzbyB3ZSBzaG93IFwiQlJUXCIgLyBcIklTVFwiIGluc3RlYWQgb2YgXCIoKFVUQy0wMzowMCkgQnJhc2lsaWEpXCIuXG4gICAqIE9ubHkgY29uc3VsdHMgV2luZG93cyBtYXAgd2hlbiBpbnB1dCBsb29rcyBsaWtlIFwiKFVUQy4uLilcIiBzbyBleGlzdGluZyBJQU5BL0ludGwgYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuICAgKi9cbiAgZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24odHo6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0eiB8fCAhU3RyaW5nKHR6KS50cmltKCkpIHJldHVybiAnJztcbiAgICBjb25zdCB0eklkID0gU3RyaW5nKHR6KS50cmltKCk7XG4gICAgaWYgKHR6SWQuc3RhcnRzV2l0aCgnKFVUQycpIHx8IHR6SWQuc3RhcnRzV2l0aCgnKHV0YycpKSB7XG4gICAgICBjb25zdCB3aW5NYXAgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQ2hhdERyYXdlckNvbXBvbmVudClcbiAgICAgICAgLldJTkRPV1NfVFpfQUJCUl9NQVA7XG4gICAgICBjb25zdCB3aW5LZXkgPSBPYmplY3Qua2V5cyh3aW5NYXApLmZpbmQoXG4gICAgICAgIChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IHR6SWQudG9Mb3dlckNhc2UoKSxcbiAgICAgICk7XG4gICAgICBpZiAod2luS2V5KSByZXR1cm4gd2luTWFwW3dpbktleV07XG4gICAgfVxuICAgIGNvbnN0IG1hcCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBDaGF0RHJhd2VyQ29tcG9uZW50KS5UWl9BQkJSX01BUDtcbiAgICBsZXQgbWFwcGVkID0gbWFwW3R6SWRdO1xuICAgIGlmICghbWFwcGVkKSB7XG4gICAgICBjb25zdCBrZXlMb3dlciA9IHR6SWQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gT2JqZWN0LmVudHJpZXMobWFwKS5maW5kKFxuICAgICAgICAoW2tdKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleUxvd2VyLFxuICAgICAgKTtcbiAgICAgIGlmIChlbnRyeSkgbWFwcGVkID0gZW50cnlbMV07XG4gICAgfVxuICAgIGlmIChtYXBwZWQpIHJldHVybiBtYXBwZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgdGltZVpvbmU6IHR6SWQsXG4gICAgICAgIHRpbWVab25lTmFtZTogJ3Nob3J0JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgpKTtcbiAgICAgIGNvbnN0IHR6UGFydCA9IHBhcnRzLmZpbmQoKHApID0+IHAudHlwZSA9PT0gJ3RpbWVab25lTmFtZScpO1xuICAgICAgY29uc3QgdmFsdWUgPSAodHpQYXJ0Py52YWx1ZSA/PyAnJykudHJpbSgpO1xuICAgICAgaWYgKHZhbHVlICYmIC9eR01UWystXVxcZC8udGVzdCh2YWx1ZSkpIHJldHVybiAnJztcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXNUZXh0RnJvbVNlc3Npb25Sb2xlcyhzZXNzaW9uUm9sZXM6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25Sb2xlcykgfHwgc2Vzc2lvblJvbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignWW91IGNhbiBqb2luIHRoaXMgbWVldGluZycpIHx8XG4gICAgICAgICdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBzZXNzaW9uUm9sZXNbMF07XG4gICAgaWYgKHR5cGVvZiBmaXJzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoZmlyc3QpXG4gICAgICAgIC5yZXBsYWNlKC9eXFxzKi1cXHMqLywgJycpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuICAgIGlmIChmaXJzdCAmJiB0eXBlb2YgZmlyc3QgPT09ICdvYmplY3QnICYmIChmaXJzdCBhcyBhbnkpLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKChmaXJzdCBhcyBhbnkpLmRlc2NyaXB0aW9uKS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJykgfHxcbiAgICAgICdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJ1xuICAgICk7XG4gIH1cblxuICBtYXBTZXNzaW9uc1RvQ2FyZERhdGEoc2Vzc2lvbnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZXNzaW9ucykpIHJldHVybiBbXTtcbiAgICBjb25zdCB1c2VyVGltZXpvbmUgPVxuICAgICAgdGhpcy50aW1lem9uZSAmJiBTdHJpbmcodGhpcy50aW1lem9uZSkudHJpbSgpXG4gICAgICAgID8gU3RyaW5nKHRoaXMudGltZXpvbmUpLnRyaW0oKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc2Vzc2lvbnMubWFwKChyYXc6IGFueSkgPT4ge1xuICAgICAgLy8gZ2V0X215X2FnZW5kYSByZXR1cm5zIHdyYXBwZXIgeyBpZCwgc2NoZWR1bGUsIGlzU2Vzc2lvbiB9OyBub3JtYWxpemUgdG8gaW5uZXIgc2NoZWR1bGUgb2JqZWN0XG4gICAgICBjb25zdCBzID0gcmF3ICYmIHJhdy5zY2hlZHVsZSA/IHJhdy5zY2hlZHVsZSA6IHJhdztcbiAgICAgIGNvbnN0IHNlc3Npb25Uek9iaiA9IHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnID8gKHMgYXMgYW55KS50aW1lWm9uZSA6IG51bGw7XG4gICAgICBjb25zdCBzZXNzaW9uSWFuYVRpbWVab25lID1cbiAgICAgICAgc2Vzc2lvblR6T2JqICYmIHR5cGVvZiBzZXNzaW9uVHpPYmogPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBTdHJpbmcoc2Vzc2lvblR6T2JqLnN1YlRpbWVab25lID8/ICcnKS50cmltKClcbiAgICAgICAgICA6ICcnO1xuICAgICAgLy8gU3VwcG9ydCBib3RoIGRhdGVUaW1lUmFuZ2UgKHN0cmluZykgYW5kIGFjdHVhbERhdGVUaW1lUmFuZ2UgKG9iamVjdCB3aXRoIHN0YXJ0L2VuZClcbiAgICAgIGNvbnN0IHdoZW5SYXcgPSBzLmRhdGVUaW1lUmFuZ2UgPz8gcy5hY3R1YWxEYXRlVGltZVJhbmdlID8/ICcnO1xuICAgICAgLy8gUHJlZmVyIHVzZXIncyBzZWxlY3RlZCB0aW1lem9uZTsgb3RoZXJ3aXNlIHVzZSBzZXNzaW9uJ3MgSUFOQSB6b25lIChzdWJUaW1lWm9uZSkgZm9yIGNvcnJlY3QgZGF0ZS9kYXkuXG4gICAgICBjb25zdCBmb3JtYXR0aW5nVGltZVpvbmUgPSB0aGlzLm5vcm1hbGl6ZVRvSWFuYVRpbWVab25lKFxuICAgICAgICB1c2VyVGltZXpvbmUsXG4gICAgICAgIHNlc3Npb25JYW5hVGltZVpvbmUsXG4gICAgICApO1xuICAgICAgY29uc3Qgd2hlbkZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2Vzc2lvbldoZW4oXG4gICAgICAgIHdoZW5SYXcsXG4gICAgICAgIGZvcm1hdHRpbmdUaW1lWm9uZSB8fCB1bmRlZmluZWQsXG4gICAgICApO1xuICAgICAgLy8gT25seSBzZXQgc3RhdHVzVGV4dCB3aGVuIHNlc3Npb24gaGFzIGpvaW4vd2F0Y2ggcm9sZXMgKHNvIHdlIGRvbid0IHNob3cgXCJZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nXCIgd2hlbiB0aGVyZSBhcmUgbm8gYnV0dG9ucylcbiAgICAgIGNvbnN0IGhhc0pvaW5XYXRjaFJvbGUgPVxuICAgICAgICBBcnJheS5pc0FycmF5KHMuc2Vzc2lvblJvbGVzKSAmJlxuICAgICAgICBzLnNlc3Npb25Sb2xlcy5zb21lKChyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgICAgIHIgJiYgdHlwZW9mIHIgPT09ICdvYmplY3QnICYmIHIuc2Vzc2lvblJvbGVOYW1lXG4gICAgICAgICAgICAgID8gU3RyaW5nKHIuc2Vzc2lvblJvbGVOYW1lKS50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICA6IFN0cmluZyhyID8/ICcnKVxuICAgICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICdqb2luJyB8fCBuYW1lID09PSAnd2F0Y2gnO1xuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBoYXNKb2luV2F0Y2hSb2xlXG4gICAgICAgID8gdGhpcy5nZXRTdGF0dXNUZXh0RnJvbVNlc3Npb25Sb2xlcyhzLnNlc3Npb25Sb2xlcylcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHNlc3Npb25UaW1lWm9uZUxhYmVsID1cbiAgICAgICAgc2Vzc2lvblR6T2JqICE9IG51bGxcbiAgICAgICAgICA/IHR5cGVvZiBzZXNzaW9uVHpPYmogPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IFN0cmluZyhcbiAgICAgICAgICAgICAgICBzZXNzaW9uVHpPYmoubmFtZSA/P1xuICAgICAgICAgICAgICAgICAgc2Vzc2lvblR6T2JqLmlkID8/XG4gICAgICAgICAgICAgICAgICBzZXNzaW9uVHpPYmouc3ViVGltZVpvbmUgPz9cbiAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICApLnRyaW0oKVxuICAgICAgICAgICAgOiBTdHJpbmcoc2Vzc2lvblR6T2JqKS50cmltKClcbiAgICAgICAgICA6ICcnO1xuICAgICAgLy8gVXNlIGFuIElBTkEgdGltZXpvbmUgZm9yIGZvcm1hdHRpbmc7IHVzZSBhIHNlcGFyYXRlIGxhYmVsIGZvciBVSSBkaXNwbGF5LlxuICAgICAgY29uc3QgZGlzcGxheVRpbWVab25lRm9yRm9ybWF0ID0gZm9ybWF0dGluZ1RpbWVab25lO1xuICAgICAgY29uc3QgZGlzcGxheVRpbWVab25lTGFiZWwgPSAodXNlclRpbWV6b25lIHx8IHNlc3Npb25UaW1lWm9uZUxhYmVsIHx8ICcnKS50cmltKCk7XG4gICAgICBjb25zdCB0ekFiYnIgPSBkaXNwbGF5VGltZVpvbmVGb3JGb3JtYXRcbiAgICAgICAgPyB0aGlzLmdldFRpbWV6b25lQWJicmV2aWF0aW9uKGRpc3BsYXlUaW1lWm9uZUZvckZvcm1hdClcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHdoZW5XaXRoVHogPVxuICAgICAgICB3aGVuRm9ybWF0dGVkIHx8ICh0eXBlb2Ygd2hlblJhdyA9PT0gJ29iamVjdCcgPyAnJyA6IFN0cmluZyh3aGVuUmF3KSk7XG4gICAgICBjb25zdCB3aGVuRGlzcGxheSA9IHR6QWJiclxuICAgICAgICA/IGAke3doZW5XaXRoVHp9ICgke3R6QWJicn0pYC50cmltKClcbiAgICAgICAgOiB3aGVuV2l0aFR6O1xuICAgICAgY29uc3QgZGF0ZUJhZGdlID0gdGhpcy5nZXRTZXNzaW9uRGF0ZUJhZGdlKFxuICAgICAgICB3aGVuUmF3LFxuICAgICAgICBkaXNwbGF5VGltZVpvbmVGb3JGb3JtYXQgfHwgdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICAgIGxldCB0aW1lUmFuZ2UgPSB0aGlzLmZvcm1hdFNlc3Npb25UaW1lUmFuZ2UoXG4gICAgICAgIHdoZW5SYXcsXG4gICAgICAgIGRpc3BsYXlUaW1lWm9uZUZvckZvcm1hdCB8fCB1bmRlZmluZWQsXG4gICAgICApO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdHJpbmcocy5kZXNjcmlwdGlvbiA/PyBzLmFic3RyYWN0ID8/ICcnKS50cmltKCk7XG4gICAgICBjb25zdCBzZXNzaW9uVHlwZVJhdyA9XG4gICAgICAgIHMuc2Vzc2lvblR5cGUgIT0gbnVsbFxuICAgICAgICAgID8gdHlwZW9mIHMuc2Vzc2lvblR5cGUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IChzLnNlc3Npb25UeXBlLm5hbWUgPz8gcy5zZXNzaW9uVHlwZS50aXRsZSA/PyAnJylcbiAgICAgICAgICAgIDogcy5zZXNzaW9uVHlwZVxuICAgICAgICAgIDogJyc7XG4gICAgICBjb25zdCBtZWV0aW5nVHlwZSA9IFN0cmluZyhcbiAgICAgICAgc2Vzc2lvblR5cGVSYXcgPz8gcy50eXBlID8/IHMubWVldGluZ1R5cGUgPz8gJycsXG4gICAgICApLnRyaW0oKTtcbiAgICAgIGNvbnN0IHNlc3Npb25UeXBlTGFiZWwgPSB0aGlzLmlzVW5FdmVudFxuICAgICAgICA/IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ01lZXRpbmcgdHlwZScpIHx8ICdNZWV0aW5nIHR5cGUnXG4gICAgICAgIDogdGhpcy5nZXRUcmFuc2xhdGlvbignU2Vzc2lvbiB0eXBlJykgfHwgJ1Nlc3Npb24gdHlwZSc7XG4gICAgICAvLyBTYW1lIGxvZ2ljIGFzIGJlZm9yZSBkZXNpZ24gdXBkYXRlOiBwcmVmZXIgdHogYWJicmV2aWF0aW9uIChlLmcuIEVTVCksIGVsc2Ugc2hvdyBkaXNwbGF5IHRpbWV6b25lIHN0cmluZyAoZS5nLiBcIihVVEMtMDM6MDApIEJyYXNpbGlhKVwiKVxuICAgICAgY29uc3QgdGltZVpvbmVEaXNwbGF5ID0gdHpBYmJyIHx8IGRpc3BsYXlUaW1lWm9uZUxhYmVsIHx8ICcnO1xuICAgICAgLy8gV2hlbiBBUEkgcmV0dXJucyBcIlN0YXJ0OiBOL0EsIEVuZDogTi9BLCBUaW1lWm9uZTogLi4uXCIgKHN0cmluZyksIHNob3cgYXQgbGVhc3QgdGltZXpvbmVcbiAgICAgIGlmICghdGltZVJhbmdlICYmIChkaXNwbGF5VGltZVpvbmVGb3JGb3JtYXQgfHwgZGlzcGxheVRpbWVab25lTGFiZWwpKSB7XG4gICAgICAgIHRpbWVSYW5nZSA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ05vdCBzcGVjaWZpZWQnKSB8fCAnTm90IHNwZWNpZmllZCc7XG4gICAgICB9XG4gICAgICAvLyBUaW1lIHJhbmdlIHdpdGggdGltZXpvbmUgaW4gcGFyZW50aGVzZXMgd2hlbiBhdmFpbGFibGUgKHNhbWUgYXMgb2xkIHdoZW5EaXNwbGF5IGZvcm1hdClcbiAgICAgIGNvbnN0IHRpbWVSYW5nZVdpdGhUeiA9IHRpbWVab25lRGlzcGxheVxuICAgICAgICA/IGAke3RpbWVSYW5nZX0gKCR7dGltZVpvbmVEaXNwbGF5fSlgLnRyaW0oKVxuICAgICAgICA6IHRpbWVSYW5nZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBTdHJpbmcocy50aXRsZSA/PyAnJykudHJpbSgpLFxuICAgICAgICBvcmdhbml6ZXI6IFN0cmluZyhzLm9yZ2FuaXplciA/PyAnJykudHJpbSgpLFxuICAgICAgICByb29tOiBTdHJpbmcocy5yb29tTmFtZSA/PyAnJykudHJpbSgpLFxuICAgICAgICB3aGVuOiB3aGVuRGlzcGxheSxcbiAgICAgICAgdGltZVJhbmdlLFxuICAgICAgICB0aW1lUmFuZ2VXaXRoVHo6IHRpbWVSYW5nZSA/IHRpbWVSYW5nZVdpdGhUeiA6IHRpbWVab25lRGlzcGxheSB8fCAnJyxcbiAgICAgICAgZGF0ZURheTogZGF0ZUJhZGdlLmRheSxcbiAgICAgICAgZGF0ZU1vbnRoOiBkYXRlQmFkZ2UubW9udGgsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lRm9yRm9ybWF0IHx8IGRpc3BsYXlUaW1lWm9uZUxhYmVsLFxuICAgICAgICB0aW1lWm9uZURpc3BsYXksXG4gICAgICAgIG1lZXRpbmdUeXBlLFxuICAgICAgICBzZXNzaW9uVHlwZUxhYmVsLFxuICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICBzZXNzaW9uOiBzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNlc3Npb25JYW5hVGltZVpvbmUoc2Vzc2lvbjogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbiAmJiBzZXNzaW9uLnNjaGVkdWxlID8gc2Vzc2lvbi5zY2hlZHVsZSA6IHNlc3Npb247XG4gICAgY29uc3QgdHpPYmogPSBzICYmIHR5cGVvZiBzID09PSAnb2JqZWN0JyA/IChzIGFzIGFueSkudGltZVpvbmUgOiBudWxsO1xuICAgIGNvbnN0IHNlc3Npb25JYW5hID1cbiAgICAgIHR6T2JqICYmIHR5cGVvZiB0ek9iaiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBTdHJpbmcodHpPYmouc3ViVGltZVpvbmUgPz8gJycpLnRyaW0oKVxuICAgICAgICA6ICcnO1xuICAgIGNvbnN0IHVzZXJUeiA9XG4gICAgICB0aGlzLnRpbWV6b25lICYmIFN0cmluZyh0aGlzLnRpbWV6b25lKS50cmltKClcbiAgICAgICAgPyBTdHJpbmcodGhpcy50aW1lem9uZSkudHJpbSgpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVRvSWFuYVRpbWVab25lKHVzZXJUeiwgc2Vzc2lvbklhbmEpIHx8ICdVVEMnO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0U3BlYWtlcklkc0Zyb21TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzOiBhbnlbXSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2Vzc2lvbkNhcmRzKSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNhcmQgb2Ygc2Vzc2lvbkNhcmRzKSB7XG4gICAgICBjb25zdCByYXcgPSBjYXJkPy5zZXNzaW9uPy5zcGVha2VycztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiByYXcpIHtcbiAgICAgICAgICBjb25zdCBzaWQgPSBTdHJpbmcoaWQgPz8gJycpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoc2lkKSBpZHMucHVzaChzaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoaWRzKSk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFNwZWFrZXJzVG9TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZXNzaW9uQ2FyZHMpKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBjYXJkIG9mIHNlc3Npb25DYXJkcykge1xuICAgICAgY29uc3Qgc3BlYWtlcklkczogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGNhcmQ/LnNlc3Npb24/LnNwZWFrZXJzKVxuICAgICAgICA/IGNhcmQuc2Vzc2lvbi5zcGVha2Vyc1xuICAgICAgICAgICAgLm1hcCgoeDogYW55KSA9PiBTdHJpbmcoeCA/PyAnJykudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICA6IFtdO1xuICAgICAgY29uc3Qgc3BlYWtlcnNMaXN0ID0gc3BlYWtlcklkc1xuICAgICAgICAubWFwKChpZCkgPT4gdGhpcy5zcGVha2Vyc1tpZF0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBjYXJkLnNwZWFrZXJzTGlzdCA9IHNwZWFrZXJzTGlzdDtcbiAgICAgIGlmIChjYXJkPy5zZXNzaW9uICYmIHR5cGVvZiBjYXJkLnNlc3Npb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNhcmQuc2Vzc2lvbi5zcGVha2Vyc0xpc3QgPSBzcGVha2Vyc0xpc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVTcGVha2Vyc0ZvclNlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHM6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5jb2xsZWN0U3BlYWtlcklkc0Zyb21TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzKTtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgbWlzc2luZyA9IGlkcy5maWx0ZXIoXG4gICAgICAoaWQpID0+ICF0aGlzLnNwZWFrZXJzW2lkXSAmJiAhdGhpcy5yZXF1ZXN0ZWRTcGVha2VySWRzLmhhcyhpZCksXG4gICAgKTtcbiAgICBpZiAobWlzc2luZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtaXNzaW5nLmZvckVhY2goKGlkKSA9PiB0aGlzLnJlcXVlc3RlZFNwZWFrZXJJZHMuYWRkKGlkKSk7XG4gICAgdGhpcy5nZXRTcGVha2Vyc0J5U3RhZmZJZHMobWlzc2luZykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5hdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIC8vIEJlc3QgZWZmb3J0OiBzdGlsbCBhdHRhY2ggd2hhdCB3ZSBoYXZlIGNhY2hlZFxuICAgICAgICB0aGlzLmF0dGFjaFNwZWFrZXJzVG9TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3BlYWtlclBob3RvVXJsKHNwZWFrZXI6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghc3BlYWtlcikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICAgIHNwZWFrZXIucGhvdG8sXG4gICAgICBzcGVha2VyLnBob3RvUGF0aCxcbiAgICAgIHNwZWFrZXIuYXZhdGFyVXJsLFxuICAgICAgc3BlYWtlci5wcm9maWxlSW1hZ2VVcmwsXG4gICAgICBzcGVha2VyLnByb2ZpbGVJbWFnZSxcbiAgICAgIHNwZWFrZXIucHJvZmlsZVBpY3R1cmUsXG4gICAgICBzcGVha2VyLmltYWdlVXJsLFxuICAgICAgc3BlYWtlci5pbWFnZSxcbiAgICBdO1xuICAgIGNvbnN0IHVybCA9IGNhbmRpZGF0ZXMuZmluZCgodikgPT4gdiAhPSBudWxsICYmIFN0cmluZyh2KS50cmltKCkgIT09ICcnKTtcbiAgICByZXR1cm4gdXJsID8gU3RyaW5nKHVybCkudHJpbSgpIDogbnVsbDtcbiAgfVxuXG4gIGhhc1Nlc3Npb25DYXJkU3BlYWtlcnMoc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxpc3QgPVxuICAgICAgc2Vzc2lvbkNhcmQ/LnNwZWFrZXJzTGlzdCB8fCBzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnNMaXN0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpICYmIGxpc3QubGVuZ3RoID4gMCkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgaWRzID0gc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LnNwZWFrZXJzO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGlkcykgJiYgaWRzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXRTcGVha2VyRGlzcGxheU5hbWUoc3BlYWtlcjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXNwZWFrZXIpIHJldHVybiAnJztcbiAgICBpZiAoc3BlYWtlci5uYW1lICE9IG51bGwgJiYgU3RyaW5nKHNwZWFrZXIubmFtZSkudHJpbSgpICE9PSAnJylcbiAgICAgIHJldHVybiBTdHJpbmcoc3BlYWtlci5uYW1lKS50cmltKCk7XG4gICAgY29uc3QgZmlyc3QgPVxuICAgICAgc3BlYWtlci5maXJzdE5hbWUgIT0gbnVsbCA/IFN0cmluZyhzcGVha2VyLmZpcnN0TmFtZSkudHJpbSgpIDogJyc7XG4gICAgY29uc3QgbGFzdCA9XG4gICAgICBzcGVha2VyLmxhc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoc3BlYWtlci5sYXN0TmFtZSkudHJpbSgpIDogJyc7XG4gICAgcmV0dXJuIGAke2ZpcnN0fSAke2xhc3R9YC50cmltKCk7XG4gIH1cblxuICBnZXRTcGVha2VySW5pdGlhbHMoc3BlYWtlcjogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTcGVha2VyRGlzcGxheU5hbWUoc3BlYWtlcik7XG4gICAgaWYgKG5hbWUpIHJldHVybiB0aGlzLmdldEF0dGVuZGVlSW5pdGlhbHMobmFtZSk7XG4gICAgY29uc3QgaWQgPSBzcGVha2VyPy5pZCAhPSBudWxsID8gU3RyaW5nKHNwZWFrZXIuaWQpIDogJyc7XG4gICAgcmV0dXJuIGlkID8gaWQuc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKSA6ICc/JztcbiAgfVxuXG4gIG1hcEF0dGVuZGVlc1RvQ2FyZERhdGEoYXR0ZW5kZWVzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXR0ZW5kZWVzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhdHRlbmRlZXMubWFwKChhOiBhbnkpID0+ICh7XG4gICAgICBuYW1lOiBTdHJpbmcoYS5uYW1lID8/ICcnKS50cmltKCksXG4gICAgICBjb21wYW55OlxuICAgICAgICBhLmNvbXBhbnkgIT0gbnVsbCAmJiBTdHJpbmcoYS5jb21wYW55KS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5jb21wYW55KS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBqb2JUaXRsZTpcbiAgICAgICAgYS5qb2JUaXRsZSAhPSBudWxsICYmIFN0cmluZyhhLmpvYlRpdGxlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5qb2JUaXRsZSkudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgcGhvdG86XG4gICAgICAgIGEucGhvdG8gIT0gbnVsbCAmJiBTdHJpbmcoYS5waG90bykudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEucGhvdG8pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGlkOiBhLmlkID8/IGEudXNlcklkID8/IGEuX2lkID8/IGEuYXR0ZW5kZWVJZCA/PyB1bmRlZmluZWQsXG4gICAgICBpbnRlcmVzdHM6XG4gICAgICAgIGEuaW50ZXJlc3RzICE9IG51bGwgJiYgU3RyaW5nKGEuaW50ZXJlc3RzKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5pbnRlcmVzdHMpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBhLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKGEuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmRlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICB1c2VyVmlkZW9zTW9kZWw6IGEudXNlclZpZGVvc01vZGVsXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdXJsOlxuICAgICAgICAgICAgICBhLnVzZXJWaWRlb3NNb2RlbD8udXJsICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgU3RyaW5nKGEudXNlclZpZGVvc01vZGVsLnVybCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgID8gU3RyaW5nKGEudXNlclZpZGVvc01vZGVsLnVybCkudHJpbSgpXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgdGh1bWJuYWlsOlxuICAgICAgICAgICAgICBhLnVzZXJWaWRlb3NNb2RlbD8udGh1bWJuYWlsICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgU3RyaW5nKGEudXNlclZpZGVvc01vZGVsLnRodW1ibmFpbCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgID8gU3RyaW5nKGEudXNlclZpZGVvc01vZGVsLnRodW1ibmFpbCkudHJpbSgpXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgIH0pKTtcbiAgfVxuXG4gIG1hcFNwZWFrZXJzVG9DYXJkRGF0YShzcGVha2VyczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNwZWFrZXJzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBzcGVha2Vycy5tYXAoKHM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmF3RGVzYyA9XG4gICAgICAgIHMuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcocy5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKHMuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcmF3RGVzY1xuICAgICAgICA/IC88W2Etel1bXFxzXFxTXSo+L2kudGVzdChyYXdEZXNjKVxuICAgICAgICAgID8gdGhpcy5zdHJpcEh0bWwocmF3RGVzYylcbiAgICAgICAgICA6IHJhd0Rlc2NcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgcmF3VGl0bGUgPSBzLnRpdGxlID8/IHMuam9iVGl0bGU7XG4gICAgICBjb25zdCBqb2JUaXRsZSA9XG4gICAgICAgIHJhd1RpdGxlICE9IG51bGwgJiYgU3RyaW5nKHJhd1RpdGxlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocmF3VGl0bGUpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHRoaXMuZ2V0U3BlYWtlckRpc3BsYXlOYW1lKHMpLFxuICAgICAgICBjb21wYW55OlxuICAgICAgICAgIHMuY29tcGFueSAhPSBudWxsICYmIFN0cmluZyhzLmNvbXBhbnkpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHMuY29tcGFueSkudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGpvYlRpdGxlLFxuICAgICAgICBwaG90bzogdGhpcy5nZXRTcGVha2VyUGhvdG9VcmwocyksXG4gICAgICAgIGlkOiBzLmlkID8/IHMudXNlcklkID8/IHMuX2lkID8/IHMuc3BlYWtlcklkID8/IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJlc3RzOlxuICAgICAgICAgIHMuaW50ZXJlc3RzICE9IG51bGwgJiYgU3RyaW5nKHMuaW50ZXJlc3RzKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhzLmludGVyZXN0cykudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB1c2VyVmlkZW9zTW9kZWw6IHMudXNlclZpZGVvc01vZGVsXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHVybDpcbiAgICAgICAgICAgICAgICBzLnVzZXJWaWRlb3NNb2RlbD8udXJsICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBTdHJpbmcocy51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICB0aHVtYm5haWw6XG4gICAgICAgICAgICAgICAgcy51c2VyVmlkZW9zTW9kZWw/LnRodW1ibmFpbCAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnRodW1ibmFpbCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcocy51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IG51bGwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgbWFwU3BvbnNvcnNUb0NhcmREYXRhKHNwb25zb3JzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BvbnNvcnMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHNwb25zb3JzLm1hcCgoczogYW55KSA9PiB7XG4gICAgICBjb25zdCByYXdEZXNjID1cbiAgICAgICAgcy5ib290aERlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKHMuYm9vdGhEZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKHMuYm9vdGhEZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByYXdEZXNjXG4gICAgICAgID8gLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHJhd0Rlc2MpXG4gICAgICAgICAgPyB0aGlzLnN0cmlwSHRtbChyYXdEZXNjKVxuICAgICAgICAgIDogcmF3RGVzY1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCB1cmxTbHVnID0gcy51cmwgPz8gcy5ib290aFVybCA/PyAocy5ib290aElEICE9IG51bGwgPyBTdHJpbmcocy5ib290aElEKSA6IG51bGwpID8/IChzLmJvb3RoSWQgIT0gbnVsbCA/IFN0cmluZyhzLmJvb3RoSWQpIDogbnVsbCk7XG4gICAgICBjb25zdCBsb2dvVXJsID1cbiAgICAgICAgcy5sb2dvVXJsICE9IG51bGwgJiYgU3RyaW5nKHMubG9nb1VybCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKHMubG9nb1VybCkudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcy5uYW1lICE9IG51bGwgPyBTdHJpbmcocy5uYW1lKS50cmltKCkgOiAnJyxcbiAgICAgICAgd2Vic2l0ZTogcy53ZWJzaXRlICE9IG51bGwgJiYgU3RyaW5nKHMud2Vic2l0ZSkudHJpbSgpICE9PSAnJyA/IFN0cmluZyhzLndlYnNpdGUpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGNhdGVnb3J5OiBzLmNhdGVnb3J5ICE9IG51bGwgPyBTdHJpbmcocy5jYXRlZ29yeSkudHJpbSgpIDogbnVsbCxcbiAgICAgICAgYm9vdGhJRDogcy5ib290aElEID8/IHMuYm9vdGhJZCA/PyBudWxsLFxuICAgICAgICBib290aFRpdGxlOiBzLmJvb3RoVGl0bGUgIT0gbnVsbCA/IFN0cmluZyhzLmJvb3RoVGl0bGUpLnRyaW0oKSA6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gbnVsbCxcbiAgICAgICAgLyoqIEJvb3RoIFVSTCBzbHVnIGZvciByb3V0aW5nIHRvIGRldGFpbCBwYWdlIChlLmcuIGV2ZW50cy86ZXZlbnRVcmwvc3BvbnNvcnMvYm9vdGhzLzp1cmwpLiAqL1xuICAgICAgICB1cmw6IHVybFNsdWcgIT0gbnVsbCA/IFN0cmluZyh1cmxTbHVnKS50cmltKCkgOiBudWxsLFxuICAgICAgICBsb2dvVXJsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZ2V0X2V2ZW50X2Jvb3RocyByZXN1bHRzIGludG8gdGhlIHNhbWUgc2hhcGUgdXNlZCBieSBzcG9uc29yIGNhcmRzLlxuICAgKi9cbiAgbWFwQm9vdGhzVG9DYXJkRGF0YShib290aHM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShib290aHMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGJvb3Rocy5tYXAoKGI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmF3RGVzYyA9XG4gICAgICAgIGIuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcoYi5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGIuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcmF3RGVzY1xuICAgICAgICA/IC88W2Etel1bXFxzXFxTXSo+L2kudGVzdChyYXdEZXNjKVxuICAgICAgICAgID8gdGhpcy5zdHJpcEh0bWwocmF3RGVzYylcbiAgICAgICAgICA6IHJhd0Rlc2NcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgdXJsU2x1ZyA9IGIudXJsID8/IGIuYm9vdGhVcmwgPz8gKGIuYm9vdGhJZCAhPSBudWxsID8gU3RyaW5nKGIuYm9vdGhJZCkgOiBudWxsKSA/PyAoYi5ib290aElEICE9IG51bGwgPyBTdHJpbmcoYi5ib290aElEKSA6IG51bGwpO1xuICAgICAgY29uc3QgbG9nb1VybCA9XG4gICAgICAgIGIubG9nb1VybCAhPSBudWxsICYmIFN0cmluZyhiLmxvZ29VcmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhiLmxvZ29VcmwpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGIuY29tcGFueSAhPSBudWxsID8gU3RyaW5nKGIuY29tcGFueSkudHJpbSgpIDogJycsXG4gICAgICAgIHdlYnNpdGU6XG4gICAgICAgICAgYi53ZWJzaXRlICE9IG51bGwgJiYgU3RyaW5nKGIud2Vic2l0ZSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoYi53ZWJzaXRlKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgY2F0ZWdvcnk6IG51bGwsXG4gICAgICAgIGJvb3RoSUQ6IGIuYm9vdGhJZCA/PyBiLmJvb3RoSUQgPz8gbnVsbCxcbiAgICAgICAgYm9vdGhUaXRsZTogYi5ib290aFRpdGxlICE9IG51bGwgPyBTdHJpbmcoYi5ib290aFRpdGxlKS50cmltKCkgOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8/IG51bGwsXG4gICAgICAgIC8qKiBCb290aCBVUkwgc2x1ZyBmb3Igcm91dGluZyB0byBkZXRhaWwgcGFnZSAoZS5nLiBldmVudHMvOmV2ZW50VXJsL3Nwb25zb3JzL2Jvb3Rocy86dXJsKS4gKi9cbiAgICAgICAgdXJsOiB1cmxTbHVnICE9IG51bGwgPyBTdHJpbmcodXJsU2x1ZykudHJpbSgpIDogbnVsbCxcbiAgICAgICAgbG9nb1VybCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGdldF9ib290aF9yZXByZXNlbnRhdGl2ZXMgcmVzdWx0cyBpbnRvIHRoZSBzYW1lIHNoYXBlIGFzIGF0dGVuZGVlIGNhcmRzIChmb3IgcmV1c2Ugb2YgYXR0ZW5kZWUgZGVzaWduKS5cbiAgICovXG4gIG1hcEJvb3RoUmVwc1RvQ2FyZERhdGEocmVwcmVzZW50YXRpdmVzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVwcmVzZW50YXRpdmVzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiByZXByZXNlbnRhdGl2ZXMubWFwKChyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gci5maXJzdE5hbWUgIT0gbnVsbCA/IFN0cmluZyhyLmZpcnN0TmFtZSkudHJpbSgpIDogJyc7XG4gICAgICBjb25zdCBsYXN0ID0gci5sYXN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHIubGFzdE5hbWUpLnRyaW0oKSA6ICcnO1xuICAgICAgY29uc3QgbmFtZSA9IFtmaXJzdCwgbGFzdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB8fCAnJztcbiAgICAgIGNvbnN0IHVzZXJJZCA9IHIudXNlcklkICE9IG51bGwgJiYgU3RyaW5nKHIudXNlcklkKS50cmltKCkgIT09ICcnID8gU3RyaW5nKHIudXNlcklkKS50cmltKCkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBjb21wYW55OlxuICAgICAgICAgIHIuY29tcGFueSAhPSBudWxsICYmIFN0cmluZyhyLmNvbXBhbnkpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIuY29tcGFueSkudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGpvYlRpdGxlOlxuICAgICAgICAgIHIuam9iVGl0bGUgIT0gbnVsbCAmJiBTdHJpbmcoci5qb2JUaXRsZSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5qb2JUaXRsZSkudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHBob3RvOlxuICAgICAgICAgIHIucGhvdG9QYXRoICE9IG51bGwgJiYgU3RyaW5nKHIucGhvdG9QYXRoKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhyLnBob3RvUGF0aCkudHJpbSgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIGludGVyZXN0czogbnVsbCxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgci5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhyLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhyLmRlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgdXNlclZpZGVvc01vZGVsOiBudWxsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBnZXRfZXZlbnRfc2Vzc2lvbnNfdjIgcGxhaW4tdGV4dCBjb250ZW50IGludG8gc2Vzc2lvbiBvYmplY3RzIGZvciBjYXJkcy5cbiAgICogRm9ybWF0OiBcIkZvdW5kIE4gc2Vzc2lvbnM6XFxuMS4gPHRpdGxlPlxcbiAgIC0gVGltZTogU3RhcnQ6IC4uLiwgRW5kOiAuLi4sIFRpbWVab25lOiAuLi5cXG4gICAtIFJvb206IC4uLlxcbiAgIC0gVHlwZTogLi4uXFxuMi4gLi4uXCJcbiAgICovXG4gIHBhcnNlU2Vzc2lvbkNvbnRlbnRWMihjb250ZW50OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgaWYgKCFjb250ZW50IHx8IHR5cGVvZiBjb250ZW50ICE9PSAnc3RyaW5nJykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHNlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgIC8vIFNwbGl0IGludG8gYmxvY2tzIGJ5IFwiMS4gXCIsIFwiMi4gXCIsIGV0Yy4gKG51bWJlciArIGRvdCArIHNwYWNlIGF0IGxpbmUgc3RhcnQpXG4gICAgY29uc3QgYmxvY2tSZWdleCA9IC9cXG5cXGQrXFwuXFxzKy87XG4gICAgY29uc3QgcGFydHMgPSBjb250ZW50LnNwbGl0KGJsb2NrUmVnZXgpO1xuICAgIC8vIEZpcnN0IHBhcnQgbWF5IGJlIFwiRm91bmQgTiBzZXNzaW9uczpcIiBvciBzaW1pbGFyOyBza2lwIGlmIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGEgc2Vzc2lvbiB0aXRsZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gcGFydHNbaV0udHJpbSgpO1xuICAgICAgaWYgKCFibG9jaykgY29udGludWU7XG4gICAgICBjb25zdCBsaW5lcyA9IGJsb2NrXG4gICAgICAgIC5zcGxpdCgvXFxuLylcbiAgICAgICAgLm1hcCgobCkgPT4gbC50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBjb25zdCB0aXRsZSA9IGxpbmVzWzBdIHx8ICcnO1xuICAgICAgaWYgKCF0aXRsZSB8fCAvXkZvdW5kXFxzK1xcZCtcXHMrc2Vzc2lvbnMvaS50ZXN0KHRpdGxlKSkgY29udGludWU7XG4gICAgICBsZXQgZGF0ZVRpbWVSYW5nZSA9ICcnO1xuICAgICAgbGV0IHJvb21OYW1lID0gJyc7XG4gICAgICBsZXQgc2Vzc2lvblR5cGUgPSAnJztcbiAgICAgIGxldCB0aW1lWm9uZSA9ICcnO1xuICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBsaW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbal07XG4gICAgICAgIGNvbnN0IHRpbWVNYXRjaCA9IGxpbmUubWF0Y2goL1RpbWU6XFxzKiguKykvaSk7XG4gICAgICAgIGlmICh0aW1lTWF0Y2gpIHtcbiAgICAgICAgICBkYXRlVGltZVJhbmdlID0gdGltZU1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCB0ek1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaCgvVGltZVpvbmU6XFxzKihbXixcXG5dKykvaSk7XG4gICAgICAgICAgaWYgKHR6TWF0Y2gpIHRpbWVab25lID0gdHpNYXRjaFsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9vbU1hdGNoID0gbGluZS5tYXRjaCgvUm9vbTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHJvb21NYXRjaCkge1xuICAgICAgICAgIHJvb21OYW1lID0gcm9vbU1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlTWF0Y2ggPSBsaW5lLm1hdGNoKC9UeXBlOlxccyooLispL2kpO1xuICAgICAgICBpZiAodHlwZU1hdGNoKSB7XG4gICAgICAgICAgc2Vzc2lvblR5cGUgPSB0eXBlTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR6TGluZU1hdGNoID0gbGluZS5tYXRjaCgvVGltZVpvbmU6XFxzKiguKykvaSk7XG4gICAgICAgIGlmICh0ekxpbmVNYXRjaCAmJiAhdGltZVpvbmUpIHRpbWVab25lID0gdHpMaW5lTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgfVxuICAgICAgc2Vzc2lvbnMucHVzaCh7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICByb29tTmFtZTogcm9vbU5hbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgICBkYXRlVGltZVJhbmdlOiBkYXRlVGltZVJhbmdlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgc2Vzc2lvblR5cGU6IHNlc3Npb25UeXBlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgdGltZVpvbmU6IHRpbWVab25lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgc2Vzc2lvblJvbGVzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2Vzc2lvbnM7XG4gIH1cblxuICBnZXRWaXNpYmxlU2Vzc2lvbkNhcmRzKGNoYXQ6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBsaXN0ID0gY2hhdD8uc2Vzc2lvbkNhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkU2Vzc2lvbkNhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuU0VTU0lPTl9DQVJEU19JTklUSUFMO1xuICAgIGlmIChyZW1haW5pbmcgPiA0ICYmICFleHBhbmRlZCkge1xuICAgICAgcmV0dXJuIGxpc3Quc2xpY2UoMCwgdGhpcy5TRVNTSU9OX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldFZpc2libGVBdHRlbmRlZUNhcmRzKGNoYXQ6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBsaXN0ID0gY2hhdD8uYXR0ZW5kZWVDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZEF0dGVuZGVlQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5BVFRFTkRFRV9DQVJEU19JTklUSUFMO1xuICAgIGlmIChyZW1haW5pbmcgPiA0ICYmICFleHBhbmRlZCkge1xuICAgICAgcmV0dXJuIGxpc3Quc2xpY2UoMCwgdGhpcy5BVFRFTkRFRV9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlU3BlYWtlckNhcmRzKGNoYXQ6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBsaXN0ID0gY2hhdD8uc3BlYWtlckNhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkU3BlYWtlckNhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuU1BFQUtFUl9DQVJEU19JTklUSUFMO1xuICAgIGlmIChyZW1haW5pbmcgPiA0ICYmICFleHBhbmRlZCkge1xuICAgICAgcmV0dXJuIGxpc3Quc2xpY2UoMCwgdGhpcy5TUEVBS0VSX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldFZpc2libGVTcG9uc29yQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5zcG9uc29yQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTcG9uc29yQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5TUE9OU09SX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLlNQT05TT1JfQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZUJvb3RoUmVwQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5ib290aFJlcENhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLkJPT1RIX1JFUF9DQVJEU19JTklUSUFMO1xuICAgIGlmIChyZW1haW5pbmcgPiA0ICYmICFleHBhbmRlZCkge1xuICAgICAgcmV0dXJuIGxpc3Quc2xpY2UoMCwgdGhpcy5CT09USF9SRVBfQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZXhwYW5kU2Vzc2lvbkNhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRTZXNzaW9uQ2FyZElkcyA9IHtcbiAgICAgICAgLi4udGhpcy5leHBhbmRlZFNlc3Npb25DYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGFuZEF0dGVuZGVlQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZEF0dGVuZGVlQ2FyZElkcyA9IHtcbiAgICAgICAgLi4udGhpcy5leHBhbmRlZEF0dGVuZGVlQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRTcGVha2VyQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZFNwZWFrZXJDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkU3BlYWtlckNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kU3BvbnNvckNhcmRzKGNoYXQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChjaGF0Py5faWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRTcG9uc29yQ2FyZElkcyA9IHtcbiAgICAgICAgLi4udGhpcy5leHBhbmRlZFNwb25zb3JDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGFuZEJvb3RoUmVwQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZEJvb3RoUmVwQ2FyZElkcyA9IHtcbiAgICAgICAgLi4udGhpcy5leHBhbmRlZEJvb3RoUmVwQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGFiZWwgZm9yIHNlc3Npb24gdHlwZSBvbiBjYXJkczogXCJTZXNzaW9uIHR5cGVcIiB3aGVuIGlzVW5FdmVudCwgZWxzZSBcIk1lZXRpbmcgdHlwZVwiLlxuICAgKi9cbiAgZ2V0U2Vzc2lvblR5cGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlzVW5FdmVudFxuICAgID8gdGhpcy5nZXRUcmFuc2xhdGlvbignTWVldGluZyB0eXBlJykgfHwgJ01lZXRpbmcgdHlwZSdcbiAgICA6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1Nlc3Npb24gdHlwZScpIHx8ICdTZXNzaW9uIHR5cGUnXG4gIH1cblxuICAvKipcbiAgICogR2V0IEpvaW4vV2F0Y2ggcm9sZSBidXR0b25zIGZyb20gc2Vzc2lvbi5zZXNzaW9uUm9sZXMgZm9yIHNlc3Npb24gY2FyZHMuXG4gICAqIFdoZW4gaXNVbkV2ZW50IGlzIGZhbHNlLCByZXR1cm5zIHNpbmdsZSBcIldhdGNoXCIgYnV0dG9uIChzYW1lIGFzIHRlbXBsYXRlMikuIFdoZW4gdHJ1ZSwgcmV0dXJucyBKb2luL1dhdGNoIGZyb20gc2Vzc2lvblJvbGVzLlxuICAgKi9cbiAgZ2V0U2Vzc2lvblJvbGVCdXR0b25zKHNlc3Npb25DYXJkOiBhbnkpOiB7IGFjdGlvbjogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSB7XG4gICAgaWYgKHRoaXMuaXNVbkV2ZW50ID09PSBmYWxzZSAmJiBzZXNzaW9uQ2FyZD8uc2Vzc2lvbikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogJ2pvaW4nLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldFRyYW5zbGF0aW9uKCdXYXRjaCcpIHx8ICdXYXRjaCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCByYXcgPSBzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uc2Vzc2lvblJvbGVzO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShyYXcpIHx8IHJhdy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICBjb25zdCByb2xlczogeyBhY3Rpb246IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgcmF3KSB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIHIgPT09ICdvYmplY3QnICYmIHIgIT0gbnVsbCAmJiByLnNlc3Npb25Sb2xlTmFtZVxuICAgICAgICAgID8gU3RyaW5nKHIuc2Vzc2lvblJvbGVOYW1lKS50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIDogU3RyaW5nKHIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKG5hbWUgPT09ICdqb2luJyB8fCBuYW1lID09PSAnd2F0Y2gnKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID1cbiAgICAgICAgICBuYW1lID09PSAnam9pbidcbiAgICAgICAgICAgID8gdGhpcy5nZXRUcmFuc2xhdGlvbignSm9pbicpIHx8ICdKb2luJ1xuICAgICAgICAgICAgOiB0aGlzLmdldFRyYW5zbGF0aW9uKCdXYXRjaCcpIHx8ICdXYXRjaCc7XG4gICAgICAgIHJvbGVzLnB1c2goeyBhY3Rpb246IG5hbWUsIGxhYmVsIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm9sZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgc2Vzc2lvbiBpcyBvbi1kZW1hbmQgKGNsYXNzaWZpY2F0aW9uSWQgPT09IGVDbGFzc2lmaWNhdGlvblR5cGUuT25EZW1hbmQpLlxuICAgKiBXaGVuIHRydWUsIEpvaW4vV2F0Y2ggYXJlIGFsd2F5cyBhY3Rpb25hYmxlIGFuZCBjYXJkIHVzZXMgT25EZW1hbmQgZGVzaWduLlxuICAgKi9cbiAgaXNTZXNzaW9uT25kZW1hbmQoc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID1cbiAgICAgIHNlc3Npb25DYXJkPy5zZXNzaW9uPy5jbGFzc2lmaWNhdGlvbklkID8/IHNlc3Npb25DYXJkPy5jbGFzc2lmaWNhdGlvbklkO1xuICAgIGlmIChpZCA9PSBudWxsIHx8IGlkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBTdHJpbmcoaWQpID09PSBlQ2xhc3NpZmljYXRpb25UeXBlLk9uRGVtYW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgSm9pbi9XYXRjaCBhY3Rpb24gaXMgcG9zc2libGUgKHNhbWUgbG9naWMgYXMgYXBwIHRlbXBsYXRlOCkuXG4gICAqIEFjdGlvbiBpcyBhbGxvd2VkIHdoZW46IG9uLWRlbWFuZCBzZXNzaW9uIE9SIGlzQnV0dG9uQWN0aXZhdGVkIChzZXNzaW9uIGhhcyBzdGFydGVkKS5cbiAgICovXG4gIGNhblBlcmZvcm1TZXNzaW9uQWN0aW9uKHNlc3Npb25DYXJkOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXNlc3Npb25DYXJkPy5zZXNzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcyA9IHNlc3Npb25DYXJkLnNlc3Npb247XG4gICAgaWYgKHRoaXMuaXNTZXNzaW9uT25kZW1hbmQoc2Vzc2lvbkNhcmQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gISFzLmlzQnV0dG9uQWN0aXZhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbWUgbG9naWMgYXMgYXBwIHRlbXBsYXRlODogZGVsYXkgaW4gbWludXRlcyAoc2NoZWR1bGVkIHN0YXJ0IC0gYWN0dWFsIHN0YXJ0KS5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgZWl0aGVyIGRhdGUgbWlzc2luZzsgPiAwIHdoZW4gbWVldGluZyBpcyBkZWxheWVkLlxuICAgKi9cbiAgZ2V0TWVldGluZ0RlbGF5TWludXRlcyhzZXNzaW9uQ2FyZDogYW55KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbkNhcmQ/LnNlc3Npb247XG4gICAgaWYgKCFzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHMuZGF0ZVRpbWVSYW5nZT8uc3RhcnQ7XG4gICAgY29uc3QgYWN0dWFsU3RhcnQgPSBzLmFjdHVhbERhdGVUaW1lUmFuZ2U/LnN0YXJ0O1xuICAgIGlmICghc3RhcnREYXRlIHx8ICFhY3R1YWxTdGFydCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlmZk1zID1cbiAgICAgICAgbmV3IERhdGUoc3RhcnREYXRlKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhY3R1YWxTdGFydCkuZ2V0VGltZSgpO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZk1zIC8gKDEwMDAgKiA2MCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIG1lZXRpbmcgaXMgZGVsYXllZCAoc2FtZSBjb25kaXRpb24gYXMgdGVtcGxhdGU4OiBkZWxheSBtaW51dGVzID4gMCwgbm90IG9uLWRlbWFuZCwgYnV0dG9uIG5vdCBhY3RpdmF0ZWQpLiAqL1xuICBpc01lZXRpbmdEZWxheWVkKHNlc3Npb25DYXJkOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBkZWxheSA9IHRoaXMuZ2V0TWVldGluZ0RlbGF5TWludXRlcyhzZXNzaW9uQ2FyZCk7XG4gICAgaWYgKGRlbGF5ID09IG51bGwgfHwgZGVsYXkgPD0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzU2Vzc2lvbk9uZGVtYW5kKHNlc3Npb25DYXJkKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uaXNCdXR0b25BY3RpdmF0ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG9uU2Vzc2lvbkNhcmRBY3Rpb24oXG4gICAgc2Vzc2lvbkNhcmQ6IGFueSxcbiAgICByb2xlOiB7IGFjdGlvbjogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0sXG4gICk6IHZvaWQge1xuICAgIGlmICghc2Vzc2lvbkNhcmQ/LnNlc3Npb24pIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1VuRXZlbnQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNlc3Npb25BY3Rpb25zLmVtaXQoe1xuICAgICAgICB0eXBlOiAnc2Vzc2lvbicsXG4gICAgICAgIGFjdGlvbjogcm9sZS5hY3Rpb24sXG4gICAgICAgIHNlc3Npb246IHNlc3Npb25DYXJkLnNlc3Npb24sXG4gICAgICAgIHNlc3Npb25DYXJkLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNsb3NlQ2hhdERyYXdlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2FuUGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbkNhcmQpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignWW91IGNhbiBqb2luL3dhdGNoIGF0IHRoZSBzdGFydGluZyB0aW1lJykgfHxcbiAgICAgICAgJ1lvdSBjYW4gam9pbi93YXRjaCBhdCB0aGUgc3RhcnRpbmcgdGltZSc7XG4gICAgICB0aGlzLnNlc3Npb25BY3Rpb25CbG9ja2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMuZW1pdCh7XG4gICAgICB0eXBlOiAnc2Vzc2lvbicsXG4gICAgICBhY3Rpb246IHJvbGUuYWN0aW9uLFxuICAgICAgc2Vzc2lvbjogc2Vzc2lvbkNhcmQuc2Vzc2lvbixcbiAgICAgIHNlc3Npb25DYXJkLFxuICAgIH0pO1xuICAgIHRoaXMuY2xvc2VDaGF0RHJhd2VyKCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQ2hhdERyYXdlcigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZHJhd2VyPy5jbG9zZSgpO1xuICAgICAgdGhpcy5zb3VyY2VzRHJhd2VyPy5jbG9zZSgpO1xuICAgICAgdGhpcy5lZGl0b3JzRHJhd2VyPy5jbG9zZSgpO1xuICAgIH0gY2F0Y2gge31cbiAgICB0aGlzLmNsb3NlQm90LmVtaXQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGxpc3RlblNvY2tldHMoKSB7XG4gICAgaWYgKHRoaXMuZXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ0xpc3RlbiBTb2NrZXQnKTtcbiAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlXG4gICAgICAuZ2V0VXNlclNwZWNpZmljTm90aWZpY2F0aW9uKClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBsaXN0ZW5Tb2NrZXRzIHJlY2VpdmVkJywge1xuICAgICAgICAgICAgaGFzT3RoZXJGaWVsZHM6ICEhcmVzPy5tPy5PdGhlckZpZWxkcyxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogcmVzPy5tPy5PdGhlckZpZWxkcz8ubWVzc2FnZV9pZCxcbiAgICAgICAgICAgIGhhc0Fuc3dlcjogISFyZXM/Lm0/Lk90aGVyRmllbGRzPy5hbnN3ZXIsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgT3RoZXJGaWVsZHMgZXhpc3RzIGluIHRoZSByZXNwb25zZVxuICAgICAgICAgIGlmIChyZXM/Lm0/Lk90aGVyRmllbGRzPy53b3JrZmxvd19pZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIFdvcmtmbG93IHByb2dyZXNzIHVwZGF0ZScsXG4gICAgICAgICAgICAgIHJlcz8ubT8uT3RoZXJGaWVsZHMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBwZXJjZW50YWdlLFxuICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgIGFjdGlvbl9uYW1lLFxuICAgICAgICAgICAgICBjdXJyZW50X2FjdGlvbl9uYW1lLFxuICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQsXG4gICAgICAgICAgICAgIHRpbWVfc3RhbXAsXG4gICAgICAgICAgICB9ID0gcmVzPy5tPy5PdGhlckZpZWxkcztcblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9IHBlcmNlbnRhZ2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvbiA9IGFjdGlvbl9uYW1lO1xuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25JbmRleCA9IHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoYSkgPT4gYS5OYW1lID09IGN1cnJlbnRfYWN0aW9uX25hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdWydPdXRwdXQnXSA9XG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuICAgICAgICAgICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscy5BY3Rpb25zW2FjdGlvbkluZGV4XVtcbiAgICAgICAgICAgICAgICAnSW5zZXJ0VGltZVN0YW1wJ1xuICAgICAgICAgICAgICBdID0gZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCB0aW1lX3N0YW1wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFjdGlvbiB3aXRoIG5hbWUgJHthY3Rpb25fbmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9PSAxMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnV29ya2Zsb3dFeGVjdXRpb25JZCddID1cbiAgICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQ7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c09uVGV4dGFyZWEoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzPy5tPy5PdGhlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJGaWVsZHMgPSByZXMubS5PdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6YWJsZSA9IG90aGVyRmllbGRzLnNlcmlhbGl6YWJsZV90b19yZXR1cm47XG5cbiAgICAgICAgICAgIC8vIFNlc3Npb24gY2FyZHM6IGV2ZW50IHNlc3Npb25zIHRvb2xzIChKU09OIG9yIHBsYWluIHRleHQpXG4gICAgICAgICAgICBjb25zdCBpc1Nlc3Npb25Ub29sID1cbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zX3YyJyB8fFxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV9pbnRlcmVzdCcgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfc2Vzc2lvbnNfYnlfdHJhY2snIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3NwZWFrZXJfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3VwY29taW5nX3Nlc3Npb25zJyB8fFxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9teV9hZ2VuZGEnO1xuICAgICAgICAgICAgaWYgKGlzU2Vzc2lvblRvb2wpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyICYmIHR5cGVvZiBjb250ZW50U3RyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGxldCBzZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIHNlc3Npb25zID0gcGFyc2VkPy5zZXNzaW9ucyA/PyBbXTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAvLyB2MiBwbGFpbiB0ZXh0OiBcIkZvdW5kIDIgc2Vzc2lvbnM6XFxuMS4gVGl0bGVcXG4gICAtIFRpbWU6IFN0YXJ0OiAuLi4gRW5kOiAuLi5cXG4gICAtIFJvb206IC4uLlxcbiAgIC0gVHlwZTogLi4uXCJcbiAgICAgICAgICAgICAgICAgIHNlc3Npb25zID0gdGhpcy5wYXJzZVNlc3Npb25Db250ZW50VjIoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU2Vzc2lvbnNUb0NhcmREYXRhKHNlc3Npb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuc3VyZVNwZWFrZXJzRm9yU2Vzc2lvbkNhcmRzKG1hcHBlZCk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzZXNzaW9uX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2Vzc2lvbl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIE5vIHNlc3Npb24gY2FyZHMgcHVzaGVkOiBmYWxsIHRocm91Z2ggdG8gbm9ybWFsIE90aGVyRmllbGRzIGhhbmRsaW5nIHNvIGFuc3dlciBpcyBkaXNwbGF5ZWRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQXR0ZW5kZWUgY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X2F0dGVuZGVlcyAob25seSBwdXNoIHdoZW4gd2UgaGF2ZSBhdHRlbmRlZXM7IGVsc2UgZmFsbCB0aHJvdWdoIHNvIGFuc3dlciBpcyBzaG93biBhcyBub3JtYWwgQUkgbWVzc2FnZSlcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9hdHRlbmRlZXMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0cikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYXR0ZW5kZWVzID0gcGFyc2VkPy5hdHRlbmRlZXMgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEF0dGVuZGVlc1RvQ2FyZERhdGEoYXR0ZW5kZWVzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYGF0dGVuZGVlX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXR0ZW5kZWVfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dGVuZGVlQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2V2ZW50X2F0dGVuZGVlcyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8qIGF0dGVuZGVlcyBlbXB0eSAoZS5nLiB0b3RhbENvdW50OiAwKTogZmFsbCB0aHJvdWdoIHNvIGFuc3dlciBsaWtlIFwiSSBjb3VsZG4ndCBmaW5kIGFueSBhdHRlbmRlZXMuLi5cIiBpcyBzaG93biBhcyBub3JtYWwgQUkgbWVzc2FnZSAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTcGVha2VyIGNhcmRzOiB0b29sIGdldF9ldmVudF9zcGVha2VycyAoc2FtZSBoYW5kbGluZyBhcyBhdHRlbmRlZXM7IG9ubHkgcHVzaCB3aGVuIHdlIGhhdmUgc3BlYWtlcnMpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc3BlYWtlcnMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0cikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlYWtlcnMgPSBwYXJzZWQ/LnNwZWFrZXJzID8/IHBhcnNlZD8uc3BlYWtlciA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU3BlYWtlcnNUb0NhcmREYXRhKHNwZWFrZXJzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYHNwZWFrZXJfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcGVha2VyX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgICBzcGVha2VyQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2V2ZW50X3NwZWFrZXJzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogc3BlYWtlcnMgZW1wdHk6IGZhbGwgdGhyb3VnaCBzbyBhbnN3ZXIgaXMgc2hvd24gYXMgbm9ybWFsIEFJIG1lc3NhZ2UgKi9cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3BvbnNvciBjYXJkczogdG9vbCBnZXRfZXZlbnRfc3BvbnNvcnMgKG9ubHkgcHVzaCB3aGVuIHdlIGhhdmUgc3BvbnNvcnMpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc3BvbnNvcnMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0cikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3BvbnNvcnMgPSBwYXJzZWQ/LnNwb25zb3JzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcG9uc29yc1RvQ2FyZERhdGEoc3BvbnNvcnMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc3BvbnNvcl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNwb25zb3JDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfc3BvbnNvcnMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCb290aCBjYXJkczogdG9vbCBnZXRfZXZlbnRfYm9vdGhzIChyZXVzZSBzcG9uc29yIGNhcmQgZGVzaWduOyBvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIGJvb3RocylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9ib290aHMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0cikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYm9vdGhzID0gcGFyc2VkPy5ib290aHMgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEJvb3Roc1RvQ2FyZERhdGEoYm9vdGhzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYHNwb25zb3JfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2V2ZW50X2Jvb3RocyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJvb3RoIHJlcHJlc2VudGF0aXZlIGNhcmRzOiB0b29sIGdldF9ib290aF9yZXByZXNlbnRhdGl2ZXMgKHNhbWUgZGVzaWduIGFzIGF0dGVuZGVlIGNhcmRzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXByZXNlbnRhdGl2ZXMgPSBwYXJzZWQ/LnJlcHJlc2VudGF0aXZlcyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhSZXBzVG9DYXJkRGF0YShyZXByZXNlbnRhdGl2ZXMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgYm9vdGhfcmVwX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vdGhfcmVwX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgICBib290aFJlcENhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ib290aF9yZXByZXNlbnRhdGl2ZXMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfZGV0YWlscycpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25faWQsXG4gICAgICAgICAgICAgIGJvdF9pZCxcbiAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgICAgICB3ZWJfcmVzdWx0cyxcbiAgICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdHMsXG4gICAgICAgICAgICAgIGdyYXBocyxcbiAgICAgICAgICAgICAgZXhlY3V0aW9uX2dyYXBocyxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICB9ID0gb3RoZXJGaWVsZHM7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBQcm9jZXNzaW5nIE90aGVyRmllbGRzJywge1xuICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICBjb252ZXJzYXRpb25faWQsXG4gICAgICAgICAgICAgIGJvdF9pZCxcbiAgICAgICAgICAgICAgaGFzQW5zd2VyOiAhIWFuc3dlcixcbiAgICAgICAgICAgICAgYW5zd2VyTGVuZ3RoOiBhbnN3ZXI/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgd2ViUmVzdWx0c0NvdW50OiB3ZWJfcmVzdWx0cz8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgIHNlYXJjaFJlc3VsdHNDb3VudDogc2VhcmNoX3Jlc3VsdHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgY3VycmVudENoYXRNZXNzYWdlID0gdGhpcy5jaGF0TG9nLmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PSBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY3VycmVudENoYXRNZXNzYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIE5ldyBBSSBtZXNzYWdlIGZyb20gc29ja2V0Jywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgICAgY2hhdExvZ0xlbmd0aDogdGhpcy5jaGF0TG9nLmxlbmd0aCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBfaWQ6IG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY3VycmVudENoYXRNZXNzYWdlKTtcblxuICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gVXBkYXRpbmcgZXhpc3RpbmcgbWVzc2FnZScsIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBmaWVsZHMgYmFzZWQgb24gdGhlaXIgcHJlc2VuY2VcbiAgICAgICAgICAgIGlmIChzZWFyY2hfcmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KHNlYXJjaF9yZXN1bHRzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBzZWFyY2hfcmVzdWx0cycsIHNlYXJjaF9yZXN1bHRzKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnNlYXJjaFRlcm1zID0gc2VhcmNoX3Jlc3VsdHM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHdlYl9yZXN1bHRzICYmIEFycmF5LmlzQXJyYXkod2ViX3Jlc3VsdHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIHdlYl9yZXN1bHRzJyxcbiAgICAgICAgICAgICAgICB3ZWJfcmVzdWx0cz8ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHdlYl9yZXN1bHRzLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2Uuc291cmNlc0xpc3QgPSB3ZWJfcmVzdWx0cztcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLmRpc3BsYXllZFNvdXJjZXMgPSB3ZWJfcmVzdWx0cz8uc2xpY2UoMCwgMyk7IC8vIEZpcnN0IDMgY2FyZHNcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnJlbWFpbmluZ1NvdXJjZXMgPSB3ZWJfcmVzdWx0cz8uc2xpY2UoMyk7IC8vIFJlbWFpbmluZyBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gUmVjZWl2ZWQgYW5zd2VyLCB1cGRhdGluZyBtZXNzYWdlJywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgICAgYW5zd2VyTGVuZ3RoOiBhbnN3ZXI/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBhbnN3ZXJQcmV2aWV3OiBhbnN3ZXI/LnN1YnN0cmluZz8uKDAsIDEwMCksXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXIpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c09uVGV4dGFyZWEoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdyYXBocyAmJiBBcnJheS5pc0FycmF5KGdyYXBocykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gZ3JhcGhzJywgZ3JhcGhzPy5sZW5ndGgsIGdyYXBocyk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5ncmFwaHMgPSBncmFwaHM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4ZWN1dGlvbl9ncmFwaHMgJiYgQXJyYXkuaXNBcnJheShleGVjdXRpb25fZ3JhcGhzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBleGVjdXRpb25fZ3JhcGhzJyxcbiAgICAgICAgICAgICAgICBleGVjdXRpb25fZ3JhcGhzPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uX2dyYXBocyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLmV4ZWN1dGlvbkdyYXBocyA9IGV4ZWN1dGlvbl9ncmFwaHM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zICYmIEFycmF5LmlzQXJyYXkoc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIHN1Z2dlc3Rpb25zJyxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucz8ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UucmVsYXRlZExpc3RJdGVtcyA9IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIC8vIFByb2Nlc3Mgb25saW5lIHNlYXJjaCB0ZXJtcyBhcyBuZWVkZWRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIGFueSBvdGhlciBmaWVsZHMgYW5kIHRoZWlyIHByb2Nlc3NpbmcgaGVyZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ090aGVyRmllbGRzIGlzIG1pc3NpbmcgaW4gdGhlIHJlc3BvbnNlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGZldGNoaW5nIGRhdGEgZnJvbSBzb2NrZXQnLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTb2NrZXRBbmRMaXN0ZW4oKSB7fVxuICBoYW5kbGVFdmVudChkYXRhOiBhbnksIHR5cGU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnd2VicmVzdWx0JzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbnN3ZXInOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyYXBoJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc29ja2V0U2VydmljZS5kaXNjb25uZWN0U29ja2V0Q29ubmVjdGlvbigpO1xuICAgIC8vdGhpcy5zb2NrZXRTZXJ2aWNlLmNsb3NlKCk7XG4gIH1cbiAgY2hhbmdlVGVtcGVyYXR1cmUobmV3VGVtcGVyYXR1cmU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybjtcbiAgICB0aGlzLnRlbXBlcmF0dXJlID0gbmV3VGVtcGVyYXR1cmU7XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oaXZlZ3B0LWNoYXQtYm90LXdyYXBwZXInKTtcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgdGhlbWUgY2xhc3NlcyBmcm9tIGJvZHlcbiAgICB3cmFwcGVyPy5jbGFzc0xpc3QucmVtb3ZlKCdjcmVhdGl2ZScsICdiYWxhbmNlZCcsICdwcmVjaXNlJyk7XG5cbiAgICBzd2l0Y2ggKG5ld1RlbXBlcmF0dXJlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2NyZWF0aXZlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdiYWxhbmNlZCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgncHJlY2lzZScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RhcnRBZ2FpbigpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IGZhbHNlO1xuICAgIHRoaXMuY2hhdExvZyA9IFtdO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICdhaScsXG4gICAgICBtZXNzYWdlOiB0aGlzLmdyZWV0aW5nTXNnLFxuXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgfSk7XG4gICAgdGhpcy5hcmNoaWV2ZU1lc3NhZ2VzKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhcmNoaWV2ZU1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYm90L2NsZWFyLWhpc3RvcnkvJHt0aGlzLmJvdElkfS8ke3RoaXMudXNlcklkfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgdHJpZ2dlclN1cHBvcnQoKSB7XG4gICAgdGhpcy5vcGVuU3VwcG9ydC5lbWl0KCk7XG4gIH1cbiAgZmV0Y2hCb3RDb25maWcoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYm90cz9ib3RfaWQ9JHt0aGlzLmJvdElkfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5ib3ROYW1lID0gdGhpcy5nZXRUcmFuc2xhdGlvbihyZXMuTmFtZSk7XG4gICAgICAgIHRoaXMuYm90SWNvbiA9IHJlcy5JY29uO1xuICAgICAgICB0aGlzLmJvdFNraWxscyA9IHJlcz8uU2tpbGxzO1xuICAgICAgICB0aGlzLmdyZWV0aW5nTXNnID0gcmVzLkdyZWV0aW5nXG4gICAgICAgICAgPyAodGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkocmVzLkdyZWV0aW5nKSBhcyBhbnkpXG4gICAgICAgICAgOiAnJztcblxuICAgICAgICB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcyA9IHJlcz8uTmVnYXRpdmVSZXNwb25zZXM/Lmxlbmd0aFxuICAgICAgICAgID8gcmVzLk5lZ2F0aXZlUmVzcG9uc2VzXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgYFdlIGFyZSBzb3JyeSB3ZSd2ZSBub3QgYmVlbiBhYmxlIHRvIGFuc3dlciB5b3VyIHF1ZXN0aW9uYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIHRoaXMucXVpY2tQcm9tcHRzID0gcmVzLlF1aWNrUHJvbXB0cztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWc6ICcsIGVycm9yKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBmZXRjaENoYXRIaXN0b3J5KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZXZlbnRJZCxcbiAgICApO1xuICAgIHRoaXMuY29uU2Vzc2lvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRTZXNzaW9uS2V5KFxuICAgICAgdGhpcy5ib3RJZCxcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5ldmVudElkLFxuICAgICk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fT9zZXNzaW9uX2lkPSR7dGhpcy5jb25TZXNzaW9uS2V5fWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3I8YW55PignZmV0Y2hDb252ZXJzYXRpb24nKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xuICAgIHJldHVybiAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8VD4gPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcbiAgICB9O1xuICB9XG4gIC8vIGZldGNoQ2hhdEhpc3RvcnkoKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgLy8gICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gIC8vICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cFxuICAvLyAgICAgLmdldChgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25LZXl9YCwgeyBoZWFkZXJzIH0pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAvLyAgICAgICB9KSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTogJywgZXJyb3IpO1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICAvKiogUHVzaCBhIHN0YW5kYXJkIEFJIG1lc3NhZ2UgZnJvbSBoaXN0b3J5IChzb3VyY2VzLCBncmFwaHMsIGV0Yy4pLiBVc2VkIHdoZW4gbm90IGNvbnZlcnRpbmcgdG8gc2Vzc2lvbl9jYXJkcy4gKi9cbiAgcHJpdmF0ZSBwdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlc0xpc3QgPSBjaGF0LldlYkxpbmtzIHx8IFtdO1xuICAgIGNvbnN0IGRpc3BsYXllZFNvdXJjZXMgPSAoY2hhdC5XZWJMaW5rcyB8fCBbXSkuc2xpY2UoMCwgMyk7XG4gICAgY29uc3QgcmVtYWluaW5nU291cmNlcyA9IChjaGF0LldlYkxpbmtzIHx8IFtdKS5zbGljZSgzKTtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAnYWknLFxuICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KSxcbiAgICAgIGV4ZWN1dGlvbkdyYXBoczogY2hhdC5FeGVjdXRpb25HcmFwaHMsXG4gICAgICBncmFwaHM6IGNoYXQuR3JhcGhzLFxuICAgICAgc2VhcmNoVGVybXM6IGNoYXQuU2VhcmNoVGVybXMsXG4gICAgICBzb3VyY2VzTGlzdDogc291cmNlc0xpc3QsXG4gICAgICBkaXNwbGF5ZWRTb3VyY2VzOiBkaXNwbGF5ZWRTb3VyY2VzLFxuICAgICAgcmVtYWluaW5nU291cmNlczogcmVtYWluaW5nU291cmNlcyxcbiAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgIH0pO1xuICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICB9XG5cbiAgbWFwQ2hhdEhpc3RvcnkoY2hhdHM6IGFueSkge1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICdhaScsXG4gICAgICBtZXNzYWdlOiB0aGlzLmdyZWV0aW5nTXNnLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgIH0pO1xuICAgIGlmIChjaGF0cyAmJiBjaGF0cz8uTWVzc2FnZXM/Lmxlbmd0aCkge1xuICAgICAgY2hhdHM/Lk1lc3NhZ2VzLmZvckVhY2goKGNoYXQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2hhdC5UeXBlID09ICd1c2VyJykge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dCksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICAgICAgV29ya2Zsb3dFeGVjdXRpb25JZDogY2hhdC5Xb3JrZmxvd0V4ZWN1dGlvbklkLFxuICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhdC5UeXBlID09ICdhaScpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIHNlc3Npb24gdG9vbHMsIHNob3cgc2Vzc2lvbiBjYXJkcyBpbnN0ZWFkIG9mIHBsYWluIHRleHRcbiAgICAgICAgICBjb25zdCB0b29sTmFtZSA9IGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfbmFtZTtcbiAgICAgICAgICBjb25zdCBpc1Nlc3Npb25Ub29sID1cbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnNfdjInIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV9pbnRlcmVzdCcgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3Nlc3Npb25zX2J5X3RyYWNrJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfc3BlYWtlcl9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3VwY29taW5nX3Nlc3Npb25zJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfbXlfYWdlbmRhJztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1Nlc3Npb25Ub29sICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIGxldCBzZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIHNlc3Npb25zID0gcGFyc2VkPy5zZXNzaW9ucyA/PyBbXTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgc2Vzc2lvbnMgPSB0aGlzLnBhcnNlU2Vzc2lvbkNvbnRlbnRWMihjb250ZW50U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU2Vzc2lvbnNUb0NhcmREYXRhKHNlc3Npb25zKTtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMobWFwcGVkKTtcbiAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2Vzc2lvbl9jYXJkcycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgc2Vzc2lvbkNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9hdHRlbmRlZXMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfYXR0ZW5kZWVzLCBzaG93IGF0dGVuZGVlIGNhcmRzIG9uIGluaXRpYWwgaGlzdG9yeSBsb2FkXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ZW5kZWVzID0gcGFyc2VkPy5hdHRlbmRlZXMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2F0dGVuZGVlX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9zcGVha2VycycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ldmVudF9zcGVha2Vycywgc2hvdyBzcGVha2VyIGNhcmRzIG9uIGluaXRpYWwgaGlzdG9yeSBsb2FkXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3BlYWtlcnMgPSBwYXJzZWQ/LnNwZWFrZXJzID8/IHBhcnNlZD8uc3BlYWtlciA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcGVha2VyQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc3BvbnNvcnMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfc3BvbnNvcnMsIHNob3cgc3BvbnNvciBjYXJkcyBvbiBpbml0aWFsIGhpc3RvcnkgbG9hZFxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IHNwb25zb3JzID0gcGFyc2VkPy5zcG9uc29ycyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcG9uc29yc1RvQ2FyZERhdGEoc3BvbnNvcnMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfYm9vdGhzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X2Jvb3Rocywgc2hvdyBib290aCBjYXJkcyB1c2luZyBzcG9uc29yIGNhcmQgZGVzaWduXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgYm9vdGhzID0gcGFyc2VkPy5ib290aHMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhzVG9DYXJkRGF0YShib290aHMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcywgc2hvdyBib290aCByZXAgY2FyZHMgKGF0dGVuZGVlIGRlc2lnbilcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCByZXByZXNlbnRhdGl2ZXMgPSBwYXJzZWQ/LnJlcHJlc2VudGF0aXZlcyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlcyk7XG4gICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vdGhfcmVwX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgYm9vdGhSZXBDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIShtZXNzYWdlPy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdoZXJlIGlzIG15IG1lc3NhZ2UnKVxuICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xuXG4gICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSAvXFxbKFteW10rKV1cXCgoW14pXSspXFwpL2c7XG4gICAgY29uc3QgdXJsUmVnZXggPSAvKD88IWhyZWY9XCIpXFxiaHR0cHM/OlxcL1xcL1xcUysoPzwhWy4sXSkvZ2k7XG5cbiAgICBpZiAobWFya2Rvd25MaW5rUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgbWFya2Rvd25MaW5rUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nLFxuICAgICAgKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ1Nhbml0aXplZCBtZXNzYWdlOiAnLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplSHRtbChodG1sKTtcbiAgICB9XG5cbiAgICBpZiAodXJsUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgdXJsUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJCZcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kJjwvYT4nLFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdTYW5pdGl6ZWQgbWVzc2FnZTogJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUh0bWwoaHRtbCk7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvKD86XFxyXFxufFxccnxcXG4pL2csICc8YnI+Jyk7XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXCpcXCooLio/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpO1xuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gaGVhZGVycyB0byBIVE1MIGhlYWRlcnNcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eKCN7MSw2fSlcXHMrKC4qKSQvZ20sIChtYXRjaCwgaGFzaGVzLCB0ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsZXZlbCA9IGhhc2hlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYDxoJHtsZXZlbH0+JHt0ZXh0fTwvaCR7bGV2ZWx9PmA7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICBjb25zdCBzYW5pdGl6ZWRNZXNzYWdlID0gdGhpcy5zYW5pdGl6ZUh0bWwobWVzc2FnZSk7XG4gICAgcmV0dXJuIHNhbml0aXplZE1lc3NhZ2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgY29uc3QgZmVlZGJhY2tMaW5rcyA9XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZmVlZGJhY2stbGluaycpO1xuICAgIGZlZWRiYWNrTGlua3MuZm9yRWFjaCgobGluazogYW55KSA9PiB7XG4gICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdjbGljaycsXG4gICAgICAgIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgLy8gaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJykpIHtcbiAgICAvLyAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgLy8gICAgIC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpXG4gICAgLy8gICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2FuaXRpemVIdG1sKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cblxuICBvbkZlZWRiYWNrQ2xpY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmVlZGJhY2tFdmVudC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgICB0aGlzLm9uQ2xvc2VFdmVudC5lbWl0KCk7XG4gIH1cblxuICBzZW5kTWVzc2FnZVdpdGhUaWxlKHByb21wdDogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dCA9IHByb21wdDtcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgfVxuICBpc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgZmV0Y2hEYXRhKG1zZyA9IG51bGwpIHtcbiAgICB0aGlzLmlucHV0ID0gbXNnIHx8IHRoaXMuaW5wdXQ/LnRyaW0oKTtcbiAgICB0aGlzLm1zZyA9IHRoaXMuaW5wdXQ7XG4gICAgaWYgKCF0aGlzLmlucHV0IHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoYXRTb2NrZXQoKTtcblxuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRoaXMuaW5wdXQpLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdoaWRkZW4nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgNjJweGA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KHRoaXMuaW5wdXQsIHRoaXMuYWdlbnRzLCB0aGlzLmNvbnZlcnNhdGlvbktleSk7XG4gIH1cbiAgZmV0Y2hEYXRhRm9yKG1zZywgY2hhdCkge1xuICAgIGNvbnN0IGlucHV0TXNnID0gbXNnPy50cmltKCk7XG4gICAgaWYgKCFpbnB1dE1zZyB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGNoYXQucmVsYXRlZExpc3RJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGlucHV0TXNnKSxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KGlucHV0TXNnLCB0aGlzLmFnZW50cywgdGhpcy5jb252ZXJzYXRpb25LZXksIG1zZywgY2hhdCk7XG4gIH1cbiAgZmV0Y2hTbWFsbFRhbGsoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9zbWFsbC10YWxrLyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgc21hbGxUYWxrOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc21hbGwgdGFsazonLCBlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc21hbGxUYWxrKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UocmVzcG9uc2Uuc21hbGxUYWxrKSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDI7XG4gICAgICAgICAgLy8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlYWRBbGxDaHVua3MgPSAoc3RyZWFtOiBhbnkpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgY29uc3QgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICByZWFkZXIuY2xvc2VkLmNhdGNoKChlcnI6IGFueSkgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWFkaW5nIHN0cmVhbTogJywgZXJyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgc3RhcnQ6IChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1bXAoY29udHJvbGxlciwgcmVhZGVyLCBhbGxTdWdnZXN0aW9ucyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIHB1bXAoY29udHJvbGxlcjogYW55LCByZWFkZXI6IGFueSwgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgcmVhZGVyLnJlYWQoKS50aGVuKCh7IGRvbmUsIHZhbHVlIH06IGFueSkgPT4ge1xuICAgICAgY29uc3QgbGFzdEl0ZW0gPSB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkobGFzdEl0ZW0ubWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wb3AoKTtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2gobGFzdEl0ZW0pO1xuICAgICAgICBpZiAoYWxsU3VnZ2VzdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWdnZXN0aW9ucycsXG4gICAgICAgICAgICBzdWdnZXN0aW9uczogYWxsU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuZmV0Y2hTbWFsbFRhbGsoKTtcbiAgICAgICAgLy8gfSwxMDAwKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkZWNvZGVkQ2h1bmsgPSB0aGlzLmRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuYWlSZXNwb25zZSArPSBkZWNvZGVkQ2h1bms7XG4gICAgICBpZiAobGFzdEl0ZW0udHlwZSA9PT0gJ2FpJykge1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uc01hdGNoID0gdGhpcy5haVJlc3BvbnNlLm1hdGNoKC88c3VnPiguKj8pPFxcL3N1Zz4vZyk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uc01hdGNoKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnNNYXRjaC5mb3JFYWNoKChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5haVJlc3BvbnNlID0gdGhpcy5haVJlc3BvbnNlLnJlcGxhY2UobWF0Y2gsICcnKTtcbiAgICAgICAgICAgIGFsbFN1Z2dlc3Rpb25zLnB1c2gobWF0Y2g/LnJlcGxhY2UoLzxcXC8/c3VnPi9nLCAnJykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdEl0ZW0ubWVzc2FnZSA9IHRoaXMuYWlSZXNwb25zZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBhaUZvcm1hdHRlZERhdGE6IGFueTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gJyk7XG4gICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gMicpO1xuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZSh0aGlzLmFpUmVzcG9uc2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uIGRvbmUnKTtcblxuICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhICYmIGFpRm9ybWF0dGVkRGF0YT8uc2VjdGlvbl9pZD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICdjb21wYW55X3NlYXJjaCcgfHxcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICd1c2VyX3NlYXJjaCcgfHxcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICdpbmR1c3RyeV9jb21wYW55X3NlYXJjaCdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoUGVuZGluZ1JlcXVlc3RzKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMubXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBzcGVha2VySWRzID0gW107XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuY29udGVudD8uZm9yRWFjaCgoc2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgICBzcGVha2VySWRzID0gWy4uLnNwZWFrZXJJZHMsIC4uLnNlc3Npb24uc3BlYWtlcnNdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzcGVha2VySWRzPy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICB0aGlzLmdldFNwZWFrZXJzQnlTdGFmZklkcyhzcGVha2VySWRzKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmFkZFRvTXlBZ2VuZGFBY3Rpb24gJiZcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICBzZXNzaW9uSWRzOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmNvbm5lY3RPckZvbGxvd0FjdGlvbikge1xuICAgICAgICAgICAgbGV0IHVzZXJzTGVuID0gYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh1c2Vyc0xlbiA+IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSWQ6ICdvcGVuX25ldHdvcmtpbmdfZHJhd2VyJyxcbiAgICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlcnNMZW4gPT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgICAgY29ubmV0VXNlcklkczogW2FpRm9ybWF0dGVkRGF0YS5jb250ZW50WzBdLnVzZXJJZF0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuaXNfb3Blbl9wYWdlID09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgc2VhcmNoOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZUJyb3dzZXIoKSkge1xuICAgICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEubWVzc2FnZSArPVxuICAgICAgICAgICAgICAgICdcXG5cXG4nICsgJzxhIGlkPVwiY2xvc2VCb3ROb3dcIj5DbGljayBIZXJlPC9hPiB0byBzZWUgcmVzdWx0cy4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiBhaUZvcm1hdHRlZERhdGEubWVzc2FnZSxcbiAgICAgICAgICAgIGFjdGlvbjogYWlGb3JtYXR0ZWREYXRhLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcm93c2VyKCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFkZENsb3NlQm90Q2xpY2tFdmVudCgpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5haVJlc3BvbnNlLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG5cbiAgICAgIC8vIEVucXVldWUgdGhlIG5leHQgZGF0YSBjaHVuayBpbnRvIG91ciB0YXJnZXQgc3RyZWFtXG4gICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xuICAgICAgdGhpcy5wdW1wKGNvbnRyb2xsZXIsIHJlYWRlciwgYWxsU3VnZ2VzdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3VibWl0RmVlZGJhY2soZmxhZzogYm9vbGVhbiwgbWVzc2FnZSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mZWVkYmFja0RvbmUgPSB0cnVlO1xuICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZXZlbnRJZCxcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29udmVyc2F0aW9uL2NvUGlsb3QvJHt0aGlzLmJvdElkfS9jb252ZXJzYXRpb24vJHtjb252ZXJzYXRpb25faWR9L2hlbHBmdWwtcmVzcG9uc2VgO1xuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIGFwaUtleTogJ0NvbnZlcnNhdGlvbl9XSXovcUFtK0VFbWZPa0ZhVUEvd2VBPT0nLFxuICAgICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlSWQ6IG1lc3NhZ2UuX2lkLCBpc0hlbHBmdWw6IGZsYWcgfSksXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoZmxhZykge1xuICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgdGhpcy50aHVtYnNVcE1lc3NhZ2UgfHxcbiAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ01heSBJIGFzc2lzdCB5b3Ugd2l0aCBhbnl0aGluZyBlbHNlJyksXG4gICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKFxuICAgICAgICAgIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzW3RoaXMudGh1bWJzRG93bk1zZ0luZGV4XSxcbiAgICAgICAgKSxcbiAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICBpc0ZlZWRiYWNrTXNnOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnRodW1ic0Rvd25Nc2dJbmRleCA9XG4gICAgICAgICh0aGlzLnRodW1ic0Rvd25Nc2dJbmRleCArIDEpICUgdGhpcy50aHVtYnNEb3duTWVzc2FnZXMubGVuZ3RoO1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VwcG9ydExpbms4OCcpO1xuICAgICAgICBpZiAoc3VwcG9ydExpbmspIHtcbiAgICAgICAgICBzdXBwb3J0TGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMudHJpZ2dlclN1cHBvcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDIwMCk7XG4gICAgICB0aGlzLmZlZWRiYWNrRG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBiZWhhdmlvciAobmV3IGxpbmUpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gQ2FsbCB5b3VyIHN1Ym1pdCBmdW5jdGlvblxuICAgICAgdGhpcy5oYW5kbGVTdWJtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVTdWJtaXQoZXZlbnQpIHtcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgfVxuXG4gIC8qKiBJbmRleCBvZiB0aGUgbGFzdCBBSSBtZXNzYWdlIGluIGNoYXRMb2c7IC0xIGlmIG5vbmUuICovXG4gIGdldCBsYXN0QWlNZXNzYWdlSW5kZXgoKTogbnVtYmVyIHtcbiAgICBmb3IgKGxldCBqID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICBpZiAodGhpcy5jaGF0TG9nW2pdPy50eXBlID09PSAnYWknKSByZXR1cm4gajtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgaGFuZGxlVXBDbGljayhpZHg6IGFueSkge1xuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3VibWl0RmVlZGJhY2sodHJ1ZSwgdGhpcy5jaGF0TG9nW2lkeF0pO1xuICAgIHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkO1xuXG4gICAgaWYgKHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQpIHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhhbmRsZURvd25DbGljayhpZHg6IGFueSkge1xuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkgcmV0dXJuO1xuICAgIHRoaXMuc3VibWl0RmVlZGJhY2soZmFsc2UsIHRoaXMuY2hhdExvZ1tpZHhdKTtcbiAgICB0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQ7XG4gICAgaWYgKHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkKVxuICAgICAgdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQ7XG4gIH1cbiAgLy8gaGFuZGxlQ29weUNsaWNrKGluZGV4OiBhbnkpIHtcbiAgLy8gICAvLyBDb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBjbGlwYm9hcmRcbiAgLy8gICBjb25zdCBjb250ZW50VG9Db3B5ID0gdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlO1xuICAvLyAgIGNvbnNvbGUubG9nKCdjb250ZW50VG9Db3B5Jyk7XG4gIC8vICAgY29uc29sZS5sb2coY29udGVudFRvQ29weSk7XG4gIC8vICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudFRvQ29weSkudGhlbigoKSA9PiB7XG4gIC8vICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBjb3BpZWRcbiAgLy8gICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIC8vIFJlc2V0IHRoZSBjb3BpZWQgc3RhdGUgYWZ0ZXIgYSBkZWxheVxuICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gZmFsc2U7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgLy8gICB9KTtcbiAgLy8gfVxuICBjb3B5VGV4dChpZCwgaW5kZXgpIHtcbiAgICAvLyBHZXQgdGhlIHRleHQgZWxlbWVudFxuICAgIHZhciB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSB0ZXh0YXJlYSBlbGVtZW50IHRvIGNvcHkgdGhlIHRleHRcbiAgICB2YXIgdGVtcFRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB0ZW1wVGV4dEFyZWEudmFsdWUgPSB0ZXh0RWxlbWVudC5pbm5lclRleHQ7XG5cbiAgICAvLyBBcHBlbmQgdGhlIHRleHRhcmVhIHRvIHRoZSBib2R5IChuZWNlc3NhcnkgZm9yIHRoZSBleGVjQ29tbWFuZCB0byB3b3JrKVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcFRleHRBcmVhKTtcblxuICAgIC8vIFNlbGVjdCB0aGUgdGV4dCBpbnNpZGUgdGhlIHRleHRhcmVhXG4gICAgdGVtcFRleHRBcmVhLnNlbGVjdCgpO1xuXG4gICAgLy8gQ29weSB0aGUgdGV4dCB0byB0aGUgY2xpcGJvYXJkXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcblxuICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IHRleHRhcmVhXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wVGV4dEFyZWEpO1xuXG4gICAgLy8gT3B0aW9uYWxseSwgeW91IGNhbiBhbGVydCB0aGUgdXNlciBvciBjaGFuZ2UgdGhlIGJ1dHRvbiB0ZXh0IHRvIGluZGljYXRlIHRoZSBjb3B5IHdhcyBzdWNjZXNzZnVsXG4gICAgLy8gYWxlcnQoJ1RleHQgY29waWVkIHRvIGNsaXBib2FyZCEnKTtcblxuICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgfVxuICBoYW5kbGVDb3B5Q2xpY2soaW5kZXg6IGFueSkge1xuICAgIC8vIENvcHkgdGhlIG1lc3NhZ2UgdG8gdGhlIGNsaXBib2FyZFxuICAgIGNvbnN0IGNvbnRlbnRUb0NvcHkgPSB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2U7XG4gICAgY29uc3QgcmVzdXRsdCA9IHRoaXMuY29weVRleHQoJ21lc3NhZ2VUZXh0XycgKyBpbmRleCwgaW5kZXgpO1xuICB9XG5cbiAgc2FuaXRpemVIVE1MKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgZG9jdW1lbnQgZnJhZ21lbnQgdG8gaG9sZCB0aGUgc2ltcGxpZmllZCBjb250ZW50XG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAvLyBBcHBlbmQgdGhlIGNoaWxkcmVuIG9mIHRoZSBib2R5IG9mIHRoZSBwYXJzZWQgZG9jdW1lbnQgdG8gdGhlIGZyYWdtZW50XG4gICAgQXJyYXkuZnJvbShkb2MuYm9keS5jaGlsZE5vZGVzKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgZGl2IGVsZW1lbnQgdG8gaG9sZCB0aGUgc2ltcGxpZmllZCBIVE1MXG4gICAgY29uc3Qgc2ltcGxpZmllZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHNpbXBsaWZpZWREaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG4gICAgLy8gUmVtb3ZlIGNvbXBsZXggdGFncyBvciBhdHRyaWJ1dGVzIGFzIG5lZWRlZFxuICAgIC8vIEV4YW1wbGU6IHJlbW92ZSBzY3JpcHRzXG4gICAgc2ltcGxpZmllZERpdlxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdCcpXG4gICAgICAuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBzaW1wbGlmaWVkIEhUTUwgYXMgYSBzdHJpbmdcbiAgICByZXR1cm4gc2ltcGxpZmllZERpdi5pbm5lckhUTUw7XG4gIH1cblxuICBjdXJyZW50TWVzc2FnZUZvckVkaXRvcjogYW55ID0gJyc7XG4gIGN1cnJlbnRJbmRleEZvckVkaXRvcjogYW55ID0gLTE7XG4gIGhhbmRsZUVkaXRvckNsaWNrKGluZGV4OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPT0gLTEpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4Rm9yRWRpdG9yID0gaW5kZXg7XG4gICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5zYW5pdGl6ZUhUTUwoXG4gICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZSxcbiAgICAgICk7XG4gICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAvLyAnU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzonLFxuICAgICAgICAnJyxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4Rm9yRWRpdG9yID09IGluZGV4KSB7XG4gICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgKz0gdGhpcy5zYW5pdGl6ZUhUTUwoXG4gICAgICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAgIC8vICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICAgJycsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4Rm9yRWRpdG9yID0gaW5kZXg7XG4gICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLnNhbml0aXplSFRNTChcbiAgICAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgICAgLy8gJ1NhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmlzRWRpdG9yID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmlzRWRpdG9yID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICAgIHRoaXMuZWRpdG9yc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgc2Nyb2xsVG9Cb3R0b20oKSB7XG4gICAgaWYgKCF0aGlzLmF1dG9TY3JvbGxPbk5ld01lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICAgIHRoaXMuY2hhdE1haW4ubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICBpZiAoY291bnRlcisrID4gNSkgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgfSwgNSk7XG4gIH1cblxuICBmb2N1c09uVGV4dGFyZWEoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5teUlucHV0ICYmIHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIGNvbnNvbGUuaW5mbygnaW5jb21pbmcgYWN0aW9uIGZyb20gdGhlIGNoYXRib3QgQUknKTtcbiAgICBjb25zb2xlLmluZm8oYWN0aW9uKTtcblxuICAgIGlmIChhY3Rpb24/LmNvbnRlbnQpIHtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRyYXdlciBpcyBpbml0aWFsbHkgb3BlbiBhbmQgYXBwbHkgb3ZlcmZsb3cgaGlkZGVuIHRvIGJvZHkgaWYgc29cbiAgICBpZiAodGhpcy5kcmF3ZXIub3BlbmVkKSB7XG4gICAgICB0aGlzLnNldEJvZHlPdmVyZmxvdygpO1xuICAgIH1cblxuICAgIC8vIExpc3RlbiB0byBjaGFuZ2VzIGluIHRoZSBkcmF3ZXIgYmVpbmcgb3BlbmVkIG9yIGNsb3NlZFxuICAgIHRoaXMuZHJhd2VyLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoKG9wZW5lZDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKG9wZW5lZCkge1xuICAgICAgICB0aGlzLnNldEJvZHlPdmVyZmxvdygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVCb2R5T3ZlcmZsb3coKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZHJhd2VyLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoKG9wZW5lZCkgPT4ge1xuICAgICAgaWYgKG9wZW5lZCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5teUlucHV0ICYmIHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpOyAvLyBGb2N1cyBvbiB0aGUgdGV4dGFyZWFcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCb2R5T3ZlcmZsb3coKSB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQm9keU92ZXJmbG93KCkge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gIH1cblxuICBnZXRTcGVha2Vyc0J5U3RhZmZJZHMoaWRzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55W10gfCBudWxsPiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vdXNlcnMvZ2V0LWJ5LXN0YWZmLWlkc2A7XG4gICAgY29uc3QgY2xlYW5JZHMgPSBBcnJheS5mcm9tKFxuICAgICAgbmV3IFNldCgoaWRzIHx8IFtdKS5tYXAoKHgpID0+IFN0cmluZyh4ID8/ICcnKS50cmltKCkpLmZpbHRlcihCb29sZWFuKSksXG4gICAgKTtcbiAgICBpZiAoY2xlYW5JZHMubGVuZ3RoID09PSAwKSByZXR1cm4gb2YobnVsbCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgYXBpS2V5OiB0aGlzLmF1dG9nZW5LZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueVtdPih1cmwsIGNsZWFuSWRzLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHRhcCgoZGF0YTogYW55W10pID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGF0YS5mb3JFYWNoKChzcGVha2VyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IFN0cmluZyhzcGVha2VyPy5pZCA/PyAnJykudHJpbSgpO1xuICAgICAgICAgICAgaWYgKGlkKSB0aGlzLnNwZWFrZXJzW2lkXSA9IHNwZWFrZXI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHNwZWFrZXJzOicsIGVycik7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwZXJmb3JtU2Vzc2lvbkFjdGlvbihzZXNzaW9uSWQsIGFjdGlvbikge1xuICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMubmV4dCh7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBhZGRDbG9zZUJvdENsaWNrRXZlbnQoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjbG9zZUJvdE5vdycpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VCb3QubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNNb2JpbGVCcm93c2VyKCkge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICk7XG4gIH1cblxuICBjb25uZWN0VG9Vc2VyKHVzZXJJZCkge1xuICAgIHRoaXMuY29ubmVjdFdpdGhVc2VyLmVtaXQoe1xuICAgICAgY29ubmVjdDogIXRoaXMuY2FuRGlzY29ubmVjdCh1c2VySWQpLFxuICAgICAgdXNlcklkLFxuICAgIH0pO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZldGNoUGVuZGluZ1JlcXVlc3RzKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgc2NoZWR1bGVNZWV0aW5nV2l0aFVzZXIodXNlcikge1xuICAgIHRoaXMuc2NoZWR1bGVNZWV0aW5nLmVtaXQodXNlcik7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ2l2ZW4gdXNlcklkIGhhcyBhIHBlbmRpbmcgY29ubmVjdGlvbiByZXF1ZXN0IHNlbnQgKHNob3cgXCJSZXF1ZXN0IFNlbnRcIiBkaXNhYmxlZCkuICovXG4gIGNoZWNrUGVuZGluZ1NlbnRSZXF1ZXN0KHVzZXJJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICh1c2VySWQgPT0gbnVsbCB8fCB1c2VySWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1NlbnRSZXF1ZXN0VXNlcklkcz8ubGVuZ3RoXG4gICAgICA/IHRoaXMucGVuZGluZ1NlbnRSZXF1ZXN0VXNlcklkc1xuICAgICAgOiB0aGlzLnBlbmRpbmdSZXF1ZXN0cztcbiAgICByZXR1cm4gISFwZW5kaW5nPy5maW5kKChhOiBhbnkpID0+IGEgPT0gdXNlcklkKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgYXR0ZW5kZWUgY2FuIGJlIGZvbGxvd2VkIChzaG93IFwiQ29ubmVjdFwiIGJ1dHRvbikuIE5vdCBjb25uZWN0ZWQgYW5kIG5vIHBlbmRpbmcgc2VudCByZXF1ZXN0LiAqL1xuICBjYW5Gb2xsb3dVc2VyKGF0dGVuZGVlOiB7IGlkPzogc3RyaW5nIH0pOiBib29sZWFuIHtcbiAgICBjb25zdCB1aWQgPSBhdHRlbmRlZT8uaWQ7XG4gICAgaWYgKHVpZCA9PSBudWxsIHx8IHVpZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5jYW5VbmZvbGxvd1VzZXIoYXR0ZW5kZWUpIHx8IHRoaXMuY2hlY2tQZW5kaW5nU2VudFJlcXVlc3QodWlkKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgYXR0ZW5kZWUgaXMgYWxyZWFkeSBjb25uZWN0ZWQgKHNob3cgXCJEaXNjb25uZWN0XCIgYnV0dG9uKS4gKi9cbiAgY2FuVW5mb2xsb3dVc2VyKGF0dGVuZGVlOiB7IGlkPzogc3RyaW5nIH0pOiBib29sZWFuIHtcbiAgICBjb25zdCB1aWQgPSBhdHRlbmRlZT8uaWQ7XG4gICAgaWYgKHVpZCA9PSBudWxsIHx8IHVpZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5jb25uZWN0aW9uc0xpc3Q/Lmxlbmd0aFxuICAgICAgPyB0aGlzLmNvbm5lY3Rpb25zTGlzdFxuICAgICAgOiB0aGlzLm15Q29ubmVjdGlvbnM7XG4gICAgcmV0dXJuICEhbGlzdD8uZmluZCgoYzogYW55KSA9PiAoYy51c2VySWQgPz8gYy5pZCkgPT0gdWlkKTtcbiAgfVxuXG4gIGNhbkNvbm5lY3QodXNlcklkKSB7XG4gICAgcmV0dXJuICEoXG4gICAgICB0aGlzLmNhbkRpc2Nvbm5lY3QodXNlcklkKSB8fFxuICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZmluZCgoYSkgPT4gYSA9PSB1c2VySWQpXG4gICAgKTtcbiAgfVxuXG4gIGNhbkRpc2Nvbm5lY3QodXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMubXlDb25uZWN0aW9ucy5maW5kKChjb25uKSA9PiBjb25uLnVzZXJJZCA9PSB1c2VySWQpO1xuICB9XG5cbiAgZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgYXBpS2V5OiB0aGlzLmF1dG9nZW5LZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vY29ubmVjdGlvbi1yZXF1ZXN0cy9hdXRvZ2VuL3BlbmRpbmctc2VudC1yZXF1ZXN0cz91c2VySWQ9JHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICB7IGhlYWRlcnMgfSxcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSByZXM7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGVuZGluZyByZXF1ZXN0czogJywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgZmV0Y2hNeUNvbm5lY3Rpb25zKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogdGhpcy5hdXRvZ2VuS2V5LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L3VzZXJzLWNvbm5lY3Rpb25zL2F1dG9nZW4/dXNlcklkPSR7dGhpcy51c2VySWR9YCxcbiAgICAgICAgeyBoZWFkZXJzIH0sXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubXlDb25uZWN0aW9ucyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBpc0Ryb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBhZ2VudHM6IGFueTtcbiAgc2VsZWN0ZWRBZ2VudHMgPSBbXTtcbiAgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgLy8gVG9nZ2xlIHRoZSBkcm9wZG93biB2aXNpYmlsaXR5XG4gIHRvZ2dsZURyb3Bkb3duKCkge1xuICAgIGlmICghdGhpcy5hZ2VudHMpIHRoaXMuZmV0Y2hBZ2VudHMoKTtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gIXRoaXMuaXNEcm9wZG93bk9wZW47XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25TZWxlY3RBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5hZ2VudHM/LmZvckVhY2goKGFnZW50KSA9PiAoYWdlbnQuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uQWdlbnRDaGFuZ2UoYWdlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8vYWdlbnQuc2VsZWN0ZWQgPSAhYWdlbnQuc2VsZWN0ZWQ7XG4gICAgLy9jb25zb2xlLmxvZyhhZ2VudCk7XG4gICAgbGV0IGFnZW50Rm91bmQgPSB0aGlzLmFnZW50cy5maWx0ZXIoKHApID0+IHAuaWQgPT0gYWdlbnQuaWQpO1xuICAgIGlmIChhZ2VudEZvdW5kICYmIGFnZW50Rm91bmQubGVuZ3RoID4gMCkge1xuICAgICAgYWdlbnRGb3VuZFswXS5zZWxlY3RlZCA9ICFhZ2VudEZvdW5kWzBdLnNlbGVjdGVkO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhcmVBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZ2VudHM/LmV2ZXJ5KChhZ2VudCkgPT4gIWFnZW50LnNlbGVjdGVkKTtcbiAgfVxuXG4gIGdldERyb3Bkb3duSGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlbGVjdGVkQWdlbnRzID0gdGhpcy5hZ2VudHM/LmZpbHRlcigoYWdlbnQpID0+IGFnZW50LnNlbGVjdGVkKTtcbiAgICBpZiAoIXNlbGVjdGVkQWdlbnRzKSB7XG4gICAgICByZXR1cm4gJ0FsbCBBZ2VudHMnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2VsZWN0ZWRBZ2VudHMgJiYgc2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJ0FsbCBBZ2VudHMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkQWdlbnRzPy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtzZWxlY3RlZEFnZW50cz8ubGVuZ3RofSBBZ2VudHMgU2VsZWN0ZWRgXG4gICAgICAgICAgOiBgJHtzZWxlY3RlZEFnZW50cz8ubGVuZ3RofSBBZ2VudCBTZWxlY3RlZGA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZldGNoQWdlbnRzX2h0dHAoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkFHRU5UU19BUEl9L0NvUGlsb3QvJHt0aGlzLmJvdElkfS9hY3RpdmUtYWdlbnRzYDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCB7fSwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLmFnZW50cyA9IHJlcy5tYXAoKGFnZW50KSA9PiAoe1xuICAgICAgICAgICAgLi4uYWdlbnQsXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZzogJywgZXJyb3IpO1xuXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbiAgaXNEb2NJbkVkaXRNb2RlID0gZmFsc2U7XG4gIGRvY3VtZW50Q29udGVudDogYW55O1xuXG4gIGNvbnZlcnNhdGlvbklkOiBhbnk7XG4gIGlzQ29udGVudExvYWRlZCA9IGZhbHNlO1xuXG4gIGZldGNoQ29udGVudF9odHRwKCkge1xuICAgIHRoaXMuaXNEb2NJbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5pc0NvbnRlbnRMb2FkZWQgPSBmYWxzZTtcbiAgICBjb25zb2xlLmxvZygnQVBJIGNhbGwgZnVuY3Rpb24nKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkoXG4gICAgICB0aGlzLmJvdElkLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmV2ZW50SWQsXG4gICAgKTtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uX2lkO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29udmVyc2F0aW9uRG9jdW1lbnRzP2NvbnZlcnNhdGlvbklkPSR7Y29udmVyc2F0aW9uX2lkfSZib3RJZD0ke3RoaXMuYm90SWR9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6ICdXSXovcUFtK0VFbWZPa0ZhVUEvd2VBPT0nLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuaXNEb2NJbkVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50Q29udGVudCA9IHJlcztcbiAgICAgICAgICBjb25zb2xlLmxvZygnR2V0IEFQSSBjYWxsbGVkIHN1Y2Nlc3MnKTtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWcgREo6ICcsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NvbnRlbnRMb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvcj8uc3RhdHVzID09IDQwNCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkYXNoJyk7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQWdlbnRzKCkge1xuICAgIHRoaXMuZmV0Y2hBZ2VudHNfaHR0cCgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZmV0Y2hFZGl0b3JDb250ZW50KCkge1xuICAgIHRoaXMuZmV0Y2hDb250ZW50X2h0dHAoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vIGV2ZW50cy8ke2V2ZW50SWR9L3VzZXJzLWNvbm5lY3Rpb25zXG4gIHByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShtYXJrZG93bjogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYSBjdXN0b20gcmVuZGVyZXIgdG8gbW9kaWZ5IDxhPiB0YWdzXG4gICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoKTtcblxuICAgICAgLy8gQ3VzdG9taXplIGFuY2hvciB0YWdzIHRvIGluY2x1ZGUgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIHJlbmRlcmVyLmxpbmsgPSAoaHJlZjogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHtocmVmfVwiIHRpdGxlPVwiJHtcbiAgICAgICAgICB0aXRsZSB8fCAnJ1xuICAgICAgICB9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHt0ZXh0fTwvYT5gO1xuICAgICAgfTtcblxuICAgICAgLy8gUGFyc2UgdGhlIG1hcmtkb3duIGNvbnRlbnQgdG8gSFRNTCB1c2luZyBtYXJrZWQgd2l0aCB0aGUgY3VzdG9tIHJlbmRlcmVyXG4gICAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBtYXJrZWQucGFyc2UobWFya2Rvd24sIHsgcmVuZGVyZXI6IHJlbmRlcmVyIH0pO1xuXG4gICAgICAvLyBTYW5pdGl6ZSB0aGUgcGFyc2VkIEhUTUwgdXNpbmcgQW5ndWxhcidzIERvbVNhbml0aXplclxuICAgICAgY29uc3Qgc2FuaXRpemVkSHRtbCA9XG4gICAgICAgIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKG1hcmtkb3duQ29udGVudCk7XG5cbiAgICAgIC8vIFJldHVybiB0aGUgc2FmZSBIVE1MIGNvbnRlbnQgZm9yIGRpc3BsYXlcbiAgICAgIHJldHVybiBzYW5pdGl6ZWRIdG1sO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIG1hcmtkb3duOicsIGVycm9yKTtcbiAgICAgIHJldHVybiAnJzsgLy8gUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBvciBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHlcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlSHRtbChtYXJrZG93bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW1hcmtkb3duIHx8ICEobWFya2Rvd24ubGVuZ3RoID4gMCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0lucHV0IE1hcmtkb3duIGlzIG51bGwgb3IgZW1wdHknKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGhlYWRlcnMgKCMjIyBvciAjIykgdG8gPHN0cm9uZz4gZm9yIGJvbGQgaGVhZGluZ3NcbiAgICBsZXQgaHRtbCA9IG1hcmtkb3duLnJlcGxhY2UoXG4gICAgICAvXigjezEsNn0pXFxzKyguKikkL2dtLFxuICAgICAgKG1hdGNoLCBoYXNoZXMsIHRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBoYXNoZXMubGVuZ3RoO1xuICAgICAgICBpZiAobGV2ZWwgPT09IDMpIHtcbiAgICAgICAgICByZXR1cm4gYDxoMz48c3Ryb25nPiR7dGV4dH08L3N0cm9uZz48L2gzPmA7XG4gICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09IDQpIHtcbiAgICAgICAgICByZXR1cm4gYDxoND48c3Ryb25nPiR7dGV4dH08L3N0cm9uZz48L2g0PmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8c3Ryb25nPiR7dGV4dH08L3N0cm9uZz5gO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBjb2RlIGJsb2NrcyB3aXRoIGxhbmd1YWdlIHRvIHByZWZvcm1hdHRlZCBIVE1MXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYGBgKFxcdyspP1xcbihbXFxzXFxTXSo/KWBgYC9nLCAobWF0Y2gsIGxhbmcsIGNvZGUpID0+IHtcbiAgICAgIGNvbnN0IGVzY2FwZWRDb2RlID0gdGhpcy5lc2NhcGVIdG1sKGNvZGUpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5nIHx8ICdwbGFpbnRleHQnO1xuXG4gICAgICAvLyBDcmVhdGUgYSBjb3B5IGJ1dHRvbiBmb3IgdGhlIGNvZGUgYmxvY2tcbiAgICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29kZS1jb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImNvcHktYnV0dG9uXCIgY2xhc3M9XCJjb3B5LWJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ1xcYCR7ZXNjYXBlZENvZGV9XFxgJylcIj4ke3RoaXMuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgJ0NvcHknLFxuICAgICAgICApfTwvYnV0dG9uPlxuICAgICAgICA8cHJlIGNsYXNzPVwiY29kZV9ibG9jayBkaWZmXCI+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0ke2xhbmd1YWdlfVwiPiR7ZXNjYXBlZENvZGV9PC9jb2RlPjwvcHJlPlxuICAgICAgPC9kaXY+YDtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgaW5saW5lIGNvZGUgKHdyYXBwZWQgaW4gYGJhY2t0aWNrc2ApIHRvIGlubGluZSA8Y29kZT4gdGFnc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL2AoW15gXSspYC9nLCAnPGNvZGU+JDE8L2NvZGU+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGJvbGQgdG8gSFRNTCA8c3Ryb25nPlxuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL1xcKlxcKiguKj8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IG51bWJlcmVkIGxpc3RzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXlxcZCtcXC5cXHMrKC4qKSQvZ20sICc8bGk+JDE8L2xpPicpO1xuXG4gICAgLy8gQ29udmVydCBidWxsZXQgcG9pbnQgbGlzdHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFwtXFxzKyguKikkL2dtLCAnPGxpPiQxPC9saT4nKTtcblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gbGlua3MgdG8gSFRNTCBsaW5rc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoXG4gICAgICAvXFxbKFteXFxdXSspXVxcKChbXildKylcXCkvZyxcbiAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nLFxuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IG5ldyBsaW5lcyB0byA8YnI+IHRhZ3MgZm9yIHBhcmFncmFwaHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPzpcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGVzY2FwZSBIVE1MIGNoYXJhY3RlcnMgZm9yIGNvZGUgYmxvY2tzXG4gIGVzY2FwZUh0bWwoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29kZVxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmIzAzOTsnKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmRcbiAgcHVibGljIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBhbGVydCgnQ29kZSBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGlzQ29sbGFwc2VkID0gZmFsc2U7XG4gIGlzQ29sbGFwc2VkRm9yR3JhcGggPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JGR3JhcGggPSBmYWxzZTtcbiAgdG9nZ2xlQ29sbGFwc2UoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbGxhcHNlR3JhcGgoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JHcmFwaDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgdG9nZ2xlQ29sbGFwc2VGR3JhcGgoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZEZvckZHcmFwaCA9ICF0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICAvLyAgIFtcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiQUkgTmV3cyBKYW51YXJ5IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJFYWNoIG1vbnRoLCB3ZSBjb21waWxlIHNpZ25pZmljYW50IG5ld3MsIHRyZW5kcywgYW5kIGhhcHBlbmluZ3MgaW4gQUksIHByb3ZpZGluZyBkZXRhaWxlZCBzdW1tYXJpZXMgd2l0aCBrZXkgcG9pbnRzIGluIGJ1bGxldCBmb3JtIGZvciBjb25jaXNlIHlldCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly90aGVhaXRyYWNrLmNvbS9haS1uZXdzLWphbnVhcnktMjAyNC9cIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIlRvcCBBSSBOZXdzLCBKYW51YXJ5IDIwMjQgLSBFdmVyeXBpeGVsIEpvdXJuYWxcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkluIHRoaXMgbW9udGhseSByb3VuZHVwLCB3ZSBzcG90bGlnaHQgdGhlIHRvcCBBSSBuZXdzIHN0b3JpZXMgZnJvbSBKYW51YXJ5LCBpbmNsdWRpbmcgdGhlIE9wZW5BSSB2cy4gVGhlIE5ldyBZb3JrIFRpbWVzIExhd3N1aXQuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL2pvdXJuYWwuZXZlcnlwaXhlbC5jb20vdG9wLWFpLW5ld3MtamFudWFyeS0yMDI0XCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEp1bHkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIlRoaXMgcGFnZSBmZWF0dXJlcyBBSSBOZXdzIGZvciBKdWx5IDIwMjQsIGhpZ2hsaWdodGluZyBzaWduaWZpY2FudCBldmVudHMgc3VjaCBhcyBDYW52YSBhY3F1aXJpbmcgTGVvbmFyZG8gQUkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtanVseS0yMDI0LWluLWRlcHRoLWFuZC1jb25jaXNlL1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiSmFudWFyeSBuZXdzIHJvdW5kdXA6IFdoYXQncyBuZXcgaW4gdGhlIHdvcmxkIG9mIEFJPyAtIFBsdXJhbHNpZ2h0XCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJPcGVuQUnigJlzIG5ldyBHUFQgc3RvcmUsIGJ1c2luZXNzLXJlYWR5IENoYXRHUFQgcGxhbnMsIGFuZCBhIHByZWRpY3RlZCByaXNlIGluIEFJLXBvd2VyZWQgY3liZXJjcmltZS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vd3d3LnBsdXJhbHNpZ2h0LmNvbS9yZXNvdXJjZXMvYmxvZy9kYXRhL2FpLXRoaXMtbW9udGgtamFudWFyeS0yMDI0XCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEF1Z3VzdCAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEF1Z3VzdCAyMDI0LCB3aXRoIGhpZ2hsaWdodHMgc3VjaCBhcyBOdmlkaWEgZGVsYXlpbmcgdGhlIOKAnEJsYWNrd2VsbOKAnSBCMjAwIEFJIGNoaXBzIGRlbGl2ZXJ5LlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly90aGVhaXRyYWNrLmNvbS9haS1uZXdzLWF1Z3VzdC0yMDI0LWluLWRlcHRoLWFuZC1jb25jaXNlLWR1cGxpY2F0ZS9cIlxuICAvLyAgIH1cbiAgLy8gXVxuICBkYXRlVGltZSA9IHsgbm93OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfTtcbiAgLy8gRXh0cmFjdHMgdGhlIGRvbWFpbiBmcm9tIGEgVVJMXG4gIGdldERvbWFpbk5hbWUodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGhvc3RuYW1lIH0gPSBuZXcgVVJMKHVybCk7XG4gICAgICByZXR1cm4gaG9zdG5hbWUucmVwbGFjZSgvXnd3d1xcLi8sICcnKTsgLy8gUmVtb3ZlICd3d3cuJyBpZiBwcmVzZW50XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdlbmVyYXRlcyB0aGUgZmF2aWNvbiBVUkxcbiAgZ2V0RmF2aWNvblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5nZXREb21haW5OYW1lKHVybCk7XG4gICAgcmV0dXJuIGBodHRwczovL3d3dy5nb29nbGUuY29tL3MyL2Zhdmljb25zP3N6PTEyOCZkb21haW49JHtkb21haW59YDtcbiAgfVxuICBjdXJyZW50U291cmNlc0xpc3Q6IGFueSA9IFtdO1xuICBvbkNhcmRDbGljayhzb3VyY2VzKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U291cmNlc0xpc3QgPSBzb3VyY2VzO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvdXJjZXNEcmF3ZXIub3BlbigpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICBpZiAoYnV0dG9uKSB7XG4gICAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBpc1Nob3dFZGl0b3JCdXR0b24gPSB0cnVlO1xuXG4gIG9wZW5PdXRlckVkaXRvcigpIHtcbiAgICB0aGlzLmZldGNoRWRpdG9yQ29udGVudCgpO1xuICAgIHRoaXMuZWRpdG9yc0RyYXdlci5vcGVuKCk7XG4gICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xvc2VFZGl0b3IoKSB7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLmNsb3NlKCk7XG4gICAgdGhpcy5pc0RyYXdlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG5cbiAgb25DbG9zZVNvdXJjZSgpIHtcbiAgICB0aGlzLnNvdXJjZXNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZFxuICAgIHRoaXMub25EcmF3ZXJDbG9zZWQoKTtcbiAgfVxuICBvbkRyYXdlckNsb3NlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZFxuICAgICAgLy8gVXNlIG5nQ2xhc3MgdG8gZHluYW1pY2FsbHkgYXBwbHkgdGhlIGNsYXNzXG4gICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICB9LCA4MDApO1xuICB9XG4gIGlzRHJhd2VyT3BlbiA9IHRydWU7XG5cbiAgdG9nZ2xlRHJhd2VyKHRvZG8pIHtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRvZG87XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpO1xuICB9XG4gIHVwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKSB7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5pc0RyYXdlck9wZW4gPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIH1cbiAgfVxuICBvcGVuTGlua0luTmV3VGFiKGxpbms6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5vcGVuKGxpbmssICdfYmxhbmsnKTtcbiAgfVxuICBhZGp1c3RUZXh0YXJlYUhlaWdodChldmVudDogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIC8vIFByZXZlbnRzIGEgbmV3IGxpbmUgZnJvbSBiZWluZyBhZGRlZFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIGNvbnN0IHRleHRhcmVhID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgLy8gRW5zdXJlIHRoZSBoZWlnaHQgZG9lc24ndCBleGNlZWQgdGhlIG1heC1oZWlnaHQgc2V0IGluIENTU1xuICAgIGlmICh0ZXh0YXJlYS5zY3JvbGxIZWlnaHQgPiAxNTApIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAxNTBweGA7IC8vIEFkanVzdCBoZWlnaHQgdG8gbWF0Y2ggY29udGVudFxuICAgICAgdGV4dGFyZWEuc3R5bGUub3ZlcmZsb3dZID0gJ2F1dG8nOyAvLyBFbmFibGUgc2Nyb2xsaW5nIGlmIGNvbnRlbnQgZXhjZWVkcyA0MDBweFxuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJzsgLy8gSGlkZSBzY3JvbGxiYXIgaWYgY29udGVudCBpcyB3aXRoaW4gbGltaXRzXG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlV29ya2Zsb3dzKHZhbHVlID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5jaGVja0ZvckNvcDI5Qm90SWQoKSkge1xuICAgICAgdGhpcy5ib3RTZXJ2aWNlLmdldFdvcmtmbG93c0J5T3JnSWQodGhpcy5vcmdJZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vcmdXb3JrZmxvd3MgPSByZXM7XG4gICAgICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSB2YWx1ZSA9PSBudWxsID8gIXRoaXMuaXNXb3JrZmxvd09wZW4gOiB2YWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNXb3JrZmxvd09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgICAgICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIC8vIENyZWF0ZSBmb3JtIGNvbnRyb2xzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHNlbGVjdGVkV29ya2Zsb3cuVHJpZ2dlci5JbnB1dFNjaGVtYVxuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkV29ya2Zsb3c/LlRyaWdnZXI/LklucHV0U2NoZW1hKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuVHJpZ2dlci5JbnB1dFNjaGVtYS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICBmb3JtQ29udHJvbHNbaW5wdXQuSW5wdXRJZF0gPSBbXG4gICAgICAgICAgaW5wdXQuVmFsdWUgfHwgJycsXG4gICAgICAgICAgaW5wdXQuUmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGZvcm1cbiAgICB0aGlzLndvcmtmbG93Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTZWxlY3RlZCh3b3JrZmxvdykge1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IHdvcmtmbG93O1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IHRydWU7XG4gIH1cblxuICBvbldvcmtmbG93U3VibWl0KCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RBbGxDaGF0Jyk7XG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSk7XG5cbiAgICAgIHZhciBpbnB1dCA9IHRoaXMucHJlcGFyZUh0bWwoXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVNYXJrZG93bihcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgICAgICB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIHVwZGF0ZSBsYXN0IHR3byBjaGF0TG9nIGVudHJpZXMsIHNldCBzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXIgPSBmYWxzZVxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyJ10gPVxuICAgICAgICAgIGZhbHNlO1xuICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDJdWydzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXInXSA9XG4gICAgICAgICAgZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIG1lc3NhZ2U6IGlucHV0LFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgIHNob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlcjogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhpbnB1dCk7XG5cbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uUHJvZ3Jlc3MgPSAwO1xuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb24gPVxuICAgICAgICAnRXhlY3V0aW5nICcgKyB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuQWN0aW9uc1swXS5OYW1lO1xuICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSB0cnVlO1xuICAgICAgdGhpcy5leGVjdXRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHtcbiAgICAgICAgQWN0aW9uczogdGhpcy5zZWxlY3RlZFdvcmtmbG93LkFjdGlvbnMsXG4gICAgICAgIElucHV0czogdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICAgIHdvcmtmbG93SW5wdXRzOiB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgV29ya2Zsb3dOYW1lOiB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuTmFtZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscztcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBleGVjdXRlIHRoZSBhc2sgZW5kcG9pbnQgd2l0aCB3b3JrZmxvdyBpbnB1dFxuICAgICAgdGhpcy5tYWtlQXNrUmVxdWVzdChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHRoaXMuYWdlbnRzLFxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbktleSxcbiAgICAgICAgJycsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1snX2lkJ10sXG4gICAgICAgIHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYDtcblxuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICB1c2VyX3F1ZXN0aW9uOiBpbnB1dE1zZyxcbiAgICAgIHVzZXJfaWQ6IHRoaXMudXNlcklkLFxuICAgICAgYm90X2lkOiB0aGlzLmJvdElkLFxuICAgICAgbWVzc2FnZV9pZDogdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdlbmVyYXRlS2V5KCksXG4gICAgICBzZXNzaW9uX2lkOiB0aGlzLmNvblNlc3Npb25LZXksXG4gICAgICBhZ2VudHM6IGFnZW50cz8uZmlsdGVyKChwKSA9PiBwLnNlbGVjdGVkKS5tYXAoKHApID0+IHAuaWQpID8/IFtdLFxuICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGZpcnN0X25hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgbGFzdF9uYW1lOiB0aGlzLmxhc3ROYW1lLFxuICAgIH07XG5cbiAgICBpZiAod29ya2Zsb3dJZCkge1xuICAgICAgYm9keVsnd29ya2Zsb3dfaWQnXSA9IHdvcmtmbG93SWQ7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pbnB1dHMnXSA9IHdvcmtmbG93X2lucHV0cztcbiAgICB9XG5cbiAgICBjb25zdCB1c2Vyc0FwaSA9IHRoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJO1xuICAgIHRoaXMucGxhdGZvcm1Ub2tlblJlZnJlc2hcbiAgICAgIC5lbnN1cmVWYWxpZEFjY2Vzc1Rva2VuKHRoaXMuczI3VG9rZW4sIHVzZXJzQXBpKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZW5zdXJlZCkgPT4ge1xuICAgICAgICAgIGxldCBiZWFyZXIgPSBlbnN1cmVkLmFjY2Vzc1Rva2VuIHx8IHRoaXMuczI3VG9rZW4gfHwgJyc7XG4gICAgICAgICAgaWYgKGVuc3VyZWQucmVmcmVzaGVkICYmIGVuc3VyZWQuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMuczI3VG9rZW4gPSBlbnN1cmVkLmFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgaWYgKGVuc3VyZWQuYXV0aFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9rZW5zUmVmcmVzaGVkLmVtaXQoZW5zdXJlZC5hdXRoUmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmV4ZWN1dGVBc2tGZXRjaCh1cmwsIGJvZHksIGJlYXJlciwgbXNnLCBjaGF0KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzNDAxID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbi5lbWl0KCk7XG4gICAgICAgICAgaWYgKG1zZyAmJiBjaGF0KSB7XG4gICAgICAgICAgICB0aGlzLm1zZyA9IG1zZztcbiAgICAgICAgICAgIHRoaXMuY2hhdCA9IGNoYXQ7XG4gICAgICAgICAgICB0aGlzLmlzRmV0Y2hEYXRhRm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogYC9haS9hc2tgIGZldGNoIHVzaW5nIGEgQmVhcmVyIHRva2VuIChhZnRlciBvcHRpb25hbCBwcm9hY3RpdmUgcmVmcmVzaCkuICovXG4gIHByaXZhdGUgZXhlY3V0ZUFza0ZldGNoKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk6IGFueSxcbiAgICBiZWFyZXJUb2tlbjogc3RyaW5nLFxuICAgIG1zZz86IGFueSxcbiAgICBjaGF0PzogYW55LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgYmVhcmVyVG9rZW4sXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgZXZlbnRVcmw6IHRoaXMuZXZlbnRVcmwsXG4gICAgICBldmVudElkOiB0aGlzLmV2ZW50SWQsXG4gICAgICBldmVudFRva2VuOiB0aGlzLmV2ZW50VG9rZW4sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLndvcmtzcGFjZVRva2VuKSB7XG4gICAgICBoZWFkZXJzWyd3b3Jrc3BhY2VUb2tlbiddID0gdGhpcy53b3Jrc3BhY2VUb2tlbjtcbiAgICB9XG5cbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgdGhpcy5pczQwMSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4uZW1pdCgpO1xuXG4gICAgICAgICAgaWYgKG1zZyAmJiBjaGF0KSB7XG4gICAgICAgICAgICB0aGlzLm1zZyA9IG1zZztcbiAgICAgICAgICAgIHRoaXMuY2hhdCA9IGNoYXQ7XG4gICAgICAgICAgICB0aGlzLmlzRmV0Y2hEYXRhRm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pczQwMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6ICcsIGVycik7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIG1ha2VBc2tSZXF1ZXN0b2xkKFxuICAgIGlucHV0TXNnOiBzdHJpbmcsXG4gICAgYWdlbnRzOiBhbnlbXSxcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICAgIG1zZz86IGFueSxcbiAgICBjaGF0PzogYW55LFxuICAgIHdvcmtmbG93SWQ/OiBzdHJpbmcsXG4gICAgd29ya2Zsb3dfaW5wdXRzPzogYW55LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9haS9hc2tgO1xuXG4gICAgY29uc3QgYm9keTogYW55ID0ge1xuICAgICAgdXNlcl9xdWVzdGlvbjogaW5wdXRNc2csXG4gICAgICB1c2VyX2lkOiB0aGlzLnVzZXJJZCxcbiAgICAgIGJvdF9pZDogdGhpcy5ib3RJZCxcbiAgICAgIG1lc3NhZ2VfaWQ6IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZW5lcmF0ZUtleSgpLFxuICAgICAgYWdlbnRzOiBhZ2VudHM/LmZpbHRlcigocCkgPT4gcC5zZWxlY3RlZCkubWFwKChwKSA9PiBwLmlkKSA/PyBbXSxcbiAgICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgICBmaXJzdF9uYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgIGxhc3RfbmFtZTogdGhpcy5sYXN0TmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtmbG93SWQpIHtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lkJ10gPSB3b3JrZmxvd0lkO1xuICAgICAgYm9keVsnd29ya2Zsb3dfaW5wdXRzJ10gPSB3b3JrZmxvd19pbnB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgICdldmVudElkJzogdGhpcy5ldmVudElkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCB7IGhlYWRlcnMgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAvLyBBZGRpdGlvbmFsIHJlc3BvbnNlIGhhbmRsaW5nIGlmIG5lZWRlZFxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiAnLCBlcnIpO1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBudWxsO1xuICAgIHRoaXMub3BlbldvcmtmbG93SW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV29ya2Zsb3dPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2VuZXJhdGVNYXJrZG93bih0aXRsZSwgb2JqKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXJrZG93biB3aXRoIHRoZSB0aXRsZVxuICAgIGxldCBtYXJrZG93biA9IGAjIyAke3RpdGxlfVxcbmA7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIG9iamVjdCBhbmQgYXBwZW5kIHRoZSBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgdmFyIGtleV9sYWJlbCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZpbmQoXG4gICAgICAgICAgKGlucHV0KSA9PiBpbnB1dC5JbnB1dElkID09PSBrZXksXG4gICAgICAgICk/LkxhYmVsIHx8IGtleTtcbiAgICAgIG1hcmtkb3duICs9IGAtICoqJHtrZXlfbGFiZWx9Kio6ICR7dmFsdWV9XFxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2Rvd247XG4gIH1cblxuICBzaG93V29ya2Zsb3dIaXN0b3J5RGV0YWlscyh3b3JrZmxvd19pZCkge1xuICAgIGlmICghd29ya2Zsb3dfaWQpIHtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dFeGVjdXRpb25CeUlkKHdvcmtmbG93X2lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMuQWN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHJlcy5BY3Rpb25zKSkge1xuICAgICAgICByZXMuQWN0aW9ucyA9IHJlcy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGlvbi5JbnNlcnRUaW1lU3RhbXApIHtcbiAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXAgPSBmb3JtYXRUaW1lU3RhbXBzKFxuICAgICAgICAgICAgICB0aGlzLnRpbWV6b25lLFxuICAgICAgICAgICAgICBhY3Rpb24uSW5zZXJ0VGltZVN0YW1wLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5JbnNlcnRUaW1lU3RhbXAgPSBmb3JtYXRUaW1lU3RhbXBzKFxuICAgICAgICB0aGlzLnRpbWV6b25lLFxuICAgICAgICByZXMuSW5zZXJ0VGltZVN0YW1wLFxuICAgICAgKTtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gcmVzO1xuICAgICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5zaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0gZmFsc2U7XG4gIH1cblxuICBvYmplY3RUb0FycmF5KG9iajogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcCgoa2V5KSA9PiAoeyBrZXksIHZhbHVlOiBvYmpba2V5XSB9KSk7XG4gIH1cblxuICBzdGFydE5ld0NvbnZlcnNhdGlvbigpIHtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkoXG4gICAgICB0aGlzLmJvdElkLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMuZXZlbnRJZCxcbiAgICApO1xuICAgIHRoaXMuY2hhdExvZyA9IFt0aGlzLmNoYXRMb2dbMF1dO1xuICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgdGhpcy5jaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZW5zdXJlQ2hhdFNvY2tldCgpO1xuICAgIH0sIDIwMCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTcGVlY2hSZWNvZ25pemVyKHRva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNwZWVjaENvbmZpZyA9IFNwZWVjaFNESy5TcGVlY2hDb25maWcuZnJvbUF1dGhvcml6YXRpb25Ub2tlbihcbiAgICAgIHRva2VuLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgKTtcbiAgICBjb25zdCBhdWRpb0NvbmZpZyA9IFNwZWVjaFNESy5BdWRpb0NvbmZpZy5mcm9tRGVmYXVsdE1pY3JvcGhvbmVJbnB1dCgpO1xuICAgIHRoaXMucmVjb2duaXplciA9IG5ldyBTcGVlY2hTREsuU3BlZWNoUmVjb2duaXplcihcbiAgICAgIHRoaXMuc3BlZWNoQ29uZmlnLFxuICAgICAgYXVkaW9Db25maWcsXG4gICAgKTtcblxuICAgIHRoaXMucmVjb2duaXplci5yZWNvZ25pemluZyA9IChzLCBlKSA9PiB7XG4gICAgICBpZiAoZS5yZXN1bHQucmVhc29uID09PSBTcGVlY2hTREsuUmVzdWx0UmVhc29uLlJlY29nbml6aW5nU3BlZWNoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBlLnJlc3VsdC50ZXh0O1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVjb2duaXppbmc6ICR7ZS5yZXN1bHQudGV4dH1gKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMucmVjb2duaXplci5yZWNvZ25pemVkID0gKHMsIGUpID0+IHtcbiAgICAgIGlmIChlLnJlc3VsdC5yZWFzb24gPT09IFNwZWVjaFNESy5SZXN1bHRSZWFzb24uUmVjb2duaXplZFNwZWVjaCkge1xuICAgICAgICB0aGlzLmlucHV0ID0gZS5yZXN1bHQudGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFJlY29nbml6ZWQ6ICR7ZS5yZXN1bHQudGV4dH1gKTtcbiAgICAgICAgdGhpcy50b2dnbGVSZWNvcmRpbmcoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMucmVjb2duaXplci5jYW5jZWxlZCA9IChzLCBlKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5jZWxlZDogJywgZS5lcnJvckRldGFpbHMpO1xuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml6ZXIuc2Vzc2lvblN0b3BwZWQgPSAocywgZSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1Nlc3Npb24gc3RvcHBlZC4nKTtcbiAgICAgIHRoaXMucmVjb2duaXplci5zdG9wQ29udGludW91c1JlY29nbml0aW9uQXN5bmMoKTtcbiAgICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgfTtcbiAgfVxuXG4gIHRvZ2dsZVJlY29yZGluZygpIHtcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gIXRoaXMuaXNSZWNvcmRpbmc7XG5cbiAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xuICAgICAgdGhpcy5zdGFydFJlY29nbml0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcFJlY29nbml0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRSZWNvZ25pdGlvbigpIHtcbiAgICB0aGlzLnJlY29nbml6ZXIuc3RhcnRDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICB9XG5cbiAgc3RvcFJlY29nbml0aW9uKCkge1xuICAgIHRoaXMucmVjb2duaXplci5zdG9wQ29udGludW91c1JlY29nbml0aW9uQXN5bmMoKTtcbiAgfVxuXG4gIGNoZWNrRm9yQ29wMjlCb3RJZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ib3RJZCA9PSAnNjZmYTNmMjc2YzVkNzFlMjcxN2JmZWE4JyB8fFxuICAgICAgdGhpcy5ib3RJZCA9PSAnNjcxNjMzNTQ1NjUyZGQ3OGVmZWM4NDhkJ1xuICAgICk7XG4gIH1cblxuICBnZXRMYXRlc3RUaW1lKHRpbWUpOiBzdHJpbmcge1xuICAgIGlmICh0aW1lKSB7XG4gICAgICByZXR1cm4gdGltZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7XG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICB9KTsgLy8gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gJ3Nob3J0VGltZScgZm9ybWF0XG4gIH1cblxuICAvKiogVXNlZCBieSB0aGUgdm9pY2UgbW9kYWwgd2hlbiBvcGVuZWQgZnJvbSB0aGlzIGRyYXdlci4gKi9cbiAgdm9pY2VNb2RhbENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSAnJztcblxuICBvcGVuVm9pY2VNb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbktleSA/P1xuICAgICAgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkLCBmYWxzZSwgdGhpcy5ldmVudElkKSA/P1xuICAgICAgJyc7XG4gICAgdGhpcy52b2ljZU1vZGFsQ29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25JZDtcbiAgICB0aGlzLnNldHVwVm9pY2VUcmFuc2NyaXB0cygpO1xuXG4gICAgLy8gQ2xvc2UgZXhpc3Rpbmcgb3ZlcmxheSBpZiBhbnlcbiAgICBpZiAodGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZikge1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBWb2ljZU1vZGFsQ29uZmlnID0ge1xuICAgICAgYXBpVXJsOiB0aGlzLmVudmlyb25tZW50Py5CQVNFX1VSTCA/PyAnJyxcbiAgICAgIHRva2VuOiB0aGlzLnMyN1Rva2VuID8/ICcnLFxuICAgICAgYm90SWQ6IHRoaXMuYm90SWQgPz8gJycsXG4gICAgICBjb252ZXJzYXRpb25JZCxcbiAgICAgIGFwaUtleTogdGhpcy5hcGlLZXkgPz8gJycsXG4gICAgICBldmVudFRva2VuOiB0aGlzLmV2ZW50VG9rZW4gPz8gJycsXG4gICAgICBldmVudElkOiB0aGlzLmV2ZW50SWQgPz8gJycsXG4gICAgICBldmVudFVybDogdGhpcy5ldmVudFVybCA/PyAnJyxcbiAgICAgIGRvbWFpbkF1dGhvcml0eTogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA/PyAncHJvZC1saXRlJyxcbiAgICAgIGFnZW50TmFtZTogdGhpcy5ib3ROYW1lIHx8ICdBSSBBc3Npc3RhbnQnLFxuICAgICAgYWdlbnRSb2xlOiB0aGlzLmJvdFNraWxscyB8fCAnQUkgQWdlbnQgU3BlY2lhbGlzdCcsXG4gICAgICBhZ2VudEF2YXRhcjogdGhpcy5ib3RJY29uLFxuICAgICAgdXNlcnNBcGlVcmw6IHRoaXMuZW52aXJvbm1lbnQ/LlVTRVJTX0FQSSA/PyAnJyxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvc2VDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmKSB7XG4gICAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xvc2VWb2ljZU1vZGFsKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFxuICAgICAgW1xuICAgICAgICB7IHByb3ZpZGU6IFZPSUNFX01PREFMX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9LFxuICAgICAgICB7IHByb3ZpZGU6IFZPSUNFX01PREFMX0NMT1NFX0NBTExCQUNLLCB1c2VWYWx1ZTogY2xvc2VDYWxsYmFjayB9LFxuICAgICAgXSxcbiAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgKTtcblxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5XG4gICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgIC5nbG9iYWwoKVxuICAgICAgICAuYm90dG9tKCcwJylcbiAgICAgICAgLnJpZ2h0KCcwJylcbiAgICAgICAgLmxlZnQoJzAnKVxuICAgICAgICAudG9wKCcwJyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKFxuICAgICAgVm9pY2VBZ2VudE1vZGFsQ29tcG9uZW50LFxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgaW5qZWN0b3IsXG4gICAgKTtcbiAgICBvdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xuICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYgPSBvdmVybGF5UmVmO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2xvc2VWb2ljZU1vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5pc1ZvaWNlTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy52b2ljZUFnZW50U2VydmljZS5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBSZWxvYWQgY2hhdCBoaXN0b3J5IHdoZW4gdm9pY2UgbW9kYWwgY2xvc2VzIChzYW1lIGFzIGluaXRpYWwgbG9hZClcbiAgICB0aGlzLmNoYXRMb2cgPSBbXTtcbiAgICB0aGlzLmZldGNoQ2hhdEhpc3RvcnkoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWFwQ2hhdEhpc3RvcnkocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5IGFmdGVyIHZvaWNlIG1vZGFsIGNsb3NlOicsXG4gICAgICAgICAgZXJyLFxuICAgICAgICApO1xuICAgICAgICAvLyBGYWxsYmFjazogc2hvdyBncmVldGluZyBzbyBjaGF0IGlzIG5vdCBlbXB0eVxuICAgICAgICBpZiAodGhpcy5jaGF0TG9nLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmdyZWV0aW5nTXNnKSB7XG4gICAgICAgICAgdGhpcy5tYXBDaGF0SGlzdG9yeSh7IE1lc3NhZ2VzOiBbXSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFZvaWNlVHJhbnNjcmlwdHMoKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uc1xuICAgIHRoaXMudm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgIC8vIFN1YnNjcmliZSB0byB1c2VyIHRyYW5zY3JpcHRzXG4gICAgY29uc3QgdXNlclN1YiA9IHRoaXMudm9pY2VBZ2VudFNlcnZpY2UudXNlclRyYW5zY3JpcHQkLnN1YnNjcmliZShcbiAgICAgICh0cmFuc2NyaXB0KSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2NyaXB0LmZpbmFsICYmIHRyYW5zY3JpcHQudGV4dC50cmltKCkpIHtcbiAgICAgICAgICAvLyBBZGQgdXNlciBtZXNzYWdlIHRvIGNoYXRcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheSh0cmFuc2NyaXB0LnRleHQpLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gYm90IHRyYW5zY3JpcHRzXG4gICAgY29uc3QgYm90U3ViID0gdGhpcy52b2ljZUFnZW50U2VydmljZS5ib3RUcmFuc2NyaXB0JC5zdWJzY3JpYmUoXG4gICAgICAodHJhbnNjcmlwdCkgPT4ge1xuICAgICAgICBpZiAodHJhbnNjcmlwdCAmJiB0cmFuc2NyaXB0LnRyaW0oKSkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGxhc3QgbWVzc2FnZSBpcyBmcm9tIGJvdCwgdXBkYXRlIGl0LCBvdGhlcndpc2UgYWRkIG5ld1xuICAgICAgICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdE1lc3NhZ2UgJiYgbGFzdE1lc3NhZ2UudHlwZSA9PT0gJ2FpJykge1xuICAgICAgICAgICAgbGFzdE1lc3NhZ2UubWVzc2FnZSA9IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRyYW5zY3JpcHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRyYW5zY3JpcHQpLFxuICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMudm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9ucy5wdXNoKHVzZXJTdWIsIGJvdFN1Yik7XG4gIH1cbn1cblxuZXhwb3J0IHsgVm9pY2VNb2RhbENvbmZpZyB9IGZyb20gJy4uL3ZvaWNlLWFnZW50L3ZvaWNlLW1vZGFsLXRva2Vucyc7XG4iXX0=
|
|
3809
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxTQUFTLE1BQU0sd0NBQXdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDLENBQUMsZ0JBQWdCO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ25ILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsMEJBQTBCLEdBRTNCLE1BQU0sbUNBQW1DLENBQUM7QUFFM0MsTUFBTSxDQUFOLElBQVksbUJBSVg7QUFKRCxXQUFZLG1CQUFtQjtJQUM3Qix3REFBaUMsQ0FBQTtJQUNqQyw0REFBcUMsQ0FBQTtJQUNyQyw0REFBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBSlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUk5QjtBQVFELE1BQU0sT0FBTyxtQkFBbUI7SUFzSjlCLFlBQ1UsRUFBZSxFQUNmLFVBQXVCLEVBQ3ZCLEdBQXNCLEVBQ3RCLElBQWdCLEVBQ2hCLFNBQXVCLEVBQ3ZCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUFFLDZCQUE2QjtJQUN2RSxrQkFBc0MsRUFDdEMsaUJBQW9DLEVBQ3BDLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxRQUFrQixFQUNsQixvQkFBaUQ7UUFkakQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQWE7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTZCO1FBNUpuRCxzQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUNmLGdCQUFXLEdBQVcsVUFBVSxDQUFDO1FBdUJqQyxxQkFBZ0IsR0FDdkIsdUdBQXVHLENBQUM7UUFzQjFHLHlHQUF5RztRQUNoRywyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFHakQsaUtBQWlLO1FBQ3hKLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBQ3JDLHlJQUF5STtRQUNoSSw4QkFBeUIsR0FBVSxFQUFFLENBQUM7UUFDL0Msb0lBQW9JO1FBQzNILHlCQUFvQixHQUFZLElBQUksQ0FBQztRQUM5QyxvTEFBb0w7UUFDM0ssY0FBUyxHQUFZLEtBQUssQ0FBQztRQUkxQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDM0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNuRCw4SUFBOEk7UUFDcEkseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNsRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNuQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDcEQseUpBQXlKO1FBQy9JLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO1FBQ3JGLDhLQUE4SztRQUNwSyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQTBELENBQUM7UUFDdkYsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRCwrR0FBK0c7UUFDckcsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVoRCxlQUFVLEdBQUcsNkJBQTZCLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFDekMsNEJBQXVCLEdBQUcsc0JBQXNCLENBQUM7UUFDakQsMEJBQXFCLEdBQUcsbUJBQW1CLENBQUM7UUFDNUMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsU0FBSSxHQUFXLE1BQU0sQ0FBQztRQUN0QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLCtEQUErRDtRQUMvRCxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyx5REFBeUQ7UUFDakQsd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQVNoRCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQVUzQixrQ0FBNkIsR0FBVyxDQUFDLENBQUM7UUFDMUMsMEJBQXFCLEdBQVcsRUFBRSxDQUFDO1FBUW5DLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUNoQyxXQUFNLEdBQVcsWUFBWSxDQUFDLENBQUMsNkJBQTZCO1FBRTVELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUMxQix5QkFBb0IsR0FBc0IsSUFBSSxDQUFDO1FBQy9DLGlDQUE0QixHQUFtQixFQUFFLENBQUM7UUF3RzFELHlCQUFvQixHQUFRLFdBQVcsQ0FBQztRQThEeEMsK0ZBQStGO1FBQ3ZGLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQXlDdEMsMkVBQTJFO1FBQ2xFLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQiwyQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQiw0QkFBdUIsR0FBRyxDQUFDLENBQUM7UUFDckMsZ0ZBQWdGO1FBQ2hGLDJCQUFzQixHQUE0QixFQUFFLENBQUM7UUFDckQsNEJBQXVCLEdBQTRCLEVBQUUsQ0FBQztRQUN0RCwyQkFBc0IsR0FBNEIsRUFBRSxDQUFDO1FBQ3JELDJCQUFzQixHQUE0QixFQUFFLENBQUM7UUFDckQsNEJBQXVCLEdBQTRCLEVBQUUsQ0FBQztRQUN0RCwwRUFBMEU7UUFDMUUsbUNBQThCLEdBQTRCLEVBQUUsQ0FBQztRQUM3RCxzRUFBc0U7UUFDdEUsNEJBQXVCLEdBQTRCLEVBQUUsQ0FBQztRQUN0RCxtRkFBbUY7UUFDbkYsMEJBQXFCLEdBQTRCLEVBQUUsQ0FBQztRQXF5RXBELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBbUd4QixrQkFBYSxHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztZQUVwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUMvQixJQUFJLEdBQUcsRUFBRTtvQkFDUCxPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUM5QztnQkFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixPQUFPO1lBQ1QsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksY0FBYyxDQUFDO2dCQUN4QixLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUEyVUYsNEJBQXVCLEdBQVEsRUFBRSxDQUFDO1FBQ2xDLDBCQUFxQixHQUFRLENBQUMsQ0FBQyxDQUFDO1FBeVFoQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQW9FcEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFJeEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFxS3hCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFjN0IsTUFBTTtRQUNOLE1BQU07UUFDTiw0RUFBNEU7UUFDNUUsNExBQTRMO1FBQzVMLDZEQUE2RDtRQUM3RCxPQUFPO1FBQ1AsTUFBTTtRQUNOLGlFQUFpRTtRQUNqRSxrSkFBa0o7UUFDbEosd0VBQXdFO1FBQ3hFLE9BQU87UUFDUCxNQUFNO1FBQ04seUVBQXlFO1FBQ3pFLGdJQUFnSTtRQUNoSSwrRUFBK0U7UUFDL0UsT0FBTztRQUNQLE1BQU07UUFDTixxRkFBcUY7UUFDckYsc0hBQXNIO1FBQ3RILDJGQUEyRjtRQUMzRixPQUFPO1FBQ1AsTUFBTTtRQUNOLDJFQUEyRTtRQUMzRSw2SUFBNkk7UUFDN0ksMkZBQTJGO1FBQzNGLE1BQU07UUFDTixJQUFJO1FBQ0osYUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQWdCN0MsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBVzdCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQXdDMUIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFnY3BCLDREQUE0RDtRQUM1RCw2QkFBd0IsR0FBVyxFQUFFLENBQUM7UUE3OUhwQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLDJCQUEyQjtRQUMzQiw2QkFBNkI7UUFDN0IsSUFBSTtJQUNOLENBQUM7SUFDRCxjQUFjLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxjQUFjO1FBQ1osT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsaUJBQWlCO1FBQ2YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3RCxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xELElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsNkZBQTZGO0lBQzdGLG1CQUFtQixDQUFDLElBQStCO1FBQ2pELElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLHVEQUF1RDtRQUN2RCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBRTlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNkLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDeEM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzFCO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELDRFQUE0RTtRQUM1RSw2RUFBNkU7UUFDN0UsbUZBQW1GO1FBQ25GLElBQ0UsT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFDekQ7WUFDQSxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsd0hBQXdIO0lBQ2hILG9CQUFvQjtRQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQ3BELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsV0FBVyxtQ0FBUSxVQUFVLEtBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRSxDQUFDO2dCQUNwRCxPQUFPO2FBQ1I7U0FDRjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFJRCxRQUFRO1FBQ04sdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBRXhDLGlEQUFpRDtRQUVqRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxDQUFDO1NBQzdDO2FBQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBQztTQUN6QzthQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1NBQ3ZDO1FBRUQseUNBQXlDO1FBQ3pDLDJDQUEyQztRQUUzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQzdCLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXhCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FDL0IsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FDRixDQUFDO1FBQ0Ysc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsVUFBVTthQUNaLDZCQUE2QixDQUM1QixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUMxQjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQU1EOzs7T0FHRztJQUNLLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ2pEO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUNsQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FDckQsSUFBSSxDQUFDLEtBQUssRUFDVixLQUFLLEVBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO2dCQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQy9DLElBQUksQ0FBQyxLQUFLLEVBQ1YsZUFBZSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztnQkFDRixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQXdCRCxzRkFBc0Y7SUFDdEYsU0FBUyxDQUFDLElBQVk7O1FBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksR0FBRyxNQUFBLE1BQUEsR0FBRyxDQUFDLElBQUksMENBQUUsV0FBVyxtQ0FBSSxFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBYTs7UUFDbEMsTUFBTSxHQUFHLEdBQ1AsTUFBQSxNQUFBLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFdBQVcsbUNBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFNBQVMsbUNBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFFBQVEsbUNBQUksRUFBRSxDQUFDO1FBQzNFLE1BQU0sR0FBRyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxhQUFILEdBQUcsY0FBSCxHQUFHLEdBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUUsNkRBQTZEO1FBQzdELElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsMEJBQTBCLENBQUMsUUFBYTtRQUN0Qyx1REFBdUQ7UUFDdkQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBUyxFQUFFLFFBQWE7O1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLENBQUM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsTUFBQSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxFQUFFLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxHQUFHLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNLENBQUM7UUFDckUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QyxPQUFPLEdBQUcsS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxJQUFTLEVBQUUsUUFBYTtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFTLEVBQUUsUUFBYSxFQUFFLEVBQVU7O1FBQzVELE1BQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGVBQWUsK0NBQW5CLEVBQUUsQ0FBcUIsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsOEJBQThCLG1DQUM5QixJQUFJLENBQUMsOEJBQThCLEtBQ3RDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUNaLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUFhOztRQUMvQixNQUFNLEdBQUcsR0FBRyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxlQUFlLDBDQUFFLEdBQUcsQ0FBQztRQUMzQyxPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWE7O1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGVBQWUsMENBQUUsU0FBUyxDQUFDO1FBQ3BELE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBUyxFQUFFLFFBQWE7O1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLENBQUM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsTUFBQSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxFQUFFLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxHQUFHLG1DQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNLENBQUM7UUFDckUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QyxPQUFPLEdBQUcsS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFTLEVBQUUsUUFBYTtRQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsc0RBQXNEO1FBQ3RELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBUyxFQUFFLFFBQWE7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLElBQVMsRUFDVCxRQUFhLEVBQ2IsT0FBaUMsRUFDakMsRUFBVTs7UUFFVixNQUFBLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxlQUFlLCtDQUFuQixFQUFFLENBQXFCLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxxQkFBcUIsbUNBQVEsSUFBSSxDQUFDLHFCQUFxQixLQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFFLENBQUM7UUFDNUUsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNyQixzREFBc0Q7WUFDdEQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzdELE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx1QkFBdUIsQ0FDckIsSUFBUyxFQUNULFFBQWEsRUFDYixPQUFpQyxFQUNqQyxFQUFVOztRQUVWLE1BQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGVBQWUsK0NBQW5CLEVBQUUsQ0FBcUIsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLHVCQUF1QixtQ0FDdkIsSUFBSSxDQUFDLHVCQUF1QixLQUMvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FDWixDQUFDO1FBQ0YsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJO2dCQUNGLElBQUksSUFBSSxFQUFFO29CQUNSLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLElBQUksT0FBUSxDQUFTLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTt3QkFDOUMsQ0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7NEJBQ3BCLHNDQUFzQzs0QkFDdEMsSUFBSSxDQUFDLHVCQUF1QixtQ0FDdkIsSUFBSSxDQUFDLHVCQUF1QixLQUMvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FDYixDQUFDOzRCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzFCLENBQUMsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDakI7YUFDRjtZQUFDLFdBQU07Z0JBQ04sU0FBUzthQUNWO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFTLEVBQUUsUUFBYSxFQUFFLFNBQWtCO1FBQ25FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQzVELElBQUksQ0FBQyx1QkFBdUIsbUNBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsS0FDL0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQ2YsYUFBK0QsRUFDL0QsZUFBd0I7UUFFeEIsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFDRSxPQUFPLGFBQWEsS0FBSyxRQUFRO2FBQ2pDLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLENBQUE7YUFDcEIsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLEdBQUcsQ0FBQSxFQUNsQjtZQUNBLElBQUk7Z0JBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUN0RCxLQUFLLEVBQUUsT0FBTyxFQUNkLEdBQUcsRUFBRSxTQUFTLEVBQ2QsSUFBSSxFQUFFLFNBQVMsSUFDWixVQUFVLEVBQ2IsQ0FBQztnQkFDSCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDbEQsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsS0FBSyxJQUNWLFVBQVUsRUFDYixDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUM5QyxJQUFJLEVBQUUsU0FBUyxFQUNmLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLE1BQU0sRUFBRSxLQUFLLElBQ1YsVUFBVSxFQUNiLENBQUM7Z0JBQ0gsT0FBTyxHQUFHLGFBQWEsTUFBTSxTQUFTLE1BQU0sT0FBTyxFQUFFLENBQUM7YUFDdkQ7WUFBQyxXQUFNO2dCQUNOLE9BQU8sRUFBRSxDQUFDO2FBQ1g7U0FDRjtRQUNELElBQUksT0FBTyxhQUFhLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQ3BDLGtEQUFrRCxDQUNuRCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDbEMsZ0RBQWdELENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ25ELElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUN0RCxLQUFLLEVBQUUsT0FBTyxFQUNkLEdBQUcsRUFBRSxTQUFTLEVBQ2QsSUFBSSxFQUFFLFNBQVMsSUFDWixVQUFVLEVBQ2IsQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUN2RCxJQUFJLEVBQUUsU0FBUyxFQUNmLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLE1BQU0sRUFBRSxLQUFLLElBQ1YsVUFBVSxFQUNiLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDbkQsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsS0FBSyxJQUNWLFVBQVUsRUFDYixDQUFDO1lBQ0gsT0FBTyxHQUFHLGFBQWEsTUFBTSxjQUFjLE1BQU0sWUFBWSxFQUFFLENBQUM7U0FDakU7UUFBQyxXQUFNO1lBQ04sT0FBTyxhQUFhLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUNqQixhQUErRCxFQUMvRCxlQUF3QjtRQUV4QixJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJO1lBQ0YsSUFBSSxPQUFPLEdBQWdCLElBQUksQ0FBQztZQUNoQyxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsS0FBSSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsS0FBSyxDQUFBLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekM7aUJBQU0sSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQ3BDLGtEQUFrRCxDQUNuRCxDQUFDO2dCQUNGLElBQUksVUFBVTtvQkFDWixPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDN0Q7WUFDRCxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxJQUFJO2dCQUNGLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUM1QyxHQUFHLEVBQUUsU0FBUyxJQUNYLFVBQVUsRUFDYixDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLGtCQUM5QyxLQUFLLEVBQUUsT0FBTyxJQUNYLFVBQVUsRUFDYixDQUFDO2dCQUNILE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDdkI7WUFBQyxXQUFNO2dCQUNOLHlGQUF5RjtnQkFDekYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDdkI7U0FDRjtRQUFDLFdBQU07WUFDTixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQ3BCLGFBQStELEVBQy9ELGVBQXdCO1FBRXhCLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSTtZQUNGLElBQUksT0FBTyxHQUFnQixJQUFJLENBQUM7WUFDaEMsSUFBSSxLQUFLLEdBQWdCLElBQUksQ0FBQztZQUM5QixJQUNFLE9BQU8sYUFBYSxLQUFLLFFBQVE7aUJBQ2pDLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLENBQUE7aUJBQ3BCLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxHQUFHLENBQUEsRUFDbEI7Z0JBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtnQkFDNUMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDcEMsa0RBQWtELENBQ25ELENBQUM7Z0JBQ0YsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDbEMsZ0RBQWdELENBQ2pELENBQUM7Z0JBQ0YsSUFBSSxVQUFVO29CQUNaLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxRQUFRO29CQUFFLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNyRTtZQUNELElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEUsSUFBSTtnQkFDRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDbEQsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsSUFBSSxJQUNULFVBQVUsRUFDYixDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUNYLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlCLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxrQkFDOUIsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsSUFBSSxJQUNULFVBQVUsRUFDYjtvQkFDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNULE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQzFEO1lBQUMsV0FBTTtnQkFDTixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO29CQUNwRCxJQUFJLEVBQUUsU0FBUztvQkFDZixNQUFNLEVBQUUsU0FBUztvQkFDakIsTUFBTSxFQUFFLElBQUk7aUJBQ2IsQ0FBQyxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUNYLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlCLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO3dCQUNoQyxJQUFJLEVBQUUsU0FBUzt3QkFDZixNQUFNLEVBQUUsU0FBUzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2IsQ0FBQztvQkFDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNULE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQzFEO1NBQ0Y7UUFBQyxXQUFNO1lBQ04sT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUE2Tk8sdUJBQXVCLENBQzdCLEVBQXNCLEVBQ3RCLG1CQUE0QjtRQUU1QixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsYUFBRixFQUFFLGNBQUYsRUFBRSxHQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxtQkFBbUIsSUFBSSxTQUFTLENBQUM7UUFFbEQsc0ZBQXNGO1FBQ3RGLElBQUksbUJBQW1CLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2pHLE9BQU8sbUJBQW1CLENBQUM7U0FDNUI7UUFFRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwRCxNQUFNLEdBQUcsR0FBSSxJQUFJLENBQUMsV0FBMEMsQ0FBQyxtQkFBbUIsQ0FBQztZQUNqRixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLElBQUksR0FBRztnQkFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQjtRQUVELHFFQUFxRTtRQUNyRSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsRUFBVTs7UUFDaEMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdEQsTUFBTSxNQUFNLEdBQUksSUFBSSxDQUFDLFdBQTBDO2lCQUM1RCxtQkFBbUIsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDckMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQzlDLENBQUM7WUFDRixJQUFJLE1BQU07Z0JBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbkM7UUFDRCxNQUFNLEdBQUcsR0FBSSxJQUFJLENBQUMsV0FBMEMsQ0FBQyxXQUFXLENBQUM7UUFDekUsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsQ0FDdEMsQ0FBQztZQUNGLElBQUksS0FBSztnQkFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxNQUFNO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDMUIsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pELFFBQVEsRUFBRSxJQUFJO2dCQUNkLFlBQVksRUFBRSxPQUFPO2FBQ3RCLENBQUMsQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLENBQUM7WUFDNUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNDLElBQUksS0FBSyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2pELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFBQyxXQUFNO1lBQ04sT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxZQUFpQjtRQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM3RCxPQUFPLENBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQztnQkFDaEQsMkJBQTJCLENBQzVCLENBQUM7U0FDSDtRQUNELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQ2pCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2lCQUN2QixJQUFJLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFLLEtBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDcEUsT0FBTyxNQUFNLENBQUUsS0FBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxDQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsMkJBQTJCLENBQUM7WUFDaEQsMkJBQTJCLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCLENBQUMsUUFBZTtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUMzQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTs7WUFDL0IsZ0dBQWdHO1lBQ2hHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDbkQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsQ0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdFLE1BQU0sbUJBQW1CLEdBQ3ZCLFlBQVksSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRO2dCQUM5QyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQUEsWUFBWSxDQUFDLFdBQVcsbUNBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUMvQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1Qsc0ZBQXNGO1lBQ3RGLE1BQU0sT0FBTyxHQUFHLE1BQUEsTUFBQSxDQUFDLENBQUMsYUFBYSxtQ0FBSSxDQUFDLENBQUMsbUJBQW1CLG1DQUFJLEVBQUUsQ0FBQztZQUMvRCx5R0FBeUc7WUFDekcsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQ3JELFlBQVksRUFDWixtQkFBbUIsQ0FDcEIsQ0FBQztZQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDMUMsT0FBTyxFQUNQLGtCQUFrQixJQUFJLFNBQVMsQ0FDaEMsQ0FBQztZQUNGLGlJQUFpSTtZQUNqSSxNQUFNLGdCQUFnQixHQUNwQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQzdCLE1BQU0sSUFBSSxHQUNSLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLGVBQWU7d0JBQzdDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTt3QkFDaEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQUQsQ0FBQyxjQUFELENBQUMsR0FBSSxFQUFFLENBQUM7NkJBQ1osSUFBSSxFQUFFOzZCQUNOLFdBQVcsRUFBRSxDQUFDO29CQUN2QixPQUFPLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztnQkFDN0MsQ0FBQyxDQUFDLENBQUM7WUFDTCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0I7Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE1BQU0sb0JBQW9CLEdBQ3hCLFlBQVksSUFBSSxJQUFJO2dCQUNsQixDQUFDLENBQUMsT0FBTyxZQUFZLEtBQUssUUFBUTtvQkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FDSixNQUFBLE1BQUEsTUFBQSxZQUFZLENBQUMsSUFBSSxtQ0FDZixZQUFZLENBQUMsRUFBRSxtQ0FDZixZQUFZLENBQUMsV0FBVyxtQ0FDeEIsRUFBRSxDQUNMLENBQUMsSUFBSSxFQUFFO29CQUNWLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsNEVBQTRFO1lBQzVFLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQUM7WUFDcEQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFlBQVksSUFBSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqRixNQUFNLE1BQU0sR0FBRyx3QkFBd0I7Z0JBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3hELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxNQUFNLFVBQVUsR0FDZCxhQUFhLElBQUksQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDeEUsTUFBTSxXQUFXLEdBQUcsTUFBTTtnQkFDeEIsQ0FBQyxDQUFDLEdBQUcsVUFBVSxLQUFLLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDcEMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNmLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDeEMsT0FBTyxFQUNQLHdCQUF3QixJQUFJLFNBQVMsQ0FDdEMsQ0FBQztZQUNGLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FDekMsT0FBTyxFQUNQLHdCQUF3QixJQUFJLFNBQVMsQ0FDdEMsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFBLE1BQUEsQ0FBQyxDQUFDLFdBQVcsbUNBQUksQ0FBQyxDQUFDLFFBQVEsbUNBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckUsTUFBTSxjQUFjLEdBQ2xCLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSTtnQkFDbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsS0FBSyxRQUFRO29CQUNqQyxDQUFDLENBQUMsQ0FBQyxNQUFBLE1BQUEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLG1DQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUM7b0JBQ25ELENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztnQkFDakIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FDeEIsTUFBQSxNQUFBLGNBQWMsYUFBZCxjQUFjLGNBQWQsY0FBYyxHQUFJLENBQUMsQ0FBQyxJQUFJLG1DQUFJLENBQUMsQ0FBQyxXQUFXLG1DQUFJLEVBQUUsQ0FDaEQsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVM7Z0JBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGNBQWM7Z0JBQ3ZELENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGNBQWMsQ0FBQztZQUMxRCwwSUFBMEk7WUFDMUksTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztZQUM3RCwwRkFBMEY7WUFDMUYsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLG9CQUFvQixDQUFDLEVBQUU7Z0JBQ3BFLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQzthQUNyRTtZQUNELDBGQUEwRjtZQUMxRixNQUFNLGVBQWUsR0FBRyxlQUFlO2dCQUNyQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssZUFBZSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUM1QyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2QsT0FBTztnQkFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQUEsQ0FBQyxDQUFDLEtBQUssbUNBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQUEsQ0FBQyxDQUFDLFNBQVMsbUNBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUMzQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQUEsQ0FBQyxDQUFDLFFBQVEsbUNBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUNyQyxJQUFJLEVBQUUsV0FBVztnQkFDakIsU0FBUztnQkFDVCxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxFQUFFO2dCQUNwRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUc7Z0JBQ3RCLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSztnQkFDMUIsV0FBVztnQkFDWCxRQUFRLEVBQUUsd0JBQXdCLElBQUksb0JBQW9CO2dCQUMxRCxlQUFlO2dCQUNmLFdBQVc7Z0JBQ1gsZ0JBQWdCO2dCQUNoQixVQUFVO2dCQUNWLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQVk7O1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsQ0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RFLE1BQU0sV0FBVyxHQUNmLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ2hDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBQSxLQUFLLENBQUMsV0FBVyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNULE1BQU0sTUFBTSxHQUNWLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQzlCLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNwRSxDQUFDO0lBRU8saUNBQWlDLENBQUMsWUFBbUI7O1FBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRTtZQUMvQixNQUFNLEdBQUcsR0FBRyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLDBDQUFFLFFBQVEsQ0FBQztZQUNwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFO29CQUNwQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFGLEVBQUUsY0FBRixFQUFFLEdBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BDLElBQUksR0FBRzt3QkFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN4QjthQUNGO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sNEJBQTRCLENBQUMsWUFBbUI7O1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUFFLE9BQU87UUFDekMsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUU7WUFDL0IsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLDBDQUFFLFFBQVEsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtxQkFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFELENBQUMsY0FBRCxDQUFDLEdBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7cUJBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxNQUFNLFlBQVksR0FBRyxVQUFVO2lCQUM1QixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztZQUNqQyxJQUFJLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sS0FBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO2dCQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7YUFDMUM7U0FDRjtJQUNILENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxZQUFtQjtRQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRTdCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQ3hCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUNoRSxDQUFDO1FBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsZ0RBQWdEO2dCQUNoRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFZO1FBQzdCLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQUc7WUFDakIsT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsU0FBUztZQUNqQixPQUFPLENBQUMsU0FBUztZQUNqQixPQUFPLENBQUMsZUFBZTtZQUN2QixPQUFPLENBQUMsWUFBWTtZQUNwQixPQUFPLENBQUMsY0FBYztZQUN0QixPQUFPLENBQUMsUUFBUTtZQUNoQixPQUFPLENBQUMsS0FBSztTQUNkLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQWdCOztRQUNyQyxNQUFNLElBQUksR0FDUixDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxZQUFZLE1BQUksTUFBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTywwQ0FBRSxZQUFZLENBQUEsQ0FBQztRQUNsRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsTUFBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTywwQ0FBRSxRQUFRLENBQUM7UUFDM0MsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFZO1FBQ2hDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDNUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUNULE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsTUFBTSxJQUFJLEdBQ1IsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLEdBQUcsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFZO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLEVBQUUsR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxFQUFFLEtBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekQsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDakQsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQWdCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFOztZQUFDLE9BQUEsQ0FBQztnQkFDaEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFBLENBQUMsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDakMsT0FBTyxFQUNMLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDbEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUMxQixDQUFDLENBQUMsSUFBSTtnQkFDVixRQUFRLEVBQ04sQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLENBQUMsQ0FBQyxJQUFJO2dCQUNWLEtBQUssRUFDSCxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQzlDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDeEIsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsRUFBRSxFQUFFLE1BQUEsTUFBQSxNQUFBLE1BQUEsQ0FBQyxDQUFDLEVBQUUsbUNBQUksQ0FBQyxDQUFDLE1BQU0sbUNBQUksQ0FBQyxDQUFDLEdBQUcsbUNBQUksQ0FBQyxDQUFDLFVBQVUsbUNBQUksU0FBUztnQkFDMUQsU0FBUyxFQUNQLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUM1QixDQUFDLENBQUMsSUFBSTtnQkFDVixXQUFXLEVBQ1QsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzlCLENBQUMsQ0FBQyxJQUFJO2dCQUNWLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTtvQkFDaEMsQ0FBQyxDQUFDO3dCQUNFLEdBQUcsRUFDRCxDQUFBLE1BQUEsQ0FBQyxDQUFDLGVBQWUsMENBQUUsR0FBRyxLQUFJLElBQUk7NEJBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7NEJBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLENBQUMsQ0FBQyxJQUFJO3dCQUNWLFNBQVMsRUFDUCxDQUFBLE1BQUEsQ0FBQyxDQUFDLGVBQWUsMENBQUUsU0FBUyxLQUFJLElBQUk7NEJBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7NEJBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUU7NEJBQzVDLENBQUMsQ0FBQyxJQUFJO3FCQUNYO29CQUNILENBQUMsQ0FBQyxJQUFJO2FBQ1QsQ0FBQyxDQUFBO1NBQUEsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWU7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7O1lBQzdCLE1BQU0sT0FBTyxHQUNYLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ1gsTUFBTSxXQUFXLEdBQUcsT0FBTztnQkFDekIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztvQkFDekIsQ0FBQyxDQUFDLE9BQU87Z0JBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNULE1BQU0sUUFBUSxHQUFHLE1BQUEsQ0FBQyxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FDWixRQUFRLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUNoRCxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNYLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sRUFDTCxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ2xELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDMUIsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsUUFBUTtnQkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDakMsRUFBRSxFQUFFLE1BQUEsTUFBQSxNQUFBLE1BQUEsQ0FBQyxDQUFDLEVBQUUsbUNBQUksQ0FBQyxDQUFDLE1BQU0sbUNBQUksQ0FBQyxDQUFDLEdBQUcsbUNBQUksQ0FBQyxDQUFDLFNBQVMsbUNBQUksU0FBUztnQkFDekQsU0FBUyxFQUNQLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUM1QixDQUFDLENBQUMsSUFBSTtnQkFDVixXQUFXO2dCQUNYLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTtvQkFDaEMsQ0FBQyxDQUFDO3dCQUNFLEdBQUcsRUFDRCxDQUFBLE1BQUEsQ0FBQyxDQUFDLGVBQWUsMENBQUUsR0FBRyxLQUFJLElBQUk7NEJBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7NEJBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLENBQUMsQ0FBQyxJQUFJO3dCQUNWLFNBQVMsRUFDUCxDQUFBLE1BQUEsQ0FBQyxDQUFDLGVBQWUsMENBQUUsU0FBUyxLQUFJLElBQUk7NEJBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7NEJBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUU7NEJBQzVDLENBQUMsQ0FBQyxJQUFJO3FCQUNYO29CQUNILENBQUMsQ0FBQyxJQUFJO2FBQ1QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWU7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7O1lBQzdCLE1BQU0sT0FBTyxHQUNYLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQ3BFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ1gsTUFBTSxXQUFXLEdBQUcsT0FBTztnQkFDekIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztvQkFDekIsQ0FBQyxDQUFDLE9BQU87Z0JBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNULE1BQU0sT0FBTyxHQUFHLE1BQUEsTUFBQSxNQUFBLENBQUMsQ0FBQyxHQUFHLG1DQUFJLENBQUMsQ0FBQyxRQUFRLG1DQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQ0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4SSxNQUFNLE9BQU8sR0FDWCxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQ2xELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNYLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQy9GLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDL0QsT0FBTyxFQUFFLE1BQUEsTUFBQSxDQUFDLENBQUMsT0FBTyxtQ0FBSSxDQUFDLENBQUMsT0FBTyxtQ0FBSSxJQUFJO2dCQUN2QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25FLFdBQVcsRUFBRSxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxJQUFJO2dCQUNoQyw4RkFBOEY7Z0JBQzlGLEdBQUcsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3BELE9BQU87YUFDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxNQUFhO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFOztZQUMzQixNQUFNLE9BQU8sR0FDWCxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNYLE1BQU0sV0FBVyxHQUFHLE9BQU87Z0JBQ3pCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxPQUFPO2dCQUNYLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDVCxNQUFNLE9BQU8sR0FBRyxNQUFBLE1BQUEsTUFBQSxDQUFDLENBQUMsR0FBRyxtQ0FBSSxDQUFDLENBQUMsUUFBUSxtQ0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEksTUFBTSxPQUFPLEdBQ1gsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUNsRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDWCxPQUFPO2dCQUNMLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkQsT0FBTyxFQUNMLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDbEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUMxQixDQUFDLENBQUMsSUFBSTtnQkFDVixRQUFRLEVBQUUsSUFBSTtnQkFDZCxPQUFPLEVBQUUsTUFBQSxNQUFBLENBQUMsQ0FBQyxPQUFPLG1DQUFJLENBQUMsQ0FBQyxPQUFPLG1DQUFJLElBQUk7Z0JBQ3ZDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkUsV0FBVyxFQUFFLFdBQVcsYUFBWCxXQUFXLGNBQVgsV0FBVyxHQUFJLElBQUk7Z0JBQ2hDLDhGQUE4RjtnQkFDOUYsR0FBRyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDcEQsT0FBTzthQUNSLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQixDQUFDLGVBQXNCO1FBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9DLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3hHLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixPQUFPLEVBQ0wsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUNsRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzFCLENBQUMsQ0FBQyxJQUFJO2dCQUNWLFFBQVEsRUFDTixDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDM0IsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsS0FBSyxFQUNILENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtvQkFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUM1QixDQUFDLENBQUMsSUFBSTtnQkFDVixFQUFFLEVBQUUsTUFBTTtnQkFDVixTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQ1QsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzlCLENBQUMsQ0FBQyxJQUFJO2dCQUNWLGVBQWUsRUFBRSxJQUFJO2FBQ3RCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxPQUFlO1FBQ25DLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFVLEVBQUUsQ0FBQztRQUMzQiwrRUFBK0U7UUFDL0UsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsaUdBQWlHO1FBQ2pHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsS0FBSztnQkFBRSxTQUFTO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLEtBQUs7aUJBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFBRSxTQUFTO1lBQy9ELElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLFNBQVMsRUFBRTtvQkFDYixhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQzlELElBQUksT0FBTzt3QkFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUMzQztnQkFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLFNBQVMsRUFBRTtvQkFDYixRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNoQztnQkFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLFNBQVMsRUFBRTtvQkFDYixXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNuQztnQkFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3BELElBQUksV0FBVyxJQUFJLENBQUMsUUFBUTtvQkFBRSxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2hFO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDWixLQUFLO2dCQUNMLFFBQVEsRUFBRSxRQUFRLElBQUksU0FBUztnQkFDL0IsYUFBYSxFQUFFLGFBQWEsSUFBSSxTQUFTO2dCQUN6QyxXQUFXLEVBQUUsV0FBVyxJQUFJLFNBQVM7Z0JBQ3JDLFFBQVEsRUFBRSxRQUFRLElBQUksU0FBUztnQkFDL0IsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBUzs7UUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxtQ0FBSSxFQUFFLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDckQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxJQUFTOztRQUMvQixNQUFNLElBQUksR0FBRyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxhQUFhLG1DQUFJLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUN0RCxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVM7O1FBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksbUNBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBUzs7UUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxtQ0FBSSxFQUFFLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDckQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxJQUFTOztRQUMvQixNQUFNLElBQUksR0FBRyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxhQUFhLG1DQUFJLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztRQUN2RCxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHNCQUFzQixtQ0FDdEIsSUFBSSxDQUFDLHNCQUFzQixLQUM5QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVM7UUFDM0IsSUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHVCQUF1QixtQ0FDdkIsSUFBSSxDQUFDLHVCQUF1QixLQUMvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHNCQUFzQixtQ0FDdEIsSUFBSSxDQUFDLHNCQUFzQixLQUM5QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHNCQUFzQixtQ0FDdEIsSUFBSSxDQUFDLHNCQUFzQixLQUM5QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVM7UUFDM0IsSUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHVCQUF1QixtQ0FDdkIsSUFBSSxDQUFDLHVCQUF1QixLQUMvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVM7WUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksY0FBYztZQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFdBQWdCOztRQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxLQUFJLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLENBQUEsRUFBRTtZQUNwRCxPQUFPO2dCQUNMO29CQUNFLE1BQU0sRUFBRSxNQUFNO29CQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU87aUJBQy9DO2FBQ0YsQ0FBQztTQUNIO1FBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTywwQ0FBRSxZQUFZLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQXdDLEVBQUUsQ0FBQztRQUN0RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRTtZQUNuQixNQUFNLElBQUksR0FDUixPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsZUFBZTtnQkFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNoRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUN2QyxNQUFNLEtBQUssR0FDVCxJQUFJLEtBQUssTUFBTTtvQkFDYixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNO29CQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUM7Z0JBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDckM7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFdBQWdCOztRQUNoQyxNQUFNLEVBQUUsR0FDTixNQUFBLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sMENBQUUsZ0JBQWdCLG1DQUFJLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxnQkFBZ0IsQ0FBQztRQUMxRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMxQyxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLFdBQWdCO1FBQ3RDLElBQUksQ0FBQyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLENBQUE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQUMsV0FBZ0I7O1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN6QixNQUFNLFNBQVMsR0FBRyxNQUFBLENBQUMsQ0FBQyxhQUFhLDBDQUFFLEtBQUssQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxNQUFBLENBQUMsQ0FBQyxtQkFBbUIsMENBQUUsS0FBSyxDQUFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDakQsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6QztRQUFDLFdBQU07WUFDTixPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCwwSEFBMEg7SUFDMUgsZ0JBQWdCLENBQUMsV0FBZ0I7O1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0RCxJQUFJLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sMENBQUUsaUJBQWlCO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQ2pCLFdBQWdCLEVBQ2hCLElBQXVDO1FBRXZDLElBQUksQ0FBQyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLENBQUE7WUFBRSxPQUFPO1FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO2dCQUM1QixXQUFXO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDOUMsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5Q0FBeUMsQ0FBQztnQkFDOUQseUNBQXlDLENBQUM7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87WUFDNUIsV0FBVztTQUNaLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sZUFBZTs7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxJQUFJO1lBQ0YsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxLQUFLLEVBQUUsQ0FBQztZQUNyQixNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLEtBQUssRUFBRSxDQUFDO1lBQzVCLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsS0FBSyxFQUFFLENBQUM7U0FDN0I7UUFBQyxXQUFNLEdBQUU7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQzlDLDJCQUEyQixFQUFFO2FBQzdCLFNBQVMsQ0FDUixDQUFDLEdBQUcsRUFBRSxFQUFFOztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUU7Z0JBQ2xELGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxDQUFDLDBDQUFFLFdBQVcsQ0FBQTtnQkFDckMsU0FBUyxFQUFFLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsQ0FBQywwQ0FBRSxXQUFXLDBDQUFFLFVBQVU7Z0JBQzFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQSxNQUFBLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLENBQUMsMENBQUUsV0FBVywwQ0FBRSxNQUFNLENBQUE7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsOENBQThDO1lBQzlDLElBQUksTUFBQSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxDQUFDLDBDQUFFLFdBQVcsMENBQUUsV0FBVyxFQUFFO2dCQUNwQyxPQUFPLENBQUMsR0FBRyxDQUNULHdDQUF3QyxFQUN4QyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxDQUFDLDBDQUFFLFdBQVcsQ0FDcEIsQ0FBQztnQkFDRixNQUFNLEVBQ0osVUFBVSxFQUNWLE1BQU0sRUFDTixXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixVQUFVLEdBQ1gsR0FBRyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxDQUFDLDBDQUFFLFdBQVcsQ0FBQztnQkFFeEIsSUFBSSxDQUFDLDZCQUE2QixHQUFHLFVBQVUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQztnQkFFekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ2pFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLG1CQUFtQixDQUNyQyxDQUFDO2dCQUVGLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUN0QixJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQzt3QkFDMUQsTUFBTSxDQUFDO29CQUNULElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQ2hELGlCQUFpQixDQUNsQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7aUJBQ2pEO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLFdBQVcsWUFBWSxDQUFDLENBQUM7aUJBQzVEO2dCQUVELElBQUksQ0FBQywrQkFBK0I7b0JBQ2xDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFFaEMsSUFBSSxJQUFJLENBQUMsNkJBQTZCLElBQUksR0FBRyxFQUFFO29CQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO3dCQUMxRCxxQkFBcUIsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7b0JBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztpQkFDeEI7Z0JBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtpQkFBTSxJQUFJLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLENBQUMsMENBQUUsV0FBVyxFQUFFO2dCQUM5QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFDO2dCQUV4RCwyREFBMkQ7Z0JBQzNELE1BQU0sYUFBYSxHQUNqQixDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssb0JBQW9CO29CQUNoRCxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssdUJBQXVCO29CQUNuRCxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssMEJBQTBCO29CQUN0RCxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssdUJBQXVCO29CQUNuRCxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssc0JBQXNCO29CQUNsRCxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssdUJBQXVCO29CQUNuRCxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssZUFBZSxDQUFDO2dCQUM5QyxJQUFJLGFBQWEsRUFBRTtvQkFDakIsTUFBTSxVQUFVLEdBQ2QsTUFBQSxNQUFBLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFDO29CQUNwRCxNQUFNLFVBQVUsR0FDZCxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUk7d0JBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDVCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ25CLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTt3QkFDaEQsSUFBSSxRQUFRLEdBQVUsRUFBRSxDQUFDO3dCQUN6QixJQUFJOzRCQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLFFBQVEsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLG1DQUFJLEVBQUUsQ0FBQzt5QkFDbkM7d0JBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ1YsK0dBQStHOzRCQUMvRyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUNuRDt3QkFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3BELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDckIsTUFBTSxLQUFLLEdBQ1QsWUFBWSxDQUFDLFVBQVUsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7NEJBQzNELE1BQU0sU0FBUyxHQUFHO2dDQUNoQixHQUFHLEVBQUUsS0FBSztnQ0FDVixJQUFJLEVBQUUsZUFBZTtnQ0FDckIsT0FBTyxFQUFFLFVBQVU7b0NBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDO29DQUMzQyxDQUFDLENBQUMsRUFBRTtnQ0FDTixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0NBQzlCLFlBQVksRUFBRSxNQUFNOzZCQUNyQixDQUFDOzRCQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQ3ZCLENBQUM7NEJBQ0YsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFO2dDQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQzs2QkFDdkM7aUNBQU07Z0NBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7NkJBQzlCOzRCQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7NEJBQ3RELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDOzRCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7NEJBQ3RCLE1BQU0sR0FBRyxJQUFJLENBQUM7eUJBQ2Y7cUJBQ0Y7b0JBQ0QsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTztxQkFDUjtvQkFDRCw4RkFBOEY7aUJBQy9GO2dCQUVELHlJQUF5STtnQkFDekksSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUsscUJBQXFCLEVBQUU7b0JBQ3JELE1BQU0sVUFBVSxHQUNkLE1BQUEsTUFBQSxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQztvQkFDcEQsTUFBTSxVQUFVLEdBQ2QsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1QsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNuQixJQUFJLFVBQVUsRUFBRTt3QkFDZCxJQUFJOzRCQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLE1BQU0sU0FBUyxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsbUNBQUksRUFBRSxDQUFDOzRCQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQ3RELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ3JCLE1BQU0sS0FBSyxHQUNULFlBQVksQ0FBQyxVQUFVLElBQUksa0JBQWtCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dDQUM1RCxNQUFNLFNBQVMsR0FBRztvQ0FDaEIsR0FBRyxFQUFFLEtBQUs7b0NBQ1YsSUFBSSxFQUFFLGdCQUFnQjtvQ0FDdEIsT0FBTyxFQUFFLFVBQVU7d0NBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDO3dDQUMzQyxDQUFDLENBQUMsRUFBRTtvQ0FDTixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0NBQzlCLGFBQWEsRUFBRSxNQUFNO2lDQUN0QixDQUFDO2dDQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQ3ZCLENBQUM7Z0NBQ0YsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFO29DQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztpQ0FDdkM7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUNBQzlCO2dDQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0NBQ3RELE1BQU0sR0FBRyxJQUFJLENBQUM7NkJBQ2Y7eUJBQ0Y7d0JBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLEtBQUssQ0FDWCwwREFBMEQsRUFDMUQsQ0FBQyxDQUNGLENBQUM7eUJBQ0g7cUJBQ0Y7b0JBQ0QsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTztxQkFDUjtvQkFDRCx3SUFBd0k7aUJBQ3pJO2dCQUVELHVHQUF1RztnQkFDdkcsSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssb0JBQW9CLEVBQUU7b0JBQ3BELE1BQU0sVUFBVSxHQUNkLE1BQUEsTUFBQSxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQztvQkFDcEQsTUFBTSxVQUFVLEdBQ2QsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1QsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNuQixJQUFJLFVBQVUsRUFBRTt3QkFDZCxJQUFJOzRCQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSxtQ0FBSSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTyxtQ0FBSSxFQUFFLENBQUM7NEJBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDcEQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQ0FDckIsTUFBTSxLQUFLLEdBQ1QsWUFBWSxDQUFDLFVBQVUsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0NBQzNELE1BQU0sU0FBUyxHQUFHO29DQUNoQixHQUFHLEVBQUUsS0FBSztvQ0FDVixJQUFJLEVBQUUsZUFBZTtvQ0FDckIsT0FBTyxFQUFFLFVBQVU7d0NBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDO3dDQUMzQyxDQUFDLENBQUMsRUFBRTtvQ0FDTixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0NBQzlCLFlBQVksRUFBRSxNQUFNO2lDQUNyQixDQUFDO2dDQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQ3ZCLENBQUM7Z0NBQ0YsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFO29DQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztpQ0FDdkM7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUNBQzlCO2dDQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0NBQ3RELE1BQU0sR0FBRyxJQUFJLENBQUM7NkJBQ2Y7eUJBQ0Y7d0JBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLEtBQUssQ0FDWCx5REFBeUQsRUFDekQsQ0FBQyxDQUNGLENBQUM7eUJBQ0g7cUJBQ0Y7b0JBQ0QsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTztxQkFDUjtvQkFDRCwwRUFBMEU7aUJBQzNFO2dCQUVELDJFQUEyRTtnQkFDM0UsSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssb0JBQW9CLEVBQUU7b0JBQ3BELE1BQU0sVUFBVSxHQUNkLE1BQUEsTUFBQSxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQztvQkFDcEQsTUFBTSxVQUFVLEdBQ2QsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1QsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNuQixJQUFJLFVBQVUsRUFBRTt3QkFDZCxJQUFJOzRCQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsbUNBQUksRUFBRSxDQUFDOzRCQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ3BELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ3JCLE1BQU0sS0FBSyxHQUNULFlBQVksQ0FBQyxVQUFVLElBQUksaUJBQWlCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dDQUMzRCxNQUFNLFNBQVMsR0FBRztvQ0FDaEIsR0FBRyxFQUFFLEtBQUs7b0NBQ1YsSUFBSSxFQUFFLGVBQWU7b0NBQ3JCLE9BQU8sRUFBRSxVQUFVO3dDQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQzt3Q0FDM0MsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29DQUM5QixZQUFZLEVBQUUsTUFBTTtpQ0FDckIsQ0FBQztnQ0FDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUN2QixDQUFDO2dDQUNGLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtvQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7aUNBQ3ZDO3FDQUFNO29DQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lDQUM5QjtnQ0FDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dDQUN0RCxNQUFNLEdBQUcsSUFBSSxDQUFDOzZCQUNmO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQ1gseURBQXlELEVBQ3pELENBQUMsQ0FDRixDQUFDO3lCQUNIO3FCQUNGO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3hCLE9BQU87cUJBQ1I7aUJBQ0Y7Z0JBRUQsZ0dBQWdHO2dCQUNoRyxJQUFJLENBQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFNBQVMsTUFBSyxrQkFBa0IsRUFBRTtvQkFDbEQsTUFBTSxVQUFVLEdBQ2QsTUFBQSxNQUFBLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFDO29CQUNwRCxNQUFNLFVBQVUsR0FDZCxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUk7d0JBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDVCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ25CLElBQUksVUFBVSxFQUFFO3dCQUNkLElBQUk7NEJBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxtQ0FBSSxFQUFFLENBQUM7NEJBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDaEQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQ0FDckIsTUFBTSxLQUFLLEdBQ1QsWUFBWSxDQUFDLFVBQVUsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0NBQzNELE1BQU0sU0FBUyxHQUFHO29DQUNoQixHQUFHLEVBQUUsS0FBSztvQ0FDVixJQUFJLEVBQUUsZUFBZTtvQ0FDckIsT0FBTyxFQUFFLFVBQVU7d0NBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDO3dDQUMzQyxDQUFDLENBQUMsRUFBRTtvQ0FDTixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0NBQzlCLFlBQVksRUFBRSxNQUFNO2lDQUNyQixDQUFDO2dDQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQ3ZCLENBQUM7Z0NBQ0YsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFO29DQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztpQ0FDdkM7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUNBQzlCO2dDQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0NBQ3RELE1BQU0sR0FBRyxJQUFJLENBQUM7NkJBQ2Y7eUJBQ0Y7d0JBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLEtBQUssQ0FDWCx1REFBdUQsRUFDdkQsQ0FBQyxDQUNGLENBQUM7eUJBQ0g7cUJBQ0Y7b0JBQ0QsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTztxQkFDUjtpQkFDRjtnQkFFRCw2RkFBNkY7Z0JBQzdGLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsU0FBUyxNQUFLLDJCQUEyQixFQUFFO29CQUMzRCxNQUFNLFVBQVUsR0FDZCxNQUFBLE1BQUEsTUFBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsV0FBVywwQ0FBRSxRQUFRLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUM7b0JBQ3BELE1BQU0sVUFBVSxHQUNkLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSTt3QkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO3dCQUNuQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNULElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDbkIsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLGVBQWUsR0FBRyxPQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxlQUFlLHFDQUFJLEVBQUUsQ0FBQzs0QkFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDOzRCQUM1RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixNQUFNLEtBQUssR0FDVCxZQUFZLENBQUMsVUFBVSxJQUFJLG1CQUFtQixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQ0FDN0QsTUFBTSxTQUFTLEdBQUc7b0NBQ2hCLEdBQUcsRUFBRSxLQUFLO29DQUNWLElBQUksRUFBRSxpQkFBaUI7b0NBQ3ZCLE9BQU8sRUFBRSxVQUFVO3dDQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQzt3Q0FDM0MsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29DQUM5QixhQUFhLEVBQUUsTUFBTTtpQ0FDdEIsQ0FBQztnQ0FDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUN2QixDQUFDO2dDQUNGLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtvQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7aUNBQ3ZDO3FDQUFNO29DQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lDQUM5QjtnQ0FDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dDQUN0RCxNQUFNLEdBQUcsSUFBSSxDQUFDOzZCQUNmO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQ1gsZ0VBQWdFLEVBQ2hFLENBQUMsQ0FDRixDQUFDO3lCQUNIO3FCQUNGO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3hCLE9BQU87cUJBQ1I7aUJBQ0Y7Z0JBRUQsSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxTQUFTLE1BQUssbUJBQW1CLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN4QixPQUFPO2lCQUNSO2dCQUVELE1BQU0sRUFDSixlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixHQUFHLFdBQVcsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRTtvQkFDbEQsVUFBVTtvQkFDVixlQUFlO29CQUNmLE1BQU07b0JBQ04sU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNO29CQUNuQixZQUFZLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU07b0JBQzVCLGVBQWUsRUFBRSxPQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxNQUFNLHFDQUFJLENBQUM7b0JBQ3pDLGtCQUFrQixFQUFFLE9BQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE1BQU0scUNBQUksQ0FBQztpQkFDaEQsQ0FBQyxDQUFDO2dCQUNILElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FDM0IsQ0FBQztnQkFDRixJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLEVBQUU7d0JBQ3RELFVBQVU7d0JBQ1YsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtxQkFDbkMsQ0FBQyxDQUFDO29CQUNILGtCQUFrQixHQUFHO3dCQUNuQixHQUFHLEVBQUUsVUFBVTt3QkFDZixJQUFJLEVBQUUsSUFBSTt3QkFDVixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7cUJBQy9CLENBQUM7b0JBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFFdEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5Q0FBeUMsRUFBRTt3QkFDckQsVUFBVTtxQkFDWCxDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsNENBQTRDO2dCQUM1QyxJQUFJLGNBQWMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUM1RCxrQkFBa0IsQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO29CQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUM3QyxPQUFPLENBQUMsR0FBRyxDQUNULDJCQUEyQixFQUMzQixXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsTUFBTSxFQUNuQixXQUFXLENBQ1osQ0FBQztvQkFDRixrQkFBa0IsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO29CQUM3QyxrQkFBa0IsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDaEYsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtvQkFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELEVBQUU7d0JBQzdELFVBQVU7d0JBQ1YsWUFBWSxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNO3dCQUM1QixhQUFhLEVBQUUsT0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsU0FBUyxpREFBakIsTUFBTSxFQUFjLENBQUMsRUFBRSxHQUFHLENBQUM7cUJBQzNDLENBQUMsQ0FBQztvQkFFSCxrQkFBa0IsQ0FBQyxPQUFPO3dCQUN4QixJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4QjtnQkFFRCxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzVELGtCQUFrQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO2dCQUVELElBQUksZ0JBQWdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO29CQUN2RCxPQUFPLENBQUMsR0FBRyxDQUNULGdDQUFnQyxFQUNoQyxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxNQUFNLEVBQ3hCLGdCQUFnQixDQUNqQixDQUFDO29CQUNGLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCwyQkFBMkIsRUFDM0IsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE1BQU0sRUFDbkIsV0FBVyxDQUNaLENBQUM7b0JBQ0Ysa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO29CQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN6Qix3Q0FBd0M7aUJBQ3pDO2dCQUVELGlEQUFpRDthQUNsRDtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7YUFDeEQ7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixLQUFJLENBQUM7SUFDOUIsV0FBVyxDQUFDLElBQVMsRUFBRSxJQUFZO1FBQ2pDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxXQUFXO2dCQUNkLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDaEQsNkJBQTZCO0lBQy9CLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxjQUFzQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDcEUsMENBQTBDO1FBQzFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFN0QsUUFBUSxjQUFjLEVBQUU7WUFDdEIsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztZQUV6QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLHNCQUFzQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7O1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRO2dCQUM3QixDQUFDLENBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQVM7Z0JBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFUCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxpQkFBaUIsMENBQUUsTUFBTTtnQkFDdEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7Z0JBQ3ZCLENBQUMsQ0FBQztvQkFDRSxJQUFJLENBQUMsY0FBYyxDQUNqQiwwREFBMEQsQ0FDM0Q7aUJBQ0YsQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQ3BELElBQUksQ0FBQyxLQUFLLEVBQ1YsS0FBSyxFQUNMLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FDekQsSUFBSSxDQUFDLEtBQUssRUFDVixLQUFLLEVBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsa0JBQWtCLElBQUksQ0FBQyxlQUFlLGVBQWUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xILE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQzlDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFNLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxXQUFXLENBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxNQUFVO1FBQ3hELE9BQU8sQ0FBQyxLQUFVLEVBQWlCLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLEVBQUUsQ0FBQyxNQUFXLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsdUJBQXVCO0lBQ3ZCLHlCQUF5QjtJQUN6QixzQ0FBc0M7SUFDdEMsMENBQTBDO0lBQzFDLGdDQUFnQztJQUNoQyxRQUFRO0lBQ1IscUJBQXFCO0lBQ3JCLDhGQUE4RjtJQUM5RixhQUFhO0lBQ2Isa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsWUFBWTtJQUNaLHFDQUFxQztJQUNyQyxpRUFBaUU7SUFDakUsZ0NBQWdDO0lBQ2hDLDJCQUEyQjtJQUMzQixXQUFXO0lBQ1gsU0FBUztJQUNULElBQUk7SUFFSixrSEFBa0g7SUFDMUcsd0JBQXdCLENBQUMsSUFBUztRQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNqRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixXQUFXLEVBQUUsV0FBVztZQUN4QixnQkFBZ0IsRUFBRSxnQkFBZ0I7WUFDbEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDM0QsTUFBTSxFQUFFLEtBQUs7WUFDYixlQUFlLEVBQUUsS0FBSztZQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVTs7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxLQUFJLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDcEMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTs7Z0JBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsTUFBTTt3QkFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ2pELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQzNELE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxLQUFLO3dCQUN0QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO3dCQUM3QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7cUJBQ2QsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7b0JBQ3JCLHVGQUF1RjtvQkFDdkYsTUFBTSxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxTQUFTLENBQUM7b0JBQzdDLE1BQU0sYUFBYSxHQUNqQixRQUFRLEtBQUssb0JBQW9CO3dCQUNqQyxRQUFRLEtBQUssdUJBQXVCO3dCQUNwQyxRQUFRLEtBQUssMEJBQTBCO3dCQUN2QyxRQUFRLEtBQUssdUJBQXVCO3dCQUNwQyxRQUFRLEtBQUssc0JBQXNCO3dCQUNuQyxRQUFRLEtBQUssdUJBQXVCO3dCQUNwQyxRQUFRLEtBQUssZUFBZSxDQUFDO29CQUMvQixJQUNFLGFBQWE7eUJBQ2IsTUFBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQSxFQUNyRDt3QkFDQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO3dCQUNwRSxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7d0JBQ3pCLElBQUk7NEJBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEMsUUFBUSxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsbUNBQUksRUFBRSxDQUFDO3lCQUNuQzt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUNuRDt3QkFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3BELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0NBQ2hCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztnQ0FDYixJQUFJLEVBQUUsZUFBZTtnQ0FDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJO29DQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0NBQzFDLENBQUMsQ0FBQyxFQUFFO2dDQUNOLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7Z0NBQzNELFlBQVksRUFBRSxNQUFNOzZCQUNyQixDQUFDLENBQUM7NEJBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt5QkFDdkQ7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNyQztxQkFDRjt5QkFBTSxJQUNMLFFBQVEsS0FBSyxxQkFBcUI7eUJBQ2xDLE1BQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsV0FBVywwQ0FBRSxRQUFRLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUEsRUFDckQ7d0JBQ0EsZ0dBQWdHO3dCQUNoRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO3dCQUNwRSxJQUFJOzRCQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLE1BQU0sU0FBUyxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsbUNBQUksRUFBRSxDQUFDOzRCQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQ3RELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29DQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0NBQ2IsSUFBSSxFQUFFLGdCQUFnQjtvQ0FDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJO3dDQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0NBQzFDLENBQUMsQ0FBQyxFQUFFO29DQUNOLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7b0NBQzNELGFBQWEsRUFBRSxNQUFNO2lDQUN0QixDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs2QkFDdkQ7aUNBQU07Z0NBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUNyQzt5QkFDRjt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3JDO3FCQUNGO3lCQUFNLElBQ0wsUUFBUSxLQUFLLG9CQUFvQjt5QkFDakMsTUFBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxXQUFXLDBDQUFFLFFBQVEsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQSxFQUNyRDt3QkFDQSw4RkFBOEY7d0JBQzlGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7d0JBQ3BFLElBQUk7NEJBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBQSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLG1DQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLG1DQUFJLEVBQUUsQ0FBQzs0QkFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxlQUFlO29DQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7d0NBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQ0FDM0QsWUFBWSxFQUFFLE1BQU07aUNBQ3JCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzZCQUN2RDtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ3JDO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckM7cUJBQ0Y7eUJBQU0sSUFDTCxRQUFRLEtBQUssb0JBQW9CO3lCQUNqQyxNQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFBLEVBQ3JEO3dCQUNBLDhGQUE4Rjt3QkFDOUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDcEUsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLG1DQUFJLEVBQUUsQ0FBQzs0QkFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxlQUFlO29DQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7d0NBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQ0FDM0QsWUFBWSxFQUFFLE1BQU07aUNBQ3JCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzZCQUN2RDtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ3JDO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckM7cUJBQ0Y7eUJBQU0sSUFDTCxRQUFRLEtBQUssa0JBQWtCO3lCQUMvQixNQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFBLEVBQ3JEO3dCQUNBLDRGQUE0Rjt3QkFDNUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDcEUsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLG1DQUFJLEVBQUUsQ0FBQzs0QkFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNoRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxlQUFlO29DQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7d0NBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQ0FDM0QsWUFBWSxFQUFFLE1BQU07aUNBQ3JCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzZCQUN2RDtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ3JDO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckM7cUJBQ0Y7eUJBQU0sSUFDTCxRQUFRLEtBQUssMkJBQTJCO3lCQUN4QyxNQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFBLEVBQ3JEO3dCQUNBLGlHQUFpRzt3QkFDakcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDcEUsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLGVBQWUsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxlQUFlLG1DQUFJLEVBQUUsQ0FBQzs0QkFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDOzRCQUM1RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29DQUNiLElBQUksRUFBRSxpQkFBaUI7b0NBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTt3Q0FDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dDQUMxQyxDQUFDLENBQUMsRUFBRTtvQ0FDTixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO29DQUMzRCxhQUFhLEVBQUUsTUFBTTtpQ0FDdEIsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7NkJBQ3ZEO2lDQUFNO2dDQUNMLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzs2QkFDckM7eUJBQ0Y7d0JBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ1YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNyQztxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3JDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZTtRQUM1QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELG9DQUFvQztRQUNwQyx3QkFBd0I7UUFFeEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QixNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLHdDQUF3QyxDQUFDO1FBRTFELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzFCLGlCQUFpQixFQUNqQixxQ0FBcUMsQ0FDdEMsQ0FBQztZQUNGLDhDQUE4QztZQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDMUIsUUFBUSxFQUNSLHFDQUFxQyxDQUN0QyxDQUFDO1lBQ0YsK0NBQStDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbkUsMkNBQTJDO1FBQzNDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN2RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25FLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLE9BQU8sRUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQzNDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILHVFQUF1RTtRQUN2RSxrQ0FBa0M7UUFDbEMsdUNBQXVDO1FBQ3ZDLDhFQUE4RTtRQUM5RSxJQUFJO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJOztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLElBQUksRUFBRSxDQUFBLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQjtZQUNyRCxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDaEM7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFFO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFFNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDcEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM3QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO1FBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtRQUVsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQztZQUNoRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUIsTUFBTSxFQUFFLEtBQUs7WUFDYixlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV2RixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBd0IsR0FBRyxFQUFFO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUM5QztTQUNGLENBQUM7YUFDRCxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7WUFFRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixhQUFhLEVBQUUsSUFBSTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3RELHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQXVCRCxJQUFJLENBQUMsVUFBZSxFQUFFLE1BQVcsRUFBRSxjQUF3QjtRQUN6RCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFPLEVBQUUsRUFBRTs7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV2RCxJQUFJLElBQUksRUFBRTtnQkFDUixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsYUFBYTt3QkFDbkIsV0FBVyxFQUFFLGNBQWM7cUJBQzVCLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM3Qix5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUUzQixxQkFBcUI7Z0JBQ3JCLDJCQUEyQjtnQkFDM0IsVUFBVTtnQkFDVixPQUFPO2FBQ1I7WUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQztZQUNoQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JFLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDckQsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBRTdCLElBQUksZUFBb0IsQ0FBQztnQkFFekIsSUFBSTtvQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM3QixlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixJQUFJO3dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDOUIsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUMvQztvQkFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO2lCQUNmO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFakMsSUFBSSxlQUFlLElBQUksQ0FBQSxNQUFBLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxVQUFVLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7b0JBQzlELElBQ0UsZUFBZSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0I7d0JBQzlDLGVBQWUsQ0FBQyxVQUFVLElBQUksYUFBYTt3QkFDM0MsZUFBZSxDQUFDLFVBQVUsSUFBSSx5QkFBeUIsRUFDdkQ7d0JBQ0EsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUN6QztvQkFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO3dCQUM5RCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7d0JBQ3BCLE1BQUEsZUFBZSxDQUFDLE9BQU8sMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzNDLFVBQVUsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNwRCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxJQUFJLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sSUFBRyxDQUFDOzRCQUN4QixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQ3REO29CQUVELElBQ0UsZUFBZSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsbUJBQW1CO3dCQUN0RCxDQUFBLE1BQUEsZUFBZSxDQUFDLE9BQU8sMENBQUUsTUFBTSxJQUFHLENBQUMsRUFDbkM7d0JBQ0EsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ2pCLFNBQVMsRUFBRSxlQUFlLENBQUMsVUFBVTs0QkFDckMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxPQUFPO3lCQUNwQyxDQUFDLENBQUM7cUJBQ0o7b0JBRUQsSUFBSSxlQUFlLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTt3QkFDNUQsSUFBSSxRQUFRLEdBQUcsTUFBQSxlQUFlLENBQUMsT0FBTywwQ0FBRSxNQUFNLENBQUM7d0JBQy9DLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTs0QkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0NBQ2pCLFNBQVMsRUFBRSx3QkFBd0I7Z0NBQ25DLE1BQU0sRUFBRSxlQUFlLENBQUMsT0FBTzs2QkFDaEMsQ0FBQyxDQUFDO3lCQUNKOzZCQUFNLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTs0QkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0NBQ2pCLFNBQVMsRUFBRSxlQUFlLENBQUMsVUFBVTtnQ0FDckMsYUFBYSxFQUFFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7NkJBQ25ELENBQUMsQ0FBQzt5QkFDSjtxQkFDRjtvQkFFRCxJQUFJLGVBQWUsQ0FBQyxZQUFZLElBQUksTUFBTSxFQUFFO3dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDakIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxVQUFVOzRCQUNyQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE9BQU87eUJBQ2hDLENBQUMsQ0FBQzt3QkFFSCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTs0QkFDMUIsZUFBZSxDQUFDLE9BQU87Z0NBQ3JCLE1BQU0sR0FBRyxvREFBb0QsQ0FBQzt5QkFDakU7cUJBQ0Y7b0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTzt3QkFDaEMsTUFBTSxFQUFFLGVBQWU7d0JBQ3ZCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztxQkFDL0IsQ0FBQyxDQUFDO29CQUVILElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO3dCQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3dCQUMvQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7cUJBQ1Q7b0JBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7aUJBQ3RCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsSUFBSTt3QkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7d0JBQ3hCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztxQkFDL0IsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7WUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIscURBQXFEO1lBQ3JELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFhLEVBQUUsT0FBTztRQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FDckQsSUFBSSxDQUFDLEtBQUssRUFDVixLQUFLLEVBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUseUJBQXlCLElBQUksQ0FBQyxLQUFLLGlCQUFpQixlQUFlLG1CQUFtQixDQUFDO1FBQ2pJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxNQUFNLEVBQUUsdUNBQXVDO2dCQUMvQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ3pCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7YUFDOUM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNsRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNoQixJQUFJLEVBQUUsSUFBSTtvQkFDVixPQUFPLEVBQ0wsSUFBSSxDQUFDLGVBQWU7d0JBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMscUNBQXFDLENBQUM7b0JBQzVELElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDOUIsYUFBYSxFQUFFLElBQUk7aUJBQ3BCLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDakQ7Z0JBQ0QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM5QixhQUFhLEVBQUUsSUFBSTthQUNwQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsa0JBQWtCO2dCQUNyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUN2RTtZQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQzVDLHNDQUFzQztZQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsMkRBQTJEO0lBQzNELElBQUksa0JBQWtCOztRQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDBDQUFFLElBQUksTUFBSyxJQUFJO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBQ0QsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6Qyx1REFBdUQ7SUFDdkQsa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQyw4REFBOEQ7SUFDOUQsOENBQThDO0lBQzlDLHlDQUF5QztJQUN6QyxnQ0FBZ0M7SUFDaEMsOENBQThDO0lBQzlDLHlCQUF5QjtJQUN6Qiw0Q0FBNEM7SUFDNUMsa0NBQWtDO0lBQ2xDLHlDQUF5QztJQUN6QyxRQUFRO0lBQ1IsSUFBSTtJQUNKLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSztRQUNoQix1QkFBdUI7UUFDdkIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5Qyx1REFBdUQ7UUFDdkQsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFFM0MsMEVBQTBFO1FBQzFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLHNDQUFzQztRQUN0QyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFdEIsaUNBQWlDO1FBQ2pDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsZ0NBQWdDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhDLG1HQUFtRztRQUNuRyxzQ0FBc0M7UUFFdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsdUNBQXVDO1FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDcEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLG9DQUFvQztRQUNwQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUvRCxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFbkQseUVBQXlFO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMvQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixhQUFhO2FBQ1YsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFeEMseUNBQXlDO1FBQ3pDLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBSUQsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztZQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTztZQUNqRSw0Q0FBNEM7WUFDNUMsRUFBRSxDQUNILENBQUM7WUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDNUIsQ0FBQztnQkFDRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU87Z0JBQ2pFLDRDQUE0QztnQkFDNUMsRUFBRSxDQUNILENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQzVCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPO2dCQUNqRSw0Q0FBNEM7Z0JBQzVDLEVBQUUsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7U0FDRjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLHVDQUF1QztRQUN2QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQzNDLElBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQztnQkFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNwQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVyQixJQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLEVBQUU7U0FDcEI7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtRQUVELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUNyRCxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDeEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDM0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzVDLElBQUksTUFBTSxFQUFFO2dCQUNWLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO3dCQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtxQkFDN0Q7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQVU7UUFDOUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsV0FBVyxJQUFJLENBQUMsT0FBTyx5QkFBeUIsQ0FBQztRQUMxRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUN6QixJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQUQsQ0FBQyxjQUFELENBQUMsR0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUN4RSxDQUFDO1FBQ0YsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtTQUN4QixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDM0QsR0FBRyxDQUFDLENBQUMsSUFBVyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O29CQUN2QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxFQUFFO3dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQVMsRUFBRSxNQUFNO1FBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUUsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLGdFQUFnRSxDQUFDLElBQUksQ0FDMUUsU0FBUyxDQUFDLFNBQVMsQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN4QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBSTtRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQscUdBQXFHO0lBQ3JHLHVCQUF1QixDQUFDLE1BQWlDOztRQUN2RCxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLHlCQUF5QiwwQ0FBRSxNQUFNO1lBQ3BELENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCO1lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFBLENBQUM7SUFDbEQsQ0FBQztJQUVELGdIQUFnSDtJQUNoSCxhQUFhLENBQUMsUUFBeUI7UUFDckMsTUFBTSxHQUFHLEdBQUcsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEVBQUUsQ0FBQztRQUN6QixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQztZQUNyRSxPQUFPLEtBQUssQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxlQUFlLENBQUMsUUFBeUI7O1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxFQUFFLENBQUM7UUFDekIsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLE1BQU07WUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLFdBQUMsT0FBQSxDQUFDLE1BQUEsQ0FBQyxDQUFDLE1BQU0sbUNBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQSxFQUFBLENBQUMsQ0FBQSxDQUFDO0lBQzdELENBQUM7SUFFRCxVQUFVLENBQUMsTUFBTTtRQUNmLE9BQU8sQ0FBQyxDQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQ0YsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsV0FBVyxJQUFJLENBQUMsT0FBTyw2REFBNkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUM5SCxFQUFFLE9BQU8sRUFBRSxDQUNaO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtTQUN4QixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUNGLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLFdBQVcsSUFBSSxDQUFDLE9BQU8scUNBQXFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDdEcsRUFBRSxPQUFPLEVBQUUsQ0FDWjthQUNBLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFNRCxpQ0FBaUM7SUFDakMsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBWTs7UUFDdEIsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLG1DQUFtQztRQUNuQyxxQkFBcUI7UUFDckIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjOztRQUNaLE9BQU8sTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxxQkFBcUI7O1FBQ25CLE1BQU0sY0FBYyxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixPQUFPLFlBQVksQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxjQUFjLElBQUksQ0FBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxNQUFLLENBQUMsRUFBRTtnQkFDbEQsT0FBTyxZQUFZLENBQUM7YUFDckI7aUJBQU07Z0JBQ0wsT0FBTyxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLElBQUcsQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLEdBQUcsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE1BQU0sa0JBQWtCO29CQUM3QyxDQUFDLENBQUMsR0FBRyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxpQkFBaUIsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLFlBQVksSUFBSSxDQUFDLEtBQUssZ0JBQWdCLENBQUM7UUFDakYsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDOUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckIsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxpQ0FDNUIsS0FBSyxLQUNSLFFBQVEsRUFBRSxLQUFLLElBQ2YsQ0FBQyxDQUFDO2FBQ0w7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXhCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFeEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFPRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FDckQsSUFBSSxDQUFDLEtBQUssRUFDVixLQUFLLEVBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUseUNBQXlDLGVBQWUsVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekgsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxNQUFNLEVBQUUsMEJBQTBCO1lBQ2xDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7U0FDOUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckIsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUV4QixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBRTVCLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxLQUFJLEdBQUcsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2FBQzdCO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLHdCQUF3QixDQUFDLFFBQWdCO1FBQ3ZDLElBQUk7WUFDRiw4Q0FBOEM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFdkMsbURBQW1EO1lBQ25ELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLElBQVksRUFBRSxFQUFFO2dCQUM1RCxPQUFPLFlBQVksSUFBSSxZQUNyQixLQUFLLElBQUksRUFDWCxxQkFBcUIsSUFBSSxNQUFNLENBQUM7WUFDbEMsQ0FBQyxDQUFDO1lBRUYsMkVBQTJFO1lBQzNFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFdkUsd0RBQXdEO1lBQ3hELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRTFELDJDQUEyQztZQUMzQyxPQUFPLGFBQWEsQ0FBQztTQUN0QjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLDJEQUEyRDtTQUN2RTtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDakQsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELHFFQUFxRTtRQUNyRSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUN6QixxQkFBcUIsRUFDckIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNmLE9BQU8sZUFBZSxJQUFJLGdCQUFnQixDQUFDO2FBQzVDO2lCQUFNLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxlQUFlLElBQUksZ0JBQWdCLENBQUM7YUFDNUM7WUFDRCxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUM7UUFDcEMsQ0FBQyxDQUNGLENBQUM7UUFFRixrRUFBa0U7UUFDbEUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3JFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQztZQUVyQywwQ0FBMEM7WUFDMUMsT0FBTzs7bUZBRXNFLFdBQVcsU0FBUyxJQUFJLENBQUMsY0FBYyxDQUNoSCxNQUFNLENBQ1A7NkRBQ29ELFFBQVEsS0FBSyxXQUFXO2FBQ3hFLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUVyRCx5Q0FBeUM7UUFDekMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUU3RCx5QkFBeUI7UUFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFdkQsNkJBQTZCO1FBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVwRCx1Q0FBdUM7UUFDdkMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQ2pCLHlCQUF5QixFQUN6QixxQ0FBcUMsQ0FDdEMsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsVUFBVSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJO2FBQ1IsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7YUFDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQscUNBQXFDO0lBQzlCLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDdEMsR0FBRyxFQUFFO1lBQ0gsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDckMsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUtELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBNkJELGlDQUFpQztJQUNqQyxhQUFhLENBQUMsR0FBVztRQUN2QixJQUFJO1lBQ0YsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7U0FDbkU7UUFBQyxXQUFNO1lBQ04sT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLGFBQWEsQ0FBQyxHQUFXO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsT0FBTyxvREFBb0QsTUFBTSxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFPO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNuRSxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztTQUMvQjtJQUNILENBQUM7SUFJRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztRQUMvRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7UUFDL0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxjQUFjO1FBQ1osVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7WUFDL0QsNkNBQTZDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUNuRSxJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7YUFDaEM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBR0QsWUFBWSxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxzQkFBc0I7UUFDcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsS0FBVTtRQUM3QixJQUFJO1lBQ0YsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzVDLHVDQUF1QztnQkFDdkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3hCO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFFO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUE2QixDQUFDO1FBQ3JELFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLG1CQUFtQjtRQUNuRCxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLGlDQUFpQztRQUN2Riw2REFBNkQ7UUFDN0QsSUFBSSxRQUFRLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtZQUMvQixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxpQ0FBaUM7WUFDbEUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsNENBQTRDO1NBQ2hGO2FBQU07WUFDTCxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyw2Q0FBNkM7U0FDbkY7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQUssR0FBRyxJQUFJO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBRW5FLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO29CQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2lCQUNoQztnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsY0FBYzs7UUFDWixpRkFBaUY7UUFDakYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksTUFBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsT0FBTywwQ0FBRSxXQUFXLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFELFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUc7b0JBQzVCLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDakIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDNUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBUTtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXJDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQ3hCLENBQ0YsQ0FBQztZQUVGLDJFQUEyRTtZQUMzRSxJQUFJO2dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7b0JBQ2xFLEtBQUssQ0FBQztnQkFDUixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDO29CQUNsRSxLQUFLLENBQUM7YUFDVDtZQUFDLE9BQU8sS0FBSyxFQUFFLEdBQUU7WUFFbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLDJCQUEyQixFQUFFLElBQUk7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVuQixJQUFJLENBQUMsNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ3hCLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN2RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRztnQkFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUN2QyxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUk7YUFDekMsQ0FBQztZQUNGLElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7WUFDckUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFekIsK0NBQStDO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQ2pCLEtBQUssRUFDTCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxlQUFlLEVBQ3BCLEVBQUUsRUFDRixJQUFJLEVBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDeEIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FDWixRQUFnQixFQUNoQixNQUFhLEVBQ2IsY0FBc0IsRUFDdEIsR0FBUyxFQUNULElBQVUsRUFDVixVQUFtQixFQUNuQixlQUFxQjs7UUFFckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsU0FBUyxDQUFDO1FBRWxELE1BQU0sSUFBSSxHQUFHO1lBQ1gsYUFBYSxFQUFFLFFBQVE7WUFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSztZQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRTtZQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDOUIsTUFBTSxFQUFFLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUNBQUksRUFBRTtZQUNoRSxlQUFlLEVBQUUsY0FBYztZQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3pCLENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsZUFBZSxDQUFDO1NBQzNDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDNUMsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQzthQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ3hELElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO29CQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7b0JBQ3BDLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTt3QkFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNqRDtpQkFDRjtnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO29CQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO29CQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztpQkFDNUI7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLGVBQWUsQ0FDckIsR0FBVyxFQUNYLElBQVMsRUFDVCxXQUFtQixFQUNuQixHQUFTLEVBQ1QsSUFBVTtRQUVWLE1BQU0sT0FBTyxHQUFRO1lBQ25CLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsYUFBYSxFQUFFLFNBQVMsR0FBRyxXQUFXO1lBQ3RDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN4QixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUM3QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUM1QixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDakQ7UUFFRCxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDM0IsQ0FBQzthQUNDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2pCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUV6QixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7b0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2lCQUM1QjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsUUFBZ0IsRUFDaEIsTUFBYSxFQUNiLGNBQXNCLEVBQ3RCLEdBQVMsRUFDVCxJQUFVLEVBQ1YsVUFBbUIsRUFDbkIsZUFBcUI7O1FBRXJCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLFNBQVMsQ0FBQztRQUVsRCxNQUFNLElBQUksR0FBUTtZQUNoQixhQUFhLEVBQUUsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQ2xELE1BQU0sRUFBRSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1DQUFJLEVBQUU7WUFDaEUsZUFBZSxFQUFFLGNBQWM7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQzFCLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN6QixDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGVBQWUsQ0FBQztTQUMzQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQzdDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztTQUN4QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDL0MsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIseUNBQXlDO1lBQzNDLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEdBQUc7O1FBQ3pCLHFDQUFxQztRQUNyQyxJQUFJLFFBQVEsR0FBRyxNQUFNLEtBQUssSUFBSSxDQUFDO1FBRS9CLGdFQUFnRTtRQUNoRSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QyxJQUFJLFNBQVMsR0FDWCxDQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM1QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQ2pDLDBDQUFFLEtBQUssS0FBSSxHQUFHLENBQUM7WUFDbEIsUUFBUSxJQUFJLE9BQU8sU0FBUyxPQUFPLEtBQUssSUFBSSxDQUFDO1NBQzlDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELDBCQUEwQixDQUFDLFdBQVc7UUFDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDO1lBQ3JFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3BELEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFO3dCQUMxQixNQUFNLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUN2QyxJQUFJLENBQUMsUUFBUSxFQUNiLE1BQU0sQ0FBQyxlQUFlLENBQ3ZCLENBQUM7cUJBQ0g7b0JBQ0QsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxHQUFHLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUNwQyxJQUFJLENBQUMsUUFBUSxFQUNiLEdBQUcsQ0FBQyxlQUFlLENBQ3BCLENBQUM7WUFDRixJQUFJLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDO1lBQ3BDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVE7UUFDcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUNwRCxJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksRUFDSixJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FDL0QsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUM5QyxJQUFJLENBQUMsWUFBWSxFQUNqQixXQUFXLENBQ1osQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFO2dCQUMvRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEI7WUFDeEMsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEIsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNoQixJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDLENBQUMsNkNBQTZDO0lBQ25ELENBQUM7SUFLRCxjQUFjOztRQUNaLE1BQU0sY0FBYyxHQUNsQixNQUFBLE1BQUEsSUFBSSxDQUFDLGVBQWUsbUNBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQ0FDaEUsRUFBRSxDQUFDO1FBQ0wsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3QixnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBRUQsTUFBTSxNQUFNLEdBQXFCO1lBQy9CLE1BQU0sRUFBRSxNQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsUUFBUSxtQ0FBSSxFQUFFO1lBQ3hDLEtBQUssRUFBRSxNQUFBLElBQUksQ0FBQyxRQUFRLG1DQUFJLEVBQUU7WUFDMUIsS0FBSyxFQUFFLE1BQUEsSUFBSSxDQUFDLEtBQUssbUNBQUksRUFBRTtZQUN2QixjQUFjO1lBQ2QsTUFBTSxFQUFFLE1BQUEsSUFBSSxDQUFDLE1BQU0sbUNBQUksRUFBRTtZQUN6QixVQUFVLEVBQUUsTUFBQSxJQUFJLENBQUMsVUFBVSxtQ0FBSSxFQUFFO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixRQUFRLEVBQUUsTUFBQSxJQUFJLENBQUMsUUFBUSxtQ0FBSSxFQUFFO1lBQzdCLGVBQWUsRUFBRSxNQUFBLElBQUksQ0FBQyxvQkFBb0IsbUNBQUksV0FBVztZQUN6RCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxjQUFjO1lBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLHFCQUFxQjtZQUNsRCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDekIsV0FBVyxFQUFFLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxTQUFTLG1DQUFJLEVBQUU7U0FDL0MsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7YUFDbEM7WUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDOUI7WUFDRSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1lBQ2pELEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7U0FDakUsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxXQUFXLEVBQUUsS0FBSztZQUNsQixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDckQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQzNCLFFBQVEsRUFBRTtpQkFDVixNQUFNLEVBQUU7aUJBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ1QsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUNoQyx3QkFBd0IsRUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixRQUFRLENBQ1QsQ0FBQztRQUNGLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4QixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUMvQixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsS0FBSyxDQUNYLHNEQUFzRCxFQUN0RCxHQUFHLENBQ0osQ0FBQztZQUNGLCtDQUErQztZQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsK0JBQStCO1FBQy9CLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUM7UUFFdkMsZ0NBQWdDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUM5RCxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlDLDJCQUEyQjtnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDdkQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUM5QixNQUFNLEVBQUUsS0FBSztvQkFDYixlQUFlLEVBQUUsS0FBSztpQkFDdkIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FDRixDQUFDO1FBRUYsK0JBQStCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUM1RCxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuQyxrRUFBa0U7Z0JBQ2xFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO29CQUM1QyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDakU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDO3dCQUNsRCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQzlCLE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxLQUFLO3FCQUN2QixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3ZCO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDOztBQWxsSEQ7OztHQUdHO0FBQ3FCLCtCQUFXLEdBQTJCO0lBQzVELG9CQUFvQixFQUFFLE1BQU07SUFDNUIsY0FBYyxFQUFFLEtBQUs7SUFDckIsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixZQUFZLEVBQUUsS0FBSztJQUNuQixpQkFBaUIsRUFBRSxPQUFPO0lBQzFCLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsY0FBYyxFQUFFLEtBQUs7SUFDckIsWUFBWSxFQUFFLEdBQUc7SUFDakIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxNQUFNO0lBQ3ZCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsY0FBYyxFQUFFLE1BQU07SUFDdEIsb0JBQW9CLEVBQUUsTUFBTTtJQUM1QixzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLHFCQUFxQixFQUFFLE1BQU07SUFDN0Isa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixrQkFBa0IsRUFBRSxNQUFNO0lBQzFCLHNCQUFzQixFQUFFLE1BQU07SUFDOUIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixvQkFBb0IsRUFBRSxNQUFNO0lBQzVCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsb0JBQW9CLEVBQUUsTUFBTTtJQUM1QixjQUFjLEVBQUUsTUFBTTtJQUN0QixZQUFZLEVBQUUsS0FBSztJQUNuQixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGlCQUFpQixFQUFFLE9BQU87SUFDMUIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixhQUFhLEVBQUUsTUFBTTtJQUNyQixpQkFBaUIsRUFBRSxNQUFNO0lBQ3pCLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsY0FBYyxFQUFFLE1BQU07SUFDdEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixrQkFBa0IsRUFBRSxNQUFNO0lBQzFCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFlBQVksRUFBRSxLQUFLO0lBQ25CLGFBQWEsRUFBRSxPQUFPO0lBQ3RCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsY0FBYyxFQUFFLEtBQUs7SUFDckIsY0FBYyxFQUFFLEtBQUs7SUFDckIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixjQUFjLEVBQUUsS0FBSztJQUNyQixvQkFBb0IsRUFBRSxNQUFNO0lBQzVCLGVBQWUsRUFBRSxNQUFNO0lBQ3ZCLFlBQVksRUFBRSxLQUFLO0lBQ25CLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsY0FBYyxFQUFFLEtBQUs7SUFDckIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLGVBQWUsRUFBRSxNQUFNO0lBQ3ZCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsWUFBWSxFQUFFLE9BQU87SUFDckIsYUFBYSxFQUFFLEtBQUs7SUFDcEIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixlQUFlLEVBQUUsS0FBSztJQUN0QixjQUFjLEVBQUUsS0FBSztJQUNyQixhQUFhLEVBQUUsS0FBSztJQUNwQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixpQkFBaUIsRUFBRSxNQUFNO0lBQ3pCLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixhQUFhLEVBQUUsTUFBTTtJQUNyQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsY0FBYyxFQUFFLEtBQUs7SUFDckIsYUFBYSxFQUFFLE1BQU07SUFDckIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixZQUFZLEVBQUUsS0FBSztJQUNuQixjQUFjLEVBQUUsS0FBSztJQUNyQixlQUFlLEVBQUUsTUFBTTtJQUN2QixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLGNBQWMsRUFBRSxNQUFNO0lBQ3RCLGlCQUFpQixFQUFFLE1BQU07SUFDekIsZUFBZSxFQUFFLE1BQU07SUFDdkIsaUJBQWlCLEVBQUUsS0FBSztJQUN4QixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIscUJBQXFCLEVBQUUsTUFBTTtJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixtQkFBbUIsRUFBRSxNQUFNO0lBQzNCLG1CQUFtQixFQUFFLE9BQU87SUFDNUIsaUJBQWlCLEVBQUUsTUFBTTtJQUN6QixnQ0FBZ0MsRUFBRSxLQUFLO0lBQ3ZDLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLG9CQUFvQixFQUFFLEtBQUs7SUFDM0Isc0JBQXNCLEVBQUUsTUFBTTtJQUM5QixrQkFBa0IsRUFBRSxNQUFNO0lBQzFCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsd0JBQXdCLEVBQUUsS0FBSztJQUMvQixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLDhCQUE4QixFQUFFLEtBQUs7SUFDckMsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixtQkFBbUIsRUFBRSxNQUFNO0lBQzNCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixXQUFXLEVBQUUsUUFBUTtJQUNyQixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsWUFBWSxFQUFFLFFBQVE7SUFDdEIsWUFBWSxFQUFFLEtBQUs7Q0FDcEIsQ0FBQztBQUVGOztHQUVHO0FBQ3FCLHVDQUFtQixHQUEyQjtJQUNwRSxzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLDBCQUEwQixFQUFFLEtBQUs7SUFDakMsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixpREFBaUQsRUFBRSxLQUFLO0lBQ3hELHVDQUF1QyxFQUFFLEtBQUs7SUFDOUMsaUNBQWlDLEVBQUUsS0FBSztJQUN4QyxnREFBZ0QsRUFBRSxLQUFLO0lBQ3ZELGlEQUFpRCxFQUFFLEtBQUs7SUFDeEQscUNBQXFDLEVBQUUsS0FBSztJQUM1QyxtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLHVCQUF1QixFQUFFLEtBQUs7SUFDOUIsb0NBQW9DLEVBQUUsS0FBSztJQUMzQyxxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsZ0NBQWdDLEVBQUUsS0FBSztJQUN2Qyx1QkFBdUIsRUFBRSxLQUFLO0lBQzlCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsOEJBQThCLEVBQUUsS0FBSztJQUNyQyxxQ0FBcUMsRUFBRSxLQUFLO0lBQzVDLG1EQUFtRCxFQUFFLEtBQUs7SUFDMUQscUNBQXFDLEVBQUUsS0FBSztJQUM1QyxtQ0FBbUMsRUFBRSxLQUFLO0lBQzFDLHNCQUFzQixFQUFFLE1BQU07SUFDOUIsc0JBQXNCLEVBQUUsTUFBTTtJQUM5Qix5Q0FBeUMsRUFBRSxNQUFNO0lBQ2pELGtDQUFrQyxFQUFFLE1BQU07SUFDMUMsd0NBQXdDLEVBQUUsSUFBSTtJQUM5Qyx3Q0FBd0MsRUFBRSxJQUFJO0lBQzlDLHlDQUF5QyxFQUFFLElBQUk7SUFDL0Msd0NBQXdDLEVBQUUsSUFBSTtDQUMvQyxDQUFDO0FBRUY7OztHQUdHO0FBQ3FCLHVDQUFtQixHQUEyQjtJQUNwRSxzQkFBc0IsRUFBRSxtQkFBbUI7SUFDM0MsMEJBQTBCLEVBQUUsZ0NBQWdDO0lBQzVELG1CQUFtQixFQUFFLGNBQWM7SUFDbkMsaURBQWlELEVBQUUsY0FBYztJQUNqRSx1Q0FBdUMsRUFBRSxlQUFlO0lBQ3hELGlDQUFpQyxFQUFFLFNBQVM7SUFDNUMsZ0RBQWdELEVBQUUsZUFBZTtJQUNqRSxpREFBaUQsRUFBRSxjQUFjO0lBQ2pFLHFDQUFxQyxFQUFFLGVBQWU7SUFDdEQsbUJBQW1CLEVBQUUsY0FBYztJQUNuQyx1QkFBdUIsRUFBRSxnQkFBZ0I7SUFDekMsb0NBQW9DLEVBQUUsZUFBZTtJQUNyRCxxQkFBcUIsRUFBRSxnQkFBZ0I7SUFDdkMsbUJBQW1CLEVBQUUsWUFBWTtJQUNqQyxnQ0FBZ0MsRUFBRSxjQUFjO0lBQ2hELHVCQUF1QixFQUFFLGdCQUFnQjtJQUN6QyxtQkFBbUIsRUFBRSxZQUFZO0lBQ2pDLDhCQUE4QixFQUFFLGFBQWE7SUFDN0MscUNBQXFDLEVBQUUsY0FBYztJQUNyRCxtREFBbUQsRUFBRSxlQUFlO0lBQ3BFLHFDQUFxQyxFQUFFLGdCQUFnQjtJQUN2RCxtQ0FBbUMsRUFBRSxZQUFZO0lBQ2pELHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxzQkFBc0IsRUFBRSxvQkFBb0I7SUFDNUMseUNBQXlDLEVBQUUsa0JBQWtCO0lBQzdELGtDQUFrQyxFQUFFLGtCQUFrQjtJQUN0RCx3Q0FBd0MsRUFBRSxrQkFBa0I7SUFDNUQsd0NBQXdDLEVBQUUsaUJBQWlCO0lBQzNELHlDQUF5QyxFQUFFLGdCQUFnQjtJQUMzRCx3Q0FBd0MsRUFBRSxxQkFBcUI7Q0FDaEUsQ0FBQzs7WUExNkJILFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsNkJBQTZCO2dCQUN2QyxtdWxIQUEyQztnQkFFM0MsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUF2QlEsV0FBVztZQUVYLFdBQVc7WUFqQ2xCLGlCQUFpQjtZQUxWLFVBQVU7WUF1QlYsWUFBWTtZQWhCbkIsVUFBVTtZQVNWLFNBQVM7WUFrQkYsYUFBYTtZQUZiLG1CQUFtQjtZQS9CbkIsa0JBQWtCO1lBdUNsQixpQkFBaUI7WUExQ2pCLE9BQU87WUFzQmQsZ0JBQWdCO1lBVmhCLFFBQVE7WUFnQkQsMkJBQTJCOzs7dUJBbUNqQyxTQUFTLFNBQUMsVUFBVTtzQkFDcEIsU0FBUyxTQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7cUNBRXRDLFlBQVksU0FBQyx1QkFBdUI7cUJBRXBDLFNBQVMsU0FBQyxRQUFROzRCQUNsQixTQUFTLFNBQUMsZUFBZTs0QkFDekIsU0FBUyxTQUFDLGVBQWU7MEJBR3pCLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLO3FCQUNMLEtBQUs7eUJBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7c0JBQ0wsS0FBSzt3QkFDTCxLQUFLO29CQUNMLEtBQUs7b0JBQ0wsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7MEJBQ0wsS0FBSzs0QkFDTCxLQUFLOzRCQUNMLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLO3lCQUNMLEtBQUs7NkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3dCQUNMLEtBQUs7c0JBQ0wsS0FBSzs0QkFJTCxLQUFLOytCQUNMLEtBQUs7aUNBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSztpQ0FDTCxLQUFLO21DQUNMLEtBQUs7b0JBQ0wsS0FBSzs4QkFDTCxLQUFLO2tDQUNMLEtBQUs7d0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzhCQUNMLEtBQUs7dUJBRUwsS0FBSzsrQkFDTCxLQUFLO3dCQUNMLEtBQUs7cUJBQ0wsS0FBSztvQkFDTCxLQUFLO3FDQUVMLEtBQUs7c0JBRUwsS0FBSzs4QkFFTCxLQUFLO3dDQUVMLEtBQUs7bUNBRUwsS0FBSzt3QkFFTCxLQUFLOytCQUVMLEtBQUs7bUNBQ0wsS0FBSzs0QkFDTCxNQUFNOzJCQUNOLE1BQU07dUJBQ04sTUFBTTs2QkFDTixNQUFNO21DQUVOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNO2lDQUVOLE1BQU07d0JBRU4sTUFBTTs4QkFDTixNQUFNOzJCQUNOLE1BQU07OEJBRU4sTUFBTTswQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RHJhd2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBsYXRmb3JtVG9rZW5SZWZyZXNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BsYXRmb3JtLXRva2VuLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBmb3JtYXROb3csIGZvcm1hdFRpbWVTdGFtcHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBkZXZfZW52aXJvbm1lbnQsXG4gIHByb2RfZW52aXJvbm1lbnQsXG59IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29udmVyc2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU29ja2V0U2VydmljZSB9IGZyb20gJy4uL3NvY2tldC1zZXJ2aWNlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIFNwZWVjaFNESyBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkayc7XG5pbXBvcnQgeyBCb3RzU2VydmljZSB9IGZyb20gJy4uL2JvdC5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcmtlZCBmcm9tICdtYXJrZWQnOyAvLyBJbXBvcnQgbWFya2VkXG5pbXBvcnQgeyBWb2ljZUFnZW50U2VydmljZSB9IGZyb20gJy4uL3ZvaWNlLWFnZW50L3NlcnZpY2VzL3ZvaWNlLWFnZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVm9pY2VBZ2VudE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvY29tcG9uZW50cy92b2ljZS1hZ2VudC1tb2RhbC92b2ljZS1hZ2VudC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgVk9JQ0VfTU9EQUxfQ09ORklHLFxuICBWT0lDRV9NT0RBTF9DTE9TRV9DQUxMQkFDSyxcbiAgVm9pY2VNb2RhbENvbmZpZyxcbn0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvdm9pY2UtbW9kYWwtdG9rZW5zJztcblxuZXhwb3J0IGVudW0gZUNsYXNzaWZpY2F0aW9uVHlwZSB7XG4gIExpdmUgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU2JyxcbiAgT25EZW1hbmQgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU3JyxcbiAgQnJlYWtvdXQgPSAnNjA0MGRjZTU3NjE1ZjA3NzBhZjE0MjU4Jyxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl2ZWdwdC1jaGF0LWRyYXdlci1wYWNrYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXREcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRNYWluJykgcHJpdmF0ZSBjaGF0TWFpbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbXlJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBteUlucHV0ITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjsgLy8gUmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYVxuICBAVmlld0NoaWxkcmVuKCdjbG9zZXBsYXlncm91bmRidXR0b24nKVxuICBjbG9zZVBsYXlncm91bmRCdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2RyYXdlcicpIGRyYXdlciE6IE1hdERyYXdlcjtcbiAgQFZpZXdDaGlsZCgnc291cmNlc0RyYXdlcicpIHNvdXJjZXNEcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcnNEcmF3ZXInKSBlZGl0b3JzRHJhd2VyITogTWF0RHJhd2VyO1xuICBwcml2YXRlIGJvZHlPdmVyZmxvd0NsYXNzID0gJ2JvZHktb3ZlcmZsb3ctaGlkZGVuJztcbiAgaXNDb2xsYXBzZWRUcnVlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvcGlsb3ROYW1lOiBzdHJpbmcgPSAnSGl2ZVhHUFQnO1xuICBASW5wdXQoKSBmaXJzdE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBhcGlLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQnViYmxlVXNlciE6IHN0cmluZztcbiAgQElucHV0KCkgYmdHcmFkaWVudCE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBib3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RTa2lsbHMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBvcmdJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25Db2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25iZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBjcmVkZW50aWFscyE6IFtdO1xuICBASW5wdXQoKSBkYXRlVGltZUNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRlVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudElkITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudFVybCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgd29ya3NwYWNlVG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHMyN1Rva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvdEljb24hOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpc3BsYXlBdmF0YXJVcmwgPVxuICAgICdodHRwczovL3d3dy5qb3Rmb3JtLmNvbS91cGxvYWRzL21laG1ldGthcmFrYXNsaS9mb3JtX2ZpbGVzLzE1NjQ1OTM2Njc2NzZhOGU4NWYyMzc1OC44Njk0NTUzN19pY29uLnBuZyc7XG4gIC8qKiBVc2VyIHByb2ZpbGUgaW1hZ2UgVVJMLiBGYWxscyBiYWNrIHRvIGluaXRpYWxzIChnZXRVc2VySWRJbml0aWFscygpKSBpZiBub3Qgc2V0LiAqL1xuICBASW5wdXQoKSB1c2VyQXZhdGFyVXJsPzogc3RyaW5nO1xuICBASW5wdXQoKSBmb3JtRmllbGRCZ0NvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBmb3JtRmllbGRUZXh0Q29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZ1bGxWaWV3ITogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JhZGllbnRDb2xvcnMhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZ3JlZXRpbmchOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JBaSE6IHN0cmluZztcbiAgQElucHV0KCkgbWVzc2FnZVRleHRDb2xvclVzZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJ1bGVzITogc3RyaW5nO1xuICBASW5wdXQoKSBzZW5kQnV0dG9uQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbmRCdXR0b25UZXh0Q29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDbG9zZSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRodW1ic0Rvd25NZXNzYWdlcyE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSB0aHVtYnNVcE1lc3NhZ2UhOiBzdHJpbmc7XG4gIC8qKiBVc2VyJ3Mgc2VsZWN0ZWQgdGltZXpvbmUgKGUuZy4gJ0FtZXJpY2EvTmV3X1lvcmsnKTsgdXNlZCBmb3IgdGltZXN0YW1wcyBhbmQgc2Vzc2lvbiBjYXJkIHRpbWVzLiBXaGVuIG5vdCBzZXQsIHNlc3Npb24gZGF0YSBvciBsb2NhbCB0aW1lIGlzIHVzZWQuICovXG4gIEBJbnB1dCgpIHRpbWV6b25lPzogc3RyaW5nO1xuICBASW5wdXQoKSB1bmtub3duUmVzcG9uc2VzITogW107XG4gIEBJbnB1dCgpIHVzZU9wZW5BaSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHVzZXJJZCE6IHN0cmluZztcbiAgQElucHV0KCkgaXNEZXYhOiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBjaGF0IGF1dG8tc2Nyb2xscyB0byBib3R0b20gd2hlbiBuZXcgY29udGVudCBpcyBhZGRlZC4gRGVmYXVsdDogZmFsc2UgKG5vIGF1dG8gc2Nyb2xsKS4gKi9cbiAgQElucHV0KCkgYXV0b1Njcm9sbE9uTmV3TWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogT3B0aW9uYWwgQVBJIGJhc2UgVVJMIChlLmcuIG5ncm9rIHR1bm5lbCkuIFdoZW4gc2V0LCBhbGwgY2hhdC92b2ljZSByZXF1ZXN0cyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGRldi9wcm9kIGRlZmF1bHQuICovXG4gIEBJbnB1dCgpIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBDb25uZWN0aW9ucyBsaXN0IGZyb20gaG9zdCAoZS5nLiBmcm9tIHN0b3JlIHNlbGVjdENvbm5lY3Rpb25zTGlzdCkuIEVhY2ggaXRlbSBoYXMgdXNlcklkLiBXaGVuIHNldCwgdXNlZCBmb3IgQ29ubmVjdC9SZXF1ZXN0IFNlbnQvRGlzY29ubmVjdCBidXR0b24gc3RhdGUuICovXG4gIEBJbnB1dCgpIGNvbm5lY3Rpb25zTGlzdDogYW55W10gPSBbXTtcbiAgLyoqIFBlbmRpbmcgc2VudCByZXF1ZXN0IHVzZXIgSURzIGZyb20gaG9zdCAoZS5nLiBmcm9tIHN0b3JlIHNlbGVjdFBlbmRpbmdDb25uZWN0aW9uc1NlbnRMaXN0KS4gV2hlbiBzZXQsIHVzZWQgZm9yIFJlcXVlc3QgU2VudCBzdGF0ZS4gKi9cbiAgQElucHV0KCkgcGVuZGluZ1NlbnRSZXF1ZXN0VXNlcklkczogYW55W10gPSBbXTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBDb25uZWN0IC8gUmVxdWVzdCBTZW50IC8gRGlzY29ubmVjdCBidXR0b25zIG9uIGF0dGVuZGVlIGNhcmRzIChlLmcuIGZyb20gdXNlclNldHRpbmdzPy5pc0Nvbm5lY3Rpb25zRW5hYmxlZCkuICovXG4gIEBJbnB1dCgpIGlzQ29ubmVjdGlvbnNFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqIFdoZW4gdHJ1ZSAoVU4vQ09QIGV2ZW50cyk6IHNlc3Npb24gY2FyZCBzaG93cyBcIlNlc3Npb24gdHlwZVwiIGxhYmVsIGFuZCBKb2luL1dhdGNoIGJ1dHRvbnMuIFdoZW4gZmFsc2U6IHNob3dzIFwiTWVldGluZyB0eXBlXCIgbGFiZWwgYW5kIHNpbmdsZSBQbGF5IGJ1dHRvbiAoc2FtZSBhcyB0ZW1wbGF0ZTIpLiAqL1xuICBASW5wdXQoKSBpc1VuRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBhZ2FpbkJ1dHRvbkNvbG9yITogc3RyaW5nW107XG4gIEBJbnB1dCgpIGFnYWluQnV0dG9uVGV4dENvbG9yITogc3RyaW5nW107XG4gIEBPdXRwdXQoKSBmZWVkYmFja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvbkNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvcGVuUGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2Vzc2lvbkFjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBKb2luL1dhdGNoIGJ1dCBhY3Rpb24gaXMgbm90IHlldCBhdmFpbGFibGUgKGUuZy4gc2Vzc2lvbiBub3Qgc3RhcnRlZCkuIEhvc3QgY2FuIHNob3cgdG9hc3RlciB3aXRoIHRoZSBtZXNzYWdlLiAqL1xuICBAT3V0cHV0KCkgc2Vzc2lvbkFjdGlvbkJsb2NrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNsb3NlQm90ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb25uZWN0V2l0aFVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBWaWV3IHByb2ZpbGUgb24gYSBzcGVha2VyIGNhcmQgKGdldF9ldmVudF9zcGVha2VycykuIEhvc3Qgc2hvdWxkIG9wZW4gc3BlYWtlciBkZXRhaWwgZHJhd2VyIHNhbWUgYXMgL2V2ZW50cy86aWQvc3BlYWtlcnMuICovXG4gIEBPdXRwdXQoKSB2aWV3U3BlYWtlclByb2ZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3BlYWtlcjogYW55OyBzcGVha2VyczogYW55W10gfT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBWaWV3IEJvb3RoIG9uIGEgc3BvbnNvci9ib290aCBjYXJkIChnZXRfZXZlbnRfc3BvbnNvcnMsIGdldF9ldmVudF9ib290aHMpLiBIb3N0IHNob3VsZCBuYXZpZ2F0ZSB0byBldmVudHMvOmV2ZW50VXJsL3Nwb25zb3JzL2Jvb3Rocy86Ym9vdGhVcmwuICovXG4gIEBPdXRwdXQoKSB2aWV3Qm9vdGggPSBuZXcgRXZlbnRFbWl0dGVyPHsgYm9vdGhJZD86IHN0cmluZzsgYm9vdGhVcmw/OiBzdHJpbmc7IHNwb25zb3I/OiBhbnkgfT4oKTtcbiAgQE91dHB1dCgpIHNjaGVkdWxlTWVldGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaFRva2VuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKiBFbWl0dGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBgdXNlci90b2tlblJlZnJlc2hgIHNvIHRoZSBob3N0IGNhbiBkaXNwYXRjaCBMb2dpbiAvIGBzYXZlVG9rZW5BbmRMb2dpblVzZXJgLiAqL1xuICBAT3V0cHV0KCkgdG9rZW5zUmVmcmVzaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuU3VwcG9ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGF1dG9nZW5LZXkgPSAnQXV0b2dlbl9lREpUdEVVLU5CMFJ0SXB6cTF3JztcbiAgYWRkVG9NeUFnZW5kYUFjdGlvbiA9ICdhZGRfdG9fbXlfYWdlbmRhJztcbiAgbXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24gPSAnbXlfdXBjb21taW5nX3Nlc3Npb24nO1xuICBjb25uZWN0T3JGb2xsb3dBY3Rpb24gPSAnY29ubmVjdF9vcl9mb2xsb3cnO1xuICBhaVJlc3BvbnNlOiBzdHJpbmcgPSAnJztcbiAgY2hhdExvZzogYW55W10gPSBbXTtcbiAgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBmZWVkYmFja0RvbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JlZXRpbmdNc2c6IHN0cmluZyA9ICcnO1xuICBoYXNCYWNrZHJvcFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlucHV0OiBzdHJpbmcgPSAnJztcbiAgbGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG1vZGU6IHN0cmluZyA9ICdvdmVyJztcbiAgcXVpY2tQcm9tcHRzOiBhbnlbXSA9IFtdO1xuICB0aHVtYnNEb3duTXNnSW5kZXggPSAwO1xuICB1c2VyTmFtZTogc3RyaW5nID0gJyc7XG4gIHNob3dTdGFydEFnYWluOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSU9TRGV2aWNlOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dGZWVkQmFja0ljb25zSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICB0ZW1wZXJhdHVyZTogbnVtYmVyID0gMTtcbiAgLyoqIFNwZWFrZXIgY2FjaGUgYnkgc3RhZmYgaWQgKGZpbGxlZCB2aWEgZ2V0LWJ5LXN0YWZmLWlkcykuICovXG4gIHNwZWFrZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIC8qKiBQcmV2ZW50IGR1cGxpY2F0ZSBzcGVha2VyIGZldGNoZXMgYWNyb3NzIG1lc3NhZ2VzLiAqL1xuICBwcml2YXRlIHJlcXVlc3RlZFNwZWFrZXJJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZW52aXJvbm1lbnQ6IHtcbiAgICBVU0VSU19BUEk7XG4gICAgQkFTRV9VUkw7XG4gICAgQUdFTlRTX0FQSTtcbiAgfTtcbiAgcGVuZGluZ1JlcXVlc3RzOiBhbnk7XG4gIG15Q29ubmVjdGlvbnM6IGFueTtcbiAgY29udmVyc2F0aW9uS2V5OiBzdHJpbmc7XG4gIGNvblNlc3Npb25LZXk6IHN0cmluZyA9ICcnO1xuICBpc0ZldGNoRGF0YUZvcjogYm9vbGVhbjtcbiAgaXM0MDE6IGJvb2xlYW47XG4gIG1zZzogYW55O1xuICBjaGF0OiBhbnk7XG4gIGlzV29ya2Zsb3dPcGVuOiBib29sZWFuO1xuICBvcmdXb3JrZmxvd3M6IGFueTtcbiAgb3BlbldvcmtmbG93SW5wdXQ6IGJvb2xlYW47XG4gIHNlbGVjdGVkV29ya2Zsb3c6IGFueTtcbiAgd29ya2Zsb3dGb3JtOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzOiBudW1iZXIgPSAwO1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb246IHN0cmluZyA9ICcnO1xuICBleGVjdXRpbmdXb3JrZmxvdzogYm9vbGVhbjtcbiAgd29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIHNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcbiAgY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuXG4gIHNwZWVjaENvbmZpZzogU3BlZWNoU0RLLlNwZWVjaENvbmZpZztcbiAgcmVjb2duaXplcjogU3BlZWNoU0RLLlNwZWVjaFJlY29nbml6ZXI7XG4gIHJlY29nbml6ZWRUZXh0OiBzdHJpbmcgPSAnJztcbiAgYXV0aG9yaXphdGlvblRva2VuOiBzdHJpbmcgPSAnJztcbiAgcmVnaW9uOiBzdHJpbmcgPSAnd2VzdGV1cm9wZSc7IC8vIFNldCB5b3VyIEF6dXJlIHJlZ2lvbiBoZXJlXG4gIGlzUmVjb3JkaW5nOiBib29sZWFuO1xuICBpc1ZvaWNlTW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgdm9pY2VNb2RhbE92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYm90U2VydmljZTogQm90c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzb2NrZXRTZXJ2aWNlOiBTb2NrZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udmVyc2F0aW9uU2VydmljZTogQ29udmVyc2F0aW9uU2VydmljZSwgLy8gcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdm9pY2VBZ2VudFNlcnZpY2U6IFZvaWNlQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybVRva2VuUmVmcmVzaDogUGxhdGZvcm1Ub2tlblJlZnJlc2hTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmNoYXRNYWluID0gbmV3IEVsZW1lbnRSZWYobnVsbCk7XG5cbiAgICAvLyBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcbiAgICAvLyAgIHRoaXMuaXNJT1NEZXZpY2UgPSB0cnVlO1xuICAgIC8vIH1cbiAgfVxuICBnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRUcmFuc2xhdGlvbihrZXkpO1xuICB9XG5cbiAgLyoqIFRpbWUgc2hvd24gbmV4dCB0byBcIkFzc2lzdGFudFwiIHdoZW4gaW4gdGhpbmtpbmcvbG9hZGluZyBzdGF0ZS4gKi9cbiAgZ2V0TG9hZGluZ1RpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpO1xuICB9XG5cbiAgLyoqIFVzZXIgaW5pdGlhbHMgZm9yIGF2YXRhciBmYWxsYmFjayAoZS5nLiBcIkpEXCIgZnJvbSBmaXJzdE5hbWUgKyBsYXN0TmFtZSkuICovXG4gIGdldFVzZXJJZEluaXRpYWxzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlyc3QgPSAodGhpcy5maXJzdE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBsYXN0ID0gKHRoaXMubGFzdE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoZmlyc3QgJiYgbGFzdCkgcmV0dXJuIChmaXJzdFswXSArIGxhc3RbMF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKGZpcnN0KSByZXR1cm4gZmlyc3Quc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICBpZiAobGFzdCkgcmV0dXJuIGxhc3Quc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gJ1UnO1xuICB9XG5cbiAgLyoqIEF0dGVuZGVlIGluaXRpYWxzIGZvciBjYXJkIHdoZW4gbm8gcGhvdG8gKGUuZy4gXCJWaWpheSBQYWxpd2FsXCIgLT4gXCJWUFwiLCBcIkppbVwiIC0+IFwiSlwiKS4gKi9cbiAgZ2V0QXR0ZW5kZWVJbml0aWFscyhuYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gJz8nO1xuICAgIGNvbnN0IHBhcnRzID0gbmFtZS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKVxuICAgICAgcmV0dXJuIChwYXJ0c1swXVswXSArIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdWzBdKS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHJldHVybiBwYXJ0c1swXS5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiAnPyc7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGV2ZW50SWQgY2hhbmdlcyB0byB1cGRhdGUgdHJhbnNsYXRpb24gc2VydmljZVxuICAgIGlmIChjaGFuZ2VzLmV2ZW50SWQgJiYgY2hhbmdlcy5ldmVudElkLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uuc2V0RXZlbnRJZChjaGFuZ2VzLmV2ZW50SWQuY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5zMjdUb2tlbikge1xuICAgICAgaWYgKGNoYW5nZXMuczI3VG9rZW4uY3VycmVudFZhbHVlICE9IGNoYW5nZXMuczI3VG9rZW4ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICB0aGlzLnMyN1Rva2VuID0gY2hhbmdlcy5zMjdUb2tlbi5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2lzRmV0Y2hEYXRhRm9yOiAnLCB0aGlzLmlzRmV0Y2hEYXRhRm9yKTtcbiAgICAgICAgY29uc29sZS5sb2coJ21zZzogJywgdGhpcy5tc2cpO1xuICAgICAgICBjb25zb2xlLmxvZygnY2hhdDogJywgdGhpcy5jaGF0KTtcbiAgICAgICAgaWYgKHRoaXMuaXM0MDEpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0ZldGNoRGF0YUZvcikge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGFGb3IodGhpcy5tc2csIHRoaXMuY2hhdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKHRoaXMubXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEbyBOT1QgY2FsbCBpbml0aWFsaXplU29ja2V0KCkgaGVyZS4gU29ja2V0LklPIGlzIGZvciBjaGF0IG9ubHk7IHdlIGRlZmVyXG4gICAgLy8gdW50aWwgdGhlIHVzZXIgYWN0dWFsbHkgdXNlcyBjaGF0IChzZW5kIG1lc3NhZ2Ugb3Igc3RhcnQgbmV3IGNvbnZlcnNhdGlvbilcbiAgICAvLyBzbyB0aGF0IHZvaWNlLW9ubHkgdXNhZ2UgbmV2ZXIgdHJpZ2dlcnMgU29ja2V0LklPIChhdm9pZHMgdjIvdjMgbWlzbWF0Y2ggZXJyb3IpLlxuICAgIGlmIChcbiAgICAgIGNoYW5nZXMub3JnSWQgJiZcbiAgICAgIGNoYW5nZXMub3JnSWQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMub3JnSWQucHJldmlvdXNWYWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5jaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYmFzZVVybCAmJiB0aGlzLmVudmlyb25tZW50KSB7XG4gICAgICB0aGlzLmFwcGx5QmFzZVVybE92ZXJyaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFdoZW4gYmFzZVVybCBpbnB1dCBpcyBzZXQsIG92ZXJyaWRlIGVudmlyb25tZW50LkJBU0VfVVJMIHNvIGFsbCBjaGF0L3ZvaWNlIHNlcnZpY2VzIHVzZSBpdCAoc3VwcG9ydHMgbmdyb2sgZXRjLikuICovXG4gIHByaXZhdGUgYXBwbHlCYXNlVXJsT3ZlcnJpZGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdEVudiA9IHRoaXMuaXNEZXYgPyBkZXZfZW52aXJvbm1lbnQgOiBwcm9kX2Vudmlyb25tZW50O1xuICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgdHlwZW9mIHRoaXMuYmFzZVVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuYmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB7IC4uLmRlZmF1bHRFbnYsIEJBU0VfVVJMOiB1cmwgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZGVmYXVsdEVudjtcbiAgfVxuXG4gIGRvbWFpbkF1dGhvcml0eVZhbHVlOiBhbnkgPSAncHJvZC1saXRlJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdGhlIGV2ZW50SWQgaW4gdHJhbnNsYXRpb24gc2VydmljZSB0byBnZXQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICBpZiAodGhpcy5ldmVudElkKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKHRoaXMuZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseUJhc2VVcmxPdmVycmlkZSgpO1xuXG4gICAgY29uc3QgZG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBoZWFkZXIgdmFsdWUgYmFzZWQgb24gdGhlIGRvbWFpblxuXG4gICAgaWYgKGRvbWFpbi5pbmNsdWRlcygncHJlLWFwcC5zb2NpYWwyNy5jb20nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdwcmUtcHJvZC1saXRlJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbi5pbmNsdWRlcygnYXBwLnNvY2lhbDI3LmNvbScpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ3Byb2QtbGl0ZSc7XG4gICAgfSBlbHNlIGlmIChkb21haW4uaW5jbHVkZXMoJ2hpdmVncHQuaW8nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdoaXZlZ3B0JztcbiAgICB9XG5cbiAgICAvLyB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xuICAgIC8vIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2hhbmdlVGVtcGVyYXR1cmUodGhpcy50ZW1wZXJhdHVyZSk7XG4gICAgdGhpcy5mZXRjaEJvdENvbmZpZygpLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTonLCBlcnIpO1xuICAgICAgfSxcbiAgICApO1xuICAgIC8vIHRoaXMuZmV0Y2hBZ2VudHMoKTtcbiAgICAvLyB0aGlzLmZldGNoRWRpdG9yQ29udGVudCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICAgIHRoaXMuYm90U2VydmljZVxuICAgICAgLmZldGNoU3BlZWNoQXV0aG9yaXphdGlvblRva2VuKFxuICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICB0aGlzLmFwaUtleSxcbiAgICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHRva2VuKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblRva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW4pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIC8qKiBUcnVlIGFmdGVyIFNvY2tldCBoYXMgYmVlbiBpbml0aWFsaXplZCBmb3IgY2hhdCAoYXZvaWRzIGNvbm5lY3Rpbmcgb24gdm9pY2Utb25seSB1c2FnZSkuICovXG4gIHByaXZhdGUgY2hhdFNvY2tldEluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENhbGwgYmVmb3JlIGNoYXQgYWN0aW9ucyBzbyBTb2NrZXQuSU8gaXMgdXNlZCBvbmx5IGZvciBjaGF0LCBub3QgZm9yIHZvaWNlLlxuICAgKiBWb2ljZSBhZ2VudCB1c2VzIG5hdGl2ZSBXZWJTb2NrZXQgKyBEYWlseS5qcyBvbmx5OyBTb2NrZXQuSU8gbXVzdCBub3QgcnVuIGR1cmluZyB2b2ljZSBmbG93LlxuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVDaGF0U29ja2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCB8fCAhdGhpcy5vcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRpYWxpemVTb2NrZXQoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTb2NrZXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc29ja2V0U2VydmljZS5kaXNjb25uZWN0U29ja2V0Q29ubmVjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmNvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1lFUyBJTklUJyk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkoXG4gICAgICAgICAgdGhpcy5ib3RJZCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLmV2ZW50SWQsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLnJlZ2lzdGVyVXNlclNwZWNpZmljSGl2ZVNvY2tldChcbiAgICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICB0aGlzLm9yZ0lkLFxuICAgICAgICApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxpc3RlblNvY2tldHMoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHN1YnNjcmlwdGlvbk5ldzogYW55O1xuICBzb2NrZXREYXRhOiBhbnk7XG5cbiAgLyoqIEluaXRpYWwgbnVtYmVyIG9mIHNlc3Npb24vYXR0ZW5kZWUgY2FyZHMgc2hvd24gYmVmb3JlIFwiU2hvdyBYIG1vcmVcIi4gKi9cbiAgcmVhZG9ubHkgU0VTU0lPTl9DQVJEU19JTklUSUFMID0gNjtcbiAgcmVhZG9ubHkgQVRURU5ERUVfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IFNQRUFLRVJfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IFNQT05TT1JfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IEJPT1RIX1JFUF9DQVJEU19JTklUSUFMID0gOTtcbiAgLyoqIE1lc3NhZ2UgaWQgLT4gdHJ1ZSB3aGVuIHVzZXIgZXhwYW5kZWQgXCJTaG93IG1vcmVcIiBmb3Igc2Vzc2lvbnMvYXR0ZW5kZWVzLiAqL1xuICBleHBhbmRlZFNlc3Npb25DYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZEF0dGVuZGVlQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRTcGVha2VyQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRTcG9uc29yQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRCb290aFJlcENhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIC8qKiBrZXk6IGAke21lc3NhZ2VJZH06JHthdHRlbmRlZUlkfWAgLT4gdHJ1ZSB3aGVuIGRlc2NyaXB0aW9uIGV4cGFuZGVkICovXG4gIGV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gdmlkZW8gaXMgcGxheWluZyAqL1xuICBhdHRlbmRlZVZpZGVvUGxheWluZ0lkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gdmlkZW8gaXMgbXV0ZWQgKGRlZmF1bHQgdHJ1ZSkgKi9cbiAgYXR0ZW5kZWVWaWRlb011dGVkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIC8qKiBTdHJpcCBIVE1MIHRhZ3MgdG8gcGxhaW4gdGV4dCAoZS5nLiBmb3Igc3BlYWtlci9hdHRlbmRlZSBkZXNjcmlwdGlvbiBmcm9tIEFQSSkuICovXG4gIHN0cmlwSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaHRtbCB8fCB0eXBlb2YgaHRtbCAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCB0ZXh0ID0gZG9jLmJvZHk/LnRleHRDb250ZW50ID8/ICcnO1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG4gIH1cblxuICBnZXRBdHRlbmRlZURlc2NyaXB0aW9uKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhdyA9XG4gICAgICBhdHRlbmRlZT8uZGVzY3JpcHRpb24gPz8gYXR0ZW5kZWU/LmludGVyZXN0cyA/PyBhdHRlbmRlZT8uam9iVGl0bGUgPz8gJyc7XG4gICAgY29uc3Qgc3RyID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyByYXcudHJpbSgpIDogU3RyaW5nKHJhdyA/PyAnJykudHJpbSgpO1xuICAgIC8vIElmIGl0IGxvb2tzIGxpa2UgSFRNTCwgc3RyaXAgdGFncyBzbyBjYXJkIHNob3dzIHBsYWluIHRleHRcbiAgICBpZiAoc3RyICYmIC88W2Etel1bXFxzXFxTXSo+L2kudGVzdChzdHIpKSByZXR1cm4gdGhpcy5zdHJpcEh0bWwoc3RyKTtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc2hvdWxkU2hvd0F0dGVuZGVlUmVhZE1vcmUoYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIGhldXJpc3RpYzogb25seSBzaG93IHRvZ2dsZSBmb3IgcmVhc29uYWJseSBsb25nIHRleHRcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRlbmRlZURlc2NyaXB0aW9uKGF0dGVuZGVlKS5sZW5ndGggPiA5MDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0ZW5kZWVEZXNjS2V5KGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG1zZ0lkID0gY2hhdD8uX2lkO1xuICAgIGNvbnN0IGF0dGVuZGVlSWQgPSBhdHRlbmRlZT8uaWQgPz8gYXR0ZW5kZWU/Ll9pZCA/PyBhdHRlbmRlZT8udXNlcklkO1xuICAgIGlmICghbXNnSWQgfHwgIWF0dGVuZGVlSWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBgJHttc2dJZH06JHthdHRlbmRlZUlkfWA7XG4gIH1cblxuICBpc0F0dGVuZGVlRGVzY3JpcHRpb25FeHBhbmRlZChjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlRGVzY0tleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISF0aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkc1trZXldO1xuICB9XG5cbiAgdG9nZ2xlQXR0ZW5kZWVEZXNjcmlwdGlvbihjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnksIGV2PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlRGVzY0tleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gIXRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzW2tleV07XG4gICAgdGhpcy5leHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHMgPSB7XG4gICAgICAuLi50aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkcyxcbiAgICAgIFtrZXldOiBuZXh0LFxuICAgIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXRBdHRlbmRlZVZpZGVvVXJsKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IGF0dGVuZGVlPy51c2VyVmlkZW9zTW9kZWw/LnVybDtcbiAgICByZXR1cm4gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwudHJpbSgpIDogJyc7XG4gIH1cblxuICBnZXRBdHRlbmRlZVZpZGVvUG9zdGVyKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBvc3RlciA9IGF0dGVuZGVlPy51c2VyVmlkZW9zTW9kZWw/LnRodW1ibmFpbDtcbiAgICByZXR1cm4gdHlwZW9mIHBvc3RlciA9PT0gJ3N0cmluZycgPyBwb3N0ZXIudHJpbSgpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbXNnSWQgPSBjaGF0Py5faWQ7XG4gICAgY29uc3QgYXR0ZW5kZWVJZCA9IGF0dGVuZGVlPy5pZCA/PyBhdHRlbmRlZT8uX2lkID8/IGF0dGVuZGVlPy51c2VySWQ7XG4gICAgaWYgKCFtc2dJZCB8fCAhYXR0ZW5kZWVJZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke21zZ0lkfToke2F0dGVuZGVlSWR9YDtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVWaWRlb011dGVkKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiB0cnVlO1xuICAgIC8vIGRlZmF1bHQgdHJ1ZSAobXV0ZWQpIHVubGVzcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZVxuICAgIHJldHVybiB0aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkc1trZXldICE9PSBmYWxzZTtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVWaWRlb1BsYXlpbmcoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHNba2V5XTtcbiAgfVxuXG4gIHRvZ2dsZUF0dGVuZGVlVmlkZW9NdXRlKFxuICAgIGNoYXQ6IGFueSxcbiAgICBhdHRlbmRlZTogYW55LFxuICAgIHZpZGVvRWw/OiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbCxcbiAgICBldj86IEV2ZW50LFxuICApOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9ICF0aGlzLmlzQXR0ZW5kZWVWaWRlb011dGVkKGNoYXQsIGF0dGVuZGVlKTtcbiAgICB0aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkcyA9IHsgLi4udGhpcy5hdHRlbmRlZVZpZGVvTXV0ZWRJZHMsIFtrZXldOiBuZXh0IH07XG4gICAgaWYgKHZpZGVvRWwpIHtcbiAgICAgIHZpZGVvRWwubXV0ZWQgPSBuZXh0O1xuICAgICAgLy8gU29tZSBicm93c2VycyByZXF1aXJlIHZvbHVtZSB0byBiZSA+MCB3aGVuIHVubXV0aW5nXG4gICAgICBpZiAoIW5leHQgJiYgKHZpZGVvRWwudm9sdW1lID09IG51bGwgfHwgdmlkZW9FbC52b2x1bWUgPT09IDApKSB7XG4gICAgICAgIHZpZGVvRWwudm9sdW1lID0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVBdHRlbmRlZVZpZGVvUGxheShcbiAgICBjaGF0OiBhbnksXG4gICAgYXR0ZW5kZWU6IGFueSxcbiAgICB2aWRlb0VsPzogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwsXG4gICAgZXY/OiBFdmVudCxcbiAgKTogdm9pZCB7XG4gICAgZXY/LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG5leHQgPSAhdGhpcy5pc0F0dGVuZGVlVmlkZW9QbGF5aW5nKGNoYXQsIGF0dGVuZGVlKTtcbiAgICB0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzID0ge1xuICAgICAgLi4udGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyxcbiAgICAgIFtrZXldOiBuZXh0LFxuICAgIH07XG4gICAgaWYgKHZpZGVvRWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgY29uc3QgcCA9IHZpZGVvRWwucGxheSgpO1xuICAgICAgICAgIGlmIChwICYmIHR5cGVvZiAocCBhcyBhbnkpLmNhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAocCBhcyBhbnkpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gSWYgcGxheSBmYWlscywgcmVmbGVjdCBwYXVzZWQgc3RhdGVcbiAgICAgICAgICAgICAgdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgICAgICAgICAgIFtrZXldOiBmYWxzZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlkZW9FbC5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25BdHRlbmRlZVZpZGVvUGxheVN0YXRlKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSwgaXNQbGF5aW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzW2tleV0gPT09IGlzUGxheWluZykgcmV0dXJuO1xuICAgIHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMgPSB7XG4gICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgW2tleV06IGlzUGxheWluZyxcbiAgICB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBzZXNzaW9uIGRhdGUvdGltZSBmb3IgZGlzcGxheS5cbiAgICogQHBhcmFtIGRhdGVUaW1lUmFuZ2UgU2Vzc2lvbiBzdGFydC9lbmQgKG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBvciBzdHJpbmcgd2l0aCBcIlN0YXJ0OiAuLi4gRW5kOiAuLi5cIilcbiAgICogQHBhcmFtIGRpc3BsYXlUaW1lWm9uZSBPcHRpb25hbCB1c2VyLXNlbGVjdGVkIHRpbWV6b25lIChlLmcuICdBbWVyaWNhL05ld19Zb3JrJyk7IHdoZW4gc2V0LCB0aW1lcyBhcmUgc2hvd24gaW4gdGhpcyB6b25lLlxuICAgKi9cbiAgZm9ybWF0U2Vzc2lvbldoZW4oXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBsb2NhbGVPcHRzID0gZGlzcGxheVRpbWVab25lID8geyB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lIH0gOiB7fTtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiAnJztcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0ICYmXG4gICAgICBkYXRlVGltZVJhbmdlPy5lbmRcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kRHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLmVuZCk7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXR0ZWQgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7ZGF0ZUZvcm1hdHRlZH0gfCAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0ZVRpbWVSYW5nZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgIC9TdGFydDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgKTtcbiAgICBjb25zdCBlbmRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAvRW5kOlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICApO1xuICAgIGlmICghc3RhcnRNYXRjaCB8fCAhZW5kTWF0Y2gpIHJldHVybiBkYXRlVGltZVJhbmdlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydFN0ciA9IHN0YXJ0TWF0Y2hbMV07XG4gICAgICBjb25zdCBlbmRTdHIgPSBlbmRNYXRjaFsxXTtcbiAgICAgIGNvbnN0IHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydFN0ci5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICBjb25zdCBlbmREdCA9IG5ldyBEYXRlKGVuZFN0ci5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICBjb25zdCBkYXRlRm9ybWF0dGVkID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lU2hvcnQgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuZFRpbWVTaG9ydCA9IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBgJHtkYXRlRm9ybWF0dGVkfSB8ICR7c3RhcnRUaW1lU2hvcnR9IC0gJHtlbmRUaW1lU2hvcnR9YDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkYXRlVGltZVJhbmdlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0ZSBiYWRnZSAoZGF5ICsgbW9udGgpIGZvciBzZXNzaW9uIGNhcmQgZnJvbSBkYXRlVGltZVJhbmdlLlxuICAgKiBIYW5kbGVzIGRhdGVUaW1lUmFuZ2UgYXMgc3RyaW5nIChcIlN0YXJ0OiAyMDI2LTAyLTIwIDAxOjA1OjAwLCBFbmQ6IC4uLlwiKSBvciBvYmplY3QgeyBzdGFydCwgZW5kIH0uXG4gICAqIFVzZXMgZGlzcGxheVRpbWVab25lIG9ubHkgd2hlbiBpdCBpcyBhIHZhbGlkIElBTkEgaWRlbnRpZmllcjsgb3RoZXJ3aXNlIGZvcm1hdHMgaW4gbG9jYWwgdGltZS5cbiAgICovXG4gIGdldFNlc3Npb25EYXRlQmFkZ2UoXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogeyBkYXk6IHN0cmluZzsgbW9udGg6IHN0cmluZyB9IHtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiB7IGRheTogJycsIG1vbnRoOiAnJyB9O1xuICAgIHRyeSB7XG4gICAgICBsZXQgc3RhcnREdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnb2JqZWN0JyAmJiBkYXRlVGltZVJhbmdlPy5zdGFydCkge1xuICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoZGF0ZVRpbWVSYW5nZS5zdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvU3RhcnQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICAgICApO1xuICAgICAgICBpZiAoc3RhcnRNYXRjaClcbiAgICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoc3RhcnRNYXRjaFsxXS5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0YXJ0RHQgfHwgaXNOYU4oc3RhcnREdC5nZXRUaW1lKCkpKSByZXR1cm4geyBkYXk6ICcnLCBtb250aDogJycgfTtcbiAgICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF5ID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgZGF5LCBtb250aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGRpc3BsYXlUaW1lWm9uZSBtYXkgYmUgbm9uLUlBTkEgKGUuZy4gXCIoVVRDLTAzOjAwKSBCcmFzaWxpYVwiKTsgZm9ybWF0IHdpdGhvdXQgdGltZVpvbmVcbiAgICAgICAgY29uc3QgZGF5ID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyBkYXk6ICdudW1lcmljJyB9KTtcbiAgICAgICAgY29uc3QgbW9udGggPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICAgICAgICByZXR1cm4geyBkYXksIG1vbnRoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBkYXk6ICcnLCBtb250aDogJycgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRpbWUgcmFuZ2Ugb25seSAoZS5nLiBcIjk6MDAgQU0gLSAxMDozMCBBTVwiKSBmb3Igc2Vzc2lvbiBjYXJkLlxuICAgKiBGYWxscyBiYWNrIHRvIGZvcm1hdHRpbmcgd2l0aG91dCB0aW1lWm9uZSB3aGVuIGRpc3BsYXlUaW1lWm9uZSBpcyBub3QgYSB2YWxpZCBJQU5BIGlkZW50aWZpZXIuXG4gICAqL1xuICBmb3JtYXRTZXNzaW9uVGltZVJhbmdlKFxuICAgIGRhdGVUaW1lUmFuZ2U6IHN0cmluZyB8IHsgc3RhcnQ/OiBzdHJpbmc7IGVuZD86IHN0cmluZyB9IHwgbnVsbCxcbiAgICBkaXNwbGF5VGltZVpvbmU/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlVGltZVJhbmdlKSByZXR1cm4gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzdGFydER0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgZW5kRHQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0ICYmXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U/LmVuZFxuICAgICAgKSB7XG4gICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgZW5kRHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLmVuZCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvU3RhcnQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbmRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAgICAgL0VuZDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdGFydE1hdGNoKVxuICAgICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgICAgaWYgKGVuZE1hdGNoKSBlbmREdCA9IG5ldyBEYXRlKGVuZE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnREdCB8fCBpc05hTihzdGFydER0LmdldFRpbWUoKSkpIHJldHVybiAnJztcbiAgICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPVxuICAgICAgICAgIGVuZER0ICYmICFpc05hTihlbmREdC5nZXRUaW1lKCkpXG4gICAgICAgICAgICA/IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgcmV0dXJuIGVuZFRpbWUgPyBgJHtzdGFydFRpbWV9IC0gJHtlbmRUaW1lfWAgOiBzdGFydFRpbWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRUaW1lID1cbiAgICAgICAgICBlbmREdCAmJiAhaXNOYU4oZW5kRHQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgPyBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICByZXR1cm4gZW5kVGltZSA/IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YCA6IHN0YXJ0VGltZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSUFOQSB0aW1lem9uZSBJRCAtPiBhYmJyZXZpYXRpb24gbWFwIChtYXRjaGVzIHBhcmVudCBhcHAgc2Vzc2lvbi1sYXlvdXRzIC8gdGltZXpvbmVzLmVudW0gVGltZVpvbmVzKS5cbiAgICogVXNlZCBzbyBzZXNzaW9uIGNhcmRzIHNob3cgU0FTVCwgRUVTVCwgU0FXU1QsIEVTQVNULCBldGMuIGluc3RlYWQgb2YgR01UKzEsIEdNVCsyLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVFpfQUJCUl9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ1BhY2lmaWMvS2lyaXRpbWF0aSc6ICdMSU5UJyxcbiAgICAnUGFjaWZpYy9BcGlhJzogJ1NTVCcsXG4gICAgJ1BhY2lmaWMvVG9uZ2F0YXB1JzogJ1RTVCcsXG4gICAgJ0V0Yy9HTVQtMTMnOiAnVVRDJyxcbiAgICAnUGFjaWZpYy9DaGF0aGFtJzogJ0NIQURUJyxcbiAgICAnQXNpYS9LYW1jaGF0a2EnOiAnQU5BVCcsXG4gICAgJ1BhY2lmaWMvRmlqaSc6ICdGSlQnLFxuICAgICdFdGMvR01ULTEyJzogJ1UnLFxuICAgICdQYWNpZmljL0F1Y2tsYW5kJzogJ05aU1QnLFxuICAgICdQYWNpZmljL0d1YWRhbGNhbmFsJzogJ0NQU1QnLFxuICAgICdBc2lhL1Nha2hhbGluJzogJ1NBS1QnLFxuICAgICdQYWNpZmljL05vcmZvbGsnOiAnTkZUJyxcbiAgICAnQXNpYS9NYWdhZGFuJzogJ01BR1QnLFxuICAgICdBc2lhL1NyZWRuZWtvbHltc2snOiAnU1JFVCcsXG4gICAgJ1BhY2lmaWMvQm91Z2FpbnZpbGxlJzogJ0JTVCcsXG4gICAgJ0F1c3RyYWxpYS9Mb3JkX0hvd2UnOiAnTEhTVCcsXG4gICAgJ0FzaWEvVmxhZGl2b3N0b2snOiAnVkxBVCcsXG4gICAgJ0F1c3RyYWxpYS9Ib2JhcnQnOiAnQUVTVCcsXG4gICAgJ1BhY2lmaWMvUG9ydF9Nb3Jlc2J5JzogJ0NoU1QnLFxuICAgICdBdXN0cmFsaWEvU3lkbmV5JzogJ0FFU1QnLFxuICAgICdBdXN0cmFsaWEvQnJpc2JhbmUnOiAnQVdTVCcsXG4gICAgJ0F1c3RyYWxpYS9EYXJ3aW4nOiAnQUNTVCcsXG4gICAgJ0F1c3RyYWxpYS9BZGVsYWlkZSc6ICdBQ1NUJyxcbiAgICAnQXNpYS9ZYWt1dHNrJzogJ1lBS1QnLFxuICAgICdBc2lhL1Nlb3VsJzogJ0tTVCcsXG4gICAgJ0FzaWEvUHlvbmd5YW5nJzogJ0tTVCcsXG4gICAgJ0FzaWEvVG9reW8nOiAnVFNUJyxcbiAgICAnQXNpYS9DaGl0YSc6ICdZQUtUJyxcbiAgICAnQXVzdHJhbGlhL0V1Y2xhJzogJ0FDV1NUJyxcbiAgICAnQXNpYS9VbGFhbmJhYXRhcic6ICdGU1QnLFxuICAgICdBc2lhL1RhaXBlaSc6ICdVTEFUJyxcbiAgICAnQXVzdHJhbGlhL1BlcnRoJzogJ0FXU1QnLFxuICAgICdBc2lhL1NpbmdhcG9yZSc6ICdTTlNUJyxcbiAgICAnQXNpYS9Jcmt1dHNrJzogJ0lSS1QnLFxuICAgICdBc2lhL1NoYW5naGFpJzogJ0NTVCcsXG4gICAgJ0FzaWEvVG9tc2snOiAnTVNEJyxcbiAgICAnQXNpYS9Ob3Zvc2liaXJzayc6ICdOT1ZUJyxcbiAgICAnQXNpYS9LcmFzbm95YXJzayc6ICdLUkFUJyxcbiAgICAnQXNpYS9Ib3ZkJzogJ1NBU1QnLFxuICAgICdBc2lhL0Jhcm5hdWwnOiAnTVNLJyxcbiAgICAnQXNpYS9CYW5na29rJzogJ1RIQScsXG4gICAgJ0FzaWEvWWFuZ29uJzogJ01ZU1QnLFxuICAgICdBc2lhL09tc2snOiAnT01TVCcsXG4gICAgJ0FzaWEvRGhha2EnOiAnQlNUJyxcbiAgICAnQXNpYS9BbG1hdHknOiAnTkNBU1QnLFxuICAgICdBc2lhL0thdGhtYW5kdSc6ICdOUFQnLFxuICAgICdBc2lhL0NvbG9tYm8nOiAnU0xUJyxcbiAgICAnQXNpYS9Lb2xrYXRhJzogJ0lTVCcsXG4gICAgJ0FzaWEvQ2FsY3V0dGEnOiAnSVNUJyxcbiAgICAnQXNpYS9ReXp5bG9yZGEnOiAnQ0FTVCcsXG4gICAgJ0FzaWEvS2FyYWNoaSc6ICdQS1QnLFxuICAgICdBc2lhL1lla2F0ZXJpbmJ1cmcnOiAnWUVLVCcsXG4gICAgJ0FzaWEvVGFzaGtlbnQnOiAnV0FTVCcsXG4gICAgJ0FzaWEvS2FidWwnOiAnQUZUJyxcbiAgICAnQXNpYS9ZZXJldmFuJzogJ0FNVCcsXG4gICAgJ0V1cm9wZS9Wb2xnb2dyYWQnOiAnVlNUJyxcbiAgICAnQXNpYS9UYmlsaXNpJzogJ0dFVCcsXG4gICAgJ0V1cm9wZS9TYXJhdG92JzogJ1NMVCcsXG4gICAgJ0luZGlhbi9NYXVyaXRpdXMnOiAnTVVUJyxcbiAgICAnRXVyb3BlL1NhbWFyYSc6ICdTQU1UJyxcbiAgICAnQXNpYS9CYWt1JzogJ0FaVCcsXG4gICAgJ0V1cm9wZS9Bc3RyYWtoYW4nOiAnU0FNVCcsXG4gICAgJ0FzaWEvRHViYWknOiAnQVJCU1QnLFxuICAgICdBc2lhL1RlaHJhbic6ICdJRFQnLFxuICAgICdBZnJpY2EvTmFpcm9iaSc6ICdFQVNUJyxcbiAgICAnRXVyb3BlL01vc2Nvdyc6ICdNU0snLFxuICAgICdFdXJvcGUvTWluc2snOiAnTVNLJyxcbiAgICAnQXNpYS9SaXlhZGgnOiAnQVNUJyxcbiAgICAnRXVyb3BlL0lzdGFuYnVsJzogJ1REVCcsXG4gICAgJ0FzaWEvQmFnaGRhZCc6ICdBU1QnLFxuICAgICdBZnJpY2EvV2luZGhvZWsnOiAnTlNUJyxcbiAgICAnQWZyaWNhL1RyaXBvbGknOiAnTFNUJyxcbiAgICAnQWZyaWNhL0toYXJ0b3VtJzogJ0VBU1QnLFxuICAgICdFdXJvcGUvS2FsaW5pbmdyYWQnOiAnS1NUJyxcbiAgICAnQXNpYS9KZXJ1c2FsZW0nOiAnSkRUJyxcbiAgICAnRXVyb3BlL0tpZXYnOiAnRUVEVCcsXG4gICAgJ0FmcmljYS9Kb2hhbm5lc2J1cmcnOiAnU0FTVCcsXG4gICAgJ0FzaWEvSGVicm9uJzogJ0VFVCcsXG4gICAgJ0FzaWEvRGFtYXNjdXMnOiAnU0RUJyxcbiAgICAnRXVyb3BlL0NoaXNpbmF1JzogJ0dEVCcsXG4gICAgJ0FmcmljYS9DYWlybyc6ICdFU1QnLFxuICAgICdBc2lhL0JlaXJ1dCc6ICdNRURUJyxcbiAgICAnRXVyb3BlL0J1Y2hhcmVzdCc6ICdHRFQnLFxuICAgICdBc2lhL0FtbWFuJzogJ0pTVCcsXG4gICAgJ0FmcmljYS9MYWdvcyc6ICdFQ1QnLFxuICAgICdFdXJvcGUvV2Fyc2F3JzogJ0NFRFQnLFxuICAgICdBZnJpY2EvQ2FzYWJsYW5jYSc6ICdNRFQnLFxuICAgICdFdXJvcGUvUGFyaXMnOiAnQ0VTVCcsXG4gICAgJ0V1cm9wZS9CdWRhcGVzdCc6ICdDRURUJyxcbiAgICAnRXVyb3BlL0Jlcmxpbic6ICdXRURUJyxcbiAgICAnQWZyaWNhL1Nhb19Ub21lJzogJ0dTVCcsXG4gICAgJ0F0bGFudGljL1JleWtqYXZpayc6ICdHU1QnLFxuICAgICdFdXJvcGUvTG9uZG9uJzogJ0dEVCcsXG4gICAgJ0V0Yy9VVEMnOiAnVVRDJyxcbiAgICAnQXRsYW50aWMvQXpvcmVzJzogJ0FEVCcsXG4gICAgJ0F0bGFudGljL0NhcGVfVmVyZGUnOiAnQ1ZTVCcsXG4gICAgJ0V0Yy9HTVQrMic6ICdNU1QnLFxuICAgICdBbWVyaWNhL0FyYWd1YWluYSc6ICdTRVNUJyxcbiAgICAnQW1lcmljYS9TYW9fUGF1bG8nOiAnRVNBU1QnLFxuICAgICdBbWVyaWNhL0NheWVubmUnOiAnU0VTVCcsXG4gICAgJ0FtZXJpY2EvQXJnZW50aW5hL0J1ZW5vc19BaXJlcyc6ICdBU1QnLFxuICAgICdBbWVyaWNhL051dWsnOiAnV0dUJyxcbiAgICAnQW1lcmljYS9Nb250ZXZpZGVvJzogJ01TVCcsXG4gICAgJ0FtZXJpY2EvUHVudGFfQXJlbmFzJzogJ0NMU1QnLFxuICAgICdBbWVyaWNhL01pcXVlbG9uJzogJ1BNU1QnLFxuICAgICdBbWVyaWNhL0JhaGlhJzogJ0JTVCcsXG4gICAgJ0FtZXJpY2EvU3RfSm9obnMnOiAnTlNUJyxcbiAgICAnQW1lcmljYS9Bc3VuY2lvbic6ICdQUlNUJyxcbiAgICAnQW1lcmljYS9IYWxpZmF4JzogJ0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2FyYWNhcyc6ICdWU1QnLFxuICAgICdBbWVyaWNhL0N1aWFiYSc6ICdDQlNUJyxcbiAgICAnQW1lcmljYS9MYV9QYXonOiAnU0FXU1QnLFxuICAgICdBbWVyaWNhL1NhbnRpYWdvJzogJ1BTU1QnLFxuICAgICdBbWVyaWNhL0JvZ290YSc6ICdTUFNUJyxcbiAgICAnQW1lcmljYS9DYW5jdW4nOiAnRVNUJyxcbiAgICAnQW1lcmljYS9OZXdfWW9yayc6ICdFVCcsXG4gICAgJ0FtZXJpY2EvUG9ydC1hdS1QcmluY2UnOiAnRURUJyxcbiAgICAnQW1lcmljYS9IYXZhbmEnOiAnRURUJyxcbiAgICAnQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcyc6ICdFU1QnLFxuICAgICdBbWVyaWNhL0dyYW5kX1R1cmsnOiAnRVNUJyxcbiAgICAnQW1lcmljYS9HdWF0ZW1hbGEnOiAnQ0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2hpY2Fnbyc6ICdDVCcsXG4gICAgJ1BhY2lmaWMvRWFzdGVyJzogJ0VBU1QnLFxuICAgICdBbWVyaWNhL01leGljb19DaXR5JzogJ0NTVCcsXG4gICAgJ0FtZXJpY2EvUmVnaW5hJzogJ0NDU1QnLFxuICAgICdBbWVyaWNhL1Bob2VuaXgnOiAnTVQnLFxuICAgICdBbWVyaWNhL0NoaWh1YWh1YSc6ICdNRFQnLFxuICAgICdBbWVyaWNhL0RlbnZlcic6ICdNVCcsXG4gICAgJ0FtZXJpY2EvV2hpdGVob3JzZSc6ICdZU1QnLFxuICAgICdBbWVyaWNhL1RpanVhbmEnOiAnUFNUJyxcbiAgICAnRXRjL0dNVCs4JzogJ1VUQy0wOCcsXG4gICAgJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnOiAnUFQnLFxuICAgICdBbWVyaWNhL0FuY2hvcmFnZSc6ICdBSycsXG4gICAgJ0V0Yy9HTVQrOSc6ICdVVEMtMDknLFxuICAgICdQYWNpZmljL01hcnF1ZXNhcyc6ICdNU1QnLFxuICAgICdBbWVyaWNhL0FkYWsnOiAnSFNUJyxcbiAgICAnUGFjaWZpYy9Ib25vbHVsdSc6ICdIQVNUJyxcbiAgICAnRXRjL0dNVCsxMSc6ICdVVEMtMTEnLFxuICAgICdFdGMvR01UKzEyJzogJ0JJVCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFdpbmRvd3Mtc3R5bGUgXCIoVVRDwrFISDpNTSkgUGxhY2VcIiAtPiBzaG9ydCBuYW1lIChJU1QsIEJSVCwgZXRjLikgc28gd2Ugc2hvdyBcIklTVFwiIG5vdCBcIigoVVRDKzA1OjMwKSBJbmRpYSlcIi5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFdJTkRPV1NfVFpfQUJCUl9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJyhVVEMtMDM6MDApIEJyYXNpbGlhJzogJ0JSVCcsXG4gICAgJyhVVEMtMDM6MDApIEJ1ZW5vcyBBaXJlcyc6ICdBUlQnLFxuICAgICcoVVRDKzA1OjMwKSBJbmRpYSc6ICdJU1QnLFxuICAgICcoVVRDKzA1OjMwKSBDaGVubmFpLCBLb2xrYXRhLCBNdW1iYWksIE5ldyBEZWxoaSc6ICdJU1QnLFxuICAgICcoVVRDKzAwOjAwKSBEdWJsaW4sIEVkaW5idXJnaCwgTG9uZG9uJzogJ0dNVCcsXG4gICAgJyhVVEMrMDA6MDApIE1vbnJvdmlhLCBSZXlramF2aWsnOiAnR01UJyxcbiAgICAnKFVUQyswMTowMCkgQW1zdGVyZGFtLCBCZXJsaW4sIFJvbWUsIFN0b2NraG9sbSc6ICdDRVQnLFxuICAgICcoVVRDKzAxOjAwKSBCcnVzc2VscywgQ29wZW5oYWdlbiwgTWFkcmlkLCBQYXJpcyc6ICdDRVQnLFxuICAgICcoVVRDKzAyOjAwKSBBdGhlbnMsIElzdGFuYnVsLCBNaW5zayc6ICdFRVQnLFxuICAgICcoVVRDKzAyOjAwKSBDYWlybyc6ICdFRVQnLFxuICAgICcoVVRDKzAyOjAwKSBKZXJ1c2FsZW0nOiAnSVNUJyxcbiAgICAnKFVUQyswMzowMCkgTW9zY293LCBTdC4gUGV0ZXJzYnVyZyc6ICdNU0snLFxuICAgICcoVVRDKzAzOjAwKSBOYWlyb2JpJzogJ0VBVCcsXG4gICAgJyhVVEMrMDQ6MDApIER1YmFpJzogJ0dTVCcsXG4gICAgJyhVVEMrMDU6MDApIElzbGFtYWJhZCwgS2FyYWNoaSc6ICdQS1QnLFxuICAgICcoVVRDKzA1OjQ1KSBLYXRobWFuZHUnOiAnTlBUJyxcbiAgICAnKFVUQyswNjowMCkgRGhha2EnOiAnQlNUJyxcbiAgICAnKFVUQyswNjozMCkgWWFuZ29uIChSYW5nb29uKSc6ICdNTVQnLFxuICAgICcoVVRDKzA3OjAwKSBCYW5na29rLCBIYW5vaSwgSmFrYXJ0YSc6ICdJQ1QnLFxuICAgICcoVVRDKzA4OjAwKSBCZWlqaW5nLCBDaG9uZ3FpbmcsIEhvbmcgS29uZywgVXJ1bXFpJzogJ0NTVCcsXG4gICAgJyhVVEMrMDg6MDApIEt1YWxhIEx1bXB1ciwgU2luZ2Fwb3JlJzogJ1NHVCcsXG4gICAgJyhVVEMrMDk6MDApIE9zYWthLCBTYXBwb3JvLCBUb2t5byc6ICdKU1QnLFxuICAgICcoVVRDKzA5OjMwKSBBZGVsYWlkZSc6ICdBQ1NUJyxcbiAgICAnKFVUQysxMDowMCkgQnJpc2JhbmUnOiAnQUVTVCcsXG4gICAgJyhVVEMrMTA6MDApIENhbmJlcnJhLCBNZWxib3VybmUsIFN5ZG5leSc6ICdBRVNUJyxcbiAgICAnKFVUQysxMjowMCkgQXVja2xhbmQsIFdlbGxpbmd0b24nOiAnTlpTVCcsXG4gICAgJyhVVEMtMDU6MDApIEVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpJzogJ0VUJyxcbiAgICAnKFVUQy0wNjowMCkgQ2VudHJhbCBUaW1lIChVUyAmIENhbmFkYSknOiAnQ1QnLFxuICAgICcoVVRDLTA3OjAwKSBNb3VudGFpbiBUaW1lIChVUyAmIENhbmFkYSknOiAnTVQnLFxuICAgICcoVVRDLTA4OjAwKSBQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdQVCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFdpbmRvd3Mtc3R5bGUgXCIoVVRDwrFISDpNTSkgUGxhY2VcIiAtPiBJQU5BIHRpbWV6b25lLlxuICAgKiBUaGlzIHByZXZlbnRzIEludGwvRGF0ZVBpcGUgZnJvbSBmYWxsaW5nIGJhY2sgdG8gYnJvd3NlciBsb2NhbCB0aW1lIHdoZW4gYSBXaW5kb3dzIGxhYmVsIGlzIHVzZWQuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBXSU5ET1dTX1RaX0lBTkFfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICcoVVRDLTAzOjAwKSBCcmFzaWxpYSc6ICdBbWVyaWNhL1Nhb19QYXVsbycsXG4gICAgJyhVVEMtMDM6MDApIEJ1ZW5vcyBBaXJlcyc6ICdBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXMnLFxuICAgICcoVVRDKzA1OjMwKSBJbmRpYSc6ICdBc2lhL0tvbGthdGEnLFxuICAgICcoVVRDKzA1OjMwKSBDaGVubmFpLCBLb2xrYXRhLCBNdW1iYWksIE5ldyBEZWxoaSc6ICdBc2lhL0tvbGthdGEnLFxuICAgICcoVVRDKzAwOjAwKSBEdWJsaW4sIEVkaW5idXJnaCwgTG9uZG9uJzogJ0V1cm9wZS9Mb25kb24nLFxuICAgICcoVVRDKzAwOjAwKSBNb25yb3ZpYSwgUmV5a2phdmlrJzogJ0V0Yy9VVEMnLFxuICAgICcoVVRDKzAxOjAwKSBBbXN0ZXJkYW0sIEJlcmxpbiwgUm9tZSwgU3RvY2tob2xtJzogJ0V1cm9wZS9CZXJsaW4nLFxuICAgICcoVVRDKzAxOjAwKSBCcnVzc2VscywgQ29wZW5oYWdlbiwgTWFkcmlkLCBQYXJpcyc6ICdFdXJvcGUvUGFyaXMnLFxuICAgICcoVVRDKzAyOjAwKSBBdGhlbnMsIElzdGFuYnVsLCBNaW5zayc6ICdFdXJvcGUvQXRoZW5zJyxcbiAgICAnKFVUQyswMjowMCkgQ2Fpcm8nOiAnQWZyaWNhL0NhaXJvJyxcbiAgICAnKFVUQyswMjowMCkgSmVydXNhbGVtJzogJ0FzaWEvSmVydXNhbGVtJyxcbiAgICAnKFVUQyswMzowMCkgTW9zY293LCBTdC4gUGV0ZXJzYnVyZyc6ICdFdXJvcGUvTW9zY293JyxcbiAgICAnKFVUQyswMzowMCkgTmFpcm9iaSc6ICdBZnJpY2EvTmFpcm9iaScsXG4gICAgJyhVVEMrMDQ6MDApIER1YmFpJzogJ0FzaWEvRHViYWknLFxuICAgICcoVVRDKzA1OjAwKSBJc2xhbWFiYWQsIEthcmFjaGknOiAnQXNpYS9LYXJhY2hpJyxcbiAgICAnKFVUQyswNTo0NSkgS2F0aG1hbmR1JzogJ0FzaWEvS2F0aG1hbmR1JyxcbiAgICAnKFVUQyswNjowMCkgRGhha2EnOiAnQXNpYS9EaGFrYScsXG4gICAgJyhVVEMrMDY6MzApIFlhbmdvbiAoUmFuZ29vbiknOiAnQXNpYS9ZYW5nb24nLFxuICAgICcoVVRDKzA3OjAwKSBCYW5na29rLCBIYW5vaSwgSmFrYXJ0YSc6ICdBc2lhL0Jhbmdrb2snLFxuICAgICcoVVRDKzA4OjAwKSBCZWlqaW5nLCBDaG9uZ3FpbmcsIEhvbmcgS29uZywgVXJ1bXFpJzogJ0FzaWEvU2hhbmdoYWknLFxuICAgICcoVVRDKzA4OjAwKSBLdWFsYSBMdW1wdXIsIFNpbmdhcG9yZSc6ICdBc2lhL1NpbmdhcG9yZScsXG4gICAgJyhVVEMrMDk6MDApIE9zYWthLCBTYXBwb3JvLCBUb2t5byc6ICdBc2lhL1Rva3lvJyxcbiAgICAnKFVUQyswOTozMCkgQWRlbGFpZGUnOiAnQXVzdHJhbGlhL0FkZWxhaWRlJyxcbiAgICAnKFVUQysxMDowMCkgQnJpc2JhbmUnOiAnQXVzdHJhbGlhL0JyaXNiYW5lJyxcbiAgICAnKFVUQysxMDowMCkgQ2FuYmVycmEsIE1lbGJvdXJuZSwgU3lkbmV5JzogJ0F1c3RyYWxpYS9TeWRuZXknLFxuICAgICcoVVRDKzEyOjAwKSBBdWNrbGFuZCwgV2VsbGluZ3Rvbic6ICdQYWNpZmljL0F1Y2tsYW5kJyxcbiAgICAnKFVUQy0wNTowMCkgRWFzdGVybiBUaW1lIChVUyAmIENhbmFkYSknOiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgJyhVVEMtMDY6MDApIENlbnRyYWwgVGltZSAoVVMgJiBDYW5hZGEpJzogJ0FtZXJpY2EvQ2hpY2FnbycsXG4gICAgJyhVVEMtMDc6MDApIE1vdW50YWluIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdBbWVyaWNhL0RlbnZlcicsXG4gICAgJyhVVEMtMDg6MDApIFBhY2lmaWMgVGltZSAoVVMgJiBDYW5hZGEpJzogJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnLFxuICB9O1xuXG4gIHByaXZhdGUgbm9ybWFsaXplVG9JYW5hVGltZVpvbmUoXG4gICAgdHo6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzZXNzaW9uSWFuYVRpbWVab25lPzogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJhdyA9ICh0eiA/PyAnJykudHJpbSgpO1xuICAgIGlmICghcmF3KSByZXR1cm4gc2Vzc2lvbklhbmFUaW1lWm9uZSB8fCB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiB1c2VyIHBhc3NlcyB0aGUgc2Vzc2lvbidzIFdpbmRvd3MgaWQvbmFtZSwgcHJlZmVyIHRoZSBzZXNzaW9uJ3Mga25vd24gSUFOQSB6b25lLlxuICAgIGlmIChzZXNzaW9uSWFuYVRpbWVab25lICYmIHJhdy50b0xvd2VyQ2FzZSgpID09PSBTdHJpbmcoc2Vzc2lvbklhbmFUaW1lWm9uZSkudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBzZXNzaW9uSWFuYVRpbWVab25lO1xuICAgIH1cblxuICAgIGlmIChyYXcuc3RhcnRzV2l0aCgnKFVUQycpIHx8IHJhdy5zdGFydHNXaXRoKCcodXRjJykpIHtcbiAgICAgIGNvbnN0IG1hcCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBDaGF0RHJhd2VyQ29tcG9uZW50KS5XSU5ET1dTX1RaX0lBTkFfTUFQO1xuICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMobWFwKS5maW5kKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IHJhdy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGlmIChrZXkpIHJldHVybiBtYXBba2V5XTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UgYXNzdW1lIGl0IG1heSBhbHJlYWR5IGJlIElBTkEgKGUuZy4gXCJBbWVyaWNhL1Nhb19QYXVsb1wiKVxuICAgIHJldHVybiByYXc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRpbWV6b25lIGFiYnJldmlhdGlvbiAoZS5nLiBJU1QsIEJSVCwgU0FTVCkgZm9yIGRpc3BsYXkgYWZ0ZXIgdGhlIHRpbWUuXG4gICAqIFVzZXMgSUFOQSBtYXAgYW5kIFdpbmRvd3Mtc3R5bGUgbWFwIHNvIHdlIHNob3cgXCJCUlRcIiAvIFwiSVNUXCIgaW5zdGVhZCBvZiBcIigoVVRDLTAzOjAwKSBCcmFzaWxpYSlcIi5cbiAgICogT25seSBjb25zdWx0cyBXaW5kb3dzIG1hcCB3aGVuIGlucHV0IGxvb2tzIGxpa2UgXCIoVVRDLi4uKVwiIHNvIGV4aXN0aW5nIElBTkEvSW50bCBiZWhhdmlvciBpcyB1bmNoYW5nZWQuXG4gICAqL1xuICBnZXRUaW1lem9uZUFiYnJldmlhdGlvbih0ejogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXR6IHx8ICFTdHJpbmcodHopLnRyaW0oKSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHR6SWQgPSBTdHJpbmcodHopLnRyaW0oKTtcbiAgICBpZiAodHpJZC5zdGFydHNXaXRoKCcoVVRDJykgfHwgdHpJZC5zdGFydHNXaXRoKCcodXRjJykpIHtcbiAgICAgIGNvbnN0IHdpbk1hcCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBDaGF0RHJhd2VyQ29tcG9uZW50KVxuICAgICAgICAuV0lORE9XU19UWl9BQkJSX01BUDtcbiAgICAgIGNvbnN0IHdpbktleSA9IE9iamVjdC5rZXlzKHdpbk1hcCkuZmluZChcbiAgICAgICAgKGspID0+IGsudG9Mb3dlckNhc2UoKSA9PT0gdHpJZC50b0xvd2VyQ2FzZSgpLFxuICAgICAgKTtcbiAgICAgIGlmICh3aW5LZXkpIHJldHVybiB3aW5NYXBbd2luS2V5XTtcbiAgICB9XG4gICAgY29uc3QgbWFwID0gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIENoYXREcmF3ZXJDb21wb25lbnQpLlRaX0FCQlJfTUFQO1xuICAgIGxldCBtYXBwZWQgPSBtYXBbdHpJZF07XG4gICAgaWYgKCFtYXBwZWQpIHtcbiAgICAgIGNvbnN0IGtleUxvd2VyID0gdHpJZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZW50cnkgPSBPYmplY3QuZW50cmllcyhtYXApLmZpbmQoXG4gICAgICAgIChba10pID0+IGsudG9Mb3dlckNhc2UoKSA9PT0ga2V5TG93ZXIsXG4gICAgICApO1xuICAgICAgaWYgKGVudHJ5KSBtYXBwZWQgPSBlbnRyeVsxXTtcbiAgICB9XG4gICAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICB0aW1lWm9uZTogdHpJZCxcbiAgICAgICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKCkpO1xuICAgICAgY29uc3QgdHpQYXJ0ID0gcGFydHMuZmluZCgocCkgPT4gcC50eXBlID09PSAndGltZVpvbmVOYW1lJyk7XG4gICAgICBjb25zdCB2YWx1ZSA9ICh0elBhcnQ/LnZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgICBpZiAodmFsdWUgJiYgL15HTVRbKy1dXFxkLy50ZXN0KHZhbHVlKSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1c1RleHRGcm9tU2Vzc2lvblJvbGVzKHNlc3Npb25Sb2xlczogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2Vzc2lvblJvbGVzKSB8fCBzZXNzaW9uUm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJykgfHxcbiAgICAgICAgJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IHNlc3Npb25Sb2xlc1swXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFN0cmluZyhmaXJzdClcbiAgICAgICAgLnJlcGxhY2UoL15cXHMqLVxccyovLCAnJylcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0ICYmIHR5cGVvZiBmaXJzdCA9PT0gJ29iamVjdCcgJiYgKGZpcnN0IGFzIGFueSkuZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoKGZpcnN0IGFzIGFueSkuZGVzY3JpcHRpb24pLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnKSB8fFxuICAgICAgJ1lvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmcnXG4gICAgKTtcbiAgfVxuXG4gIG1hcFNlc3Npb25zVG9DYXJkRGF0YShzZXNzaW9uczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25zKSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHVzZXJUaW1lem9uZSA9XG4gICAgICB0aGlzLnRpbWV6b25lICYmIFN0cmluZyh0aGlzLnRpbWV6b25lKS50cmltKClcbiAgICAgICAgPyBTdHJpbmcodGhpcy50aW1lem9uZSkudHJpbSgpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzZXNzaW9ucy5tYXAoKHJhdzogYW55KSA9PiB7XG4gICAgICAvLyBnZXRfbXlfYWdlbmRhIHJldHVybnMgd3JhcHBlciB7IGlkLCBzY2hlZHVsZSwgaXNTZXNzaW9uIH07IG5vcm1hbGl6ZSB0byBpbm5lciBzY2hlZHVsZSBvYmplY3RcbiAgICAgIGNvbnN0IHMgPSByYXcgJiYgcmF3LnNjaGVkdWxlID8gcmF3LnNjaGVkdWxlIDogcmF3O1xuICAgICAgY29uc3Qgc2Vzc2lvblR6T2JqID0gcyAmJiB0eXBlb2YgcyA9PT0gJ29iamVjdCcgPyAocyBhcyBhbnkpLnRpbWVab25lIDogbnVsbDtcbiAgICAgIGNvbnN0IHNlc3Npb25JYW5hVGltZVpvbmUgPVxuICAgICAgICBzZXNzaW9uVHpPYmogJiYgdHlwZW9mIHNlc3Npb25Uek9iaiA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IFN0cmluZyhzZXNzaW9uVHpPYmouc3ViVGltZVpvbmUgPz8gJycpLnRyaW0oKVxuICAgICAgICAgIDogJyc7XG4gICAgICAvLyBTdXBwb3J0IGJvdGggZGF0ZVRpbWVSYW5nZSAoc3RyaW5nKSBhbmQgYWN0dWFsRGF0ZVRpbWVSYW5nZSAob2JqZWN0IHdpdGggc3RhcnQvZW5kKVxuICAgICAgY29uc3Qgd2hlblJhdyA9IHMuZGF0ZVRpbWVSYW5nZSA/PyBzLmFjdHVhbERhdGVUaW1lUmFuZ2UgPz8gJyc7XG4gICAgICAvLyBQcmVmZXIgdXNlcidzIHNlbGVjdGVkIHRpbWV6b25lOyBvdGhlcndpc2UgdXNlIHNlc3Npb24ncyBJQU5BIHpvbmUgKHN1YlRpbWVab25lKSBmb3IgY29ycmVjdCBkYXRlL2RheS5cbiAgICAgIGNvbnN0IGZvcm1hdHRpbmdUaW1lWm9uZSA9IHRoaXMubm9ybWFsaXplVG9JYW5hVGltZVpvbmUoXG4gICAgICAgIHVzZXJUaW1lem9uZSxcbiAgICAgICAgc2Vzc2lvbklhbmFUaW1lWm9uZSxcbiAgICAgICk7XG4gICAgICBjb25zdCB3aGVuRm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTZXNzaW9uV2hlbihcbiAgICAgICAgd2hlblJhdyxcbiAgICAgICAgZm9ybWF0dGluZ1RpbWVab25lIHx8IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgICAvLyBPbmx5IHNldCBzdGF0dXNUZXh0IHdoZW4gc2Vzc2lvbiBoYXMgam9pbi93YXRjaCByb2xlcyAoc28gd2UgZG9uJ3Qgc2hvdyBcIllvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmdcIiB3aGVuIHRoZXJlIGFyZSBubyBidXR0b25zKVxuICAgICAgY29uc3QgaGFzSm9pbldhdGNoUm9sZSA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkocy5zZXNzaW9uUm9sZXMpICYmXG4gICAgICAgIHMuc2Vzc2lvblJvbGVzLnNvbWUoKHI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICAgICAgciAmJiB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgci5zZXNzaW9uUm9sZU5hbWVcbiAgICAgICAgICAgICAgPyBTdHJpbmcoci5zZXNzaW9uUm9sZU5hbWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIDogU3RyaW5nKHIgPz8gJycpXG4gICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gJ2pvaW4nIHx8IG5hbWUgPT09ICd3YXRjaCc7XG4gICAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGhhc0pvaW5XYXRjaFJvbGVcbiAgICAgICAgPyB0aGlzLmdldFN0YXR1c1RleHRGcm9tU2Vzc2lvblJvbGVzKHMuc2Vzc2lvblJvbGVzKVxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3Qgc2Vzc2lvblRpbWVab25lTGFiZWwgPVxuICAgICAgICBzZXNzaW9uVHpPYmogIT0gbnVsbFxuICAgICAgICAgID8gdHlwZW9mIHNlc3Npb25Uek9iaiA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gU3RyaW5nKFxuICAgICAgICAgICAgICAgIHNlc3Npb25Uek9iai5uYW1lID8/XG4gICAgICAgICAgICAgICAgICBzZXNzaW9uVHpPYmouaWQgPz9cbiAgICAgICAgICAgICAgICAgIHNlc3Npb25Uek9iai5zdWJUaW1lWm9uZSA/P1xuICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICkudHJpbSgpXG4gICAgICAgICAgICA6IFN0cmluZyhzZXNzaW9uVHpPYmopLnRyaW0oKVxuICAgICAgICAgIDogJyc7XG4gICAgICAvLyBVc2UgYW4gSUFOQSB0aW1lem9uZSBmb3IgZm9ybWF0dGluZzsgdXNlIGEgc2VwYXJhdGUgbGFiZWwgZm9yIFVJIGRpc3BsYXkuXG4gICAgICBjb25zdCBkaXNwbGF5VGltZVpvbmVGb3JGb3JtYXQgPSBmb3JtYXR0aW5nVGltZVpvbmU7XG4gICAgICBjb25zdCBkaXNwbGF5VGltZVpvbmVMYWJlbCA9ICh1c2VyVGltZXpvbmUgfHwgc2Vzc2lvblRpbWVab25lTGFiZWwgfHwgJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHR6QWJiciA9IGRpc3BsYXlUaW1lWm9uZUZvckZvcm1hdFxuICAgICAgICA/IHRoaXMuZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24oZGlzcGxheVRpbWVab25lRm9yRm9ybWF0KVxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3Qgd2hlbldpdGhUeiA9XG4gICAgICAgIHdoZW5Gb3JtYXR0ZWQgfHwgKHR5cGVvZiB3aGVuUmF3ID09PSAnb2JqZWN0JyA/ICcnIDogU3RyaW5nKHdoZW5SYXcpKTtcbiAgICAgIGNvbnN0IHdoZW5EaXNwbGF5ID0gdHpBYmJyXG4gICAgICAgID8gYCR7d2hlbldpdGhUen0gKCR7dHpBYmJyfSlgLnRyaW0oKVxuICAgICAgICA6IHdoZW5XaXRoVHo7XG4gICAgICBjb25zdCBkYXRlQmFkZ2UgPSB0aGlzLmdldFNlc3Npb25EYXRlQmFkZ2UoXG4gICAgICAgIHdoZW5SYXcsXG4gICAgICAgIGRpc3BsYXlUaW1lWm9uZUZvckZvcm1hdCB8fCB1bmRlZmluZWQsXG4gICAgICApO1xuICAgICAgbGV0IHRpbWVSYW5nZSA9IHRoaXMuZm9ybWF0U2Vzc2lvblRpbWVSYW5nZShcbiAgICAgICAgd2hlblJhdyxcbiAgICAgICAgZGlzcGxheVRpbWVab25lRm9yRm9ybWF0IHx8IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IFN0cmluZyhzLmRlc2NyaXB0aW9uID8/IHMuYWJzdHJhY3QgPz8gJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHNlc3Npb25UeXBlUmF3ID1cbiAgICAgICAgcy5zZXNzaW9uVHlwZSAhPSBudWxsXG4gICAgICAgICAgPyB0eXBlb2Ygcy5zZXNzaW9uVHlwZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gKHMuc2Vzc2lvblR5cGUubmFtZSA/PyBzLnNlc3Npb25UeXBlLnRpdGxlID8/ICcnKVxuICAgICAgICAgICAgOiBzLnNlc3Npb25UeXBlXG4gICAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IG1lZXRpbmdUeXBlID0gU3RyaW5nKFxuICAgICAgICBzZXNzaW9uVHlwZVJhdyA/PyBzLnR5cGUgPz8gcy5tZWV0aW5nVHlwZSA/PyAnJyxcbiAgICAgICkudHJpbSgpO1xuICAgICAgY29uc3Qgc2Vzc2lvblR5cGVMYWJlbCA9IHRoaXMuaXNVbkV2ZW50XG4gICAgICAgID8gdGhpcy5nZXRUcmFuc2xhdGlvbignTWVldGluZyB0eXBlJykgfHwgJ01lZXRpbmcgdHlwZSdcbiAgICAgICAgOiB0aGlzLmdldFRyYW5zbGF0aW9uKCdTZXNzaW9uIHR5cGUnKSB8fCAnU2Vzc2lvbiB0eXBlJztcbiAgICAgIC8vIFNhbWUgbG9naWMgYXMgYmVmb3JlIGRlc2lnbiB1cGRhdGU6IHByZWZlciB0eiBhYmJyZXZpYXRpb24gKGUuZy4gRVNUKSwgZWxzZSBzaG93IGRpc3BsYXkgdGltZXpvbmUgc3RyaW5nIChlLmcuIFwiKFVUQy0wMzowMCkgQnJhc2lsaWEpXCIpXG4gICAgICBjb25zdCB0aW1lWm9uZURpc3BsYXkgPSB0ekFiYnIgfHwgZGlzcGxheVRpbWVab25lTGFiZWwgfHwgJyc7XG4gICAgICAvLyBXaGVuIEFQSSByZXR1cm5zIFwiU3RhcnQ6IE4vQSwgRW5kOiBOL0EsIFRpbWVab25lOiAuLi5cIiAoc3RyaW5nKSwgc2hvdyBhdCBsZWFzdCB0aW1lem9uZVxuICAgICAgaWYgKCF0aW1lUmFuZ2UgJiYgKGRpc3BsYXlUaW1lWm9uZUZvckZvcm1hdCB8fCBkaXNwbGF5VGltZVpvbmVMYWJlbCkpIHtcbiAgICAgICAgdGltZVJhbmdlID0gdGhpcy5nZXRUcmFuc2xhdGlvbignTm90IHNwZWNpZmllZCcpIHx8ICdOb3Qgc3BlY2lmaWVkJztcbiAgICAgIH1cbiAgICAgIC8vIFRpbWUgcmFuZ2Ugd2l0aCB0aW1lem9uZSBpbiBwYXJlbnRoZXNlcyB3aGVuIGF2YWlsYWJsZSAoc2FtZSBhcyBvbGQgd2hlbkRpc3BsYXkgZm9ybWF0KVxuICAgICAgY29uc3QgdGltZVJhbmdlV2l0aFR6ID0gdGltZVpvbmVEaXNwbGF5XG4gICAgICAgID8gYCR7dGltZVJhbmdlfSAoJHt0aW1lWm9uZURpc3BsYXl9KWAudHJpbSgpXG4gICAgICAgIDogdGltZVJhbmdlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IFN0cmluZyhzLnRpdGxlID8/ICcnKS50cmltKCksXG4gICAgICAgIG9yZ2FuaXplcjogU3RyaW5nKHMub3JnYW5pemVyID8/ICcnKS50cmltKCksXG4gICAgICAgIHJvb206IFN0cmluZyhzLnJvb21OYW1lID8/ICcnKS50cmltKCksXG4gICAgICAgIHdoZW46IHdoZW5EaXNwbGF5LFxuICAgICAgICB0aW1lUmFuZ2UsXG4gICAgICAgIHRpbWVSYW5nZVdpdGhUejogdGltZVJhbmdlID8gdGltZVJhbmdlV2l0aFR6IDogdGltZVpvbmVEaXNwbGF5IHx8ICcnLFxuICAgICAgICBkYXRlRGF5OiBkYXRlQmFkZ2UuZGF5LFxuICAgICAgICBkYXRlTW9udGg6IGRhdGVCYWRnZS5tb250aCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmVGb3JGb3JtYXQgfHwgZGlzcGxheVRpbWVab25lTGFiZWwsXG4gICAgICAgIHRpbWVab25lRGlzcGxheSxcbiAgICAgICAgbWVldGluZ1R5cGUsXG4gICAgICAgIHNlc3Npb25UeXBlTGFiZWwsXG4gICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgIHNlc3Npb246IHMsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U2Vzc2lvbklhbmFUaW1lWm9uZShzZXNzaW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9uICYmIHNlc3Npb24uc2NoZWR1bGUgPyBzZXNzaW9uLnNjaGVkdWxlIDogc2Vzc2lvbjtcbiAgICBjb25zdCB0ek9iaiA9IHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnID8gKHMgYXMgYW55KS50aW1lWm9uZSA6IG51bGw7XG4gICAgY29uc3Qgc2Vzc2lvbklhbmEgPVxuICAgICAgdHpPYmogJiYgdHlwZW9mIHR6T2JqID09PSAnb2JqZWN0J1xuICAgICAgICA/IFN0cmluZyh0ek9iai5zdWJUaW1lWm9uZSA/PyAnJykudHJpbSgpXG4gICAgICAgIDogJyc7XG4gICAgY29uc3QgdXNlclR6ID1cbiAgICAgIHRoaXMudGltZXpvbmUgJiYgU3RyaW5nKHRoaXMudGltZXpvbmUpLnRyaW0oKVxuICAgICAgICA/IFN0cmluZyh0aGlzLnRpbWV6b25lKS50cmltKClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVG9JYW5hVGltZVpvbmUodXNlclR6LCBzZXNzaW9uSWFuYSkgfHwgJ1VUQyc7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RTcGVha2VySWRzRnJvbVNlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHM6IGFueVtdKTogc3RyaW5nW10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZXNzaW9uQ2FyZHMpKSByZXR1cm4gW107XG4gICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2FyZCBvZiBzZXNzaW9uQ2FyZHMpIHtcbiAgICAgIGNvbnN0IHJhdyA9IGNhcmQ/LnNlc3Npb24/LnNwZWFrZXJzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHJhdykge1xuICAgICAgICAgIGNvbnN0IHNpZCA9IFN0cmluZyhpZCA/PyAnJykudHJpbSgpO1xuICAgICAgICAgIGlmIChzaWQpIGlkcy5wdXNoKHNpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChpZHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHM6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25DYXJkcykpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGNhcmQgb2Ygc2Vzc2lvbkNhcmRzKSB7XG4gICAgICBjb25zdCBzcGVha2VySWRzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoY2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnMpXG4gICAgICAgID8gY2FyZC5zZXNzaW9uLnNwZWFrZXJzXG4gICAgICAgICAgICAubWFwKCh4OiBhbnkpID0+IFN0cmluZyh4ID8/ICcnKS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBzcGVha2Vyc0xpc3QgPSBzcGVha2VySWRzXG4gICAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLnNwZWFrZXJzW2lkXSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNhcmQuc3BlYWtlcnNMaXN0ID0gc3BlYWtlcnNMaXN0O1xuICAgICAgaWYgKGNhcmQ/LnNlc3Npb24gJiYgdHlwZW9mIGNhcmQuc2Vzc2lvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY2FyZC5zZXNzaW9uLnNwZWFrZXJzTGlzdCA9IHNwZWFrZXJzTGlzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVNwZWFrZXJzRm9yU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkczogYW55W10pOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLmNvbGxlY3RTcGVha2VySWRzRnJvbVNlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBtaXNzaW5nID0gaWRzLmZpbHRlcihcbiAgICAgIChpZCkgPT4gIXRoaXMuc3BlYWtlcnNbaWRdICYmICF0aGlzLnJlcXVlc3RlZFNwZWFrZXJJZHMuaGFzKGlkKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1pc3NpbmcuZm9yRWFjaCgoaWQpID0+IHRoaXMucmVxdWVzdGVkU3BlYWtlcklkcy5hZGQoaWQpKTtcbiAgICB0aGlzLmdldFNwZWFrZXJzQnlTdGFmZklkcyhtaXNzaW5nKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmF0dGFjaFNwZWFrZXJzVG9TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgLy8gQmVzdCBlZmZvcnQ6IHN0aWxsIGF0dGFjaCB3aGF0IHdlIGhhdmUgY2FjaGVkXG4gICAgICAgIHRoaXMuYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRTcGVha2VyUGhvdG9Vcmwoc3BlYWtlcjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzcGVha2VyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgICAgc3BlYWtlci5waG90byxcbiAgICAgIHNwZWFrZXIucGhvdG9QYXRoLFxuICAgICAgc3BlYWtlci5hdmF0YXJVcmwsXG4gICAgICBzcGVha2VyLnByb2ZpbGVJbWFnZVVybCxcbiAgICAgIHNwZWFrZXIucHJvZmlsZUltYWdlLFxuICAgICAgc3BlYWtlci5wcm9maWxlUGljdHVyZSxcbiAgICAgIHNwZWFrZXIuaW1hZ2VVcmwsXG4gICAgICBzcGVha2VyLmltYWdlLFxuICAgIF07XG4gICAgY29uc3QgdXJsID0gY2FuZGlkYXRlcy5maW5kKCh2KSA9PiB2ICE9IG51bGwgJiYgU3RyaW5nKHYpLnRyaW0oKSAhPT0gJycpO1xuICAgIHJldHVybiB1cmwgPyBTdHJpbmcodXJsKS50cmltKCkgOiBudWxsO1xuICB9XG5cbiAgaGFzU2Vzc2lvbkNhcmRTcGVha2VycyhzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGlzdCA9XG4gICAgICBzZXNzaW9uQ2FyZD8uc3BlYWtlcnNMaXN0IHx8IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zcGVha2Vyc0xpc3Q7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkgJiYgbGlzdC5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBpZHMgPSBzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnM7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaWRzKSAmJiBpZHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldFNwZWFrZXJEaXNwbGF5TmFtZShzcGVha2VyOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghc3BlYWtlcikgcmV0dXJuICcnO1xuICAgIGlmIChzcGVha2VyLm5hbWUgIT0gbnVsbCAmJiBTdHJpbmcoc3BlYWtlci5uYW1lKS50cmltKCkgIT09ICcnKVxuICAgICAgcmV0dXJuIFN0cmluZyhzcGVha2VyLm5hbWUpLnRyaW0oKTtcbiAgICBjb25zdCBmaXJzdCA9XG4gICAgICBzcGVha2VyLmZpcnN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHNwZWFrZXIuZmlyc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICBjb25zdCBsYXN0ID1cbiAgICAgIHNwZWFrZXIubGFzdE5hbWUgIT0gbnVsbCA/IFN0cmluZyhzcGVha2VyLmxhc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICByZXR1cm4gYCR7Zmlyc3R9ICR7bGFzdH1gLnRyaW0oKTtcbiAgfVxuXG4gIGdldFNwZWFrZXJJbml0aWFscyhzcGVha2VyOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFNwZWFrZXJEaXNwbGF5TmFtZShzcGVha2VyKTtcbiAgICBpZiAobmFtZSkgcmV0dXJuIHRoaXMuZ2V0QXR0ZW5kZWVJbml0aWFscyhuYW1lKTtcbiAgICBjb25zdCBpZCA9IHNwZWFrZXI/LmlkICE9IG51bGwgPyBTdHJpbmcoc3BlYWtlci5pZCkgOiAnJztcbiAgICByZXR1cm4gaWQgPyBpZC5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpIDogJz8nO1xuICB9XG5cbiAgbWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhdHRlbmRlZXMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGF0dGVuZGVlcy5tYXAoKGE6IGFueSkgPT4gKHtcbiAgICAgIG5hbWU6IFN0cmluZyhhLm5hbWUgPz8gJycpLnRyaW0oKSxcbiAgICAgIGNvbXBhbnk6XG4gICAgICAgIGEuY29tcGFueSAhPSBudWxsICYmIFN0cmluZyhhLmNvbXBhbnkpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmNvbXBhbnkpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGpvYlRpdGxlOlxuICAgICAgICBhLmpvYlRpdGxlICE9IG51bGwgJiYgU3RyaW5nKGEuam9iVGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmpvYlRpdGxlKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwaG90bzpcbiAgICAgICAgYS5waG90byAhPSBudWxsICYmIFN0cmluZyhhLnBob3RvKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5waG90bykudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgaWQ6IGEuaWQgPz8gYS51c2VySWQgPz8gYS5faWQgPz8gYS5hdHRlbmRlZUlkID8/IHVuZGVmaW5lZCxcbiAgICAgIGludGVyZXN0czpcbiAgICAgICAgYS5pbnRlcmVzdHMgIT0gbnVsbCAmJiBTdHJpbmcoYS5pbnRlcmVzdHMpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmludGVyZXN0cykudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGEuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcoYS5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHVzZXJWaWRlb3NNb2RlbDogYS51c2VyVmlkZW9zTW9kZWxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1cmw6XG4gICAgICAgICAgICAgIGEudXNlclZpZGVvc01vZGVsPy51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB0aHVtYm5haWw6XG4gICAgICAgICAgICAgIGEudXNlclZpZGVvc01vZGVsPy50aHVtYm5haWwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgfSkpO1xuICB9XG5cbiAgbWFwU3BlYWtlcnNUb0NhcmREYXRhKHNwZWFrZXJzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BlYWtlcnMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHNwZWFrZXJzLm1hcCgoczogYW55KSA9PiB7XG4gICAgICBjb25zdCByYXdEZXNjID1cbiAgICAgICAgcy5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhzLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByYXdEZXNjXG4gICAgICAgID8gLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHJhd0Rlc2MpXG4gICAgICAgICAgPyB0aGlzLnN0cmlwSHRtbChyYXdEZXNjKVxuICAgICAgICAgIDogcmF3RGVzY1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCByYXdUaXRsZSA9IHMudGl0bGUgPz8gcy5qb2JUaXRsZTtcbiAgICAgIGNvbnN0IGpvYlRpdGxlID1cbiAgICAgICAgcmF3VGl0bGUgIT0gbnVsbCAmJiBTdHJpbmcocmF3VGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhyYXdUaXRsZSkudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5nZXRTcGVha2VyRGlzcGxheU5hbWUocyksXG4gICAgICAgIGNvbXBhbnk6XG4gICAgICAgICAgcy5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKHMuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcocy5jb21wYW55KS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgam9iVGl0bGUsXG4gICAgICAgIHBob3RvOiB0aGlzLmdldFNwZWFrZXJQaG90b1VybChzKSxcbiAgICAgICAgaWQ6IHMuaWQgPz8gcy51c2VySWQgPz8gcy5faWQgPz8gcy5zcGVha2VySWQgPz8gdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcmVzdHM6XG4gICAgICAgICAgcy5pbnRlcmVzdHMgIT0gbnVsbCAmJiBTdHJpbmcocy5pbnRlcmVzdHMpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHMuaW50ZXJlc3RzKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHVzZXJWaWRlb3NNb2RlbDogcy51c2VyVmlkZW9zTW9kZWxcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgdXJsOlxuICAgICAgICAgICAgICAgIHMudXNlclZpZGVvc01vZGVsPy51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnVybCkudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgIHRodW1ibmFpbDpcbiAgICAgICAgICAgICAgICBzLnVzZXJWaWRlb3NNb2RlbD8udGh1bWJuYWlsICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBTdHJpbmcocy51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBtYXBTcG9uc29yc1RvQ2FyZERhdGEoc3BvbnNvcnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzcG9uc29ycykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gc3BvbnNvcnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Rlc2MgPVxuICAgICAgICBzLmJvb3RoRGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcocy5ib290aERlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5ib290aERlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJhd0Rlc2NcbiAgICAgICAgPyAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3QocmF3RGVzYylcbiAgICAgICAgICA/IHRoaXMuc3RyaXBIdG1sKHJhd0Rlc2MpXG4gICAgICAgICAgOiByYXdEZXNjXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHVybFNsdWcgPSBzLnVybCA/PyBzLmJvb3RoVXJsID8/IChzLmJvb3RoSUQgIT0gbnVsbCA/IFN0cmluZyhzLmJvb3RoSUQpIDogbnVsbCkgPz8gKHMuYm9vdGhJZCAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhJZCkgOiBudWxsKTtcbiAgICAgIGNvbnN0IGxvZ29VcmwgPVxuICAgICAgICBzLmxvZ29VcmwgIT0gbnVsbCAmJiBTdHJpbmcocy5sb2dvVXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5sb2dvVXJsKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzLm5hbWUgIT0gbnVsbCA/IFN0cmluZyhzLm5hbWUpLnRyaW0oKSA6ICcnLFxuICAgICAgICB3ZWJzaXRlOiBzLndlYnNpdGUgIT0gbnVsbCAmJiBTdHJpbmcocy53ZWJzaXRlKS50cmltKCkgIT09ICcnID8gU3RyaW5nKHMud2Vic2l0ZSkudHJpbSgpIDogbnVsbCxcbiAgICAgICAgY2F0ZWdvcnk6IHMuY2F0ZWdvcnkgIT0gbnVsbCA/IFN0cmluZyhzLmNhdGVnb3J5KS50cmltKCkgOiBudWxsLFxuICAgICAgICBib290aElEOiBzLmJvb3RoSUQgPz8gcy5ib290aElkID8/IG51bGwsXG4gICAgICAgIGJvb3RoVGl0bGU6IHMuYm9vdGhUaXRsZSAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhUaXRsZSkudHJpbSgpIDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBudWxsLFxuICAgICAgICAvKiogQm9vdGggVVJMIHNsdWcgZm9yIHJvdXRpbmcgdG8gZGV0YWlsIHBhZ2UgKGUuZy4gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOnVybCkuICovXG4gICAgICAgIHVybDogdXJsU2x1ZyAhPSBudWxsID8gU3RyaW5nKHVybFNsdWcpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGxvZ29VcmwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBnZXRfZXZlbnRfYm9vdGhzIHJlc3VsdHMgaW50byB0aGUgc2FtZSBzaGFwZSB1c2VkIGJ5IHNwb25zb3IgY2FyZHMuXG4gICAqL1xuICBtYXBCb290aHNUb0NhcmREYXRhKGJvb3RoczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJvb3RocykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYm9vdGhzLm1hcCgoYjogYW55KSA9PiB7XG4gICAgICBjb25zdCByYXdEZXNjID1cbiAgICAgICAgYi5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhiLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYi5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByYXdEZXNjXG4gICAgICAgID8gLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHJhd0Rlc2MpXG4gICAgICAgICAgPyB0aGlzLnN0cmlwSHRtbChyYXdEZXNjKVxuICAgICAgICAgIDogcmF3RGVzY1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCB1cmxTbHVnID0gYi51cmwgPz8gYi5ib290aFVybCA/PyAoYi5ib290aElkICE9IG51bGwgPyBTdHJpbmcoYi5ib290aElkKSA6IG51bGwpID8/IChiLmJvb3RoSUQgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoSUQpIDogbnVsbCk7XG4gICAgICBjb25zdCBsb2dvVXJsID1cbiAgICAgICAgYi5sb2dvVXJsICE9IG51bGwgJiYgU3RyaW5nKGIubG9nb1VybCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGIubG9nb1VybCkudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYi5jb21wYW55ICE9IG51bGwgPyBTdHJpbmcoYi5jb21wYW55KS50cmltKCkgOiAnJyxcbiAgICAgICAgd2Vic2l0ZTpcbiAgICAgICAgICBiLndlYnNpdGUgIT0gbnVsbCAmJiBTdHJpbmcoYi53ZWJzaXRlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhiLndlYnNpdGUpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBjYXRlZ29yeTogbnVsbCxcbiAgICAgICAgYm9vdGhJRDogYi5ib290aElkID8/IGIuYm9vdGhJRCA/PyBudWxsLFxuICAgICAgICBib290aFRpdGxlOiBiLmJvb3RoVGl0bGUgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoVGl0bGUpLnRyaW0oKSA6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gbnVsbCxcbiAgICAgICAgLyoqIEJvb3RoIFVSTCBzbHVnIGZvciByb3V0aW5nIHRvIGRldGFpbCBwYWdlIChlLmcuIGV2ZW50cy86ZXZlbnRVcmwvc3BvbnNvcnMvYm9vdGhzLzp1cmwpLiAqL1xuICAgICAgICB1cmw6IHVybFNsdWcgIT0gbnVsbCA/IFN0cmluZyh1cmxTbHVnKS50cmltKCkgOiBudWxsLFxuICAgICAgICBsb2dvVXJsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyByZXN1bHRzIGludG8gdGhlIHNhbWUgc2hhcGUgYXMgYXR0ZW5kZWUgY2FyZHMgKGZvciByZXVzZSBvZiBhdHRlbmRlZSBkZXNpZ24pLlxuICAgKi9cbiAgbWFwQm9vdGhSZXBzVG9DYXJkRGF0YShyZXByZXNlbnRhdGl2ZXM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXByZXNlbnRhdGl2ZXMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHJlcHJlc2VudGF0aXZlcy5tYXAoKHI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZmlyc3QgPSByLmZpcnN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHIuZmlyc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICAgIGNvbnN0IGxhc3QgPSByLmxhc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoci5sYXN0TmFtZSkudHJpbSgpIDogJyc7XG4gICAgICBjb25zdCBuYW1lID0gW2ZpcnN0LCBsYXN0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpIHx8ICcnO1xuICAgICAgY29uc3QgdXNlcklkID0gci51c2VySWQgIT0gbnVsbCAmJiBTdHJpbmcoci51c2VySWQpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoci51c2VySWQpLnRyaW0oKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNvbXBhbnk6XG4gICAgICAgICAgci5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKHIuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5jb21wYW55KS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgam9iVGl0bGU6XG4gICAgICAgICAgci5qb2JUaXRsZSAhPSBudWxsICYmIFN0cmluZyhyLmpvYlRpdGxlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhyLmpvYlRpdGxlKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcGhvdG86XG4gICAgICAgICAgci5waG90b1BhdGggIT0gbnVsbCAmJiBTdHJpbmcoci5waG90b1BhdGgpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIucGhvdG9QYXRoKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgaW50ZXJlc3RzOiBudWxsLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICByLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKHIuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB1c2VyVmlkZW9zTW9kZWw6IG51bGwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGdldF9ldmVudF9zZXNzaW9uc192MiBwbGFpbi10ZXh0IGNvbnRlbnQgaW50byBzZXNzaW9uIG9iamVjdHMgZm9yIGNhcmRzLlxuICAgKiBGb3JtYXQ6IFwiRm91bmQgTiBzZXNzaW9uczpcXG4xLiA8dGl0bGU+XFxuICAgLSBUaW1lOiBTdGFydDogLi4uLCBFbmQ6IC4uLiwgVGltZVpvbmU6IC4uLlxcbiAgIC0gUm9vbTogLi4uXFxuICAgLSBUeXBlOiAuLi5cXG4yLiAuLi5cIlxuICAgKi9cbiAgcGFyc2VTZXNzaW9uQ29udGVudFYyKGNvbnRlbnQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSByZXR1cm4gW107XG4gICAgY29uc3Qgc2Vzc2lvbnM6IGFueVtdID0gW107XG4gICAgLy8gU3BsaXQgaW50byBibG9ja3MgYnkgXCIxLiBcIiwgXCIyLiBcIiwgZXRjLiAobnVtYmVyICsgZG90ICsgc3BhY2UgYXQgbGluZSBzdGFydClcbiAgICBjb25zdCBibG9ja1JlZ2V4ID0gL1xcblxcZCtcXC5cXHMrLztcbiAgICBjb25zdCBwYXJ0cyA9IGNvbnRlbnQuc3BsaXQoYmxvY2tSZWdleCk7XG4gICAgLy8gRmlyc3QgcGFydCBtYXkgYmUgXCJGb3VuZCBOIHNlc3Npb25zOlwiIG9yIHNpbWlsYXI7IHNraXAgaWYgaXQgZG9lc24ndCBsb29rIGxpa2UgYSBzZXNzaW9uIHRpdGxlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYmxvY2sgPSBwYXJ0c1tpXS50cmltKCk7XG4gICAgICBpZiAoIWJsb2NrKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGxpbmVzID0gYmxvY2tcbiAgICAgICAgLnNwbGl0KC9cXG4vKVxuICAgICAgICAubWFwKChsKSA9PiBsLnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gbGluZXNbMF0gfHwgJyc7XG4gICAgICBpZiAoIXRpdGxlIHx8IC9eRm91bmRcXHMrXFxkK1xccytzZXNzaW9ucy9pLnRlc3QodGl0bGUpKSBjb250aW51ZTtcbiAgICAgIGxldCBkYXRlVGltZVJhbmdlID0gJyc7XG4gICAgICBsZXQgcm9vbU5hbWUgPSAnJztcbiAgICAgIGxldCBzZXNzaW9uVHlwZSA9ICcnO1xuICAgICAgbGV0IHRpbWVab25lID0gJyc7XG4gICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tqXTtcbiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gbGluZS5tYXRjaCgvVGltZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHRpbWVNYXRjaCkge1xuICAgICAgICAgIGRhdGVUaW1lUmFuZ2UgPSB0aW1lTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHR6TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKC9UaW1lWm9uZTpcXHMqKFteLFxcbl0rKS9pKTtcbiAgICAgICAgICBpZiAodHpNYXRjaCkgdGltZVpvbmUgPSB0ek1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb29tTWF0Y2ggPSBsaW5lLm1hdGNoKC9Sb29tOlxccyooLispL2kpO1xuICAgICAgICBpZiAocm9vbU1hdGNoKSB7XG4gICAgICAgICAgcm9vbU5hbWUgPSByb29tTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVNYXRjaCA9IGxpbmUubWF0Y2goL1R5cGU6XFxzKiguKykvaSk7XG4gICAgICAgIGlmICh0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBzZXNzaW9uVHlwZSA9IHR5cGVNYXRjaFsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHpMaW5lTWF0Y2ggPSBsaW5lLm1hdGNoKC9UaW1lWm9uZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHR6TGluZU1hdGNoICYmICF0aW1lWm9uZSkgdGltZVpvbmUgPSB0ekxpbmVNYXRjaFsxXS50cmltKCk7XG4gICAgICB9XG4gICAgICBzZXNzaW9ucy5wdXNoKHtcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHJvb21OYW1lOiByb29tTmFtZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U6IGRhdGVUaW1lUmFuZ2UgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uVHlwZTogc2Vzc2lvblR5cGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uUm9sZXM6IFtdLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZXNzaW9ucztcbiAgfVxuXG4gIGdldFZpc2libGVTZXNzaW9uQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5zZXNzaW9uQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTZXNzaW9uQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5TRVNTSU9OX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLlNFU1NJT05fQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZUF0dGVuZGVlQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5hdHRlbmRlZUNhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLkFUVEVOREVFX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLkFUVEVOREVFX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldFZpc2libGVTcGVha2VyQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5zcGVha2VyQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5TUEVBS0VSX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLlNQRUFLRVJfQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZVNwb25zb3JDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LnNwb25zb3JDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNwb25zb3JDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLlNQT05TT1JfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuU1BPTlNPUl9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlQm9vdGhSZXBDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LmJvb3RoUmVwQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRCb290aFJlcENhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuQk9PVEhfUkVQX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLkJPT1RIX1JFUF9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBleHBhbmRTZXNzaW9uQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZFNlc3Npb25DYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkU2Vzc2lvbkNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kQXR0ZW5kZWVDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGFuZFNwZWFrZXJDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkU3BlYWtlckNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRTcG9uc29yQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZFNwb25zb3JDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkU3BvbnNvckNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kQm9vdGhSZXBDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMYWJlbCBmb3Igc2Vzc2lvbiB0eXBlIG9uIGNhcmRzOiBcIlNlc3Npb24gdHlwZVwiIHdoZW4gaXNVbkV2ZW50LCBlbHNlIFwiTWVldGluZyB0eXBlXCIuXG4gICAqL1xuICBnZXRTZXNzaW9uVHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNVbkV2ZW50XG4gICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdNZWV0aW5nIHR5cGUnKSB8fCAnTWVldGluZyB0eXBlJ1xuICAgIDogdGhpcy5nZXRUcmFuc2xhdGlvbignU2Vzc2lvbiB0eXBlJykgfHwgJ1Nlc3Npb24gdHlwZSdcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgSm9pbi9XYXRjaCByb2xlIGJ1dHRvbnMgZnJvbSBzZXNzaW9uLnNlc3Npb25Sb2xlcyBmb3Igc2Vzc2lvbiBjYXJkcy5cbiAgICogV2hlbiBpc1VuRXZlbnQgaXMgZmFsc2UsIHJldHVybnMgc2luZ2xlIFwiV2F0Y2hcIiBidXR0b24gKHNhbWUgYXMgdGVtcGxhdGUyKS4gV2hlbiB0cnVlLCByZXR1cm5zIEpvaW4vV2F0Y2ggZnJvbSBzZXNzaW9uUm9sZXMuXG4gICAqL1xuICBnZXRTZXNzaW9uUm9sZUJ1dHRvbnMoc2Vzc2lvbkNhcmQ6IGFueSk6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdIHtcbiAgICBpZiAodGhpcy5pc1VuRXZlbnQgPT09IGZhbHNlICYmIHNlc3Npb25DYXJkPy5zZXNzaW9uKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiAnam9pbicsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1dhdGNoJykgfHwgJ1dhdGNoJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IHJhdyA9IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zZXNzaW9uUm9sZXM7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJhdykgfHwgcmF3Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHJvbGVzOiB7IGFjdGlvbjogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgciBvZiByYXcpIHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgciAhPSBudWxsICYmIHIuc2Vzc2lvblJvbGVOYW1lXG4gICAgICAgICAgPyBTdHJpbmcoci5zZXNzaW9uUm9sZU5hbWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgOiBTdHJpbmcocikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobmFtZSA9PT0gJ2pvaW4nIHx8IG5hbWUgPT09ICd3YXRjaCcpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgIG5hbWUgPT09ICdqb2luJ1xuICAgICAgICAgICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdKb2luJykgfHwgJ0pvaW4nXG4gICAgICAgICAgICA6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1dhdGNoJykgfHwgJ1dhdGNoJztcbiAgICAgICAgcm9sZXMucHVzaCh7IGFjdGlvbjogbmFtZSwgbGFiZWwgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzZXNzaW9uIGlzIG9uLWRlbWFuZCAoY2xhc3NpZmljYXRpb25JZCA9PT0gZUNsYXNzaWZpY2F0aW9uVHlwZS5PbkRlbWFuZCkuXG4gICAqIFdoZW4gdHJ1ZSwgSm9pbi9XYXRjaCBhcmUgYWx3YXlzIGFjdGlvbmFibGUgYW5kIGNhcmQgdXNlcyBPbkRlbWFuZCBkZXNpZ24uXG4gICAqL1xuICBpc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaWQgPVxuICAgICAgc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LmNsYXNzaWZpY2F0aW9uSWQgPz8gc2Vzc2lvbkNhcmQ/LmNsYXNzaWZpY2F0aW9uSWQ7XG4gICAgaWYgKGlkID09IG51bGwgfHwgaWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFN0cmluZyhpZCkgPT09IGVDbGFzc2lmaWNhdGlvblR5cGUuT25EZW1hbmQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBKb2luL1dhdGNoIGFjdGlvbiBpcyBwb3NzaWJsZSAoc2FtZSBsb2dpYyBhcyBhcHAgdGVtcGxhdGU4KS5cbiAgICogQWN0aW9uIGlzIGFsbG93ZWQgd2hlbjogb24tZGVtYW5kIHNlc3Npb24gT1IgaXNCdXR0b25BY3RpdmF0ZWQgKHNlc3Npb24gaGFzIHN0YXJ0ZWQpLlxuICAgKi9cbiAgY2FuUGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc2Vzc2lvbkNhcmQ/LnNlc3Npb24pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBzID0gc2Vzc2lvbkNhcmQuc2Vzc2lvbjtcbiAgICBpZiAodGhpcy5pc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhIXMuaXNCdXR0b25BY3RpdmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBsb2dpYyBhcyBhcHAgdGVtcGxhdGU4OiBkZWxheSBpbiBtaW51dGVzIChzY2hlZHVsZWQgc3RhcnQgLSBhY3R1YWwgc3RhcnQpLlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBlaXRoZXIgZGF0ZSBtaXNzaW5nOyA+IDAgd2hlbiBtZWV0aW5nIGlzIGRlbGF5ZWQuXG4gICAqL1xuICBnZXRNZWV0aW5nRGVsYXlNaW51dGVzKHNlc3Npb25DYXJkOiBhbnkpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9uQ2FyZD8uc2Vzc2lvbjtcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gcy5kYXRlVGltZVJhbmdlPy5zdGFydDtcbiAgICBjb25zdCBhY3R1YWxTdGFydCA9IHMuYWN0dWFsRGF0ZVRpbWVSYW5nZT8uc3RhcnQ7XG4gICAgaWYgKCFzdGFydERhdGUgfHwgIWFjdHVhbFN0YXJ0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkaWZmTXMgPVxuICAgICAgICBuZXcgRGF0ZShzdGFydERhdGUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGFjdHVhbFN0YXJ0KS5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihkaWZmTXMgLyAoMTAwMCAqIDYwKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gbWVldGluZyBpcyBkZWxheWVkIChzYW1lIGNvbmRpdGlvbiBhcyB0ZW1wbGF0ZTg6IGRlbGF5IG1pbnV0ZXMgPiAwLCBub3Qgb24tZGVtYW5kLCBidXR0b24gbm90IGFjdGl2YXRlZCkuICovXG4gIGlzTWVldGluZ0RlbGF5ZWQoc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5nZXRNZWV0aW5nRGVsYXlNaW51dGVzKHNlc3Npb25DYXJkKTtcbiAgICBpZiAoZGVsYXkgPT0gbnVsbCB8fCBkZWxheSA8PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNTZXNzaW9uT25kZW1hbmQoc2Vzc2lvbkNhcmQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHNlc3Npb25DYXJkPy5zZXNzaW9uPy5pc0J1dHRvbkFjdGl2YXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25TZXNzaW9uQ2FyZEFjdGlvbihcbiAgICBzZXNzaW9uQ2FyZDogYW55LFxuICAgIHJvbGU6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzZXNzaW9uQ2FyZD8uc2Vzc2lvbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzVW5FdmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdzZXNzaW9uJyxcbiAgICAgICAgYWN0aW9uOiByb2xlLmFjdGlvbixcbiAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbkNhcmQuc2Vzc2lvbixcbiAgICAgICAgc2Vzc2lvbkNhcmQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2xvc2VDaGF0RHJhd2VyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5jYW5QZXJmb3JtU2Vzc2lvbkFjdGlvbihzZXNzaW9uQ2FyZCkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdZb3UgY2FuIGpvaW4vd2F0Y2ggYXQgdGhlIHN0YXJ0aW5nIHRpbWUnKSB8fFxuICAgICAgICAnWW91IGNhbiBqb2luL3dhdGNoIGF0IHRoZSBzdGFydGluZyB0aW1lJztcbiAgICAgIHRoaXMuc2Vzc2lvbkFjdGlvbkJsb2NrZWQuZW1pdChtZXNzYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXNzaW9uQWN0aW9ucy5lbWl0KHtcbiAgICAgIHR5cGU6ICdzZXNzaW9uJyxcbiAgICAgIGFjdGlvbjogcm9sZS5hY3Rpb24sXG4gICAgICBzZXNzaW9uOiBzZXNzaW9uQ2FyZC5zZXNzaW9uLFxuICAgICAgc2Vzc2lvbkNhcmQsXG4gICAgfSk7XG4gICAgdGhpcy5jbG9zZUNoYXREcmF3ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VDaGF0RHJhd2VyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kcmF3ZXI/LmNsb3NlKCk7XG4gICAgICB0aGlzLnNvdXJjZXNEcmF3ZXI/LmNsb3NlKCk7XG4gICAgICB0aGlzLmVkaXRvcnNEcmF3ZXI/LmNsb3NlKCk7XG4gICAgfSBjYXRjaCB7fVxuICAgIHRoaXMuY2xvc2VCb3QuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbGlzdGVuU29ja2V0cygpIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnTGlzdGVuIFNvY2tldCcpO1xuICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2VcbiAgICAgIC5nZXRVc2VyU3BlY2lmaWNOb3RpZmljYXRpb24oKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIGxpc3RlblNvY2tldHMgcmVjZWl2ZWQnLCB7XG4gICAgICAgICAgICBoYXNPdGhlckZpZWxkczogISFyZXM/Lm0/Lk90aGVyRmllbGRzLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiByZXM/Lm0/Lk90aGVyRmllbGRzPy5tZXNzYWdlX2lkLFxuICAgICAgICAgICAgaGFzQW5zd2VyOiAhIXJlcz8ubT8uT3RoZXJGaWVsZHM/LmFuc3dlcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBDaGVjayBpZiBPdGhlckZpZWxkcyBleGlzdHMgaW4gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgaWYgKHJlcz8ubT8uT3RoZXJGaWVsZHM/LndvcmtmbG93X2lkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gV29ya2Zsb3cgcHJvZ3Jlc3MgdXBkYXRlJyxcbiAgICAgICAgICAgICAgcmVzPy5tPy5PdGhlckZpZWxkcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHBlcmNlbnRhZ2UsXG4gICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgYWN0aW9uX25hbWUsXG4gICAgICAgICAgICAgIGN1cnJlbnRfYWN0aW9uX25hbWUsXG4gICAgICAgICAgICAgIHdvcmtmbG93X2V4ZWN1dGlvbl9pZCxcbiAgICAgICAgICAgICAgdGltZV9zdGFtcCxcbiAgICAgICAgICAgIH0gPSByZXM/Lm0/Lk90aGVyRmllbGRzO1xuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID0gcGVyY2VudGFnZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93QWN0aW9uID0gYWN0aW9uX25hbWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkluZGV4ID0gdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMuQWN0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIChhKSA9PiBhLk5hbWUgPT0gY3VycmVudF9hY3Rpb25fbmFtZSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMuQWN0aW9uc1thY3Rpb25JbmRleF1bJ091dHB1dCddID1cbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdW1xuICAgICAgICAgICAgICAgICdJbnNlcnRUaW1lU3RhbXAnXG4gICAgICAgICAgICAgIF0gPSBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIHRpbWVfc3RhbXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQWN0aW9uIHdpdGggbmFtZSAke2FjdGlvbl9uYW1lfSBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID1cbiAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvblByb2dyZXNzID09IDEwMCkge1xuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdWydXb3JrZmxvd0V4ZWN1dGlvbklkJ10gPVxuICAgICAgICAgICAgICAgIHdvcmtmbG93X2V4ZWN1dGlvbl9pZDtcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5leGVjdXRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzT25UZXh0YXJlYSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXM/Lm0/Lk90aGVyRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBvdGhlckZpZWxkcyA9IHJlcy5tLk90aGVyRmllbGRzO1xuICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXphYmxlID0gb3RoZXJGaWVsZHMuc2VyaWFsaXphYmxlX3RvX3JldHVybjtcblxuICAgICAgICAgICAgLy8gU2Vzc2lvbiBjYXJkczogZXZlbnQgc2Vzc2lvbnMgdG9vbHMgKEpTT04gb3IgcGxhaW4gdGV4dClcbiAgICAgICAgICAgIGNvbnN0IGlzU2Vzc2lvblRvb2wgPVxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnNfdjInIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3Nlc3Npb25zX2J5X2ludGVyZXN0JyB8fFxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV90cmFjaycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfc3BlYWtlcl9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfdXBjb21pbmdfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X215X2FnZW5kYSc7XG4gICAgICAgICAgICBpZiAoaXNTZXNzaW9uVG9vbCkge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIgJiYgdHlwZW9mIGNvbnRlbnRTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgPSBwYXJzZWQ/LnNlc3Npb25zID8/IFtdO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHYyIHBsYWluIHRleHQ6IFwiRm91bmQgMiBzZXNzaW9uczpcXG4xLiBUaXRsZVxcbiAgIC0gVGltZTogU3RhcnQ6IC4uLiBFbmQ6IC4uLlxcbiAgIC0gUm9vbTogLi4uXFxuICAgLSBUeXBlOiAuLi5cIlxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgPSB0aGlzLnBhcnNlU2Vzc2lvbkNvbnRlbnRWMihjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTZXNzaW9uc1RvQ2FyZERhdGEoc2Vzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMobWFwcGVkKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYHNlc3Npb25fY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXNzaW9uX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25DYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gTm8gc2Vzc2lvbiBjYXJkcyBwdXNoZWQ6IGZhbGwgdGhyb3VnaCB0byBub3JtYWwgT3RoZXJGaWVsZHMgaGFuZGxpbmcgc28gYW5zd2VyIGlzIGRpc3BsYXllZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBdHRlbmRlZSBjYXJkczogdG9vbCBnZXRfZXZlbnRfYXR0ZW5kZWVzIChvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIGF0dGVuZGVlczsgZWxzZSBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2F0dGVuZGVlcycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdHRlbmRlZXMgPSBwYXJzZWQ/LmF0dGVuZGVlcyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgYXR0ZW5kZWVfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhdHRlbmRlZV9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfYXR0ZW5kZWVzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogYXR0ZW5kZWVzIGVtcHR5IChlLmcuIHRvdGFsQ291bnQ6IDApOiBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGxpa2UgXCJJIGNvdWxkbid0IGZpbmQgYW55IGF0dGVuZGVlcy4uLlwiIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlICovXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNwZWFrZXIgY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X3NwZWFrZXJzIChzYW1lIGhhbmRsaW5nIGFzIGF0dGVuZGVlczsgb25seSBwdXNoIHdoZW4gd2UgaGF2ZSBzcGVha2VycylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zcGVha2VycycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGVha2VycyA9IHBhcnNlZD8uc3BlYWtlcnMgPz8gcGFyc2VkPy5zcGVha2VyID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc3BlYWtlcl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNwZWFrZXJDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfc3BlYWtlcnMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvKiBzcGVha2VycyBlbXB0eTogZmFsbCB0aHJvdWdoIHNvIGFuc3dlciBpcyBzaG93biBhcyBub3JtYWwgQUkgbWVzc2FnZSAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTcG9uc29yIGNhcmRzOiB0b29sIGdldF9ldmVudF9zcG9uc29ycyAob25seSBwdXNoIHdoZW4gd2UgaGF2ZSBzcG9uc29ycylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9zcG9uc29ycycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcG9uc29ycyA9IHBhcnNlZD8uc3BvbnNvcnMgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNwb25zb3JzVG9DYXJkRGF0YShzcG9uc29ycyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzcG9uc29yX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3BvbnNvcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9zcG9uc29ycyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJvb3RoIGNhcmRzOiB0b29sIGdldF9ldmVudF9ib290aHMgKHJldXNlIHNwb25zb3IgY2FyZCBkZXNpZ247IG9ubHkgcHVzaCB3aGVuIHdlIGhhdmUgYm9vdGhzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2Jvb3RocycpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9XG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudDtcbiAgICAgICAgICAgICAgY29uc3QgYW5zd2VyVGV4dCA9XG4gICAgICAgICAgICAgICAgb3RoZXJGaWVsZHMuYW5zd2VyICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG90aGVyRmllbGRzLmFuc3dlcikudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICBsZXQgcHVzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50U3RyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBib290aHMgPSBwYXJzZWQ/LmJvb3RocyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhzVG9DYXJkRGF0YShib290aHMpO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID1cbiAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc3BvbnNvcl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNwb25zb3JDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfZXZlbnRfYm9vdGhzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQm9vdGggcmVwcmVzZW50YXRpdmUgY2FyZHM6IHRvb2wgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyAoc2FtZSBkZXNpZ24gYXMgYXR0ZW5kZWUgY2FyZHMpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcHJlc2VudGF0aXZlcyA9IHBhcnNlZD8ucmVwcmVzZW50YXRpdmVzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlcyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBib290aF9yZXBfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib290aF9yZXBfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFuc3dlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgIGJvb3RoUmVwQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ldmVudF9kZXRhaWxzJykge1xuICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgYm90X2lkLFxuICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICBhbnN3ZXIsXG4gICAgICAgICAgICAgIHdlYl9yZXN1bHRzLFxuICAgICAgICAgICAgICBzZWFyY2hfcmVzdWx0cyxcbiAgICAgICAgICAgICAgZ3JhcGhzLFxuICAgICAgICAgICAgICBleGVjdXRpb25fZ3JhcGhzLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIH0gPSBvdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIFByb2Nlc3NpbmcgT3RoZXJGaWVsZHMnLCB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgYm90X2lkLFxuICAgICAgICAgICAgICBoYXNBbnN3ZXI6ICEhYW5zd2VyLFxuICAgICAgICAgICAgICBhbnN3ZXJMZW5ndGg6IGFuc3dlcj8ubGVuZ3RoLFxuICAgICAgICAgICAgICB3ZWJSZXN1bHRzQ291bnQ6IHdlYl9yZXN1bHRzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NvdW50OiBzZWFyY2hfcmVzdWx0cz8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2hhdE1lc3NhZ2UgPSB0aGlzLmNoYXRMb2cuZmluZChcbiAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09IG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gTmV3IEFJIG1lc3NhZ2UgZnJvbSBzb2NrZXQnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICBjaGF0TG9nTGVuZ3RoOiB0aGlzLmNoYXRMb2cubGVuZ3RoLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIF9pZDogbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjdXJyZW50Q2hhdE1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBVcGRhdGluZyBleGlzdGluZyBtZXNzYWdlJywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGZpZWxkcyBiYXNlZCBvbiB0aGVpciBwcmVzZW5jZVxuICAgICAgICAgICAgaWYgKHNlYXJjaF9yZXN1bHRzICYmIEFycmF5LmlzQXJyYXkoc2VhcmNoX3Jlc3VsdHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIHNlYXJjaF9yZXN1bHRzJywgc2VhcmNoX3Jlc3VsdHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2Uuc2VhcmNoVGVybXMgPSBzZWFyY2hfcmVzdWx0cztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod2ViX3Jlc3VsdHMgJiYgQXJyYXkuaXNBcnJheSh3ZWJfcmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gd2ViX3Jlc3VsdHMnLFxuICAgICAgICAgICAgICAgIHdlYl9yZXN1bHRzPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgd2ViX3Jlc3VsdHMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5zb3VyY2VzTGlzdCA9IHdlYl9yZXN1bHRzO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZGlzcGxheWVkU291cmNlcyA9IHdlYl9yZXN1bHRzPy5zbGljZSgwLCAzKTsgLy8gRmlyc3QgMyBjYXJkc1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UucmVtYWluaW5nU291cmNlcyA9IHdlYl9yZXN1bHRzPy5zbGljZSgzKTsgLy8gUmVtYWluaW5nIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFuc3dlcikge1xuICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBSZWNlaXZlZCBhbnN3ZXIsIHVwZGF0aW5nIG1lc3NhZ2UnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgICBhbnN3ZXJMZW5ndGg6IGFuc3dlcj8ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGFuc3dlclByZXZpZXc6IGFuc3dlcj8uc3Vic3RyaW5nPy4oMCwgMTAwKSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlcik7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzT25UZXh0YXJlYSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ3JhcGhzICYmIEFycmF5LmlzQXJyYXkoZ3JhcGhzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBncmFwaHMnLCBncmFwaHM/Lmxlbmd0aCwgZ3JhcGhzKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLmdyYXBocyA9IGdyYXBocztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhlY3V0aW9uX2dyYXBocyAmJiBBcnJheS5pc0FycmF5KGV4ZWN1dGlvbl9ncmFwaHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIGV4ZWN1dGlvbl9ncmFwaHMnLFxuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbl9ncmFwaHM/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBleGVjdXRpb25fZ3JhcGhzLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZXhlY3V0aW9uR3JhcGhzID0gZXhlY3V0aW9uX2dyYXBocztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gc3VnZ2VzdGlvbnMnLFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5yZWxhdGVkTGlzdEl0ZW1zID0gc3VnZ2VzdGlvbnM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgLy8gUHJvY2VzcyBvbmxpbmUgc2VhcmNoIHRlcm1zIGFzIG5lZWRlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgYW55IG90aGVyIGZpZWxkcyBhbmQgdGhlaXIgcHJvY2Vzc2luZyBoZXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignT3RoZXJGaWVsZHMgaXMgbWlzc2luZyBpbiB0aGUgcmVzcG9uc2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgZGF0YSBmcm9tIHNvY2tldCcsIGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNvY2tldEFuZExpc3RlbigpIHt9XG4gIGhhbmRsZUV2ZW50KGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICd3ZWJyZXN1bHQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JhcGgnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmRpc2Nvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgLy90aGlzLnNvY2tldFNlcnZpY2UuY2xvc2UoKTtcbiAgfVxuICBjaGFuZ2VUZW1wZXJhdHVyZShuZXdUZW1wZXJhdHVyZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIHRoaXMudGVtcGVyYXR1cmUgPSBuZXdUZW1wZXJhdHVyZTtcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhpdmVncHQtY2hhdC1ib3Qtd3JhcHBlcicpO1xuICAgIC8vIFJlbW92ZSBleGlzdGluZyB0aGVtZSBjbGFzc2VzIGZyb20gYm9keVxuICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5yZW1vdmUoJ2NyZWF0aXZlJywgJ2JhbGFuY2VkJywgJ3ByZWNpc2UnKTtcblxuICAgIHN3aXRjaCAobmV3VGVtcGVyYXR1cmUpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgnY3JlYXRpdmUnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2JhbGFuY2VkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdwcmVjaXNlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25TdGFydEFnYWluKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdGFydEFnYWluID0gZmFsc2U7XG4gICAgdGhpcy5jaGF0TG9nID0gW107XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ3JlZXRpbmdNc2csXG5cbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICB9KTtcbiAgICB0aGlzLmFyY2hpZXZlTWVzc2FnZXMoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFyY2hpZXZlTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3QvY2xlYXItaGlzdG9yeS8ke3RoaXMuYm90SWR9LyR7dGhpcy51c2VySWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICB0cmlnZ2VyU3VwcG9ydCgpIHtcbiAgICB0aGlzLm9wZW5TdXBwb3J0LmVtaXQoKTtcbiAgfVxuICBmZXRjaEJvdENvbmZpZygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3RzP2JvdF9pZD0ke3RoaXMuYm90SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJvdE5hbWUgPSB0aGlzLmdldFRyYW5zbGF0aW9uKHJlcy5OYW1lKTtcbiAgICAgICAgdGhpcy5ib3RJY29uID0gcmVzLkljb247XG4gICAgICAgIHRoaXMuYm90U2tpbGxzID0gcmVzPy5Ta2lsbHM7XG4gICAgICAgIHRoaXMuZ3JlZXRpbmdNc2cgPSByZXMuR3JlZXRpbmdcbiAgICAgICAgICA/ICh0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShyZXMuR3JlZXRpbmcpIGFzIGFueSlcbiAgICAgICAgICA6ICcnO1xuXG4gICAgICAgIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzID0gcmVzPy5OZWdhdGl2ZVJlc3BvbnNlcz8ubGVuZ3RoXG4gICAgICAgICAgPyByZXMuTmVnYXRpdmVSZXNwb25zZXNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICBgV2UgYXJlIHNvcnJ5IHdlJ3ZlIG5vdCBiZWVuIGFibGUgdG8gYW5zd2VyIHlvdXIgcXVlc3Rpb25gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgdGhpcy5xdWlja1Byb21wdHMgPSByZXMuUXVpY2tQcm9tcHRzO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZzogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQ2hhdEhpc3RvcnkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KFxuICAgICAgdGhpcy5ib3RJZCxcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5ldmVudElkLFxuICAgICk7XG4gICAgdGhpcy5jb25TZXNzaW9uS2V5ID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldFNlc3Npb25LZXkoXG4gICAgICB0aGlzLmJvdElkLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmV2ZW50SWQsXG4gICAgKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25LZXl9P3Nlc3Npb25faWQ9JHt0aGlzLmNvblNlc3Npb25LZXl9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodXJsLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcjxhbnk+KCdmZXRjaENvbnZlcnNhdGlvbicpKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yPFQ+KG9wZXJhdGlvbiA9ICdvcGVyYXRpb24nLCByZXN1bHQ/OiBUKSB7XG4gICAgcmV0dXJuIChlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke29wZXJhdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4gb2YocmVzdWx0IGFzIFQpO1xuICAgIH07XG4gIH1cbiAgLy8gZmV0Y2hDaGF0SGlzdG9yeSgpIHtcbiAgLy8gICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAvLyAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgLy8gICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgLy8gICB9KTtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwXG4gIC8vICAgICAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbktleX1gLCB7IGhlYWRlcnMgfSlcbiAgLy8gICAgIC5waXBlKFxuICAvLyAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gIC8vICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIC8vICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gIC8vICAgICAgIH0pLFxuICAvLyAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OiAnLCBlcnJvcik7XG4gIC8vICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIC8vICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAvLyAgICAgICB9KVxuICAvLyAgICAgKTtcbiAgLy8gfVxuXG4gIC8qKiBQdXNoIGEgc3RhbmRhcmQgQUkgbWVzc2FnZSBmcm9tIGhpc3RvcnkgKHNvdXJjZXMsIGdyYXBocywgZXRjLikuIFVzZWQgd2hlbiBub3QgY29udmVydGluZyB0byBzZXNzaW9uX2NhcmRzLiAqL1xuICBwcml2YXRlIHB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2VzTGlzdCA9IGNoYXQuV2ViTGlua3MgfHwgW107XG4gICAgY29uc3QgZGlzcGxheWVkU291cmNlcyA9IChjaGF0LldlYkxpbmtzIHx8IFtdKS5zbGljZSgwLCAzKTtcbiAgICBjb25zdCByZW1haW5pbmdTb3VyY2VzID0gKGNoYXQuV2ViTGlua3MgfHwgW10pLnNsaWNlKDMpO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICdhaScsXG4gICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpLFxuICAgICAgZXhlY3V0aW9uR3JhcGhzOiBjaGF0LkV4ZWN1dGlvbkdyYXBocyxcbiAgICAgIGdyYXBoczogY2hhdC5HcmFwaHMsXG4gICAgICBzZWFyY2hUZXJtczogY2hhdC5TZWFyY2hUZXJtcyxcbiAgICAgIHNvdXJjZXNMaXN0OiBzb3VyY2VzTGlzdCxcbiAgICAgIGRpc3BsYXllZFNvdXJjZXM6IGRpc3BsYXllZFNvdXJjZXMsXG4gICAgICByZW1haW5pbmdTb3VyY2VzOiByZW1haW5pbmdTb3VyY2VzLFxuICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgfSk7XG4gICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gIH1cblxuICBtYXBDaGF0SGlzdG9yeShjaGF0czogYW55KSB7XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ2FpJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZ3JlZXRpbmdNc2csXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgfSk7XG4gICAgaWYgKGNoYXRzICYmIGNoYXRzPy5NZXNzYWdlcz8ubGVuZ3RoKSB7XG4gICAgICBjaGF0cz8uTWVzc2FnZXMuZm9yRWFjaCgoY2hhdDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gJ3VzZXInKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICAgICAgICBXb3JrZmxvd0V4ZWN1dGlvbklkOiBjaGF0LldvcmtmbG93RXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gJ2FpJykge1xuICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gc2Vzc2lvbiB0b29scywgc2hvdyBzZXNzaW9uIGNhcmRzIGluc3RlYWQgb2YgcGxhaW4gdGV4dFxuICAgICAgICAgIGNvbnN0IHRvb2xOYW1lID0gY2hhdC50b29scmVzdWx0cz8udG9vbF9uYW1lO1xuICAgICAgICAgIGNvbnN0IGlzU2Vzc2lvblRvb2wgPVxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9zZXNzaW9uc192MicgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3Nlc3Npb25zX2J5X2ludGVyZXN0JyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfc2Vzc2lvbnNfYnlfdHJhY2snIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9zcGVha2VyX3Nlc3Npb25zJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfdXBjb21pbmdfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9teV9hZ2VuZGEnO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzU2Vzc2lvblRvb2wgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgbGV0IHNlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgc2Vzc2lvbnMgPSBwYXJzZWQ/LnNlc3Npb25zID8/IFtdO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBzZXNzaW9ucyA9IHRoaXMucGFyc2VTZXNzaW9uQ29udGVudFYyKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTZXNzaW9uc1RvQ2FyZERhdGEoc2Vzc2lvbnMpO1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVTcGVha2Vyc0ZvclNlc3Npb25DYXJkcyhtYXBwZWQpO1xuICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZXNzaW9uX2NhcmRzJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICBzZXNzaW9uQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X2F0dGVuZGVlcycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ldmVudF9hdHRlbmRlZXMsIHNob3cgYXR0ZW5kZWUgY2FyZHMgb24gaW5pdGlhbCBoaXN0b3J5IGxvYWRcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCBhdHRlbmRlZXMgPSBwYXJzZWQ/LmF0dGVuZGVlcyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBBdHRlbmRlZXNUb0NhcmREYXRhKGF0dGVuZGVlcyk7XG4gICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYXR0ZW5kZWVfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBhdHRlbmRlZUNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3NwZWFrZXJzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X3NwZWFrZXJzLCBzaG93IHNwZWFrZXIgY2FyZHMgb24gaW5pdGlhbCBoaXN0b3J5IGxvYWRcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCBzcGVha2VycyA9IHBhcnNlZD8uc3BlYWtlcnMgPz8gcGFyc2VkPy5zcGVha2VyID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNwZWFrZXJzVG9DYXJkRGF0YShzcGVha2Vycyk7XG4gICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3BlYWtlcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICAgIHNwZWFrZXJDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9zcG9uc29ycycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ldmVudF9zcG9uc29ycywgc2hvdyBzcG9uc29yIGNhcmRzIG9uIGluaXRpYWwgaGlzdG9yeSBsb2FkXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3BvbnNvcnMgPSBwYXJzZWQ/LnNwb25zb3JzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNwb25zb3JzVG9DYXJkRGF0YShzcG9uc29ycyk7XG4gICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3BvbnNvcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICAgIHNwb25zb3JDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9ib290aHMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfYm9vdGhzLCBzaG93IGJvb3RoIGNhcmRzIHVzaW5nIHNwb25zb3IgY2FyZCBkZXNpZ25cbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCBib290aHMgPSBwYXJzZWQ/LmJvb3RocyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aHNUb0NhcmREYXRhKGJvb3Rocyk7XG4gICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3BvbnNvcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGF0LlRleHRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShjaGF0LlRleHQpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgICAgICAgIHNwb25zb3JDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ib290aF9yZXByZXNlbnRhdGl2ZXMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzLCBzaG93IGJvb3RoIHJlcCBjYXJkcyAoYXR0ZW5kZWUgZGVzaWduKVxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcHJlc2VudGF0aXZlcyA9IHBhcnNlZD8ucmVwcmVzZW50YXRpdmVzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEJvb3RoUmVwc1RvQ2FyZERhdGEocmVwcmVzZW50YXRpdmVzKTtcbiAgICAgICAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdib290aF9yZXBfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBib290aFJlcENhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNob3dTdGFydEFnYWluID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvY2Vzc01lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIGlmICghbWVzc2FnZSB8fCAhKG1lc3NhZ2U/Lmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coJ2hlcmUgaXMgbXkgbWVzc2FnZScpXG4gICAgLy8gY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZS50cmltKCk7XG5cbiAgICBjb25zdCBtYXJrZG93bkxpbmtSZWdleCA9IC9cXFsoW15bXSspXVxcKChbXildKylcXCkvZztcbiAgICBjb25zdCB1cmxSZWdleCA9IC8oPzwhaHJlZj1cIilcXGJodHRwcz86XFwvXFwvXFxTKyg/PCFbLixdKS9naTtcblxuICAgIGlmIChtYXJrZG93bkxpbmtSZWdleC50ZXN0KG1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBodG1sID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgICBtYXJrZG93bkxpbmtSZWdleCxcbiAgICAgICAgJzxhIGhyZWY9XCIkMlwiIHRhcmdldD1cIl9ibGFua1wiPiQxPC9hPicsXG4gICAgICApO1xuICAgICAgLy9jb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xuICAgIH1cblxuICAgIGlmICh1cmxSZWdleC50ZXN0KG1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBodG1sID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgICB1cmxSZWdleCxcbiAgICAgICAgJzxhIGhyZWY9XCIkJlwiIHRhcmdldD1cIl9ibGFua1wiPiQmPC9hPicsXG4gICAgICApO1xuICAgICAgLy8gY29uc29sZS5sb2coJ1Nhbml0aXplZCBtZXNzYWdlOiAnLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplSHRtbChodG1sKTtcbiAgICB9XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC8oPzpcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL1xcKlxcKiguKj8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7XG4gICAgLy8gQ29udmVydCBNYXJrZG93biBoZWFkZXJzIHRvIEhUTUwgaGVhZGVyc1xuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL14oI3sxLDZ9KVxccysoLiopJC9nbSwgKG1hdGNoLCBoYXNoZXMsIHRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxldmVsID0gaGFzaGVzLmxlbmd0aDtcbiAgICAgIHJldHVybiBgPGgke2xldmVsfT4ke3RleHR9PC9oJHtsZXZlbH0+YDtcbiAgICB9KTtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIGNvbnN0IHNhbml0aXplZE1lc3NhZ2UgPSB0aGlzLnNhbml0aXplSHRtbChtZXNzYWdlKTtcbiAgICByZXR1cm4gc2FuaXRpemVkTWVzc2FnZTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBjb25zdCBmZWVkYmFja0xpbmtzID1cbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mZWVkYmFjay1saW5rJyk7XG4gICAgZmVlZGJhY2tMaW5rcy5mb3JFYWNoKChsaW5rOiBhbnkpID0+IHtcbiAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgdGhpcy5vbkZlZWRiYWNrQ2xpY2suYmluZCh0aGlzLCAnemVuZGVzaycpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICAvLyBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmZlZWRiYWNrLWxpbmsnKSkge1xuICAgIC8vICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICAvLyAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJylcbiAgICAvLyAgICAgLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkZlZWRiYWNrQ2xpY2suYmluZCh0aGlzLCAnemVuZGVzaycpKTtcbiAgICAvLyB9XG4gIH1cblxuICBzYW5pdGl6ZUh0bWwoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcbiAgfVxuXG4gIG9uRmVlZGJhY2tDbGljayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mZWVkYmFja0V2ZW50LmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICAgIHRoaXMub25DbG9zZUV2ZW50LmVtaXQoKTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlV2l0aFRpbGUocHJvbXB0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlucHV0ID0gcHJvbXB0O1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICB9XG4gIGlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICBmZXRjaERhdGEobXNnID0gbnVsbCkge1xuICAgIHRoaXMuaW5wdXQgPSBtc2cgfHwgdGhpcy5pbnB1dD8udHJpbSgpO1xuICAgIHRoaXMubXNnID0gdGhpcy5pbnB1dDtcbiAgICBpZiAoIXRoaXMuaW5wdXQgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hhdFNvY2tldCgpO1xuXG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodGhpcy5pbnB1dCksXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0YXJlYSA9IHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2hpZGRlbic7IC8vIFJlc2V0IHRoZSBoZWlnaHRcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGA2MnB4YDtcbiAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuYWlSZXNwb25zZSA9ICcnO1xuICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gdHJ1ZTtcblxuICAgIHRoaXMubWFrZUFza1JlcXVlc3QodGhpcy5pbnB1dCwgdGhpcy5hZ2VudHMsIHRoaXMuY29udmVyc2F0aW9uS2V5KTtcbiAgfVxuICBmZXRjaERhdGFGb3IobXNnLCBjaGF0KSB7XG4gICAgY29uc3QgaW5wdXRNc2cgPSBtc2c/LnRyaW0oKTtcbiAgICBpZiAoIWlucHV0TXNnIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoYXRTb2NrZXQoKTtcbiAgICB0cnkge1xuICAgICAgY2hhdC5yZWxhdGVkTGlzdEl0ZW1zID0gW107XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoaW5wdXRNc2cpLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuYWlSZXNwb25zZSA9ICcnO1xuICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gdHJ1ZTtcblxuICAgIHRoaXMubWFrZUFza1JlcXVlc3QoaW5wdXRNc2csIHRoaXMuYWdlbnRzLCB0aGlzLmNvbnZlcnNhdGlvbktleSwgbXNnLCBjaGF0KTtcbiAgfVxuICBmZXRjaFNtYWxsVGFsaygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYm90L3NtYWxsLXRhbGsvJHt0aGlzLmJvdElkfS8ke3RoaXMudXNlcklkfWA7XG5cbiAgICB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8eyBzbWFsbFRhbGs6IHN0cmluZyB9Pih1cmwsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBmZXRjaGluZyBzbWFsbCB0YWxrOicsIGVycm9yKTtcblxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zbWFsbFRhbGspIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShyZXNwb25zZS5zbWFsbFRhbGspLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMjtcbiAgICAgICAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcmVhZEFsbENodW5rcyA9IChzdHJlYW06IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICBjb25zdCBhbGxTdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIHJlYWRlci5jbG9zZWQuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlYWRpbmcgc3RyZWFtOiAnLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBzdGFydDogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVtcChjb250cm9sbGVyLCByZWFkZXIsIGFsbFN1Z2dlc3Rpb25zKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgcHVtcChjb250cm9sbGVyOiBhbnksIHJlYWRlcjogYW55LCBhbGxTdWdnZXN0aW9uczogc3RyaW5nW10pIHtcbiAgICByZWFkZXIucmVhZCgpLnRoZW4oKHsgZG9uZSwgdmFsdWUgfTogYW55KSA9PiB7XG4gICAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGxhc3RJdGVtLm1lc3NhZ2UgPSB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShsYXN0SXRlbS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnBvcCgpO1xuICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChsYXN0SXRlbSk7XG4gICAgICAgIGlmIChhbGxTdWdnZXN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3N1Z2dlc3Rpb25zJyxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBhbGxTdWdnZXN0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG5cbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgdGhpcy5mZXRjaFNtYWxsVGFsaygpO1xuICAgICAgICAvLyB9LDEwMDApXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlY29kZWRDaHVuayA9IHRoaXMuZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgdGhpcy5haVJlc3BvbnNlICs9IGRlY29kZWRDaHVuaztcbiAgICAgIGlmIChsYXN0SXRlbS50eXBlID09PSAnYWknKSB7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTWF0Y2ggPSB0aGlzLmFpUmVzcG9uc2UubWF0Y2goLzxzdWc+KC4qPyk8XFwvc3VnPi9nKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zTWF0Y2gpIHtcbiAgICAgICAgICBzdWdnZXN0aW9uc01hdGNoLmZvckVhY2goKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFpUmVzcG9uc2UgPSB0aGlzLmFpUmVzcG9uc2UucmVwbGFjZShtYXRjaCwgJycpO1xuICAgICAgICAgICAgYWxsU3VnZ2VzdGlvbnMucHVzaChtYXRjaD8ucmVwbGFjZSgvPFxcLz9zdWc+L2csICcnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5haVJlc3BvbnNlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGFpRm9ybWF0dGVkRGF0YTogYW55O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAnKTtcbiAgICAgICAgICBhaUZvcm1hdHRlZERhdGEgPSBKU09OLnBhcnNlKEpTT04ucGFyc2UodGhpcy5haVJlc3BvbnNlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAyJyk7XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEgPSBKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gZG9uZScpO1xuXG4gICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEgJiYgYWlGb3JtYXR0ZWREYXRhPy5zZWN0aW9uX2lkPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2NvbXBhbnlfc2VhcmNoJyB8fFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ3VzZXJfc2VhcmNoJyB8fFxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2luZHVzdHJ5X2NvbXBhbnlfc2VhcmNoJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5teVVwY29taW5nU2Vzc2lvbkFjdGlvbikge1xuICAgICAgICAgICAgdmFyIHNwZWFrZXJJZHMgPSBbXTtcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5mb3JFYWNoKChzZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgIHNwZWFrZXJJZHMgPSBbLi4uc3BlYWtlcklkcywgLi4uc2Vzc2lvbi5zcGVha2Vyc107XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHNwZWFrZXJJZHM/Lmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKHNwZWFrZXJJZHMpLnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMuYWRkVG9NeUFnZW5kYUFjdGlvbiAmJlxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgIHNlc3Npb25JZHM6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMuY29ubmVjdE9yRm9sbG93QWN0aW9uKSB7XG4gICAgICAgICAgICBsZXQgdXNlcnNMZW4gPSBhaUZvcm1hdHRlZERhdGEuY29udGVudD8ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHVzZXJzTGVuID4gMSkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogJ29wZW5fbmV0d29ya2luZ19kcmF3ZXInLFxuICAgICAgICAgICAgICAgIHNlYXJjaDogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1c2Vyc0xlbiA9PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgICBjb25uZXRVc2VySWRzOiBbYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnRbMF0udXNlcklkXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5pc19vcGVuX3BhZ2UgPT0gJ3RydWUnKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQnJvd3NlcigpKSB7XG4gICAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5tZXNzYWdlICs9XG4gICAgICAgICAgICAgICAgJ1xcblxcbicgKyAnPGEgaWQ9XCJjbG9zZUJvdE5vd1wiPkNsaWNrIEhlcmU8L2E+IHRvIHNlZSByZXN1bHRzLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFpRm9ybWF0dGVkRGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgYWN0aW9uOiBhaUZvcm1hdHRlZERhdGEsXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZUJyb3dzZXIoKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkQ2xvc2VCb3RDbGlja0V2ZW50KCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYWlSZXNwb25zZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmFpUmVzcG9uc2UsXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcblxuICAgICAgLy8gRW5xdWV1ZSB0aGUgbmV4dCBkYXRhIGNodW5rIGludG8gb3VyIHRhcmdldCBzdHJlYW1cbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnB1bXAoY29udHJvbGxlciwgcmVhZGVyLCBhbGxTdWdnZXN0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICBzdWJtaXRGZWVkYmFjayhmbGFnOiBib29sZWFuLCBtZXNzYWdlKSB7XG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgICB0aGlzLmZlZWRiYWNrRG9uZSA9IHRydWU7XG4gICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcbiAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KFxuICAgICAgdGhpcy5ib3RJZCxcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5ldmVudElkLFxuICAgICk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb24vY29QaWxvdC8ke3RoaXMuYm90SWR9L2NvbnZlcnNhdGlvbi8ke2NvbnZlcnNhdGlvbl9pZH0vaGVscGZ1bC1yZXNwb25zZWA7XG4gICAgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgYXBpS2V5OiAnQ29udmVyc2F0aW9uX1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAgICdkb21haW4tYXV0aG9yaXR5JzogdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2VJZDogbWVzc2FnZS5faWQsIGlzSGVscGZ1bDogZmxhZyB9KSxcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChmbGFnKSB7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICB0aGlzLnRodW1ic1VwTWVzc2FnZSB8fFxuICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignTWF5IEkgYXNzaXN0IHlvdSB3aXRoIGFueXRoaW5nIGVsc2UnKSxcbiAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5mZWVkYmFja0RvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UoXG4gICAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXNbdGhpcy50aHVtYnNEb3duTXNnSW5kZXhdLFxuICAgICAgICApLFxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ID1cbiAgICAgICAgKHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ICsgMSkgJSB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcy5sZW5ndGg7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0TGluazg4Jyk7XG4gICAgICAgIGlmIChzdXBwb3J0TGluaykge1xuICAgICAgICAgIHN1cHBvcnRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50cmlnZ2VyU3VwcG9ydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgIH0pO1xuICB9XG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIChuZXcgbGluZSlcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBDYWxsIHlvdXIgc3VibWl0IGZ1bmN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVN1Ym1pdChldmVudCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZVN1Ym1pdChldmVudCkge1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICB9XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBsYXN0IEFJIG1lc3NhZ2UgaW4gY2hhdExvZzsgLTEgaWYgbm9uZS4gKi9cbiAgZ2V0IGxhc3RBaU1lc3NhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGogPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIGlmICh0aGlzLmNoYXRMb2dbal0/LnR5cGUgPT09ICdhaScpIHJldHVybiBqO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBoYW5kbGVVcENsaWNrKGlkeDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmVlZGJhY2tEb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayh0cnVlLCB0aGlzLmNoYXRMb2dbaWR4XSk7XG4gICAgdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQ7XG5cbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCkge1xuICAgICAgdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaGFuZGxlRG93bkNsaWNrKGlkeDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmVlZGJhY2tEb25lKSByZXR1cm47XG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayhmYWxzZSwgdGhpcy5jaGF0TG9nW2lkeF0pO1xuICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQpXG4gICAgICB0aGlzLmNoYXRMb2dbaWR4XS5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS5saWtlZDtcbiAgfVxuICAvLyBoYW5kbGVDb3B5Q2xpY2soaW5kZXg6IGFueSkge1xuICAvLyAgIC8vIENvcHkgdGhlIG1lc3NhZ2UgdG8gdGhlIGNsaXBib2FyZFxuICAvLyAgIGNvbnN0IGNvbnRlbnRUb0NvcHkgPSB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2U7XG4gIC8vICAgY29uc29sZS5sb2coJ2NvbnRlbnRUb0NvcHknKTtcbiAgLy8gICBjb25zb2xlLmxvZyhjb250ZW50VG9Db3B5KTtcbiAgLy8gICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb250ZW50VG9Db3B5KS50aGVuKCgpID0+IHtcbiAgLy8gICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGNvcGllZFxuICAvLyAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSB0cnVlO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XG4gIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSBmYWxzZTtcbiAgLy8gICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICAvLyAgIH0pO1xuICAvLyB9XG4gIGNvcHlUZXh0KGlkLCBpbmRleCkge1xuICAgIC8vIEdldCB0aGUgdGV4dCBlbGVtZW50XG4gICAgdmFyIHRleHRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IHRleHRhcmVhIGVsZW1lbnQgdG8gY29weSB0aGUgdGV4dFxuICAgIHZhciB0ZW1wVGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIHRlbXBUZXh0QXJlYS52YWx1ZSA9IHRleHRFbGVtZW50LmlubmVyVGV4dDtcblxuICAgIC8vIEFwcGVuZCB0aGUgdGV4dGFyZWEgdG8gdGhlIGJvZHkgKG5lY2Vzc2FyeSBmb3IgdGhlIGV4ZWNDb21tYW5kIHRvIHdvcmspXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZW1wVGV4dEFyZWEpO1xuXG4gICAgLy8gU2VsZWN0IHRoZSB0ZXh0IGluc2lkZSB0aGUgdGV4dGFyZWFcbiAgICB0ZW1wVGV4dEFyZWEuc2VsZWN0KCk7XG5cbiAgICAvLyBDb3B5IHRoZSB0ZXh0IHRvIHRoZSBjbGlwYm9hcmRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlbXBUZXh0QXJlYSk7XG5cbiAgICAvLyBPcHRpb25hbGx5LCB5b3UgY2FuIGFsZXJ0IHRoZSB1c2VyIG9yIGNoYW5nZSB0aGUgYnV0dG9uIHRleHQgdG8gaW5kaWNhdGUgdGhlIGNvcHkgd2FzIHN1Y2Nlc3NmdWxcbiAgICAvLyBhbGVydCgnVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIScpO1xuXG4gICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwMCk7IC8vIFJlc2V0IGFmdGVyIDIgc2Vjb25kc1xuICB9XG4gIGhhbmRsZUNvcHlDbGljayhpbmRleDogYW55KSB7XG4gICAgLy8gQ29weSB0aGUgbWVzc2FnZSB0byB0aGUgY2xpcGJvYXJkXG4gICAgY29uc3QgY29udGVudFRvQ29weSA9IHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZTtcbiAgICBjb25zdCByZXN1dGx0ID0gdGhpcy5jb3B5VGV4dCgnbWVzc2FnZVRleHRfJyArIGluZGV4LCBpbmRleCk7XG4gIH1cblxuICBzYW5pdGl6ZUhUTUwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBkb2N1bWVudCBmcmFnbWVudCB0byBob2xkIHRoZSBzaW1wbGlmaWVkIGNvbnRlbnRcbiAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIC8vIEFwcGVuZCB0aGUgY2hpbGRyZW4gb2YgdGhlIGJvZHkgb2YgdGhlIHBhcnNlZCBkb2N1bWVudCB0byB0aGUgZnJhZ21lbnRcbiAgICBBcnJheS5mcm9tKGRvYy5ib2R5LmNoaWxkTm9kZXMpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUuY2xvbmVOb2RlKHRydWUpKTtcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBkaXYgZWxlbWVudCB0byBob2xkIHRoZSBzaW1wbGlmaWVkIEhUTUxcbiAgICBjb25zdCBzaW1wbGlmaWVkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2ltcGxpZmllZERpdi5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cbiAgICAvLyBSZW1vdmUgY29tcGxleCB0YWdzIG9yIGF0dHJpYnV0ZXMgYXMgbmVlZGVkXG4gICAgLy8gRXhhbXBsZTogcmVtb3ZlIHNjcmlwdHNcbiAgICBzaW1wbGlmaWVkRGl2XG4gICAgICAucXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0JylcbiAgICAgIC5mb3JFYWNoKChzY3JpcHQpID0+IHNjcmlwdC5yZW1vdmUoKSk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHNpbXBsaWZpZWQgSFRNTCBhcyBhIHN0cmluZ1xuICAgIHJldHVybiBzaW1wbGlmaWVkRGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIGN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yOiBhbnkgPSAnJztcbiAgY3VycmVudEluZGV4Rm9yRWRpdG9yOiBhbnkgPSAtMTtcbiAgaGFuZGxlRWRpdG9yQ2xpY2soaW5kZXg6IGFueSkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9PSAtMSkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLnNhbml0aXplSFRNTChcbiAgICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgIC8vICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICcnLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPT0gaW5kZXgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciArPSB0aGlzLnNhbml0aXplSFRNTChcbiAgICAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IgPSB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yLnJlcGxhY2UoXG4gICAgICAgICAgLy8gJ1NhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXhGb3JFZGl0b3IgPSBpbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IucmVwbGFjZShcbiAgICAgICAgICAvLyAnU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzonLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uaXNFZGl0b3IgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uaXNFZGl0b3IgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICBpZiAoIXRoaXMuYXV0b1Njcm9sbE9uTmV3TWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmNoYXRNYWluLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIGlmIChjb3VudGVyKysgPiA1KSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICB9LCA1KTtcbiAgfVxuXG4gIGZvY3VzT25UZXh0YXJlYSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm15SW5wdXQgJiYgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKGFjdGlvbjogYW55KSB7XG4gICAgY29uc29sZS5pbmZvKCdpbmNvbWluZyBhY3Rpb24gZnJvbSB0aGUgY2hhdGJvdCBBSScpO1xuICAgIGNvbnNvbGUuaW5mbyhhY3Rpb24pO1xuXG4gICAgaWYgKGFjdGlvbj8uY29udGVudCkge1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgZHJhd2VyIGlzIGluaXRpYWxseSBvcGVuIGFuZCBhcHBseSBvdmVyZmxvdyBoaWRkZW4gdG8gYm9keSBpZiBzb1xuICAgIGlmICh0aGlzLmRyYXdlci5vcGVuZWQpIHtcbiAgICAgIHRoaXMuc2V0Qm9keU92ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIHRvIGNoYW5nZXMgaW4gdGhlIGRyYXdlciBiZWluZyBvcGVuZWQgb3IgY2xvc2VkXG4gICAgdGhpcy5kcmF3ZXIub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgob3BlbmVkOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0Qm9keU92ZXJmbG93KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUJvZHlPdmVyZmxvdygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmF3ZXIub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgob3BlbmVkKSA9PiB7XG4gICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm15SW5wdXQgJiYgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7IC8vIEZvY3VzIG9uIHRoZSB0ZXh0YXJlYVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEJvZHlPdmVyZmxvdygpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVCb2R5T3ZlcmZsb3coKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgfVxuXG4gIGdldFNwZWFrZXJzQnlTdGFmZklkcyhpZHM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnlbXSB8IG51bGw+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy9nZXQtYnktc3RhZmYtaWRzYDtcbiAgICBjb25zdCBjbGVhbklkcyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KChpZHMgfHwgW10pLm1hcCgoeCkgPT4gU3RyaW5nKHggPz8gJycpLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pKSxcbiAgICApO1xuICAgIGlmIChjbGVhbklkcy5sZW5ndGggPT09IDApIHJldHVybiBvZihudWxsKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55W10+KHVybCwgY2xlYW5JZHMsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgdGFwKChkYXRhOiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKHNwZWFrZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHNwZWFrZXI/LmlkID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3BlYWtlcnNbaWRdID0gc3BlYWtlcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3BlYWtlcnM6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHBlcmZvcm1TZXNzaW9uQWN0aW9uKHNlc3Npb25JZCwgYWN0aW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uQWN0aW9ucy5uZXh0KHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGFjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIGFkZENsb3NlQm90Q2xpY2tFdmVudCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2Nsb3NlQm90Tm93Jyk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUJvdC5uZXh0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpc01vYmlsZUJyb3dzZXIoKSB7XG4gICAgcmV0dXJuIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChcbiAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgKTtcbiAgfVxuXG4gIGNvbm5lY3RUb1VzZXIodXNlcklkKSB7XG4gICAgdGhpcy5jb25uZWN0V2l0aFVzZXIuZW1pdCh7XG4gICAgICBjb25uZWN0OiAhdGhpcy5jYW5EaXNjb25uZWN0KHVzZXJJZCksXG4gICAgICB1c2VySWQsXG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBzY2hlZHVsZU1lZXRpbmdXaXRoVXNlcih1c2VyKSB7XG4gICAgdGhpcy5zY2hlZHVsZU1lZXRpbmcuZW1pdCh1c2VyKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBnaXZlbiB1c2VySWQgaGFzIGEgcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3Qgc2VudCAoc2hvdyBcIlJlcXVlc3QgU2VudFwiIGRpc2FibGVkKS4gKi9cbiAgY2hlY2tQZW5kaW5nU2VudFJlcXVlc3QodXNlcklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKHVzZXJJZCA9PSBudWxsIHx8IHVzZXJJZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nU2VudFJlcXVlc3RVc2VySWRzPy5sZW5ndGhcbiAgICAgID8gdGhpcy5wZW5kaW5nU2VudFJlcXVlc3RVc2VySWRzXG4gICAgICA6IHRoaXMucGVuZGluZ1JlcXVlc3RzO1xuICAgIHJldHVybiAhIXBlbmRpbmc/LmZpbmQoKGE6IGFueSkgPT4gYSA9PSB1c2VySWQpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBhdHRlbmRlZSBjYW4gYmUgZm9sbG93ZWQgKHNob3cgXCJDb25uZWN0XCIgYnV0dG9uKS4gTm90IGNvbm5lY3RlZCBhbmQgbm8gcGVuZGluZyBzZW50IHJlcXVlc3QuICovXG4gIGNhbkZvbGxvd1VzZXIoYXR0ZW5kZWU6IHsgaWQ/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVpZCA9IGF0dGVuZGVlPy5pZDtcbiAgICBpZiAodWlkID09IG51bGwgfHwgdWlkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmNhblVuZm9sbG93VXNlcihhdHRlbmRlZSkgfHwgdGhpcy5jaGVja1BlbmRpbmdTZW50UmVxdWVzdCh1aWQpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBhdHRlbmRlZSBpcyBhbHJlYWR5IGNvbm5lY3RlZCAoc2hvdyBcIkRpc2Nvbm5lY3RcIiBidXR0b24pLiAqL1xuICBjYW5VbmZvbGxvd1VzZXIoYXR0ZW5kZWU6IHsgaWQ/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVpZCA9IGF0dGVuZGVlPy5pZDtcbiAgICBpZiAodWlkID09IG51bGwgfHwgdWlkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNvbm5lY3Rpb25zTGlzdD8ubGVuZ3RoXG4gICAgICA/IHRoaXMuY29ubmVjdGlvbnNMaXN0XG4gICAgICA6IHRoaXMubXlDb25uZWN0aW9ucztcbiAgICByZXR1cm4gISFsaXN0Py5maW5kKChjOiBhbnkpID0+IChjLnVzZXJJZCA/PyBjLmlkKSA9PSB1aWQpO1xuICB9XG5cbiAgY2FuQ29ubmVjdCh1c2VySWQpIHtcbiAgICByZXR1cm4gIShcbiAgICAgIHRoaXMuY2FuRGlzY29ubmVjdCh1c2VySWQpIHx8XG4gICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5maW5kKChhKSA9PiBhID09IHVzZXJJZClcbiAgICApO1xuICB9XG5cbiAgY2FuRGlzY29ubmVjdCh1c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5teUNvbm5lY3Rpb25zLmZpbmQoKGNvbm4pID0+IGNvbm4udXNlcklkID09IHVzZXJJZCk7XG4gIH1cblxuICBmZXRjaFBlbmRpbmdSZXF1ZXN0cygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS9jb25uZWN0aW9uLXJlcXVlc3RzL2F1dG9nZW4vcGVuZGluZy1zZW50LXJlcXVlc3RzP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXG4gICAgICAgIHsgaGVhZGVycyB9LFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IHJlcztcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBmZXRjaE15Q29ubmVjdGlvbnMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgYXBpS2V5OiB0aGlzLmF1dG9nZW5LZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vdXNlcnMtY29ubmVjdGlvbnMvYXV0b2dlbj91c2VySWQ9JHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICB7IGhlYWRlcnMgfSxcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5teUNvbm5lY3Rpb25zID0gcmVzO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlbmRpbmcgcmVxdWVzdHM6ICcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGFnZW50czogYW55O1xuICBzZWxlY3RlZEFnZW50cyA9IFtdO1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAvLyBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLmFnZW50cykgdGhpcy5mZXRjaEFnZW50cygpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblNlbGVjdEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFnZW50cz8uZm9yRWFjaCgoYWdlbnQpID0+IChhZ2VudC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25BZ2VudENoYW5nZShhZ2VudDogYW55KTogdm9pZCB7XG4gICAgLy9hZ2VudC5zZWxlY3RlZCA9ICFhZ2VudC5zZWxlY3RlZDtcbiAgICAvL2NvbnNvbGUubG9nKGFnZW50KTtcbiAgICBsZXQgYWdlbnRGb3VuZCA9IHRoaXMuYWdlbnRzLmZpbHRlcigocCkgPT4gcC5pZCA9PSBhZ2VudC5pZCk7XG4gICAgaWYgKGFnZW50Rm91bmQgJiYgYWdlbnRGb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICBhZ2VudEZvdW5kWzBdLnNlbGVjdGVkID0gIWFnZW50Rm91bmRbMF0uc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFnZW50cz8uZXZlcnkoKGFnZW50KSA9PiAhYWdlbnQuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZ2V0RHJvcGRvd25IZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBZ2VudHMgPSB0aGlzLmFnZW50cz8uZmlsdGVyKChhZ2VudCkgPT4gYWdlbnQuc2VsZWN0ZWQpO1xuICAgIGlmICghc2VsZWN0ZWRBZ2VudHMpIHtcbiAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50cyAmJiBzZWxlY3RlZEFnZW50cz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnQWxsIEFnZW50cyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICA/IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50cyBTZWxlY3RlZGBcbiAgICAgICAgICA6IGAke3NlbGVjdGVkQWdlbnRzPy5sZW5ndGh9IEFnZW50IFNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZmV0Y2hBZ2VudHNfaHR0cCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQUdFTlRTX0FQSX0vQ29QaWxvdC8ke3RoaXMuYm90SWR9L2FjdGl2ZS1hZ2VudHNgO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHt9LCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuYWdlbnRzID0gcmVzLm1hcCgoYWdlbnQpID0+ICh7XG4gICAgICAgICAgICAuLi5hZ2VudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRib3QgY29uZmlnOiAnLCBlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuICBpc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgZG9jdW1lbnRDb250ZW50OiBhbnk7XG5cbiAgY29udmVyc2F0aW9uSWQ6IGFueTtcbiAgaXNDb250ZW50TG9hZGVkID0gZmFsc2U7XG5cbiAgZmV0Y2hDb250ZW50X2h0dHAoKSB7XG4gICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IGZhbHNlO1xuICAgIGNvbnNvbGUubG9nKCdBUEkgY2FsbCBmdW5jdGlvbicpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZXZlbnRJZCxcbiAgICApO1xuICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25faWQ7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb25Eb2N1bWVudHM/Y29udmVyc2F0aW9uSWQ9JHtjb252ZXJzYXRpb25faWR9JmJvdElkPSR7dGhpcy5ib3RJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogJ1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDb250ZW50ID0gcmVzO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdHZXQgQVBJIGNhbGxsZWQgc3VjY2VzcycpO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZyBESjogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yPy5zdGF0dXMgPT0gNDA0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Rhc2gnKTtcbiAgICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hBZ2VudHMoKSB7XG4gICAgdGhpcy5mZXRjaEFnZW50c19odHRwKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBmZXRjaEVkaXRvckNvbnRlbnQoKSB7XG4gICAgdGhpcy5mZXRjaENvbnRlbnRfaHR0cCgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gZXZlbnRzLyR7ZXZlbnRJZH0vdXNlcnMtY29ubmVjdGlvbnNcbiAgcHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KG1hcmtkb3duOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZW5kZXJlciB0byBtb2RpZnkgPGE+IHRhZ3NcbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xuXG4gICAgICAvLyBDdXN0b21pemUgYW5jaG9yIHRhZ3MgdG8gaW5jbHVkZSB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVuZGVyZXIubGluayA9IChocmVmOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWZ9XCIgdGl0bGU9XCIke1xuICAgICAgICAgIHRpdGxlIHx8ICcnXG4gICAgICAgIH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RleHR9PC9hPmA7XG4gICAgICB9O1xuXG4gICAgICAvLyBQYXJzZSB0aGUgbWFya2Rvd24gY29udGVudCB0byBIVE1MIHVzaW5nIG1hcmtlZCB3aXRoIHRoZSBjdXN0b20gcmVuZGVyZXJcbiAgICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IG1hcmtlZC5wYXJzZShtYXJrZG93biwgeyByZW5kZXJlcjogcmVuZGVyZXIgfSk7XG5cbiAgICAgIC8vIFNhbml0aXplIHRoZSBwYXJzZWQgSFRNTCB1c2luZyBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyXG4gICAgICBjb25zdCBzYW5pdGl6ZWRIdG1sID1cbiAgICAgICAgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwobWFya2Rvd25Db250ZW50KTtcblxuICAgICAgLy8gUmV0dXJuIHRoZSBzYWZlIEhUTUwgY29udGVudCBmb3IgZGlzcGxheVxuICAgICAgcmV0dXJuIHNhbml0aXplZEh0bWw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgbWFya2Rvd246JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnOyAvLyBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIG9yIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseVxuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVIdG1sKG1hcmtkb3duOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbWFya2Rvd24gfHwgIShtYXJrZG93bi5sZW5ndGggPiAwKSkge1xuICAgICAgY29uc29sZS5lcnJvcignSW5wdXQgTWFya2Rvd24gaXMgbnVsbCBvciBlbXB0eScpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gaGVhZGVycyAoIyMjIG9yICMjKSB0byA8c3Ryb25nPiBmb3IgYm9sZCBoZWFkaW5nc1xuICAgIGxldCBodG1sID0gbWFya2Rvd24ucmVwbGFjZShcbiAgICAgIC9eKCN7MSw2fSlcXHMrKC4qKSQvZ20sXG4gICAgICAobWF0Y2gsIGhhc2hlcywgdGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsZXZlbCA9IGhhc2hlcy5sZW5ndGg7XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMykge1xuICAgICAgICAgIHJldHVybiBgPGgzPjxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPjwvaDM+YDtcbiAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA9PT0gNCkge1xuICAgICAgICAgIHJldHVybiBgPGg0PjxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPjwvaDQ+YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPmA7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGNvZGUgYmxvY2tzIHdpdGggbGFuZ3VhZ2UgdG8gcHJlZm9ybWF0dGVkIEhUTUxcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9gYGAoXFx3Kyk/XFxuKFtcXHNcXFNdKj8pYGBgL2csIChtYXRjaCwgbGFuZywgY29kZSkgPT4ge1xuICAgICAgY29uc3QgZXNjYXBlZENvZGUgPSB0aGlzLmVzY2FwZUh0bWwoY29kZSk7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmcgfHwgJ3BsYWludGV4dCc7XG5cbiAgICAgIC8vIENyZWF0ZSBhIGNvcHkgYnV0dG9uIGZvciB0aGUgY29kZSBibG9ja1xuICAgICAgcmV0dXJuIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY29weS1idXR0b25cIiBjbGFzcz1cImNvcHktYnV0dG9uXCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgnXFxgJHtlc2NhcGVkQ29kZX1cXGAnKVwiPiR7dGhpcy5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAnQ29weScsXG4gICAgICAgICl9PC9idXR0b24+XG4gICAgICAgIDxwcmUgY2xhc3M9XCJjb2RlX2Jsb2NrIGRpZmZcIj48Y29kZSBjbGFzcz1cImxhbmd1YWdlLSR7bGFuZ3VhZ2V9XCI+JHtlc2NhcGVkQ29kZX08L2NvZGU+PC9wcmU+XG4gICAgICA8L2Rpdj5gO1xuICAgIH0pO1xuXG4gICAgLy8gQ29udmVydCBpbmxpbmUgY29kZSAod3JhcHBlZCBpbiBgYmFja3RpY2tzYCkgdG8gaW5saW5lIDxjb2RlPiB0YWdzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYChbXmBdKylgL2csICc8Y29kZT4kMTwvY29kZT4nKTtcblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gYm9sZCB0byBIVE1MIDxzdHJvbmc+XG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcblxuICAgIC8vIENvbnZlcnQgbnVtYmVyZWQgbGlzdHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFxkK1xcLlxccysoLiopJC9nbSwgJzxsaT4kMTwvbGk+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IGJ1bGxldCBwb2ludCBsaXN0c1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXC1cXHMrKC4qKSQvZ20sICc8bGk+JDE8L2xpPicpO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBsaW5rcyB0byBIVE1MIGxpbmtzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZShcbiAgICAgIC9cXFsoW15cXF1dKyldXFwoKFteKV0rKVxcKS9nLFxuICAgICAgJzxhIGhyZWY9XCIkMlwiIHRhcmdldD1cIl9ibGFua1wiPiQxPC9hPicsXG4gICAgKTtcblxuICAgIC8vIENvbnZlcnQgbmV3IGxpbmVzIHRvIDxicj4gdGFncyBmb3IgcGFyYWdyYXBoc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZXNjYXBlIEhUTUwgY2hhcmFjdGVycyBmb3IgY29kZSBibG9ja3NcbiAgZXNjYXBlSHRtbChjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2RlXG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgLnJlcGxhY2UoLycvZywgJyYjMDM5OycpO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gY29weSB0ZXh0IHRvIGNsaXBib2FyZFxuICBwdWJsaWMgY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGFsZXJ0KCdDb2RlIGNvcGllZCB0byBjbGlwYm9hcmQhJyk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgY29weSB0ZXh0OiAnLCBlcnIpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JHcmFwaCA9IGZhbHNlO1xuICBpc0NvbGxhcHNlZEZvckZHcmFwaCA9IGZhbHNlO1xuICB0b2dnbGVDb2xsYXBzZSgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlQ29sbGFwc2VHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yR3JhcGggPSAhdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICB0b2dnbGVDb2xsYXBzZUZHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JGR3JhcGg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8vICAgW1xuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEphbnVhcnkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkVhY2ggbW9udGgsIHdlIGNvbXBpbGUgc2lnbmlmaWNhbnQgbmV3cywgdHJlbmRzLCBhbmQgaGFwcGVuaW5ncyBpbiBBSSwgcHJvdmlkaW5nIGRldGFpbGVkIHN1bW1hcmllcyB3aXRoIGtleSBwb2ludHMgaW4gYnVsbGV0IGZvcm0gZm9yIGNvbmNpc2UgeWV0IGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtamFudWFyeS0yMDI0L1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiVG9wIEFJIE5ld3MsIEphbnVhcnkgMjAyNCAtIEV2ZXJ5cGl4ZWwgSm91cm5hbFwiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiSW4gdGhpcyBtb250aGx5IHJvdW5kdXAsIHdlIHNwb3RsaWdodCB0aGUgdG9wIEFJIG5ld3Mgc3RvcmllcyBmcm9tIEphbnVhcnksIGluY2x1ZGluZyB0aGUgT3BlbkFJIHZzLiBUaGUgTmV3IFlvcmsgVGltZXMgTGF3c3VpdC5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vam91cm5hbC5ldmVyeXBpeGVsLmNvbS90b3AtYWktbmV3cy1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgSnVseSAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEp1bHkgMjAyNCwgaGlnaGxpZ2h0aW5nIHNpZ25pZmljYW50IGV2ZW50cyBzdWNoIGFzIENhbnZhIGFjcXVpcmluZyBMZW9uYXJkbyBBSS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vdGhlYWl0cmFjay5jb20vYWktbmV3cy1qdWx5LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UvXCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJKYW51YXJ5IG5ld3Mgcm91bmR1cDogV2hhdCdzIG5ldyBpbiB0aGUgd29ybGQgb2YgQUk/IC0gUGx1cmFsc2lnaHRcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIk9wZW5BSeKAmXMgbmV3IEdQVCBzdG9yZSwgYnVzaW5lc3MtcmVhZHkgQ2hhdEdQVCBwbGFucywgYW5kIGEgcHJlZGljdGVkIHJpc2UgaW4gQUktcG93ZXJlZCBjeWJlcmNyaW1lLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly93d3cucGx1cmFsc2lnaHQuY29tL3Jlc291cmNlcy9ibG9nL2RhdGEvYWktdGhpcy1tb250aC1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgQXVndXN0IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJUaGlzIHBhZ2UgZmVhdHVyZXMgQUkgTmV3cyBmb3IgQXVndXN0IDIwMjQsIHdpdGggaGlnaGxpZ2h0cyBzdWNoIGFzIE52aWRpYSBkZWxheWluZyB0aGUg4oCcQmxhY2t3ZWxs4oCdIEIyMDAgQUkgY2hpcHMgZGVsaXZlcnkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtYXVndXN0LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UtZHVwbGljYXRlL1wiXG4gIC8vICAgfVxuICAvLyBdXG4gIGRhdGVUaW1lID0geyBub3c6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICAvLyBFeHRyYWN0cyB0aGUgZG9tYWluIGZyb20gYSBVUkxcbiAgZ2V0RG9tYWluTmFtZSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgaG9zdG5hbWUgfSA9IG5ldyBVUkwodXJsKTtcbiAgICAgIHJldHVybiBob3N0bmFtZS5yZXBsYWNlKC9ed3d3XFwuLywgJycpOyAvLyBSZW1vdmUgJ3d3dy4nIGlmIHByZXNlbnRcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGVzIHRoZSBmYXZpY29uIFVSTFxuICBnZXRGYXZpY29uVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLmdldERvbWFpbk5hbWUodXJsKTtcbiAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/c3o9MTI4JmRvbWFpbj0ke2RvbWFpbn1gO1xuICB9XG4gIGN1cnJlbnRTb3VyY2VzTGlzdDogYW55ID0gW107XG4gIG9uQ2FyZENsaWNrKHNvdXJjZXMpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3VyY2VzTGlzdCA9IHNvdXJjZXM7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG5cbiAgb3Blbk91dGVyRWRpdG9yKCkge1xuICAgIHRoaXMuZmV0Y2hFZGl0b3JDb250ZW50KCk7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5pc1Nob3dFZGl0b3JCdXR0b24gPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZUVkaXRvcigpIHtcbiAgICB0aGlzLmVkaXRvcnNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICB0aGlzLm9uRHJhd2VyQ2xvc2VkKCk7XG4gIH1cblxuICBvbkNsb3NlU291cmNlKCkge1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5jbG9zZSgpO1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG4gIG9uRHJhd2VyQ2xvc2VkKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgICAvLyBVc2UgbmdDbGFzcyB0byBkeW5hbWljYWxseSBhcHBseSB0aGUgY2xhc3NcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgfVxuICAgIH0sIDgwMCk7XG4gIH1cbiAgaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcblxuICB0b2dnbGVEcmF3ZXIodG9kbykge1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdG9kbztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7XG4gIH1cbiAgdXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzRHJhd2VyT3BlbiA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuICB9XG4gIG9wZW5MaW5rSW5OZXdUYWIobGluazogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpO1xuICB9XG4gIGFkanVzdFRleHRhcmVhSGVpZ2h0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgLy8gUHJldmVudHMgYSBuZXcgbGluZSBmcm9tIGJlaW5nIGFkZGVkXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7IC8vIFJlc2V0IHRoZSBoZWlnaHRcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgOyAvLyBBZGp1c3QgaGVpZ2h0IHRvIG1hdGNoIGNvbnRlbnRcbiAgICAvLyBFbnN1cmUgdGhlIGhlaWdodCBkb2Vzbid0IGV4Y2VlZCB0aGUgbWF4LWhlaWdodCBzZXQgaW4gQ1NTXG4gICAgaWYgKHRleHRhcmVhLnNjcm9sbEhlaWdodCA+IDE1MCkge1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYDE1MHB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7IC8vIEVuYWJsZSBzY3JvbGxpbmcgaWYgY29udGVudCBleGNlZWRzIDQwMHB4XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nOyAvLyBIaWRlIHNjcm9sbGJhciBpZiBjb250ZW50IGlzIHdpdGhpbiBsaW1pdHNcbiAgICB9XG4gIH1cblxuICB0b2dnbGVXb3JrZmxvd3ModmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRm9yQ29wMjlCb3RJZCgpKSB7XG4gICAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dzQnlPcmdJZCh0aGlzLm9yZ0lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9yZ1dvcmtmbG93cyA9IHJlcztcbiAgICAgICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IHZhbHVlID09IG51bGwgPyAhdGhpcy5pc1dvcmtmbG93T3BlbiA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1dvcmtmbG93T3Blbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbHMgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8uVHJpZ2dlcj8uSW5wdXRTY2hlbWEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgIGZvcm1Db250cm9sc1tpbnB1dC5JbnB1dElkXSA9IFtcbiAgICAgICAgICBpbnB1dC5WYWx1ZSB8fCAnJyxcbiAgICAgICAgICBpbnB1dC5SZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZm9ybVxuICAgIHRoaXMud29ya2Zsb3dGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICB9XG5cbiAgb25Xb3JrZmxvd1NlbGVjdGVkKHdvcmtmbG93KSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gd29ya2Zsb3c7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gdHJ1ZTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTdWJtaXQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdEFsbENoYXQnKTtcbiAgICBpZiAodGhpcy53b3JrZmxvd0Zvcm0udmFsaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlKTtcblxuICAgICAgdmFyIGlucHV0ID0gdGhpcy5wcmVwYXJlSHRtbChcbiAgICAgICAgdGhpcy5nZW5lcmF0ZU1hcmtkb3duKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5OYW1lLFxuICAgICAgICAgIHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gdXBkYXRlIGxhc3QgdHdvIGNoYXRMb2cgZW50cmllcywgc2V0IHNob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciA9IGZhbHNlXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdWydzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXInXSA9XG4gICAgICAgICAgZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMl1bJ3Nob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciddID1cbiAgICAgICAgICBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgbWVzc2FnZTogaW5wdXQsXG4gICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGlucHV0KTtcblxuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvbiA9XG4gICAgICAgICdFeGVjdXRpbmcgJyArIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5BY3Rpb25zWzBdLk5hbWU7XG4gICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG4gICAgICB0aGlzLmV4ZWN1dGluZ1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0ge1xuICAgICAgICBBY3Rpb25zOiB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuQWN0aW9ucyxcbiAgICAgICAgSW5wdXRzOiB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgd29ya2Zsb3dJbnB1dHM6IHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICBXb3JrZmxvd05hbWU6IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5OYW1lLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIGV4ZWN1dGUgdGhlIGFzayBlbmRwb2ludCB3aXRoIHdvcmtmbG93IGlucHV0XG4gICAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgdGhpcy5hZ2VudHMsXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uS2V5LFxuICAgICAgICAnJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WydfaWQnXSxcbiAgICAgICAgdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VBc2tSZXF1ZXN0KFxuICAgIGlucHV0TXNnOiBzdHJpbmcsXG4gICAgYWdlbnRzOiBhbnlbXSxcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICAgIG1zZz86IGFueSxcbiAgICBjaGF0PzogYW55LFxuICAgIHdvcmtmbG93SWQ/OiBzdHJpbmcsXG4gICAgd29ya2Zsb3dfaW5wdXRzPzogYW55LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9haS9hc2tgO1xuXG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHVzZXJfcXVlc3Rpb246IGlucHV0TXNnLFxuICAgICAgdXNlcl9pZDogdGhpcy51c2VySWQsXG4gICAgICBib3RfaWQ6IHRoaXMuYm90SWQsXG4gICAgICBtZXNzYWdlX2lkOiB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2VuZXJhdGVLZXkoKSxcbiAgICAgIHNlc3Npb25faWQ6IHRoaXMuY29uU2Vzc2lvbktleSxcbiAgICAgIGFnZW50czogYWdlbnRzPy5maWx0ZXIoKHApID0+IHAuc2VsZWN0ZWQpLm1hcCgocCkgPT4gcC5pZCkgPz8gW10sXG4gICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgZmlyc3RfbmFtZTogdGhpcy5maXJzdE5hbWUsXG4gICAgICBsYXN0X25hbWU6IHRoaXMubGFzdE5hbWUsXG4gICAgfTtcblxuICAgIGlmICh3b3JrZmxvd0lkKSB7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pZCddID0gd29ya2Zsb3dJZDtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lucHV0cyddID0gd29ya2Zsb3dfaW5wdXRzO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJzQXBpID0gdGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEk7XG4gICAgdGhpcy5wbGF0Zm9ybVRva2VuUmVmcmVzaFxuICAgICAgLmVuc3VyZVZhbGlkQWNjZXNzVG9rZW4odGhpcy5zMjdUb2tlbiwgdXNlcnNBcGkpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChlbnN1cmVkKSA9PiB7XG4gICAgICAgICAgbGV0IGJlYXJlciA9IGVuc3VyZWQuYWNjZXNzVG9rZW4gfHwgdGhpcy5zMjdUb2tlbiB8fCAnJztcbiAgICAgICAgICBpZiAoZW5zdXJlZC5yZWZyZXNoZWQgJiYgZW5zdXJlZC5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgdGhpcy5zMjdUb2tlbiA9IGVuc3VyZWQuYWNjZXNzVG9rZW47XG4gICAgICAgICAgICBpZiAoZW5zdXJlZC5hdXRoUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy50b2tlbnNSZWZyZXNoZWQuZW1pdChlbnN1cmVkLmF1dGhSZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZXhlY3V0ZUFza0ZldGNoKHVybCwgYm9keSwgYmVhcmVyLCBtc2csIGNoYXQpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXM0MDEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuLmVtaXQoKTtcbiAgICAgICAgICBpZiAobXNnICYmIGNoYXQpIHtcbiAgICAgICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICAgICAgdGhpcy5jaGF0ID0gY2hhdDtcbiAgICAgICAgICAgIHRoaXMuaXNGZXRjaERhdGFGb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gbnVsbDtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBgL2FpL2Fza2AgZmV0Y2ggdXNpbmcgYSBCZWFyZXIgdG9rZW4gKGFmdGVyIG9wdGlvbmFsIHByb2FjdGl2ZSByZWZyZXNoKS4gKi9cbiAgcHJpdmF0ZSBleGVjdXRlQXNrRmV0Y2goXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keTogYW55LFxuICAgIGJlYXJlclRva2VuOiBzdHJpbmcsXG4gICAgbXNnPzogYW55LFxuICAgIGNoYXQ/OiBhbnksXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBiZWFyZXJUb2tlbixcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICBldmVudFVybDogdGhpcy5ldmVudFVybCxcbiAgICAgIGV2ZW50SWQ6IHRoaXMuZXZlbnRJZCxcbiAgICAgIGV2ZW50VG9rZW46IHRoaXMuZXZlbnRUb2tlbixcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMud29ya3NwYWNlVG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbJ3dvcmtzcGFjZVRva2VuJ10gPSB0aGlzLndvcmtzcGFjZVRva2VuO1xuICAgIH1cblxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICB0aGlzLmlzNDAxID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbi5lbWl0KCk7XG5cbiAgICAgICAgICBpZiAobXNnICYmIGNoYXQpIHtcbiAgICAgICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICAgICAgdGhpcy5jaGF0ID0gY2hhdDtcbiAgICAgICAgICAgIHRoaXMuaXNGZXRjaERhdGFGb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzNDAxID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogJywgZXJyKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbWFrZUFza1JlcXVlc3RvbGQoXG4gICAgaW5wdXRNc2c6IHN0cmluZyxcbiAgICBhZ2VudHM6IGFueVtdLFxuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gICAgbXNnPzogYW55LFxuICAgIGNoYXQ/OiBhbnksXG4gICAgd29ya2Zsb3dJZD86IHN0cmluZyxcbiAgICB3b3JrZmxvd19pbnB1dHM/OiBhbnksXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2FpL2Fza2A7XG5cbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICB1c2VyX3F1ZXN0aW9uOiBpbnB1dE1zZyxcbiAgICAgIHVzZXJfaWQ6IHRoaXMudXNlcklkLFxuICAgICAgYm90X2lkOiB0aGlzLmJvdElkLFxuICAgICAgbWVzc2FnZV9pZDogdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdlbmVyYXRlS2V5KCksXG4gICAgICBhZ2VudHM6IGFnZW50cz8uZmlsdGVyKChwKSA9PiBwLnNlbGVjdGVkKS5tYXAoKHApID0+IHAuaWQpID8/IFtdLFxuICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGZpcnN0X25hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgbGFzdF9uYW1lOiB0aGlzLmxhc3ROYW1lLFxuICAgIH07XG5cbiAgICBpZiAod29ya2Zsb3dJZCkge1xuICAgICAgYm9keVsnd29ya2Zsb3dfaWQnXSA9IHdvcmtmbG93SWQ7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pbnB1dHMnXSA9IHdvcmtmbG93X2lucHV0cztcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgJ2V2ZW50SWQnOiB0aGlzLmV2ZW50SWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLmh0dHAucG9zdCh1cmwsIGJvZHksIHsgaGVhZGVycyB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIC8vIEFkZGl0aW9uYWwgcmVzcG9uc2UgaGFuZGxpbmcgaWYgbmVlZGVkXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6ICcsIGVycik7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZW5lcmF0ZU1hcmtkb3duKHRpdGxlLCBvYmopIHtcbiAgICAvLyBJbml0aWFsaXplIG1hcmtkb3duIHdpdGggdGhlIHRpdGxlXG4gICAgbGV0IG1hcmtkb3duID0gYCMjICR7dGl0bGV9XFxuYDtcblxuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgb2JqZWN0IGFuZCBhcHBlbmQgdGhlIGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICB2YXIga2V5X2xhYmVsID1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93LlRyaWdnZXIuSW5wdXRTY2hlbWEuZmluZChcbiAgICAgICAgICAoaW5wdXQpID0+IGlucHV0LklucHV0SWQgPT09IGtleSxcbiAgICAgICAgKT8uTGFiZWwgfHwga2V5O1xuICAgICAgbWFya2Rvd24gKz0gYC0gKioke2tleV9sYWJlbH0qKjogJHt2YWx1ZX1cXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZG93bjtcbiAgfVxuXG4gIHNob3dXb3JrZmxvd0hpc3RvcnlEZXRhaWxzKHdvcmtmbG93X2lkKSB7XG4gICAgaWYgKCF3b3JrZmxvd19pZCkge1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0aGlzLmN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG4gICAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYm90U2VydmljZS5nZXRXb3JrZmxvd0V4ZWN1dGlvbkJ5SWQod29ya2Zsb3dfaWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5BY3Rpb25zICYmIEFycmF5LmlzQXJyYXkocmVzLkFjdGlvbnMpKSB7XG4gICAgICAgIHJlcy5BY3Rpb25zID0gcmVzLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoYWN0aW9uLkluc2VydFRpbWVTdGFtcCkge1xuICAgICAgICAgICAgYWN0aW9uLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgIHJlcy5JbnNlcnRUaW1lU3RhbXAsXG4gICAgICApO1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSByZXM7XG4gICAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSBmYWxzZTtcbiAgfVxuXG4gIG9iamVjdFRvQXJyYXkob2JqOiBhbnkpOiBhbnlbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKChrZXkpID0+ICh7IGtleSwgdmFsdWU6IG9ialtrZXldIH0pKTtcbiAgfVxuXG4gIHN0YXJ0TmV3Q29udmVyc2F0aW9uKCkge1xuICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleShcbiAgICAgIHRoaXMuYm90SWQsXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5ldmVudElkLFxuICAgICk7XG4gICAgdGhpcy5jaGF0TG9nID0gW3RoaXMuY2hhdExvZ1swXV07XG4gICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICB0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG4gICAgfSwgMjAwKTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW46IHN0cmluZykge1xuICAgIHRoaXMuc3BlZWNoQ29uZmlnID0gU3BlZWNoU0RLLlNwZWVjaENvbmZpZy5mcm9tQXV0aG9yaXphdGlvblRva2VuKFxuICAgICAgdG9rZW4sXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICApO1xuICAgIGNvbnN0IGF1ZGlvQ29uZmlnID0gU3BlZWNoU0RLLkF1ZGlvQ29uZmlnLmZyb21EZWZhdWx0TWljcm9waG9uZUlucHV0KCk7XG4gICAgdGhpcy5yZWNvZ25pemVyID0gbmV3IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyKFxuICAgICAgdGhpcy5zcGVlY2hDb25maWcsXG4gICAgICBhdWRpb0NvbmZpZyxcbiAgICApO1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6aW5nID0gKHMsIGUpID0+IHtcbiAgICAgIGlmIChlLnJlc3VsdC5yZWFzb24gPT09IFNwZWVjaFNESy5SZXN1bHRSZWFzb24uUmVjb2duaXppbmdTcGVlY2gpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGUucmVzdWx0LnRleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvZ25pemluZzogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnJlY29nbml6ZWQgPSAocywgZSkgPT4ge1xuICAgICAgaWYgKGUucmVzdWx0LnJlYXNvbiA9PT0gU3BlZWNoU0RLLlJlc3VsdFJlYXNvbi5SZWNvZ25pemVkU3BlZWNoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBlLnJlc3VsdC50ZXh0O1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVjb2duaXplZDogJHtlLnJlc3VsdC50ZXh0fWApO1xuICAgICAgICB0aGlzLnRvZ2dsZVJlY29yZGluZygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLmNhbmNlbGVkID0gKHMsIGUpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhbmNlbGVkOiAnLCBlLmVycm9yRGV0YWlscyk7XG4gICAgfTtcblxuICAgIHRoaXMucmVjb2duaXplci5zZXNzaW9uU3RvcHBlZCA9IChzLCBlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnU2Vzc2lvbiBzdG9wcGVkLicpO1xuICAgICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlUmVjb3JkaW5nKCkge1xuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSAhdGhpcy5pc1JlY29yZGluZztcblxuICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XG4gICAgICB0aGlzLnN0YXJ0UmVjb2duaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wUmVjb2duaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFJlY29nbml0aW9uKCkge1xuICAgIHRoaXMucmVjb2duaXplci5zdGFydENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gIH1cblxuICBzdG9wUmVjb2duaXRpb24oKSB7XG4gICAgdGhpcy5yZWNvZ25pemVyLnN0b3BDb250aW51b3VzUmVjb2duaXRpb25Bc3luYygpO1xuICB9XG5cbiAgY2hlY2tGb3JDb3AyOUJvdElkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvdElkID09ICc2NmZhM2YyNzZjNWQ3MWUyNzE3YmZlYTgnIHx8XG4gICAgICB0aGlzLmJvdElkID09ICc2NzE2MzM1NDU2NTJkZDc4ZWZlYzg0OGQnXG4gICAgKTtcbiAgfVxuXG4gIGdldExhdGVzdFRpbWUodGltZSk6IHN0cmluZyB7XG4gICAgaWYgKHRpbWUpIHtcbiAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHtcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgIH0pOyAvLyByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiAnc2hvcnRUaW1lJyBmb3JtYXRcbiAgfVxuXG4gIC8qKiBVc2VkIGJ5IHRoZSB2b2ljZSBtb2RhbCB3aGVuIG9wZW5lZCBmcm9tIHRoaXMgZHJhd2VyLiAqL1xuICB2b2ljZU1vZGFsQ29udmVyc2F0aW9uSWQ6IHN0cmluZyA9ICcnO1xuXG4gIG9wZW5Wb2ljZU1vZGFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID1cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID8/XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQsIGZhbHNlLCB0aGlzLmV2ZW50SWQpID8/XG4gICAgICAnJztcbiAgICB0aGlzLnZvaWNlTW9kYWxDb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkO1xuICAgIHRoaXMuc2V0dXBWb2ljZVRyYW5zY3JpcHRzKCk7XG5cbiAgICAvLyBDbG9zZSBleGlzdGluZyBvdmVybGF5IGlmIGFueVxuICAgIGlmICh0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IFZvaWNlTW9kYWxDb25maWcgPSB7XG4gICAgICBhcGlVcmw6IHRoaXMuZW52aXJvbm1lbnQ/LkJBU0VfVVJMID8/ICcnLFxuICAgICAgdG9rZW46IHRoaXMuczI3VG9rZW4gPz8gJycsXG4gICAgICBib3RJZDogdGhpcy5ib3RJZCA/PyAnJyxcbiAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgYXBpS2V5OiB0aGlzLmFwaUtleSA/PyAnJyxcbiAgICAgIGV2ZW50VG9rZW46IHRoaXMuZXZlbnRUb2tlbiA/PyAnJyxcbiAgICAgIGV2ZW50SWQ6IHRoaXMuZXZlbnRJZCxcbiAgICAgIGV2ZW50VXJsOiB0aGlzLmV2ZW50VXJsID8/ICcnLFxuICAgICAgZG9tYWluQXV0aG9yaXR5OiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID8/ICdwcm9kLWxpdGUnLFxuICAgICAgYWdlbnROYW1lOiB0aGlzLmJvdE5hbWUgfHwgJ0FJIEFzc2lzdGFudCcsXG4gICAgICBhZ2VudFJvbGU6IHRoaXMuYm90U2tpbGxzIHx8ICdBSSBBZ2VudCBTcGVjaWFsaXN0JyxcbiAgICAgIGFnZW50QXZhdGFyOiB0aGlzLmJvdEljb24sXG4gICAgICB1c2Vyc0FwaVVybDogdGhpcy5lbnZpcm9ubWVudD8uVVNFUlNfQVBJID8/ICcnLFxuICAgIH07XG5cbiAgICBjb25zdCBjbG9zZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYpIHtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5jbG9zZVZvaWNlTW9kYWwoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoXG4gICAgICBbXG4gICAgICAgIHsgcHJvdmlkZTogVk9JQ0VfTU9EQUxfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAgICAgIHsgcHJvdmlkZTogVk9JQ0VfTU9EQUxfQ0xPU0VfQ0FMTEJBQ0ssIHVzZVZhbHVlOiBjbG9zZUNhbGxiYWNrIH0sXG4gICAgICBdLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICApO1xuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXlcbiAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgLmdsb2JhbCgpXG4gICAgICAgIC5ib3R0b20oJzAnKVxuICAgICAgICAucmlnaHQoJzAnKVxuICAgICAgICAubGVmdCgnMCcpXG4gICAgICAgIC50b3AoJzAnKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICBWb2ljZUFnZW50TW9kYWxDb21wb25lbnQsXG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICBpbmplY3RvcixcbiAgICApO1xuICAgIG92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG4gICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG92ZXJsYXlSZWY7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbG9zZVZvaWNlTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmlzVm9pY2VNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFJlbG9hZCBjaGF0IGhpc3Rvcnkgd2hlbiB2b2ljZSBtb2RhbCBjbG9zZXMgKHNhbWUgYXMgaW5pdGlhbCBsb2FkKVxuICAgIHRoaXMuY2hhdExvZyA9IFtdO1xuICAgIHRoaXMuZmV0Y2hDaGF0SGlzdG9yeSgpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXBDaGF0SGlzdG9yeShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3RvcnkgYWZ0ZXIgdm9pY2UgbW9kYWwgY2xvc2U6JyxcbiAgICAgICAgICBlcnIsXG4gICAgICAgICk7XG4gICAgICAgIC8vIEZhbGxiYWNrOiBzaG93IGdyZWV0aW5nIHNvIGNoYXQgaXMgbm90IGVtcHR5XG4gICAgICAgIGlmICh0aGlzLmNoYXRMb2cubGVuZ3RoID09PSAwICYmIHRoaXMuZ3JlZXRpbmdNc2cpIHtcbiAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHsgTWVzc2FnZXM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwVm9pY2VUcmFuc2NyaXB0cygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBzdWJzY3JpcHRpb25zXG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMudm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIHVzZXIgdHJhbnNjcmlwdHNcbiAgICBjb25zdCB1c2VyU3ViID0gdGhpcy52b2ljZUFnZW50U2VydmljZS51c2VyVHJhbnNjcmlwdCQuc3Vic2NyaWJlKFxuICAgICAgKHRyYW5zY3JpcHQpID0+IHtcbiAgICAgICAgaWYgKHRyYW5zY3JpcHQuZmluYWwgJiYgdHJhbnNjcmlwdC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgIC8vIEFkZCB1c2VyIG1lc3NhZ2UgdG8gY2hhdFxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRyYW5zY3JpcHQudGV4dCksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBib3QgdHJhbnNjcmlwdHNcbiAgICBjb25zdCBib3RTdWIgPSB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLmJvdFRyYW5zY3JpcHQkLnN1YnNjcmliZShcbiAgICAgICh0cmFuc2NyaXB0KSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2NyaXB0ICYmIHRyYW5zY3JpcHQudHJpbSgpKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgbGFzdCBtZXNzYWdlIGlzIGZyb20gYm90LCB1cGRhdGUgaXQsIG90aGVyd2lzZSBhZGQgbmV3XG4gICAgICAgICAgY29uc3QgbGFzdE1lc3NhZ2UgPSB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS50eXBlID09PSAnYWknKSB7XG4gICAgICAgICAgICBsYXN0TWVzc2FnZS5tZXNzYWdlID0gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdCksXG4gICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zLnB1c2godXNlclN1YiwgYm90U3ViKTtcbiAgfVxufVxuXG5leHBvcnQgeyBWb2ljZU1vZGFsQ29uZmlnIH0gZnJvbSAnLi4vdm9pY2UtYWdlbnQvdm9pY2UtbW9kYWwtdG9rZW5zJztcbiJdfQ==
|