@tsi-developpement/tsi-shared-ui 1.8.36 → 1.8.38

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.
Files changed (23) hide show
  1. package/esm2022/lib/models/tsi-card/tsi-card.mjs +1 -1
  2. package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +9 -1
  3. package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +2 -2
  4. package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +18 -3
  5. package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +1 -1
  6. package/esm2022/lib/tsi-components/tsi-calender/context-menu/context-menu.component.mjs +16 -4
  7. package/esm2022/lib/tsi-components/tsi-calender/tsi-calender.component.mjs +30 -3
  8. package/esm2022/lib/tsi-components/tsi-card/tsi-card.component.mjs +50 -23
  9. package/esm2022/lib/tsi-components/tsi-card-list/tsi-card-list.component.mjs +14 -4
  10. package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +17 -5
  11. package/esm2022/lib/tsi-components/tsi-kanban/tsi-kanban.component.mjs +48 -22
  12. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +201 -72
  13. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
  14. package/lib/consts/app-providers.d.ts +1 -1
  15. package/lib/models/tsi-card/tsi-card.d.ts +1 -0
  16. package/lib/providers/shared-ui-tsi.provider.d.ts +1 -1
  17. package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +6 -1
  18. package/lib/tsi-components/tsi-calender/context-menu/context-menu.component.d.ts +5 -1
  19. package/lib/tsi-components/tsi-calender/tsi-calender.component.d.ts +6 -1
  20. package/lib/tsi-components/tsi-card/tsi-card.component.d.ts +15 -5
  21. package/lib/tsi-components/tsi-card-list/tsi-card-list.component.d.ts +5 -1
  22. package/lib/tsi-components/tsi-kanban/tsi-kanban.component.d.ts +14 -6
  23. package/package.json +1 -1
@@ -555,7 +555,7 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
555
555
  urlDesigner = `${Segment.reportingServiceBase}/report-viewer/${reportToTemplateId}?${queryParamNamesConst.tenantUid}=${tenantUid}`;
556
556
  }
557
557
  else if (data.reportType === TsiReportType.Dashboard) {
558
- urlDesigner = `${Segment.appBaseHref}/${this.dashboardModuleRoute}/${ManageReportingRoutes.dashboardDesigner}?${queryParamNamesConst.reportToPrint}=${reportToTemplateId}&${queryParamNamesConst.tenantUid}=${tenantUid}`;
558
+ urlDesigner = `${Segment.appBaseHref}/${this.dashboardModuleRoute}/${ManageReportingRoutes.dashboardViewer}?${queryParamNamesConst.reportToPrint}=${reportToTemplateId}&${queryParamNamesConst.tenantUid}=${tenantUid}`;
559
559
  }
560
560
  window.open(urlDesigner, '_blank');
561
561
  this.notificationService.success('shared_reporting_redirected_to_print_report_successfully');
@@ -1052,4 +1052,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1052
1052
  }], customReportingMode: [{
1053
1053
  type: Input
1054
1054
  }] } });
1055
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixZQUFZLEVBRVosYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUwsZUFBZSxHQUVoQixNQUFNLGtCQUFrQixDQUFDO0FB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QUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBhcHBQcm92aWRlcnMgfSBmcm9tICcuLi8uLi9jb25zdHMvYXBwLXByb3ZpZGVycyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IHF1ZXJ5UGFyYW1OYW1lc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RzL3F1ZXJ5UGFyYW1OYW1lcy5jb25zdCc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cy9yZXBvcnRpbmctZW5kcG9pbnRzJztcclxuaW1wb3J0IHtcclxuICBDU1NVbml0cyxcclxuICBEaXNwbGF5VHlwZXMsXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNvcnRNb2RlLFxyXG4gIEh0dHBNZXRob2RUeXBlLFxyXG4gIE1vZGFsU2l6ZUVudW0sXHJcbiAgTW9kZXMsXHJcbiAgVHNpUmVwb3J0VHlwZSxcclxufSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9idXR0b24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvdG9vbHRpcFBvc2l0aW9uLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkNsaWNrUmVzdWx0LFxyXG4gIENTU1NpemVQcm9wZXJ0eSxcclxuICBHcmlkQ29sdW1uLFxyXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQge1xyXG4gIEpzb25EYXRhQ29ubmVjdGlvbixcclxuICBLZXlWYWx1ZVBhaXIsXHJcbiAgT3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgUmVwb3J0VGVtcGxhdGVSZXNwb25zZSxcclxuICBSZXBvcnRUb0VkaXRUZW1wbGF0ZSxcclxuICBSZXBvcnRUb0VkaXRUZW1wbGF0ZVBheWxvYWQsXHJcbiAgUmVwb3J0VG9QcmludCxcclxuICBSZXBvcnRUb1RlbXBsYXRlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwcFJvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9hcHAucm91dGVzJztcclxuaW1wb3J0IHsgTWFuYWdlUmVwb3J0aW5nUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL21hbmFnZS1yZXBvcnRpbmcucm91dGVzJztcclxuaW1wb3J0IHtcclxuICBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gIFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgVHNpTW9kYWxTZXJ2aWNlLFxyXG4gIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9hZGQtcmVwb3J0LXBvcHVwL2FkZC1yZXBvcnQtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW1haWxJbmZvcm1hdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi9jb25maWd1cmF0aW9uL2VtYWlsLWluZm9ybWF0aW9uJztcclxuaW1wb3J0IHsgTWFpbGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9tYWlsaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lTZW5kTWFpbENvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1zZW5kLW1haWwvdHNpLXNlbmQtbWFpbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtbWFuYWdlLXJlcG9ydGluZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcblxyXG4gIHJlYWRvbmx5IEVESVRJT05fUEVSU09OTkFMSVNFID0gJ2FwcC1lZGl0aW9uLXBlcnNvbm5hbGlzZSc7XHJcbiAgcmVwb3J0czogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVtdID0gW107XHJcbiAganNvbkRhdGFDb25uZWN0aW9uOiBKc29uRGF0YUNvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XHJcbiAganNvbkRhdGFDb25uZWN0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICByZXBvcnRUb1ByaW50SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICB0b1VwbG9hZEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgY29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgaXNGcm9tRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZvcm1OYW1lczogS2V5VmFsdWVQYWlyPHN0cmluZywgc3RyaW5nPltdID0gW107XHJcbiAgc2VsZWN0ZWRSZXBvcnRzOiBudW1iZXJbXSA9IFtdO1xyXG4gIHNlbGVjdGlvbk1vZGUgPSBHcmlkU2VsZWN0aW9uTW9kZS5NdWx0aXBsZTtcclxuICBnZXRGb3JtTmFtZXNFbmRwb2ludDogc3RyaW5nID0gUmVwb3J0aW5nRW5kcG9pbnRzLmdldEF2YWlsYWJsZUZvcm1OYW1lcygpO1xyXG4gIGdsb2JhbEZpbHRlckZpZWxkcyA9IFsnbmFtZSddO1xyXG4gIHJlZnJlc2hKb2JUaW1lT3V0OiBhbnk7XHJcbiAgcHJldmlvdXNGb3JtTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGE6IGFueSA9IHVuZGVmaW5lZDtcclxuICBzZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICBkZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGRlZmF1bHRUZW1wbGF0ZUNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbjtcclxuICBwcml2YXRlIF9kaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xyXG4gIGlzRWRpdGlvblBlcnNvbm5hbGlzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVudGl0eUlkPzogc3RyaW5nO1xyXG4gIHJlcG9ydERpc2NyaW1pbmF0b3I/OiBhbnk7XHJcbiAgaHR0cE1ldGhvZFR5cGU/OiBIdHRwTWV0aG9kVHlwZTtcclxuICByZXF1ZXN0RGF0YT86IGFueTtcclxuICBzb3J0TW9kZVJlZiA9IEdyaWRTb3J0TW9kZVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSByZXBvcnRUeXBlTGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgW1RzaVJlcG9ydFR5cGUuRGFzaGJvYXJkXTogJ0Rhc2hib2FyZCcsXHJcbiAgICBbVHNpUmVwb3J0VHlwZS5MaXN0XTogJ0VuZCB1c2VyJyxcclxuICAgIFtUc2lSZXBvcnRUeXBlLlJURl06ICdSVEYnLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX2lzUmVwb3J0Rm9yRmljaGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGlzUmVwb3J0Rm9yRmljaGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAhdGhpcy5vdGhlckZvcm1FbmRwb2ludD8uaW5jbHVkZXMoJ2dldGFsbHBhZ2VkJykgJiYgIXRoaXMucmVxdWVzdERhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdmaWxlVXBsb2FkJykgZmlsZVVwbG9hZD86IEZpbGVVcGxvYWQ7XHJcbiAgQFZpZXdDaGlsZCgnaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZCcpXHJcbiAgaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZD86IEZpbGVVcGxvYWQ7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyA9ICdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRhc2hib2FyZE1vZHVsZVJvdXRlID0gYCR7QXBwUm91dGVzLmFwcH0vJHtBcHBSb3V0ZXMuZGFzaGJvYXJkfWA7XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgYnV0dG9uVHlwZSA9IEJ1dHRvblR5cGU7XHJcbiAgLy8gcGFyYW1ldHJlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllID0gbmV3IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUoKTtcclxuICAvLyNyZWdpb24gSW5wdXQgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIG90aGVyRm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIG90aGVyRm9ybUVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vPSBgJHtHZXN0aW9uQ29tbWVyY2lhbGVTZWdtZW50cy5mYWN0dXJlVmVudGV9LzE2NWVjNWZkLTRkMzQtNDU0Ni1hZTE1LTAwNDRlNzA4YjlkOWA7XHJcbiAgQElucHV0KCkgZm9ybUVuZHBvaW50Qm9keTogc3RyaW5nIHwgdW5kZWZpbmVkOyAvL2Zvcm1JZGVudGlmaWVyXHJcbiAgQElucHV0KCkgaXNGb3JtRW5kcG9pbnRQYWdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpbHRlcnNIdG1sVGVtcGxhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBvcHRpb25hbEVuZHBvaW50cz86IE9wdGlvbmFsRW5kcG9pbnRzO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVJlcG9ydGluZ01vZGU/OiBib29sZWFuO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0IHByb3BlcnRpZXNcclxuICAvL0BPdXRwdXQoKSBoaWRlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBwdWJsaWMgX3BhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWVTZXJ2aWNlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVwb3J0aW5nU2VydmljZTogUmVwb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgaWRlbnRpdHlNYW5hZ2VyU2VydmljZTogSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBvdmVycmlkZSByZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tYWlsaW5nU2VydmljZTogTWFpbGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuXHJcbiAgICAvL2luaXQgY29sdW1uc1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9uYW1lJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAncmVwb3J0VHlwZU5hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3R5cGUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICdpc0RlZmF1bHQnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X2lzZGVmYXVsdCcsXHJcbiAgICAgICAgdHlwZTogRGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVksXHJcbiAgICAgICAgd2lkdGg6IG5ldyBDU1NTaXplUHJvcGVydHkoMTAsIENTU1VuaXRzLlBSRUNFTlQpLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3NlbmQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1zZW5kJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9zZW5kX3JlcG9ydF9ieV9lbWFpbCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZWRpdCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWZpbGUtZWRpdCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2VkaXQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3ZpZXcnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8nLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ192aWV3JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdleHBvcnQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1maWxlLWV4cG9ydCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taGVscCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2V4cG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnaW1wb3J0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktcGFwZXJjbGlwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi13YXJuaW5nJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWZhdWx0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19zZXRfZGVmYXVsdCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVsZXRlJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktdHJhc2gnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2RlbGV0ZV9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcycsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWFycm93LWNpcmNsZS1kb3duJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1oZWxwJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZXhwb3J0X2Rldl9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfbWFrZV9kZWZhdWx0X3JlcG9ydF9sYXlvdXQnLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfZGVmYXVsdF9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Gcm9tX0J1aWx0SW5fVGVtcGxhdGVzJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYXJyb3ctY2lyY2xlLXVwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5JyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3RvX215X2xpc3RfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBjaGVja0lmSXNEZXZNb2RlKCkge1xyXG4gICAgaWYgKFNlZ21lbnQucHJvZHVjdGlvbikge1xyXG4gICAgICBsZXQgYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAgIChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjb2wuZmllbGQgPT0gJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4LCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXggPVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucy5maW5kSW5kZXgoKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbC5maWVsZCA9PSAnZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMuc3BsaWNlKFxyXG4gICAgICAgICAgYnV0dG9uRGVsZXRlRGVmYXVsdFJlcG9ydEZpbGVJbmRleCxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlID0gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdhZG1pbmlzdHJhdGlvbicpO1xyXG4gICAgdGhpcy5jaGVja0lmSXNEZXZNb2RlKCk7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgLy8gaWYgKHRoaXMub3RoZXJGb3JtTmFtZSApIHtcclxuICAgIHRoaXMuaXNGcm9tRm9ybSA9IHRydWU7XHJcbiAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKDMsIDAsIHtcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgZmllbGQ6ICdwcmludCcsXHJcbiAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktcHJpbnQnLFxyXG4gICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zZWNvbmRhcnknLFxyXG4gICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3ByaW50JyxcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtTmFtZSAmJiB0aGlzLm90aGVyRm9ybU5hbWUgIT0gJ2FwcC1tYW5hZ2UtcmVwb3J0aW5nJykge1xyXG4gICAgICB0aGlzLmZvcm1OYW1lcyA9IFt7IGtleTogdGhpcy5vdGhlckZvcm1OYW1lLCB2YWx1ZTogdGhpcy5vdGhlckZvcm1OYW1lIH1dO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHlJZCA9IHRoaXMuY29uZmlnLmRhdGE/LmlkO1xyXG4gICAgdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlID0gdGhpcy5jb25maWc/LmRhdGE/LmN1c3RvbVJlcG9ydGluZ01vZGU7XHJcbiAgICB0aGlzLmh0dHBNZXRob2RUeXBlID0gdGhpcy5jb25maWc/LmRhdGE/Lmh0dHBNZXRob2RUeXBlO1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBhc3luYyBvblJlZnJlc2goKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5vdGhlckZvcm1OYW1lKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fdmlld1JlcG9ydChkYXRhLnVpZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHsgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQuY3VycmVudEZpbGVzWzBdO1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gZmlsZTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLnVwbG9hZFJlcG9ydEZpbGUodGhpcy50b1VwbG9hZEZpbGVEYXRhLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdXBsb2FkZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZD8uY2xlYXIoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25DbGVhcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvblJlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKGV2ZW50OiBCdXR0b25DbGlja1Jlc3VsdCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5maWVsZCkge1xyXG4gICAgICBjYXNlICdzZW5kJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzZW5kJyk7XHJcbiAgICAgICAgdGhpcy5fc2VuZFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2VkaXQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2VkaXQnKTtcclxuICAgICAgICB0aGlzLl9lZGl0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmlldycpO1xyXG4gICAgICAgIHRoaXMuX3ZpZXdEYXNoYm9hcmR0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWxldGUnKTtcclxuICAgICAgICB0aGlzLl9kZWxldGVSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdwcmludCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJpbnQnKTtcclxuICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZXhwb3J0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdleHBvcnQnKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWZhdWx0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWZhdWx0Jyk7XHJcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2ltcG9ydCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnaW1wb3J0Jyk7XHJcbiAgICAgICAgdGhpcy5faW1wb3J0VG9SZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnKTtcclxuICAgICAgICB0aGlzLl9hZGRGcm9tQnVpbHRJblRlbXBsYXRlcyhldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJyk7XHJcbiAgICAgICAgdGhpcy5fYWRkVG9CdWlsdEluVGVtcGxhdGVzKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncHJldmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJldmlldycpO1xyXG4gICAgICAgIHRoaXMucHJldmlld0J1aWx0SW5SZXBvcnRUZW1wbGF0ZShldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0Jzoge1xyXG4gICAgICAgIHRoaXMubWFrZVJlcG9ydERlZmF1bHRMYXlvdXQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZSc6IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGZpbGVOYW1lOiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0ID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZWxldGVEZWZhdWx0UmVwb3J0VGVtcGxhdGVGaWxlKGZvcm1OYW1lLCBmaWxlTmFtZSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVNlbGVjdGVkUmVwb3J0cygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydHMgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydHMgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmRlbGV0ZU11bHRpcGxlUmVwb3J0cyh0aGlzLnNlbGVjdGVkUmVwb3J0cylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk5ld1JlcG9ydCgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lKSB8fFxyXG4gICAgICB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQ6IG51bWJlcjtcclxuICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTGFyZ2U7XHJcbiAgICAgIGxldCBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IG1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgbW9kZTogTW9kZXMuY3JlYXRlLFxyXG4gICAgICAgICAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZSxcclxuICAgICAgICAgIGZyb21FbmRwb2ludDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcG9ydEJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgIGN1c3RvbVJlcG9ydGluZ01vZGU6IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgQWRkUmVwb3J0UG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgY29uZmlnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZhbCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVwb3J0Rm9yRmljaGUpIHtcclxuICAgICAgICAgIHZhbC5lbmRQb2ludFZhbHVlID0gdmFsPy5lbmRQb2ludFZhbHVlPy5yZXBsYWNlQWxsKCd7aWR9JywgdGhpcy5lbnRpdHlJZCk7ICAgICAgICAgIFxyXG4gICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUgPSB2YWw/LmVuZFBvaW50VmFsdWU/LnJlcGxhY2VBbGwoJ3tidXNpbmVzc0NsYXNzfScsIHRoaXMuYnVzaW5lc3NDbGFzcyk7XHJcblxyXG4gICAgICAgICAgdmFsLmVuZFBvaW50S2V5ID0gdmFsPy5lbmRQb2ludEtleT8ucmVwbGFjZUFsbCgne2lkfScsIHRoaXMuZW50aXR5SWQpO1xyXG4gICAgICAgICAgdmFsLmVuZFBvaW50S2V5ID0gdmFsPy5lbmRQb2ludEtleT8ucmVwbGFjZUFsbCgne2J1c2luZXNzQ2xhc3N9JywgdGhpcy5idXNpbmVzc0NsYXNzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmFkZFJlcG9ydFRvTW9kZWwoXHJcbiAgICAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvVGVtcGxhdGUoXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUsXHJcbiAgICAgICAgICAgICAgdmFsLm1vZHVsZSxcclxuICAgICAgICAgICAgICB2YWwudHJpT3JkcmUsXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydE5hbWVBYnJlZ2UsXHJcbiAgICAgICAgICAgICAgdmFsLmRpc3BsYXlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXBvcnRUb1RlbXBsYXRlSWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBsZXQgdXJsRGVzaWduZXI7XHJcbiAgICAgICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlZnJlc2goKVxyXG5cclxuICAgICAgICAgICAgICBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtZGVzaWduZXIvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkRGVzaWduZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9UZW1wbGF0ZX09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxEZXNpZ25lciwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fbmV3X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VNb2RhbCh2YWw6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZikge1xyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Gb3JtQ2hhbmdlKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxTYXZlQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaG93SW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBmaWxlIGltcG9ydFxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0ZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQuY3VycmVudEZpbGVzWzBdO1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSBmaWxlO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfSW1wb3J0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLnVwZGF0ZVJlcG9ydExheW91dChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlLFxyXG4gICAgICAgICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGFcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3VwbG9hZGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5pbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkPy5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaWRlSW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9DbGVhcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X1JlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVmcmVzaFJlcG9ydHMocmVmcmVzaFJlcG9ydExpc3Q6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lXHJcbiAgICAgID8gdGhpcy5vdGhlckZvcm1OYW1lXHJcbiAgICAgIDogdGhpcy5FRElUSU9OX1BFUlNPTk5BTElTRTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgaXRlbXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0cyhmb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlcG9ydHMgPSBpdGVtcy5tYXAoKHIpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ucixcclxuICAgICAgICAgIHJlcG9ydFR5cGVOYW1lOlxyXG4gICAgICAgICAgICBNYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQucmVwb3J0VHlwZUxhYmVsc1tyLnJlcG9ydFR5cGVdIHx8XHJcbiAgICAgICAgICAgICdVbmtub3duJyxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVmcmVzaFJlcG9ydExpc3QpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvL2dldCBkZWZhdWx0IHJlcG9ydCB0ZW1wbGF0ZXMgZm9yIHRoaXMgZm9ybVxyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXREZWZhdWx0UmVwb3J0VGVtcGxhdGUoZm9ybU5hbWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGEgPSByZXN1bHQ/LmRhdGE7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF92aWV3UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB1aWQpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQodWlkLCByZXBvcnQucmVwb3J0VHlwZSwgcmVwb3J0Py5yZXN0RW5kcG9pbnQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZCA9IGRhdGEudWlkO1xyXG4gICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuICAgICAgICAgIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmREZXNpZ25lcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1ByaW50fT0ke3JlcG9ydFRvVGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIF9zZW5kUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5YTWVkaXVtO1xyXG4gICAgbGV0IHNhdmVTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6IHsgc2F2ZVN1YmplY3QgfSxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodCxcclxuICAgIH07XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgVHNpU2VuZE1haWxDb21wb25lbnQsXHJcbiAgICAgIGNvbmZcclxuICAgICk7XHJcbiAgICBzYXZlU3ViamVjdC5zdWJzY3JpYmUoKHZhbDogRW1haWxJbmZvcm1hdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXZhbC50b0FkZHJlc3MpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXZhbC5zdWJqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgIHVpZCxcclxuICAgICAgICByZXBvcnQhLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgcmVwb3J0Py5yZXN0RW5kcG9pbnRcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5leHBvcnRSZXBvcnRGaWxlVG9QZGYocmVwb3J0VG9QcmludClcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sICdSZXBvcnQucGRmJywge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYXR0YWNobWVudHM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2gobmV3RmlsZSlcclxuICAgICAgICAgICAgICB0aGlzLl9tYWlsaW5nU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnNlbmRNYWlsKFxyXG4gICAgICAgICAgICAgICAgICB2YWwudG9BZGRyZXNzISxcclxuICAgICAgICAgICAgICAgICAgdmFsLnN1YmplY3QhLFxyXG4gICAgICAgICAgICAgICAgICB2YWwubWVzc2FnZSA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgdmFsLmNjQWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNlbnRTdWNjZXNzRnVsbHlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIF9lZGl0UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuXHJcbiAgICBpZiAocmVwb3J0ID09PSB1bmRlZmluZWQgfHwgcmVwb3J0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAuYWRkUmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICAgICAgICB1aWQsXHJcbiAgICAgICAgICByZXBvcnQucmVwb3J0VHlwZSxcclxuICAgICAgICAgIHJlcG9ydD8ucmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgcmVwb3J0Py5tb2R1bGUsXHJcbiAgICAgICAgICByZXBvcnQ/Lm9yZGVyLFxyXG4gICAgICAgICAgcmVwb3J0Py5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgcmVwb3J0Py5zaG9ydE5hbWUsXHJcbiAgICAgICAgICByZXBvcnQ/LmRpc3BsYXlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWRSZWdleCA9IC9bMC05YS1mQS1GLV17MzZ9L2c7XHJcbiAgICAgICAgICAgIHZhbHVlLnJlc3RFbmRwb2ludCA9IHZhbHVlPy5yZXN0RW5kcG9pbnQ/LnJlcGxhY2VBbGwoXHJcbiAgICAgICAgICAgICAgZ3VpZFJlZ2V4LFxyXG4gICAgICAgICAgICAgICd7aWR9J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5MYXJnZS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLkxhcmdlLmhlaWdodCxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBtb2RlOiBNb2Rlcy5lZGl0LFxyXG4gICAgICAgICAgICAgIGlzRWRpdGlvblBlcnNvbm5hbGlzZTogdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UsXHJcbiAgICAgICAgICAgICAgZnJvbUVuZHBvaW50OiB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgIDogcmVwb3J0Py5yZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0QnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCxcclxuICAgICAgICAgICAgY29uZmlnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgbW9kZWw6IFJlcG9ydFRvRWRpdFRlbXBsYXRlUGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgICAgIHJlcG9ydE5hbWU6IHZhbC5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICAgICAgdmFsPy5lbmRQb2ludFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlkXHJcbiAgICAgICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgICAgICBtb2R1bGU6IHZhbC5tb2R1bGUsXHJcbiAgICAgICAgICAgICAgb3JkZXI6IHZhbC50cmlPcmRyZSxcclxuICAgICAgICAgICAgICBzaG9ydE5hbWU6IHZhbC5yZXBvcnROYW1lQWJyZWdlLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHZhbC5kaXNwbGF5LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmVkaXRSZXBvcnRUb0VkaXRUZW1wbGF0ZShtb2RlbCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5leHQgOiBhc3luYyAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlZnJlc2goKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZUlkID0gdmFsdWUudWlkO1xyXG4gICAgICAgICAgICBsZXQgdXJsRGVzaWduZXI7XHJcbiAgICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYW5yZWRpcmVjdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYW5SZWRpcmVjdCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LWRlc2lnbmVyLWVkaXQvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZERlc2lnbmVyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvRWRpdH09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UtZWRpdC8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYW5yZWRpcmVjdCAmJiBKU09OLnBhcnNlKGNhbnJlZGlyZWN0KSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19lZGl0X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVsZXRlUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHVpZCAhPSBudWxsICYmIHVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5kZWxldGVSZXBvcnQodWlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0RGVmYXVsdFJlcG9ydChpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY29uZmlybV9zZXRfZGVmYXVsdF9yZXBvcnRfZmlsZScsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgaWQgIT0gbnVsbCAmJiBpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuc2V0RGVmYXVsdFJlcG9ydChpZCwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHBvcnRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh1aWQpIHtcclxuICAgICAgbGV0IHJlcG9ydE5hbWU6IHN0cmluZyA9ICdmaWxlLW5hbWUuanNvbic7XHJcbiAgICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT0gdWlkKTtcclxuICAgICAgaWYgKHJlcG9ydCkge1xyXG4gICAgICAgIHJlcG9ydE5hbWUgPSByZXBvcnQubmFtZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5leHBvcnRSZXBvcnRGaWxlKHVpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICAgICAgICB2YXIgZmlsZVVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICAgICAgICBsZXQgcmVwb3J0Um91dGUgPSBmaWxlVVJMO1xyXG4gICAgICAgICAgdmFyIGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5kb3dubG9hZCA9IHJlcG9ydE5hbWU7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHJlcG9ydFJvdXRlO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X2V4cG9ydGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW1wb3J0VG9SZXBvcnQoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlID0gaWQ7XHJcbiAgICAgIHRoaXMuX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld0pzb25EYXRhQ29ubmVjdGlvbigpOiBKc29uRGF0YUNvbm5lY3Rpb24ge1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgIT0gbnVsbCAmJiB0aGlzLm90aGVyRm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbmV3SnNvbkRhdGFDb25uZWN0aW9uOiBKc29uRGF0YUNvbm5lY3Rpb24gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7dGhpcy5vdGhlckZvcm1OYW1lfS1Kc29uRFNgLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdXJpOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgIGh0dHBSZXF1ZXN0Q29udGVudDogdW5kZWZpbmVkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIG5ld0pzb25EYXRhQ29ubmVjdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXJpIGhhdmUgbm90IGJlZW4gc2V0ICEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IG51bWJlcixcclxuICAgIHJlc3RFbmRwb2ludD86IHN0cmluZyxcclxuICAgIG1vZHVsZT86IHN0cmluZyxcclxuICAgIG9yZGVyPzogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzcGxheT86IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb1ByaW50IHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmICh1aWQgJiYgLyp0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiovIHRva2VuKSB7XHJcbiAgICAgICAgbGV0IG5ld1JlcG9ydFRvUHJpbnQ6IFJlcG9ydFRvUHJpbnQgPSB7XHJcbiAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgcmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5XHJcbiAgICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIGZvcm1OYW1lOiB0aGlzLm90aGVyRm9ybU5hbWUsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3UmVwb3J0VG9QcmludDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUsIGZvcm1FbmRwb2ludCBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb1RlbXBsYXRlKFxyXG4gICAgcmVwb3J0VHlwZTogVHNpUmVwb3J0VHlwZSxcclxuICAgIHJlcG9ydE5hbWU6IHN0cmluZyxcclxuICAgIHJlc3RFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgbW9kdWxlOiBzdHJpbmcsXHJcbiAgICBvcmRlcjogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lOiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9UZW1wbGF0ZSB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmIHRva2VuKSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDogcmVzdEVuZHBvaW50LFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keVxyXG4gICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGZvcm1FbnRpdHk6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy90aGlzLmdldEZvcm1OYW1lKHRoaXMub3RoZXJGb3JtTmFtZSksIC8vdGhpcy5vdGhlckZvcm1OYW1lLFxyXG4gICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgZGVzY3JpbWluYXRvclZhbHVlOiB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IsXHJcbiAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcG9ydFRvVGVtcGxhdGUpO1xyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDpcclxuICAgICAgICAgIHRoaXMuaXNSZXBvcnRGb3JGaWNoZSB8fCB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyByZXN0RW5kcG9pbnQhXHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCEsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBzb3J0aW5nOiBbeyBwcm9wZXJ0eTogJ1VJRCcsIG9yZGVyOiAnQVNDJyB9XSxcclxuICAgICAgICAgICAgZ2V0QWxsRGF0YTogdHJ1ZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgZm9ybUVudGl0eTogJycsXHJcbiAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4hLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgICAgLy8gdGhyb3cgRXJyb3IoJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSBvciBmb3JtRW5kcG9pbnQgaGF2ZSBub3QgYmVlbiBzZXQgIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IFRzaVJlcG9ydFR5cGUsXHJcbiAgICByZXN0RW5kUG9pbnQ/OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU/OiBzdHJpbmcsXHJcbiAgICBvcmRlcj86IG51bWJlcixcclxuICAgIHJlcG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvRWRpdFRlbXBsYXRlIHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG5cclxuICAgIGlmICh1c2VybmFtZSkge1xyXG4gICAgICBpZiAodWlkICYmIC8qdGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYqLyB0b2tlbikge1xyXG4gICAgICAgIGxldCByZXBvcnRUb0VkaXRUZW1wbGF0ZTogUmVwb3J0VG9FZGl0VGVtcGxhdGUgPSB7XHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICByZXN0RW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHlcclxuICAgICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgZm9ybU5hbWU6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy8gdGhpcy5nZXRGb3JtTmFtZSh0aGlzLm90aGVyRm9ybU5hbWUhKSxcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICByZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVwb3J0VG9FZGl0VGVtcGxhdGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAnc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4gb3Igc2VsZWN0ZWRSZXBvcnQgaGF2ZSBub3QgYmVlbiBzZXQgISdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aHJvdyBFcnJvcihcInByb3BlcnR5ICdVc2VyTmFtZSAnIG9mIGN1cnJlbnQgdXNlciBoYXZlIG5vdCBiZWVuIHNldCAhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaFJlcG9ydHNKb2IoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLndhcm4oJ1JlZnJlc2ggUmVwb3J0cyBKb2IgYXQgOiAnLCBuZXcgRGF0ZSgpKTtcclxuICAgIC8vXHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lICE9IG51bGwgJiYgdGhpcy5vdGhlckZvcm1OYW1lICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZ2V0UmVwb3J0cyh0aGlzLm90aGVyRm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydHMgPSBpdGVtcztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzRm9ybU5hbWUgIT0gdGhpcy5vdGhlckZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnJldHJpZXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgIH0sIDEwMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIGdldERlZmF1bHRSZXBvcnRUZW1wbGF0ZSgpe1xyXG4gIHByZXZpZXdCdWlsdEluUmVwb3J0VGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZyA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHt0aGlzLm90aGVyRm9ybU5hbWV9LyR7dGVtcGxhdGVOYW1lfWA7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8vYWRkIGEgcmVwb3J0IGZyb20gdGhlIGJ1aWx0LWluIG1vZGVsIHRvIHRoZSB1c2VyIGxpc3RcclxuICBfYWRkRnJvbUJ1aWx0SW5UZW1wbGF0ZXModGVtcGxhdGVOYW1lOiBhbnkpIHtcclxuICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRGcm9tQnVpbHRJblRlbXBsYXRlKGZvcm1OYW1lLCB0ZW1wbGF0ZU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuaXNTdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHJlcy5tc2cpO1xyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2Nhbm5vdF9hZGRfZnJvbV9idWlsdF9pbl90ZW1wbGF0ZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY2Fubm90X2FkZF9mcm9tX2J1aWx0X2luX3RlbXBsYXRlJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vYWRkIGEgcmVwb3J0IGZyb20gdGhlIHVzZXIgbGlzdCB0byBidWlsdC1pbiBtb2RlbCB0ZW1wbGF0ZVxyXG4gIF9hZGRUb0J1aWx0SW5UZW1wbGF0ZXMocmVwb3J0SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmFkZFRvQnVpbHRJblRlbXBsYXRlKHJlcG9ydElkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oXHJcbiAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19hZGRfdG9fYnVpbHRpbl90ZW1wbGF0ZV9yZXBvcnRfZmFpbGVkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBtYWtlIHJlcG9ydCBsYXlvdXQgYXMgZGVmYXVsdCBmb3IgYWxsIHJlcG9ydHNcclxuICBtYWtlUmVwb3J0RGVmYXVsdExheW91dChyZXBvcnRVaWQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiByZXBvcnRVaWQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLm1ha2VSZXBvcnRMYXlvdXRBc0RlZmF1bHRMYXlvdXQocmVxdWVzdCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcygnc2hhcmVkX3JlcG9ydGluZ19zdWNjZXNzX3VwZGF0ZWQnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2Fybignc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJyk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kIHJlZ2lvblxyXG5cclxuICBfdmlld0Rhc2hib2FyZHQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKCFyZXBvcnQpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXBvcnRUZW1wbGF0ZUlkID0gcmVwb3J0LnVpZDtcclxuICAgIGxldCB0ZW5hbnRVaWQgPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgbGV0IHVybFZpZXdlciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkVmlld2VyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRlbXBsYXRlfT0ke3JlcG9ydFRlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCc+Pj4gX3ZpZXdEYXNoYm9hcmR0IH4gdXJsVmlld2VyOicsIHVybFZpZXdlcik7XHJcblxyXG4gICAgd2luZG93Lm9wZW4odXJsVmlld2VyLCAnX2JsYW5rJyk7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgKTtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gIDxkaXYgKmJ1c3k9XCJpc2xvYWRpbmdcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImdyaWQgY29sLTEwXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc0Zyb21Gb3JtOyBlbHNlIG5vdEZyb21Gb3JtXCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0yXCIgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfZm9ybSdcIj5cclxuICAgICAgICA8L1RzaS1MYWJlbD5cclxuICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImNvbC0xMCB0c2ktY29tcG9uZW50XCIgY2xhc3M9XCJ0c2ktY29tcG9uZW50XCIgc3R5bGVDbGFzcz1cInRzaS1jb21wb25lbnRcIiBhcHBlbmRUcD1cImJvZHlcIlxyXG4gICAgICAgICAgW29wdGlvbnNdPVwiZm9ybU5hbWVzXCIgW25nTW9kZWxdPVwib3RoZXJGb3JtTmFtZVwiIG9wdGlvbkxhYmVsPVwidmFsdWVcIiBvcHRpb25WYWx1ZT1cImtleVwiIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBmaWx0ZXJCeT1cInZhbHVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJ7eydzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9mb3JtJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cclxuICAgICAgICA8L3AtZHJvcGRvd24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNub3RGcm9tRm9ybT5cclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0yXCIgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfZm9ybSdcIj5cclxuICAgICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtMTBcIiBbKGJpbmQpXT1cIm90aGVyRm9ybU5hbWVcIiAoYmluZENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cImdldEZvcm1OYW1lc0VuZHBvaW50XCIgW2VsZW1lbnRTb3VyY2VVcmxdPVwiZ2V0Rm9ybU5hbWVzRW5kcG9pbnQgXCIgW2lzRmlsdGVyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1iLTQgZ2FwLTJcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDxUc2ktQnV0dG9uIFt0ZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX2FkZF9yZXBvcnQnIHwgbG9jYWxpemVcIiBpY29uPVwicC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnQgcGkgcGktcGx1c1wiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1zdWNjZXNzIG1sLTIgbXItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBuZy1zdGFyLWluc2VydGVkIHAtYnV0dG9uLWxhYmVsXCIgKGNsaWNrKT1cIm9uTmV3UmVwb3J0KClcIj48L1RzaS1CdXR0b24+XHJcbiAgICAgIDxUc2ktQnV0dG9uIFtidXR0b25UeXBlXT1cImJ1dHRvblR5cGUuU3VibWl0XCIgW3RleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfZGVsZXRlX3JlcG9ydCcgfCBsb2NhbGl6ZVwiIGljb249XCJwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdCBwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1kYW5nZXIgcC1idXR0b24gcC1jb21wb25lbnQgbmctc3Rhci1pbnNlcnRlZCBwLWJ1dHRvbi1sYWJlbFwiIChjbGljayk9XCJvbkRlbGV0ZVNlbGVjdGVkUmVwb3J0cygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkUmVwb3J0cyB8fCAhc2VsZWN0ZWRSZXBvcnRzLmxlbmd0aFwiPjwvVHNpLUJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgIDxwLWZpbGVVcGxvYWQgI2ZpbGVVcGxvYWQgbmFtZT1cImRlbW9bXVwiIChvbkJlZm9yZVVwbG9hZCk9XCJvbkltcG9ydEZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU2VsZWN0KT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiAob25DbGVhcik9XCJvbkNsZWFyKCRldmVudClcIiAob25SZW1vdmUpPVwib25SZW1vdmUoJGV2ZW50KVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vanNvblwiIFttYXhGaWxlU2l6ZV09XCIxMDAwMDAwMFwiIFxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2hvb3NlSWNvbl09XCIncGkgcGktcGFwZXJjbGlwJ1wiIGNhbmNlbFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIiB1cGxvYWRTdHlsZUNsYXNzPVwicC1idXR0b24taGVscFwiXHJcbiAgICAgICAgcmVtb3ZlU3R5bGVDbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiIFtjaG9vc2VMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFt1cGxvYWRMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19pbXBvcnRfcmVwb3J0JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2FuY2VsTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2FuY2VsX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRvVXBsb2FkRmlsZURhdGFcIiBwVGVtcGxhdGU9XCJmaWxldXBsb2FkLWNvbnRlbnRcIj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L3AtZmlsZVVwbG9hZD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gPFRzaS1EaXNwbGF5LUdyaWQgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXHJcbiAgICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX215X3RlbXBsYXRlJ1wiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCIgW2dyaWREYXRhXT1cInJlcG9ydHNcIiBrZXk9XCJ1aWRcIlxyXG4gICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCIgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFJlcG9ydHNcIlxyXG4gICAgW3Nob3dGaWx0ZXJzXT1cImZhbHNlXCJcclxuICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiPlxyXG4gIDwvVHNpLURpc3BsYXktR3JpZD4gLS0+XHJcblxyXG5cclxuICA8IS0tPGRpdiBzdHlsZT1cInRleHQtYWxpZ246bGVmdFwiPiA8cC1idXR0b24gaWNvbj1cInBpIHBpLXJlZnJlc2hcIiAgW3BUb29sdGlwXT1cIidzaGFyZWRfcmVwb3J0aW5nX3JlZnJlc2gnIHwgbG9jYWxpemVcIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiAgbGFiZWw9XCJSZWxvYWRcIiBzZXZlcml0eT1cImhlbHBcIiAoY2xpY2spPVwib25SZWZyZXNoKClcIiAvPiA8L2Rpdj5cclxuICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXJlZnJlc2hcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWRcIiBzdHlsZUNsYXNzPVwicC1idXR0b24tdGV4dFwiIC8+XHJcbi0tPlxyXG4gIFxyXG4gIDxUc2ktQnV0dG9uIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWQgcC1idXR0b24tcm91bmRlZCBtYi0zIG1sLTNcIiAgXHJcbiAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfcmVmcmVzaCdcIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgaWNvbj1cInBpIHBpLXJlZnJlc2hcIiAoY2xpY2spPVwib25SZWZyZXNoKClcIj48L1RzaS1CdXR0b24+XHJcblxyXG4gIDx0c2ktdmlldy1ncmlkIFxyXG4gICAgW3NvcnRNb2RlXT1cInNvcnRNb2RlUmVmLlNpbmdsZVwiXHJcbiAgICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX215X3RlbXBsYXRlJ1wiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCIgW2dyaWREYXRhXT1cInJlcG9ydHNcIiBrZXk9XCJ1aWRcIlxyXG4gICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCIgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFJlcG9ydHNcIlxyXG4gICAgW2dldERhdGFGcm9tQXBpXT1cImZhbHNlXCJcclxuICAgIFtmb3JtTmFtZV09XCInbXktcmVwb3J0LXRlbXBsYXRlcydcIlxyXG4gICAgPlxyXG4gIDwvdHNpLXZpZXctZ3JpZD5cclxuICA8YnIvPlxyXG4gICA8IS0tIERlZmF1bHQgVGVtcGxhdGUgLS0+XHJcbiAgIDwhLS0gPFRzaS1EaXNwbGF5LUdyaWQgXHJcbiAgIFtzaG93SGVhZGVyXT1cInRydWVcIiBcclxuICAgW2hlYWRlcl09XCInc2hhcmVkX3JlcG9ydGluZ19CdWlsdEluX3RlbXBsYXRlJ1wiXHJcbiAgIFtzaG93U3VtbWFyeUZvb3Rlcl09XCJmYWxzZVwiIFxyXG4gICBbcGFnaW5hdG9yXT1cImZhbHNlXCIgXHJcbiAgIFtzaG93RmlsdGVyc109XCJmYWxzZVwiIFxyXG4gICBbY29sdW1uc109XCJkZWZhdWx0VGVtcGxhdGVDb2x1bW5zXCIgXHJcbiAgIFtncmlkRGF0YV09XCJkZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhXCIgXHJcbiAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgIGtleT1cIm5hbWVcIj5cclxuICA8L1RzaS1EaXNwbGF5LUdyaWQ+IC0tPlxyXG5cclxuICBcclxuICA8dHNpLXZpZXctZ3JpZFxyXG4gICBbc29ydE1vZGVdPVwic29ydE1vZGVSZWYuU2luZ2xlXCJcclxuICAgW2hlYWRlcl09XCInc2hhcmVkX3JlcG9ydGluZ19CdWlsdEluX3RlbXBsYXRlJ1wiXHJcbiAgIFtjb2x1bW5zXT1cImRlZmF1bHRUZW1wbGF0ZUNvbHVtbnNcIiBcclxuICAgW2dyaWREYXRhXT1cImRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGFcIiBcclxuICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgW2dldERhdGFGcm9tQXBpXT1cImZhbHNlXCJcclxuICAgW2Zvcm1OYW1lXT1cIidkZWZhdWx0LW15LXJlcG9ydC10ZW1wbGF0ZXMnXCJcclxuICAga2V5PVwibmFtZVwiPlxyXG4gIDwvdHNpLXZpZXctZ3JpZD5cclxuXHJcblxyXG5cclxuXHJcbiAgXHJcblxyXG4gIDwhLS0gZGlhbG9nIHRvIGltcG9ydCBmaWxlIHRvIHJlcG9ydCAtLT5cclxuICA8cC1kaWFsb2cgaGVhZGVyPVwie3snc2hhcmVkX3JlcG9ydGluZ19zZWxlY3RfZmlsZV90b19pbXBvcnRfaW50b19yZXBvcnQnIHwgbG9jYWxpemV9fVwiIFsodmlzaWJsZSldPVwiaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGVcIiBbc3R5bGVdPVwie3dpZHRoOiAnNTB2dyd9XCI+XHJcbiAgICA8IS0tIDxUc2ktTW9kYWwtSGVhZGVyIChvbkNsb3NlQ2xpY2spPVwib25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbENhbmNlbENsaWNrKClcIiBbaW5wdXRUaXRsZV09XCInc2hhcmVkX3JlcG9ydGluZ19zZWxlY3RfZmlsZV90b19pbXBvcnRfaW50b19yZXBvcnQnXCI+PC9Uc2ktTW9kYWwtSGVhZGVyPiAtLT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiPlxyXG4gICAgICA8cC1maWxlVXBsb2FkICNpbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkIG5hbWU9XCJpbXBvcnRGaWxlVG9SZXBvcnRcIiAob25CZWZvcmVVcGxvYWQpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfSW1wb3J0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3QpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfRmlsZVNlbGVjdGVkKCRldmVudClcIiAob25DbGVhcik9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9DbGVhcigkZXZlbnQpXCIgKG9uUmVtb3ZlKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X1JlbW92ZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi9qc29uXCIgW21heEZpbGVTaXplXT1cIjEwMDAwMDAwXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX2xpbWl0X21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX2xpbWl0X21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2Nob29zZUljb25dPVwiJ3BpIHBpLXBhcGVyY2xpcCdcIiBjYW5jZWxTdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCIgdXBsb2FkU3R5bGVDbGFzcz1cInAtYnV0dG9uLWhlbHBcIlxyXG4gICAgICAgIHJlbW92ZVN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1kYW5nZXJcIiBbY2hvb3NlTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbdXBsb2FkTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0X3JlcG9ydCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2NhbmNlbExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2NhbmNlbF9jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGFcIiBwVGVtcGxhdGU9XCJmaWxldXBsb2FkLWNvbnRlbnRcIj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L3AtZmlsZVVwbG9hZD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPCEtLSA8VHNpLU1vZGFsLUZvb3RlciAob25DYW5jZWxDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKVwiXHJcbiAgICAob25TYXZlQ2xpY2spPVwib25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbFNhdmVDbGljaygpXCJcclxuICAgIFtzYXZlRGlzYWJsZWRdPVwiIXRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVwiPjwvVHNpLU1vZGFsLUZvb3Rlcj4gLS0+XHJcblxyXG48L3AtZGlhbG9nPlxyXG48L2Rpdj5cclxuIl19
1055
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixZQUFZLEVBRVosYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUwsZUFBZSxHQUVoQixNQUFNLGtCQUFrQixDQUFDO0FB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aUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAncHJpbWVuZy9maWxldXBsb2FkJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBxdWVyeVBhcmFtTmFtZXNDb25zdCB9IGZyb20gJy4uLy4uL2NvbnN0cy9xdWVyeVBhcmFtTmFtZXMuY29uc3QnO1xyXG5pbXBvcnQgeyBTZWdtZW50IH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cyc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ0VuZHBvaW50cyB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMvcmVwb3J0aW5nLWVuZHBvaW50cyc7XHJcbmltcG9ydCB7XHJcbiAgQ1NTVW5pdHMsXHJcbiAgRGlzcGxheVR5cGVzLFxyXG4gIEdyaWRTZWxlY3Rpb25Nb2RlLFxyXG4gIEdyaWRTb3J0TW9kZSxcclxuICBIdHRwTWV0aG9kVHlwZSxcclxuICBNb2RhbFNpemVFbnVtLFxyXG4gIE1vZGVzLFxyXG4gIFRzaVJlcG9ydFR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYnV0dG9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHtcclxuICBCdXR0b25DbGlja1Jlc3VsdCxcclxuICBDU1NTaXplUHJvcGVydHksXHJcbiAgR3JpZENvbHVtbixcclxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBKc29uRGF0YUNvbm5lY3Rpb24sXHJcbiAgS2V5VmFsdWVQYWlyLFxyXG4gIE9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGUsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGVQYXlsb2FkLFxyXG4gIFJlcG9ydFRvUHJpbnQsXHJcbiAgUmVwb3J0VG9UZW1wbGF0ZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcHBSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvYXBwLnJvdXRlcyc7XHJcbmltcG9ydCB7IE1hbmFnZVJlcG9ydGluZ1JvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9tYW5hZ2UtcmVwb3J0aW5nLnJvdXRlcyc7XHJcbmltcG9ydCB7XHJcbiAgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gIElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgUmVwb3J0aW5nU2VydmljZSxcclxuICBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gIFRzaU1vZGFsU2VydmljZSxcclxuICBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXJlcG9ydC1wb3B1cC9hZGQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVtYWlsSW5mb3JtYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbWFpbC1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IE1haWxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb24vbWFpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpU2VuZE1haWxDb21wb25lbnQgfSBmcm9tICcuLi90c2ktc2VuZC1tYWlsL3RzaS1zZW5kLW1haWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLW1hbmFnZS1yZXBvcnRpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uYXBwUHJvdmlkZXJzXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudFxyXG4gIGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG5cclxuICByZWFkb25seSBFRElUSU9OX1BFUlNPTk5BTElTRSA9ICdhcHAtZWRpdGlvbi1wZXJzb25uYWxpc2UnO1xyXG4gIHJlcG9ydHM6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbjogSnNvbkRhdGFDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgcmVwb3J0VG9QcmludElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgdG9VcGxvYWRGaWxlRGF0YTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIGNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGlzRnJvbUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtTmFtZXM6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkUmVwb3J0czogbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgZ2V0Rm9ybU5hbWVzRW5kcG9pbnQ6IHN0cmluZyA9IFJlcG9ydGluZ0VuZHBvaW50cy5nZXRBdmFpbGFibGVGb3JtTmFtZXMoKTtcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHMgPSBbJ25hbWUnXTtcclxuICByZWZyZXNoSm9iVGltZU91dDogYW55O1xyXG4gIHByZXZpb3VzRm9ybU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIGlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YTogc3RyaW5nW10gPSBbXTtcclxuICBkZWZhdWx0VGVtcGxhdGVDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbnRpdHlJZD86IHN0cmluZztcclxuICByZXBvcnREaXNjcmltaW5hdG9yPzogYW55O1xyXG4gIGh0dHBNZXRob2RUeXBlPzogSHR0cE1ldGhvZFR5cGU7XHJcbiAgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgc29ydE1vZGVSZWYgPSBHcmlkU29ydE1vZGVcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcmVwb3J0VHlwZUxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIFtUc2lSZXBvcnRUeXBlLkRhc2hib2FyZF06ICdEYXNoYm9hcmQnLFxyXG4gICAgW1RzaVJlcG9ydFR5cGUuTGlzdF06ICdFbmQgdXNlcicsXHJcbiAgICBbVHNpUmVwb3J0VHlwZS5SVEZdOiAnUlRGJyxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9pc1JlcG9ydEZvckZpY2hlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc1JlcG9ydEZvckZpY2hlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgIXRoaXMub3RoZXJGb3JtRW5kcG9pbnQ/LmluY2x1ZGVzKCdnZXRhbGxwYWdlZCcpICYmICF0aGlzLnJlcXVlc3REYXRhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZCcpIGZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIEBWaWV3Q2hpbGQoJ2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQnKVxyXG4gIGltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JNZXNzYWdlS2V5OiBzdHJpbmcgPSAnc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYXNoYm9hcmRNb2R1bGVSb3V0ZSA9IGAke0FwcFJvdXRlcy5hcHB9LyR7QXBwUm91dGVzLmRhc2hib2FyZH1gO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGJ1dHRvblR5cGUgPSBCdXR0b25UeXBlO1xyXG4gIC8vIHBhcmFtZXRyZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSA9IG5ldyBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllKCk7XHJcbiAgLy8jcmVnaW9uIElucHV0IHByb3BlcnRpZXNcclxuICBASW5wdXQoKSBvdGhlckZvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBvdGhlckZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBjdXN0b21SZXBvcnRpbmdNb2RlPzogYm9vbGVhbjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgLy9AT3V0cHV0KCkgaGlkZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gcHVibGljIF9wYXJhbWV0cmVzQXBwbGljYXRpb25QYWllU2VydmljZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlcG9ydGluZ1NlcnZpY2U6IFJlcG9ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlkZW50aXR5TWFuYWdlclNlcnZpY2U6IElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGluZ1NlcnZpY2U6IE1haWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcblxyXG4gICAgLy9pbml0IGNvbHVtbnNcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnaXNEZWZhdWx0JyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9pc2RlZmF1bHQnLFxyXG4gICAgICAgIHR5cGU6IERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZLFxyXG4gICAgICAgIHdpZHRoOiBuZXcgQ1NTU2l6ZVByb3BlcnR5KDEwLCBDU1NVbml0cy5QUkVDRU5UKSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdzZW5kJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktc2VuZCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfc2VuZF9yZXBvcnRfYnlfZW1haWwnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2VkaXQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1maWxlLWVkaXQnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3MnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19lZGl0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICd2aWV3JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktZXllJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfdmlldycsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZXhwb3J0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktZmlsZS1leHBvcnQnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19leHBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2ltcG9ydCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24td2FybmluZycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2ttYXJrLWZpbGwnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0JyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfc2V0X2RlZmF1bHQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2RlbGV0ZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1hcnJvdy1jaXJjbGUtZG93bicsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taGVscCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2V4cG9ydF9kZXZfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdNYWtlX2RlZmF1bHRfcmVwb3J0X2xheW91dCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2ttYXJrLWZpbGwnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX21ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0JyxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X25hbWUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICdyZXBvcnRUeXBlTmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdHlwZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS10cmFzaCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZGVsZXRlX2RlZmF1bHRfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcycsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWFycm93LWNpcmNsZS11cCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tcHJpbWFyeScsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2FkZF90b19teV9saXN0X3JlcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgY2hlY2tJZklzRGV2TW9kZSgpIHtcclxuICAgIGlmIChTZWdtZW50LnByb2R1Y3Rpb24pIHtcclxuICAgICAgbGV0IGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChcclxuICAgICAgICAoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY29sLmZpZWxkID09ICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShidXR0b25BZEJ1aWx0aW5UZW1wbGF0ZXNJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4ID1cclxuICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMuZmluZEluZGV4KChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjb2wuZmllbGQgPT0gJ2RlbGV0ZURlZmF1bHRSZXBvcnRGaWxlJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zLnNwbGljZShcclxuICAgICAgICAgIGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXgsXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9oYW5kbGUgTGlmZWN5Y2xlIEhvb2tzXHJcbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZSA9IHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnYWRtaW5pc3RyYXRpb24nKTtcclxuICAgIHRoaXMuY2hlY2tJZklzRGV2TW9kZSgpO1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIC8vIGlmICh0aGlzLm90aGVyRm9ybU5hbWUgKSB7XHJcbiAgICB0aGlzLmlzRnJvbUZvcm0gPSB0cnVlO1xyXG4gICAgdGhpcy5jb2x1bW5zLnNwbGljZSgzLCAwLCB7XHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIGZpZWxkOiAncHJpbnQnLFxyXG4gICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXByaW50JyxcclxuICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5JyxcclxuICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9wcmludCcsXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUgJiYgdGhpcy5vdGhlckZvcm1OYW1lICE9ICdhcHAtbWFuYWdlLXJlcG9ydGluZycpIHtcclxuICAgICAgdGhpcy5mb3JtTmFtZXMgPSBbeyBrZXk6IHRoaXMub3RoZXJGb3JtTmFtZSwgdmFsdWU6IHRoaXMub3RoZXJGb3JtTmFtZSB9XTtcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5SWQgPSB0aGlzLmNvbmZpZy5kYXRhPy5pZDtcclxuICAgIHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSA9IHRoaXMuY29uZmlnPy5kYXRhPy5jdXN0b21SZXBvcnRpbmdNb2RlO1xyXG4gICAgdGhpcy5odHRwTWV0aG9kVHlwZSA9IHRoaXMuY29uZmlnPy5kYXRhPy5odHRwTWV0aG9kVHlwZTtcclxuICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlZnJlc2hKb2JUaW1lT3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hKb2JUaW1lT3V0KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgYXN5bmMgb25SZWZyZXNoKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvblByaW50RGVmYXVsdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXREZWZhdWx0UmVwb3J0KHRoaXMub3RoZXJGb3JtTmFtZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgLy8gbGV0IGRlZmF1bHRSZXBvcnRJZDogc3RyaW5nID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMuX3ZpZXdSZXBvcnQoZGF0YS51aWQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7IH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50LmN1cnJlbnRGaWxlc1swXTtcclxuICAgIHRoaXMudG9VcGxvYWRGaWxlRGF0YSA9IGZpbGU7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC51cGxvYWRSZXBvcnRGaWxlKHRoaXMudG9VcGxvYWRGaWxlRGF0YSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3VwbG9hZGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmZpbGVVcGxvYWQ/LmNsZWFyKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uQ2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZChldmVudDogQnV0dG9uQ2xpY2tSZXN1bHQpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoZXZlbnQuZmllbGQpIHtcclxuICAgICAgY2FzZSAnc2VuZCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc2VuZCcpO1xyXG4gICAgICAgIHRoaXMuX3NlbmRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdlZGl0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlZGl0Jyk7XHJcbiAgICAgICAgdGhpcy5fZWRpdFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ZpZXcnKTtcclxuICAgICAgICB0aGlzLl92aWV3RGFzaGJvYXJkdChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGVsZXRlJyk7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlUmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncHJpbnQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ByaW50Jyk7XHJcbiAgICAgICAgdGhpcy5fdmlld1JlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2V4cG9ydCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXhwb3J0Jyk7XHJcbiAgICAgICAgdGhpcy5fZXhwb3J0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVmYXVsdCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGVmYXVsdCcpO1xyXG4gICAgICAgIHRoaXMuX3NldERlZmF1bHRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdpbXBvcnQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2ltcG9ydCcpO1xyXG4gICAgICAgIHRoaXMuX2ltcG9ydFRvUmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0FkZF9Gcm9tX0J1aWx0SW5fVGVtcGxhdGVzJyk7XHJcbiAgICAgICAgdGhpcy5fYWRkRnJvbUJ1aWx0SW5UZW1wbGF0ZXMoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcycpO1xyXG4gICAgICAgIHRoaXMuX2FkZFRvQnVpbHRJblRlbXBsYXRlcyhldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3ByZXZpZXcnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ByZXZpZXcnKTtcclxuICAgICAgICB0aGlzLnByZXZpZXdCdWlsdEluUmVwb3J0VGVtcGxhdGUoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdNYWtlX2RlZmF1bHRfcmVwb3J0X2xheW91dCc6IHtcclxuICAgICAgICB0aGlzLm1ha2VSZXBvcnREZWZhdWx0TGF5b3V0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUnOiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVEZWZhdWx0UmVwb3J0RmlsZShldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZWxldGVEZWZhdWx0UmVwb3J0RmlsZShmaWxlTmFtZTogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgZm9ybU5hbWUgPSB0aGlzLm90aGVyRm9ybU5hbWUgPz8gdGhpcy5FRElUSU9OX1BFUlNPTk5BTElTRTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZGVsZXRlRGVmYXVsdFJlcG9ydFRlbXBsYXRlRmlsZShmb3JtTmFtZSwgZmlsZU5hbWUpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25EZWxldGVTZWxlY3RlZFJlcG9ydHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXN1bHQgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRzICE9IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRzICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZWxldGVNdWx0aXBsZVJlcG9ydHModGhpcy5zZWxlY3RlZFJlcG9ydHMpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25OZXdSZXBvcnQoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgICh0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSkgfHxcclxuICAgICAgdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2VcclxuICAgICkge1xyXG4gICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZUlkOiBudW1iZXI7XHJcbiAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkxhcmdlO1xyXG4gICAgICBsZXQgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIG1vZGU6IE1vZGVzLmNyZWF0ZSxcclxuICAgICAgICAgIGlzRWRpdGlvblBlcnNvbm5hbGlzZTogdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UsXHJcbiAgICAgICAgICBmcm9tRW5kcG9pbnQ6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXBvcnRCdXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICBjdXN0b21SZXBvcnRpbmdNb2RlOiB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgIEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIGNvbmZpZ1xyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgICAgICBjb25zb2xlLmxvZyh2YWwpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlKSB7XHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSA9IHZhbD8uZW5kUG9pbnRWYWx1ZT8ucmVwbGFjZUFsbCgne2lkfScsIHRoaXMuZW50aXR5SWQpOyAgICAgICAgICBcclxuICAgICAgICAgIHZhbC5lbmRQb2ludFZhbHVlID0gdmFsPy5lbmRQb2ludFZhbHVlPy5yZXBsYWNlQWxsKCd7YnVzaW5lc3NDbGFzc30nLCB0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG5cclxuICAgICAgICAgIHZhbC5lbmRQb2ludEtleSA9IHZhbD8uZW5kUG9pbnRLZXk/LnJlcGxhY2VBbGwoJ3tpZH0nLCB0aGlzLmVudGl0eUlkKTtcclxuICAgICAgICAgIHZhbC5lbmRQb2ludEtleSA9IHZhbD8uZW5kUG9pbnRLZXk/LnJlcGxhY2VBbGwoJ3tidXNpbmVzc0NsYXNzfScsIHRoaXMuYnVzaW5lc3NDbGFzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgIC5hZGRSZXBvcnRUb01vZGVsKFxyXG4gICAgICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb1RlbXBsYXRlKFxyXG4gICAgICAgICAgICAgIHZhbC5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgICAgIHZhbC5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgICAgIHZhbC5lbmRQb2ludFZhbHVlLFxyXG4gICAgICAgICAgICAgIHZhbC5tb2R1bGUsXHJcbiAgICAgICAgICAgICAgdmFsLnRyaU9yZHJlLFxyXG4gICAgICAgICAgICAgIHZhbC5yZXBvcnROYW1lQWJyZWdlLFxyXG4gICAgICAgICAgICAgIHZhbC5kaXNwbGF5XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcmVwb3J0VG9UZW1wbGF0ZUlkID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25SZWZyZXNoKClcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LWRlc2lnbmVyLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZERlc2lnbmVyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvVGVtcGxhdGV9PSR7cmVwb3J0VG9UZW1wbGF0ZUlkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLlJURikge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX25ld19yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWYpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRm9ybUNoYW5nZSgpIHtcclxuICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9oaWRlSW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsU2F2ZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2hvd0ltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gIH1cclxuICAvLyNyZWdpb24gZmlsZSBpbXBvcnRcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50LmN1cnJlbnRGaWxlc1swXTtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gZmlsZTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0ltcG9ydEZpbGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC51cGRhdGVSZXBvcnRMYXlvdXQoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0VG9VcGRhdGVGcm9tRmlsZSxcclxuICAgICAgICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF91cGxvYWRlZF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZD8uY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5faGlkZUltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfQ2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgYXN5bmMgX3JlZnJlc2hSZXBvcnRzKHJlZnJlc2hSZXBvcnRMaXN0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZVxyXG4gICAgICA/IHRoaXMub3RoZXJGb3JtTmFtZVxyXG4gICAgICA6IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGl0ZW1zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydHMoZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXBvcnRzID0gaXRlbXMubWFwKChyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnIsXHJcbiAgICAgICAgICByZXBvcnRUeXBlTmFtZTpcclxuICAgICAgICAgICAgTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50LnJlcG9ydFR5cGVMYWJlbHNbci5yZXBvcnRUeXBlXSB8fFxyXG4gICAgICAgICAgICAnVW5rbm93bicsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZnJlc2hSZXBvcnRMaXN0KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy9nZXQgZGVmYXVsdCByZXBvcnQgdGVtcGxhdGVzIGZvciB0aGlzIGZvcm1cclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlcG9ydFRlbXBsYXRlKGZvcm1OYW1lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhID0gcmVzdWx0Py5kYXRhO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfdmlld1JlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgLy8gaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdWlkKSB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAuYWRkUmVwb3J0VG9QcmludChcclxuICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KHVpZCwgcmVwb3J0LnJlcG9ydFR5cGUsIHJlcG9ydD8ucmVzdEVuZHBvaW50KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQgPSBkYXRhLnVpZDtcclxuICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcbiAgICAgICAgICBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtdmlld2VyLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkVmlld2VyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvUHJpbnR9PSR7cmVwb3J0VG9UZW1wbGF0ZUlkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB3aW5kb3cub3Blbih1cmxEZXNpZ25lciwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgX3NlbmRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcbiAgICBpZiAocmVwb3J0ID09PSB1bmRlZmluZWQgfHwgcmVwb3J0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLlhNZWRpdW07XHJcbiAgICBsZXQgc2F2ZVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YTogeyBzYXZlU3ViamVjdCB9LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6IG1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICBUc2lTZW5kTWFpbENvbXBvbmVudCxcclxuICAgICAgY29uZlxyXG4gICAgKTtcclxuICAgIHNhdmVTdWJqZWN0LnN1YnNjcmliZSgodmFsOiBFbWFpbEluZm9ybWF0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdmFsLnRvQWRkcmVzcykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdmFsLnN1YmplY3QpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVwb3J0VG9QcmludCA9IHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgdWlkLFxyXG4gICAgICAgIHJlcG9ydCEucmVwb3J0VHlwZSxcclxuICAgICAgICByZXBvcnQ/LnJlc3RFbmRwb2ludFxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZihyZXBvcnRUb1ByaW50KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jIChibG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ1JlcG9ydC5wZGYnLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBhdHRhY2htZW50czogRmlsZVtdID0gW107XHJcbiAgICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChuZXdGaWxlKVxyXG4gICAgICAgICAgICAgIHRoaXMuX21haWxpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuc2VuZE1haWwoXHJcbiAgICAgICAgICAgICAgICAgIHZhbC50b0FkZHJlc3MhLFxyXG4gICAgICAgICAgICAgICAgICB2YWwuc3ViamVjdCEsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5tZXNzYWdlID8/IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICB2YWwuY2NBZGRyZXNzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2VudFN1Y2Nlc3NGdWxseVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZG93bmxvYWRpbmcgdGhlIFBERicsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX2VkaXRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG5cclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRSZXBvcnRUb0VkaXRUZW1wbGF0ZShcclxuICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb0VkaXRUZW1wbGF0ZShcclxuICAgICAgICAgIHVpZCxcclxuICAgICAgICAgIHJlcG9ydC5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgcmVwb3J0Py5yZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgICByZXBvcnQ/Lm1vZHVsZSxcclxuICAgICAgICAgIHJlcG9ydD8ub3JkZXIsXHJcbiAgICAgICAgICByZXBvcnQ/LnJlcG9ydE5hbWUsXHJcbiAgICAgICAgICByZXBvcnQ/LnNob3J0TmFtZSxcclxuICAgICAgICAgIHJlcG9ydD8uZGlzcGxheVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2codmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzUmVwb3J0Rm9yRmljaGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3VpZFJlZ2V4ID0gL1swLTlhLWZBLUYtXXszNn0vZztcclxuICAgICAgICAgICAgdmFsdWUucmVzdEVuZHBvaW50ID0gdmFsdWU/LnJlc3RFbmRwb2ludD8ucmVwbGFjZUFsbChcclxuICAgICAgICAgICAgICBndWlkUmVnZXgsXHJcbiAgICAgICAgICAgICAgJ3tpZH0nXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLkxhcmdlLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTGFyZ2UuaGVpZ2h0LFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgICAgIG1vZGU6IE1vZGVzLmVkaXQsXHJcbiAgICAgICAgICAgICAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZSxcclxuICAgICAgICAgICAgICBmcm9tRW5kcG9pbnQ6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICAgICAgOiByZXBvcnQ/LnJlc3RFbmRwb2ludCxcclxuICAgICAgICAgICAgICByZXBvcnRCdXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgIEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBjb25maWdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBtb2RlbDogUmVwb3J0VG9FZGl0VGVtcGxhdGVQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0TmFtZTogdmFsLnJlcG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KFxyXG4gICAgICAgICAgICAgICAgICB2YWw/LmVuZFBvaW50VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICAgICAgICkgPz8gdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIG1vZHVsZTogdmFsLm1vZHVsZSxcclxuICAgICAgICAgICAgICBvcmRlcjogdmFsLnRyaU9yZHJlLFxyXG4gICAgICAgICAgICAgIHNob3J0TmFtZTogdmFsLnJlcG9ydE5hbWVBYnJlZ2UsXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogdmFsLmRpc3BsYXksXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZWRpdFJlcG9ydFRvRWRpdFRlbXBsYXRlKG1vZGVsKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dCA6IGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uUmVmcmVzaCgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQgPSB2YWx1ZS51aWQ7XHJcbiAgICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNhbnJlZGlyZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhblJlZGlyZWN0Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtZGVzaWduZXItZWRpdC8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQpIHtcclxuICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkRGVzaWduZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9FZGl0fT0ke3JlcG9ydFRvVGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5SVEYpIHtcclxuICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS1lZGl0LyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNhbnJlZGlyZWN0ICYmIEpTT04ucGFyc2UoY2FucmVkaXJlY3QpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxEZXNpZ25lciwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX2VkaXRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWxldGVSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgdWlkICE9IG51bGwgJiYgdWlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmRlbGV0ZVJlcG9ydCh1aWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXREZWZhdWx0UmVwb3J0KGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICAnc2hhcmVkX3JlcG9ydGluZ19jb25maXJtX3NldF9kZWZhdWx0X3JlcG9ydF9maWxlJyxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpZCAhPSBudWxsICYmIGlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5zZXREZWZhdWx0UmVwb3J0KGlkLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4cG9ydFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHVpZCkge1xyXG4gICAgICBsZXQgcmVwb3J0TmFtZTogc3RyaW5nID0gJ2ZpbGUtbmFtZS5qc29uJztcclxuICAgICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PSB1aWQpO1xyXG4gICAgICBpZiAocmVwb3J0KSB7XHJcbiAgICAgICAgcmVwb3J0TmFtZSA9IHJlcG9ydC5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmV4cG9ydFJlcG9ydEZpbGUodWlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgICAgICAgIHZhciBmaWxlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgICAgICAgIGxldCByZXBvcnRSb3V0ZSA9IGZpbGVVUkw7XHJcbiAgICAgICAgICB2YXIgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmRvd25sb2FkID0gcmVwb3J0TmFtZTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gcmVwb3J0Um91dGU7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfZXhwb3J0ZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbXBvcnRUb1JlcG9ydChpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGUgPSBpZDtcclxuICAgICAgdGhpcy5fc2hvd0ltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3SnNvbkRhdGFDb25uZWN0aW9uKCk6IEpzb25EYXRhQ29ubmVjdGlvbiB7XHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAhPSBudWxsICYmIHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBuZXdKc29uRGF0YUNvbm5lY3Rpb246IEpzb25EYXRhQ29ubmVjdGlvbiA9IHtcclxuICAgICAgICBuYW1lOiBgJHt0aGlzLm90aGVyRm9ybU5hbWV9LUpzb25EU2AsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IHVuZGVmaW5lZCxcclxuICAgICAgICB1cmk6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgaHR0cFJlcXVlc3RDb250ZW50OiB1bmRlZmluZWQsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gbmV3SnNvbkRhdGFDb25uZWN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1cmkgaGF2ZSBub3QgYmVlbiBzZXQgIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9QcmludChcclxuICAgIHVpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0VHlwZTogbnVtYmVyLFxyXG4gICAgcmVzdEVuZHBvaW50Pzogc3RyaW5nLFxyXG4gICAgbW9kdWxlPzogc3RyaW5nLFxyXG4gICAgb3JkZXI/OiBudW1iZXIsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvUHJpbnQge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcbiAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgaWYgKHVpZCAmJiAvKnRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmKi8gdG9rZW4pIHtcclxuICAgICAgICBsZXQgbmV3UmVwb3J0VG9QcmludDogUmVwb3J0VG9QcmludCA9IHtcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICByZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHlcclxuICAgICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgZm9ybU5hbWU6IHRoaXMub3RoZXJGb3JtTmFtZSxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmh0dHBNZXRob2RUeXBlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdSZXBvcnRUb1ByaW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSwgZm9ybUVuZHBvaW50IG9yIHNlbGVjdGVkUmVwb3J0IGhhdmUgbm90IGJlZW4gc2V0ICEnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXCJwcm9wZXJ0eSAnVXNlck5hbWUgJyBvZiBjdXJyZW50IHVzZXIgaGF2ZSBub3QgYmVlbiBzZXQgIVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvVGVtcGxhdGUoXHJcbiAgICByZXBvcnRUeXBlOiBUc2lSZXBvcnRUeXBlLFxyXG4gICAgcmVwb3J0TmFtZTogc3RyaW5nLFxyXG4gICAgcmVzdEVuZHBvaW50OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU6IHN0cmluZyxcclxuICAgIG9yZGVyOiBudW1iZXIsXHJcbiAgICBzaG9ydE5hbWU6IHN0cmluZyxcclxuICAgIGRpc3BsYXk6IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb1RlbXBsYXRlIHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuXHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYgdG9rZW4pIHtcclxuICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGU6IFJlcG9ydFRvVGVtcGxhdGUgPSB7XHJcbiAgICAgICAgcmVzdEVuZHBvaW50OiByZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5XHJcbiAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgZm9ybUVudGl0eTogdGhpcy5vdGhlckZvcm1OYW1lLCAvL3RoaXMuZ2V0Rm9ybU5hbWUodGhpcy5vdGhlckZvcm1OYW1lKSwgLy90aGlzLm90aGVyRm9ybU5hbWUsXHJcbiAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgcmVwb3J0TmFtZTogcmVwb3J0TmFtZSxcclxuICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLCAvL3RoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gVHNpUmVwb3J0VHlwZS5MaXN0IDogVHNpUmVwb3J0VHlwZS5Gb3JtLFxyXG4gICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICBkZXNjcmltaW5hdG9yVmFsdWU6IHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcixcclxuICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgY29uc29sZS5sb2cocmVwb3J0VG9UZW1wbGF0ZSk7XHJcbiAgICAgIHJldHVybiByZXBvcnRUb1RlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGU6IFJlcG9ydFRvVGVtcGxhdGUgPSB7XHJcbiAgICAgICAgcmVzdEVuZHBvaW50OlxyXG4gICAgICAgICAgdGhpcy5pc1JlcG9ydEZvckZpY2hlIHx8IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgICA/IHJlc3RFbmRwb2ludCFcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50ISxcclxuICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIHNvcnRpbmc6IFt7IHByb3BlcnR5OiAnVUlEJywgb3JkZXI6ICdBU0MnIH1dLFxyXG4gICAgICAgICAgICBnZXRBbGxEYXRhOiB0cnVlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICBmb3JtRW50aXR5OiAnJyxcclxuICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbiEsXHJcbiAgICAgICAgcmVwb3J0TmFtZTogcmVwb3J0TmFtZSxcclxuICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLCAvL3RoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gVHNpUmVwb3J0VHlwZS5MaXN0IDogVHNpUmVwb3J0VHlwZS5Gb3JtLFxyXG4gICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiByZXBvcnRUb1RlbXBsYXRlO1xyXG4gICAgICAvLyB0aHJvdyBFcnJvcignc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4sIGZvcm1OYW1lIG9yIGZvcm1FbmRwb2ludCBoYXZlIG5vdCBiZWVuIHNldCAhJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb0VkaXRUZW1wbGF0ZShcclxuICAgIHVpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0VHlwZTogVHNpUmVwb3J0VHlwZSxcclxuICAgIHJlc3RFbmRQb2ludD86IHN0cmluZyxcclxuICAgIG1vZHVsZT86IHN0cmluZyxcclxuICAgIG9yZGVyPzogbnVtYmVyLFxyXG4gICAgcmVwb3J0TmFtZT86IHN0cmluZyxcclxuICAgIHNob3J0TmFtZT86IHN0cmluZyxcclxuICAgIGRpc3BsYXk/OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9FZGl0VGVtcGxhdGUge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcblxyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmICh1aWQgJiYgLyp0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiovIHRva2VuKSB7XHJcbiAgICAgICAgbGV0IHJlcG9ydFRvRWRpdFRlbXBsYXRlOiBSZXBvcnRUb0VkaXRUZW1wbGF0ZSA9IHtcclxuICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KFxyXG4gICAgICAgICAgICAgIHJlc3RFbmRQb2ludCxcclxuICAgICAgICAgICAgICB0aGlzLmlkXHJcbiAgICAgICAgICAgICkgPz8gdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICA6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgICA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keVxyXG4gICAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgICBmb3JtTmFtZTogdGhpcy5vdGhlckZvcm1OYW1lLCAvLyB0aGlzLmdldEZvcm1OYW1lKHRoaXMub3RoZXJGb3JtTmFtZSEpLFxyXG4gICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXBvcnRUb0VkaXRUZW1wbGF0ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoUmVwb3J0c0pvYigpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUud2FybignUmVmcmVzaCBSZXBvcnRzIEpvYiBhdCA6ICcsIG5ldyBEYXRlKCkpO1xyXG4gICAgLy9cclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUgIT0gbnVsbCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5nZXRSZXBvcnRzKHRoaXMub3RoZXJGb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0cyA9IGl0ZW1zO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNGb3JtTmFtZSAhPSB0aGlzLm90aGVyRm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMucmV0cmlldmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybU5hbWUgPSB0aGlzLm90aGVyRm9ybU5hbWUgPz8gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEpvYlRpbWVPdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0c0pvYigpO1xyXG4gICAgICAgICAgICB9LCAxMDAwMCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgfSwgMTAwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0ltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGlkZUltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0RGVmYXVsdFJlcG9ydFRlbXBsYXRlKCl7XHJcbiAgcHJldmlld0J1aWx0SW5SZXBvcnRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IHVybDogc3RyaW5nID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LXZpZXdlci8ke3RoaXMub3RoZXJGb3JtTmFtZX0vJHt0ZW1wbGF0ZU5hbWV9YDtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgLy9hZGQgYSByZXBvcnQgZnJvbSB0aGUgYnVpbHQtaW4gbW9kZWwgdG8gdGhlIHVzZXIgbGlzdFxyXG4gIF9hZGRGcm9tQnVpbHRJblRlbXBsYXRlcyh0ZW1wbGF0ZU5hbWU6IGFueSkge1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLmFkZEZyb21CdWlsdEluVGVtcGxhdGUoZm9ybU5hbWUsIHRlbXBsYXRlTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5pc1N1Y2Nlc3MgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8ocmVzLm1zZyk7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY2Fubm90X2FkZF9mcm9tX2J1aWx0X2luX3RlbXBsYXRlJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19jYW5ub3RfYWRkX2Zyb21fYnVpbHRfaW5fdGVtcGxhdGUnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9hZGQgYSByZXBvcnQgZnJvbSB0aGUgdXNlciBsaXN0IHRvIGJ1aWx0LWluIG1vZGVsIHRlbXBsYXRlXHJcbiAgX2FkZFRvQnVpbHRJblRlbXBsYXRlcyhyZXBvcnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuYWRkVG9CdWlsdEluVGVtcGxhdGUocmVwb3J0SWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2FkZF90b19idWlsdGluX3RlbXBsYXRlX3JlcG9ydF9mYWlsZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG1ha2UgcmVwb3J0IGxheW91dCBhcyBkZWZhdWx0IGZvciBhbGwgcmVwb3J0c1xyXG4gIG1ha2VSZXBvcnREZWZhdWx0TGF5b3V0KHJlcG9ydFVpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVxdWVzdCA9IHtcclxuICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHJlcG9ydFVpZCxcclxuICAgIH07XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UubWFrZVJlcG9ydExheW91dEFzRGVmYXVsdExheW91dChyZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKCdzaGFyZWRfcmVwb3J0aW5nX3N1Y2Nlc3NfdXBkYXRlZCcpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKCdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmQgcmVnaW9uXHJcblxyXG4gIF92aWV3RGFzaGJvYXJkdCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcbiAgICBpZiAoIXJlcG9ydCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcG9ydFRlbXBsYXRlSWQgPSByZXBvcnQudWlkO1xyXG4gICAgbGV0IHRlbmFudFVpZCA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICBsZXQgdXJsVmlld2VyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmRWaWV3ZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VGVtcGxhdGV9PSR7cmVwb3J0VGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcblxyXG4gICAgY29uc29sZS5sb2coJz4+PiBfdmlld0Rhc2hib2FyZHQgfiB1cmxWaWV3ZXI6JywgdXJsVmlld2VyKTtcclxuXHJcbiAgICB3aW5kb3cub3Blbih1cmxWaWV3ZXIsICdfYmxhbmsnKTtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICApO1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgPGRpdiAqYnVzeT1cImlzbG9hZGluZ1wiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBjb2wtMTBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzRnJvbUZvcm07IGVsc2Ugbm90RnJvbUZvcm1cIj5cclxuICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiY29sLTEwIHRzaS1jb21wb25lbnRcIiBjbGFzcz1cInRzaS1jb21wb25lbnRcIiBzdHlsZUNsYXNzPVwidHNpLWNvbXBvbmVudFwiIGFwcGVuZFRwPVwiYm9keVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJmb3JtTmFtZXNcIiBbbmdNb2RlbF09XCJvdGhlckZvcm1OYW1lXCIgb3B0aW9uTGFiZWw9XCJ2YWx1ZVwiIG9wdGlvblZhbHVlPVwia2V5XCIgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgIGZpbHRlckJ5PVwidmFsdWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBwbGFjZWhvbGRlcj1cInt7J3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2Zvcm0nIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vdEZyb21Gb3JtPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC0xMFwiIFsoYmluZCldPVwib3RoZXJGb3JtTmFtZVwiIChiaW5kQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiZ2V0Rm9ybU5hbWVzRW5kcG9pbnRcIiBbZWxlbWVudFNvdXJjZVVybF09XCJnZXRGb3JtTmFtZXNFbmRwb2ludCBcIiBbaXNGaWx0ZXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibWItNCBnYXAtMlwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPFRzaS1CdXR0b24gW3RleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3JlcG9ydCcgfCBsb2NhbGl6ZVwiIGljb249XCJwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdCBwaSBwaS1wbHVzXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXN1Y2Nlc3MgbWwtMiBtci0yIHAtYnV0dG9uIHAtY29tcG9uZW50IG5nLXN0YXItaW5zZXJ0ZWQgcC1idXR0b24tbGFiZWxcIiAoY2xpY2spPVwib25OZXdSZXBvcnQoKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgPFRzaS1CdXR0b24gW2J1dHRvblR5cGVdPVwiYnV0dG9uVHlwZS5TdWJtaXRcIiBbdGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfcmVwb3J0JyB8IGxvY2FsaXplXCIgaWNvbj1cInAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0IHBpIHBpLXRyYXNoXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbiBwLWNvbXBvbmVudCBuZy1zdGFyLWluc2VydGVkIHAtYnV0dG9uLWxhYmVsXCIgKGNsaWNrKT1cIm9uRGVsZXRlU2VsZWN0ZWRSZXBvcnRzKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRSZXBvcnRzIHx8ICFzZWxlY3RlZFJlcG9ydHMubGVuZ3RoXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPHAtZmlsZVVwbG9hZCAjZmlsZVVwbG9hZCBuYW1lPVwiZGVtb1tdXCIgKG9uQmVmb3JlVXBsb2FkKT1cIm9uSW1wb3J0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiIChvblJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi9qc29uXCIgW21heEZpbGVTaXplXT1cIjEwMDAwMDAwXCIgXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjaG9vc2VJY29uXT1cIidwaSBwaS1wYXBlcmNsaXAnXCIgY2FuY2VsU3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiIHVwbG9hZFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1oZWxwXCJcclxuICAgICAgICByZW1vdmVTdHlsZUNsYXNzPVwicC1idXR0b24tZGFuZ2VyXCIgW2Nob29zZUxhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW3VwbG9hZExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydF9yZXBvcnQnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjYW5jZWxMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jYW5jZWxfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidG9VcGxvYWRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbc2hvd0ZpbHRlcnNdPVwiZmFsc2VcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCI+XHJcbiAgPC9Uc2ktRGlzcGxheS1HcmlkPiAtLT5cclxuXHJcblxyXG4gIDwhLS08ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+IDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiICBbcFRvb2x0aXBdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfcmVmcmVzaCcgfCBsb2NhbGl6ZVwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiICBsYWJlbD1cIlJlbG9hZFwiIHNldmVyaXR5PVwiaGVscFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiIC8+IDwvZGl2PlxyXG4gIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZFwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgLz5cclxuLS0+XHJcbiAgXHJcbiAgPFRzaS1CdXR0b24gc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi1yb3VuZGVkIG1iLTMgbWwtM1wiICBcclxuICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19yZWZyZXNoJ1wiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiPjwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgPHRzaS12aWV3LWdyaWQgXHJcbiAgICBbc29ydE1vZGVdPVwic29ydE1vZGVSZWYuU2luZ2xlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICAgW2Zvcm1OYW1lXT1cIidteS1yZXBvcnQtdGVtcGxhdGVzJ1wiXHJcbiAgICA+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG4gIDxici8+XHJcbiAgIDwhLS0gRGVmYXVsdCBUZW1wbGF0ZSAtLT5cclxuICAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBcclxuICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW3Nob3dTdW1tYXJ5Rm9vdGVyXT1cImZhbHNlXCIgXHJcbiAgIFtwYWdpbmF0b3JdPVwiZmFsc2VcIiBcclxuICAgW3Nob3dGaWx0ZXJzXT1cImZhbHNlXCIgXHJcbiAgIFtjb2x1bW5zXT1cImRlZmF1bHRUZW1wbGF0ZUNvbHVtbnNcIiBcclxuICAgW2dyaWREYXRhXT1cImRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGFcIiBcclxuICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAga2V5PVwibmFtZVwiPlxyXG4gIDwvVHNpLURpc3BsYXktR3JpZD4gLS0+XHJcblxyXG4gIFxyXG4gIDx0c2ktdmlldy1ncmlkXHJcbiAgIFtzb3J0TW9kZV09XCJzb3J0TW9kZVJlZi5TaW5nbGVcIlxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW2NvbHVtbnNdPVwiZGVmYXVsdFRlbXBsYXRlQ29sdW1uc1wiIFxyXG4gICBbZ3JpZERhdGFdPVwiZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YVwiIFxyXG4gICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICBbZm9ybU5hbWVdPVwiJ2RlZmF1bHQtbXktcmVwb3J0LXRlbXBsYXRlcydcIlxyXG4gICBrZXk9XCJuYW1lXCI+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG5cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgPCEtLSBkaWFsb2cgdG8gaW1wb3J0IGZpbGUgdG8gcmVwb3J0IC0tPlxyXG4gIDxwLWRpYWxvZyBoZWFkZXI9XCJ7eydzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCcgfCBsb2NhbGl6ZX19XCIgWyh2aXNpYmxlKV09XCJpc1VwZGF0ZVJlcG9ydEZyb21GaWxlRGlhbG9nVmlzaWJsZVwiIFtzdHlsZV09XCJ7d2lkdGg6ICc1MHZ3J31cIj5cclxuICAgIDwhLS0gPFRzaS1Nb2RhbC1IZWFkZXIgKG9uQ2xvc2VDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKVwiIFtpbnB1dFRpdGxlXT1cIidzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCdcIj48L1RzaS1Nb2RhbC1IZWFkZXI+IC0tPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCI+XHJcbiAgICAgIDxwLWZpbGVVcGxvYWQgI2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQgbmFtZT1cImltcG9ydEZpbGVUb1JlcG9ydFwiIChvbkJlZm9yZVVwbG9hZCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9JbXBvcnRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0NsZWFyKCRldmVudClcIiAob25SZW1vdmUpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfUmVtb3ZlKCRldmVudClcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL2pzb25cIiBbbWF4RmlsZVNpemVdPVwiMTAwMDAwMDBcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2hvb3NlSWNvbl09XCIncGkgcGktcGFwZXJjbGlwJ1wiIGNhbmNlbFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIiB1cGxvYWRTdHlsZUNsYXNzPVwicC1idXR0b24taGVscFwiXHJcbiAgICAgICAgcmVtb3ZlU3R5bGVDbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiIFtjaG9vc2VMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFt1cGxvYWRMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19pbXBvcnRfcmVwb3J0JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2FuY2VsTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2FuY2VsX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tIDxUc2ktTW9kYWwtRm9vdGVyIChvbkNhbmNlbENsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpXCJcclxuICAgIChvblNhdmVDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsU2F2ZUNsaWNrKClcIlxyXG4gICAgW3NhdmVEaXNhYmxlZF09XCIhdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXCI+PC9Uc2ktTW9kYWwtRm9vdGVyPiAtLT5cclxuXHJcbjwvcC1kaWFsb2c+XHJcbjwvZGl2PlxyXG4iXX0=