@wavemaker/app-ng-runtime 11.15.5-rc.259 → 11.15.5-rc.262
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/base/fesm2022/index.mjs +1 -1
- package/components/containers/accordion/fesm2022/index.mjs +1 -1
- package/components/data/table/bundles/index.umd.js +5 -1
- package/components/data/table/esm2022/table.component.mjs +6 -2
- package/components/data/table/fesm2022/index.mjs +5 -1
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/input/calendar/fesm2022/index.mjs +1 -1
- package/components/input/chips/fesm2022/index.mjs +1 -1
- package/components/input/dataset-aware-form/fesm2022/index.mjs +1 -1
- package/components/navigation/menu/fesm2022/index.mjs +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/dynamic/fesm2022/index.mjs +2 -2
- package/scripts/datatable/datatable.js +6 -0
- package/variables/bundles/index.umd.js +88 -7
- package/variables/esm2022/service/variables.service.mjs +15 -3
- package/variables/esm2022/util/variable/service-variable.utils.mjs +25 -7
- package/variables/esm2022/util/variable/variables.utils.mjs +52 -2
- package/variables/fesm2022/index.mjs +89 -8
- package/variables/fesm2022/index.mjs.map +1 -1
- package/variables/service/variables.service.d.ts +2 -1
- package/variables/util/variable/variables.utils.d.ts +7 -0
|
@@ -2165,6 +2165,10 @@ export class TableComponent extends StylableComponent {
|
|
|
2165
2165
|
case 'show':
|
|
2166
2166
|
if (nv) {
|
|
2167
2167
|
this.invokeEventCallback('show');
|
|
2168
|
+
// recompute layout now that the table is visible again
|
|
2169
|
+
if (this.datagridElement) {
|
|
2170
|
+
this.redraw(false);
|
|
2171
|
+
}
|
|
2168
2172
|
}
|
|
2169
2173
|
else {
|
|
2170
2174
|
this.invokeEventCallback('hide');
|
|
@@ -2458,7 +2462,7 @@ export class TableComponent extends StylableComponent {
|
|
|
2458
2462
|
}
|
|
2459
2463
|
else {
|
|
2460
2464
|
setTimeout(() => {
|
|
2461
|
-
this.callDataGridMethod('setColGroupWidths');
|
|
2465
|
+
this.callDataGridMethod(forceRender === false ? 'refreshColumnWidths' : 'setColGroupWidths');
|
|
2462
2466
|
this.callDataGridMethod('addOrRemoveScroll');
|
|
2463
2467
|
});
|
|
2464
2468
|
}
|
|
@@ -2586,4 +2590,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2586
2590
|
type: HostListener,
|
|
2587
2591
|
args: ['keypress', ['$event']]
|
|
2588
2592
|
}] } });
|
|
2589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUVOLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUVYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixXQUFXLEVBQWEsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLE1BQU0sRUFDTixZQUFZLEVBQ1osY0FBYyxFQUNkLEdBQUcsRUFDSCxZQUFZLEVBQ1osVUFBVSxFQUNWLDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsUUFBUSxF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Y2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QW5jaG9yQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNpYy9hbmNob3InO1xuaW1wb3J0IHtCdXR0b25Db21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0L2J1dHRvbic7XG5pbXBvcnQge01lbnVDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL25hdmlnYXRpb24vbWVudSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICRpbnZva2VXYXRjaGVycyxcbiAgICAkcGFyc2VFdmVudCxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgbXV0ZVdhdGNoZXJzLFxuICAgIHVuTXV0ZVdhdGNoZXJzLFxuICAgIEFwcCxcbiAgICBjbG9zZVBvcG92ZXIsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgZXh0ZW5kUHJvdG8sXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldERhdGFzb3VyY2VGcm9tRXhwcixcbiAgICBnZXRWYWxpZEpTT04sXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgdHJpZ2dlckZuLFxuICAgIFZpZXdwb3J0XG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgREVCT1VOQ0VfVElNRVMsXG4gICAgRURJVF9NT0RFLFxuICAgIGV4dHJhY3REYXRhU291cmNlTmFtZSxcbiAgICBnZXRDb25kaXRpb25hbENsYXNzZXMsXG4gICAgZ2V0T3JkZXJCeUV4cHIsXG4gICAgZ2V0Um93T3BlcmF0aW9uc0NvbHVtbixcbiAgICBOQVZJR0FUSU9OX1RZUEUsXG4gICAgcHJlcGFyZUZpZWxkRGVmcyxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICB0cmFuc2Zvcm1EYXRhLFxuICAgIFRydXN0QXNQaXBlLFxuICAgIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzXG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuXG5pbXBvcnQge0xpc3RDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGlzdCc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vdGFibGUucHJvcHMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2UsXG4gICAgZXh0ZW5kLFxuICAgIGZpbmQsXG4gICAgZmluZEluZGV4LFxuICAgIGZsb29yLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGluY2x1ZGVzLFxuICAgIGluZGV4T2YsXG4gICAgaXNBcnJheSxcbiAgICBpc0VtcHR5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNOYU4sXG4gICAgaXNPYmplY3QsXG4gICAgaXNVbmRlZmluZWQsXG4gICAga2V5cyxcbiAgICBvbWl0QnksXG4gICAgcHVsbEFsbFdpdGgsXG4gICAgcmVtb3ZlLFxuICAgIHNldCxcbiAgICBzb21lLFxuICAgIHNwbGl0LFxuICAgIHN0YXJ0c1dpdGgsXG4gICAgdG9OdW1iZXIsXG4gICAgdmFsdWVzXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7QnNEcm9wZG93bk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWdyaWQgYXBwLXBhbmVsIHBhbmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXRhYmxlJywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbmNvbnN0IGV4cG9ydEljb25NYXBwaW5nID0ge1xuICAgIEVYQ0VMOiAnZmEgZmEtZmlsZS1leGNlbC1vJyxcbiAgICBDU1Y6ICdmYSBmYS1maWxlLXRleHQtbydcbn07XG5cbmNvbnN0IFJPV19PUFNfRklFTEQgPSAncm93T3BlcmF0aW9ucyc7XG5cbi8qKiBTYW1lIGRlZmF1bHQgYXMgYHRhYmxlLnByb3BzLnRzYCDigJQgdXNlZCB3aGVuIGBwYWdlc2l6ZW9wdGlvbnNgIGNhbm5vdCBiZSBwYXJzZWQgdG8gaW50ZWdlcnMuICovXG5jb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gJzUsMTAsMjAsNTAsMTAwJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCBpc0lucHV0Qm9keVdyYXBwZXIgPSB0YXJnZXQgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJy5kcm9wZG93bi1tZW51JywgJy51aWItdHlwZWFoZWFkLW1hdGNoJywgJy5tb2RhbC1kaWFsb2cnLCAnLnRvYXN0J107XG4gICAgbGV0IGlzSW5wdXQgPSBmYWxzZTtcbiAgICBjbGFzc2VzLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KGNscykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpc0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGF0dHJzID0gWydic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3InXTtcbiAgICBpZiAoIWlzSW5wdXQpIHtcbiAgICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRbMF0uaGFzQXR0cmlidXRlKGF0dHIpKSB7XG4gICAgICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSW5wdXQ7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBbmNob3JDb21wb25lbnQsIFBhZ2luYXRpb25Db21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgQnNEcm9wZG93bk1vZHVsZSwgTWVudUNvbXBvbmVudF0sXG4gICAgc2VsZWN0b3I6ICdbd21UYWJsZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhUYWJsZUNvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFibGVDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBAVmlld0NoaWxkKFBhZ2luYXRpb25Db21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBkYXRhTmF2aWdhdG9yO1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0YWdyaWRFbGVtZW50Jywge3N0YXRpYzogdHJ1ZX0pIHByaXZhdGUgX3RhYmxlRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ3Jvd0FjdGlvblRtcGwnLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0FjdGlvblRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3Jvd0FjdGlvbnNWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93QWN0aW9uc1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdmaWx0ZXJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgZmlsdGVyVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnbXVsdGlDb2x1bW5GaWx0ZXJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZmlsdGVyVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2lubGluZVdpZGdldFRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBpbmxpbmVXaWRnZXRUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVFZGl0VmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGlubGluZUVkaXRWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbE5ldycsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldE5ld1RtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXROZXdWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdE5ld1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdjdXN0b21FeHByVG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGN1c3RvbUV4cHJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdjdXN0b21FeHByVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGN1c3RvbUV4cHJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93RXhwYW5zaW9uQWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93RXhwYW5zaW9uQWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgncm93RXhwYW5zaW9uVG1wbCcpIHJvd0V4cGFuc2lvblRtcGw6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93RGV0YWlsVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0RldGFpbFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgncm93RXhwYW5zaW9uQWN0aW9uVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljVGFibGVSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBwcml2YXRlIHJvd0FjdGlvbnNDb21waWxlZFRsOiBhbnkgID0ge307XG4gICAgcHJpdmF0ZSByb3dGaWx0ZXJDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGlubGluZUNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lTmV3Q29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgcm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZNYXAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0V4cGFuc2lvbkFjdGlvblRsOiBhbnkgPSB7fTtcblxuICAgIGNvbHVtbnMgPSB7fTtcbiAgICBmb3JtZmllbGRzID0ge307XG4gICAgZGF0YWdyaWRFbGVtZW50O1xuICAgIGRhdGFzb3VyY2U7XG4gICAgZWRpdG1vZGU7XG4gICAgZW5hYmxlY29sdW1uc2VsZWN0aW9uO1xuICAgIGVuYWJsZXNvcnQgPSB0cnVlO1xuICAgIGZpbHRlcm1vZGU7XG4gICAgZmlsdGVyb25rZXlwcmVzcztcbiAgICBpc3Jvd3NlbGVjdGFibGU7XG4gICAgc2VhcmNobGFiZWw7XG4gICAgZm9ybXBvc2l0aW9uO1xuICAgIGdyaWRjbGFzcztcbiAgICBncmlkZmlyc3Ryb3dzZWxlY3Q7XG4gICAgaWNvbmNsYXNzO1xuICAgIG9uZGVtYW5kbWVzc2FnZTtcbiAgICBhbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgIHZpZXdsZXNzbWVzc2FnZTtcbiAgICBzaG93dmlld2xlc3NidXR0b24gPSBmYWxzZTtcbiAgICBfdHJpZ2dlcmVkQnlVc2VyO1xuICAgIF9pc0lubGluZUVkaXRTYXZlO1xuICAgIC8qKiBDb3ZlcnMgYXN5bmMgbmF2aWdhdG9yL2RhdGFzZXQgdXBkYXRlcyBhZnRlciBpbmxpbmUvcXVpY2tlZGl0IHNhdmUgKHdtLlZhcmlhYmxlKS4gKi9cbiAgICBwcml2YXRlIF9tb2RlbFZhckVkaXRTb2Z0UmVmcmVzaEFjdGl2ZVVudGlsID0gMDtcbiAgICBpc0dyaWRFZGl0TW9kZTtcbiAgICBsb2FkaW5nZGF0YW1zZztcbiAgICBtdWx0aXNlbGVjdDtcbiAgICBuYW1lO1xuICAgIF9pc0RlcGVuZGVudDtcbiAgICBuYXZpZ2F0aW9uO1xuICAgIG5hdmlnYXRpb25TaXplO1xuICAgIG5hdmlnYXRpb25hbGlnbjtcbiAgICBub2RhdGFtZXNzYWdlO1xuICAgIHBhZ2VzaXplO1xuICAgIHVwZGF0ZWRQYWdlU2l6ZTtcbiAgICBhY3R1YWxQYWdlU2l6ZTtcbiAgICBjdXJyZW50cGFnZTtcbiAgICBwcmV2RGF0YTtcbiAgICBwcmltYXJ5S2V5ID0gW107XG4gICAgcmFkaW9zZWxlY3Q7XG4gICAgaGVhZGVyc2VsZWN0YWxsO1xuICAgIHJvd2NsYXNzO1xuICAgIHJvd25nY2xhc3M7XG4gICAgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHNob3doZWFkZXI7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuICAgIHNob3dyb3dpbmRleDtcbiAgICBzdWJoZWFkaW5nO1xuICAgIHRpdGxlO1xuICAgIHNob3duZXdyb3c7XG4gICAgZGVsZXRlb2t0ZXh0O1xuICAgIGRlbGV0ZWNhbmNlbHRleHQ7XG4gICAgb25FcnJvcjtcbiAgICBvblJvd2luc2VydDtcbiAgICBvblJvd3VwZGF0ZTtcbiAgICBvblJvd2RlbGV0ZTtcbiAgICBzdGF0ZWhhbmRsZXI7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlID0gbmV3IFN1YmplY3QoKTtcbiAgICBzZWxlY3RlZEl0ZW1DaGFuZ2UkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5hc09ic2VydmFibGUoKTtcblxuICAgIGFjdGlvbnMgPSBbXTtcbiAgICBfYWN0aW9ucyA9IHtcbiAgICAgICAgJ2hlYWRlcic6IFtdLFxuICAgICAgICAnZm9vdGVyJzogW11cbiAgICB9O1xuICAgIGV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICBleHBvcnRkYXRhc2l6ZTtcbiAgICBmb3JtV2lkZ2V0cztcbiAgICBoZWFkZXJDb25maWc6IGFueSA9IFtdO1xuICAgIGl0ZW1zID0gW107XG4gICAgbmF2Q29udHJvbHM7XG4gICAgcm93QWN0aW9ucyA9IFtdO1xuICAgIHNlbGVjdGVkQ29sdW1ucztcbiAgICBzaG93bmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgIHNob3dGaXJzdFJvdyA9IGZhbHNlO1xuICAgIGRhdGFzZXQ7XG4gICAgX2xpdmVUYWJsZVBhcmVudDtcbiAgICBpc1BhcnRPZkxpdmVHcmlkO1xuICAgIGdyaWRFbGVtZW50O1xuICAgIGlzTmV3Um93SW5zZXJ0ZWQ7XG4gICAgaXNNb2JpbGU7XG4gICAgaXNMb2FkaW5nO1xuICAgIGlzUm93RGVsZXRlZDtcbiAgICBkb2N1bWVudENsaWNrQmluZCA9IG5vb3A7XG4gICAgYWN0aW9uUm93SW5kZXg7XG4gICAgYWN0aW9uUm93UGFnZTtcbiAgICBwcmV2RmlsdGVyRXhwcmVzc2lvbjogYW55ID0gW107XG4gICAgZmllbGREZWZzOiBhbnkgPSBbXTtcbiAgICByb3dEZWY6IGFueSA9IHt9O1xuICAgIHJvd0luc3RhbmNlOiBhbnkgPSB7fTtcbiAgICBwYWdlc2l6ZW9wdGlvbnM7XG4gICAgcHJldlBhZ2VzaXplb3B0aW9ucztcbiAgICBtdWx0aXNlbGVjdHRpdGxlO1xuICAgIG11bHRpc2VsZWN0YXJpYWxhYmVsO1xuICAgIHJhZGlvc2VsZWN0dGl0bGU7XG4gICAgcmFkaW9zZWxlY3RhcmlhbGFiZWw7XG5cbiAgICBwcml2YXRlIGZ1bGxGaWVsZERlZnMgPSBbXTtcbiAgICBwcml2YXRlIF9fZnVsbERhdGE7XG4gICAgcHJpdmF0ZSBkYXRhTmF2aWdhdG9yV2F0Y2hlZDtcbiAgICBwcml2YXRlIG5hdmlnYXRvclJlc3VsdFdhdGNoO1xuICAgIHByaXZhdGUgbmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2g7XG4gICAgcHJpdmF0ZSBmaWx0ZXJJbmZvO1xuICAgIHByaXZhdGUgc29ydEluZm87XG4gICAgcHJpdmF0ZSBzZXJ2ZXJEYXRhO1xuICAgIHByaXZhdGUgZmlsdGVybnVsbHJlY29yZHM7XG4gICAgcHJpdmF0ZSB2YXJpYWJsZUluZmxpZ2h0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGlzZHluYW1pY3RhYmxlO1xuICAgIHByaXZhdGUgX2R5bmFtaWNDb250ZXh0O1xuICAgIHByaXZhdGUgbm9PZkNvbHVtbnM7XG4gICAgcHVibGljIG9uRGVtYW5kTG9hZDtcbiAgICBwdWJsaWMgaW5mU2Nyb2xsO1xuICAgIHByaXZhdGUgaXNEYXRhTG9hZGluZztcbiAgICBwcml2YXRlIGN1cnJlbnRQYWdlO1xuICAgIHByaXZhdGUgYXBwbHlQcm9wcyA9IG5ldyBNYXAoKTtcblxuICAgIHJlZHJhdyA9IGRlYm91bmNlKHRoaXMuX3JlZHJhdywgMTUwKTtcbiAgICBkZWJvdW5jZWRIYW5kbGVMb2FkaW5nID0gZGVib3VuY2UodGhpcy5oYW5kbGVMb2FkaW5nLCAzNTApO1xuXG4gICAgLy8gRmlsdGVyIGFuZCBTb3J0IE1ldGhvZHNcbiAgICByb3dGaWx0ZXI6IGFueSA9IHt9O1xuICAgIG1hdGNoTW9kZVR5cGVzTWFwO1xuICAgIG1hdGNoTW9kZU1zZ3M7XG4gICAgZW1wdHlNYXRjaE1vZGVzO1xuICAgIF9zZWFyY2hTb3J0SGFuZGxlciA9IG5vb3A7XG4gICAgc2VhcmNoU29ydEhhbmRsZXIgPSAoLi4uYXJncykgPT4geyB0aGlzLl9zZWFyY2hTb3J0SGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsgfTtcbiAgICBfaXNQYWdlU2VhcmNoO1xuICAgIF9pc0NsaWVudFNlYXJjaDtcbiAgICBjaGVja0ZpbHRlcnNBcHBsaWVkOiBGdW5jdGlvbjtcbiAgICBnZXRTZWFyY2hSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldFNvcnRSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldEZpbHRlckZpZWxkczogRnVuY3Rpb247XG4gICAgb25Sb3dGaWx0ZXJDaGFuZ2UgPSBub29wO1xuICAgIG9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0ID0gbm9vcDtcbiAgICBzaG93Q2xlYXJJY29uID0gbm9vcDtcbiAgICBjbGVhclJvd0ZpbHRlciA9IG5vb3A7XG4gICAgYWRqdXN0Q29udGFpbmVyID0gbm9vcDtcbiAgICBnZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mbzogRnVuY3Rpb247XG4gICAgcmVmcmVzaERhdGE6IEZ1bmN0aW9uO1xuICAgIGNsZWFyRmlsdGVyOiBGdW5jdGlvbjtcblxuICAgIC8vIElubGluZSBFZGl0XG4gICAgbmdmb3JtOiBGb3JtR3JvdXA7XG4gICAgdXBkYXRlVmFyaWFibGU6IEZ1bmN0aW9uO1xuICAgIHVwZGF0ZVJlY29yZDogRnVuY3Rpb247XG4gICAgZGVsZXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBpbnNlcnRSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIGFkZE5ld1JvdzogRnVuY3Rpb247XG4gICAgYWRkUm93OiBGdW5jdGlvbjtcbiAgICBkZWxldGVSb3c6IEZ1bmN0aW9uO1xuICAgIG9uUmVjb3JkRGVsZXRlOiBGdW5jdGlvbjtcbiAgICBpbml0aWF0ZVNlbGVjdEl0ZW06IEZ1bmN0aW9uO1xuICAgIGhpZGVFZGl0Um93OiBGdW5jdGlvbjtcbiAgICBzYXZlUm93OiBGdW5jdGlvbjtcbiAgICBjYW5jZWxSb3c6IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgX3BhZ2VMb2FkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBncmlkT3B0aW9ucyA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGNvbERlZnM6IFtdLFxuICAgICAgICBzdGFydFJvd0luZGV4OiAxLFxuICAgICAgICBtb2RlOiAnJyxcbiAgICAgICAgc29ydEluZm86IHtcbiAgICAgICAgICAgIGZpZWxkOiAnJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJydcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVybW9kZTogJycsXG4gICAgICAgIGZpbHRlcm9ua2V5cHJlc3M6IGZhbHNlLFxuICAgICAgICBpc3Jvd3NlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBzZWFyY2hMYWJlbDogJycsXG4gICAgICAgIHJvd0FjdGlvbnM6IFtdLFxuICAgICAgICBoZWFkZXJDb25maWc6IFtdLFxuICAgICAgICByb3dDbGFzczogJycsXG4gICAgICAgIGVkaXRtb2RlOiAnJyxcbiAgICAgICAgZm9ybVBvc2l0aW9uOiAnJyxcbiAgICAgICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgICAgICByb3dFeHBhbnNpb25FbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcm93RGVmOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJzAnXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgICAgc2VsZWN0RmllbGQ6ICdTZWxlY3QgRmllbGQnXG4gICAgICAgIH0sXG4gICAgICAgIHNlY3VyaXR5VXRpbHM6IHtcbiAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0gOiB7fVxuICAgICAgICB9LFxuICAgICAgICBuYXZpZ2F0aW9uOiAnJyxcbiAgICAgICAgaXNkeW5hbWljdGFibGU6ICcnLFxuICAgICAgICBkZWxldGVkUm93SW5kZXg6IC0xLFxuICAgICAgICBsYXN0QWN0aW9uUGVyZm9ybWVkOiAnc2Nyb2xsJyxcbiAgICAgICAgaXNTZWFyY2hUcmlnZXJyZWQ6IGZhbHNlLFxuICAgICAgICBpc0RhdGFzZXRVcGRhdGVkOiBmYWxzZSxcbiAgICAgICAgaXNEYXRhVXBkYXRlZEJ5VXNlcjogZmFsc2UsXG4gICAgICAgIHNob3d2aWV3bGVzc2J1dHRvbjogZmFsc2UsXG4gICAgICAgIG9uZGVtYW5kbWVzc2FnZTogJycsXG4gICAgICAgIGFsbG93cGFnZXNpemVjaGFuZ2U6IGZhbHNlLFxuICAgICAgICBwYWdlc2l6ZW9wdGlvbnM6IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgICAgIHZpZXdsZXNzbWVzc2FnZTogJycsXG4gICAgICAgIGxvYWRpbmdkYXRhbXNnOiAnJyxcbiAgICAgICAgaXNOZXh0UGFnZURhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZW5hYmxlU29ydDogdHJ1ZSxcbiAgICAgICAgbXVsdGlzZWxlY3Q6IGZhbHNlLFxuICAgICAgICBzaG93UmFkaW9Db2x1bW46IGZhbHNlLFxuICAgICAgICBlbmFibGVDb2x1bW5TZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBtdWx0aXNlbGVjdHRpdGxlOiAnJyxcbiAgICAgICAgbXVsdGlzZWxlY3RhcmlhbGFiZWw6ICcnLFxuICAgICAgICByYWRpb3NlbGVjdHRpdGxlOiAnJyxcbiAgICAgICAgaGVhZGVyc2VsZWN0YWxsOmZhbHNlLFxuICAgICAgICByYWRpb3NlbGVjdGFyaWFsYWJlbDogJycsXG4gICAgICAgIEFDVElPTlM6IHtcbiAgICAgICAgICAgICdERUxFVEUnOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICdFRElUJzogJ2VkaXQnLFxuICAgICAgICAgICAgJ1NFQVJDSF9PUl9TT1JUJzogJ3NlYXJjaF9vcl9zb3J0JyxcbiAgICAgICAgICAgICdERUZBVUxUJzogJ3Njcm9sbCcsXG4gICAgICAgICAgICAnRklMVEVSX0NSSVRFUklBJyA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgJ0RBVEFTRVRfVVBEQVRFJzogJ2RhdGFzZXRfdXBkYXRlJ1xuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25Sb3dJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb25Sb3dQYWdlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTGFzdFBhZ2UgOiBmYWxzZSxcbiAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG4gICAgICAgIGdldEN1cnJlbnRQYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJykgfHwgMTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBwYWdlIG51bWJlclxuICAgICAgICBzZXRDdXJyZW50UGFnZTogKHBhZ2VOdW0pID0+IHtcbiAgICAgICAgICAgIHNldCh0aGlzLmRhdGFOYXZpZ2F0b3IsICdkbi5jdXJyZW50UGFnZScsIHBhZ2VOdW0gfHwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldERhdGFTb3VyY2U6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGdldCB0aGUgcGFnZSBsaW1pdFxuICAgICAgICBnZXRQYWdlU2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZXNpemU7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFVwZGF0ZWRQYWdlU2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlZFBhZ2VTaXplO1xuICAgICAgICB9LFxuICAgICAgICBnZXRQYWdlQ291bnQgOiAoKSA9PntcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNvdW50O1xuICAgICAgICB9LFxuICAgICAgICBlbmFibGVOYXZpZ2F0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVMYXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tb2RlID0gJ3ZpZXdsZXNzJztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBkZWxldGVkIHJvdyBpbmRleFxuICAgICAgICBzZXREZWxldGVkUm93SW5kZXg6IChpZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZGVsZXRlZFJvd0luZGV4JywgaWQpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXRzIHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgbGlrZSBlZGl0LCBkZWxldGUgZXRjLlxuICAgICAgICBzZXRMYXN0QWN0aW9uUGVyZm9ybWVkOiAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdsYXN0QWN0aW9uUGVyZm9ybWVkJywgYWN0aW9uIHx8IHRoaXMuZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWRPcHRpb25zLm5hdmlnYXRpb24gPT09ICdTY3JvbGwnIHx8IHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ09uLURlbWFuZCc7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzU2VhcmNoVHJpZ2VycmVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzU2VhcmNoVHJpZ2VycmVkJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRJc0RhdGFzZXRVcGRhdGVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzRGF0YXNldFVwZGF0ZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNOZXh0UGFnZURhdGEnIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBmZXRjaGluZyB0aGUgbmV4dCBwYWdlIGRhdGEgYnkgY2xpY2tpbmcgb25Mb2FkIG1vcmUgb3Igc2Nyb2xsXG4gICAgICAgIHNldElzTmV4dFBhZ2VEYXRhOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzTmV4dFBhZ2VEYXRhJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyAgRml4IGZvciBbV01TLTIzMjYzXTogJ2lzRGF0YVVwZGF0ZWRCeVVzZXInIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBjaGFuZ2VzIHRoZSBkYXRhc2V0IGZyb20gc2NyaXB0XG4gICAgICAgIHNldElzRGF0YVVwZGF0ZWRCeVVzZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhVXBkYXRlZEJ5VXNlcicsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25EYXRhUmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2RhdGFyZW5kZXInLCB7JGRhdGE6IHRoaXMuZ3JpZERhdGEsIGRhdGE6IHRoaXMuZ3JpZERhdGF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3Mgc2VsZWN0ZWQgaW4gcHJldmlvdXMgcGFnZXMuIChOb3QgZmluZGluZyBpbnRlcnNlY3Rpb24gb2YgZGF0YSBhbmQgc2VsZWN0ZWRpdGVtcyBhcyBpdCB3aWxsIGJlIGhlYXZ5KVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKCF0aGlzLmluZlNjcm9sbCAmJiAhdGhpcy5vbkRlbWFuZExvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbiByZW5kZXIsIGFwcGx5IHRoZSBmaWx0ZXJzIHNldCBmb3IgcXVlcnkgc2VydmljZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1BhZ2VTZWFyY2ggJiYgdGhpcy5maWx0ZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIodGhpcy5maWx0ZXJJbmZvLCB1bmRlZmluZWQsICdzZWFyY2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0UGFyZW50VGFibGVEYXRhOiAoKT0+IHtcbiAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgcm93IGluZGV4IGFuZCBjdXJyZW50IHBhZ2Ugb2YgcGFyZW50IHRhYmxlIGluIHJvdyBleHBhbnNpb24gKG5lc3RlZCB0YWJsZSkgc2NlbmFyaW9cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRyRWxlbWVudCA9ICAkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgndHInKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE9iaiA9IHtcbiAgICAgICAgICAgICAgICAncGFyZW50SWQnOiBwYXJlbnRUckVsZW1lbnQucHJldigndHIuYXBwLWRhdGFncmlkLXJvdycpPy5hdHRyKCdkYXRhLXJvdy1pZCcpLFxuICAgICAgICAgICAgICAgICdwYXJlbnRQYWdlJzogcGFyZW50VHJFbGVtZW50LmNsb3Nlc3QoJ2Rpdi5hcHAtZ3JpZC5hcHAtcGFuZWwucGFuZWwnKT8uYXR0cignY3VycmVudHBhZ2UnKSB8fCAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50T2JqO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd1NlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIHJvd0RhdGEuJGluZGV4ICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0YWJsZSBoYXMgYSBwYXJlbnQgdGFibGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50T2JqID0gdGhpcy5ncmlkT3B0aW9ucy5nZXRQYXJlbnRUYWJsZURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gcGFyZW50T2JqLnBhcmVudElkID8ge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMSwgcGFyZW50Um93SW5kZXg6IHBhcmVudE9iai5wYXJlbnRJZCwgcGFyZW50Q3VycmVudFBhZ2U6IHBhcmVudE9iai5wYXJlbnRQYWdlfToge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMX07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb21lKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgb2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW19KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLCB7J3NlbGVjdGVkSXRlbSc6IFtvYmpdfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93c2VsZWN0JywgeyRkYXRhOiByb3dEYXRhLCAkZXZlbnQ6IGUsIHJvdzogcm93RGF0YX0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFzc2lnbnMgdGhlIGl0ZW1zIG9uIGNhcHR1cmUgcGhhc2Ugb2YgdGhlIGNsaWNrIGhhbmRsZXIuXG4gICAgICAgIGFzc2lnblNlbGVjdGVkSXRlbXM6IChyb3csIGUsIHJvd0luZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBpbiBjYXNlIG9mIHNpbmdsZSBzZWxlY3QsIHVwZGF0ZSB0aGUgaXRlbXMgd2l0aCBvdXQgY2hhbmdpbmcgdGhlIHJlZmVyZW5jZS5cbiAgICAgICAgICAgICAgICAgKiBmb3IgbXVsdGkgc2VsZWN0LCBrZWVwIG9sZCBzZWxlY3RlZCBpdGVtcyBpbiB0YWN0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9GaXggZm9yIFtXTVMtMjUxMTBdOiBBZGQgcm93IHRvIGl0ZW1zIGxpc3Qgb25seSBpZiB0aGUgcm93IGlzIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXgodGhpcy5pdGVtcywgcm93KSA9PT0gLTEgJiYgKHJvd0luZm8/Ll9zZWxlY3RlZCA9PT0gdW5kZWZpbmVkIHx8IHJvd0luZm8/Ll9zZWxlY3RlZCA9PSB0cnVlIHx8ICh0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCAmJiByb3dJbmZvPy5yb3dJZCA9PSAwICYmICF0aGlzLnNob3dGaXJzdFJvdykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3dJbmZvPy5yb3dJZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Rmlyc3RSb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEYmxDbGljazogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGJsY2xpY2snLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVzZWxlY3Q6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHB1bGxBbGxXaXRoKHRoaXMuaXRlbXMsIFtyb3ddLCBpc0VxdWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2Rlc2VsZWN0JywgeyRkYXRhOiByb3csICRldmVudDogZSwgcm93fSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50T2JqID0gdGhpcy5ncmlkT3B0aW9ucy5nZXRQYXJlbnRUYWJsZURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHBhcmVudE9iai5wYXJlbnRJZCA/IHtwYWdlOiB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UsIGluZGV4OiByb3dEYXRhLiRpbmRleCAtIDEsIHBhcmVudFJvd0luZGV4OiBwYXJlbnRPYmoucGFyZW50SWQsIHBhcmVudEN1cnJlbnRQYWdlOiBwYXJlbnRPYmoucGFyZW50UGFnZX06IHtwYWdlOiB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UsIGluZGV4OiByb3dEYXRhLiRpbmRleCAtIDF9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKHNlbGVjdGVkSXRlbSwgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcywgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsT25Sb3dEZXNlbGVjdEV2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkZXNlbGVjdCcsIHskZGF0YTogcm93LCAkZXZlbnQ6IGUsIHJvd30pO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsT25Sb3dDbGlja0V2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBXTVMtMTg3NzQ6IElmIHdlIGludm9rZSBuYXZpZ2F0aW9uIGFjdGlvbiB2YXJpYWJsZSBvbiByb3djbGljayBjYWxsYmFjaywgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmluZyBvdXRzaWRlIGFuZ3VsYXIgem9uZSBzbyBhZGRpbmcgbmdab25lLnJ1blxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDYWxsIHJvdyBjbGljayBvbmx5IGlmIGNsaWNrIGlzIHRyaWdnZXJlZCBieSB1c2VyXG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5oYXNPd25Qcm9wZXJ0eSgnb3JpZ2luYWxFdmVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93Y2xpY2snLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgICAgICBvbkNvbHVtblNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbnNlbGVjdCcsIHskZGF0YTogY29sLCAkZXZlbnQ6IGV9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Db2x1bW5EZXNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbmRlc2VsZWN0JywgeyRkYXRhOiBjb2wsICRldmVudDogZX0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkhlYWRlckNsaWNrOiAoY29sLCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBpZiBvblNvcnQgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBpbnZva2UgaXQgd2hlbiB0aGUgY29sdW1uIGhlYWRlciBpcyBjbGlja2VkXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hlYWRlcmNsaWNrJywgeyRldmVudDogZSwgJGRhdGE6IGNvbCwgY29sdW1uOiBjb2x9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0QWxsUm93czogKGNoZWNrZWQsZSk9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmhlYWRlcnNlbGVjdGFsbCAmJiB0aGlzLm11bHRpc2VsZWN0KXtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhU2l6ZSA9IHRoaXMuZGF0YU5hdmlnYXRvci5kYXRhU2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRGljdCA9IHsgc2VsZWN0ZWRJdGVtOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKGRhdGFTaXplIC8gcGFnZVNpemUpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSB0b3RhbFBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VMZW4gPSBNYXRoLm1pbihwYWdlU2l6ZSwgZGF0YVNpemUgLSAocGFnZSAtIDEpICogcGFnZVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERpY3Quc2VsZWN0ZWRJdGVtLnB1c2goeyBwYWdlLCBpbmRleDogaSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuX19mdWxsRGF0YV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLm5leHQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgc2VsZWN0ZWREaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2Z1bGxEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd3NlbGVjdCcsIHskZGF0YTogZ2V0Q2xvbmVkT2JqZWN0KHJvdyksICRldmVudDogZSwgcm93OiBnZXRDbG9uZWRPYmplY3Qocm93KX0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID10aGlzLnNlbGVjdGVkSXRlbXM9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeyBzZWxlY3RlZEl0ZW06IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX19mdWxsRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkZXNlbGVjdCcsIHsgJGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVsZXRlOiAocm93LCBjYW5jZWxSb3dEZWxldGVDYWxsYmFjaywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgJ2NhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrJzogY2FuY2VsUm93RGVsZXRlQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICdldnQnOiBlLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbEJhY2snOiBjYWxsQmFja1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0luc2VydDogKHJvdywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0UmVjb3JkKGV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgZXZlbnQ6IGUsICdjYWxsQmFjayc6IGNhbGxCYWNrfSkpO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVSb3dVcGRhdGU6IChyb3csIGV2ZW50TmFtZT8pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saXZlVGFibGVQYXJlbnQudXBkYXRlUm93KHJvdywgZXZlbnROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJldkRhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXJSb3dVcGRhdGU6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc01vZGVsVmFySW5saW5lT3JRdWljayA9IHRoaXMuaXNNb2RlbFZhcmlhYmxlSW5saW5lT3JRdWlja0VkaXQoKTtcbiAgICAgICAgICAgIGlmIChpc01vZGVsVmFySW5saW5lT3JRdWljaykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5saW5lRWRpdFNhdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIElubGluZSBzYXZlIHRyaWdnZXJzIG5hdmlnYXRlUGFnZSAvIGRhdGFzZXQgZW1pdCBhc3luY2hyb25vdXNseTsgYVxuICAgICAgICAgICAgICAgIC8vIG1pY3JvdGFzayB0aW1lb3V0IGNsZWFyZWQgdGhlIGZsYWcgYmVmb3JlIGdyaWREYXRhIHJhbiDihpIgZnVsbCByZXJlbmRlci5cbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbFZhckVkaXRTb2Z0UmVmcmVzaEFjdGl2ZVVudGlsID0gRGF0ZS5ub3coKSArIDU1MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG11dGVXYXRjaGVycygpO1xuICAgICAgICAgICAgY29uc3QgdiA9IGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5yb3dpbmRleCAhPSBudWxsO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSZWNvcmQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7cm93LCBwcmV2RGF0YTogdiA/IG9wdGlvbnMucm93aW5kZXggOiB0aGlzLnByZXZEYXRhLCBldmVudDogZSwgY2FsbEJhY2t9KSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB1bk11dGVXYXRjaGVycygpO1xuICAgICAgICAgICAgICAgIGlmIChpc01vZGVsVmFySW5saW5lT3JRdWljaykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5saW5lRWRpdFNhdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsVmFyRWRpdFNvZnRSZWZyZXNoQWN0aXZlVW50aWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9LCA1MjApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dVcGRhdGU6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd3VwZGF0ZScsIHskZXZlbnQ6IGUsICRkYXRhOiByb3csIHJvdywgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0luc2VydDogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93aW5zZXJ0JywgeyRldmVudDogZSwgJGRhdGE6IHJvdywgcm93LCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93RGVsZXRlOiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93ZGVsZXRlJywgeyRldmVudDogZSwgcm93OiByb3dEYXRhLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRm9ybVJlbmRlcjogKCRyb3csIGUsIG9wZXJhdGlvbiwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXQgPSBhbHdheXNOZXdSb3cgPyAnaW5saW5lSW5zdGFuY2VOZXcnIDogJ2lubGluZUluc3RhbmNlJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldHMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xbd2lkZ2V0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0c1tjb2wuZmllbGRdID0gY29sW3dpZGdldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgZm9ybXdpZGdldHMgdG8gdGhlIGNvbnRleHQgZm9yIGlubGluZWluc3RhbmNlIHdpZGdldCB3aGVuIGZpZWxkRGVmcyB3ZXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sW3dpZGdldF0uY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFt3aWRnZXRdLmNvbnRleHQuZm9ybVdpZGdldHMgPSB0aGlzLmZvcm1XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2wsIHdpZGdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Zvcm1yZW5kZXInLCB7JGV2ZW50OiBlLCBmb3JtV2lkZ2V0czogdGhpcy5mb3JtV2lkZ2V0cywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZUZvcm1SZW5kZXI6IChyb3csIGUsIG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZm9ybXJlbmRlcicsIHskZXZlbnQ6IGUsIHJvdywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyUm93TmdDbGFzc1dhdGNoZXI6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd25nY2xhc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X3Jvd05nQ2xhc3NfJHtpbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgcm93bmdjbGFzcyBhdHRyIGlzIHByZXNlbnQgZm9yIHRhYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCh0aGlzLnJvd25nY2xhc3MsIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlSb3dOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIGluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckNvbE5nQ2xhc3NXYXRjaGVyOiAocm93RGF0YSwgY29sRGVmLCByb3dJbmRleCwgY29sSW5kZXgsIHN1bW1hcnlSb3cpID0+IHtcbiAgICAgICAgICAgIGlmICghY29sRGVmWydjb2wtbmctY2xhc3MnXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gc3VtbWFyeVJvdyA/IGAke3RoaXMud2lkZ2V0SWR9X3N1bW1hcnlSb3dfY29sTmdDbGFzc18ke3Jvd0luZGV4fV8ke2NvbEluZGV4fWA6IGAke3RoaXMud2lkZ2V0SWR9X2NvbE5nQ2xhc3NfJHtyb3dJbmRleH1fJHtjb2xJbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgY29sLW5nLWNsYXNzIGF0dHIgaXMgcHJlc2VudCBmb3IgdGFibGVcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoJHdhdGNoKGNvbERlZlsnY29sLW5nLWNsYXNzJ10sIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlDb2xOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJDb2xsYXBzZU9yRXhwYW5kVGl0bGVXYXRjaDooZXhwciwgcm93RGF0YSwgaW5kZXgsdGl0bGVOYW1lLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9XyR7dGl0bGVOYW1lfV8ke2luZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2goZXhwciwgdGhpcy52aWV3UGFyZW50LCB7cm93fSwgKG52LG92KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYCR7dGl0bGVOYW1lfS5iaW5kYCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUodGl0bGVOYW1lLCBudik7XG4gICAgICAgICAgICAgICAgaWYodGl0bGVOYW1lID09PSAnZXhwYW5kdGl0bGUnKSBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCBudik7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDdXN0b21FeHByZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbCA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVDdXN0b21FeHByZXNzaW9uQ29udGV4dHM6IChwcmVwYXJlZERhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb3VudCA9IHRoaXMuY3VzdG9tRXhwclZpZXdSZWYubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmdldChpKSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIXZpZXdSZWYgfHwgIXZpZXdSZWYuY29udGV4dCB8fCAhdmlld1JlZi5jb250ZXh0LnJvdyB8fCB2aWV3UmVmLmNvbnRleHQucm93LiRpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1JvdyA9IHZpZXdSZWYuY29udGV4dC5yb3c7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBleGlzdGluZ1Jvdy4kaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFSb3cgPSBwcmVwYXJlZERhdGFbcm93SW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YVJvdykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YVJvdykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnJCRpbmRleCcgJiYga2V5ICE9PSAnJCRwaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUm93W2tleV0gPSBkYXRhUm93W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1Jvdy4kaXNGaXJzdCA9IGV4aXN0aW5nUm93LiRpbmRleCA9PT0gMTtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1Jvdy4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IGV4aXN0aW5nUm93LiRpbmRleDtcbiAgICAgICAgICAgICAgICB2aWV3UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbGVhclJvd0RldGFpbEV4cHJlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93RGV0YWlsVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGludmFsaWRhdGVSb3dEZXRhaWxDYWNoZTogKHByZXBhcmVkRGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3Rpbmcgcm93IGRldGFpbCB2aWV3IGNvbnRleHRzIGluLXBsYWNlIHNvIGN1cnJlbnRseVxuICAgICAgICAgICAgLy8gZXhwYW5kZWQgcGFydGlhbHMgcGljayB1cCB0aGUgbmV3IHJvdyBkYXRhIHZpYSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAgICAgICAgY29uc3Qgdmlld0NvdW50ID0gdGhpcy5yb3dEZXRhaWxWaWV3UmVmLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlld0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3UmVmID0gdGhpcy5yb3dEZXRhaWxWaWV3UmVmLmdldChpKSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIXZpZXdSZWYgfHwgIXZpZXdSZWYuY29udGV4dCB8fCAhdmlld1JlZi5jb250ZXh0LnJvdykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSb3cgPSB2aWV3UmVmLmNvbnRleHQucm93O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gZXhpc3RpbmdSb3cuJGluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm93ID0gcHJlcGFyZWREYXRhW3Jvd0luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGFSb3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJyQkaW5kZXgnICYmIGtleSAhPT0gJyQkcGsnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1Jvd1trZXldID0gZGF0YVJvd1trZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmlld1JlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVmcmVzaFNlbGVjdGVkSXRlbXM6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93cy5mb3JFYWNoKHJvdyA9PiB0aGlzLml0ZW1zLnB1c2gocm93KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dChzZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUN1c3RvbUV4cHJlc3Npb25zOiAocm93RGF0YSwgaW5kZXgsIHN1bW1hcnlSb3c/KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVUZW1wbGF0ZSA9ICh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0bXBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29sRGVmID0ge307XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBjb2xEZWZcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzVG9Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUV4cHJWaWV3ID0gdGhpcy5jdXN0b21FeHByVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBjdXN0b21FeHByVmlldy5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKGNvbERlZiwgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeVJvdykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkU3VtbWFyeVRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZVRlbXBsYXRlKGNvbC5jdXN0b21FeHByVG1wbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgY3VzdG9tIGV4cHJlc3Npb25cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclRtcGwuZm9yRWFjaChjb21waWxlVGVtcGxhdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93RXhwYW5zaW9uQ2VsbDogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbFtpbmRleF0gPSB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtyb3d9KS5yb290Tm9kZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Um93RXhwYW5zaW9uQWN0aW9uOiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dEZXRhaWxWaWV3OiAoJGV2ZW50LCByb3dEYXRhLCByb3dJZCwgJHRhcmdldCwgJG92ZXJsYXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RlZiA9IGdldENsb25lZE9iamVjdCh0aGlzLnJvd0RlZik7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3dleHBhbmQnLCB7JGV2ZW50LCAkZGF0YTogcm93RGVmLCByb3d9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJvd0RlZi5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXhwYW5kIHRoZSByb3cgZGV0YWlsXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgLy8gUm93IGlzIGFscmVhZHkgcmVuZGVyZWQuIFJldHVybiBoZXJlXG4gICAgICAgICAgICBpZiAodGhpcy5yb3dEZWZNYXBbcm93SWRdICYmIHRoaXMucm93RGVmTWFwW3Jvd0lkXS5jb250ZW50ID09PSByb3dEZWYuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZXhwYW5kJywgeyRldmVudCwgcm93LCAkZGF0YTogdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXBbcm93SWRdID0gcm93RGVmO1xuICAgICAgICAgICAgJHRhcmdldC5lbXB0eSgpO1xuICAgICAgICAgICAgJHRhcmdldC5oaWRlKCk7XG4gICAgICAgICAgICAkb3ZlcmxheS5zaG93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIHJvd0RlZixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9hZDogKHdpZGdldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG92ZXJsYXkuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXSA9IHdpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2V4cGFuZCcsIHskZXZlbnQsIHJvdywgJGRhdGE6IHdpZGdldH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfX07XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMucm93RGV0YWlsVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5yb3dFeHBhbnNpb25UbXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAkdGFyZ2V0WzBdLmFwcGVuZENoaWxkKHJvb3ROb2RlKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dDb2xsYXBzZTogKCRldmVudCwgcm93LCByb3dJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93Y29sbGFwc2UnLCB7JGV2ZW50LCByb3csICRkYXRhOiB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF19KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dDb2xsYXBzZTogKCRldmVudCwgcm93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2NvbGxhcHNlJywgeyRldmVudCwgcm93fSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEN1c3RvbUV4cHJlc3Npb246IChmaWVsZE5hbWUsIGluZGV4LCBzdW1tYXJ5Um93PykgPT4ge1xuICAgICAgICAgICAgbGV0IGN1c3RvbUV4cHJlc3Npb247XG4gICAgICAgICAgICBpZiAoIXN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21FeHByZXNzaW9uID0gdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb24gPSB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tRXhwcmVzc2lvbiB8fCAnJztcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJSb3dBY3Rpb25zOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGwgPSB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dBY3Rpb25zOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0ucHVzaCguLi50aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7cm93fSkucm9vdE5vZGVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRSb3dBY3Rpb246IChpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUlubGluZUVkaXRSb3c6IChyb3dEYXRhLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgaW5saW5lIHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0TmV3VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWUgKyAnX25ldyddIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFBlbmRpbmdTcGlubmVyU3RhdHVzTmV3OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnNob3dQZW5kaW5nU3Bpbm5lck5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IHJvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBnZXRDb250cm9sOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGVuZGluZ1NwaW5uZXJTdGF0dXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5zaG93UGVuZGluZ1NwaW5uZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIGNvbnRleHQpLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldElubGluZUVkaXRXaWRnZXQ6IChmaWVsZE5hbWUsIHZhbHVlLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldEZpZWxkVmFsdWUoZmllbGROYW1lICsgJ19uZXcnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRGaWVsZFZhbHVlKGZpZWxkTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lQ29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICB9LFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiAoZmllbGROYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRGaWVsZFZhbHVlOiBmaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbCAmJiBjb250cm9sLnZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGFkZCBsb2FkIG1vcmUgYnV0dG9uIHRvIHRhYmxlXG4gICAgICAgIGFkZExvYWRNb3JlQnRuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FkZExvYWRNb3JlQnRuJywgdGhpcy5vbmRlbWFuZG1lc3NhZ2UsIHRoaXMubG9hZGluZ2RhdGFtc2csICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMubW9kZSA9PT0gJ3ZpZXdsZXNzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGJpbmQgc2Nyb2xsIGV2ZW50XG4gICAgICAgIGJpbmRTY3JvbGxFdnQ6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ncmlkRGF0YSAmJiB0aGlzLl9ncmlkRGF0YS5sZW5ndGggJiYgdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAvLyBzbW9vdGhzY3JvbGwgZXZlbnRzIHdpbGwgYmUgYmluZGVkLlxuICAgICAgICAgICAgICAgIC8vIEFkZGVkIHRpbWVvdXQgYXMgdGhlIHRhYmxlIGh0bWwgaXMgcmVuZGVyZWQgYXQgcnVudGltZVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmJpbmRTY3JvbGxFdnQodGhpcywgJ3Rib2R5JywgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVGaWx0ZXJSb3c6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBjb21waWxlZCBmaWx0ZXIgdGVtcGxhdGVcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmZpbHRlclZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IHRoaXMub25Sb3dGaWx0ZXJDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNYXRjaE1vZGVzLmluZGV4T2YodGhpcy5yb3dGaWx0ZXJbZmllbGROYW1lXSAmJiB0aGlzLnJvd0ZpbHRlcltmaWVsZE5hbWVdLm1hdGNoTW9kZSkgPiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyldID0gcm9vdE5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RmlsdGVyV2lkZ2V0OiAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICAvLyBNb3ZlIHRoZSBnZW5lcmF0ZWQgZmlsdGVyIHRlbXBsYXRlIHRvIHRoZSBmaWx0ZXIgcm93XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpZWxkTmFtZV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldEdyaWRFZGl0TW9kZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JpZEVkaXRNb2RlID0gdmFsO1xuICAgICAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkU3RhdGU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdmFsID09PSAnbG9hZGluZyc7XG4gICAgICAgIH0sXG4gICAgICAgIC8qXG4gICAgICAgICAgICBzZXQgYWN0aW9uUm93SW5kZXggYW5kIGFjdGlvblJvd1BhZ2UgdmFsdWVzXG4gICAgICAgICAgICBhY3Rpb25Sb3dJbmRleCB3aWxsIGhhdmUgdGhlIHJvdyBpbmRleCBpbiB0aGUgZGF0YXNldCBvbiB3aGljaCBlZGl0L2RlbGV0ZSBvcGVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkXG4gICAgICAgICAgICBhY3Rpb25Sb3dQYWdlIHdpbGwgaGF2ZSBwYWdlIG51bWJlciBpbiB3aGljaCB0aGUgYWN0aW9uIHJvdyBpbmRleCBpcyBwcmVzZW50XG4gICAgICAgICAqL1xuICAgICAgICBzZXRBY3Rpb25Sb3dJbmRleDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHBhcnNlSW50KHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93SW5kZXgnLCB0aGlzLmFjdGlvblJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMuYWN0aW9uUm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IE1hdGguZmxvb3IodGhpcy5hY3Rpb25Sb3dJbmRleCAvIHRoaXMucGFnZXNpemUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93UGFnZScsIHRoaXMuYWN0aW9uUm93UGFnZSB8fCB0aGlzLmdyaWRPcHRpb25zLmFjdGlvblJvd1BhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJBY3Rpb25Sb3dJbmRleDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUm93RGVsZXRlZCAmJiAodGhpcy5pbmZTY3JvbGwgfHwgdGhpcy5vbkRlbWFuZExvYWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFjdGlvblJvd1ZhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9DaGFuZ2VzRGV0ZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVzc2FnZSh0cnVlLCAnaW5mbycsIHRoaXMuYXBwTG9jYWxlLk1FU1NBR0VfTk9fQ0hBTkdFUywgJycpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byByZWRyYXcgdGhlIHdpZGdldHMgb24gcmVzaXplIG9mIGNvbHVtbnNcbiAgICAgICAgcmVkcmF3V2lkZ2V0czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuaW5saW5lSW5zdGFuY2UgJiYgY29sLmlubGluZUluc3RhbmNlLnJlZHJhdyk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5pbmxpbmVJbnN0YW5jZU5ldyAmJiBjb2wuaW5saW5lSW5zdGFuY2VOZXcucmVkcmF3KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmZpbHRlckluc3RhbmNlICYmIGNvbC5maWx0ZXJJbnN0YW5jZS5yZWRyYXcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNlYXJjaEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgc29ydEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgdGltZW91dENhbGw6IChmbiwgZGVsYXkpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZm4sIGRlbGF5KTtcbiAgICAgICAgfSxcbiAgICAgICAgcnVuSW5OZ1pvbmU6IGZuID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bihmbik7XG4gICAgICAgIH0sXG4gICAgICAgIHNhZmVBcHBseTogKCkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRUb3VjaGVkOiAobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJGb3JtOiB0aGlzLmNsZWFyRm9ybS5iaW5kKHRoaXMpLFxuICAgICAgICBjYWxsTG9hZElubGluZVdpZGdldERhdGE6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvbC5pc0RhdGFTZXRCb3VuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5sb2FkSW5saW5lV2lkZ2V0RGF0YSAmJiBjb2wubG9hZElubGluZVdpZGdldERhdGEuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gYXBwbHkgdmFsaWRhdG9ycyB0byBJbmxpbmUgZm9ybSBjb250cm9sc1xuICAgICAgICBhcHBseVZhbGlkYXRpb25zOiAoY29sLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmFwcGx5TmV3Um93VmFsaWRhdGlvbnMgJiYgY29sLmFwcGx5TmV3Um93VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5hcHBseVZhbGlkYXRpb25zICYmIGNvbC5hcHBseVZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlbW92ZSB2YWxpZGF0b3JzIGFuZCBzZXQgZm9ybSBzdGF0ZSB0byB1bnRvdWNoZWQgZm9yIGlubGluZSBmb3JtIGNvbnRyb2xcbiAgICAgICAgcmVtb3ZlVmFsaWRhdGlvbnM6IChhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2wucmVhZG9ubHkgJiYgY29sLmJpbmRpbmcgIT09ICdyb3dPcGVyYXRpb25zJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLnJlbW92ZU5ld1Jvd1ZhbGlkYXRpb25zICYmIGNvbC5yZW1vdmVOZXdSb3dWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5yZW1vdmVWYWxpZGF0aW9ucyAmJiBjb2wucmVtb3ZlVmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiB3bS5WYXJpYWJsZSArIGlubGluZSBvciBxdWlja2VkaXQgKGVkaXRtb2RlIGlzIHN0cmluZyBmcm9tIG1hcmt1cDsgbm9ybWFsaXplIGNhc2UpLiAqL1xuICAgIHByaXZhdGUgaXNNb2RlbFZhcmlhYmxlSW5saW5lT3JRdWlja0VkaXQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSAhPT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVtID0gU3RyaW5nKHRoaXMuZWRpdG1vZGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBlbSA9PT0gJ3F1aWNrZWRpdCcgfHwgZW0gPT09ICdpbmxpbmUnO1xuICAgIH1cblxuICAgIC8qKiBUcnVlIHdoaWxlIGFuIGlubGluZS9xdWlja2VkaXQgcm93IHNhdmUgaXMgdXBkYXRpbmcgdGhlIGdyaWQgKGluY2wuIGRlbGF5ZWQgbmF2aWdhdG9yIGVtaXQpLiAqL1xuICAgIHByaXZhdGUgc2hvdWxkU29mdFJlZnJlc2hBZnRlck1vZGVsVmFyUm93U2F2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb2RlbFZhcmlhYmxlSW5saW5lT3JRdWlja0VkaXQoKVxuICAgICAgICAgICAgJiYgKHRoaXMuX2lzSW5saW5lRWRpdFNhdmUgfHwgdGhpcy5fbW9kZWxWYXJFZGl0U29mdFJlZnJlc2hBY3RpdmVVbnRpbCA+IERhdGUubm93KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dyaWREYXRhO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbXNFeGlzdCA9IGZhbHNlO1xuICAgIHNldCBncmlkRGF0YShuZXdWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI0MDEyXTogaGlkZSBubyBkYXRhZm91bmQgbXNnIHdoZW4gdmFyaWFibGVJbmZsaWdodCBpcyB0cnVlIGFuZCBkYXRhc2V0IGlzIGVtcHR5XG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlSW5mbGlnaHQgJiYgaXNFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI0MTA4XTogQ2hhbmdlIHRoZSBzdGF0dXMgdG8gcmVhZHkgb3Igbm9kYXRhIGZvdW5kIHdoZW4gdmFyaWFibGVJbmZsaWdodCBpcyBmYWxzZShhZnRlciBnZXR0aW5nIHRoZSBkYXRhKVxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgKG5ld1ZhbHVlLmxlbmd0aCkgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAncmVhZHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgX2dyaWREYXRhIGZpZWxkIHdpdGggdGhlIG5leHQgc2V0IG9mIGl0ZW1zIGFuZCBtb2RpZnkgdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgW3RoaXMuX2dyaWREYXRhLCB0aGlzLmN1cnJlbnRQYWdlXSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlRmllbGRzT25QYWdpbmF0aW9uKHRoaXMsIG5ld1ZhbHVlKTtcblxuICAgICAgICAgICAgLy8gV2hlbiBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gcHJldmlvdXMgcGFnZSwgdXBkYXRlIHRoZSBfZ3JpZERhdGEgZmllbGQgd2l0aCB0aGUgbW9kaWZpZWQgcm93IGRhdGFcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgPT09IHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5FRElUKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBmbG9vcih0aGlzLmFjdGlvblJvd0luZGV4ICUgdGhpcy5wYWdlc2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JpZERhdGEuc3BsaWNlKHRoaXMuYWN0aW9uUm93SW5kZXgsIDEgLCBuZXdWYWx1ZVtyb3dJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNMYXN0UGFnZScsICEhKHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG9uIGRlbWFuZCBwYWdpbmF0aW9uLCBjcmVhdGUgdGhlIGxvYWQgbW9yZSBidXR0b24gb25seSBvbmNlIGFuZCBzaG93IHRoZSBidXR0b24gdW50aWwgbmV4dCBwYWdlIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50LmZpbmQoJy5vbi1kZW1hbmQtZGF0YWdyaWQnKS5sZW5ndGggJiYgIXRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ICYmIHRoaXMub25EZW1hbmRMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hZGRMb2FkTW9yZUJ0bigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoKSAmJiAodGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgfHwgIXRoaXMuaXNEYXRhTG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBuZXh0IHBhZ2UgaXMgZGlzYWJsZWQgb3Igd2hlbiB0aGUgZGF0YSBpcyBub3QgbG9hZGluZyByZW1vdmUgdGhlIGxvYWRpbmcvbG9hZCBtb3JlIGJ1dHRvbiBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdoaWRlTG9hZGluZ0luZGljYXRvcicsIHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ncmlkRGF0YSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gMDtcbiAgICAgICAgbGV0IGdyaWRPcHRpb25zO1xuXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX2dyaWREYXRhKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYmluZFNjcm9sbEV2dCgpO1xuXG4gICAgICAgICAgICAvKlNldHRpbmcgdGhlIHNlcmlhbCBubydzIG9ubHkgd2hlbiBzaG93IG5hdmlnYXRpb24gaXMgZW5hYmxlZCBhbmQgZGF0YSBuYXZpZ2F0b3IgaXMgY29tcGlsZWRcbiAgICAgICAgICAgICBhbmQgaXRzIGN1cnJlbnQgcGFnZSBpcyBzZXQgcHJvcGVybHkqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0Um93SW5kZXggPSAoKHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSAtIDEpICogKHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzIHx8IDEpKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc3RhcnRSb3dJbmRleCcsIHN0YXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogSWYgY29sRGVmcyBhcmUgYXZhaWxhYmxlLCBidXQgbm90IGFscmVhZHkgc2V0IG9uIHRoZSBkYXRhZ3JpZCwgdGhlbiBzZXQgdGhlbS5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBoYXBwZW4gd2hpbGUgc3dpdGNoaW5nIGZyb20gbWFya3VwIHRvIGRlc2lnbiB0YWIuICovXG4gICAgICAgICAgICBncmlkT3B0aW9ucyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRPcHRpb25zJyk7XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGggJiYgdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignY29sRGVmcycsIGdldENsb25lZE9iamVjdCh0aGlzLmZpZWxkRGVmcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgZGF0YSBhbmQgY29sRGVmcyBhcmUgcHJlc2VudCwgY2FsbCBvbiBiZWZvcmUgZGF0YSByZW5kZXIgZXZlbnRcbiAgICAgICAgICAgIC8vIE5vdGU6IEVycm9ycyBpbiBiZWZvcmVkYXRhcmVuZGVyIHNob3VsZCBub3QgcHJldmVudCB0YWJsZSByZW5kZXJpbmdcbiAgICAgICAgICAgIGlmICghdGhpcy5pc2R5bmFtaWN0YWJsZSAmJiAhaXNFbXB0eShuZXdWYWx1ZSkgJiYgZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWRhdGFyZW5kZXInLCB7JGRhdGE6IHRoaXMuX2dyaWREYXRhLCAkY29sdW1uczogdGhpcy5jb2x1bW5zLCBkYXRhOiB0aGlzLl9ncmlkRGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9nIGVycm9yIGJ1dCBjb250aW51ZSB3aXRoIHJlbmRlcmluZyAtIGJlZm9yZWRhdGFyZW5kZXIgZXJyb3JzIHNob3VsZCBub3QgYmxvY2sgdGFibGUgcmVuZGVyaW5nXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgaW4gYmVmb3JlZGF0YXJlbmRlciBldmVudCBjYWxsYmFjaywgY29udGludWluZyB3aXRoIHRhYmxlIHJlbmRlcmluZzonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkU29mdFJlZnJlc2hBZnRlck1vZGVsVmFyUm93U2F2ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVkRGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLl9ncmlkRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5kYXRhID0gY2xvbmVkRGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc29mdFJlZnJlc2hEYXRhJywgY2xvbmVkRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2RhdGEnLCBnZXRDbG9uZWRPYmplY3QodGhpcy5fZ3JpZERhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBncmlkRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWREYXRhIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZGl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5KHRoaXMuaXRlbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLml0ZW1zWzBdKTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRpdGVtKHZhbCkge1xuICAgICAgICAvLyBTZWxlY3QgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJhc2VkIG9uIHRoZSBuZXcgc2VsZWN0ZWQgaXRlbXMgcGFzc2VkXG4gICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB2YWwpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXByZXNzJywgWyckZXZlbnQnXSkgb25LZXlQcmVzcyAoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCRldmVudC53aGljaCA9PT0gMTMpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZW50ZXJrZXlwcmVzcycsIHskZXZlbnQsICRkYXRhOiB0aGlzLmdyaWREYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGluajogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgICAgIHByaXZhdGUgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICAgICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlld3BvcnQ6IFZpZXdwb3J0LFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50TGlzdDogTGlzdENvbXBvbmVudCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHVibGljIGJpbmRkYXRhc2V0LFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc291cmNlLmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzb3VyY2UsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3JlYWRvbmx5Z3JpZCcpIHB1YmxpYyByZWFkb25seWdyaWQsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgdHJ1c3RBc1BpcGU6IFRydXN0QXNQaXBlLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLm5nZm9ybSA9IGZiLmdyb3VwKHt9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQodGhpcy5jb250ZXh0KTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzVG9SZW1vdmUgPSBbXG4gICAgICAgICAgICAvLyBVcGRhdGVzIHBhZ2luYXRpb24sIGZpbHRlciwgc29ydCBldGMgb3B0aW9ucyBmb3Igc2VydmljZSBhbmQgY3J1ZCB2YXJpYWJsZXNcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnY2hlY2stc3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucycsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlTmFtZSA9IGdldCh0aGlzLmRhdGFzb3VyY2UsICduYW1lJyk7XG4gICAgICAgICAgICAgICAgLy8gaW4gUHJlZmFicywgdGhpcy5kYXRhc291cmNlIGlzIG5vdCByZXNvbHZlZCBhdCB0aGUgdGltZSBvZiB2YXJpYWJsZSBpbnZvY2F0aW9uLCBzbyBhZGRpdGlvbmFsIGNoZWNrIGlzIHJlcXVpcmVkLlxuICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBleHRyYWN0RGF0YVNvdXJjZU5hbWUodGhpcy5iaW5kZGF0YXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZXQob3B0aW9ucywgJ3ZhcmlhYmxlLm5hbWUnKSAhPT0gZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyBTaG93IGxvYWRpbmcgc3RhdHVzIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSBsaWZlIGN5Y2xlXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChvcHRpb25zLnZhcmlhYmxlLCB0aGlzLmRhdGFzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEZWZpbmVkKHRoaXMudmFyaWFibGVJbmZsaWdodCkgPyB0aGlzLmRlYm91bmNlZEhhbmRsZUxvYWRpbmcob3B0aW9ucykgOiB0aGlzLmhhbmRsZUxvYWRpbmcob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnc2V0dXAtY3VkLWxpc3RlbmVyJywgcGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgIT09IHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXNEZXBlbmRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlJFxuICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLnRyaWdnZXJXTUV2ZW50LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICBsaXN0ZW5lcnNUb1JlbW92ZS5mb3JFYWNoKCBsID0+IHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIobCkgKTtcblxuICAgICAgICB0aGlzLmRlbGV0ZW9rdGV4dCA9IHRoaXMuYXBwTG9jYWxlLkxBQkVMX09LO1xuICAgICAgICB0aGlzLmRlbGV0ZWNhbmNlbHRleHQgPSB0aGlzLmFwcExvY2FsZS5MQUJFTF9DQU5DRUw7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb25maWcgPSB0aGlzLmhlYWRlckNvbmZpZy5maWx0ZXIodGhpcy5maWx0ZXJFbXB0eVZhbHVlcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgcmVtb3ZlPGFueT4odGhpcy5maWVsZERlZnMsIGYgPT4gZiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcnVuTW9kZUluaXRpYWxQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgc2hvd3Jvd2luZGV4OiAnc2hvd1Jvd0luZGV4JyxcbiAgICAgICAgICAgIG11bHRpc2VsZWN0OiAnbXVsdGlzZWxlY3QnLFxuICAgICAgICAgICAgcmFkaW9zZWxlY3Q6ICdzaG93UmFkaW9Db2x1bW4nLFxuICAgICAgICAgICAgZmlsdGVybnVsbHJlY29yZHM6ICdmaWx0ZXJOdWxsUmVjb3JkcycsXG4gICAgICAgICAgICBlbmFibGVzb3J0OiAnZW5hYmxlU29ydCcsXG4gICAgICAgICAgICBzaG93aGVhZGVyOiAnc2hvd0hlYWRlcicsXG4gICAgICAgICAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb246ICdlbmFibGVDb2x1bW5TZWxlY3Rpb24nLFxuICAgICAgICAgICAgc2hvd25ld3JvdzogJ3Nob3dOZXdSb3cnLFxuICAgICAgICAgICAgZ3JpZGZpcnN0cm93c2VsZWN0OiAnc2VsZWN0Rmlyc3RSb3cnLFxuICAgICAgICAgICAgaXNyb3dzZWxlY3RhYmxlOiAnaXNyb3dzZWxlY3RhYmxlJyxcbiAgICAgICAgICAgIGFsbG93cGFnZXNpemVjaGFuZ2U6ICdhbGxvd3BhZ2VzaXplY2hhbmdlJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWFkb25seWdyaWQgfHwgIXRoaXMuZWRpdG1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRvbmx5Z3JpZCA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhcnRPZkxpdmVHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSB0aGlzLmlzUGFydE9mTGl2ZUdyaWQuZm9ybWxheW91dCA9PT0gJ2lubGluZScgPyBFRElUX01PREUuRk9STSA6IEVESVRfTU9ERS5ESUFMT0c7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9IHRoaXMucmVhZG9ubHlncmlkID8gRURJVF9NT0RFLklOTElORSA6ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sRGVmcyA9IHRoaXMuZnVsbEZpZWxkRGVmcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dBY3Rpb25zID0gdGhpcy5yb3dBY3Rpb25zO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmhlYWRlckNvbmZpZyA9IHRoaXMuaGVhZGVyQ29uZmlnO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0NsYXNzID0gdGhpcy5yb3djbGFzcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5lZGl0bW9kZSA9IHRoaXMuZWRpdG1vZGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZm9ybVBvc2l0aW9uID0gdGhpcy5mb3JtcG9zaXRpb247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZmlsdGVybW9kZSA9IHRoaXMuZmlsdGVybW9kZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5maWx0ZXJvbmtleXByZXNzID0gdGhpcy5maWx0ZXJvbmtleXByZXNzO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzcm93c2VsZWN0YWJsZSA9IHRoaXMuaXNyb3dzZWxlY3RhYmxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmFsbG93cGFnZXNpemVjaGFuZ2UgPSB0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2VhcmNoTGFiZWwgPSB0aGlzLnNlYXJjaGxhYmVsO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzTW9iaWxlID0gaXNNb2JpbGUoKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNlY3VyaXR5VXRpbHMucGlwZVRyYW5zZm9ybSA9IHRoaXMudHJ1c3RBc1BpcGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9IHRoaXMubmF2aWdhdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5pc2R5bmFtaWN0YWJsZSA9IHRoaXMuaXNkeW5hbWljdGFibGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2hvd3ZpZXdsZXNzYnV0dG9uID0gdGhpcy5zaG93dmlld2xlc3NidXR0b247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMub25kZW1hbmRtZXNzYWdlID0gdGhpcy5vbmRlbWFuZG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMudmlld2xlc3NtZXNzYWdlID0gdGhpcy52aWV3bGVzc21lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubG9hZGluZ2RhdGFtc2cgPSB0aGlzLmxvYWRpbmdkYXRhbXNnO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKHRoaXMucGFnZXNpemVvcHRpb25zKTtcbiAgICAgICAgdGhpcy5wYWdlc2l6ZW9wdGlvbnMgPSB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tdWx0aXNlbGVjdHRpdGxlID0gdGhpcy5tdWx0aXNlbGVjdHRpdGxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm11bHRpc2VsZWN0YXJpYWxhYmVsID0gdGhpcy5tdWx0aXNlbGVjdGFyaWFsYWJlbDtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yYWRpb3NlbGVjdHRpdGxlID0gdGhpcy5yYWRpb3NlbGVjdHRpdGxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmhlYWRlcnNlbGVjdGFsbD10aGlzLmhlYWRlcnNlbGVjdGFsbDtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yYWRpb3NlbGVjdGFyaWFsYWJlbCA9IHRoaXMucmFkaW9zZWxlY3RhcmlhbGFiZWw7XG5cbiAgICAgICAgLy8gV2hlbiBsb2Fkb25kZW1hbmQgcHJvcGVydHkgaXMgZW5hYmxlZChkZWZlcmxvYWQ9XCJ0cnVlXCIpIGFuZCBzaG93IGlzIHRydWUsIG9ubHkgdGhlIGNvbHVtbiB0aXRsZXMgb2YgdGhlIGRhdGF0YWJsZSBhcmUgcmVuZGVyZWQsIHRoZSBkYXRhKGJvZHkgb2YgdGhlIGRhdGF0YWJsZSkgaXMgbm90IGF0IGFsbCByZW5kZXJlZC5cbiAgICAgICAgLy8gQmVjYXVzZSB0aGUgZ3JpZGRhdGEgaXMgc2V0dGluZyBiZWZvcmUgdGhlIGRhdGF0YWJsZSBkb20gaXMgcmVuZGVyZWQgYnV0IHdlIGFyZSBzZW5kaW5nIGVtcHR5IGRhdGEgdG8gdGhlIGRhdGF0YWJsZS5cbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuZ3JpZERhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5ncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAgICdzZWxlY3RGaWVsZCc6IHRoaXMuYXBwTG9jYWxlLk1FU1NBR0VfU0VMRUNUX0ZJRUxEXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50ID0gJCh0aGlzLl90YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5ncmlkRWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHsncG9zaXRpb24nOiAncmVsYXRpdmUnfSk7XG5cbiAgICAgICAgZm9yRWFjaChydW5Nb2RlSW5pdGlhbFByb3BlcnRpZXMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zW3ZhbHVlXSA9ICh0aGlzW2tleV0gPT09ICd0cnVlJyB8fCB0aGlzW2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVoYW5kbGVyICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbJ3NlbGVjdEZpcnN0Um93J10gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbERlZnMgPSB0aGlzLmZpZWxkRGVmcztcblxuICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUodGhpcy5ncmlkT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICAvLyBpZih0aGlzLmdyaWRPcHRpb25zLmRhdGEubGVuZ3RoIHx8IHRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAvLyAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICB0aGlzLmFwcGx5UHJvcHMuZm9yRWFjaChhcmdzID0+IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKC4uLmFyZ3MpKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0bW9kZSA9PT0gRURJVF9NT0RFLlFVSUNLX0VESVQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0JpbmQgPSB0aGlzLl9kb2N1bWVudENsaWNrQmluZC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGdldENvbmZpZ3VyZWRTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLm9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5wYWdlID0gd2lkZ2V0U3RhdGUucGFnaW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5vcmRlckJ5ID0gZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJyAnICsgZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHdpZGdldFN0YXRlLnNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMucGFnZSA9IDE7XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5maWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh3aWRnZXRTdGF0ZS5zZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLm9yZGVyQnkgPSBnZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnICcgKyBnZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldNRXZlbnQobmV3VmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRtb2RlID09PSAnZGlhbG9nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWU6ICdzZWxlY3RlZEl0ZW1DaGFuZ2UnLCB3aWRnZXROYW1lOiB0aGlzLm5hbWUsIHJvdzogbmV3VmFsLCB0YWJsZTogdGhpc30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBjb25zdCAkZ3JpZEVsZW1lbnQgPSB0aGlzLmRhdGFncmlkRWxlbWVudDtcbiAgICAgICAgY29uc3QgJHNvcnRJY29uID0gJGdyaWRFbGVtZW50LmZpbmQoJ3RoW2RhdGEtY29sLWZpZWxkPVwiJyArIGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICdcIl0gLnNvcnQtaWNvbicpO1xuICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKSA9PT0gJ2FzYycgJiYgJHNvcnRJY29uLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNvcnRJY29uLmFkZENsYXNzKCdhc2Mgd2kgd2ktbG9uZy1hcnJvdy11cCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJykgPT09ICdkZXNjJyAmJiAkc29ydEljb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc29ydEljb24uYWRkQ2xhc3MoJ2Rlc2Mgd2kgd2ktbG9uZy1hcnJvdy1kb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBpZiAoaXNBcnJheSh3aWRnZXRTdGF0ZS5zZWFyY2gpKSB7XG4gICAgICAgICAgICBmb3JFYWNoKHdpZGdldFN0YXRlLnNlYXJjaCwgKGZpbHRlck9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0udmFsdWUgPSBmaWx0ZXJPYmoudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0ubWF0Y2hNb2RlID0gZmlsdGVyT2JqLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS50eXBlID0gZmlsdGVyT2JqLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGZpbHRlck9iai50eXBlID09PSAnaW50ZWdlcicgPyBwYXJzZUludChmaWx0ZXJPYmoudmFsdWUpIDogZmlsdGVyT2JqLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbZmlsdGVyT2JqLmZpZWxkXSkuZmluZCgnaW5wdXQnKS52YWwoZmlsdGVyT2JqLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJGdyaWRFbGVtZW50ID0gdGhpcy5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnU2VhcmNoVGV4dFwiXScpLnZhbCh3aWRnZXRTdGF0ZS5zZWFyY2gudmFsdWUpO1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ0ZpbHRlclZhbHVlXCJdJykudmFsKHdpZGdldFN0YXRlLnNlYXJjaC5maWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmVzIGVtcHR5IHZhbHVlcyBpbiBoZWFkZXJDb25maWcgYXJyYXkuXG4gICAgZmlsdGVyRW1wdHlWYWx1ZXMoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbS5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpdGVtLmNvbHVtbnMgPSBpdGVtLmNvbHVtbnMuZmlsdGVyKHRoaXMuZmlsdGVyRW1wdHlWYWx1ZXMuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gQ29tcGFyZXMgdGhlIHByZXZGaWx0ZXJDcml0ZXJpYSBSdWxlcyB3aXRoIHRoZSBuZXcgcnVsZXNcbiAgICBjb21wYXJlRmlsdGVyRXhwcmVzc2lvbnMocHJldkZpbHRlcnMsIG5ld0ZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuICEhKChwcmV2RmlsdGVycy5sZW5ndGggPT09IG5ld0ZpbHRlcnMubGVuZ3RoKSAmJiAoaXNFcXVhbChwcmV2RmlsdGVycywgbmV3RmlsdGVycykpKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhYmxlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyIENyaXRlcmlhIGFuZCBtYWludGFpbiB0aGUgcHJldkZpbHRlckV4cHJlc3Npb25cbiAgICBzZXRMYXN0QWN0aW9uVG9GaWx0ZXJDcml0ZXJpYSgpIHtcbiAgICAgICAgdGhpcy5wcmV2RmlsdGVyRXhwcmVzc2lvbiA9IGdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpID8gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcykgOiBnZXRDbG9uZWRPYmplY3QoW10uY29uY2F0KHRoaXMuZGF0YXNvdXJjZS5kYXRhQmluZGluZykpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkZJTFRFUl9DUklURVJJQSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNTZWFyY2hUcmlnZXJyZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YWJsZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIERhdGFzZXQgdXBkYXRlIGFuZCBzZXQgaXNEYXRhc2V0VXBkYXRlZCB0byB0cnVlXG4gICAgLy8gRml4IGZvciBbV01TLTIyMzIzXS10aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBkYXRhc2V0IGlzIGJlaW5nIHVwZGF0ZWRcbiAgICBzZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCkge1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFKTtcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106IHJlc2V0IGN1cnJlbnRQYWdlIHRvIDEgYXMgZGF0YXNldCBpcyBiZWluZyBjaGFuZ2VkXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhc2V0VXBkYXRlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyX0NyaXRlcmlhLCB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiB0aGUgVmFyaWFibGUgZmlsdGVyIGNyaXRlcmlhIHJ1bGVzXG4gICAgY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCkge1xuICAgICAgICBpZiAoIWlzRW1wdHkoZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykpIHx8ICFpc0VtcHR5KGdldCh0aGlzLmRhdGFzb3VyY2UsICdkYXRhQmluZGluZycpKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbHRlckV4cHIgPSBnZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSA/IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA6IFtdLmNvbmNhdCh0aGlzLmRhdGFzb3VyY2UuZGF0YUJpbmRpbmcpO1xuICAgICAgICAgICAgY29uc3QgaXNFcXVhbCA9IHRoaXMuY29tcGFyZUZpbHRlckV4cHJlc3Npb25zKHRoaXMucHJldkZpbHRlckV4cHJlc3Npb24sIGN1cnJlbnRGaWx0ZXJFeHByKTtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGlvblRvRmlsdGVyQ3JpdGVyaWEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRBY3R1YWxQYWdlU2l6ZSgpICB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IDU7XG4gICAgfVxuICAgIHdhdGNoVmFyaWFibGVEYXRhU2V0KG5ld1ZhbCkge1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IGNvbXBvbmVudCBkZXN0cnVjdGlvblxuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIFZhcmlhYmxlIGZpbHRlcnMgaWYgYXBwbGllZFxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RhdGUgaGFuZGxpbmcgZm9yIHN0YXRpYyB2YXJpYWJsZXNcbiAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zZWFyY2gsIHVuZGVmaW5lZCwgJ3NlYXJjaCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zb3J0LCB1bmRlZmluZWQsICdzb3J0JywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmFsbG93cGFnZXNpemVjaGFuZ2UpIHsgLy8gbWFpbnRhaW4gdXBkYXRlZCBwYWdlIHNpemUgaW4gdGhlIHN0YXRlUGVyc2lzdGVuY2VcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAncGFnaW5hdGlvbicpIHx8IGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uIHx8IDEsIHBhZ2VzaXplOiB3aWRnZXRTdGF0ZS5wYWdlc2l6ZX0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNoYW5nZWQoe3BhZ2U6IHdpZGdldFN0YXRlLnBhZ2luYXRpb259LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWZ0ZXIgdGhlIHNldHRpbmcgdGhlIHdhdGNoIG9uIG5hdmlnYXRvciwgZGF0YXNldCBpcyB0cmlnZ2VyZWQgd2l0aCB1bmRlZmluZWQuIEluIHRoaXMgY2FzZSwgcmV0dXJuIGhlcmUuXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkICYmIGlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgdGhpcy5fX2Z1bGxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdmFyaWFibGUgaXMgaW4gbG9hZGluZyBzdGF0ZSwgc2hvdyBsb2FkaW5nIGljb25cbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCAmJiAhdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gZ2V0VmFsaWRKU09OKG5ld1ZhbCk7XG5cbiAgICAgICAgLy8gQ29udmVydGluZyBuZXd2YWwgdG8gb2JqZWN0IGlmIGl0IGlzIGFuIE9iamVjdCB0aGF0IGNvbWVzIGFzIGEgc3RyaW5nIFwie1wiZGF0YVwiIDogMX1cIlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBuZXdWYWwgPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3J0RXhwID0gdGhpcy5nZXRTb3J0RXhwcigpO1xuICAgICAgICBjb25zdCBzb3J0RXhwQXJyID0gc29ydEV4cC5zcGxpdCgnICcpO1xuICAgICAgICBpZiAoc29ydEV4cCAmJiBzb3J0RXhwQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gOiBzb3J0RXhwQXJyWzFdLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAgc29ydEV4cEFyclswXVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLypSZXR1cm4gaWYgZGF0YSBpcyBpbnZhbGlkLiovXG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGludmFsaWQgYW5kIHZhcmlhYmxlSW5mbGlnaHQgaXMgc3RpbGwgdHJ1ZSwgY2xlYXIgbG9hZGluZyBzdGF0ZVxuICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0YWJsZXMgZnJvbSBnZXR0aW5nIHN0dWNrIGluIGxvYWRpbmcgd2hlbiBkYXRhIGlzIGludmFsaWRcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIGVtcHR5IG9yIGluIHN0dWRpbyBtb2RlLCBkb250IGVuYWJsZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93bmF2aWdhdGlvbiAmJiAhdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhc2V0IGlzIHVuZGVmaW5lZCBvciBlbXB0eSBvciB0YWJsZSBpcyBib3VuZCB0byBzdGF0aWMgdmFyaWFibGUgdGhlbiBzZXQgdmFyaWFibGVJbmZsaWdodCB0byBmYWxzZSBpbm9yZGVyIHRvIHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgICAgICAgICBpZiAobmV3VmFsID09PSAnJyB8fCBuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypmb3IgcnVuIG1vZGUsIGRpc2FibGluZyB0aGUgbG9hZGVyIGFuZCBzaG93aW5nIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpZiBkYXRhc2V0IGlzIG5vdCB2YWxpZCovXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiBuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoIWlzT2JqZWN0KG5ld1ZhbCkgfHwgbmV3VmFsID09PSAnJyB8fCAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB2YXJpYWJsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBhbmQgcmVzdWx0U2V0IGlzIGVtcHR5LCByZW5kZXIgZW1wdHkgZGF0YVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoW10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB2YXJpYWJsZUluZmxpZ2h0IGlzIHN0aWxsIHRydWUgYnV0IHdlIGhhdmUgaW52YWxpZC9lbXB0eSBkYXRhLCBjbGVhciBsb2FkaW5nIHN0YXRlXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGRhdGEgbmV2ZXIgYXJyaXZlcyBvciBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUdyaWREYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hSb3dGaWx0ZXJEYXRhRnJvbURhdGFzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGVuIHNlbGVjdCB3aWRnZXQgb3B0aW9ucyBhcmUgbG9hZGVkIGluIHNlYXJjaCBmaWx0ZXIgdGhlbiBpbml0aWFsaXppbmcgaXRcbiAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkod2lkZ2V0U3RhdGUuc2VhcmNoKSkge1xuICAgICAgICAgICAgICAgIGZvckVhY2god2lkZ2V0U3RhdGUuc2VhcmNoLCAoZmlsdGVyT2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldD0kKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKT8uZmluZCgnW3dpZGdldC1pZF0nKT8ucHJvcChcInRhZ05hbWVcIik/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHdpZGdldD09PSd3bS1zZWxlY3QnICYmIGZpbHRlck9iai52YWx1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSAkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5maW5kKFwic2VsZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Py5maW5kKFwib3B0aW9uXCIpPy5maWx0ZXIoKF8sIG8pID0+IG8udGV4dENvbnRlbnQudHJpbSgpID09PSBmaWx0ZXJPYmoudmFsdWUpPy5wcm9wKFwic2VsZWN0ZWRcIiwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX21vZGVsVmFyRWRpdFNvZnRSZWZyZXNoQWN0aXZlVW50aWwgPSAwO1xuICAgICAgICB0aGlzLl9pc0lubGluZUVkaXRTYXZlID0gZmFsc2U7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogUmVtb3ZlIGRvY3VtZW50IGNsaWNrIGxpc3RlbmVyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrQmluZCk7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIG5hdmlnYXRvciB3YXRjaGVzXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGFsbCBWaWV3Q29udGFpbmVyUmVmIGVtYmVkZGVkIHZpZXdzXG4gICAgICAgIC8vIFRoZXNlIGhvbGQgcmVmZXJlbmNlcyB0byByb3cgZGF0YSwgY3VzdG9tIGV4cHJlc3Npb25zLCBhbmQgaW5saW5lIHdpZGdldHNcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRXhwclZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3dBY3Rpb25zVmlld1JlZikge1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmlld1JlZi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlubGluZUVkaXRWaWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdE5ld1ZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lRWRpdE5ld1ZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3dEZXRhaWxWaWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RldGFpbFZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5keW5hbWljVGFibGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1RhYmxlUmVmLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGNvbXBpbGVkIHRlbXBsYXRlIGNhY2hlc1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsID0ge307XG4gICAgICAgIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGwgPSB7fTtcbiAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsID0ge307XG4gICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGwgPSB7fTtcbiAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGwgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbCA9IHt9O1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgZHluYW1pYyBjb250ZXh0XG4gICAgICAgIGlmICh0aGlzLl9keW5hbWljQ29udGV4dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5fZHluYW1pY0NvbnRleHQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZHluYW1pY0NvbnRleHRba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBkYXRhIGFycmF5c1xuICAgICAgICB0aGlzLl9ncmlkRGF0YSA9IFtdO1xuICAgICAgICB0aGlzLml0ZW1zID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdO1xuICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMgPSBbXTtcbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbnVsbDtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IERlc3Ryb3kgalF1ZXJ5IGRhdGF0YWJsZSB3aWRnZXQgYmVmb3JlIGNsZWFyaW5nIGdyaWRPcHRpb25zXG4gICAgICAgIGlmICh0aGlzLmRhdGFncmlkRWxlbWVudCAmJiB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdkZXN0cm95Jyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIGVycm9ycyBkdXJpbmcgZGVzdHJveVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBkeW5hbWljIGNvbnRleHRcbiAgICAgICAgaWYgKHRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9keW5hbWljQ29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9keW5hbWljQ29udGV4dFtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIG90aGVyIGRhdGEgc3RydWN0dXJlc1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtZmllbGRzID0ge307XG4gICAgICAgIHRoaXMucm93RmlsdGVyID0ge307XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9hY3Rpb25zID0geyBoZWFkZXI6IFtdLCBmb290ZXI6IFtdIH07XG4gICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmhlYWRlckNvbmZpZyA9IFtdO1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnMgPSBbXTtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGFsbCBAQ29udGVudENoaWxkcmVuIFF1ZXJ5TGlzdHMgaG9sZGluZyB0ZW1wbGF0ZSByZWZlcmVuY2VzXG4gICAgICAgIC8vIFRoZXNlIFF1ZXJ5TGlzdHMgaG9sZCBUZW1wbGF0ZVJlZiBpbnN0YW5jZXMgdGhhdCBjcmVhdGUgY2lyY3VsYXIgcmVmZXJlbmNlcyB0byB0aGUgcGFyZW50IExWaWV3XG4gICAgICAgIGlmICh0aGlzLnJvd0FjdGlvblRtcGwpIHtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uVG1wbC5yZXNldChbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVG1wbCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJUbXBsLnJlc2V0KFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmxpbmVXaWRnZXRUbXBsKSB7XG4gICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldFRtcGwucmVzZXQoW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlubGluZVdpZGdldE5ld1RtcGwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0TmV3VG1wbC5yZXNldChbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRXhwclRtcGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclRtcGwucmVzZXQoW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRtcGwpIHtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVG1wbC5yZXNldChbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIEBDb250ZW50Q2hpbGQgdGVtcGxhdGUgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMucm93RXhwYW5zaW9uVG1wbCA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSBhbmQgY2xlYXIgc3ViamVjdHNcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBWaWV3Q2hpbGQgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IgPSBudWxsO1xuICAgICAgICB0aGlzLl90YWJsZUVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgLy8gY29uc29sZS5sb2coXCJ0YWJsZSBjb21wb25lbnQgZGVzdHJveWVkXCIpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZFJvd0luZGV4KHJvdykge1xuICAgICAgICBjb25zdCByb3dEYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHJvdyk7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gaW5kZXhPZih0aGlzLmdyaWRPcHRpb25zLmRhdGEsIHJvdyk7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH1cbiAgICAgICAgcm93RGF0YS4kaW5kZXggPSByb3dJbmRleCArIDE7XG4gICAgICAgIHJvd0RhdGEuJGlzRmlyc3QgPSByb3dEYXRhLiRpbmRleCA9PT0gMTtcbiAgICAgICAgcm93RGF0YS4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvd0RhdGEuJGluZGV4O1xuICAgICAgICByZXR1cm4gcm93RGF0YTtcbiAgICB9XG5cbiAgICBhZGRFdmVudHNUb0NvbnRleHQoY29udGV4dCkge1xuICAgICAgICBjb250ZXh0LmFkZE5ld1JvdyA9ICgpID0+IHRoaXMuYWRkTmV3Um93KCk7XG4gICAgICAgIGNvbnRleHQuZGVsZXRlUm93ID0gKCkgPT4gdGhpcy5kZWxldGVSb3coKTtcbiAgICAgICAgY29udGV4dC5lZGl0Um93ID0gKCkgPT4gdGhpcy5lZGl0Um93KCk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKFtEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSXS5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZSA/IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykgOiB7fTtcbiAgICB9XG5cbiAgICBpc05hdmlnYXRpb25FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93bmF2aWdhdGlvbiAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZDtcbiAgICB9XG5cbiAgICBnZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSkge1xuICAgICAgICBjb25zdCByb3cgPSBnZXRDbG9uZWRPYmplY3Qocm93RGF0YSk7XG4gICAgICAgIHJvdy5nZXRQcm9wZXJ0eSA9IGZpZWxkID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXQocm93LCBmaWVsZCk7XG4gICAgICAgIH07XG4gICAgICAgIHJvdy4kaXNGaXJzdCA9IHJvdy4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvdy4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvdy4kaW5kZXg7XG4gICAgICAgIGRlbGV0ZSByb3cuJCRpbmRleDtcbiAgICAgICAgZGVsZXRlIHJvdy4kJHBrO1xuICAgICAgICBkZWxldGUgcm93LiQkd21Tb3VyY2VMaXN0SW5kZXg7XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAvLyBiYXNlZCBvbiB0aGUgYWN0aXZlIHN0YXRlIGFuZCByZXNwb25zZSB0b2dnbGluZyB0aGUgJ2xvYWRpbmcgZGF0YS4uLicgYW5kICdubyBkYXRhIGZvdW5kJyBtZXNzYWdlcy5cbiAgICAgICAgaWYgKGRhdGEuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGdyaWQgaXMgaW4gZWRpdCBtb2RlIG9yIGdyaWQgaGFzIGRhdGEsIGRvbnQgc2hvdyB0aGUgbm8gZGF0YSBtZXNzYWdlXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNHcmlkRWRpdE1vZGUgJiYgaXNFbXB0eSh0aGlzLmRhdGFzZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2xEZWYsIHdpZGdldFR5cGUpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiAhPT0gJ25ldycgJiYgY29sRGVmWydwcmltYXJ5LWtleSddICYmIGNvbERlZi5nZW5lcmF0b3IgPT09ICdhc3NpZ25lZCcgJiYgIWNvbERlZlsncmVsYXRlZC1lbnRpdHktbmFtZSddICYmICFjb2xEZWYucGVyaW9kKSB7XG4gICAgICAgICAgICBjb2xEZWZbd2lkZ2V0VHlwZV0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRGb3JtQ29udHJvbChjdHJsKSB7XG4gICAgICAgIGN0cmwubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIGN0cmwubWFya0FzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm0obmV3Um93Pykge1xuICAgICAgICBjb25zdCBjdHJscyA9IHRoaXMubmdmb3JtLmNvbnRyb2xzO1xuICAgICAgICBrZXlzKHRoaXMubmdmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBuZXcgcm93LCBjbGVhciB0aGUgY29udHJvbHMgaW4gdGhlIG5ldyByb3cuIEVsc2UsIGNsZWFyIHRoZSBjb250cm9scyBpbiBlZGl0IHJvd1xuICAgICAgICAgICAgaWYgKCFrZXkuZW5kc1dpdGgoJ19maWx0ZXInKSAmJiAoKGtleS5lbmRzV2l0aCgnX25ldycpICYmIG5ld1JvdykgfHwgKCFrZXkuZW5kc1dpdGgoJ19uZXcnKSAmJiAhbmV3Um93KSkpIHtcbiAgICAgICAgICAgICAgICBjdHJsc1trZXldLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybUNvbnRyb2woY3RybHNba2V5XSk7XG4gICAgICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciB2YWxpZGF0b3JzIHRvIHJlbGVhc2UgcmVmZXJlbmNlc1xuICAgICAgICAgICAgICAgIGN0cmxzW2tleV0uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgY3RybHNba2V5XS5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93RmllbGRCYXNlZE9uU2NyZWVuVHlwZShmaWVsZCkge1xuICAgICAgICBsZXQgc2hvd0ZpZWxkO1xuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQubW9iaWxlRGlzcGxheTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdwb3J0LmlzVGFibGV0VHlwZSkge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQudGFibGV0RGlzcGxheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLnBjRGlzcGxheTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hvd0ZpZWxkO1xuICAgIH1cblxuICAgIC8qIENoZWNrIHdoZXRoZXIgaXQgaXMgbm9uLWVtcHR5IHJvdy4gKi9cbiAgICBpc0VtcHR5UmVjb3JkKHJlY29yZCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgICAgbGV0IGRhdGEsXG4gICAgICAgICAgICBpc0Rpc3BsYXllZDtcblxuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5ldmVyeSgocHJvcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSByZWNvcmRbcHJvcF07XG4gICAgICAgICAgICAvKiBJZiBmaWVsZERlZnMgYXJlIG1pc3NpbmcsIHNob3cgYWxsIGNvbHVtbnMgaW4gZGF0YS4gKi9cbiAgICAgICAgICAgIGlzRGlzcGxheWVkID0gKHRoaXMuZmllbGREZWZzLmxlbmd0aCAmJiBpc0RlZmluZWQodGhpcy5maWVsZERlZnNbaW5kZXhdKSAmJiB0aGlzLnNob3dGaWVsZEJhc2VkT25TY3JlZW5UeXBlKHRoaXMuZmllbGREZWZzW2luZGV4XSkpIHx8IHRydWU7XG4gICAgICAgICAgICAvKlZhbGlkYXRpbmcgb25seSB0aGUgZGlzcGxheWVkIGZpZWxkcyovXG4gICAgICAgICAgICBpZiAoaXNEaXNwbGF5ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiBGdW5jdGlvbiB0byByZW1vdmUgdGhlIGVtcHR5IGRhdGEuICovXG4gICAgcmVtb3ZlRW1wdHlSZWNvcmRzKHNlcnZpY2VEYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbFJlY29yZHMgPSBzZXJ2aWNlRGF0YTtcbiAgICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IFtdO1xuICAgICAgICBpZiAoYWxsUmVjb3JkcyAmJiBhbGxSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgLypDb21wYXJpbmcgYW5kIHB1c2hpbmcgdGhlIG5vbi1lbXB0eSBkYXRhIGNvbHVtbnMqL1xuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gYWxsUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkICYmICF0aGlzLmlzRW1wdHlSZWNvcmQocmVjb3JkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgc2V0R3JpZERhdGEoc2VydmVyRGF0YSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maWx0ZXJudWxscmVjb3JkcyA/ICB0aGlzLnJlbW92ZUVtcHR5UmVjb3JkcyhzZXJ2ZXJEYXRhKSA6IHNlcnZlckRhdGE7XG4gICAgICAgIC8vIGZpeCBmb3IgW1dNUy0yNDAxMl0gc2V0IHZhcmlhYmxlaW5mbGlnaHQgZmxhZyB0byBmYWxzZSBmb3Igc3RhdGljIHZhcmlhYmxlc1xuICAgICAgICAvLyBJZiB0aGUgdGFibGUgaXMgYm91bmQgdG8gc29tZSB3aWRnZXQgYW5kIG5vdCBib3VuZCB0byBhbnkgdmFyaWFibGUgKGV4OiBUYWJsZTEuc2VsZWN0ZWRJdGVtKSB0aGVuIHNldCB2YXJpYWJsZUluZmxpZ2h0IHRvIGZhbHNlXG4gICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgKGRhdGEubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZERhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIHNldERhdGFHcmlkT3B0aW9uKG9wdGlvbk5hbWUsIG5ld1ZhbCwgZm9yY2VTZXQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnaW5zdGFuY2UnKSkge1xuICAgICAgICAgICAgLy8gQm91bmQgcHJvcGVydGllcyBjYW4gdXBkYXRlIGJlZm9yZSB0aGUgalF1ZXJ5IHdpZGdldCBpcyBpbml0aWFsaXplZC5cbiAgICAgICAgICAgIC8vIEtlZXAgZ3JpZE9wdGlvbnMgaW4gc3luYyBzbyB0aGUgaW5pdGlhbCBkYXRhdGFibGUoKSBjYWxsIHNlZXMgdGhlIGxhdGVzdCB2YWx1ZS5cbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge307XG4gICAgICAgIGlmIChpc0RlZmluZWQobmV3VmFsKSAmJiAoIWlzRXF1YWwobmV3VmFsLCB0aGlzLmdyaWRPcHRpb25zW29wdGlvbk5hbWVdKSB8fCBmb3JjZVNldCkpIHtcbiAgICAgICAgICAgIG9wdGlvbltvcHRpb25OYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnb3B0aW9uJywgb3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsRGF0YUdyaWRNZXRob2QoLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ2luc3RhbmNlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQcm9wcy5zZXQoYXJnc1sxXSwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm47IC8vIElmIGRhdGFncmlkIGlzIG5vdCBpbml0aWxpYXplZCBvciBkZXN0cm95ZWQsIHJldHVybiBoZXJlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZS5hcHBseSh0aGlzLmRhdGFncmlkRWxlbWVudCwgYXJncyk7XG4gICAgfVxuXG4gICAgcmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpIHtcbiAgICAgICAgbGV0IHJvd0FjdGlvbkNvbCxcbiAgICAgICAgICAgIGluc2VydFBvc2l0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJvd09wZXJhdGlvbnNDb2x1bW4gPSBnZXRSb3dPcGVyYXRpb25zQ29sdW1uKCksXG4gICAgICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICdmaWVsZCc6IHJvd09wZXJhdGlvbnNDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgJ2lzUHJlZGVmaW5lZCc6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIC8vIFJldHVybiBpZiBubyBmaWVsZERlZnMgYXJlIHByZXNlbnRcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0FjdGlvbkNvbCA9IGZpbmQodGhpcy5mdWxsRmllbGREZWZzLCB7J2ZpZWxkJzogUk9XX09QU19GSUVMRCwgdHlwZTogJ2N1c3RvbSd9KTsgLy8gQ2hlY2sgaWYgY29sdW1uIGlzIGZldGNoZWQgZnJvbSBtYXJrdXBcbiAgICAgICAgcmVtb3ZlPGFueT4odGhpcy5maWVsZERlZnMsIHt0eXBlOiAnY3VzdG9tJywgZmllbGQ6IFJPV19PUFNfRklFTER9KTsgLy8gUmVtb3Zpbmcgb3BlcmF0aW9ucyBjb2x1bW5cbiAgICAgICAgcmVtb3ZlPGFueT4odGhpcy5oZWFkZXJDb25maWcsIHtmaWVsZDogcm93T3BlcmF0aW9uc0NvbHVtbi5maWVsZH0pO1xuXG4gICAgICAgIC8qQWRkIHRoZSBjb2x1bW4gZm9yIHJvdyBvcGVyYXRpb25zIG9ubHkgaWYgYXQtbGVhc3Qgb25lIG9wZXJhdGlvbiBoYXMgYmVlbiBlbmFibGVkLiovXG4gICAgICAgIGlmICh0aGlzLnJvd0FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAocm93QWN0aW9uQ29sKSB7IC8vIElmIGNvbHVtbiBpcyBwcmVzZW50IGluIG1hcmt1cCwgcHVzaCB0aGUgY29sdW1uIG9yIHB1c2ggdGhlIGRlZmF1bHQgY29sdW1uXG4gICAgICAgICAgICAgICAgaW5zZXJ0UG9zaXRpb24gPSByb3dBY3Rpb25Db2wucm93YWN0aW9uc3Bvc2l0aW9uID8gdG9OdW1iZXIocm93QWN0aW9uQ29sLnJvd2FjdGlvbnNwb3NpdGlvbikgOiB0aGlzLmZpZWxkRGVmcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuc3BsaWNlKGluc2VydFBvc2l0aW9uLCAwLCByb3dBY3Rpb25Db2wpO1xuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy51bnNoaWZ0KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcucHVzaChjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMucHVzaChyb3dPcGVyYXRpb25zQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy5wdXNoKGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaGVhZGVyQ29uZmlnJywgdGhpcy5oZWFkZXJDb25maWcpO1xuICAgIH1cblxuICAgIGVuYWJsZVBhZ2VOYXZpZ2F0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuYmluZGRhdGFzZXQgJiYgdGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBcInJlc3VsdFwiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBwYWdpbmF0ZWQgZGF0YSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5yZXN1bHRFbWl0dGVyLnN1YnNjcmliZSgobmV3VmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHNhbml0eS4gKi9cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIGlzQXJyYXkodGhpcy5kYXRhc2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ3JpZE9wdGlvbnM/LmRhdGEgfHwgW10pLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhc2V0Um93ID0gdGhpcy53aWRnZXQ/LmRhdGFzZXQ/LltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFzZXRSb3cgJiYgSlNPTi5zdHJpbmdpZnkocm93KSAhPT0gSlNPTi5zdHJpbmdpZnkoZGF0YXNldFJvdykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKSA/IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gSlNPTi5zdHJpbmdpZnkoaXRlbSkgPT09IEpTT04uc3RyaW5naWZ5KHJvdykpIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2l0ZW1JbmRleF0gPSB7IC4uLmRhdGFzZXRSb3cgfTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gV2F0Y2ggd2lsbCBub3QgYmUgdHJpZ2dlcmVkIGlmIGRhdGFzZXQgYW5kIG5ldyB2YWx1ZSBhcmUgZXF1YWwuIFNvIHRyaWdnZXIgdGhlIHByb3BlcnR5IGNoYW5nZSBoYW5kbGVyIG1hbnVhbGx5XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyBpbiBjYXNlLCBpZiBkYXRhc2V0IGlzIGRpcmVjdGx5IHVwZGF0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0VxdWFsKHRoaXMuZGF0YXNldCwgbmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBbXS5jb25jYXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBleHRlbmQoe30sIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgLypEZS1yZWdpc3RlciB0aGUgd2F0Y2ggaWYgaXQgaXMgZXhpc3RzICovXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJtYXhSZXN1bHRzXCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIFwicGFnZVNpemVcIiBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzRW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBuZXdWYWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIGRhdGFzZXQgaXMgYSBwYWdlYWJsZSBvYmplY3QsIGRhdGEgaXMgcHJlc2VudCBpbnNpZGUgdGhlIGNvbnRlbnQgcHJvcGVydHlcbiAgICAgICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IHRoaXMuZGF0YXNldDtcblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCA1O1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCA1XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUJpbmRpbmcoJ2RhdGFzZXQnKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldCh0aGlzLmJpbmRkYXRhc2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMuZGF0YXNvdXJjZSwgdGhpcy5kYXRhc2V0LCB0aGlzLmJpbmRkYXRhc291cmNlLCB1bmRlZmluZWQsIHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0RhdGFWYWxpZCgpIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhc2V0IHx8IHt9O1xuXG4gICAgICAgIC8qSW4gY2FzZSBcImRhdGFcIiBjb250YWlucyBcImVycm9yXCIgJiBcImVycm9yTWVzc2FnZVwiLCB0aGVuIGRpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGdyaWQuKi9cbiAgICAgICAgaWYgKGRhdGFzZXQuZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gZGF0YXNldC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YXNldC5kYXRhICYmIGRhdGFzZXQuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gcG9wdWxhdGUgdGhlIGdyaWQgd2l0aCBkYXRhLlxuICAgIHBvcHVsYXRlR3JpZERhdGEoc2VydmljZURhdGEpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHNlcnZpY2VEYXRhID0gdHJhbnNmb3JtRGF0YShzZXJ2aWNlRGF0YSwgdGhpcy5uYW1lKTtcbiAgICAgICAgLy8gQXBwbHkgZmlsdGVyIGFuZCBzb3J0LCBpZiBkYXRhIGlzIHJlZnJlc2hlZCB0aHJvdWdoIFJlZnJlc2ggZGF0YSBtZXRob2RcbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLl9pc0NsaWVudFNlYXJjaCkge1xuICAgICAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdChzZXJ2aWNlRGF0YSk7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoZGF0YSkgJiYgIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXS4kJHdtU291cmNlTGlzdEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgdGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy5zb3J0SW5mbyk7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gc2VydmljZURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZmllbGRkZWZzIGFyZSBub3QgcHJlc2VudCwgZ2VuZXJhdGUgZmllbGRkZWZzIGZyb20gZGF0YVxuICAgICAgICAvLyBSZW1vdmluZyBmaWVsZGRlZnMgY2hlY2sgYmVjYXVzZSBXaGVuIGxvYWRvbmRlbWFuZCBwcm9wZXJ0eSBpcyBlbmFibGVkKGRlZmVybG9hZD1cInRydWVcIiksIHRoZSBkYXRhc2V0IHByb3BlcnR5Y2hhbmdlaGFubGRlciBpcyB0cmlnZ2VyZWQgZmlyc3QgYmVmb3JlIHRoZSBkb20gaXMgZ2V0dGluZyByZW5kZXJlZC5cbiAgICAgICAgLy8gU28gYXQgdGhhdCB0aW1lIGZpZWxkZGVmcyBsZW5ndGggaXMgemVybywgZHVlIHRvIHRoaXMgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHkuXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUdyaWRDb2x1bW5zKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgJiYgc2VydmljZURhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZUl0ZW1zO1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGFibGUgaGFzIGEgcGFyZW50IHRhYmxlXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50T2JqID0gdGhpcy5ncmlkT3B0aW9ucy5nZXRQYXJlbnRUYWJsZURhdGEoKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUl0ZW1zID0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmZpbHRlcih2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnBhZ2UgPT09IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbiBpdGVtIGlzIGFscmVhZHkgc2VsZWN0ZWQsIGRvbid0IHRyaWdnZXIgb25TZWxlY3QgZXZlbnQgZm9yIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCByZWFzc2lnbiB0aGlzLnNlbGVjdGVkaXRlbSBpZiBzZWxlY3RlZCBpdGVtcyBhbHJlYWR5IGV4aXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBhIHJvdyBvbmx5IGlmIGl0J3MgcmVzcGVjdGl2ZSBwYXJlbnQgcm93IGluZGV4IGFuZCBwYXJlbnQncyBjdXJyZW50IHBhZ2UgbWF0Y2hlcyB3aXRoIHN0YXRlcGVyc2lzdGVuY2UgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRPYmoucGFyZW50SWQgfHwgKHBhcmVudE9iai5wYXJlbnRJZCAmJiBpdGVtLnBhcmVudFJvd0luZGV4ID09PSBwYXJlbnRPYmoucGFyZW50SWQgJiYgaXRlbS5wYXJlbnRDdXJyZW50UGFnZSA9PT0gcGFyZW50T2JqLnBhcmVudFBhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtLmluZGV4LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBjdXJyZW50UGFnZUl0ZW1zLm1hcChmdW5jdGlvbih2YWwpIHtyZXR1cm4gdmFsLmluZGV4OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIGFuZCBjb21waWxlIHRoZSBmb3JtIGZpZWxkcyBmcm9tIHRoZSBtZXRhZGF0YVxuICAgIGFzeW5jIGdlbmVyYXRlRHluYW1pY0NvbHVtbnMoY29sdW1ucykge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdOyAvLyBlbXB0eSB0aGUgZm9ybSBmaWVsZHNcbiAgICAgICAgLy8gZW1wdHkgdGhlIGZpbHRlciBmaWVsZCB0ZW1wbGF0ZSByZWZzLlxuICAgICAgICAodGhpcy5maWx0ZXJUbXBsIGFzIGFueSkuX3Jlc3VsdHMgPSBbXTtcblxuICAgICAgICBpZiAoaXNFbXB0eShjb2x1bW5zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRtcGwgPSAnJztcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBsZXQgYXR0cnNUbXBsID0gJyc7XG4gICAgICAgICAgICBsZXQgY3VzdG9tVG1wbCA9ICcnO1xuICAgICAgICAgICAgZm9yRWFjaChjb2wsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSAmJiB2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGN1c3RvbSBleHByZXNzaW9uIGlzIHByZXNlbnQsIGtlZXAgaXQgaW5zaWRlIHRhYmxlIGNvbHVtbi4gRWxzZSwga2VlcCBhcyBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2N1c3RvbUV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21UbXBsID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNUbXBsICs9IGAgJHtrZXl9PVwiJHt2YWx9XCJgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBsICs9IGA8d20tdGFibGUtY29sdW1uICR7YXR0cnNUbXBsfSB0YWJsZU5hbWU9XCIke3RoaXMubmFtZX0keyh0aGlzIGFzIGFueSkuJGF0dHJzLmdldCgndGFibGVfcmVmZXJlbmNlJyl9XCI+JHtjdXN0b21UbXBsfTwvd20tdGFibGUtY29sdW1uPmA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmR5bmFtaWNUYWJsZVJlZi5jbGVhcigpO1xuICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IE9iamVjdC5jcmVhdGUodGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0W3RoaXMuZ2V0QXR0cignd21UYWJsZScpXSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub09mQ29sdW1ucyA9IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5UmVmID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50UHJvdmlkZXIuZ2V0Q29tcG9uZW50RmFjdG9yeVJlZihcbiAgICAgICAgICAgICdhcHAtdGFibGUtZHluYW1pYy0nICsgdGhpcy53aWRnZXRJZCxcbiAgICAgICAgICAgIHRtcGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbm9DYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0cmFuc3BpbGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmR5bmFtaWNUYWJsZVJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeVJlZiwgMCwgdGhpcy5pbmopO1xuICAgICAgICBleHRlbmRQcm90byhjb21wb25lbnQuaW5zdGFuY2UsIHRoaXMuX2R5bmFtaWNDb250ZXh0KTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuZHluYW1pYy10YWJsZS1jb250YWluZXInKVswXS5hcHBlbmRDaGlsZChjb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZUNvbERlZnMoZGF0YSkge1xuICAgICAgICBsZXQgZGVmYXVsdEZpZWxkRGVmcztcbiAgICAgICAgbGV0IHByb3BlcnRpZXM7XG4gICAgICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XG4gICAgICAgIGxldCBoZWFkZXJJbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBbXTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0ge307XG4gICAgICAgIC8qIGlmIHByb3BlcnRpZXMgbWFwIGlzIGV4aXN0ZWQgdGhlbiBmZXRjaCB0aGUgY29sdW1uIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBuZXN0ZWQgbGV2ZWxzIHVzaW5nIHV0aWwgZnVuY3Rpb24gKi9cbiAgICAgICAgcHJvcGVydGllcyA9IGRhdGE7XG4gICAgICAgIC8qY2FsbCB1dGlsaXR5IGZ1bmN0aW9uIHRvIHByZXBhcmUgZmllbGREZWZzIGZvciBncmlkIGFnYWluc3QgZ2l2ZW4gZGF0YSAoQSBNQVggT0YgMTAgQ09MVU1OUyBPTkxZKSovXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMgPSBwcmVwYXJlRmllbGREZWZzKHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8qYXBwZW5kIGFkZGl0aW9uYWwgcHJvcGVydGllcyovXG4gICAgICAgIGZvckVhY2goZGVmYXVsdEZpZWxkRGVmcywgY29sdW1uRGVmID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5iaW5kaW5nID0gY29sdW1uRGVmLmZpZWxkO1xuICAgICAgICAgICAgY29sdW1uRGVmLmNhcHRpb24gPSBjb2x1bW5EZWYuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYucGNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5tb2JpbGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi50YWJsZXREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zaG93aW5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnR5cGUgID0gJ3N0cmluZyc7XG4gICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMTk2NjhdIGFuZCBbV01TLTE5NjY5XS0gQWRkaW5nIGluZGV4IGFuZCBoZWFkZXJJbmRleCBmb3IgRHluYW1pYyBEQiBjb2x1bW5zLlxuICAgICAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSBjb2x1bW4gZ3JvdXBzIGZvciBEeW5hbWljIERCXG4gICAgICAgICAgICBjb2x1bW5EZWYuaW5kZXggPSBjb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmRleCA9IGhlYWRlckluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICAgICAgICAgIGhlYWRlckluZGV4Kys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE5vdGU6IEVycm9ycyBpbiBiZWZvcmVkYXRhcmVuZGVyIHNob3VsZCBub3QgcHJldmVudCB0YWJsZSByZW5kZXJpbmdcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogZGF0YSwgJGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogZGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgZXJyb3IgYnV0IGNvbnRpbnVlIHdpdGggcmVuZGVyaW5nIC0gYmVmb3JlZGF0YXJlbmRlciBlcnJvcnMgc2hvdWxkIG5vdCBibG9jayB0YWJsZSByZW5kZXJpbmdcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgaW4gYmVmb3JlZGF0YXJlbmRlciBldmVudCBjYWxsYmFjaywgY29udGludWluZyB3aXRoIHRhYmxlIHJlbmRlcmluZzonLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0RmllbGREZWZzID0gW107XG4gICAgICAgIC8vIEFwcGx5IHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIHVzZXJcbiAgICAgICAgZm9yRWFjaCh0aGlzLmNvbHVtbnMsIHZhbCA9PiB7XG4gICAgICAgICAgICBkZWZhdWx0RmllbGREZWZzLnB1c2godmFsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGRlZmF1bHRGaWVsZERlZnMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUdyaWRDb2x1bW5zKGRhdGEpIHtcbiAgICAgICAgLyogdGhpcyBjYWxsIGJhY2sgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIGRhdGEgZnJvbSB0aGUgdmFyaWFibGUgKi9cbiAgICAgICAgLyogY2hlY2sgd2hldGhlciBkYXRhIGlzIHZhbGlkIG9yIG5vdCAqL1xuICAgICAgICBjb25zdCBkYXRhVmFsaWQgPSBkYXRhICYmICFkYXRhLmVycm9yO1xuICAgICAgICAvKmlmIHRoZSBkYXRhIGlzIHR5cGUganNvbiBvYmplY3QsIG1ha2UgaXQgYW4gYXJyYXkgb2YgdGhlIG9iamVjdCovXG4gICAgICAgIGlmIChkYXRhVmFsaWQgJiYgIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgdGhlIGRhdGEgaXMgZW1wdHksIHNob3cgbm9kYXRhbWVzc2FnZSAqL1xuICAgICAgICBpZiAoaXNFbXB0eShkYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YVZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgbmV3IGNvbHVtbnMgdG8gYmUgcmVuZGVyZWQsIHByZXBhcmUgZGVmYXVsdCBmaWVsZERlZnMgZm9yIHRoZSBkYXRhIHByb3ZpZGVkKi9cbiAgICAgICAgY29uc3QgY29sdW1uRGF0YSA9IGdldENsb25lZE9iamVjdChkYXRhKTtcbiAgICAgICAgaWYgKGlzQXJyYXkoY29sdW1uRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbHVtbkRhdGEuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1snJCR3bVNvdXJjZUxpc3RJbmRleCddKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChjb2x1bW5EYXRhKSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbHVtbkRhdGFbJyQkd21Tb3VyY2VMaXN0SW5kZXgnXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXBhcmVDb2xEZWZzKGNvbHVtbkRhdGEpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0R3JpZERhdGEodGhpcy5zZXJ2ZXJEYXRhKTtcbiAgICB9XG5cbiAgICBnZXRTb3J0RXhwcigpIHtcbiAgICAgICAgbGV0IHNvcnRFeHA7XG4gICAgICAgIGxldCBwYWdpbmdPcHRpb25zO1xuICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKSkge1xuICAgICAgICAgICAgcGFnaW5nT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUyk7XG4gICAgICAgICAgICBzb3J0RXhwID0gaXNFbXB0eShwYWdpbmdPcHRpb25zKSA/ICcnIDogZ2V0T3JkZXJCeUV4cHIocGFnaW5nT3B0aW9ucy5zb3J0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ydEV4cCB8fCAnJztcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHByb3BlcnR5IGNoYW5nZXMgYWZ0ZXIgY29tcG9uZW50IGRlc3RydWN0aW9uXG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW5hYmxlTmV3Um93LCB3aWRnZXRTdGF0ZTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzb3VyY2UnOlxuICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzY1M10gd2hlbiBzdGFydFVwZGF0ZSBpcyBmYWxzZSAocmVxdWVzdCBvbiBwYWdlIGxvYWQgcHJvcGVydHkgaXMgdW5jaGVja2VkKSxcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHNldCBzdGF0dXMgbXNnIGFzIFwiTm8gZGF0YSBmb3VuZFwiXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiB0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHMgPSB0aGlzLnBhZ2VzaXplIHx8IHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChudiAmJiBudi5zdGFydFVwZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiBnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSAhPT0gJ3dtLlZhcmlhYmxlJyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyc2VsZWN0YWxsPWZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKFwiaGVhZGVyc2VsZWN0YWxsXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldCh0aGlzLmRhdGFzZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkgJiYgdGhpcy5ncmlkT3B0aW9ucy5nZXRDdXJyZW50UGFnZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNvdXJjZSAmJiAhdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGFzb3VyY2UgaXMgbm90IHNldCB5ZXQsIGNsZWFyIGxvYWRpbmcgc3RhdGUgYW5kIHNob3cgbm8gZGF0YVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHRhYmxlcyBmcm9tIGJlaW5nIHN0dWNrIGluIGxvYWRpbmcgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0YWJsZSBpcyBpbnNpZGUgbGlzdCB0aGVuIHRhYmxlIGRhdGFzZXQgd2lsbCBiZSBzZXQgYXMgXCJpdGVtLlhYWFwiIGFuZCB0aGVyZSBpcyBubyBkYXRhc291cmNlLlxuICAgICAgICAgICAgICAgIC8vIFNvIGV4dHJhY3RpbmcgZGF0YXNvdXJjZSBmcm9tIHRoZSBkYXRzZXQgYm91bmQgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRMaXN0ICYmICF0aGlzLmRhdGFzb3VyY2UgJiYgc3RhcnRzV2l0aCh0aGlzLmJpbmRkYXRhc2V0LCAnaXRlbScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGdldERhdGFzb3VyY2VGcm9tRXhwcih0aGlzLndpZGdldC4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyksIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZmV0Y2hpbmcgbmV4dCBwYWdlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGRhdGFzZXQgaXMgdXBkYXRlZCBmcm9tIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBmb3IgU3RhdGljIFZhcmlhYmxlcyB3aXRoIFJldGFpbiBTdGF0ZSBlbmFibGVkLCBwcmV2ZW50IFRhYmxlIGZyb20gcmVuZGVyaW5nIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTI1Mjg0XTogUmVuZGVyIHRhYmxlIHRoYXQgaXMgaW5zaWRlIGxpc3Qgd2lkZ2V0IGFuZCBib3VuZCB0byBzdGF0aWMgVmFyaWFibGVcbiAgICAgICAgICAgICAgICBpZiAoIShnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHx8ICh0aGlzLnBhcmVudExpc3QgJiYgc3RhcnRzV2l0aCh0aGlzLmJpbmRkYXRhc2V0LCAnaXRlbScpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndhdGNoVmFyaWFibGVEYXRhU2V0KG52KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaWx0ZXJtb2RlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdmaWx0ZXJtb2RlJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VhcmNobGFiZWwnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlYXJjaExhYmVsJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmF2aWdhdGlvbic6XG4gICAgICAgICAgICAgICAgaWYgKG52ID09PSAnQWR2YW5jZWQnKSB7IC8vIFN1cHBvcnQgZm9yIG9sZGVyIHByb2plY3RzIHdoZXJlIG5hdmlnYXRpb24gdHlwZSB3YXMgYWR2YW5jZWQgaW5zdGVhZCBvZiBjbGFzaWNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChudiAhPT0gJ05vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd25hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCduYXZpZ2F0aW9uJywgdGhpcy5uYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVtYW5kTG9hZCA9IG52ID09PSBOQVZJR0FUSU9OX1RZUEUuT05ERU1BTkQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmZTY3JvbGwgPSBudiA9PT0gTkFWSUdBVElPTl9UWVBFLlNDUk9MTCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncmlkZmlyc3Ryb3dzZWxlY3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JpZGNsYXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2Nzc0NsYXNzTmFtZXMuZ3JpZCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vZGF0YW1lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnZGF0YVN0YXRlcy5ub2RhdGEnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsb2FkaW5nZGF0YW1zZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdkYXRhU3RhdGVzLmxvYWRpbmcnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsb2FkaW5naWNvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdsb2FkaW5naWNvbicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNpbmcnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnc3BhY2luZycsIG52KTtcbiAgICAgICAgICAgICAgICBpZiAobnYgPT09ICdjb25kZW5zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNpemUgPSAnc21hbGwnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNpemUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdleHBvcnRmb3JtYXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBvcHRpb25zIGZvciBleHBvcnQgZHJvcCBkb3duIG1lbnVcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChzcGxpdChudiwgJywnKSwgdHlwZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogZXhwb3J0SWNvbk1hcHBpbmdbdHlwZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93bmV3cm93JzpcbiAgICAgICAgICAgICAgICAvLyBFbmFibGUgbmV3IHJvdyBpZiBzaG93bmV3IGlzIHRydWUgb3IgYWRkTmV3Um93IGJ1dG9uIGlzIHByZXNlbnRcbiAgICAgICAgICAgICAgICBlbmFibGVOZXdSb3cgPSBudiB8fCBzb21lKHRoaXMuYWN0aW9ucywgYWN0ID0+IGluY2x1ZGVzKGFjdC5hY3Rpb24sICdhZGROZXdSb3coKScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2FjdGlvbnNFbmFibGVkLm5ldycsIGVuYWJsZU5ld1Jvdyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYWdlc2l6ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IG52OyAvLyBtYWludGFpbiBkZWZhdWx0IHBhZ2Ugc2l6ZSB0byBjYWxjdWxhdGUgcGFnZXNpemUgb3B0aW9uc1xuICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnZVNpemUobnYpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjdXJyZW50cGFnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2N1cnJlbnRwYWdlJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25kZW1hbmRtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcub24tZGVtYW5kLWRhdGFncmlkID4gYScpLnRleHQobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm9uZGVtYW5kbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWxsb3dwYWdlc2l6ZWNoYW5nZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLmFsbG93cGFnZXNpemVjaGFuZ2UgPSBudjtcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZXNpemVvcHRpb25zID0gdGhpcy5zYW5pdGl6ZUNvbW1hU2VwYXJhdGVkSW50ZWdlcnModGhpcy5wYWdlc2l6ZW9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucyA9IHBhZ2VzaXplb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZW9wdGlvbnMgPSBwYWdlc2l6ZW9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdlU2l6ZSh0aGlzLnBhZ2VzaXplIHx8IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5ncmlkT3B0aW9ucy5nZXRQYWdlU2l6ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYWdlc2l6ZW9wdGlvbnMnOlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG92KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuZ3JpZE9wdGlvbnMucGFnZXNpemVvcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnZVNpemUodGhpcy5wYWdlc2l6ZSB8fCB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMuZ3JpZE9wdGlvbnMuZ2V0UGFnZVNpemUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSAhPT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9uUGFnZVNpemVDaGFuZ2UodW5kZWZpbmVkLCB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zWzBdIHx8IHRoaXMucGFnZXNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvd2hlYWRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2hvd0hlYWRlcicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3doZWFkZXInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3Nob3dIZWFkZXInLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmFibGVzb3J0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdlbmFibGVTb3J0JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5hYmxlY29sdW1uc2VsZWN0aW9uJzpcbiAgICAgICAgICAgICAvLyAgIHRoaXMuZW5hYmxlY29sdW1uc2VsZWN0aW9uID0gbnY7XG4gICAgICAgICAgICAgICAgLy90aGlzLmdyaWRPcHRpb25zLmVuYWJsZUNvbHVtblNlbGVjdGlvbiA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2VuYWJsZUNvbHVtblNlbGVjdGlvbicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzcm93c2VsZWN0YWJsZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNyb3dzZWxlY3RhYmxlJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbXVsdGlzZWxlY3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ211bHRpc2VsZWN0JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW9zZWxlY3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3Nob3dSYWRpb0NvbHVtbicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ211bHRpc2VsZWN0dGl0bGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ211bHRpc2VsZWN0dGl0bGUnLCBudik7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tdWx0aXNlbGVjdHRpdGxlID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtdWx0aXNlbGVjdGFyaWFsYWJlbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignbXVsdGlzZWxlY3RhcmlhbGFiZWwnLCBudik7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tdWx0aXNlbGVjdGFyaWFsYWJlbCA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW9zZWxlY3R0aXRsZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbigncmFkaW9zZWxlY3R0aXRsZScsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJhZGlvc2VsZWN0dGl0bGUgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JhZGlvc2VsZWN0YXJpYWxhYmVsJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdyYWRpb3NlbGVjdGFyaWFsYWJlbCcsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJhZGlvc2VsZWN0YXJpYWxhYmVsID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWV3bGVzc21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMudmlld2xlc3NtZXNzYWdlID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzaG93Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdoaWRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlZmF1bHRQYWdlU2l6ZShudjogYW55KXtcbiAgICAgICAgbGV0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGFnZVNpemVPcHRpb25zID0gdGhpcy5nZXROb3JtYWxpemVkUGFnZVNpemVPcHRpb25zQXJyYXkodGhpcy5wYWdlc2l6ZW9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNQYWdlU2l6ZU9wdGlvbnNDaGFuZ2VkKCkgJiYgbm9ybWFsaXplZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpIHsgLy8gaWYgcGFnZXNpemUgb3B0aW9ucyBhcmUgY2hhbmdlZCwgdGhlbiB1cGRhdGUgdGhlIHBhZ2VzaXplIHdpdGhvdXQgY2hlY2tpbmcgZm9yIHN0YXRlcGVyc2lzdGVuY2VcbiAgICAgICAgICAgICAgICBudiA9IG5vcm1hbGl6ZWRQYWdlU2l6ZU9wdGlvbnNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZSA9IG52O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdlc2l6ZScpKSB7XG4gICAgICAgICAgICAgICAgbnYgPSBnZXQod2lkZ2V0U3RhdGUsICdwYWdlc2l6ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBudjsgLy8gdXBkYXRpbmcgdGhlIGRlZmF1bHQgcGFnZXNpemUgdG8gdXNlciBzZWxlY3RlZCBwYWdlc2l6ZVxuICAgICAgICAgICAgfWVsc2UgaWYgKHRoaXMucGFnZXNpemVvcHRpb25zICYmIG5vcm1hbGl6ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbnYgPSBub3JtYWxpemVkUGFnZVNpemVPcHRpb25zWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlZFBhZ2VTaXplID0gbnY7XG4gICAgICAgICAgICBpZih0aGlzLmlzUGFnZVNpemVPcHRpb25zQ2hhbmdlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBub3JtYWxpemVkUGFnZVNpemVPcHRpb25zO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnMgPSBbLi4udGhpcy5kYXRhTmF2aWdhdG9yLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgbWF4UmVzdWx0czogbnZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgIGlmKHRoaXMuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHMgPSB0aGlzLnBhZ2VzaXplIHx8IHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNQYWdlU2l6ZU9wdGlvbnNDaGFuZ2VkKCkge1xuICAgICAgICByZXR1cm4gIWlzRXF1YWwodGhpcy5wcmV2UGFnZXNpemVvcHRpb25zLCB0aGlzLnBhZ2VzaXplb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc2VsZWN0UGFnZVNpemUocGFnZXNpemU6IG51bWJlcikge1xuICAgICAgICBpZighdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlICYmICFwYWdlc2l6ZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmKHBhZ2VzaXplIDwgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9uc1swXSB8fCBwYWdlc2l6ZSA+IHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnNbdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgfHwgIXRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnMuaW5jbHVkZXMoTnVtYmVyKHBhZ2VzaXplKSkpIHtcbiAgICAgICAgICAgIHBhZ2VzaXplID0gdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9uc1swXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iub25QYWdlU2l6ZUNoYW5nZSh1bmRlZmluZWQsIHBhZ2VzaXplKTtcbiAgICB9XG5cbiAgICBzYW5pdGl6ZUNvbW1hU2VwYXJhdGVkSW50ZWdlcnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUztcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJyO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGFyciA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGlucHV0LnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJbXCIpICYmIHRyaW1tZWQuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gSlNPTi5wYXJzZSh0cmltbWVkKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnIgPSB0cmltbWVkLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pcXVlTnVtYmVycyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIGFyclxuICAgICAgICAgICAgICAgICAgICAubWFwKHYgPT4gU3RyaW5nKHYpLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih2ID0+IC9eLT9cXGQrJC8udGVzdCh2KSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IE1hdGguYWJzKHBhcnNlSW50KHYsIDEwKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGpvaW5lZCA9IHVuaXF1ZU51bWJlcnMuam9pbihcIixcIik7XG4gICAgICAgIHJldHVybiBqb2luZWQgfHwgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUztcbiAgICB9XG5cbiAgICBnZXROb3JtYWxpemVkUGFnZVNpemVPcHRpb25zQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKGlucHV0KVxuICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoTnVtYmVyKVxuICAgICAgICAgICAgLmZpbHRlcih2ID0+ICFpc05hTih2KSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgfVxuXG4gICAgb25EYXRhU291cmNlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgIHRyaWdnZXJGbihjb2wub25EYXRhU291cmNlQ2hhbmdlICYmIGNvbC5vbkRhdGFTb3VyY2VDaGFuZ2UuYmluZChjb2wpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoUm93RmlsdGVyRGF0YUZyb21EYXRhc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJtb2RlICE9PSAnbXVsdGljb2x1bW4nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5sb2FkRmlsdGVyRGF0YSAmJiBjb2wubG9hZEZpbHRlckRhdGEuYmluZChjb2wpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckFjdGlvblJvd1ZhcnMoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUm93SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93SW5kZXgnLCB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dQYWdlJywgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBvblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICd3aWR0aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldEdyaWREaW1lbnNpb25zJywgJ3dpZHRoJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaGVpZ2h0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0R3JpZERpbWVuc2lvbnMnLCAnaGVpZ2h0JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25TdHlsZUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVBY3Rpb25zKCkge1xuICAgICAgICB0aGlzLl9hY3Rpb25zLmhlYWRlciA9IFtdO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLmZvb3RlciA9IFtdO1xuICAgICAgICBmb3JFYWNoKHRoaXMuYWN0aW9ucywgKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbiwgJ2hlYWRlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5oZWFkZXIucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbiwgJ2Zvb3RlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5mb290ZXIucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJlbmRlciB0aGUgZmlsdGVyIHJvdy5cbiAgICByZW5kZXJEeW5hbWljRmlsdGVyQ29sdW1uKGZpbHRlVGVtUmVmKSB7XG4gICAgICAgIC8vIEZvciBkeW5hbWljIHRhYmxlIG1hbnVhbGx5IHB1c2hpbmcgdGhlIGZpbHRlcnRlbXBsYXRlUmVmIGFzIHRlbXBsYXRlUmVmIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBwcmlvci5cbiAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUpIHtcbiAgICAgICAgICAgICh0aGlzLmZpbHRlclRtcGwgYXMgYW55KS5fcmVzdWx0cy5wdXNoKGZpbHRlVGVtUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyQ29sdW1ucyh0YWJsZUNvbHVtbiwgY29sSW5kZXgpIHtcbiAgICAgICAgaWYgKGlzTW9iaWxlKCkgJiYgdGhpcy52aWV3cG9ydC5pc01vYmlsZVR5cGUpIHtcbiAgICAgICAgICAgIGlmICghdGFibGVDb2x1bW4ubW9iaWxlRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdwb3J0LmlzVGFibGV0VHlwZSkge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi50YWJsZXREaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi5wY0Rpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlQ29sdW1uWydwcmltYXJ5LWtleSddKSB7XG4gICAgICAgICAgICB0aGlzLnByaW1hcnlLZXkucHVzaCh0YWJsZUNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZERlZnNbY29sSW5kZXhdID0gdGFibGVDb2x1bW47XG4gICAgICAgIGNvbnN0IGNvbENvdW50ID0gdGhpcy5maWVsZERlZnMubGVuZ3RoO1xuICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMucHVzaCh0YWJsZUNvbHVtbik7XG4gICAgICAgIHRoaXMucm93RmlsdGVyW3RhYmxlQ29sdW1uLmZpZWxkXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiBkeW5hbWljIGRhdGF0YWJsZSBhbmQgbGFzdCBjb2x1bW4sIHBhc3MgdGhlIGNvbHVtbnMgdG8ganF1ZXJ5IGRhdGF0YWJsZVxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSAmJiBjb2xDb3VudCA9PT0gdGhpcy5ub09mQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJPcGVyYXRpb25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdjb2xEZWZzJywgdGhpcy5maWVsZERlZnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtRmllbGQobmFtZSwgZm9ybUZpZWxkKSB7XG4gICAgICAgIHRoaXMuZm9ybWZpZWxkc1tuYW1lXSA9IGZvcm1GaWVsZDtcbiAgICB9XG5cbiAgICByZWdpc3RlckFjdGlvbnModGFibGVBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuICAgICAgICB0aGlzLnBvcHVsYXRlQWN0aW9ucygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyUm93KHRhYmxlUm93LCByb3dJbnN0YW5jZSkge1xuICAgICAgICB0aGlzLnJvd0RlZiA9IHRhYmxlUm93O1xuICAgICAgICB0aGlzLnJvd0luc3RhbmNlID0gcm93SW5zdGFuY2U7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5yb3dFeHBhbmRJY29uJywgdGhpcy5yb3dEZWYuZXhwYW5kaWNvbik7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5yb3dDb2xsYXBzZUljb24nLCB0aGlzLnJvd0RlZi5jb2xsYXBzZWljb24pO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0V4cGFuc2lvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0RlZiA9IHRoaXMucm93RGVmO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyUm93QWN0aW9ucyh0YWJsZVJvd0FjdGlvbikge1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnMucHVzaCh0YWJsZVJvd0FjdGlvbik7XG4gICAgfVxuXG4gICAgc2VsZWN0SXRlbShpdGVtLCBkYXRhKSB7XG4gICAgICAgIC8qIHNlcnZlciBpcyBub3QgdXBkYXRpbmcgaW1tZWRpYXRlbHksIHNvIHNldCB0aGUgc2VydmVyIGRhdGEgdG8gc3VjY2VzcyBjYWxsYmFjayBkYXRhICovXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgaXRlbSA9IG9taXRCeShpdGVtLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgJiYgaXNFbXB0eSh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2VsZWN0Um93JywgaXRlbSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qIGRlc2VsZWN0IHRoZSBnaXZlbiBpdGVtKi9cbiAgICBkZXNlbGVjdEl0ZW0oaXRlbSkge1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZGVzZWxlY3RSb3cnLCBpdGVtKTtcbiAgICB9XG5cbiAgICBvbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKG52KSB7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBudjtcbiAgICAgICAgdGhpcy5jaGVja0ZpbHRlcnNBcHBsaWVkKHRoaXMuZ2V0U29ydEV4cHIoKSk7XG4gICAgICAgIGlmICh0aGlzLl9pc0NsaWVudFNlYXJjaCkge1xuICAgICAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLl9fZnVsbERhdGEpO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpICYmICFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiBpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uJCR3bVNvdXJjZUxpc3RJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMuZmlsdGVySW5mbyk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMuc29ydEluZm8pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG52O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lc3NhZ2Uoc2hvdywgdHlwZSwgbXNnLCBoZWFkZXI/KSB7XG4gICAgICAgIGlmIChzaG93ICYmIG1zZykge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5QXBwKG1zZywgdHlwZSwgaGVhZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCgkaXRlbSkge1xuICAgICAgICBsZXQgZmlsdGVyRmllbGRzO1xuICAgICAgICBjb25zdCBzb3J0T3B0aW9ucyA9IGlzRW1wdHkodGhpcy5zb3J0SW5mbykgPyAnJyA6IHRoaXMuc29ydEluZm8uZmllbGQgKyAnICcgKyB0aGlzLnNvcnRJbmZvLmRpcmVjdGlvbjtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHt9O1xuICAgICAgICBsZXQgaXNWYWxpZDtcbiAgICAgICAgbGV0IHJlcXVlc3REYXRhO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGZpZWxkRGVmID0+IHtcbiAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgdGhlIHJvdyBvcGVyYXRpb24gYWN0aW9ucyBjb2x1bW4gdG8gdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAgICAgICAgICBpZiAoZmllbGREZWYuZmllbGQgPT09IFJPV19PUFNfRklFTEQgfHwgIWZpZWxkRGVmLnNob3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgJ2hlYWRlcic6IGZpZWxkRGVmLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gSWYgY29sdW1uIGhhcyBleHBvcnRleHByZXNzaW9uLCB0aGVuIHNlbmQgZm9ybSB0aGUgZXhwcmVzc2lvbiBhcyByZXF1aXJlZCBieSBiYWNrZW5kLlxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNlbmQgdGhlIGZpZWxkIG5hbWUuXG4gICAgICAgICAgICBpZiAoZmllbGREZWYuZXhwb3J0ZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgICg8YW55Pm9wdGlvbikuZXhwcmVzc2lvbiA9IGZpZWxkRGVmLmV4cG9ydGV4cHJlc3Npb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICg8YW55Pm9wdGlvbikuZmllbGQgPSBmaWVsZERlZi5maWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbnNbZmllbGREZWYuZmllbGRdID0gb3B0aW9uO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHModGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgcmVxdWVzdERhdGEgPSB7XG4gICAgICAgICAgICBtYXRjaE1vZGUgOiAnYW55d2hlcmVpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGV4cG9ydFR5cGUgOiAkaXRlbS5sYWJlbCxcbiAgICAgICAgICAgIGxvZ2ljYWxPcCA6ICdBTkQnLFxuICAgICAgICAgICAgZXhwb3J0U2l6ZSA6IHRoaXMuZXhwb3J0ZGF0YXNpemUsXG4gICAgICAgICAgICBjb2x1bW5zIDogY29sdW1uc1xuICAgICAgICB9O1xuICAgICAgICBpc1ZhbGlkID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVleHBvcnQnLCB7JGRhdGE6IHJlcXVlc3REYXRhfSk7XG4gICAgICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3REYXRhLmZpZWxkcyA9IHZhbHVlcyhyZXF1ZXN0RGF0YS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uRE9XTkxPQUQsIHtkYXRhOiByZXF1ZXN0RGF0YX0pO1xuICAgIH1cblxuICAgIGV4cGFuZFJvdyhyb3dJZCkge1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZXhwYW5kUm93Jywgcm93SWQpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlUm93KHJvd0lkKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdjb2xsYXBzZVJvdycsIHJvd0lkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kb2N1bWVudENsaWNrQmluZChldmVudCkge1xuICAgICAgICBjb25zdCAkdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAvLyBJZiBjbGljayB0cmlnZ2VyZWQgZnJvbSBzYW1lIGdyaWQgb3IgYSBkaWFsb2csIGRvIG5vdCBzYXZlIHRoZSByb3dcbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0uY29udGFpbnMoJHRhcmdldCkgfHwgZXZlbnQudGFyZ2V0LmRvY3R5cGUgfHwgaXNJbnB1dEJvZHlXcmFwcGVyKCQoJHRhcmdldCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NhdmVSb3cnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWRyYXcoZm9yY2VSZW5kZXIpIHtcbiAgICAgICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUodGhpcy5ncmlkT3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0Q29sR3JvdXBXaWR0aHMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYWRkT3JSZW1vdmVTY3JvbGwnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm4gPSAkcGFyc2VFdmVudChleHByZXNzaW9uKTtcbiAgICAgICAgZm4odGhpcy52aWV3UGFyZW50LCBPYmplY3QuYXNzaWduKHRoaXMuY29udGV4dCwgeyRldmVudH0pKTtcbiAgICB9XG5cbiAgICAvLyBjaGFuZ2UgYW5kIGJsdXIgZXZlbnRzIGFyZSBhZGRlZCBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KHRoaXMubmF0aXZlRWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjaywgbG9jYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyaWdnZXJVcGxvYWRFdmVudCgkZXZlbnQsIGV2ZW50TmFtZSwgZmllbGROYW1lLCByb3cpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7JGV2ZW50LCByb3d9O1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uc1tmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uZXdWYWwgPSAkZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgICAgICAgICAgcGFyYW1zLm9sZFZhbCA9IHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLl9vbGRVcGxvYWRWYWw7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5fb2xkVXBsb2FkVmFsID0gcGFyYW1zLm5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5pbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZSwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1XaWRnZXQoKSB7fVxuXG4gICAgLy8gRm9ybSBjb250cm9sIGFjY2Vzc29yIG1ldGhvZHMuIFRoaXMgd2lsbCBiZSB1c2VkIGZvciB0YWJsZSBpbnNpZGUgZm9ybVxuICAgIHdyaXRlVmFsdWUoKSB7fVxuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgX29uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXRhY2goKTtcbiAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpZiAodGl0bGUgfHwgc3ViaGVhZGluZyB8fCBpY29uY2xhc3MgfHwgZXhwb3J0T3B0aW9ucy5sZW5ndGggfHwgX2FjdGlvbnMuaGVhZGVyLmxlbmd0aCkge1xuICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgIEBpZiAoaWNvbmNsYXNzKSB7XG4gICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIHt7aWNvbmNsYXNzfX1cIj48L2k+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoZXhwb3J0T3B0aW9ucy5sZW5ndGggfHwgX2FjdGlvbnMuaGVhZGVyLmxlbmd0aCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYWN0aW9ucyBhcHAtZGF0YWdyaWQtYWN0aW9uc1wiPlxuICAgICAgICAgIEBmb3IgKGJ0biBvZiBfYWN0aW9ucy5oZWFkZXI7IHRyYWNrIGJ0bjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImNyZWF0ZUN1c3RvbUluamVjdG9yKCdhY3Rpb25zX2hlYWRlcl8nICsgaW5kZXgsIHtidG46YnRufSlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGV4cG9ydE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8ZGl2IHdtTWVudSBkcm9wZG93biBjYXB0aW9uLmJpbmQ9XCJhcHBMb2NhbGUuTEFCRUxfRVhQT1JUXCIgIGF1dG9jbG9zZT1cImFsd2F5c1wiIGF0dHIubmFtZT1cInt7bmFtZX19LWV4cG9ydFwiXG4gICAgICAgICAgICBkYXRhc2V0LmJpbmQ9XCJleHBvcnRPcHRpb25zXCIgc2VsZWN0LmV2ZW50PVwiZXhwb3J0KCRpdGVtKVwiIG1lbnVwb3NpdGlvbj1cImRvd24sbGVmdFwiPjwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9oMz5cbiAgPC9kaXY+XG59XG48ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkXCIgI2RhdGFncmlkRWxlbWVudD48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlciBjbGVhcmZpeFwiIFtoaWRkZW5dPVwiIV9hY3Rpb25zLmZvb3Rlci5sZW5ndGggJiYgKCFzaG93bmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkpIFwiPlxuICA8ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkLXBhZ2luYXRvclwiIFtoaWRkZW5dPVwiKCFkYXRhTmF2aWdhdG9yPy5kYXRhU2l6ZSAmJiAhZGF0YU5hdmlnYXRvci5kYXRhc291cmNlPy5wYWdpbmF0aW9uPy5uZXh0KSB8fCAhc2hvd25hdmlnYXRpb24gfHwgKG9uRGVtYW5kTG9hZCAmJiBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQpXCI+XG4gICAgPG5hdiB3bVBhZ2luYXRpb24gc2hvdy5iaW5kPVwic2hvd25hdmlnYXRpb25cIiBuYXZpZ2F0aW9uYWxpZ24uYmluZD1cIm5hdmlnYXRpb25hbGlnblwiXG4gICAgICBuYXZpZ2F0aW9uc2l6ZS5iaW5kPVwibmF2aWdhdGlvblNpemVcIlxuICAgICAgbmF2aWdhdGlvbi5iaW5kPVwibmF2Q29udHJvbHNcIiBzaG93cmVjb3JkY291bnQuYmluZD1cInNob3dyZWNvcmRjb3VudFwiIG1heHNpemUuYmluZD1cIm1heHNpemVcIlxuICAgICAgYm91bmRhcnlsaW5rcy5iaW5kPVwiYm91bmRhcnlsaW5rc1wiXG4gICAgZm9yY2VlbGxpcHNlcy5iaW5kPVwiZm9yY2VlbGxpcHNlc1wiIGRpcmVjdGlvbmxpbmtzLmJpbmQ9XCJkaXJlY3Rpb25saW5rc1wiPjwvbmF2PlxuICA8L2Rpdj5cbiAgQGlmIChfYWN0aW9ucy5mb290ZXIubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZC1hY3Rpb25zXCI+XG4gICAgICBAZm9yIChidG4gb2YgX2FjdGlvbnMuZm9vdGVyOyB0cmFjayBidG47IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnRuLndpZGdldFR5cGUgPT09ICdidXR0b24nID8gYnV0dG9uUmVmIDogYW5jaG9yUmVmXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2J0bjpidG59XCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImNyZWF0ZUN1c3RvbUluamVjdG9yKCdhY3Rpb25zX2Zvb3Rlcl8nICsgaW5kZXgsIHtidG46YnRufSlcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2J1dHRvblJlZiBsZXQtYnRuPVwiYnRuXCI+XG4gIDxidXR0b24gd21CdXR0b24gY2FwdGlvbi5iaW5kPVwiYnRuLmRpc3BsYXlOYW1lXCIgc2hvdy5iaW5kPVwiYnRuLnNob3dcIiBjbGFzcy5iaW5kPVwiYnRuLmNsYXNzXCIgIGljb25jbGFzcy5iaW5kPVwiYnRuLmljb25jbGFzc1wiIChjbGljayk9XCJpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGJ0bi5hY3Rpb24pXCJcbiAgICBbbmdDbGFzc109XCJ7J2J0bi1zbSc6IHNwYWNpbmcgPT09ICdjb25kZW5zZWQnLCAnZGlzYWJsZWQtbmV3JzogYnRuLmtleSA9PT0gJ2FkZE5ld1JvdycgJiYgKGlzR3JpZEVkaXRNb2RlIHx8IGlzTG9hZGluZyl9XCJcbiAgdHlwZT1cImJ1dHRvblwiIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJidG4uZGlzcGxheU5hbWVcIiBkaXNhYmxlZC5iaW5kPVwiYnRuLmRpc2FibGVkXCIgY29uZGl0aW9uYWxjbGFzcy5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsY2xhc3NcIiBjb25kaXRpb25hbHN0eWxlLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxzdHlsZVwiPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhbmNob3JSZWYgbGV0LWJ0bj1cImJ0blwiPlxuICA8YSB3bUFuY2hvciBjYXB0aW9uLmJpbmQ9XCJidG4uZGlzcGxheU5hbWVcIiBzaG93LmJpbmQ9XCJidG4uc2hvd1wiIGNsYXNzLmJpbmQ9XCJidG4uY2xhc3NcIiAgaWNvbmNsYXNzLmJpbmQ9XCJidG4uaWNvbmNsYXNzXCIgKGNsaWNrKT1cImludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgYnRuLmFjdGlvbilcIlxuICAgIFtuZ0NsYXNzXT1cInsnYnRuLXNtJzogc3BhY2luZyA9PT0gJ2NvbmRlbnNlZCcsICdkaXNhYmxlZC1uZXcnOiBidG4ua2V5ID09PSAnYWRkTmV3Um93JyAmJiAoaXNHcmlkRWRpdE1vZGUgfHwgaXNMb2FkaW5nKX1cIlxuICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCJcbiAgaHlwZXJsaW5rLmJpbmQ9XCJidG4uaHlwZXJsaW5rXCIgdGFyZ2V0LmJpbmQ9XCJidG4udGFyZ2V0XCIgY29uZGl0aW9uYWxjbGFzcy5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsY2xhc3NcIiBjb25kaXRpb25hbHN0eWxlLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxzdHlsZVwiPjwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgaGlkZGVuPlxuICA8bmctY29udGFpbmVyICNtdWx0aUNvbHVtbkZpbHRlclZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAjaW5saW5lRWRpdFZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAjaW5saW5lRWRpdE5ld1ZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAjcm93QWN0aW9uc1ZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAjcm93RXhwYW5zaW9uQWN0aW9uVmlldz48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICNjdXN0b21FeHByVmlldz48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICNkeW5hbWljVGFibGU+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAjcm93RGV0YWlsVmlldz48L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwiZHluYW1pYy10YWJsZS1jb250YWluZXJcIj48L2Rpdj5cbjwvZGl2PlxuIl19
|
|
2593
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUVOLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUVYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixXQUFXLEVBQWEsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLE1BQU0sRUFDTixZQUFZLEVBQ1osY0FBYyxFQUNkLEdBQUcsRUFDSCxZQUFZLEVBQ1osVUFBVSxFQUNWLDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsUUFBUSxF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QixFQUFFO2dCQUVSLGVBQWU7c0JBQW5GLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBdWhDN0IsVUFBVTtzQkFBL0MsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QW5jaG9yQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNpYy9hbmNob3InO1xuaW1wb3J0IHtCdXR0b25Db21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0L2J1dHRvbic7XG5pbXBvcnQge01lbnVDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL25hdmlnYXRpb24vbWVudSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICRpbnZva2VXYXRjaGVycyxcbiAgICAkcGFyc2VFdmVudCxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgbXV0ZVdhdGNoZXJzLFxuICAgIHVuTXV0ZVdhdGNoZXJzLFxuICAgIEFwcCxcbiAgICBjbG9zZVBvcG92ZXIsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgZXh0ZW5kUHJvdG8sXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldERhdGFzb3VyY2VGcm9tRXhwcixcbiAgICBnZXRWYWxpZEpTT04sXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgdHJpZ2dlckZuLFxuICAgIFZpZXdwb3J0XG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgREVCT1VOQ0VfVElNRVMsXG4gICAgRURJVF9NT0RFLFxuICAgIGV4dHJhY3REYXRhU291cmNlTmFtZSxcbiAgICBnZXRDb25kaXRpb25hbENsYXNzZXMsXG4gICAgZ2V0T3JkZXJCeUV4cHIsXG4gICAgZ2V0Um93T3BlcmF0aW9uc0NvbHVtbixcbiAgICBOQVZJR0FUSU9OX1RZUEUsXG4gICAgcHJlcGFyZUZpZWxkRGVmcyxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICB0cmFuc2Zvcm1EYXRhLFxuICAgIFRydXN0QXNQaXBlLFxuICAgIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzXG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuXG5pbXBvcnQge0xpc3RDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGlzdCc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vdGFibGUucHJvcHMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2UsXG4gICAgZXh0ZW5kLFxuICAgIGZpbmQsXG4gICAgZmluZEluZGV4LFxuICAgIGZsb29yLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGluY2x1ZGVzLFxuICAgIGluZGV4T2YsXG4gICAgaXNBcnJheSxcbiAgICBpc0VtcHR5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNOYU4sXG4gICAgaXNPYmplY3QsXG4gICAgaXNVbmRlZmluZWQsXG4gICAga2V5cyxcbiAgICBvbWl0QnksXG4gICAgcHVsbEFsbFdpdGgsXG4gICAgcmVtb3ZlLFxuICAgIHNldCxcbiAgICBzb21lLFxuICAgIHNwbGl0LFxuICAgIHN0YXJ0c1dpdGgsXG4gICAgdG9OdW1iZXIsXG4gICAgdmFsdWVzXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7QnNEcm9wZG93bk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWdyaWQgYXBwLXBhbmVsIHBhbmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXRhYmxlJywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbmNvbnN0IGV4cG9ydEljb25NYXBwaW5nID0ge1xuICAgIEVYQ0VMOiAnZmEgZmEtZmlsZS1leGNlbC1vJyxcbiAgICBDU1Y6ICdmYSBmYS1maWxlLXRleHQtbydcbn07XG5cbmNvbnN0IFJPV19PUFNfRklFTEQgPSAncm93T3BlcmF0aW9ucyc7XG5cbi8qKiBTYW1lIGRlZmF1bHQgYXMgYHRhYmxlLnByb3BzLnRzYCDigJQgdXNlZCB3aGVuIGBwYWdlc2l6ZW9wdGlvbnNgIGNhbm5vdCBiZSBwYXJzZWQgdG8gaW50ZWdlcnMuICovXG5jb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gJzUsMTAsMjAsNTAsMTAwJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCBpc0lucHV0Qm9keVdyYXBwZXIgPSB0YXJnZXQgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJy5kcm9wZG93bi1tZW51JywgJy51aWItdHlwZWFoZWFkLW1hdGNoJywgJy5tb2RhbC1kaWFsb2cnLCAnLnRvYXN0J107XG4gICAgbGV0IGlzSW5wdXQgPSBmYWxzZTtcbiAgICBjbGFzc2VzLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KGNscykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpc0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGF0dHJzID0gWydic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3InXTtcbiAgICBpZiAoIWlzSW5wdXQpIHtcbiAgICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRbMF0uaGFzQXR0cmlidXRlKGF0dHIpKSB7XG4gICAgICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSW5wdXQ7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBbmNob3JDb21wb25lbnQsIFBhZ2luYXRpb25Db21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgQnNEcm9wZG93bk1vZHVsZSwgTWVudUNvbXBvbmVudF0sXG4gICAgc2VsZWN0b3I6ICdbd21UYWJsZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhUYWJsZUNvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFibGVDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBAVmlld0NoaWxkKFBhZ2luYXRpb25Db21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBkYXRhTmF2aWdhdG9yO1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0YWdyaWRFbGVtZW50Jywge3N0YXRpYzogdHJ1ZX0pIHByaXZhdGUgX3RhYmxlRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ3Jvd0FjdGlvblRtcGwnLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0FjdGlvblRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3Jvd0FjdGlvbnNWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93QWN0aW9uc1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdmaWx0ZXJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgZmlsdGVyVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnbXVsdGlDb2x1bW5GaWx0ZXJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZmlsdGVyVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2lubGluZVdpZGdldFRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBpbmxpbmVXaWRnZXRUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVFZGl0VmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGlubGluZUVkaXRWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbE5ldycsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldE5ld1RtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXROZXdWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdE5ld1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdjdXN0b21FeHByVG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGN1c3RvbUV4cHJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdjdXN0b21FeHByVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGN1c3RvbUV4cHJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93RXhwYW5zaW9uQWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93RXhwYW5zaW9uQWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgncm93RXhwYW5zaW9uVG1wbCcpIHJvd0V4cGFuc2lvblRtcGw6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93RGV0YWlsVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0RldGFpbFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgncm93RXhwYW5zaW9uQWN0aW9uVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljVGFibGVSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBwcml2YXRlIHJvd0FjdGlvbnNDb21waWxlZFRsOiBhbnkgID0ge307XG4gICAgcHJpdmF0ZSByb3dGaWx0ZXJDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGlubGluZUNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lTmV3Q29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgcm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZNYXAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0V4cGFuc2lvbkFjdGlvblRsOiBhbnkgPSB7fTtcblxuICAgIGNvbHVtbnMgPSB7fTtcbiAgICBmb3JtZmllbGRzID0ge307XG4gICAgZGF0YWdyaWRFbGVtZW50O1xuICAgIGRhdGFzb3VyY2U7XG4gICAgZWRpdG1vZGU7XG4gICAgZW5hYmxlY29sdW1uc2VsZWN0aW9uO1xuICAgIGVuYWJsZXNvcnQgPSB0cnVlO1xuICAgIGZpbHRlcm1vZGU7XG4gICAgZmlsdGVyb25rZXlwcmVzcztcbiAgICBpc3Jvd3NlbGVjdGFibGU7XG4gICAgc2VhcmNobGFiZWw7XG4gICAgZm9ybXBvc2l0aW9uO1xuICAgIGdyaWRjbGFzcztcbiAgICBncmlkZmlyc3Ryb3dzZWxlY3Q7XG4gICAgaWNvbmNsYXNzO1xuICAgIG9uZGVtYW5kbWVzc2FnZTtcbiAgICBhbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgIHZpZXdsZXNzbWVzc2FnZTtcbiAgICBzaG93dmlld2xlc3NidXR0b24gPSBmYWxzZTtcbiAgICBfdHJpZ2dlcmVkQnlVc2VyO1xuICAgIF9pc0lubGluZUVkaXRTYXZlO1xuICAgIC8qKiBDb3ZlcnMgYXN5bmMgbmF2aWdhdG9yL2RhdGFzZXQgdXBkYXRlcyBhZnRlciBpbmxpbmUvcXVpY2tlZGl0IHNhdmUgKHdtLlZhcmlhYmxlKS4gKi9cbiAgICBwcml2YXRlIF9tb2RlbFZhckVkaXRTb2Z0UmVmcmVzaEFjdGl2ZVVudGlsID0gMDtcbiAgICBpc0dyaWRFZGl0TW9kZTtcbiAgICBsb2FkaW5nZGF0YW1zZztcbiAgICBtdWx0aXNlbGVjdDtcbiAgICBuYW1lO1xuICAgIF9pc0RlcGVuZGVudDtcbiAgICBuYXZpZ2F0aW9uO1xuICAgIG5hdmlnYXRpb25TaXplO1xuICAgIG5hdmlnYXRpb25hbGlnbjtcbiAgICBub2RhdGFtZXNzYWdlO1xuICAgIHBhZ2VzaXplO1xuICAgIHVwZGF0ZWRQYWdlU2l6ZTtcbiAgICBhY3R1YWxQYWdlU2l6ZTtcbiAgICBjdXJyZW50cGFnZTtcbiAgICBwcmV2RGF0YTtcbiAgICBwcmltYXJ5S2V5ID0gW107XG4gICAgcmFkaW9zZWxlY3Q7XG4gICAgaGVhZGVyc2VsZWN0YWxsO1xuICAgIHJvd2NsYXNzO1xuICAgIHJvd25nY2xhc3M7XG4gICAgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHNob3doZWFkZXI7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuICAgIHNob3dyb3dpbmRleDtcbiAgICBzdWJoZWFkaW5nO1xuICAgIHRpdGxlO1xuICAgIHNob3duZXdyb3c7XG4gICAgZGVsZXRlb2t0ZXh0O1xuICAgIGRlbGV0ZWNhbmNlbHRleHQ7XG4gICAgb25FcnJvcjtcbiAgICBvblJvd2luc2VydDtcbiAgICBvblJvd3VwZGF0ZTtcbiAgICBvblJvd2RlbGV0ZTtcbiAgICBzdGF0ZWhhbmRsZXI7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlID0gbmV3IFN1YmplY3QoKTtcbiAgICBzZWxlY3RlZEl0ZW1DaGFuZ2UkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5hc09ic2VydmFibGUoKTtcblxuICAgIGFjdGlvbnMgPSBbXTtcbiAgICBfYWN0aW9ucyA9IHtcbiAgICAgICAgJ2hlYWRlcic6IFtdLFxuICAgICAgICAnZm9vdGVyJzogW11cbiAgICB9O1xuICAgIGV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICBleHBvcnRkYXRhc2l6ZTtcbiAgICBmb3JtV2lkZ2V0cztcbiAgICBoZWFkZXJDb25maWc6IGFueSA9IFtdO1xuICAgIGl0ZW1zID0gW107XG4gICAgbmF2Q29udHJvbHM7XG4gICAgcm93QWN0aW9ucyA9IFtdO1xuICAgIHNlbGVjdGVkQ29sdW1ucztcbiAgICBzaG93bmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgIHNob3dGaXJzdFJvdyA9IGZhbHNlO1xuICAgIGRhdGFzZXQ7XG4gICAgX2xpdmVUYWJsZVBhcmVudDtcbiAgICBpc1BhcnRPZkxpdmVHcmlkO1xuICAgIGdyaWRFbGVtZW50O1xuICAgIGlzTmV3Um93SW5zZXJ0ZWQ7XG4gICAgaXNNb2JpbGU7XG4gICAgaXNMb2FkaW5nO1xuICAgIGlzUm93RGVsZXRlZDtcbiAgICBkb2N1bWVudENsaWNrQmluZCA9IG5vb3A7XG4gICAgYWN0aW9uUm93SW5kZXg7XG4gICAgYWN0aW9uUm93UGFnZTtcbiAgICBwcmV2RmlsdGVyRXhwcmVzc2lvbjogYW55ID0gW107XG4gICAgZmllbGREZWZzOiBhbnkgPSBbXTtcbiAgICByb3dEZWY6IGFueSA9IHt9O1xuICAgIHJvd0luc3RhbmNlOiBhbnkgPSB7fTtcbiAgICBwYWdlc2l6ZW9wdGlvbnM7XG4gICAgcHJldlBhZ2VzaXplb3B0aW9ucztcbiAgICBtdWx0aXNlbGVjdHRpdGxlO1xuICAgIG11bHRpc2VsZWN0YXJpYWxhYmVsO1xuICAgIHJhZGlvc2VsZWN0dGl0bGU7XG4gICAgcmFkaW9zZWxlY3RhcmlhbGFiZWw7XG5cbiAgICBwcml2YXRlIGZ1bGxGaWVsZERlZnMgPSBbXTtcbiAgICBwcml2YXRlIF9fZnVsbERhdGE7XG4gICAgcHJpdmF0ZSBkYXRhTmF2aWdhdG9yV2F0Y2hlZDtcbiAgICBwcml2YXRlIG5hdmlnYXRvclJlc3VsdFdhdGNoO1xuICAgIHByaXZhdGUgbmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2g7XG4gICAgcHJpdmF0ZSBmaWx0ZXJJbmZvO1xuICAgIHByaXZhdGUgc29ydEluZm87XG4gICAgcHJpdmF0ZSBzZXJ2ZXJEYXRhO1xuICAgIHByaXZhdGUgZmlsdGVybnVsbHJlY29yZHM7XG4gICAgcHJpdmF0ZSB2YXJpYWJsZUluZmxpZ2h0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGlzZHluYW1pY3RhYmxlO1xuICAgIHByaXZhdGUgX2R5bmFtaWNDb250ZXh0O1xuICAgIHByaXZhdGUgbm9PZkNvbHVtbnM7XG4gICAgcHVibGljIG9uRGVtYW5kTG9hZDtcbiAgICBwdWJsaWMgaW5mU2Nyb2xsO1xuICAgIHByaXZhdGUgaXNEYXRhTG9hZGluZztcbiAgICBwcml2YXRlIGN1cnJlbnRQYWdlO1xuICAgIHByaXZhdGUgYXBwbHlQcm9wcyA9IG5ldyBNYXAoKTtcblxuICAgIHJlZHJhdyA9IGRlYm91bmNlKHRoaXMuX3JlZHJhdywgMTUwKTtcbiAgICBkZWJvdW5jZWRIYW5kbGVMb2FkaW5nID0gZGVib3VuY2UodGhpcy5oYW5kbGVMb2FkaW5nLCAzNTApO1xuXG4gICAgLy8gRmlsdGVyIGFuZCBTb3J0IE1ldGhvZHNcbiAgICByb3dGaWx0ZXI6IGFueSA9IHt9O1xuICAgIG1hdGNoTW9kZVR5cGVzTWFwO1xuICAgIG1hdGNoTW9kZU1zZ3M7XG4gICAgZW1wdHlNYXRjaE1vZGVzO1xuICAgIF9zZWFyY2hTb3J0SGFuZGxlciA9IG5vb3A7XG4gICAgc2VhcmNoU29ydEhhbmRsZXIgPSAoLi4uYXJncykgPT4geyB0aGlzLl9zZWFyY2hTb3J0SGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsgfTtcbiAgICBfaXNQYWdlU2VhcmNoO1xuICAgIF9pc0NsaWVudFNlYXJjaDtcbiAgICBjaGVja0ZpbHRlcnNBcHBsaWVkOiBGdW5jdGlvbjtcbiAgICBnZXRTZWFyY2hSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldFNvcnRSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldEZpbHRlckZpZWxkczogRnVuY3Rpb247XG4gICAgb25Sb3dGaWx0ZXJDaGFuZ2UgPSBub29wO1xuICAgIG9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0ID0gbm9vcDtcbiAgICBzaG93Q2xlYXJJY29uID0gbm9vcDtcbiAgICBjbGVhclJvd0ZpbHRlciA9IG5vb3A7XG4gICAgYWRqdXN0Q29udGFpbmVyID0gbm9vcDtcbiAgICBnZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mbzogRnVuY3Rpb247XG4gICAgcmVmcmVzaERhdGE6IEZ1bmN0aW9uO1xuICAgIGNsZWFyRmlsdGVyOiBGdW5jdGlvbjtcblxuICAgIC8vIElubGluZSBFZGl0XG4gICAgbmdmb3JtOiBGb3JtR3JvdXA7XG4gICAgdXBkYXRlVmFyaWFibGU6IEZ1bmN0aW9uO1xuICAgIHVwZGF0ZVJlY29yZDogRnVuY3Rpb247XG4gICAgZGVsZXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBpbnNlcnRSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIGFkZE5ld1JvdzogRnVuY3Rpb247XG4gICAgYWRkUm93OiBGdW5jdGlvbjtcbiAgICBkZWxldGVSb3c6IEZ1bmN0aW9uO1xuICAgIG9uUmVjb3JkRGVsZXRlOiBGdW5jdGlvbjtcbiAgICBpbml0aWF0ZVNlbGVjdEl0ZW06IEZ1bmN0aW9uO1xuICAgIGhpZGVFZGl0Um93OiBGdW5jdGlvbjtcbiAgICBzYXZlUm93OiBGdW5jdGlvbjtcbiAgICBjYW5jZWxSb3c6IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgX3BhZ2VMb2FkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBncmlkT3B0aW9ucyA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGNvbERlZnM6IFtdLFxuICAgICAgICBzdGFydFJvd0luZGV4OiAxLFxuICAgICAgICBtb2RlOiAnJyxcbiAgICAgICAgc29ydEluZm86IHtcbiAgICAgICAgICAgIGZpZWxkOiAnJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJydcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVybW9kZTogJycsXG4gICAgICAgIGZpbHRlcm9ua2V5cHJlc3M6IGZhbHNlLFxuICAgICAgICBpc3Jvd3NlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBzZWFyY2hMYWJlbDogJycsXG4gICAgICAgIHJvd0FjdGlvbnM6IFtdLFxuICAgICAgICBoZWFkZXJDb25maWc6IFtdLFxuICAgICAgICByb3dDbGFzczogJycsXG4gICAgICAgIGVkaXRtb2RlOiAnJyxcbiAgICAgICAgZm9ybVBvc2l0aW9uOiAnJyxcbiAgICAgICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgICAgICByb3dFeHBhbnNpb25FbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcm93RGVmOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJzAnXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgICAgc2VsZWN0RmllbGQ6ICdTZWxlY3QgRmllbGQnXG4gICAgICAgIH0sXG4gICAgICAgIHNlY3VyaXR5VXRpbHM6IHtcbiAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0gOiB7fVxuICAgICAgICB9LFxuICAgICAgICBuYXZpZ2F0aW9uOiAnJyxcbiAgICAgICAgaXNkeW5hbWljdGFibGU6ICcnLFxuICAgICAgICBkZWxldGVkUm93SW5kZXg6IC0xLFxuICAgICAgICBsYXN0QWN0aW9uUGVyZm9ybWVkOiAnc2Nyb2xsJyxcbiAgICAgICAgaXNTZWFyY2hUcmlnZXJyZWQ6IGZhbHNlLFxuICAgICAgICBpc0RhdGFzZXRVcGRhdGVkOiBmYWxzZSxcbiAgICAgICAgaXNEYXRhVXBkYXRlZEJ5VXNlcjogZmFsc2UsXG4gICAgICAgIHNob3d2aWV3bGVzc2J1dHRvbjogZmFsc2UsXG4gICAgICAgIG9uZGVtYW5kbWVzc2FnZTogJycsXG4gICAgICAgIGFsbG93cGFnZXNpemVjaGFuZ2U6IGZhbHNlLFxuICAgICAgICBwYWdlc2l6ZW9wdGlvbnM6IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgICAgIHZpZXdsZXNzbWVzc2FnZTogJycsXG4gICAgICAgIGxvYWRpbmdkYXRhbXNnOiAnJyxcbiAgICAgICAgaXNOZXh0UGFnZURhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZW5hYmxlU29ydDogdHJ1ZSxcbiAgICAgICAgbXVsdGlzZWxlY3Q6IGZhbHNlLFxuICAgICAgICBzaG93UmFkaW9Db2x1bW46IGZhbHNlLFxuICAgICAgICBlbmFibGVDb2x1bW5TZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBtdWx0aXNlbGVjdHRpdGxlOiAnJyxcbiAgICAgICAgbXVsdGlzZWxlY3RhcmlhbGFiZWw6ICcnLFxuICAgICAgICByYWRpb3NlbGVjdHRpdGxlOiAnJyxcbiAgICAgICAgaGVhZGVyc2VsZWN0YWxsOmZhbHNlLFxuICAgICAgICByYWRpb3NlbGVjdGFyaWFsYWJlbDogJycsXG4gICAgICAgIEFDVElPTlM6IHtcbiAgICAgICAgICAgICdERUxFVEUnOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICdFRElUJzogJ2VkaXQnLFxuICAgICAgICAgICAgJ1NFQVJDSF9PUl9TT1JUJzogJ3NlYXJjaF9vcl9zb3J0JyxcbiAgICAgICAgICAgICdERUZBVUxUJzogJ3Njcm9sbCcsXG4gICAgICAgICAgICAnRklMVEVSX0NSSVRFUklBJyA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgJ0RBVEFTRVRfVVBEQVRFJzogJ2RhdGFzZXRfdXBkYXRlJ1xuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25Sb3dJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb25Sb3dQYWdlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTGFzdFBhZ2UgOiBmYWxzZSxcbiAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG4gICAgICAgIGdldEN1cnJlbnRQYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJykgfHwgMTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBwYWdlIG51bWJlclxuICAgICAgICBzZXRDdXJyZW50UGFnZTogKHBhZ2VOdW0pID0+IHtcbiAgICAgICAgICAgIHNldCh0aGlzLmRhdGFOYXZpZ2F0b3IsICdkbi5jdXJyZW50UGFnZScsIHBhZ2VOdW0gfHwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldERhdGFTb3VyY2U6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGdldCB0aGUgcGFnZSBsaW1pdFxuICAgICAgICBnZXRQYWdlU2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZXNpemU7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFVwZGF0ZWRQYWdlU2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlZFBhZ2VTaXplO1xuICAgICAgICB9LFxuICAgICAgICBnZXRQYWdlQ291bnQgOiAoKSA9PntcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNvdW50O1xuICAgICAgICB9LFxuICAgICAgICBlbmFibGVOYXZpZ2F0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVMYXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tb2RlID0gJ3ZpZXdsZXNzJztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBkZWxldGVkIHJvdyBpbmRleFxuICAgICAgICBzZXREZWxldGVkUm93SW5kZXg6IChpZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZGVsZXRlZFJvd0luZGV4JywgaWQpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXRzIHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgbGlrZSBlZGl0LCBkZWxldGUgZXRjLlxuICAgICAgICBzZXRMYXN0QWN0aW9uUGVyZm9ybWVkOiAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdsYXN0QWN0aW9uUGVyZm9ybWVkJywgYWN0aW9uIHx8IHRoaXMuZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWRPcHRpb25zLm5hdmlnYXRpb24gPT09ICdTY3JvbGwnIHx8IHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ09uLURlbWFuZCc7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzU2VhcmNoVHJpZ2VycmVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzU2VhcmNoVHJpZ2VycmVkJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRJc0RhdGFzZXRVcGRhdGVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzRGF0YXNldFVwZGF0ZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNOZXh0UGFnZURhdGEnIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBmZXRjaGluZyB0aGUgbmV4dCBwYWdlIGRhdGEgYnkgY2xpY2tpbmcgb25Mb2FkIG1vcmUgb3Igc2Nyb2xsXG4gICAgICAgIHNldElzTmV4dFBhZ2VEYXRhOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzTmV4dFBhZ2VEYXRhJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyAgRml4IGZvciBbV01TLTIzMjYzXTogJ2lzRGF0YVVwZGF0ZWRCeVVzZXInIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBjaGFuZ2VzIHRoZSBkYXRhc2V0IGZyb20gc2NyaXB0XG4gICAgICAgIHNldElzRGF0YVVwZGF0ZWRCeVVzZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhVXBkYXRlZEJ5VXNlcicsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25EYXRhUmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2RhdGFyZW5kZXInLCB7JGRhdGE6IHRoaXMuZ3JpZERhdGEsIGRhdGE6IHRoaXMuZ3JpZERhdGF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3Mgc2VsZWN0ZWQgaW4gcHJldmlvdXMgcGFnZXMuIChOb3QgZmluZGluZyBpbnRlcnNlY3Rpb24gb2YgZGF0YSBhbmQgc2VsZWN0ZWRpdGVtcyBhcyBpdCB3aWxsIGJlIGhlYXZ5KVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKCF0aGlzLmluZlNjcm9sbCAmJiAhdGhpcy5vbkRlbWFuZExvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbiByZW5kZXIsIGFwcGx5IHRoZSBmaWx0ZXJzIHNldCBmb3IgcXVlcnkgc2VydmljZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1BhZ2VTZWFyY2ggJiYgdGhpcy5maWx0ZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIodGhpcy5maWx0ZXJJbmZvLCB1bmRlZmluZWQsICdzZWFyY2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0UGFyZW50VGFibGVEYXRhOiAoKT0+IHtcbiAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgcm93IGluZGV4IGFuZCBjdXJyZW50IHBhZ2Ugb2YgcGFyZW50IHRhYmxlIGluIHJvdyBleHBhbnNpb24gKG5lc3RlZCB0YWJsZSkgc2NlbmFyaW9cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRyRWxlbWVudCA9ICAkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgndHInKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE9iaiA9IHtcbiAgICAgICAgICAgICAgICAncGFyZW50SWQnOiBwYXJlbnRUckVsZW1lbnQucHJldigndHIuYXBwLWRhdGFncmlkLXJvdycpPy5hdHRyKCdkYXRhLXJvdy1pZCcpLFxuICAgICAgICAgICAgICAgICdwYXJlbnRQYWdlJzogcGFyZW50VHJFbGVtZW50LmNsb3Nlc3QoJ2Rpdi5hcHAtZ3JpZC5hcHAtcGFuZWwucGFuZWwnKT8uYXR0cignY3VycmVudHBhZ2UnKSB8fCAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50T2JqO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd1NlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIHJvd0RhdGEuJGluZGV4ICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0YWJsZSBoYXMgYSBwYXJlbnQgdGFibGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50T2JqID0gdGhpcy5ncmlkT3B0aW9ucy5nZXRQYXJlbnRUYWJsZURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gcGFyZW50T2JqLnBhcmVudElkID8ge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMSwgcGFyZW50Um93SW5kZXg6IHBhcmVudE9iai5wYXJlbnRJZCwgcGFyZW50Q3VycmVudFBhZ2U6IHBhcmVudE9iai5wYXJlbnRQYWdlfToge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMX07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb21lKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgb2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW19KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLCB7J3NlbGVjdGVkSXRlbSc6IFtvYmpdfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93c2VsZWN0JywgeyRkYXRhOiByb3dEYXRhLCAkZXZlbnQ6IGUsIHJvdzogcm93RGF0YX0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGFzc2lnbnMgdGhlIGl0ZW1zIG9uIGNhcHR1cmUgcGhhc2Ugb2YgdGhlIGNsaWNrIGhhbmRsZXIuXG4gICAgICAgIGFzc2lnblNlbGVjdGVkSXRlbXM6IChyb3csIGUsIHJvd0luZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBpbiBjYXNlIG9mIHNpbmdsZSBzZWxlY3QsIHVwZGF0ZSB0aGUgaXRlbXMgd2l0aCBvdXQgY2hhbmdpbmcgdGhlIHJlZmVyZW5jZS5cbiAgICAgICAgICAgICAgICAgKiBmb3IgbXVsdGkgc2VsZWN0LCBrZWVwIG9sZCBzZWxlY3RlZCBpdGVtcyBpbiB0YWN0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9GaXggZm9yIFtXTVMtMjUxMTBdOiBBZGQgcm93IHRvIGl0ZW1zIGxpc3Qgb25seSBpZiB0aGUgcm93IGlzIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXgodGhpcy5pdGVtcywgcm93KSA9PT0gLTEgJiYgKHJvd0luZm8/Ll9zZWxlY3RlZCA9PT0gdW5kZWZpbmVkIHx8IHJvd0luZm8/Ll9zZWxlY3RlZCA9PSB0cnVlIHx8ICh0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCAmJiByb3dJbmZvPy5yb3dJZCA9PSAwICYmICF0aGlzLnNob3dGaXJzdFJvdykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3dJbmZvPy5yb3dJZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Rmlyc3RSb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEYmxDbGljazogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGJsY2xpY2snLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVzZWxlY3Q6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHB1bGxBbGxXaXRoKHRoaXMuaXRlbXMsIFtyb3ddLCBpc0VxdWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2Rlc2VsZWN0JywgeyRkYXRhOiByb3csICRldmVudDogZSwgcm93fSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50T2JqID0gdGhpcy5ncmlkT3B0aW9ucy5nZXRQYXJlbnRUYWJsZURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHBhcmVudE9iai5wYXJlbnRJZCA/IHtwYWdlOiB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UsIGluZGV4OiByb3dEYXRhLiRpbmRleCAtIDEsIHBhcmVudFJvd0luZGV4OiBwYXJlbnRPYmoucGFyZW50SWQsIHBhcmVudEN1cnJlbnRQYWdlOiBwYXJlbnRPYmoucGFyZW50UGFnZX06IHtwYWdlOiB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UsIGluZGV4OiByb3dEYXRhLiRpbmRleCAtIDF9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKHNlbGVjdGVkSXRlbSwgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcywgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsT25Sb3dEZXNlbGVjdEV2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkZXNlbGVjdCcsIHskZGF0YTogcm93LCAkZXZlbnQ6IGUsIHJvd30pO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsT25Sb3dDbGlja0V2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBXTVMtMTg3NzQ6IElmIHdlIGludm9rZSBuYXZpZ2F0aW9uIGFjdGlvbiB2YXJpYWJsZSBvbiByb3djbGljayBjYWxsYmFjaywgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmluZyBvdXRzaWRlIGFuZ3VsYXIgem9uZSBzbyBhZGRpbmcgbmdab25lLnJ1blxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDYWxsIHJvdyBjbGljayBvbmx5IGlmIGNsaWNrIGlzIHRyaWdnZXJlZCBieSB1c2VyXG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5oYXNPd25Qcm9wZXJ0eSgnb3JpZ2luYWxFdmVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93Y2xpY2snLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgICAgICBvbkNvbHVtblNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbnNlbGVjdCcsIHskZGF0YTogY29sLCAkZXZlbnQ6IGV9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Db2x1bW5EZXNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbmRlc2VsZWN0JywgeyRkYXRhOiBjb2wsICRldmVudDogZX0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkhlYWRlckNsaWNrOiAoY29sLCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBpZiBvblNvcnQgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBpbnZva2UgaXQgd2hlbiB0aGUgY29sdW1uIGhlYWRlciBpcyBjbGlja2VkXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hlYWRlcmNsaWNrJywgeyRldmVudDogZSwgJGRhdGE6IGNvbCwgY29sdW1uOiBjb2x9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0QWxsUm93czogKGNoZWNrZWQsZSk9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmhlYWRlcnNlbGVjdGFsbCAmJiB0aGlzLm11bHRpc2VsZWN0KXtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhU2l6ZSA9IHRoaXMuZGF0YU5hdmlnYXRvci5kYXRhU2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRGljdCA9IHsgc2VsZWN0ZWRJdGVtOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKGRhdGFTaXplIC8gcGFnZVNpemUpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSB0b3RhbFBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VMZW4gPSBNYXRoLm1pbihwYWdlU2l6ZSwgZGF0YVNpemUgLSAocGFnZSAtIDEpICogcGFnZVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERpY3Quc2VsZWN0ZWRJdGVtLnB1c2goeyBwYWdlLCBpbmRleDogaSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuX19mdWxsRGF0YV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLm5leHQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgc2VsZWN0ZWREaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2Z1bGxEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd3NlbGVjdCcsIHskZGF0YTogZ2V0Q2xvbmVkT2JqZWN0KHJvdyksICRldmVudDogZSwgcm93OiBnZXRDbG9uZWRPYmplY3Qocm93KX0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID10aGlzLnNlbGVjdGVkSXRlbXM9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeyBzZWxlY3RlZEl0ZW06IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX19mdWxsRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkZXNlbGVjdCcsIHsgJGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVsZXRlOiAocm93LCBjYW5jZWxSb3dEZWxldGVDYWxsYmFjaywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgJ2NhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrJzogY2FuY2VsUm93RGVsZXRlQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICdldnQnOiBlLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbEJhY2snOiBjYWxsQmFja1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0luc2VydDogKHJvdywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0UmVjb3JkKGV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgZXZlbnQ6IGUsICdjYWxsQmFjayc6IGNhbGxCYWNrfSkpO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVSb3dVcGRhdGU6IChyb3csIGV2ZW50TmFtZT8pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saXZlVGFibGVQYXJlbnQudXBkYXRlUm93KHJvdywgZXZlbnROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJldkRhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXJSb3dVcGRhdGU6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc01vZGVsVmFySW5saW5lT3JRdWljayA9IHRoaXMuaXNNb2RlbFZhcmlhYmxlSW5saW5lT3JRdWlja0VkaXQoKTtcbiAgICAgICAgICAgIGlmIChpc01vZGVsVmFySW5saW5lT3JRdWljaykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5saW5lRWRpdFNhdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIElubGluZSBzYXZlIHRyaWdnZXJzIG5hdmlnYXRlUGFnZSAvIGRhdGFzZXQgZW1pdCBhc3luY2hyb25vdXNseTsgYVxuICAgICAgICAgICAgICAgIC8vIG1pY3JvdGFzayB0aW1lb3V0IGNsZWFyZWQgdGhlIGZsYWcgYmVmb3JlIGdyaWREYXRhIHJhbiDihpIgZnVsbCByZXJlbmRlci5cbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbFZhckVkaXRTb2Z0UmVmcmVzaEFjdGl2ZVVudGlsID0gRGF0ZS5ub3coKSArIDU1MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG11dGVXYXRjaGVycygpO1xuICAgICAgICAgICAgY29uc3QgdiA9IGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5yb3dpbmRleCAhPSBudWxsO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSZWNvcmQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7cm93LCBwcmV2RGF0YTogdiA/IG9wdGlvbnMucm93aW5kZXggOiB0aGlzLnByZXZEYXRhLCBldmVudDogZSwgY2FsbEJhY2t9KSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB1bk11dGVXYXRjaGVycygpO1xuICAgICAgICAgICAgICAgIGlmIChpc01vZGVsVmFySW5saW5lT3JRdWljaykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5saW5lRWRpdFNhdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsVmFyRWRpdFNvZnRSZWZyZXNoQWN0aXZlVW50aWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9LCA1MjApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dVcGRhdGU6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd3VwZGF0ZScsIHskZXZlbnQ6IGUsICRkYXRhOiByb3csIHJvdywgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0luc2VydDogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93aW5zZXJ0JywgeyRldmVudDogZSwgJGRhdGE6IHJvdywgcm93LCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93RGVsZXRlOiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93ZGVsZXRlJywgeyRldmVudDogZSwgcm93OiByb3dEYXRhLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRm9ybVJlbmRlcjogKCRyb3csIGUsIG9wZXJhdGlvbiwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXQgPSBhbHdheXNOZXdSb3cgPyAnaW5saW5lSW5zdGFuY2VOZXcnIDogJ2lubGluZUluc3RhbmNlJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldHMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xbd2lkZ2V0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0c1tjb2wuZmllbGRdID0gY29sW3dpZGdldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgZm9ybXdpZGdldHMgdG8gdGhlIGNvbnRleHQgZm9yIGlubGluZWluc3RhbmNlIHdpZGdldCB3aGVuIGZpZWxkRGVmcyB3ZXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sW3dpZGdldF0uY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFt3aWRnZXRdLmNvbnRleHQuZm9ybVdpZGdldHMgPSB0aGlzLmZvcm1XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2wsIHdpZGdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Zvcm1yZW5kZXInLCB7JGV2ZW50OiBlLCBmb3JtV2lkZ2V0czogdGhpcy5mb3JtV2lkZ2V0cywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZUZvcm1SZW5kZXI6IChyb3csIGUsIG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZm9ybXJlbmRlcicsIHskZXZlbnQ6IGUsIHJvdywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyUm93TmdDbGFzc1dhdGNoZXI6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd25nY2xhc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X3Jvd05nQ2xhc3NfJHtpbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgcm93bmdjbGFzcyBhdHRyIGlzIHByZXNlbnQgZm9yIHRhYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCh0aGlzLnJvd25nY2xhc3MsIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlSb3dOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIGluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckNvbE5nQ2xhc3NXYXRjaGVyOiAocm93RGF0YSwgY29sRGVmLCByb3dJbmRleCwgY29sSW5kZXgsIHN1bW1hcnlSb3cpID0+IHtcbiAgICAgICAgICAgIGlmICghY29sRGVmWydjb2wtbmctY2xhc3MnXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gc3VtbWFyeVJvdyA/IGAke3RoaXMud2lkZ2V0SWR9X3N1bW1hcnlSb3dfY29sTmdDbGFzc18ke3Jvd0luZGV4fV8ke2NvbEluZGV4fWA6IGAke3RoaXMud2lkZ2V0SWR9X2NvbE5nQ2xhc3NfJHtyb3dJbmRleH1fJHtjb2xJbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgY29sLW5nLWNsYXNzIGF0dHIgaXMgcHJlc2VudCBmb3IgdGFibGVcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoJHdhdGNoKGNvbERlZlsnY29sLW5nLWNsYXNzJ10sIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlDb2xOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJDb2xsYXBzZU9yRXhwYW5kVGl0bGVXYXRjaDooZXhwciwgcm93RGF0YSwgaW5kZXgsdGl0bGVOYW1lLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9XyR7dGl0bGVOYW1lfV8ke2luZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2goZXhwciwgdGhpcy52aWV3UGFyZW50LCB7cm93fSwgKG52LG92KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYCR7dGl0bGVOYW1lfS5iaW5kYCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUodGl0bGVOYW1lLCBudik7XG4gICAgICAgICAgICAgICAgaWYodGl0bGVOYW1lID09PSAnZXhwYW5kdGl0bGUnKSBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCBudik7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDdXN0b21FeHByZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbCA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVDdXN0b21FeHByZXNzaW9uQ29udGV4dHM6IChwcmVwYXJlZERhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb3VudCA9IHRoaXMuY3VzdG9tRXhwclZpZXdSZWYubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmdldChpKSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIXZpZXdSZWYgfHwgIXZpZXdSZWYuY29udGV4dCB8fCAhdmlld1JlZi5jb250ZXh0LnJvdyB8fCB2aWV3UmVmLmNvbnRleHQucm93LiRpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1JvdyA9IHZpZXdSZWYuY29udGV4dC5yb3c7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBleGlzdGluZ1Jvdy4kaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFSb3cgPSBwcmVwYXJlZERhdGFbcm93SW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YVJvdykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YVJvdykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnJCRpbmRleCcgJiYga2V5ICE9PSAnJCRwaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUm93W2tleV0gPSBkYXRhUm93W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1Jvdy4kaXNGaXJzdCA9IGV4aXN0aW5nUm93LiRpbmRleCA9PT0gMTtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1Jvdy4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IGV4aXN0aW5nUm93LiRpbmRleDtcbiAgICAgICAgICAgICAgICB2aWV3UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbGVhclJvd0RldGFpbEV4cHJlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93RGV0YWlsVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGludmFsaWRhdGVSb3dEZXRhaWxDYWNoZTogKHByZXBhcmVkRGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3Rpbmcgcm93IGRldGFpbCB2aWV3IGNvbnRleHRzIGluLXBsYWNlIHNvIGN1cnJlbnRseVxuICAgICAgICAgICAgLy8gZXhwYW5kZWQgcGFydGlhbHMgcGljayB1cCB0aGUgbmV3IHJvdyBkYXRhIHZpYSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAgICAgICAgY29uc3Qgdmlld0NvdW50ID0gdGhpcy5yb3dEZXRhaWxWaWV3UmVmLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlld0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3UmVmID0gdGhpcy5yb3dEZXRhaWxWaWV3UmVmLmdldChpKSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIXZpZXdSZWYgfHwgIXZpZXdSZWYuY29udGV4dCB8fCAhdmlld1JlZi5jb250ZXh0LnJvdykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSb3cgPSB2aWV3UmVmLmNvbnRleHQucm93O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gZXhpc3RpbmdSb3cuJGluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm93ID0gcHJlcGFyZWREYXRhW3Jvd0luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGFSb3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJyQkaW5kZXgnICYmIGtleSAhPT0gJyQkcGsnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1Jvd1trZXldID0gZGF0YVJvd1trZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmlld1JlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVmcmVzaFNlbGVjdGVkSXRlbXM6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93cy5mb3JFYWNoKHJvdyA9PiB0aGlzLml0ZW1zLnB1c2gocm93KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dChzZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUN1c3RvbUV4cHJlc3Npb25zOiAocm93RGF0YSwgaW5kZXgsIHN1bW1hcnlSb3c/KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVUZW1wbGF0ZSA9ICh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0bXBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29sRGVmID0ge307XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBjb2xEZWZcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzVG9Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUV4cHJWaWV3ID0gdGhpcy5jdXN0b21FeHByVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBjdXN0b21FeHByVmlldy5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKGNvbERlZiwgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeVJvdykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkU3VtbWFyeVRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZVRlbXBsYXRlKGNvbC5jdXN0b21FeHByVG1wbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgY3VzdG9tIGV4cHJlc3Npb25cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclRtcGwuZm9yRWFjaChjb21waWxlVGVtcGxhdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93RXhwYW5zaW9uQ2VsbDogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbFtpbmRleF0gPSB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtyb3d9KS5yb290Tm9kZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Um93RXhwYW5zaW9uQWN0aW9uOiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dEZXRhaWxWaWV3OiAoJGV2ZW50LCByb3dEYXRhLCByb3dJZCwgJHRhcmdldCwgJG92ZXJsYXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RlZiA9IGdldENsb25lZE9iamVjdCh0aGlzLnJvd0RlZik7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3dleHBhbmQnLCB7JGV2ZW50LCAkZGF0YTogcm93RGVmLCByb3d9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJvd0RlZi5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXhwYW5kIHRoZSByb3cgZGV0YWlsXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgLy8gUm93IGlzIGFscmVhZHkgcmVuZGVyZWQuIFJldHVybiBoZXJlXG4gICAgICAgICAgICBpZiAodGhpcy5yb3dEZWZNYXBbcm93SWRdICYmIHRoaXMucm93RGVmTWFwW3Jvd0lkXS5jb250ZW50ID09PSByb3dEZWYuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZXhwYW5kJywgeyRldmVudCwgcm93LCAkZGF0YTogdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXBbcm93SWRdID0gcm93RGVmO1xuICAgICAgICAgICAgJHRhcmdldC5lbXB0eSgpO1xuICAgICAgICAgICAgJHRhcmdldC5oaWRlKCk7XG4gICAgICAgICAgICAkb3ZlcmxheS5zaG93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIHJvd0RlZixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9hZDogKHdpZGdldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG92ZXJsYXkuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXSA9IHdpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2V4cGFuZCcsIHskZXZlbnQsIHJvdywgJGRhdGE6IHdpZGdldH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfX07XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMucm93RGV0YWlsVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5yb3dFeHBhbnNpb25UbXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAkdGFyZ2V0WzBdLmFwcGVuZENoaWxkKHJvb3ROb2RlKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dDb2xsYXBzZTogKCRldmVudCwgcm93LCByb3dJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93Y29sbGFwc2UnLCB7JGV2ZW50LCByb3csICRkYXRhOiB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF19KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dDb2xsYXBzZTogKCRldmVudCwgcm93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2NvbGxhcHNlJywgeyRldmVudCwgcm93fSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEN1c3RvbUV4cHJlc3Npb246IChmaWVsZE5hbWUsIGluZGV4LCBzdW1tYXJ5Um93PykgPT4ge1xuICAgICAgICAgICAgbGV0IGN1c3RvbUV4cHJlc3Npb247XG4gICAgICAgICAgICBpZiAoIXN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21FeHByZXNzaW9uID0gdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb24gPSB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tRXhwcmVzc2lvbiB8fCAnJztcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJSb3dBY3Rpb25zOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGwgPSB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dBY3Rpb25zOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0ucHVzaCguLi50aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7cm93fSkucm9vdE5vZGVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRSb3dBY3Rpb246IChpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUlubGluZUVkaXRSb3c6IChyb3dEYXRhLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgaW5saW5lIHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0TmV3VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWUgKyAnX25ldyddIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFBlbmRpbmdTcGlubmVyU3RhdHVzTmV3OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnNob3dQZW5kaW5nU3Bpbm5lck5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IHJvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBnZXRDb250cm9sOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGVuZGluZ1NwaW5uZXJTdGF0dXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5zaG93UGVuZGluZ1NwaW5uZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIGNvbnRleHQpLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldElubGluZUVkaXRXaWRnZXQ6IChmaWVsZE5hbWUsIHZhbHVlLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldEZpZWxkVmFsdWUoZmllbGROYW1lICsgJ19uZXcnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRGaWVsZFZhbHVlKGZpZWxkTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lQ29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICB9LFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiAoZmllbGROYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRGaWVsZFZhbHVlOiBmaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbCAmJiBjb250cm9sLnZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGFkZCBsb2FkIG1vcmUgYnV0dG9uIHRvIHRhYmxlXG4gICAgICAgIGFkZExvYWRNb3JlQnRuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FkZExvYWRNb3JlQnRuJywgdGhpcy5vbmRlbWFuZG1lc3NhZ2UsIHRoaXMubG9hZGluZ2RhdGFtc2csICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMubW9kZSA9PT0gJ3ZpZXdsZXNzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGJpbmQgc2Nyb2xsIGV2ZW50XG4gICAgICAgIGJpbmRTY3JvbGxFdnQ6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ncmlkRGF0YSAmJiB0aGlzLl9ncmlkRGF0YS5sZW5ndGggJiYgdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAvLyBzbW9vdGhzY3JvbGwgZXZlbnRzIHdpbGwgYmUgYmluZGVkLlxuICAgICAgICAgICAgICAgIC8vIEFkZGVkIHRpbWVvdXQgYXMgdGhlIHRhYmxlIGh0bWwgaXMgcmVuZGVyZWQgYXQgcnVudGltZVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmJpbmRTY3JvbGxFdnQodGhpcywgJ3Rib2R5JywgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVGaWx0ZXJSb3c6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBjb21waWxlZCBmaWx0ZXIgdGVtcGxhdGVcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmZpbHRlclZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IHRoaXMub25Sb3dGaWx0ZXJDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNYXRjaE1vZGVzLmluZGV4T2YodGhpcy5yb3dGaWx0ZXJbZmllbGROYW1lXSAmJiB0aGlzLnJvd0ZpbHRlcltmaWVsZE5hbWVdLm1hdGNoTW9kZSkgPiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyldID0gcm9vdE5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RmlsdGVyV2lkZ2V0OiAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICAvLyBNb3ZlIHRoZSBnZW5lcmF0ZWQgZmlsdGVyIHRlbXBsYXRlIHRvIHRoZSBmaWx0ZXIgcm93XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpZWxkTmFtZV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldEdyaWRFZGl0TW9kZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JpZEVkaXRNb2RlID0gdmFsO1xuICAgICAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkU3RhdGU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdmFsID09PSAnbG9hZGluZyc7XG4gICAgICAgIH0sXG4gICAgICAgIC8qXG4gICAgICAgICAgICBzZXQgYWN0aW9uUm93SW5kZXggYW5kIGFjdGlvblJvd1BhZ2UgdmFsdWVzXG4gICAgICAgICAgICBhY3Rpb25Sb3dJbmRleCB3aWxsIGhhdmUgdGhlIHJvdyBpbmRleCBpbiB0aGUgZGF0YXNldCBvbiB3aGljaCBlZGl0L2RlbGV0ZSBvcGVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkXG4gICAgICAgICAgICBhY3Rpb25Sb3dQYWdlIHdpbGwgaGF2ZSBwYWdlIG51bWJlciBpbiB3aGljaCB0aGUgYWN0aW9uIHJvdyBpbmRleCBpcyBwcmVzZW50XG4gICAgICAgICAqL1xuICAgICAgICBzZXRBY3Rpb25Sb3dJbmRleDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHBhcnNlSW50KHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93SW5kZXgnLCB0aGlzLmFjdGlvblJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMuYWN0aW9uUm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IE1hdGguZmxvb3IodGhpcy5hY3Rpb25Sb3dJbmRleCAvIHRoaXMucGFnZXNpemUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93UGFnZScsIHRoaXMuYWN0aW9uUm93UGFnZSB8fCB0aGlzLmdyaWRPcHRpb25zLmFjdGlvblJvd1BhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJBY3Rpb25Sb3dJbmRleDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUm93RGVsZXRlZCAmJiAodGhpcy5pbmZTY3JvbGwgfHwgdGhpcy5vbkRlbWFuZExvYWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFjdGlvblJvd1ZhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9DaGFuZ2VzRGV0ZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVzc2FnZSh0cnVlLCAnaW5mbycsIHRoaXMuYXBwTG9jYWxlLk1FU1NBR0VfTk9fQ0hBTkdFUywgJycpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byByZWRyYXcgdGhlIHdpZGdldHMgb24gcmVzaXplIG9mIGNvbHVtbnNcbiAgICAgICAgcmVkcmF3V2lkZ2V0czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuaW5saW5lSW5zdGFuY2UgJiYgY29sLmlubGluZUluc3RhbmNlLnJlZHJhdyk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5pbmxpbmVJbnN0YW5jZU5ldyAmJiBjb2wuaW5saW5lSW5zdGFuY2VOZXcucmVkcmF3KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmZpbHRlckluc3RhbmNlICYmIGNvbC5maWx0ZXJJbnN0YW5jZS5yZWRyYXcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNlYXJjaEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgc29ydEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgdGltZW91dENhbGw6IChmbiwgZGVsYXkpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZm4sIGRlbGF5KTtcbiAgICAgICAgfSxcbiAgICAgICAgcnVuSW5OZ1pvbmU6IGZuID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bihmbik7XG4gICAgICAgIH0sXG4gICAgICAgIHNhZmVBcHBseTogKCkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRUb3VjaGVkOiAobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJGb3JtOiB0aGlzLmNsZWFyRm9ybS5iaW5kKHRoaXMpLFxuICAgICAgICBjYWxsTG9hZElubGluZVdpZGdldERhdGE6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvbC5pc0RhdGFTZXRCb3VuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5sb2FkSW5saW5lV2lkZ2V0RGF0YSAmJiBjb2wubG9hZElubGluZVdpZGdldERhdGEuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gYXBwbHkgdmFsaWRhdG9ycyB0byBJbmxpbmUgZm9ybSBjb250cm9sc1xuICAgICAgICBhcHBseVZhbGlkYXRpb25zOiAoY29sLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmFwcGx5TmV3Um93VmFsaWRhdGlvbnMgJiYgY29sLmFwcGx5TmV3Um93VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5hcHBseVZhbGlkYXRpb25zICYmIGNvbC5hcHBseVZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlbW92ZSB2YWxpZGF0b3JzIGFuZCBzZXQgZm9ybSBzdGF0ZSB0byB1bnRvdWNoZWQgZm9yIGlubGluZSBmb3JtIGNvbnRyb2xcbiAgICAgICAgcmVtb3ZlVmFsaWRhdGlvbnM6IChhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2wucmVhZG9ubHkgJiYgY29sLmJpbmRpbmcgIT09ICdyb3dPcGVyYXRpb25zJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLnJlbW92ZU5ld1Jvd1ZhbGlkYXRpb25zICYmIGNvbC5yZW1vdmVOZXdSb3dWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5yZW1vdmVWYWxpZGF0aW9ucyAmJiBjb2wucmVtb3ZlVmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiB3bS5WYXJpYWJsZSArIGlubGluZSBvciBxdWlja2VkaXQgKGVkaXRtb2RlIGlzIHN0cmluZyBmcm9tIG1hcmt1cDsgbm9ybWFsaXplIGNhc2UpLiAqL1xuICAgIHByaXZhdGUgaXNNb2RlbFZhcmlhYmxlSW5saW5lT3JRdWlja0VkaXQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSAhPT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVtID0gU3RyaW5nKHRoaXMuZWRpdG1vZGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBlbSA9PT0gJ3F1aWNrZWRpdCcgfHwgZW0gPT09ICdpbmxpbmUnO1xuICAgIH1cblxuICAgIC8qKiBUcnVlIHdoaWxlIGFuIGlubGluZS9xdWlja2VkaXQgcm93IHNhdmUgaXMgdXBkYXRpbmcgdGhlIGdyaWQgKGluY2wuIGRlbGF5ZWQgbmF2aWdhdG9yIGVtaXQpLiAqL1xuICAgIHByaXZhdGUgc2hvdWxkU29mdFJlZnJlc2hBZnRlck1vZGVsVmFyUm93U2F2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb2RlbFZhcmlhYmxlSW5saW5lT3JRdWlja0VkaXQoKVxuICAgICAgICAgICAgJiYgKHRoaXMuX2lzSW5saW5lRWRpdFNhdmUgfHwgdGhpcy5fbW9kZWxWYXJFZGl0U29mdFJlZnJlc2hBY3RpdmVVbnRpbCA+IERhdGUubm93KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dyaWREYXRhO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbXNFeGlzdCA9IGZhbHNlO1xuICAgIHNldCBncmlkRGF0YShuZXdWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI0MDEyXTogaGlkZSBubyBkYXRhZm91bmQgbXNnIHdoZW4gdmFyaWFibGVJbmZsaWdodCBpcyB0cnVlIGFuZCBkYXRhc2V0IGlzIGVtcHR5XG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlSW5mbGlnaHQgJiYgaXNFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI0MTA4XTogQ2hhbmdlIHRoZSBzdGF0dXMgdG8gcmVhZHkgb3Igbm9kYXRhIGZvdW5kIHdoZW4gdmFyaWFibGVJbmZsaWdodCBpcyBmYWxzZShhZnRlciBnZXR0aW5nIHRoZSBkYXRhKVxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgKG5ld1ZhbHVlLmxlbmd0aCkgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAncmVhZHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgX2dyaWREYXRhIGZpZWxkIHdpdGggdGhlIG5leHQgc2V0IG9mIGl0ZW1zIGFuZCBtb2RpZnkgdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgW3RoaXMuX2dyaWREYXRhLCB0aGlzLmN1cnJlbnRQYWdlXSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlRmllbGRzT25QYWdpbmF0aW9uKHRoaXMsIG5ld1ZhbHVlKTtcblxuICAgICAgICAgICAgLy8gV2hlbiBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gcHJldmlvdXMgcGFnZSwgdXBkYXRlIHRoZSBfZ3JpZERhdGEgZmllbGQgd2l0aCB0aGUgbW9kaWZpZWQgcm93IGRhdGFcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgPT09IHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5FRElUKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBmbG9vcih0aGlzLmFjdGlvblJvd0luZGV4ICUgdGhpcy5wYWdlc2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JpZERhdGEuc3BsaWNlKHRoaXMuYWN0aW9uUm93SW5kZXgsIDEgLCBuZXdWYWx1ZVtyb3dJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNMYXN0UGFnZScsICEhKHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG9uIGRlbWFuZCBwYWdpbmF0aW9uLCBjcmVhdGUgdGhlIGxvYWQgbW9yZSBidXR0b24gb25seSBvbmNlIGFuZCBzaG93IHRoZSBidXR0b24gdW50aWwgbmV4dCBwYWdlIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50LmZpbmQoJy5vbi1kZW1hbmQtZGF0YWdyaWQnKS5sZW5ndGggJiYgIXRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ICYmIHRoaXMub25EZW1hbmRMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hZGRMb2FkTW9yZUJ0bigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoKSAmJiAodGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgfHwgIXRoaXMuaXNEYXRhTG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBuZXh0IHBhZ2UgaXMgZGlzYWJsZWQgb3Igd2hlbiB0aGUgZGF0YSBpcyBub3QgbG9hZGluZyByZW1vdmUgdGhlIGxvYWRpbmcvbG9hZCBtb3JlIGJ1dHRvbiBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdoaWRlTG9hZGluZ0luZGljYXRvcicsIHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ncmlkRGF0YSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gMDtcbiAgICAgICAgbGV0IGdyaWRPcHRpb25zO1xuXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX2dyaWREYXRhKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYmluZFNjcm9sbEV2dCgpO1xuXG4gICAgICAgICAgICAvKlNldHRpbmcgdGhlIHNlcmlhbCBubydzIG9ubHkgd2hlbiBzaG93IG5hdmlnYXRpb24gaXMgZW5hYmxlZCBhbmQgZGF0YSBuYXZpZ2F0b3IgaXMgY29tcGlsZWRcbiAgICAgICAgICAgICBhbmQgaXRzIGN1cnJlbnQgcGFnZSBpcyBzZXQgcHJvcGVybHkqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0Um93SW5kZXggPSAoKHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSAtIDEpICogKHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzIHx8IDEpKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc3RhcnRSb3dJbmRleCcsIHN0YXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogSWYgY29sRGVmcyBhcmUgYXZhaWxhYmxlLCBidXQgbm90IGFscmVhZHkgc2V0IG9uIHRoZSBkYXRhZ3JpZCwgdGhlbiBzZXQgdGhlbS5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBoYXBwZW4gd2hpbGUgc3dpdGNoaW5nIGZyb20gbWFya3VwIHRvIGRlc2lnbiB0YWIuICovXG4gICAgICAgICAgICBncmlkT3B0aW9ucyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRPcHRpb25zJyk7XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGggJiYgdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignY29sRGVmcycsIGdldENsb25lZE9iamVjdCh0aGlzLmZpZWxkRGVmcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgZGF0YSBhbmQgY29sRGVmcyBhcmUgcHJlc2VudCwgY2FsbCBvbiBiZWZvcmUgZGF0YSByZW5kZXIgZXZlbnRcbiAgICAgICAgICAgIC8vIE5vdGU6IEVycm9ycyBpbiBiZWZvcmVkYXRhcmVuZGVyIHNob3VsZCBub3QgcHJldmVudCB0YWJsZSByZW5kZXJpbmdcbiAgICAgICAgICAgIGlmICghdGhpcy5pc2R5bmFtaWN0YWJsZSAmJiAhaXNFbXB0eShuZXdWYWx1ZSkgJiYgZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWRhdGFyZW5kZXInLCB7JGRhdGE6IHRoaXMuX2dyaWREYXRhLCAkY29sdW1uczogdGhpcy5jb2x1bW5zLCBkYXRhOiB0aGlzLl9ncmlkRGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9nIGVycm9yIGJ1dCBjb250aW51ZSB3aXRoIHJlbmRlcmluZyAtIGJlZm9yZWRhdGFyZW5kZXIgZXJyb3JzIHNob3VsZCBub3QgYmxvY2sgdGFibGUgcmVuZGVyaW5nXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgaW4gYmVmb3JlZGF0YXJlbmRlciBldmVudCBjYWxsYmFjaywgY29udGludWluZyB3aXRoIHRhYmxlIHJlbmRlcmluZzonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkU29mdFJlZnJlc2hBZnRlck1vZGVsVmFyUm93U2F2ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVkRGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLl9ncmlkRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5kYXRhID0gY2xvbmVkRGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc29mdFJlZnJlc2hEYXRhJywgY2xvbmVkRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2RhdGEnLCBnZXRDbG9uZWRPYmplY3QodGhpcy5fZ3JpZERhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBncmlkRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWREYXRhIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZGl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5KHRoaXMuaXRlbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLml0ZW1zWzBdKTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRpdGVtKHZhbCkge1xuICAgICAgICAvLyBTZWxlY3QgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJhc2VkIG9uIHRoZSBuZXcgc2VsZWN0ZWQgaXRlbXMgcGFzc2VkXG4gICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB2YWwpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXByZXNzJywgWyckZXZlbnQnXSkgb25LZXlQcmVzcyAoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCRldmVudC53aGljaCA9PT0gMTMpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZW50ZXJrZXlwcmVzcycsIHskZXZlbnQsICRkYXRhOiB0aGlzLmdyaWREYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGluajogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgICAgIHByaXZhdGUgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICAgICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlld3BvcnQ6IFZpZXdwb3J0LFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50TGlzdDogTGlzdENvbXBvbmVudCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHVibGljIGJpbmRkYXRhc2V0LFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc291cmNlLmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzb3VyY2UsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3JlYWRvbmx5Z3JpZCcpIHB1YmxpYyByZWFkb25seWdyaWQsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgdHJ1c3RBc1BpcGU6IFRydXN0QXNQaXBlLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLm5nZm9ybSA9IGZiLmdyb3VwKHt9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQodGhpcy5jb250ZXh0KTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzVG9SZW1vdmUgPSBbXG4gICAgICAgICAgICAvLyBVcGRhdGVzIHBhZ2luYXRpb24sIGZpbHRlciwgc29ydCBldGMgb3B0aW9ucyBmb3Igc2VydmljZSBhbmQgY3J1ZCB2YXJpYWJsZXNcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnY2hlY2stc3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucycsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlTmFtZSA9IGdldCh0aGlzLmRhdGFzb3VyY2UsICduYW1lJyk7XG4gICAgICAgICAgICAgICAgLy8gaW4gUHJlZmFicywgdGhpcy5kYXRhc291cmNlIGlzIG5vdCByZXNvbHZlZCBhdCB0aGUgdGltZSBvZiB2YXJpYWJsZSBpbnZvY2F0aW9uLCBzbyBhZGRpdGlvbmFsIGNoZWNrIGlzIHJlcXVpcmVkLlxuICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBleHRyYWN0RGF0YVNvdXJjZU5hbWUodGhpcy5iaW5kZGF0YXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZXQob3B0aW9ucywgJ3ZhcmlhYmxlLm5hbWUnKSAhPT0gZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyBTaG93IGxvYWRpbmcgc3RhdHVzIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSBsaWZlIGN5Y2xlXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChvcHRpb25zLnZhcmlhYmxlLCB0aGlzLmRhdGFzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEZWZpbmVkKHRoaXMudmFyaWFibGVJbmZsaWdodCkgPyB0aGlzLmRlYm91bmNlZEhhbmRsZUxvYWRpbmcob3B0aW9ucykgOiB0aGlzLmhhbmRsZUxvYWRpbmcob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnc2V0dXAtY3VkLWxpc3RlbmVyJywgcGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgIT09IHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXNEZXBlbmRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlJFxuICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLnRyaWdnZXJXTUV2ZW50LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICBsaXN0ZW5lcnNUb1JlbW92ZS5mb3JFYWNoKCBsID0+IHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIobCkgKTtcblxuICAgICAgICB0aGlzLmRlbGV0ZW9rdGV4dCA9IHRoaXMuYXBwTG9jYWxlLkxBQkVMX09LO1xuICAgICAgICB0aGlzLmRlbGV0ZWNhbmNlbHRleHQgPSB0aGlzLmFwcExvY2FsZS5MQUJFTF9DQU5DRUw7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb25maWcgPSB0aGlzLmhlYWRlckNvbmZpZy5maWx0ZXIodGhpcy5maWx0ZXJFbXB0eVZhbHVlcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgcmVtb3ZlPGFueT4odGhpcy5maWVsZERlZnMsIGYgPT4gZiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcnVuTW9kZUluaXRpYWxQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgc2hvd3Jvd2luZGV4OiAnc2hvd1Jvd0luZGV4JyxcbiAgICAgICAgICAgIG11bHRpc2VsZWN0OiAnbXVsdGlzZWxlY3QnLFxuICAgICAgICAgICAgcmFkaW9zZWxlY3Q6ICdzaG93UmFkaW9Db2x1bW4nLFxuICAgICAgICAgICAgZmlsdGVybnVsbHJlY29yZHM6ICdmaWx0ZXJOdWxsUmVjb3JkcycsXG4gICAgICAgICAgICBlbmFibGVzb3J0OiAnZW5hYmxlU29ydCcsXG4gICAgICAgICAgICBzaG93aGVhZGVyOiAnc2hvd0hlYWRlcicsXG4gICAgICAgICAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb246ICdlbmFibGVDb2x1bW5TZWxlY3Rpb24nLFxuICAgICAgICAgICAgc2hvd25ld3JvdzogJ3Nob3dOZXdSb3cnLFxuICAgICAgICAgICAgZ3JpZGZpcnN0cm93c2VsZWN0OiAnc2VsZWN0Rmlyc3RSb3cnLFxuICAgICAgICAgICAgaXNyb3dzZWxlY3RhYmxlOiAnaXNyb3dzZWxlY3RhYmxlJyxcbiAgICAgICAgICAgIGFsbG93cGFnZXNpemVjaGFuZ2U6ICdhbGxvd3BhZ2VzaXplY2hhbmdlJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWFkb25seWdyaWQgfHwgIXRoaXMuZWRpdG1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRvbmx5Z3JpZCA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhcnRPZkxpdmVHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSB0aGlzLmlzUGFydE9mTGl2ZUdyaWQuZm9ybWxheW91dCA9PT0gJ2lubGluZScgPyBFRElUX01PREUuRk9STSA6IEVESVRfTU9ERS5ESUFMT0c7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9IHRoaXMucmVhZG9ubHlncmlkID8gRURJVF9NT0RFLklOTElORSA6ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sRGVmcyA9IHRoaXMuZnVsbEZpZWxkRGVmcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dBY3Rpb25zID0gdGhpcy5yb3dBY3Rpb25zO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmhlYWRlckNvbmZpZyA9IHRoaXMuaGVhZGVyQ29uZmlnO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0NsYXNzID0gdGhpcy5yb3djbGFzcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5lZGl0bW9kZSA9IHRoaXMuZWRpdG1vZGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZm9ybVBvc2l0aW9uID0gdGhpcy5mb3JtcG9zaXRpb247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZmlsdGVybW9kZSA9IHRoaXMuZmlsdGVybW9kZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5maWx0ZXJvbmtleXByZXNzID0gdGhpcy5maWx0ZXJvbmtleXByZXNzO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzcm93c2VsZWN0YWJsZSA9IHRoaXMuaXNyb3dzZWxlY3RhYmxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmFsbG93cGFnZXNpemVjaGFuZ2UgPSB0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2VhcmNoTGFiZWwgPSB0aGlzLnNlYXJjaGxhYmVsO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzTW9iaWxlID0gaXNNb2JpbGUoKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNlY3VyaXR5VXRpbHMucGlwZVRyYW5zZm9ybSA9IHRoaXMudHJ1c3RBc1BpcGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9IHRoaXMubmF2aWdhdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5pc2R5bmFtaWN0YWJsZSA9IHRoaXMuaXNkeW5hbWljdGFibGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2hvd3ZpZXdsZXNzYnV0dG9uID0gdGhpcy5zaG93dmlld2xlc3NidXR0b247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMub25kZW1hbmRtZXNzYWdlID0gdGhpcy5vbmRlbWFuZG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMudmlld2xlc3NtZXNzYWdlID0gdGhpcy52aWV3bGVzc21lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubG9hZGluZ2RhdGFtc2cgPSB0aGlzLmxvYWRpbmdkYXRhbXNnO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKHRoaXMucGFnZXNpemVvcHRpb25zKTtcbiAgICAgICAgdGhpcy5wYWdlc2l6ZW9wdGlvbnMgPSB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tdWx0aXNlbGVjdHRpdGxlID0gdGhpcy5tdWx0aXNlbGVjdHRpdGxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm11bHRpc2VsZWN0YXJpYWxhYmVsID0gdGhpcy5tdWx0aXNlbGVjdGFyaWFsYWJlbDtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yYWRpb3NlbGVjdHRpdGxlID0gdGhpcy5yYWRpb3NlbGVjdHRpdGxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmhlYWRlcnNlbGVjdGFsbD10aGlzLmhlYWRlcnNlbGVjdGFsbDtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yYWRpb3NlbGVjdGFyaWFsYWJlbCA9IHRoaXMucmFkaW9zZWxlY3RhcmlhbGFiZWw7XG5cbiAgICAgICAgLy8gV2hlbiBsb2Fkb25kZW1hbmQgcHJvcGVydHkgaXMgZW5hYmxlZChkZWZlcmxvYWQ9XCJ0cnVlXCIpIGFuZCBzaG93IGlzIHRydWUsIG9ubHkgdGhlIGNvbHVtbiB0aXRsZXMgb2YgdGhlIGRhdGF0YWJsZSBhcmUgcmVuZGVyZWQsIHRoZSBkYXRhKGJvZHkgb2YgdGhlIGRhdGF0YWJsZSkgaXMgbm90IGF0IGFsbCByZW5kZXJlZC5cbiAgICAgICAgLy8gQmVjYXVzZSB0aGUgZ3JpZGRhdGEgaXMgc2V0dGluZyBiZWZvcmUgdGhlIGRhdGF0YWJsZSBkb20gaXMgcmVuZGVyZWQgYnV0IHdlIGFyZSBzZW5kaW5nIGVtcHR5IGRhdGEgdG8gdGhlIGRhdGF0YWJsZS5cbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuZ3JpZERhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5ncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAgICdzZWxlY3RGaWVsZCc6IHRoaXMuYXBwTG9jYWxlLk1FU1NBR0VfU0VMRUNUX0ZJRUxEXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50ID0gJCh0aGlzLl90YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5ncmlkRWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHsncG9zaXRpb24nOiAncmVsYXRpdmUnfSk7XG5cbiAgICAgICAgZm9yRWFjaChydW5Nb2RlSW5pdGlhbFByb3BlcnRpZXMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zW3ZhbHVlXSA9ICh0aGlzW2tleV0gPT09ICd0cnVlJyB8fCB0aGlzW2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVoYW5kbGVyICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbJ3NlbGVjdEZpcnN0Um93J10gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbERlZnMgPSB0aGlzLmZpZWxkRGVmcztcblxuICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUodGhpcy5ncmlkT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICAvLyBpZih0aGlzLmdyaWRPcHRpb25zLmRhdGEubGVuZ3RoIHx8IHRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAvLyAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICB0aGlzLmFwcGx5UHJvcHMuZm9yRWFjaChhcmdzID0+IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKC4uLmFyZ3MpKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0bW9kZSA9PT0gRURJVF9NT0RFLlFVSUNLX0VESVQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0JpbmQgPSB0aGlzLl9kb2N1bWVudENsaWNrQmluZC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGdldENvbmZpZ3VyZWRTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLm9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5wYWdlID0gd2lkZ2V0U3RhdGUucGFnaW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5vcmRlckJ5ID0gZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJyAnICsgZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHdpZGdldFN0YXRlLnNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMucGFnZSA9IDE7XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5maWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh3aWRnZXRTdGF0ZS5zZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLm9yZGVyQnkgPSBnZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnICcgKyBnZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldNRXZlbnQobmV3VmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRtb2RlID09PSAnZGlhbG9nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWU6ICdzZWxlY3RlZEl0ZW1DaGFuZ2UnLCB3aWRnZXROYW1lOiB0aGlzLm5hbWUsIHJvdzogbmV3VmFsLCB0YWJsZTogdGhpc30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBjb25zdCAkZ3JpZEVsZW1lbnQgPSB0aGlzLmRhdGFncmlkRWxlbWVudDtcbiAgICAgICAgY29uc3QgJHNvcnRJY29uID0gJGdyaWRFbGVtZW50LmZpbmQoJ3RoW2RhdGEtY29sLWZpZWxkPVwiJyArIGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICdcIl0gLnNvcnQtaWNvbicpO1xuICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKSA9PT0gJ2FzYycgJiYgJHNvcnRJY29uLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNvcnRJY29uLmFkZENsYXNzKCdhc2Mgd2kgd2ktbG9uZy1hcnJvdy11cCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJykgPT09ICdkZXNjJyAmJiAkc29ydEljb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc29ydEljb24uYWRkQ2xhc3MoJ2Rlc2Mgd2kgd2ktbG9uZy1hcnJvdy1kb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBpZiAoaXNBcnJheSh3aWRnZXRTdGF0ZS5zZWFyY2gpKSB7XG4gICAgICAgICAgICBmb3JFYWNoKHdpZGdldFN0YXRlLnNlYXJjaCwgKGZpbHRlck9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0udmFsdWUgPSBmaWx0ZXJPYmoudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0ubWF0Y2hNb2RlID0gZmlsdGVyT2JqLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS50eXBlID0gZmlsdGVyT2JqLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGZpbHRlck9iai50eXBlID09PSAnaW50ZWdlcicgPyBwYXJzZUludChmaWx0ZXJPYmoudmFsdWUpIDogZmlsdGVyT2JqLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbZmlsdGVyT2JqLmZpZWxkXSkuZmluZCgnaW5wdXQnKS52YWwoZmlsdGVyT2JqLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJGdyaWRFbGVtZW50ID0gdGhpcy5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnU2VhcmNoVGV4dFwiXScpLnZhbCh3aWRnZXRTdGF0ZS5zZWFyY2gudmFsdWUpO1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ0ZpbHRlclZhbHVlXCJdJykudmFsKHdpZGdldFN0YXRlLnNlYXJjaC5maWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmVzIGVtcHR5IHZhbHVlcyBpbiBoZWFkZXJDb25maWcgYXJyYXkuXG4gICAgZmlsdGVyRW1wdHlWYWx1ZXMoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbS5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpdGVtLmNvbHVtbnMgPSBpdGVtLmNvbHVtbnMuZmlsdGVyKHRoaXMuZmlsdGVyRW1wdHlWYWx1ZXMuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gQ29tcGFyZXMgdGhlIHByZXZGaWx0ZXJDcml0ZXJpYSBSdWxlcyB3aXRoIHRoZSBuZXcgcnVsZXNcbiAgICBjb21wYXJlRmlsdGVyRXhwcmVzc2lvbnMocHJldkZpbHRlcnMsIG5ld0ZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuICEhKChwcmV2RmlsdGVycy5sZW5ndGggPT09IG5ld0ZpbHRlcnMubGVuZ3RoKSAmJiAoaXNFcXVhbChwcmV2RmlsdGVycywgbmV3RmlsdGVycykpKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhYmxlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyIENyaXRlcmlhIGFuZCBtYWludGFpbiB0aGUgcHJldkZpbHRlckV4cHJlc3Npb25cbiAgICBzZXRMYXN0QWN0aW9uVG9GaWx0ZXJDcml0ZXJpYSgpIHtcbiAgICAgICAgdGhpcy5wcmV2RmlsdGVyRXhwcmVzc2lvbiA9IGdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpID8gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcykgOiBnZXRDbG9uZWRPYmplY3QoW10uY29uY2F0KHRoaXMuZGF0YXNvdXJjZS5kYXRhQmluZGluZykpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkZJTFRFUl9DUklURVJJQSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNTZWFyY2hUcmlnZXJyZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YWJsZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIERhdGFzZXQgdXBkYXRlIGFuZCBzZXQgaXNEYXRhc2V0VXBkYXRlZCB0byB0cnVlXG4gICAgLy8gRml4IGZvciBbV01TLTIyMzIzXS10aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBkYXRhc2V0IGlzIGJlaW5nIHVwZGF0ZWRcbiAgICBzZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCkge1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFKTtcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106IHJlc2V0IGN1cnJlbnRQYWdlIHRvIDEgYXMgZGF0YXNldCBpcyBiZWluZyBjaGFuZ2VkXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhc2V0VXBkYXRlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyX0NyaXRlcmlhLCB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiB0aGUgVmFyaWFibGUgZmlsdGVyIGNyaXRlcmlhIHJ1bGVzXG4gICAgY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCkge1xuICAgICAgICBpZiAoIWlzRW1wdHkoZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykpIHx8ICFpc0VtcHR5KGdldCh0aGlzLmRhdGFzb3VyY2UsICdkYXRhQmluZGluZycpKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbHRlckV4cHIgPSBnZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSA/IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA6IFtdLmNvbmNhdCh0aGlzLmRhdGFzb3VyY2UuZGF0YUJpbmRpbmcpO1xuICAgICAgICAgICAgY29uc3QgaXNFcXVhbCA9IHRoaXMuY29tcGFyZUZpbHRlckV4cHJlc3Npb25zKHRoaXMucHJldkZpbHRlckV4cHJlc3Npb24sIGN1cnJlbnRGaWx0ZXJFeHByKTtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGlvblRvRmlsdGVyQ3JpdGVyaWEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRBY3R1YWxQYWdlU2l6ZSgpICB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IDU7XG4gICAgfVxuICAgIHdhdGNoVmFyaWFibGVEYXRhU2V0KG5ld1ZhbCkge1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IGNvbXBvbmVudCBkZXN0cnVjdGlvblxuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIFZhcmlhYmxlIGZpbHRlcnMgaWYgYXBwbGllZFxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RhdGUgaGFuZGxpbmcgZm9yIHN0YXRpYyB2YXJpYWJsZXNcbiAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zZWFyY2gsIHVuZGVmaW5lZCwgJ3NlYXJjaCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zb3J0LCB1bmRlZmluZWQsICdzb3J0JywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmFsbG93cGFnZXNpemVjaGFuZ2UpIHsgLy8gbWFpbnRhaW4gdXBkYXRlZCBwYWdlIHNpemUgaW4gdGhlIHN0YXRlUGVyc2lzdGVuY2VcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAncGFnaW5hdGlvbicpIHx8IGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uIHx8IDEsIHBhZ2VzaXplOiB3aWRnZXRTdGF0ZS5wYWdlc2l6ZX0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNoYW5nZWQoe3BhZ2U6IHdpZGdldFN0YXRlLnBhZ2luYXRpb259LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWZ0ZXIgdGhlIHNldHRpbmcgdGhlIHdhdGNoIG9uIG5hdmlnYXRvciwgZGF0YXNldCBpcyB0cmlnZ2VyZWQgd2l0aCB1bmRlZmluZWQuIEluIHRoaXMgY2FzZSwgcmV0dXJuIGhlcmUuXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkICYmIGlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgdGhpcy5fX2Z1bGxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdmFyaWFibGUgaXMgaW4gbG9hZGluZyBzdGF0ZSwgc2hvdyBsb2FkaW5nIGljb25cbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCAmJiAhdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gZ2V0VmFsaWRKU09OKG5ld1ZhbCk7XG5cbiAgICAgICAgLy8gQ29udmVydGluZyBuZXd2YWwgdG8gb2JqZWN0IGlmIGl0IGlzIGFuIE9iamVjdCB0aGF0IGNvbWVzIGFzIGEgc3RyaW5nIFwie1wiZGF0YVwiIDogMX1cIlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBuZXdWYWwgPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3J0RXhwID0gdGhpcy5nZXRTb3J0RXhwcigpO1xuICAgICAgICBjb25zdCBzb3J0RXhwQXJyID0gc29ydEV4cC5zcGxpdCgnICcpO1xuICAgICAgICBpZiAoc29ydEV4cCAmJiBzb3J0RXhwQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gOiBzb3J0RXhwQXJyWzFdLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAgc29ydEV4cEFyclswXVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLypSZXR1cm4gaWYgZGF0YSBpcyBpbnZhbGlkLiovXG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGludmFsaWQgYW5kIHZhcmlhYmxlSW5mbGlnaHQgaXMgc3RpbGwgdHJ1ZSwgY2xlYXIgbG9hZGluZyBzdGF0ZVxuICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0YWJsZXMgZnJvbSBnZXR0aW5nIHN0dWNrIGluIGxvYWRpbmcgd2hlbiBkYXRhIGlzIGludmFsaWRcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIGVtcHR5IG9yIGluIHN0dWRpbyBtb2RlLCBkb250IGVuYWJsZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93bmF2aWdhdGlvbiAmJiAhdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhc2V0IGlzIHVuZGVmaW5lZCBvciBlbXB0eSBvciB0YWJsZSBpcyBib3VuZCB0byBzdGF0aWMgdmFyaWFibGUgdGhlbiBzZXQgdmFyaWFibGVJbmZsaWdodCB0byBmYWxzZSBpbm9yZGVyIHRvIHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgICAgICAgICBpZiAobmV3VmFsID09PSAnJyB8fCBuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypmb3IgcnVuIG1vZGUsIGRpc2FibGluZyB0aGUgbG9hZGVyIGFuZCBzaG93aW5nIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpZiBkYXRhc2V0IGlzIG5vdCB2YWxpZCovXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiBuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoIWlzT2JqZWN0KG5ld1ZhbCkgfHwgbmV3VmFsID09PSAnJyB8fCAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB2YXJpYWJsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBhbmQgcmVzdWx0U2V0IGlzIGVtcHR5LCByZW5kZXIgZW1wdHkgZGF0YVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoW10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB2YXJpYWJsZUluZmxpZ2h0IGlzIHN0aWxsIHRydWUgYnV0IHdlIGhhdmUgaW52YWxpZC9lbXB0eSBkYXRhLCBjbGVhciBsb2FkaW5nIHN0YXRlXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGRhdGEgbmV2ZXIgYXJyaXZlcyBvciBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUdyaWREYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hSb3dGaWx0ZXJEYXRhRnJvbURhdGFzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGVuIHNlbGVjdCB3aWRnZXQgb3B0aW9ucyBhcmUgbG9hZGVkIGluIHNlYXJjaCBmaWx0ZXIgdGhlbiBpbml0aWFsaXppbmcgaXRcbiAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkod2lkZ2V0U3RhdGUuc2VhcmNoKSkge1xuICAgICAgICAgICAgICAgIGZvckVhY2god2lkZ2V0U3RhdGUuc2VhcmNoLCAoZmlsdGVyT2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldD0kKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKT8uZmluZCgnW3dpZGdldC1pZF0nKT8ucHJvcChcInRhZ05hbWVcIik/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHdpZGdldD09PSd3bS1zZWxlY3QnICYmIGZpbHRlck9iai52YWx1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSAkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5maW5kKFwic2VsZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Py5maW5kKFwib3B0aW9uXCIpPy5maWx0ZXIoKF8sIG8pID0+IG8udGV4dENvbnRlbnQudHJpbSgpID09PSBmaWx0ZXJPYmoudmFsdWUpPy5wcm9wKFwic2VsZWN0ZWRcIiwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX21vZGVsVmFyRWRpdFNvZnRSZWZyZXNoQWN0aXZlVW50aWwgPSAwO1xuICAgICAgICB0aGlzLl9pc0lubGluZUVkaXRTYXZlID0gZmFsc2U7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogUmVtb3ZlIGRvY3VtZW50IGNsaWNrIGxpc3RlbmVyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrQmluZCk7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIG5hdmlnYXRvciB3YXRjaGVzXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGFsbCBWaWV3Q29udGFpbmVyUmVmIGVtYmVkZGVkIHZpZXdzXG4gICAgICAgIC8vIFRoZXNlIGhvbGQgcmVmZXJlbmNlcyB0byByb3cgZGF0YSwgY3VzdG9tIGV4cHJlc3Npb25zLCBhbmQgaW5saW5lIHdpZGdldHNcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRXhwclZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3dBY3Rpb25zVmlld1JlZikge1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmlld1JlZi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlubGluZUVkaXRWaWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdE5ld1ZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lRWRpdE5ld1ZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3dEZXRhaWxWaWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RldGFpbFZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5keW5hbWljVGFibGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1RhYmxlUmVmLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGNvbXBpbGVkIHRlbXBsYXRlIGNhY2hlc1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsID0ge307XG4gICAgICAgIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGwgPSB7fTtcbiAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsID0ge307XG4gICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGwgPSB7fTtcbiAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGwgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbCA9IHt9O1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgZHluYW1pYyBjb250ZXh0XG4gICAgICAgIGlmICh0aGlzLl9keW5hbWljQ29udGV4dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5fZHluYW1pY0NvbnRleHQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZHluYW1pY0NvbnRleHRba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBkYXRhIGFycmF5c1xuICAgICAgICB0aGlzLl9ncmlkRGF0YSA9IFtdO1xuICAgICAgICB0aGlzLml0ZW1zID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdO1xuICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMgPSBbXTtcbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbnVsbDtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IERlc3Ryb3kgalF1ZXJ5IGRhdGF0YWJsZSB3aWRnZXQgYmVmb3JlIGNsZWFyaW5nIGdyaWRPcHRpb25zXG4gICAgICAgIGlmICh0aGlzLmRhdGFncmlkRWxlbWVudCAmJiB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdkZXN0cm95Jyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIGVycm9ycyBkdXJpbmcgZGVzdHJveVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBkeW5hbWljIGNvbnRleHRcbiAgICAgICAgaWYgKHRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9keW5hbWljQ29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9keW5hbWljQ29udGV4dFtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIG90aGVyIGRhdGEgc3RydWN0dXJlc1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtZmllbGRzID0ge307XG4gICAgICAgIHRoaXMucm93RmlsdGVyID0ge307XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9hY3Rpb25zID0geyBoZWFkZXI6IFtdLCBmb290ZXI6IFtdIH07XG4gICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmhlYWRlckNvbmZpZyA9IFtdO1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnMgPSBbXTtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGFsbCBAQ29udGVudENoaWxkcmVuIFF1ZXJ5TGlzdHMgaG9sZGluZyB0ZW1wbGF0ZSByZWZlcmVuY2VzXG4gICAgICAgIC8vIFRoZXNlIFF1ZXJ5TGlzdHMgaG9sZCBUZW1wbGF0ZVJlZiBpbnN0YW5jZXMgdGhhdCBjcmVhdGUgY2lyY3VsYXIgcmVmZXJlbmNlcyB0byB0aGUgcGFyZW50IExWaWV3XG4gICAgICAgIGlmICh0aGlzLnJvd0FjdGlvblRtcGwpIHtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uVG1wbC5yZXNldChbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVG1wbCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJUbXBsLnJlc2V0KFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmxpbmVXaWRnZXRUbXBsKSB7XG4gICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldFRtcGwucmVzZXQoW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlubGluZVdpZGdldE5ld1RtcGwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0TmV3VG1wbC5yZXNldChbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRXhwclRtcGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclRtcGwucmVzZXQoW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRtcGwpIHtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVG1wbC5yZXNldChbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIEBDb250ZW50Q2hpbGQgdGVtcGxhdGUgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMucm93RXhwYW5zaW9uVG1wbCA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSBhbmQgY2xlYXIgc3ViamVjdHNcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBWaWV3Q2hpbGQgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IgPSBudWxsO1xuICAgICAgICB0aGlzLl90YWJsZUVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgLy8gY29uc29sZS5sb2coXCJ0YWJsZSBjb21wb25lbnQgZGVzdHJveWVkXCIpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZFJvd0luZGV4KHJvdykge1xuICAgICAgICBjb25zdCByb3dEYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHJvdyk7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gaW5kZXhPZih0aGlzLmdyaWRPcHRpb25zLmRhdGEsIHJvdyk7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH1cbiAgICAgICAgcm93RGF0YS4kaW5kZXggPSByb3dJbmRleCArIDE7XG4gICAgICAgIHJvd0RhdGEuJGlzRmlyc3QgPSByb3dEYXRhLiRpbmRleCA9PT0gMTtcbiAgICAgICAgcm93RGF0YS4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvd0RhdGEuJGluZGV4O1xuICAgICAgICByZXR1cm4gcm93RGF0YTtcbiAgICB9XG5cbiAgICBhZGRFdmVudHNUb0NvbnRleHQoY29udGV4dCkge1xuICAgICAgICBjb250ZXh0LmFkZE5ld1JvdyA9ICgpID0+IHRoaXMuYWRkTmV3Um93KCk7XG4gICAgICAgIGNvbnRleHQuZGVsZXRlUm93ID0gKCkgPT4gdGhpcy5kZWxldGVSb3coKTtcbiAgICAgICAgY29udGV4dC5lZGl0Um93ID0gKCkgPT4gdGhpcy5lZGl0Um93KCk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKFtEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSXS5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZSA/IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykgOiB7fTtcbiAgICB9XG5cbiAgICBpc05hdmlnYXRpb25FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93bmF2aWdhdGlvbiAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZDtcbiAgICB9XG5cbiAgICBnZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSkge1xuICAgICAgICBjb25zdCByb3cgPSBnZXRDbG9uZWRPYmplY3Qocm93RGF0YSk7XG4gICAgICAgIHJvdy5nZXRQcm9wZXJ0eSA9IGZpZWxkID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXQocm93LCBmaWVsZCk7XG4gICAgICAgIH07XG4gICAgICAgIHJvdy4kaXNGaXJzdCA9IHJvdy4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvdy4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvdy4kaW5kZXg7XG4gICAgICAgIGRlbGV0ZSByb3cuJCRpbmRleDtcbiAgICAgICAgZGVsZXRlIHJvdy4kJHBrO1xuICAgICAgICBkZWxldGUgcm93LiQkd21Tb3VyY2VMaXN0SW5kZXg7XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAvLyBiYXNlZCBvbiB0aGUgYWN0aXZlIHN0YXRlIGFuZCByZXNwb25zZSB0b2dnbGluZyB0aGUgJ2xvYWRpbmcgZGF0YS4uLicgYW5kICdubyBkYXRhIGZvdW5kJyBtZXNzYWdlcy5cbiAgICAgICAgaWYgKGRhdGEuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGdyaWQgaXMgaW4gZWRpdCBtb2RlIG9yIGdyaWQgaGFzIGRhdGEsIGRvbnQgc2hvdyB0aGUgbm8gZGF0YSBtZXNzYWdlXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNHcmlkRWRpdE1vZGUgJiYgaXNFbXB0eSh0aGlzLmRhdGFzZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2xEZWYsIHdpZGdldFR5cGUpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiAhPT0gJ25ldycgJiYgY29sRGVmWydwcmltYXJ5LWtleSddICYmIGNvbERlZi5nZW5lcmF0b3IgPT09ICdhc3NpZ25lZCcgJiYgIWNvbERlZlsncmVsYXRlZC1lbnRpdHktbmFtZSddICYmICFjb2xEZWYucGVyaW9kKSB7XG4gICAgICAgICAgICBjb2xEZWZbd2lkZ2V0VHlwZV0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRGb3JtQ29udHJvbChjdHJsKSB7XG4gICAgICAgIGN0cmwubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIGN0cmwubWFya0FzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm0obmV3Um93Pykge1xuICAgICAgICBjb25zdCBjdHJscyA9IHRoaXMubmdmb3JtLmNvbnRyb2xzO1xuICAgICAgICBrZXlzKHRoaXMubmdmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBuZXcgcm93LCBjbGVhciB0aGUgY29udHJvbHMgaW4gdGhlIG5ldyByb3cuIEVsc2UsIGNsZWFyIHRoZSBjb250cm9scyBpbiBlZGl0IHJvd1xuICAgICAgICAgICAgaWYgKCFrZXkuZW5kc1dpdGgoJ19maWx0ZXInKSAmJiAoKGtleS5lbmRzV2l0aCgnX25ldycpICYmIG5ld1JvdykgfHwgKCFrZXkuZW5kc1dpdGgoJ19uZXcnKSAmJiAhbmV3Um93KSkpIHtcbiAgICAgICAgICAgICAgICBjdHJsc1trZXldLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybUNvbnRyb2woY3RybHNba2V5XSk7XG4gICAgICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciB2YWxpZGF0b3JzIHRvIHJlbGVhc2UgcmVmZXJlbmNlc1xuICAgICAgICAgICAgICAgIGN0cmxzW2tleV0uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgY3RybHNba2V5XS5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93RmllbGRCYXNlZE9uU2NyZWVuVHlwZShmaWVsZCkge1xuICAgICAgICBsZXQgc2hvd0ZpZWxkO1xuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQubW9iaWxlRGlzcGxheTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdwb3J0LmlzVGFibGV0VHlwZSkge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQudGFibGV0RGlzcGxheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLnBjRGlzcGxheTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hvd0ZpZWxkO1xuICAgIH1cblxuICAgIC8qIENoZWNrIHdoZXRoZXIgaXQgaXMgbm9uLWVtcHR5IHJvdy4gKi9cbiAgICBpc0VtcHR5UmVjb3JkKHJlY29yZCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgICAgbGV0IGRhdGEsXG4gICAgICAgICAgICBpc0Rpc3BsYXllZDtcblxuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5ldmVyeSgocHJvcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSByZWNvcmRbcHJvcF07XG4gICAgICAgICAgICAvKiBJZiBmaWVsZERlZnMgYXJlIG1pc3NpbmcsIHNob3cgYWxsIGNvbHVtbnMgaW4gZGF0YS4gKi9cbiAgICAgICAgICAgIGlzRGlzcGxheWVkID0gKHRoaXMuZmllbGREZWZzLmxlbmd0aCAmJiBpc0RlZmluZWQodGhpcy5maWVsZERlZnNbaW5kZXhdKSAmJiB0aGlzLnNob3dGaWVsZEJhc2VkT25TY3JlZW5UeXBlKHRoaXMuZmllbGREZWZzW2luZGV4XSkpIHx8IHRydWU7XG4gICAgICAgICAgICAvKlZhbGlkYXRpbmcgb25seSB0aGUgZGlzcGxheWVkIGZpZWxkcyovXG4gICAgICAgICAgICBpZiAoaXNEaXNwbGF5ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiBGdW5jdGlvbiB0byByZW1vdmUgdGhlIGVtcHR5IGRhdGEuICovXG4gICAgcmVtb3ZlRW1wdHlSZWNvcmRzKHNlcnZpY2VEYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbFJlY29yZHMgPSBzZXJ2aWNlRGF0YTtcbiAgICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IFtdO1xuICAgICAgICBpZiAoYWxsUmVjb3JkcyAmJiBhbGxSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgLypDb21wYXJpbmcgYW5kIHB1c2hpbmcgdGhlIG5vbi1lbXB0eSBkYXRhIGNvbHVtbnMqL1xuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gYWxsUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkICYmICF0aGlzLmlzRW1wdHlSZWNvcmQocmVjb3JkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgc2V0R3JpZERhdGEoc2VydmVyRGF0YSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maWx0ZXJudWxscmVjb3JkcyA/ICB0aGlzLnJlbW92ZUVtcHR5UmVjb3JkcyhzZXJ2ZXJEYXRhKSA6IHNlcnZlckRhdGE7XG4gICAgICAgIC8vIGZpeCBmb3IgW1dNUy0yNDAxMl0gc2V0IHZhcmlhYmxlaW5mbGlnaHQgZmxhZyB0byBmYWxzZSBmb3Igc3RhdGljIHZhcmlhYmxlc1xuICAgICAgICAvLyBJZiB0aGUgdGFibGUgaXMgYm91bmQgdG8gc29tZSB3aWRnZXQgYW5kIG5vdCBib3VuZCB0byBhbnkgdmFyaWFibGUgKGV4OiBUYWJsZTEuc2VsZWN0ZWRJdGVtKSB0aGVuIHNldCB2YXJpYWJsZUluZmxpZ2h0IHRvIGZhbHNlXG4gICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgKGRhdGEubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZERhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIHNldERhdGFHcmlkT3B0aW9uKG9wdGlvbk5hbWUsIG5ld1ZhbCwgZm9yY2VTZXQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnaW5zdGFuY2UnKSkge1xuICAgICAgICAgICAgLy8gQm91bmQgcHJvcGVydGllcyBjYW4gdXBkYXRlIGJlZm9yZSB0aGUgalF1ZXJ5IHdpZGdldCBpcyBpbml0aWFsaXplZC5cbiAgICAgICAgICAgIC8vIEtlZXAgZ3JpZE9wdGlvbnMgaW4gc3luYyBzbyB0aGUgaW5pdGlhbCBkYXRhdGFibGUoKSBjYWxsIHNlZXMgdGhlIGxhdGVzdCB2YWx1ZS5cbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge307XG4gICAgICAgIGlmIChpc0RlZmluZWQobmV3VmFsKSAmJiAoIWlzRXF1YWwobmV3VmFsLCB0aGlzLmdyaWRPcHRpb25zW29wdGlvbk5hbWVdKSB8fCBmb3JjZVNldCkpIHtcbiAgICAgICAgICAgIG9wdGlvbltvcHRpb25OYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnb3B0aW9uJywgb3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsRGF0YUdyaWRNZXRob2QoLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ2luc3RhbmNlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQcm9wcy5zZXQoYXJnc1sxXSwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm47IC8vIElmIGRhdGFncmlkIGlzIG5vdCBpbml0aWxpYXplZCBvciBkZXN0cm95ZWQsIHJldHVybiBoZXJlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZS5hcHBseSh0aGlzLmRhdGFncmlkRWxlbWVudCwgYXJncyk7XG4gICAgfVxuXG4gICAgcmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpIHtcbiAgICAgICAgbGV0IHJvd0FjdGlvbkNvbCxcbiAgICAgICAgICAgIGluc2VydFBvc2l0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJvd09wZXJhdGlvbnNDb2x1bW4gPSBnZXRSb3dPcGVyYXRpb25zQ29sdW1uKCksXG4gICAgICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICdmaWVsZCc6IHJvd09wZXJhdGlvbnNDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgJ2lzUHJlZGVmaW5lZCc6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIC8vIFJldHVybiBpZiBubyBmaWVsZERlZnMgYXJlIHByZXNlbnRcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0FjdGlvbkNvbCA9IGZpbmQodGhpcy5mdWxsRmllbGREZWZzLCB7J2ZpZWxkJzogUk9XX09QU19GSUVMRCwgdHlwZTogJ2N1c3RvbSd9KTsgLy8gQ2hlY2sgaWYgY29sdW1uIGlzIGZldGNoZWQgZnJvbSBtYXJrdXBcbiAgICAgICAgcmVtb3ZlPGFueT4odGhpcy5maWVsZERlZnMsIHt0eXBlOiAnY3VzdG9tJywgZmllbGQ6IFJPV19PUFNfRklFTER9KTsgLy8gUmVtb3Zpbmcgb3BlcmF0aW9ucyBjb2x1bW5cbiAgICAgICAgcmVtb3ZlPGFueT4odGhpcy5oZWFkZXJDb25maWcsIHtmaWVsZDogcm93T3BlcmF0aW9uc0NvbHVtbi5maWVsZH0pO1xuXG4gICAgICAgIC8qQWRkIHRoZSBjb2x1bW4gZm9yIHJvdyBvcGVyYXRpb25zIG9ubHkgaWYgYXQtbGVhc3Qgb25lIG9wZXJhdGlvbiBoYXMgYmVlbiBlbmFibGVkLiovXG4gICAgICAgIGlmICh0aGlzLnJvd0FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAocm93QWN0aW9uQ29sKSB7IC8vIElmIGNvbHVtbiBpcyBwcmVzZW50IGluIG1hcmt1cCwgcHVzaCB0aGUgY29sdW1uIG9yIHB1c2ggdGhlIGRlZmF1bHQgY29sdW1uXG4gICAgICAgICAgICAgICAgaW5zZXJ0UG9zaXRpb24gPSByb3dBY3Rpb25Db2wucm93YWN0aW9uc3Bvc2l0aW9uID8gdG9OdW1iZXIocm93QWN0aW9uQ29sLnJvd2FjdGlvbnNwb3NpdGlvbikgOiB0aGlzLmZpZWxkRGVmcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuc3BsaWNlKGluc2VydFBvc2l0aW9uLCAwLCByb3dBY3Rpb25Db2wpO1xuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy51bnNoaWZ0KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcucHVzaChjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMucHVzaChyb3dPcGVyYXRpb25zQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy5wdXNoKGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaGVhZGVyQ29uZmlnJywgdGhpcy5oZWFkZXJDb25maWcpO1xuICAgIH1cblxuICAgIGVuYWJsZVBhZ2VOYXZpZ2F0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuYmluZGRhdGFzZXQgJiYgdGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBcInJlc3VsdFwiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBwYWdpbmF0ZWQgZGF0YSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5yZXN1bHRFbWl0dGVyLnN1YnNjcmliZSgobmV3VmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHNhbml0eS4gKi9cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIGlzQXJyYXkodGhpcy5kYXRhc2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ3JpZE9wdGlvbnM/LmRhdGEgfHwgW10pLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhc2V0Um93ID0gdGhpcy53aWRnZXQ/LmRhdGFzZXQ/LltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFzZXRSb3cgJiYgSlNPTi5zdHJpbmdpZnkocm93KSAhPT0gSlNPTi5zdHJpbmdpZnkoZGF0YXNldFJvdykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKSA/IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gSlNPTi5zdHJpbmdpZnkoaXRlbSkgPT09IEpTT04uc3RyaW5naWZ5KHJvdykpIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2l0ZW1JbmRleF0gPSB7IC4uLmRhdGFzZXRSb3cgfTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gV2F0Y2ggd2lsbCBub3QgYmUgdHJpZ2dlcmVkIGlmIGRhdGFzZXQgYW5kIG5ldyB2YWx1ZSBhcmUgZXF1YWwuIFNvIHRyaWdnZXIgdGhlIHByb3BlcnR5IGNoYW5nZSBoYW5kbGVyIG1hbnVhbGx5XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyBpbiBjYXNlLCBpZiBkYXRhc2V0IGlzIGRpcmVjdGx5IHVwZGF0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0VxdWFsKHRoaXMuZGF0YXNldCwgbmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBbXS5jb25jYXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBleHRlbmQoe30sIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgLypEZS1yZWdpc3RlciB0aGUgd2F0Y2ggaWYgaXQgaXMgZXhpc3RzICovXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJtYXhSZXN1bHRzXCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIFwicGFnZVNpemVcIiBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzRW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBuZXdWYWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIGRhdGFzZXQgaXMgYSBwYWdlYWJsZSBvYmplY3QsIGRhdGEgaXMgcHJlc2VudCBpbnNpZGUgdGhlIGNvbnRlbnQgcHJvcGVydHlcbiAgICAgICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IHRoaXMuZGF0YXNldDtcblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCA1O1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCA1XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUJpbmRpbmcoJ2RhdGFzZXQnKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldCh0aGlzLmJpbmRkYXRhc2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMuZGF0YXNvdXJjZSwgdGhpcy5kYXRhc2V0LCB0aGlzLmJpbmRkYXRhc291cmNlLCB1bmRlZmluZWQsIHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0RhdGFWYWxpZCgpIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhc2V0IHx8IHt9O1xuXG4gICAgICAgIC8qSW4gY2FzZSBcImRhdGFcIiBjb250YWlucyBcImVycm9yXCIgJiBcImVycm9yTWVzc2FnZVwiLCB0aGVuIGRpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGdyaWQuKi9cbiAgICAgICAgaWYgKGRhdGFzZXQuZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gZGF0YXNldC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YXNldC5kYXRhICYmIGRhdGFzZXQuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gcG9wdWxhdGUgdGhlIGdyaWQgd2l0aCBkYXRhLlxuICAgIHBvcHVsYXRlR3JpZERhdGEoc2VydmljZURhdGEpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHNlcnZpY2VEYXRhID0gdHJhbnNmb3JtRGF0YShzZXJ2aWNlRGF0YSwgdGhpcy5uYW1lKTtcbiAgICAgICAgLy8gQXBwbHkgZmlsdGVyIGFuZCBzb3J0LCBpZiBkYXRhIGlzIHJlZnJlc2hlZCB0aHJvdWdoIFJlZnJlc2ggZGF0YSBtZXRob2RcbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLl9pc0NsaWVudFNlYXJjaCkge1xuICAgICAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdChzZXJ2aWNlRGF0YSk7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoZGF0YSkgJiYgIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXS4kJHdtU291cmNlTGlzdEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgdGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy5zb3J0SW5mbyk7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gc2VydmljZURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZmllbGRkZWZzIGFyZSBub3QgcHJlc2VudCwgZ2VuZXJhdGUgZmllbGRkZWZzIGZyb20gZGF0YVxuICAgICAgICAvLyBSZW1vdmluZyBmaWVsZGRlZnMgY2hlY2sgYmVjYXVzZSBXaGVuIGxvYWRvbmRlbWFuZCBwcm9wZXJ0eSBpcyBlbmFibGVkKGRlZmVybG9hZD1cInRydWVcIiksIHRoZSBkYXRhc2V0IHByb3BlcnR5Y2hhbmdlaGFubGRlciBpcyB0cmlnZ2VyZWQgZmlyc3QgYmVmb3JlIHRoZSBkb20gaXMgZ2V0dGluZyByZW5kZXJlZC5cbiAgICAgICAgLy8gU28gYXQgdGhhdCB0aW1lIGZpZWxkZGVmcyBsZW5ndGggaXMgemVybywgZHVlIHRvIHRoaXMgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHkuXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUdyaWRDb2x1bW5zKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgJiYgc2VydmljZURhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZUl0ZW1zO1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGFibGUgaGFzIGEgcGFyZW50IHRhYmxlXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50T2JqID0gdGhpcy5ncmlkT3B0aW9ucy5nZXRQYXJlbnRUYWJsZURhdGEoKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUl0ZW1zID0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmZpbHRlcih2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnBhZ2UgPT09IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbiBpdGVtIGlzIGFscmVhZHkgc2VsZWN0ZWQsIGRvbid0IHRyaWdnZXIgb25TZWxlY3QgZXZlbnQgZm9yIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCByZWFzc2lnbiB0aGlzLnNlbGVjdGVkaXRlbSBpZiBzZWxlY3RlZCBpdGVtcyBhbHJlYWR5IGV4aXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBhIHJvdyBvbmx5IGlmIGl0J3MgcmVzcGVjdGl2ZSBwYXJlbnQgcm93IGluZGV4IGFuZCBwYXJlbnQncyBjdXJyZW50IHBhZ2UgbWF0Y2hlcyB3aXRoIHN0YXRlcGVyc2lzdGVuY2UgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRPYmoucGFyZW50SWQgfHwgKHBhcmVudE9iai5wYXJlbnRJZCAmJiBpdGVtLnBhcmVudFJvd0luZGV4ID09PSBwYXJlbnRPYmoucGFyZW50SWQgJiYgaXRlbS5wYXJlbnRDdXJyZW50UGFnZSA9PT0gcGFyZW50T2JqLnBhcmVudFBhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtLmluZGV4LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBjdXJyZW50UGFnZUl0ZW1zLm1hcChmdW5jdGlvbih2YWwpIHtyZXR1cm4gdmFsLmluZGV4OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIGFuZCBjb21waWxlIHRoZSBmb3JtIGZpZWxkcyBmcm9tIHRoZSBtZXRhZGF0YVxuICAgIGFzeW5jIGdlbmVyYXRlRHluYW1pY0NvbHVtbnMoY29sdW1ucykge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdOyAvLyBlbXB0eSB0aGUgZm9ybSBmaWVsZHNcbiAgICAgICAgLy8gZW1wdHkgdGhlIGZpbHRlciBmaWVsZCB0ZW1wbGF0ZSByZWZzLlxuICAgICAgICAodGhpcy5maWx0ZXJUbXBsIGFzIGFueSkuX3Jlc3VsdHMgPSBbXTtcblxuICAgICAgICBpZiAoaXNFbXB0eShjb2x1bW5zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRtcGwgPSAnJztcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBsZXQgYXR0cnNUbXBsID0gJyc7XG4gICAgICAgICAgICBsZXQgY3VzdG9tVG1wbCA9ICcnO1xuICAgICAgICAgICAgZm9yRWFjaChjb2wsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSAmJiB2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGN1c3RvbSBleHByZXNzaW9uIGlzIHByZXNlbnQsIGtlZXAgaXQgaW5zaWRlIHRhYmxlIGNvbHVtbi4gRWxzZSwga2VlcCBhcyBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2N1c3RvbUV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21UbXBsID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNUbXBsICs9IGAgJHtrZXl9PVwiJHt2YWx9XCJgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBsICs9IGA8d20tdGFibGUtY29sdW1uICR7YXR0cnNUbXBsfSB0YWJsZU5hbWU9XCIke3RoaXMubmFtZX0keyh0aGlzIGFzIGFueSkuJGF0dHJzLmdldCgndGFibGVfcmVmZXJlbmNlJyl9XCI+JHtjdXN0b21UbXBsfTwvd20tdGFibGUtY29sdW1uPmA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmR5bmFtaWNUYWJsZVJlZi5jbGVhcigpO1xuICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IE9iamVjdC5jcmVhdGUodGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0W3RoaXMuZ2V0QXR0cignd21UYWJsZScpXSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub09mQ29sdW1ucyA9IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5UmVmID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50UHJvdmlkZXIuZ2V0Q29tcG9uZW50RmFjdG9yeVJlZihcbiAgICAgICAgICAgICdhcHAtdGFibGUtZHluYW1pYy0nICsgdGhpcy53aWRnZXRJZCxcbiAgICAgICAgICAgIHRtcGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbm9DYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0cmFuc3BpbGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmR5bmFtaWNUYWJsZVJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeVJlZiwgMCwgdGhpcy5pbmopO1xuICAgICAgICBleHRlbmRQcm90byhjb21wb25lbnQuaW5zdGFuY2UsIHRoaXMuX2R5bmFtaWNDb250ZXh0KTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuZHluYW1pYy10YWJsZS1jb250YWluZXInKVswXS5hcHBlbmRDaGlsZChjb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZUNvbERlZnMoZGF0YSkge1xuICAgICAgICBsZXQgZGVmYXVsdEZpZWxkRGVmcztcbiAgICAgICAgbGV0IHByb3BlcnRpZXM7XG4gICAgICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XG4gICAgICAgIGxldCBoZWFkZXJJbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBbXTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0ge307XG4gICAgICAgIC8qIGlmIHByb3BlcnRpZXMgbWFwIGlzIGV4aXN0ZWQgdGhlbiBmZXRjaCB0aGUgY29sdW1uIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBuZXN0ZWQgbGV2ZWxzIHVzaW5nIHV0aWwgZnVuY3Rpb24gKi9cbiAgICAgICAgcHJvcGVydGllcyA9IGRhdGE7XG4gICAgICAgIC8qY2FsbCB1dGlsaXR5IGZ1bmN0aW9uIHRvIHByZXBhcmUgZmllbGREZWZzIGZvciBncmlkIGFnYWluc3QgZ2l2ZW4gZGF0YSAoQSBNQVggT0YgMTAgQ09MVU1OUyBPTkxZKSovXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMgPSBwcmVwYXJlRmllbGREZWZzKHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8qYXBwZW5kIGFkZGl0aW9uYWwgcHJvcGVydGllcyovXG4gICAgICAgIGZvckVhY2goZGVmYXVsdEZpZWxkRGVmcywgY29sdW1uRGVmID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5iaW5kaW5nID0gY29sdW1uRGVmLmZpZWxkO1xuICAgICAgICAgICAgY29sdW1uRGVmLmNhcHRpb24gPSBjb2x1bW5EZWYuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYucGNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5tb2JpbGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi50YWJsZXREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zaG93aW5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnR5cGUgID0gJ3N0cmluZyc7XG4gICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMTk2NjhdIGFuZCBbV01TLTE5NjY5XS0gQWRkaW5nIGluZGV4IGFuZCBoZWFkZXJJbmRleCBmb3IgRHluYW1pYyBEQiBjb2x1bW5zLlxuICAgICAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSBjb2x1bW4gZ3JvdXBzIGZvciBEeW5hbWljIERCXG4gICAgICAgICAgICBjb2x1bW5EZWYuaW5kZXggPSBjb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmRleCA9IGhlYWRlckluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICAgICAgICAgIGhlYWRlckluZGV4Kys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE5vdGU6IEVycm9ycyBpbiBiZWZvcmVkYXRhcmVuZGVyIHNob3VsZCBub3QgcHJldmVudCB0YWJsZSByZW5kZXJpbmdcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogZGF0YSwgJGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogZGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgZXJyb3IgYnV0IGNvbnRpbnVlIHdpdGggcmVuZGVyaW5nIC0gYmVmb3JlZGF0YXJlbmRlciBlcnJvcnMgc2hvdWxkIG5vdCBibG9jayB0YWJsZSByZW5kZXJpbmdcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgaW4gYmVmb3JlZGF0YXJlbmRlciBldmVudCBjYWxsYmFjaywgY29udGludWluZyB3aXRoIHRhYmxlIHJlbmRlcmluZzonLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0RmllbGREZWZzID0gW107XG4gICAgICAgIC8vIEFwcGx5IHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIHVzZXJcbiAgICAgICAgZm9yRWFjaCh0aGlzLmNvbHVtbnMsIHZhbCA9PiB7XG4gICAgICAgICAgICBkZWZhdWx0RmllbGREZWZzLnB1c2godmFsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGRlZmF1bHRGaWVsZERlZnMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUdyaWRDb2x1bW5zKGRhdGEpIHtcbiAgICAgICAgLyogdGhpcyBjYWxsIGJhY2sgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIGRhdGEgZnJvbSB0aGUgdmFyaWFibGUgKi9cbiAgICAgICAgLyogY2hlY2sgd2hldGhlciBkYXRhIGlzIHZhbGlkIG9yIG5vdCAqL1xuICAgICAgICBjb25zdCBkYXRhVmFsaWQgPSBkYXRhICYmICFkYXRhLmVycm9yO1xuICAgICAgICAvKmlmIHRoZSBkYXRhIGlzIHR5cGUganNvbiBvYmplY3QsIG1ha2UgaXQgYW4gYXJyYXkgb2YgdGhlIG9iamVjdCovXG4gICAgICAgIGlmIChkYXRhVmFsaWQgJiYgIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgdGhlIGRhdGEgaXMgZW1wdHksIHNob3cgbm9kYXRhbWVzc2FnZSAqL1xuICAgICAgICBpZiAoaXNFbXB0eShkYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YVZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgbmV3IGNvbHVtbnMgdG8gYmUgcmVuZGVyZWQsIHByZXBhcmUgZGVmYXVsdCBmaWVsZERlZnMgZm9yIHRoZSBkYXRhIHByb3ZpZGVkKi9cbiAgICAgICAgY29uc3QgY29sdW1uRGF0YSA9IGdldENsb25lZE9iamVjdChkYXRhKTtcbiAgICAgICAgaWYgKGlzQXJyYXkoY29sdW1uRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbHVtbkRhdGEuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1snJCR3bVNvdXJjZUxpc3RJbmRleCddKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChjb2x1bW5EYXRhKSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbHVtbkRhdGFbJyQkd21Tb3VyY2VMaXN0SW5kZXgnXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXBhcmVDb2xEZWZzKGNvbHVtbkRhdGEpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0R3JpZERhdGEodGhpcy5zZXJ2ZXJEYXRhKTtcbiAgICB9XG5cbiAgICBnZXRTb3J0RXhwcigpIHtcbiAgICAgICAgbGV0IHNvcnRFeHA7XG4gICAgICAgIGxldCBwYWdpbmdPcHRpb25zO1xuICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKSkge1xuICAgICAgICAgICAgcGFnaW5nT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUyk7XG4gICAgICAgICAgICBzb3J0RXhwID0gaXNFbXB0eShwYWdpbmdPcHRpb25zKSA/ICcnIDogZ2V0T3JkZXJCeUV4cHIocGFnaW5nT3B0aW9ucy5zb3J0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ydEV4cCB8fCAnJztcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHByb3BlcnR5IGNoYW5nZXMgYWZ0ZXIgY29tcG9uZW50IGRlc3RydWN0aW9uXG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW5hYmxlTmV3Um93LCB3aWRnZXRTdGF0ZTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzb3VyY2UnOlxuICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzY1M10gd2hlbiBzdGFydFVwZGF0ZSBpcyBmYWxzZSAocmVxdWVzdCBvbiBwYWdlIGxvYWQgcHJvcGVydHkgaXMgdW5jaGVja2VkKSxcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHNldCBzdGF0dXMgbXNnIGFzIFwiTm8gZGF0YSBmb3VuZFwiXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiB0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHMgPSB0aGlzLnBhZ2VzaXplIHx8IHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChudiAmJiBudi5zdGFydFVwZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiBnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSAhPT0gJ3dtLlZhcmlhYmxlJyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyc2VsZWN0YWxsPWZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKFwiaGVhZGVyc2VsZWN0YWxsXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldCh0aGlzLmRhdGFzZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkgJiYgdGhpcy5ncmlkT3B0aW9ucy5nZXRDdXJyZW50UGFnZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNvdXJjZSAmJiAhdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGFzb3VyY2UgaXMgbm90IHNldCB5ZXQsIGNsZWFyIGxvYWRpbmcgc3RhdGUgYW5kIHNob3cgbm8gZGF0YVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHRhYmxlcyBmcm9tIGJlaW5nIHN0dWNrIGluIGxvYWRpbmcgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0YWJsZSBpcyBpbnNpZGUgbGlzdCB0aGVuIHRhYmxlIGRhdGFzZXQgd2lsbCBiZSBzZXQgYXMgXCJpdGVtLlhYWFwiIGFuZCB0aGVyZSBpcyBubyBkYXRhc291cmNlLlxuICAgICAgICAgICAgICAgIC8vIFNvIGV4dHJhY3RpbmcgZGF0YXNvdXJjZSBmcm9tIHRoZSBkYXRzZXQgYm91bmQgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRMaXN0ICYmICF0aGlzLmRhdGFzb3VyY2UgJiYgc3RhcnRzV2l0aCh0aGlzLmJpbmRkYXRhc2V0LCAnaXRlbScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGdldERhdGFzb3VyY2VGcm9tRXhwcih0aGlzLndpZGdldC4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyksIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZmV0Y2hpbmcgbmV4dCBwYWdlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGRhdGFzZXQgaXMgdXBkYXRlZCBmcm9tIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBmb3IgU3RhdGljIFZhcmlhYmxlcyB3aXRoIFJldGFpbiBTdGF0ZSBlbmFibGVkLCBwcmV2ZW50IFRhYmxlIGZyb20gcmVuZGVyaW5nIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTI1Mjg0XTogUmVuZGVyIHRhYmxlIHRoYXQgaXMgaW5zaWRlIGxpc3Qgd2lkZ2V0IGFuZCBib3VuZCB0byBzdGF0aWMgVmFyaWFibGVcbiAgICAgICAgICAgICAgICBpZiAoIShnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHx8ICh0aGlzLnBhcmVudExpc3QgJiYgc3RhcnRzV2l0aCh0aGlzLmJpbmRkYXRhc2V0LCAnaXRlbScpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndhdGNoVmFyaWFibGVEYXRhU2V0KG52KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaWx0ZXJtb2RlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdmaWx0ZXJtb2RlJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VhcmNobGFiZWwnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlYXJjaExhYmVsJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmF2aWdhdGlvbic6XG4gICAgICAgICAgICAgICAgaWYgKG52ID09PSAnQWR2YW5jZWQnKSB7IC8vIFN1cHBvcnQgZm9yIG9sZGVyIHByb2plY3RzIHdoZXJlIG5hdmlnYXRpb24gdHlwZSB3YXMgYWR2YW5jZWQgaW5zdGVhZCBvZiBjbGFzaWNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChudiAhPT0gJ05vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd25hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCduYXZpZ2F0aW9uJywgdGhpcy5uYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVtYW5kTG9hZCA9IG52ID09PSBOQVZJR0FUSU9OX1RZUEUuT05ERU1BTkQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmZTY3JvbGwgPSBudiA9PT0gTkFWSUdBVElPTl9UWVBFLlNDUk9MTCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncmlkZmlyc3Ryb3dzZWxlY3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JpZGNsYXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2Nzc0NsYXNzTmFtZXMuZ3JpZCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vZGF0YW1lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnZGF0YVN0YXRlcy5ub2RhdGEnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsb2FkaW5nZGF0YW1zZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdkYXRhU3RhdGVzLmxvYWRpbmcnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsb2FkaW5naWNvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdsb2FkaW5naWNvbicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNpbmcnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnc3BhY2luZycsIG52KTtcbiAgICAgICAgICAgICAgICBpZiAobnYgPT09ICdjb25kZW5zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNpemUgPSAnc21hbGwnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNpemUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdleHBvcnRmb3JtYXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBvcHRpb25zIGZvciBleHBvcnQgZHJvcCBkb3duIG1lbnVcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChzcGxpdChudiwgJywnKSwgdHlwZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogZXhwb3J0SWNvbk1hcHBpbmdbdHlwZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93bmV3cm93JzpcbiAgICAgICAgICAgICAgICAvLyBFbmFibGUgbmV3IHJvdyBpZiBzaG93bmV3IGlzIHRydWUgb3IgYWRkTmV3Um93IGJ1dG9uIGlzIHByZXNlbnRcbiAgICAgICAgICAgICAgICBlbmFibGVOZXdSb3cgPSBudiB8fCBzb21lKHRoaXMuYWN0aW9ucywgYWN0ID0+IGluY2x1ZGVzKGFjdC5hY3Rpb24sICdhZGROZXdSb3coKScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2FjdGlvbnNFbmFibGVkLm5ldycsIGVuYWJsZU5ld1Jvdyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYWdlc2l6ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IG52OyAvLyBtYWludGFpbiBkZWZhdWx0IHBhZ2Ugc2l6ZSB0byBjYWxjdWxhdGUgcGFnZXNpemUgb3B0aW9uc1xuICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnZVNpemUobnYpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjdXJyZW50cGFnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2N1cnJlbnRwYWdlJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25kZW1hbmRtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcub24tZGVtYW5kLWRhdGFncmlkID4gYScpLnRleHQobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm9uZGVtYW5kbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWxsb3dwYWdlc2l6ZWNoYW5nZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLmFsbG93cGFnZXNpemVjaGFuZ2UgPSBudjtcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZXNpemVvcHRpb25zID0gdGhpcy5zYW5pdGl6ZUNvbW1hU2VwYXJhdGVkSW50ZWdlcnModGhpcy5wYWdlc2l6ZW9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucyA9IHBhZ2VzaXplb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZW9wdGlvbnMgPSBwYWdlc2l6ZW9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdlU2l6ZSh0aGlzLnBhZ2VzaXplIHx8IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5ncmlkT3B0aW9ucy5nZXRQYWdlU2l6ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYWdlc2l6ZW9wdGlvbnMnOlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG92KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuZ3JpZE9wdGlvbnMucGFnZXNpemVvcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnZVNpemUodGhpcy5wYWdlc2l6ZSB8fCB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMuZ3JpZE9wdGlvbnMuZ2V0UGFnZVNpemUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSAhPT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9uUGFnZVNpemVDaGFuZ2UodW5kZWZpbmVkLCB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zWzBdIHx8IHRoaXMucGFnZXNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvd2hlYWRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2hvd0hlYWRlcicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3doZWFkZXInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3Nob3dIZWFkZXInLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmFibGVzb3J0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdlbmFibGVTb3J0JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5hYmxlY29sdW1uc2VsZWN0aW9uJzpcbiAgICAgICAgICAgICAvLyAgIHRoaXMuZW5hYmxlY29sdW1uc2VsZWN0aW9uID0gbnY7XG4gICAgICAgICAgICAgICAgLy90aGlzLmdyaWRPcHRpb25zLmVuYWJsZUNvbHVtblNlbGVjdGlvbiA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2VuYWJsZUNvbHVtblNlbGVjdGlvbicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzcm93c2VsZWN0YWJsZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNyb3dzZWxlY3RhYmxlJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbXVsdGlzZWxlY3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ211bHRpc2VsZWN0JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW9zZWxlY3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3Nob3dSYWRpb0NvbHVtbicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ211bHRpc2VsZWN0dGl0bGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ211bHRpc2VsZWN0dGl0bGUnLCBudik7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tdWx0aXNlbGVjdHRpdGxlID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtdWx0aXNlbGVjdGFyaWFsYWJlbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignbXVsdGlzZWxlY3RhcmlhbGFiZWwnLCBudik7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tdWx0aXNlbGVjdGFyaWFsYWJlbCA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW9zZWxlY3R0aXRsZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbigncmFkaW9zZWxlY3R0aXRsZScsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJhZGlvc2VsZWN0dGl0bGUgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JhZGlvc2VsZWN0YXJpYWxhYmVsJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdyYWRpb3NlbGVjdGFyaWFsYWJlbCcsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJhZGlvc2VsZWN0YXJpYWxhYmVsID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWV3bGVzc21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMudmlld2xlc3NtZXNzYWdlID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzaG93Jyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlY29tcHV0ZSBsYXlvdXQgbm93IHRoYXQgdGhlIHRhYmxlIGlzIHZpc2libGUgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YWdyaWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZHJhdyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hpZGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFBhZ2VTaXplKG52OiBhbnkpe1xuICAgICAgICBsZXQgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLmdldE5vcm1hbGl6ZWRQYWdlU2l6ZU9wdGlvbnNBcnJheSh0aGlzLnBhZ2VzaXplb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1BhZ2VTaXplT3B0aW9uc0NoYW5nZWQoKSAmJiBub3JtYWxpemVkUGFnZVNpemVPcHRpb25zLmxlbmd0aCkgeyAvLyBpZiBwYWdlc2l6ZSBvcHRpb25zIGFyZSBjaGFuZ2VkLCB0aGVuIHVwZGF0ZSB0aGUgcGFnZXNpemUgd2l0aG91dCBjaGVja2luZyBmb3Igc3RhdGVwZXJzaXN0ZW5jZVxuICAgICAgICAgICAgICAgIG52ID0gbm9ybWFsaXplZFBhZ2VTaXplT3B0aW9uc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzaXplID0gbnY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJykpIHtcbiAgICAgICAgICAgICAgICBudiA9IGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZSA9IG52OyAvLyB1cGRhdGluZyB0aGUgZGVmYXVsdCBwYWdlc2l6ZSB0byB1c2VyIHNlbGVjdGVkIHBhZ2VzaXplXG4gICAgICAgICAgICB9ZWxzZSBpZiAodGhpcy5wYWdlc2l6ZW9wdGlvbnMgJiYgbm9ybWFsaXplZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBudiA9IG5vcm1hbGl6ZWRQYWdlU2l6ZU9wdGlvbnNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZSA9IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVkUGFnZVNpemUgPSBudjtcbiAgICAgICAgICAgIGlmKHRoaXMuaXNQYWdlU2l6ZU9wdGlvbnNDaGFuZ2VkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IG5vcm1hbGl6ZWRQYWdlU2l6ZU9wdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRhdGFOYXZpZ2F0b3IuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtYXhSZXN1bHRzOiBudlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0Lm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgaWYodGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1BhZ2VTaXplT3B0aW9uc0NoYW5nZWQoKSB7XG4gICAgICAgIHJldHVybiAhaXNFcXVhbCh0aGlzLnByZXZQYWdlc2l6ZW9wdGlvbnMsIHRoaXMucGFnZXNpemVvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzZWxlY3RQYWdlU2l6ZShwYWdlc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmKCF0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIXBhZ2VzaXplKSByZXR1cm47XG5cbiAgICAgICAgaWYocGFnZXNpemUgPCB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zWzBdIHx8IHBhZ2VzaXplID4gdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9uc1t0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICB8fCAhdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9ucy5pbmNsdWRlcyhOdW1iZXIocGFnZXNpemUpKSkge1xuICAgICAgICAgICAgcGFnZXNpemUgPSB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zWzBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vblBhZ2VTaXplQ2hhbmdlKHVuZGVmaW5lZCwgcGFnZXNpemUpO1xuICAgIH1cblxuICAgIHNhbml0aXplQ29tbWFTZXBhcmF0ZWRJbnRlZ2VycyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcnI7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgYXJyID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gaW5wdXQudHJpbSgpO1xuICAgICAgICAgICAgaWYgKHRyaW1tZWQuc3RhcnRzV2l0aChcIltcIikgJiYgdHJpbW1lZC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhcnIgPSBKU09OLnBhcnNlKHRyaW1tZWQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyciA9IHRyaW1tZWQuc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxdWVOdW1iZXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgICAgICAgYXJyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAodiA9PiBTdHJpbmcodikudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gL14tP1xcZCskLy50ZXN0KHYpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHYgPT4gTWF0aC5hYnMocGFyc2VJbnQodiwgMTApKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgam9pbmVkID0gdW5pcXVlTnVtYmVycy5qb2luKFwiLFwiKTtcbiAgICAgICAgcmV0dXJuIGpvaW5lZCB8fCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuICAgIH1cblxuICAgIGdldE5vcm1hbGl6ZWRQYWdlU2l6ZU9wdGlvbnNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUNvbW1hU2VwYXJhdGVkSW50ZWdlcnMoaW5wdXQpXG4gICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChOdW1iZXIpXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gIWlzTmFOKHYpKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5vbkRhdGFTb3VyY2VDaGFuZ2UgJiYgY29sLm9uRGF0YVNvdXJjZUNoYW5nZS5iaW5kKGNvbCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hSb3dGaWx0ZXJEYXRhRnJvbURhdGFzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcm1vZGUgIT09ICdtdWx0aWNvbHVtbicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmxvYWRGaWx0ZXJEYXRhICYmIGNvbC5sb2FkRmlsdGVyRGF0YS5iaW5kKGNvbCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aW9uUm93VmFycygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dQYWdlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dJbmRleCcsIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd1BhZ2UnLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0R3JpZERpbWVuc2lvbnMnLCAnd2lkdGgnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoZWlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRHcmlkRGltZW5zaW9ucycsICdoZWlnaHQnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZUFjdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuaGVhZGVyID0gW107XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuZm9vdGVyID0gW107XG4gICAgICAgIGZvckVhY2godGhpcy5hY3Rpb25zLCAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uLCAnaGVhZGVyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3Rpb25zLmhlYWRlci5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uLCAnZm9vdGVyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3Rpb25zLmZvb3Rlci5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmVuZGVyIHRoZSBmaWx0ZXIgcm93LlxuICAgIHJlbmRlckR5bmFtaWNGaWx0ZXJDb2x1bW4oZmlsdGVUZW1SZWYpIHtcbiAgICAgICAgLy8gRm9yIGR5bmFtaWMgdGFibGUgbWFudWFsbHkgcHVzaGluZyB0aGUgZmlsdGVydGVtcGxhdGVSZWYgYXMgdGVtcGxhdGVSZWYgd2lsbCBub3QgYmUgYXZhaWxhYmxlIHByaW9yLlxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgKHRoaXMuZmlsdGVyVG1wbCBhcyBhbnkpLl9yZXN1bHRzLnB1c2goZmlsdGVUZW1SZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb2x1bW5zKHRhYmxlQ29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi5tb2JpbGVEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnRhYmxldERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnBjRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVDb2x1bW5bJ3ByaW1hcnkta2V5J10pIHtcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUtleS5wdXNoKHRhYmxlQ29sdW1uLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRGVmc1tjb2xJbmRleF0gPSB0YWJsZUNvbHVtbjtcbiAgICAgICAgY29uc3QgY29sQ291bnQgPSB0aGlzLmZpZWxkRGVmcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5wdXNoKHRhYmxlQ29sdW1uKTtcbiAgICAgICAgdGhpcy5yb3dGaWx0ZXJbdGFibGVDb2x1bW4uZmllbGRdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbY29sLmZpZWxkXSA9IGNvbDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIGR5bmFtaWMgZGF0YXRhYmxlIGFuZCBsYXN0IGNvbHVtbiwgcGFzcyB0aGUgY29sdW1ucyB0byBqcXVlcnkgZGF0YXRhYmxlXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlICYmIGNvbENvdW50ID09PSB0aGlzLm5vT2ZDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2NvbERlZnMnLCB0aGlzLmZpZWxkRGVmcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1GaWVsZChuYW1lLCBmb3JtRmllbGQpIHtcbiAgICAgICAgdGhpcy5mb3JtZmllbGRzW25hbWVdID0gZm9ybUZpZWxkO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyQWN0aW9ucyh0YWJsZUFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbik7XG4gICAgICAgIHRoaXMucG9wdWxhdGVBY3Rpb25zKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3codGFibGVSb3csIHJvd0luc3RhbmNlKSB7XG4gICAgICAgIHRoaXMucm93RGVmID0gdGFibGVSb3c7XG4gICAgICAgIHRoaXMucm93SW5zdGFuY2UgPSByb3dJbnN0YW5jZTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0V4cGFuZEljb24nLCB0aGlzLnJvd0RlZi5leHBhbmRpY29uKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0NvbGxhcHNlSWNvbicsIHRoaXMucm93RGVmLmNvbGxhcHNlaWNvbik7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RXhwYW5zaW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RGVmID0gdGhpcy5yb3dEZWY7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3dBY3Rpb25zKHRhYmxlUm93QWN0aW9uKSB7XG4gICAgICAgIHRoaXMucm93QWN0aW9ucy5wdXNoKHRhYmxlUm93QWN0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RJdGVtKGl0ZW0sIGRhdGEpIHtcbiAgICAgICAgLyogc2VydmVyIGlzIG5vdCB1cGRhdGluZyBpbW1lZGlhdGVseSwgc28gc2V0IHRoZSBzZXJ2ZXIgZGF0YSB0byBzdWNjZXNzIGNhbGxiYWNrIGRhdGEgKi9cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICBpdGVtID0gb21pdEJ5KGl0ZW0sICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSAmJiBpc0VtcHR5KHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZWxlY3RSb3cnLCBpdGVtLCB0cnVlKTtcbiAgICB9XG4gICAgLyogZGVzZWxlY3QgdGhlIGdpdmVuIGl0ZW0qL1xuICAgIGRlc2VsZWN0SXRlbShpdGVtKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdkZXNlbGVjdFJvdycsIGl0ZW0pO1xuICAgIH1cblxuICAgIG9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IG52O1xuICAgICAgICB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQodGhpcy5nZXRTb3J0RXhwcigpKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2xpZW50U2VhcmNoKSB7XG4gICAgICAgICAgICBkYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuX19mdWxsRGF0YSk7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoZGF0YSkgJiYgIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXS4kJHdtU291cmNlTGlzdEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgdGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy5zb3J0SW5mbyk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnY7XG4gICAgfVxuXG4gICAgdG9nZ2xlTWVzc2FnZShzaG93LCB0eXBlLCBtc2csIGhlYWRlcj8pIHtcbiAgICAgICAgaWYgKHNob3cgJiYgbXNnKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnlBcHAobXNnLCB0eXBlLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0KCRpdGVtKSB7XG4gICAgICAgIGxldCBmaWx0ZXJGaWVsZHM7XG4gICAgICAgIGNvbnN0IHNvcnRPcHRpb25zID0gaXNFbXB0eSh0aGlzLnNvcnRJbmZvKSA/ICcnIDogdGhpcy5zb3J0SW5mby5maWVsZCArICcgJyArIHRoaXMuc29ydEluZm8uZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0ge307XG4gICAgICAgIGxldCBpc1ZhbGlkO1xuICAgICAgICBsZXQgcmVxdWVzdERhdGE7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goZmllbGREZWYgPT4ge1xuICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGUgcm93IG9wZXJhdGlvbiBhY3Rpb25zIGNvbHVtbiB0byB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5maWVsZCA9PT0gUk9XX09QU19GSUVMRCB8fCAhZmllbGREZWYuc2hvdykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAnaGVhZGVyJzogZmllbGREZWYuZGlzcGxheU5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiBjb2x1bW4gaGFzIGV4cG9ydGV4cHJlc3Npb24sIHRoZW4gc2VuZCBmb3JtIHRoZSBleHByZXNzaW9uIGFzIHJlcXVpcmVkIGJ5IGJhY2tlbmQuXG4gICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2VuZCB0aGUgZmllbGQgbmFtZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5leHBvcnRleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5leHByZXNzaW9uID0gZmllbGREZWYuZXhwb3J0ZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5maWVsZCA9IGZpZWxkRGVmLmZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uc1tmaWVsZERlZi5maWVsZF0gPSBvcHRpb247XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh0aGlzLmZpbHRlckluZm8pO1xuICAgICAgICByZXF1ZXN0RGF0YSA9IHtcbiAgICAgICAgICAgIG1hdGNoTW9kZSA6ICdhbnl3aGVyZWlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IHNvcnRPcHRpb25zLFxuICAgICAgICAgICAgZXhwb3J0VHlwZSA6ICRpdGVtLmxhYmVsLFxuICAgICAgICAgICAgbG9naWNhbE9wIDogJ0FORCcsXG4gICAgICAgICAgICBleHBvcnRTaXplIDogdGhpcy5leHBvcnRkYXRhc2l6ZSxcbiAgICAgICAgICAgIGNvbHVtbnMgOiBjb2x1bW5zXG4gICAgICAgIH07XG4gICAgICAgIGlzVmFsaWQgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWV4cG9ydCcsIHskZGF0YTogcmVxdWVzdERhdGF9KTtcbiAgICAgICAgaWYgKGlzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdERhdGEuZmllbGRzID0gdmFsdWVzKHJlcXVlc3REYXRhLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5ET1dOTE9BRCwge2RhdGE6IHJlcXVlc3REYXRhfSk7XG4gICAgfVxuXG4gICAgZXhwYW5kUm93KHJvd0lkKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdleHBhbmRSb3cnLCByb3dJZCk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VSb3cocm93SWQpIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2NvbGxhcHNlUm93Jywgcm93SWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RvY3VtZW50Q2xpY2tCaW5kKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0ICR0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIC8vIElmIGNsaWNrIHRyaWdnZXJlZCBmcm9tIHNhbWUgZ3JpZCBvciBhIGRpYWxvZywgZG8gbm90IHNhdmUgdGhlIHJvd1xuICAgICAgICBpZiAodGhpcy4kZWxlbWVudFswXS5jb250YWlucygkdGFyZ2V0KSB8fCBldmVudC50YXJnZXQuZG9jdHlwZSB8fCBpc0lucHV0Qm9keVdyYXBwZXIoJCgkdGFyZ2V0KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2F2ZVJvdycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZHJhdyhmb3JjZVJlbmRlcikge1xuICAgICAgICBpZiAoZm9yY2VSZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSh0aGlzLmdyaWRPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKGZvcmNlUmVuZGVyID09PSBmYWxzZSA/ICdyZWZyZXNoQ29sdW1uV2lkdGhzJyA6ICdzZXRDb2xHcm91cFdpZHRocycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhZGRPclJlbW92ZVNjcm9sbCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGV4cHJlc3Npb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV2ZW50KGV4cHJlc3Npb24pO1xuICAgICAgICBmbih0aGlzLnZpZXdQYXJlbnQsIE9iamVjdC5hc3NpZ24odGhpcy5jb250ZXh0LCB7JGV2ZW50fSkpO1xuICAgIH1cblxuICAgIC8vIGNoYW5nZSBhbmQgYmx1ciBldmVudHMgYXJlIGFkZGVkIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lICE9PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQodGhpcy5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIGNhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJpZ2dlclVwbG9hZEV2ZW50KCRldmVudCwgZXZlbnROYW1lLCBmaWVsZE5hbWUsIHJvdykge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHskZXZlbnQsIHJvd307XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcGFyYW1zLm5ld1ZhbCA9ICRldmVudC50YXJnZXQuZmlsZXM7XG4gICAgICAgICAgICBwYXJhbXMub2xkVmFsID0gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uX29sZFVwbG9hZFZhbDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLl9vbGRVcGxvYWRWYWwgPSBwYXJhbXMubmV3VmFsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLmludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRm9ybVdpZGdldCgpIHt9XG5cbiAgICAvLyBGb3JtIGNvbnRyb2wgYWNjZXNzb3IgbWV0aG9kcy4gVGhpcyB3aWxsIGJlIHVzZWQgZm9yIHRhYmxlIGluc2lkZSBmb3JtXG4gICAgd3JpdGVWYWx1ZSgpIHt9XG5cbiAgICBwcml2YXRlIF9vbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRldGFjaCgpO1xuICAgICAgICBpZiAoZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmICh0aXRsZSB8fCBzdWJoZWFkaW5nIHx8IGljb25jbGFzcyB8fCBleHBvcnRPcHRpb25zLmxlbmd0aCB8fCBfYWN0aW9ucy5oZWFkZXIubGVuZ3RoKSB7XG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgQGlmIChpY29uY2xhc3MpIHtcbiAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24ge3tpY29uY2xhc3N9fVwiPjwvaT5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbaW5uZXJIVE1MXT1cInN1YmhlYWRpbmdcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChleHBvcnRPcHRpb25zLmxlbmd0aCB8fCBfYWN0aW9ucy5oZWFkZXIubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1hY3Rpb25zIGFwcC1kYXRhZ3JpZC1hY3Rpb25zXCI+XG4gICAgICAgICAgQGZvciAoYnRuIG9mIF9hY3Rpb25zLmhlYWRlcjsgdHJhY2sgYnRuOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnRuLndpZGdldFR5cGUgPT09ICdidXR0b24nID8gYnV0dG9uUmVmIDogYW5jaG9yUmVmXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntidG46YnRufVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiY3JlYXRlQ3VzdG9tSW5qZWN0b3IoJ2FjdGlvbnNfaGVhZGVyXycgKyBpbmRleCwge2J0bjpidG59KVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZXhwb3J0T3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgd21NZW51IGRyb3Bkb3duIGNhcHRpb24uYmluZD1cImFwcExvY2FsZS5MQUJFTF9FWFBPUlRcIiAgYXV0b2Nsb3NlPVwiYWx3YXlzXCIgYXR0ci5uYW1lPVwie3tuYW1lfX0tZXhwb3J0XCJcbiAgICAgICAgICAgIGRhdGFzZXQuYmluZD1cImV4cG9ydE9wdGlvbnNcIiBzZWxlY3QuZXZlbnQ9XCJleHBvcnQoJGl0ZW0pXCIgbWVudXBvc2l0aW9uPVwiZG93bixsZWZ0XCI+PC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2gzPlxuICA8L2Rpdj5cbn1cbjxkaXYgY2xhc3M9XCJhcHAtZGF0YWdyaWRcIiAjZGF0YWdyaWRFbGVtZW50PjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicGFuZWwtZm9vdGVyIGNsZWFyZml4XCIgW2hpZGRlbl09XCIhX2FjdGlvbnMuZm9vdGVyLmxlbmd0aCAmJiAoIXNob3duYXZpZ2F0aW9uIHx8IChvbkRlbWFuZExvYWQgJiYgZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSkgXCI+XG4gIDxkaXYgY2xhc3M9XCJhcHAtZGF0YWdyaWQtcGFnaW5hdG9yXCIgW2hpZGRlbl09XCIoIWRhdGFOYXZpZ2F0b3I/LmRhdGFTaXplICYmICFkYXRhTmF2aWdhdG9yLmRhdGFzb3VyY2U/LnBhZ2luYXRpb24/Lm5leHQpIHx8ICFzaG93bmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dClcIj5cbiAgICA8bmF2IHdtUGFnaW5hdGlvbiBzaG93LmJpbmQ9XCJzaG93bmF2aWdhdGlvblwiIG5hdmlnYXRpb25hbGlnbi5iaW5kPVwibmF2aWdhdGlvbmFsaWduXCJcbiAgICAgIG5hdmlnYXRpb25zaXplLmJpbmQ9XCJuYXZpZ2F0aW9uU2l6ZVwiXG4gICAgICBuYXZpZ2F0aW9uLmJpbmQ9XCJuYXZDb250cm9sc1wiIHNob3dyZWNvcmRjb3VudC5iaW5kPVwic2hvd3JlY29yZGNvdW50XCIgbWF4c2l6ZS5iaW5kPVwibWF4c2l6ZVwiXG4gICAgICBib3VuZGFyeWxpbmtzLmJpbmQ9XCJib3VuZGFyeWxpbmtzXCJcbiAgICBmb3JjZWVsbGlwc2VzLmJpbmQ9XCJmb3JjZWVsbGlwc2VzXCIgZGlyZWN0aW9ubGlua3MuYmluZD1cImRpcmVjdGlvbmxpbmtzXCI+PC9uYXY+XG4gIDwvZGl2PlxuICBAaWYgKF9hY3Rpb25zLmZvb3Rlci5sZW5ndGgpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkLWFjdGlvbnNcIj5cbiAgICAgIEBmb3IgKGJ0biBvZiBfYWN0aW9ucy5mb290ZXI7IHRyYWNrIGJ0bjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidG4ud2lkZ2V0VHlwZSA9PT0gJ2J1dHRvbicgPyBidXR0b25SZWYgOiBhbmNob3JSZWZcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiY3JlYXRlQ3VzdG9tSW5qZWN0b3IoJ2FjdGlvbnNfZm9vdGVyXycgKyBpbmRleCwge2J0bjpidG59KVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uUmVmIGxldC1idG49XCJidG5cIj5cbiAgPGJ1dHRvbiB3bUJ1dHRvbiBjYXB0aW9uLmJpbmQ9XCJidG4uZGlzcGxheU5hbWVcIiBzaG93LmJpbmQ9XCJidG4uc2hvd1wiIGNsYXNzLmJpbmQ9XCJidG4uY2xhc3NcIiAgaWNvbmNsYXNzLmJpbmQ9XCJidG4uaWNvbmNsYXNzXCIgKGNsaWNrKT1cImludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgYnRuLmFjdGlvbilcIlxuICAgIFtuZ0NsYXNzXT1cInsnYnRuLXNtJzogc3BhY2luZyA9PT0gJ2NvbmRlbnNlZCcsICdkaXNhYmxlZC1uZXcnOiBidG4ua2V5ID09PSAnYWRkTmV3Um93JyAmJiAoaXNHcmlkRWRpdE1vZGUgfHwgaXNMb2FkaW5nKX1cIlxuICB0eXBlPVwiYnV0dG9uXCIgc2hvcnRjdXRrZXkuYmluZD1cImJ0bi5zaG9ydGN1dGtleVwiIHRhYmluZGV4LmJpbmQ9XCJidG4udGFiaW5kZXhcIiBoaW50LmJpbmQ9XCJidG4udGl0bGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImJ0bi5kaXNwbGF5TmFtZVwiIGRpc2FibGVkLmJpbmQ9XCJidG4uZGlzYWJsZWRcIiBjb25kaXRpb25hbGNsYXNzLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxjbGFzc1wiIGNvbmRpdGlvbmFsc3R5bGUuYmluZD1cImJ0bi5jb25kaXRpb25hbHN0eWxlXCI+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FuY2hvclJlZiBsZXQtYnRuPVwiYnRuXCI+XG4gIDxhIHdtQW5jaG9yIGNhcHRpb24uYmluZD1cImJ0bi5kaXNwbGF5TmFtZVwiIHNob3cuYmluZD1cImJ0bi5zaG93XCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiICBpY29uY2xhc3MuYmluZD1cImJ0bi5pY29uY2xhc3NcIiAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiXG4gICAgW25nQ2xhc3NdPVwieydidG4tc20nOiBzcGFjaW5nID09PSAnY29uZGVuc2VkJywgJ2Rpc2FibGVkLW5ldyc6IGJ0bi5rZXkgPT09ICdhZGROZXdSb3cnICYmIChpc0dyaWRFZGl0TW9kZSB8fCBpc0xvYWRpbmcpfVwiXG4gICAgc2hvcnRjdXRrZXkuYmluZD1cImJ0bi5zaG9ydGN1dGtleVwiIHRhYmluZGV4LmJpbmQ9XCJidG4udGFiaW5kZXhcIiBoaW50LmJpbmQ9XCJidG4udGl0bGVcIlxuICBoeXBlcmxpbmsuYmluZD1cImJ0bi5oeXBlcmxpbmtcIiB0YXJnZXQuYmluZD1cImJ0bi50YXJnZXRcIiBjb25kaXRpb25hbGNsYXNzLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxjbGFzc1wiIGNvbmRpdGlvbmFsc3R5bGUuYmluZD1cImJ0bi5jb25kaXRpb25hbHN0eWxlXCI+PC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBoaWRkZW4+XG4gIDxuZy1jb250YWluZXIgI211bHRpQ29sdW1uRmlsdGVyVmlldz48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICNpbmxpbmVFZGl0Vmlldz48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICNpbmxpbmVFZGl0TmV3Vmlldz48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICNyb3dBY3Rpb25zVmlldz48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICNyb3dFeHBhbnNpb25BY3Rpb25WaWV3PjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgI2N1c3RvbUV4cHJWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgI2R5bmFtaWNUYWJsZT48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICNyb3dEZXRhaWxWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgY2xhc3M9XCJkeW5hbWljLXRhYmxlLWNvbnRhaW5lclwiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
|