@churchillliving/se-ui-toolkit 6.53.521 → 6.53.523
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/churchillliving-se-ui-toolkit.umd.js +19 -8
- package/bundles/churchillliving-se-ui-toolkit.umd.js.map +1 -1
- package/churchillliving-se-ui-toolkit.metadata.json +1 -1
- package/esm2015/lib/components/base/form/form.component.js +9 -6
- package/esm2015/lib/components/base/grid/grid.component.js +12 -4
- package/fesm2015/churchillliving-se-ui-toolkit.js +19 -8
- package/fesm2015/churchillliving-se-ui-toolkit.js.map +1 -1
- package/lib/components/base/form/form.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -470,15 +470,18 @@ export class FormComponent {
|
|
|
470
470
|
*/
|
|
471
471
|
sectionDisabled(formSection) {
|
|
472
472
|
if (formSection.disabled) {
|
|
473
|
-
|
|
474
|
-
field.disabled = true;
|
|
475
|
-
});
|
|
476
|
-
return formSection;
|
|
473
|
+
return this.disabledSectionFields(formSection, true);
|
|
477
474
|
}
|
|
478
475
|
else {
|
|
479
|
-
return formSection;
|
|
476
|
+
return this.disabledSectionFields(formSection, false);
|
|
480
477
|
}
|
|
481
478
|
}
|
|
479
|
+
disabledSectionFields(formSection, disabled) {
|
|
480
|
+
formSection.fields.map((field) => {
|
|
481
|
+
field.disabled = disabled;
|
|
482
|
+
});
|
|
483
|
+
return formSection;
|
|
484
|
+
}
|
|
482
485
|
loadIFrame(formField) {
|
|
483
486
|
var _a, _b, _c;
|
|
484
487
|
this.handleClickEvent(formField);
|
|
@@ -1139,4 +1142,4 @@ FormComponent.propDecorators = {
|
|
|
1139
1142
|
dynamicComponentContainer: [{ type: ViewChildren, args: ['dynamicComponentContainer', { read: ViewContainerRef },] }],
|
|
1140
1143
|
beforeunloadHandler: [{ type: HostListener, args: ['window:beforeunload', ['$event'],] }]
|
|
1141
1144
|
};
|
|
1142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFvQixnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ3BOLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBMEMsVUFBVSxFQUE2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3JKLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NB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QUs7bUJBQ0wsS0FBSzs2QkFDTCxLQUFLOytCQUNMLEtBQUs7MEJBQ0wsS0FBSztzQkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBS0wsTUFBTTt5QkFDTixNQUFNO2tDQUNOLE1BQU07a0NBQ04sTUFBTTt3Q0FFTixZQUFZLFNBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7a0NBeUNwRSxZQUFZLFNBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQ29tcG9uZW50RmFjdG9yeSwgVmlld0NvbnRhaW5lclJlZiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IE5vdGVzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL25vdGVzL25vdGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFRm9ybUNvbnRyb2wsIEVIeXBlcmxpbmssIElGb3JtRmllbGQsIElEeW5hbWljRm9ybSwgSUZvcm1TZWN0aW9uLCBFVmFsaWRhdG9yLCBJRHluYW1pY0NhcmQsIElGb3JtQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc3RpY2t5QWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGZvcm06IElEeW5hbWljRm9ybTtcbiAgQElucHV0KCkgaGlkZVNhdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZUNhbmNlbEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQnV0dG9uczogSUZvcm1CdXR0b25bXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KCkgc2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxJRm9ybVNlY3Rpb25bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxGb3JtOiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZHJvcERvd25DaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWN0aW9uQ2xpY2tlZEV2ZW50OiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkcmVuKCdkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGR5bmFtaWNDb21wb25lbnRDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICBkeW5hbWljQ2FzZSA9IEVGb3JtQ29udHJvbDtcbiAgcGVybWlzc2lvblR5cGUgPSBFUGVybWlzc2lvblR5cGU7XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0Zvcm1EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0Zvcm1IaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29tcG9uZW50c0xpc3Q6IElEaWN0aW9uYXJ5W10gPSBbXTtcbiAgZmlsZVVwbG9hZFVybHM6IGFueTtcbiAgc2hvd2ZpbGVVcGxvYWRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBjYXJkTGlzdDogSUR5bmFtaWNDYXJkO1xuICBjYWxlbmRlclByZXZpb3VzVmFsdWU6IHN0cmluZyA9ICcnO1xuICBkZWZhdWx0RGF0ZTogc3RyaW5nID0gJyc7XG4gIGxvb2t1cEZvY3VzT3V0OiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSAnbW0vZGQveXknO1xuICBzZXRDYXJkRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyBhcHBseSBjaGVja2VkL3VuQ2hlY2tlZCBwcm9wIGZvciBDaGVja0JveCBvZiB0aGUgRm9ybVxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAvLyBicm93c2VyIHRhYiBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0IHx8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gc3RhcnQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGxldCBmb3JtVmFsdWVzID0geyAuLi50aGlzLmZvcm0gfTtcbiAgICAgIGZvcm1WYWx1ZXMuZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5pc1Bhc3N3b3JkKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byBkYXRlXG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmaWVsZD8ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgZmllbGRbJ3ByZXZpb3VzVmFsdWUnXSA9IGZpZWxkPy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZD8udGltZU9ubHkgJiZcbiAgICAgICAgICAgICAgKGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fFxuICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlICYmXG4gICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQ/LnZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAodmFsdWU6IGFueSkgPT4gdmFsdWVbZmllbGQ/LmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykgfHxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnLCcsICc7JylcbiAgICAgICAgICAgICAgICAgID8uc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgICAgPy5tYXAoKHZhbDogYW55KSA9PiAoeyBbZmllbGQ/LmRpc3BsYXlGaWVsZF06IHZhbCB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIG11bHRpU2VsZWN0IHN0cmluZyB2YWx1ZSBpbiBhcnJheVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBbZmllbGQudmFsdWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHt9O1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZD8uY2FyZD8uZGF0YT8uZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHguZHluYW1pY0Zvcm0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb25zOiBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm1WYWx1ZXM7XG4gICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFbmQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knIHx8XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpID09PSAnMSdcbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZm9ybVxuICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG4gICAgICB0aGlzLmFwcGx5VXNlclBlcm1pc3Npb25zKCk7XG4gICAgICB0aGlzLmFwcGx5UmVxdWlyZWRGaWVsZFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMucmVtb3ZlV2hpdGVTcGFjZXMoKTtcbiAgICAgIHRoaXMuc2V0SHlwZXJsaW5rQ29tcG9uZW50Um91dGUoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldENhbGFuZGVyV2lkdGgoKTtcbiAgICAgIH0sIDMwMDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRlciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kZXJJbnB1dFZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmb3JtRmllbGQuZmllbGQpWzBdXG4gICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICAgIGlmICh5ZWFyPy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBuZXcgRGF0ZSh2YWwudGFyZ2V0LnZhbHVlKS50b0xvY2FsZURhdGVTdHJpbmcoXG4gICAgICAgICAgICAnZW4tVVMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBwZXJjZW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuICBzZXRudW1lcmljdmFsdWVzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgKiAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgKiAxMDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJykge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgIGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZvcm0gaGFzIGFueSBmaWVsZCB3aXRoIGR5bmFtaWMgY29tcG9uZW50O1xuICAgKiBDcmVhdGVzIGNvbXBvbmVudCBpbnN0YW5jZSB1c2luZyBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICogSW5qZWN0cyBjb21wb25lbnQgdGhyb3VnaCB2aWV3UmVmLmNyZWF0ZUNvbXBvbmVudCgpXG4gICAqIFBhc3NlcyBkYXRhIHRvIGNvbXBvbmVudFxuICAgKiBTdWJzY3JpYmVzIHRvIHRoZSBldmVudHMgcGFzc2VkIHRvIHRoZSBjb21wb25lbnRzXG4gICAqIEZpbmFsbHkgZm9yY2VzIEFuZ3VsYXIgdG8gZGV0ZWNoIGNoYW5nZXNcbiAgICovXG4gIGxvYWREeW5hbWljQ29tcG9uZW50cygpIHtcbiAgICB0aGlzLmNvbXBvbmVudHNMaXN0ID0gW107XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSwgZmllbGRJbmRleCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCkge1xuICAgICAgICAgIGNvbnN0IHZpZXdSZWY6IGFueSA9IHRoaXMuZHluYW1pY0NvbXBvbmVudENvbnRhaW5lci5maW5kKFxuICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgIHguZWxlbWVudC5uYXRpdmVFbGVtZW50LmlkID09IGAke2Zvcm1TZWN0aW9uLm5hbWV9LSR7ZmllbGRJbmRleH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICB9ID0gZmllbGQuY29tcG9uZW50Q29udHJvbDtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4gPVxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQ29tcG9uZW50KTtcbiAgICAgICAgICAvLyBQYXNzaW5nIGRhdGEgdG8gY29tcG9uZW50XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld1JlZj8uY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICAgICAgIGlmIChjb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNMaXN0LnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5jb21wb25lbnRDb250cm9sPy5pZCxcbiAgICAgICAgICAgICAgdmFsdWU6IGNvbXBvbmVudFJlZixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIHBhc3NlZCB0byB0aGUgY29tcG9uZW50c1xuICAgICAgICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKS5mb3JFYWNoKChbZXZlbnQsIGhhbmRsZXJdOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlW2V2ZW50XSBhcyBFdmVudEVtaXR0ZXI8YW55Pik/LnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW52b2tlIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy9pbnZva2Ugd2hlbiBmaWxlIHVwbG9hZCBPUiBkZWxldGUgYSBmaWxlXG4gIGZpbGVPbmNoYW5nZUV2ZW50KCkge1xuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgICAvLyAgIGxldCBjYXJkQ29udHJvbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKT0+IHtcbiAgICAvLyAgICAgaWYoZm9ybVNlY3Rpb24/LmZpZWxkcz8uc29tZSgoZm9ybUZpZWxkOiBhbnkpPT4gZm9ybUZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkpe1xuICAgIC8vICAgICAgIGNhcmRDb250cm9sID0gdHJ1ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgaWYoY2FyZENvbnRyb2wpe1xuICAgIC8vICAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0sIDMwMDApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGxvYWQgZHluYW1pYyBjb21wb25lbnRzIGlmIGV4aXN0IGluIGZvcm1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0bnVtZXJpY3ZhbHVlcygpO1xuICAgICAgdGhpcy5vbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKTtcbiAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgICB0aGlzLnNldENhcmRSZXNwb25zZUlkKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHNldENhcmRSZXNwb25zZUlkKCkge1xuICAgIHV0aWxpdGllcy5vbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYocmVzLmRhdGE/LmlzU2F2ZSl7XG4gICAgICAgIHRoaXMuc2V0Q2FyZElkcyhyZXMuZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldERlbGV0ZUNhcmRJZChyZXMuZGF0YT8uY2FyZERhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGVsZXRlQ2FyZElkKHVwZGF0ZWRDYXJkRGF0YTphbnkpe1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOklGb3JtU2VjdGlvbik9PntcbiAgICAgIGNvbnN0IGNhcmRDb250cm9sID0gc2VjdGlvbi5maWVsZHMuZmluZCgoZmllbGQ6SUZvcm1GaWVsZCk9PiBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICBpZihjYXJkQ29udHJvbCl7XG4gICAgICAgIGNhcmRDb250cm9sLmNhcmQuZGF0YSA9IHVwZGF0ZWRDYXJkRGF0YTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgXG4gIH1cblxuICBzZXRDYXJkSWRzKHJlcykge1xuICAgIHJlcy5yZWNvcmRzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlcy5yZWNvcmRzKTtcbiAgICByZXMucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnksIHJlY29yZEluZGV4OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoQ2FyZCA9IHJlcy5jYXJkc0luZm8/LmZpbmQoXG4gICAgICAgIChpbmZvLCBjYXJkSW5kZXgpID0+XG4gICAgICAgICAgcmVjb3JkSW5kZXggPT09IGNhcmRJbmRleCAmJiByZWNvcmRbcmVzLmZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKV1cbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hDYXJkICYmIE9iamVjdC5rZXlzKG1hdGNoQ2FyZCk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWF0Y2hDYXJkW3Jlcy5maWVsZE5hbWVdID0gcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maW5kKFxuICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgIGlmIChyZXMuY2FyZHNJbmZvPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXMuY2FyZHNJbmZvPy5mb3JFYWNoKChjYXJkSWQpID0+IHtcbiAgICAgICAgICAgICAgY2FyZElkLmlkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gcmVzLmNhcmRzSW5mbztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVdoaXRlU3BhY2VzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbi5jbGFzcykgc2VjdGlvbi5jbGFzcyA9IHNlY3Rpb24uY2xhc3MucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEh5cGVybGlua0NvbXBvbmVudFJvdXRlKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LICYmXG4gICAgICAgICAgZmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIucmVzZXRDb25maWcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRoOiAnaHlwZXJsaW5rJyArIGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IGZpZWxkLmh5cGVybGluay5jb21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5yb3V0ZXIuY29uZmlnLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGJyb3dzZXJUYWJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGV2ZW50O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKXtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIGFueSBjaGFuZ2UgaW4gRHluYW1pYyBGb3JtIGNvbXBvbmVudCBTdGF0ZVxuICAgKi9cbiAgb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdXRpbGl0aWVzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5pZCAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZk9iaiA9IHRoaXMuY29tcG9uZW50c0xpc3QuZmluZChcbiAgICAgICAgICAoeCkgPT4geC5uYW1lID09PSByZXNwb25zZS5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmT2JqKSB7XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWZPYmoudmFsdWUuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbXBvbmVudFJlZk9iai52YWx1ZS5pbnN0YW5jZS5uZ09uSW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnNcbiAgYXBwbHlVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgZGlzYWJsZWRGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvbnM6IGFueSA9IGZvcm1GaWVsZC5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGxldCBzZWN0aW9uUGVybWlzc2lvbnM6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9ucykgc2VjdGlvblBlcm1pc3Npb25zID0gZm9ybVNlY3Rpb24ucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb25zKSBwZXJtaXNzaW9ucyA9IHRoaXMuZm9ybS5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzZWN0aW9uUGVybWlzc2lvbnMgJiYgc2VjdGlvblBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgc2VjdGlvblBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5hY2NvcmRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbi5yb2xlcyAmJiBwZXJtaXNzaW9uLnJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQucGVybWlzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b3RhbEZpZWxkcysrO1xuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkRmllbGRzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGhpZGRlbkZpZWxkcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gZGlzYWJsZWRGaWVsZHM7XG4gICAgICB0aGlzLmlzRm9ybUhpZGRlbiA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gaGlkZGVuRmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIElGcmFtZSBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICBpZiAoZm9ybVNlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5tYXAoKGZpZWxkOiBJRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgIGZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybVNlY3Rpb247XG4gICAgfVxuICB9XG5cbiAgbG9hZElGcmFtZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogJ0h5cGVybGluaycsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluaz8ud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5oeXBlcmxpbms/LmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICBkYXRhOiB7IHZhbHVlOiBmb3JtRmllbGQuaHlwZXJsaW5rPy5saW5rLCBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsIH0sXG4gICAgfSk7XG4gICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhmb3JtRmllbGQ/LmZpZWxkKTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERpYWxvZyBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgaHlwZXJsaW5rRGlhbG9nKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuQkxBTkspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgd2luZG93Lm9wZW4oJ2h5cGVybGluaycgKyBmb3JtRmllbGQubGFiZWwpO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLlNFTEYpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnaHlwZXJsaW5rJyArIGZvcm1GaWVsZC5sYWJlbF0sIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuRElBTE9HKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnQsIHtcbiAgICAgICAgaGVhZGVyOiBmb3JtRmllbGQuaHlwZXJsaW5rLmRhdGE/LmhlYWRlclxuICAgICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay5kYXRhPy5oZWFkZXJcbiAgICAgICAgICA6ICcnLFxuICAgICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggOiAnJyxcbiAgICAgICAgc3R5bGU6IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGg/Jyc6IHsnbWF4LXdpZHRoJzonZml0LWNvbnRlbnQnfSxcbiAgICAgICAgaGVpZ2h0OiBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICAgIGRhdGE6IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zICAgICAgICBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGZvcm1GaWVsZC5oeXBlcmxpbms/LmNvbXBvbmVudD8ubmFtZTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHV0aWxpdGllcy5kcmFnZ2FibGVEaWFsb2coXG4gICAgICAgIGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbFxuICAgICAgKTtcbiAgICAgIGRpYWxvZy5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQub25SZXR1cm4ocmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIElmcmFtZSBvbiBMYWJlbFxuICAgKi9cbiAgbG9hZExhYmVsQ29udHJvbElGcmFtZShmb3JtRmllbGQ6IGFueSkge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKElmcmFtZUNvbXBvbmVudCwge1xuICAgICAgaGVhZGVyOiBmb3JtRmllbGQubGFiZWwubmFtZSxcbiAgICAgIHdpZHRoOiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay53aWR0aFxuICAgICAgICA/IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGhcbiAgICAgICAgOiAnOTAlJyxcbiAgICAgIGhlaWdodDogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/LmhlaWdodFxuICAgICAgICA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0XG4gICAgICAgIDogJzgwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGlua1xuICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGlua1xuICAgICAgICAgIDogJycsXG4gICAgICAgIGlGcmFtZUlkOiBmb3JtRmllbGQubGFiZWwubmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8oXG4gICAgICB0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSxcbiAgICAgICdJZnJhbWVDb21wb25lbnQnXG4gICAgKTtcbiAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsXG4gICAgKTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC5vbkNsaWNrKSB7XG4gICAgICBmb3JtRmllbGQub25DbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBmaW5kIHRoZSByZXF1aXJlZCBmaWVsZCBpbiBmb3JtXG4gICAqL1xuICBhcHBseVJlcXVpcmVkRmllbGRWYWxpZGF0aW9uKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvbnMgJiYgZmllbGQudmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbnMuZm9yRWFjaCgodmFsaWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbGlkLnR5cGUgPT09IEVWYWxpZGF0b3IuUkVRVUlSRUQpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5yZXF1aXJlZEZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldEZpbGVVcmxzKGZpbGVVcmxzOiBhbnkpIHtcbiAgICBpZiAoZmlsZVVybHMgJiYgZmlsZVVybHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWxlVXBsb2FkVXJscyA9IGZpbGVVcmxzO1xuICAgICAgdGhpcy5zaG93ZmlsZVVwbG9hZEVycm9yID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25TYXZlRm9ybSgpIHtcbiAgICBsZXQgdmFsaWRpdHkgPSB0cnVlO1xuICAgIGxldCBlcnJvck1lc3NhZ2VEZXRhaWxzID0gJyc7XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoZm9ybVNlY3Rpb24uZmllbGRzKSkge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMgPSBlcnJvck1lc3NhZ2VEZXRhaWxzXG4gICAgICAgICAgICAgICAgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBmb3JtRmllbGQuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBmaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcy5zb21lKFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5yZXF1aXJlZEZpZWxkICYmIGZpZWxkLmVycm9yTWVzc2FnZSAmJiAhZmllbGQudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWxpZGl0eSAmJiBmaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMsXG4gICAgICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHNldCB1cGxvYWRGaWxlIFVSTCBpbiBGb3JtRmllbGQgaW4gY2FzZSBvZiBGSUxFX1VQTE9BRFxuICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRklMRV9VUExPQUQpIHtcbiAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5maWxlVXBsb2FkVXJscztcblxuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zICYmIGZpZWxkLnZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHgudHlwZSA9PT0gRVZhbGlkYXRvci5SRVFVSVJFRCAmJiAhZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd2ZpbGVVcGxvYWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5jYXJkICYmIGZpZWxkLmNhcmQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWREYXRhID0gZmllbGQuY2FyZC5kYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoeDogYW55KSA9PiB4LnNlbGVjdGVkQ2FyZCAmJiB4LnNlbGVjdGVkQ2FyZC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGEgJiYgc2VsZWN0ZWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5jYXJkLmRhdGEgPSBzZWxlY3RlZERhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh2YWxpZGl0eSkge1xuICAgICAgLy8gU2F2ZSBncmlkIG9uIGZvcm1TYXZlIEJ1dHRvblxuICAgICAgY29uc3Qgc2F2ZUFsbEdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2F2ZUFsbEdyaWRWYWx1ZXMnKTtcbiAgICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9XG4gICAgICAgIHRoaXMuZWw/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NhdmVSb3cnKTtcbiAgICAgIGxldCBjdXN0b21Db21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCB0ZW1wVmFsdWU6IGFueSA9IFtdO1xuICAgICAgLy8gc2V0IHZhbHVlIGFzIDEgb3IgMCBpbiBjYXNlIG9mIGNoZWNrYm94XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzICYmIHZhbGlkaXR5KSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSA9PT0gJycgfHwgZmllbGQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgYXMgc3RyaW5nXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZC50aW1lT25seSAmJlxuICAgICAgICAgICAgICBmaWVsZC5zYXZlQXNTdHJpbmcgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnQU0nKSAmJlxuICAgICAgICAgICAgICAhZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWVsZC52YWx1ZSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGZpZWxkPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZC52YWx1ZSAvIDEwMCk/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2V0IHZhbHVlIG9mIGF1dG9Db21wbGV0ZSBhcyBzdHJpbmdzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnNob3dBbGxWYWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC52YWx1ZS5tYXAoXG4gICAgICAgICAgICAgICAgKHZhbHVlOiBhbnkpID0+IHZhbHVlW2ZpZWxkLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykgfHxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRlbXBWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlQWxsKCcsJywgJzsnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCBtdWx0aVNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1QgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgZmllbGQuc2F2ZUFzU3RyaW5nICE9PSBmYWxzZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPyAxIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNhdmUgZ3JpZCBvbiBmb3JtU2F2ZSBCdXR0b25cbiAgICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ09NUE9ORU5UICYmICFjdXN0b21Db21wb25lbnQpIHtcbiAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKHNhdmVBbGxHcmlkKSB7XG4gICAgICAgICAgICAgICAgc2F2ZUFsbEdyaWQuY2xpY2soKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGJ0biBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgICAgICAgICBidG4/LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zYXZlRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgICBzYXZlQWxsR3JpZCA/IDgwIDogMFxuICAgICAgKTtcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgICFmaWVsZC5zaG93QWxsVmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRlbXBWYWx1ZVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoJywnLCAnOycpXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnOycpXG4gICAgICAgICAgICAgICAgPy5tYXAoKHZhbDogYW55KSA9PiAoeyBbZmllbGQuZGlzcGxheUZpZWxkXTogdmFsIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PT0gMSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGZpZWxkPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIChmaWVsZC52YWx1ZSAqIDEwMCk/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsRm9ybSgpIHtcbiAgICBpZiAodGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgfHwgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZVxuICAgICAgICAuY29uZmlybSh7XG4gICAgICAgICAga2V5OiAnY2FuY2VsQnV0dG9uJyxcbiAgICAgICAgICBtZXNzYWdlOiAnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT8nLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc1swXS5kZXRhaWwgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICAgICAgICB1dGlsaXRpZXMucmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICB1dGlsaXRpZXMucmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLnZhbHVlKSB7XG4gICAgICBmb3JtRmllbGQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBjYWxlbmRlciB3aWR0aFxuICAgKi9cbiAgc2V0Q2FsYW5kZXJXaWR0aCgpIHtcbiAgICBjb25zdCBjYWxhbmRlckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucC1jYWxlbmRhcicpO1xuICAgIGxldCBmb3JtOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdmb3JtJyk7XG4gICAgbGV0IHdpZHRoID0gZm9ybT8uY2xpZW50V2lkdGg7XG4gICAgY2FsYW5kZXJFbGVtZW50Py5mb3JFYWNoKChjYWxhbmRlcjogYW55KSA9PiB7XG4gICAgICBjb25zdCBjYWxhbmRlck9mc2V0TGVmdCA9IGNhbGFuZGVyLm9mZnNldExlZnQ7XG4gICAgICBpZiAoY2FsYW5kZXJPZnNldExlZnQgPD0gd2lkdGggLyAyKSB7XG4gICAgICAgIGNhbGFuZGVyLmNsYXNzTGlzdC5hZGQoJ29wZW4tcmlnaHQtc2lkZScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCB0aGUgZHluYW1pYyBkaWFsb2cgZGF0YVxuICAgKi9cbiAgc2V0RGlhbG9nRGF0YShmb3JtRmllbGQ6IElGb3JtRmllbGQsIGRhdGE6IGFueSk6IGFueSB7XG4gICAgaWYgKGRhdGEgJiYgZm9ybUZpZWxkKSB7XG4gICAgICBsZXQgdmFsdWU6IGFueTtcbiAgICAgIGRhdGEgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIoZGF0YSk7XG4gICAgICBsZXQgc2VsZWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICAgIGlmIChmb3JtRmllbGQudmFsdWUgJiYgdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0ICYmXG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlLnRleHQudG9TdHJpbmcoKS50cmltKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2VsZWN0aW9uID0gZm9ybUZpZWxkLnZhbHVlLnRleHQ/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBmb3JtRmllbGQudmFsdWU/LnZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiBmb3JtRmllbGQudmFsdWUudG9TdHJpbmcoKS50cmltKCkpIHtcbiAgICAgICAgc2VsZWN0aW9uID0gZm9ybUZpZWxkLnZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wb25lbnROYW1lID0gZGF0YS5jb21wb25lbnQ/Lm5hbWU7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgICAgICB0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSxcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZGF0YS5jb21wb25lbnQsIHtcbiAgICAgICAgLi4uZGF0YS5kYXRhLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICAgICAgZmllbGQ6IGZvcm1GaWVsZC5maWVsZCxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgdmFsdWVGaWVsZDogZGF0YS5kYXRhPy52YWx1ZUZpZWxkLFxuICAgICAgICAgIC4uLmRhdGEuZGF0YS5kYXRhLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdGFiRm9jdXNFdmVudChmb3JtRmllbGQ6IGFueSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy4nICsgZm9ybUZpZWxkLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNsaWNrICYmIGZvcm1GaWVsZC5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2xpY2soZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBsYWJlbFxuICAgKi9cbiAgc2VsZWN0TG9va3VwTGFiZWwoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFxuICAgICkge1xuICAgICAgY29uc3QgcmVmOiBhbnkgPSB0aGlzLnNldERpYWxvZ0RhdGEoXG4gICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sXG4gICAgICApO1xuICAgICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhcbiAgICAgICAgZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsXG4gICAgICApO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgZm9ybUZpZWxkPy5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgICAgICAgIGlmIChmb3JtRmllbGQubGFiZWwub25SZXR1cm4pXG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25SZXR1cm4oZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCkge1xuICAgICAgdGhpcy5sb29rdXBGb2N1c091dCA9IHRydWU7XG4gICAgICBsZXQgdmFsdWUgPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLnNldERpYWxvZ0RhdGEoZm9ybUZpZWxkLCBmb3JtRmllbGQubG9va3VwQ29udHJvbCk7XG4gICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgICBmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWxcbiAgICAgICk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZmllbGQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1GaWVsZC5maWVsZCk/LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5sb29rdXBGb2N1c091dCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikgZm9ybUZpZWxkLm9uUmV0dXJuKGZvcm1GaWVsZC52YWx1ZSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgICAgICBjb25zdCBmb3JtRmllbGRWYWx1ZSA9XG4gICAgICAgICAgICB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlLnRleHQgOiB2YWx1ZTtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb25DbGljayBldmVudCBpbnZva2VkICYmIG9wZW4gRGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGQvbGFiZWxcbiAgICovXG4gIGhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC5sb29rdXBDb250cm9sKSB7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cExhYmVsKGZvcm1GaWVsZCk7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldCBDYWxlbmRlciBEYXRlIEZvcm1hdCAmJiBzZXQgRGF0ZSBNaW51dGUgaW50ZXJ2YWxcbiAgICovXG4gIHNldENhbGVuZGVyRGF0ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUikge1xuICAgICAgLy8gY29udmVydCB0aW1lIGludG8gZGF0ZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLnRpbWVPbmx5ICYmXG4gICAgICAgIChmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKGZvcm1GaWVsZC5zaG93VGltZSB8fCBmb3JtRmllbGQudGltZU9ubHkpICYmXG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUoXG4gICAgICAgICAgdXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChmb3JtRmllbGQudmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoZm9ybUZpZWxkLnNob3dUaW1lIHx8IGZvcm1GaWVsZC50aW1lT25seSkgJiZcbiAgICAgICAgIWZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICB9XG4gIH1cbiAgY2FsZW5kYXJDaGFuZ2VWYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUgIT09IGZvcm1GaWVsZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICBmb3JtRmllbGQucHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgc2VjdGlvbiBDbGlja2VkIGV2ZW50XG4gICAqL1xuICBjbGlja2VkU2VjdGlvbihzZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICB0aGlzLnNlY3Rpb25DbGlja2VkRXZlbnQuZW1pdChzZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBpbiBOb3RlX0ZpZWxkIGNvbnJ0cm9sXG4gICAqL1xuICBoYW5kbGVOb3RlRmllbGREaWFsb2coZm9ybWZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oTm90ZXNDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybWZpZWxkLmxhYmVsIGFzIHN0cmluZyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1maWVsZC52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWRUZXh0OiBmb3JtZmllbGQuZGlzYWJsZWRUZXh0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgZm9ybWZpZWxkPy5maWVsZCA/IGZvcm1maWVsZD8uZmllbGQgOiBmb3JtZmllbGQ/LmxhYmVsXG4gICAgKTtcbiAgICBkaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGZvcm1maWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1maWVsZC5vblJldHVybihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRDbGFzc05hbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKTogc3RyaW5nIHtcbiAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikgcmV0dXJuICcgaGlkZGVuJztcbiAgICBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIGF1dG9TZWFyY2goZXZlbnQ6IGFueSwgZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGV2ZW50KSB7XG4gICAgICBmb3JtRmllbGQub25SZXR1cm4oZXZlbnQucXVlcnksIGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgb25Gb2N1c091dCBFdmVudFxuICAgKi9cbiAgb25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGxldCByZWNvcmQ6IGFueSA9IHt9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgcmVjb3JkW2Zvcm1GaWVsZC5maWVsZF0gPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHV0aWxpdGllcy5zZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZCwgdGhpcy5mb3JtKTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uRm9jdXNPdXQgJiYgdGhpcy5sb29rdXBGb2N1c091dCA9PT0gZmFsc2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkZvY3VzT3V0KGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrU3BhY2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAodHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0ID0gZm9ybUZpZWxkLnZhbHVlLnRleHQuc3Vic3RyaW5nKFxuICAgICAgICAwLFxuICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZS50ZXh0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmb3JtRmllbGQudmFsdWUgJiYgZm9ybUZpZWxkLnZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2xlYXIgdGhlIGRyb3Bkb3duIHZhbHVlIHdoZW4gY2xpY2sgb24geFxuICAgKi9cbiAgb25DbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGZvcm1GaWVsZCk7XG4gICAgdGhpcy5kcm9wRG93bkNoYW5nZUV2ZW50LmVtaXQoZm9ybUZpZWxkKTtcbiAgICBpZiAoIWV2ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRHJvcGRvd25WYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIG9uQ2hhbmdlIEV2ZW50IHdoZW4gVmFsdWUgQ2hhbmdlZFxuICAgKi9cbiAgb25DaGFuZ2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVuU2FmZSBsaW5rIGludG8gc2FmZSBsaW5rXG4gICAqL1xuICBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZykge1xuICAgIGxldCBsaW5rVXJsOiBhbnkgPSB1cmw7XG4gICAgaWYgKGxpbmtVcmwpIHtcbiAgICAgIGxpbmtVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGxpbmtVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlua1VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2Ugb24gZHluYW1pYyBidXR0b25zIGNsaWNrXG4gICAqL1xuICBvbk5ld0J1dHRvbkNsaWNrKGJ1dHRvbikge1xuICAgIGJ1dHRvbi5mdW5jKCk7XG4gIH1cblxuICBzZWxlY3RlZENhcmRDbGlja0V2ZW50KGRhdGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IGZpZWxkLmNhcmQuZGF0YVtkYXRhLmluZGV4XTtcbiAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouc2VsZWN0ZWRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgb2JqLnNlbGVjdGVkQ2FyZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb2JqWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGF0YS5zZWxlY3RlZENhcmQpIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJ2NhcmQtYWN0aXZlJztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC50ZXh0VHlwZSA9PSAndGV4dCcpIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICd0ZXh0JztcbiAgICB9XG4gIH1cbiAgb25MaW5rQ2xpY2sobGluaywgZm9ybVNlY3Rpb24pe1xuICAgIGlmKCFsaW5rLmRpc2FibGVkICYmICFmb3JtU2VjdGlvbi5kaXNhYmxlZCl7XG4gICAgICBsaW5rLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cbn1cblxuIl19
|
|
1145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFvQixnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ3BOLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBMEMsVUFBVSxFQUE2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3JKLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFRMUUsTUFBTSxPQUFPLGFBQWE7SUF3Q3hCLFlBQ1UsV0FBa0MsRUFDbEMsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsU0FBdUIsRUFDeEIsYUFBNEIsRUFDM0Isd0JBQWtELEVBQ2xELEdBQXNCLEVBQ3RCLE1BQWMsRUFDZCxFQUFjLEVBQ2QsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsaUJBQW9DO1FBWHBDLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFuRHJDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTlCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFDaEMsWUFBTyxHQUFZLEtBQUssQ0FBQztRQU14QixhQUFRLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUQsZUFBVSxHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlELHdCQUFtQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVELHdCQUFtQixHQUMzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBSXJCLGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsZUFBZSxDQUFDO1FBQ2pDLFVBQUssR0FBYSxFQUFFLENBQUM7UUFDckIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO1FBRW5DLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUVyQywwQkFBcUIsR0FBVyxFQUFFLENBQUM7UUFDbkMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsbUJBQWMsR0FBVyxVQUFVLENBQUM7UUFDcEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHN0Isd0RBQXdEO1FBQ3hELFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztJQWV4QixDQUFDO0lBOUNKLElBQWEsY0FBYyxDQUFDLEdBQVE7UUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFFBQVEsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQTRDRCxRQUFRLEtBQVUsQ0FBQztJQUVuQiwwQkFBMEI7SUFFMUIsbUJBQW1CLENBQUMsS0FBVTtRQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7WUFDekUsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxXQUFXOztRQUNULElBQ0UsSUFBSSxDQUFDLElBQUk7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDakM7WUFDQSwrQ0FBK0M7WUFDL0MsSUFBSSxVQUFVLHFCQUFRLElBQUksQ0FBQyxJQUFJLENBQUUsQ0FBQztZQUNsQyxNQUFBLFVBQVUsQ0FBQyxZQUFZLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7b0JBQ3RCLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7O3dCQUN4QyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7NEJBQ3BCLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO3lCQUM3Qjt3QkFDRCxnQ0FBZ0M7d0JBQ2hDLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxNQUFLLFlBQVksQ0FBQyxRQUFRLEtBQUksS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQSxFQUFFOzRCQUMvRCxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssQ0FBQzt5QkFDdkM7d0JBQ0QsSUFDRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxPQUFPLE1BQUssWUFBWSxDQUFDLFFBQVE7NkJBQ3hDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLENBQUE7NEJBQ2YsQ0FBQyxDQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssMENBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7aUNBQ3RDLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssMENBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLEVBQzFDOzRCQUNBLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3BEO3dCQUNELElBQ0UsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxNQUFLLFlBQVksQ0FBQyxZQUFZOzZCQUM1QyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSyxDQUFBOzRCQUNaLENBQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUN4Qjs0QkFDQSxNQUFNLEtBQUssR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSyxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsWUFBWSxDQUFDLENBQzNDLENBQUM7NEJBQ0YsSUFDRSxLQUFLO2dDQUNMLENBQUMsQ0FBQSxNQUFBLEtBQUssQ0FBQyxRQUFRLEVBQUUsMENBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQztxQ0FDOUIsTUFBQSxLQUFLLENBQUMsUUFBUSxFQUFFLDBDQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLEVBQ2xDO2dDQUNBLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBQSxNQUFBLEtBQUs7cUNBQ2hCLFFBQVEsRUFBRTtxQ0FDVixVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQywwQ0FDbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQywwQ0FDVixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQ3pEO3lCQUNGO3dCQUNELGdEQUFnRDt3QkFDaEQsSUFDRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxPQUFPLE1BQUssWUFBWSxDQUFDLFdBQVc7NEJBQzNDLEtBQUssQ0FBQyxLQUFLOzRCQUNYLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQzNCOzRCQUNBLElBQUksTUFBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0NBQzFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NkJBQ25EO2lDQUFNO2dDQUNMLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQzdCO3lCQUNGO3dCQUNELElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxNQUFLLFlBQVksQ0FBQyxJQUFJLEVBQUU7NEJBQ3hDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDOzRCQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUU7O2dDQUNkLE1BQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsSUFBSSwwQ0FBRSxJQUFJLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFOztvQ0FDcEMsSUFDRSxDQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLElBQUksMENBQUUsWUFBWTt3Q0FDekIsQ0FBQSxNQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLElBQUksMENBQUUsWUFBWSwwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUNyQzt3Q0FDQSxDQUFDLENBQUMsV0FBVyxHQUFHOzRDQUNkLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLElBQUksMENBQUUsWUFBWSxDQUFDLENBQzFDO3lDQUNGLENBQUM7cUNBQ0g7Z0NBQ0gsQ0FBQyxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7NEJBQ3pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzt5QkFDVDt3QkFDRCw2Q0FBNkM7d0JBQzdDLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxNQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUU7NEJBQzVDLEtBQUssQ0FBQyxLQUFLO2dDQUNULENBQUEsTUFBQSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxLQUFLLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxXQUFXLEVBQUUsTUFBSyxNQUFNO29DQUNsRCxDQUFBLE1BQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSywwQ0FBRSxRQUFRLEVBQUUsMENBQUUsV0FBVyxFQUFFLE1BQUssR0FBRztvQ0FDL0MsQ0FBQSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxLQUFLLDBDQUFFLFFBQVEsRUFBRSxNQUFLLEdBQUc7b0NBQzlCLENBQUMsQ0FBQyxJQUFJO29DQUNOLENBQUMsQ0FBQyxLQUFLLENBQUM7eUJBQ2I7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILHNDQUFzQztZQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDVjtJQUNILENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsa0JBQWtCLENBQUMsU0FBcUI7O1FBQ3RDLE1BQUEsUUFBUTthQUNMLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsMENBQ3pDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFOztZQUN2QyxNQUFNLElBQUksR0FBRyxNQUFBLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSwwQ0FBRSxLQUFLLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxNQUFLLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7Z0JBQ2pDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FDN0QsT0FBTyxDQUNSLENBQUM7YUFDSDtpQkFBTSxJQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLGdCQUFnQjs7UUFDZCxNQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsWUFBWSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMvQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7O29CQUN4QyxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sTUFBSyxZQUFZLENBQUMsT0FBTyxFQUFFO3dCQUMzQyxNQUFNLFVBQVUsR0FBRyxNQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sMENBQUUsWUFBWSwwQ0FBRSxVQUFVLENBQUM7d0JBQzNELElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTs0QkFDZixJQUFJLENBQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSwwQ0FBRSxJQUFJLE1BQUssU0FBUyxFQUFFO2dDQUNyQyxJQUFJLE1BQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxZQUFZLDBDQUFFLGNBQWMsRUFBRTtvQ0FDOUMsSUFBSSxVQUFVLEVBQUU7d0NBQ2QsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQ3RCLE1BQUEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQywwQ0FBRSxRQUFRLEVBQUUsQ0FDaEMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7cUNBQ3ZCO3lDQUFNO3dDQUNMLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7cUNBQ2pDO2lDQUNGO3FDQUFNLElBQUksVUFBVSxFQUFFO29DQUNyQixLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lDQUMzRDs2QkFDRjtpQ0FBTSxJQUFJLENBQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSwwQ0FBRSxJQUFJLE1BQUssU0FBUyxFQUFFO2dDQUM1QyxLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUMzQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1QixDQUFDOzZCQUNIO3lCQUNIO3FCQUNEO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gscUJBQXFCOztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixNQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsWUFBWSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMvQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRTs7Z0JBQ3BELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsU0FBUyxFQUFFO29CQUM1QyxNQUFNLE9BQU8sR0FBUSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUN0RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FDcEUsQ0FBQztvQkFDRixNQUFNLEVBQ0osU0FBUyxFQUFFLFNBQVMsRUFDcEIsSUFBSSxFQUNKLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDM0IsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNuRSw0QkFBNEI7b0JBQzVCLE1BQU0sWUFBWSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxZQUFZLEVBQUU7d0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFKLElBQUksY0FBSixJQUFJLEdBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTs0QkFDbEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7d0JBQ3JDLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDOzRCQUN2QixJQUFJLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLEVBQUU7NEJBQ2hDLEtBQUssRUFBRSxZQUFZO3lCQUNwQixDQUFDLENBQUM7d0JBQ0gsb0RBQW9EO3dCQUNwRCxJQUFJLFFBQVEsRUFBRTs0QkFDWixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBTSxFQUFFLEVBQUU7O2dDQUN6RCxNQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUF1QiwwQ0FBRSxTQUFTLENBQzVELENBQUMsUUFBUSxFQUFFLEVBQUU7b0NBQ1gsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dDQUNwQixDQUFDLENBQ0YsQ0FBQzs0QkFDSixDQUFDLENBQUMsQ0FBQzt5QkFDSjtxQkFDRjtvQkFDRCwwQkFBMEI7b0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsc0NBQXNDO1FBQ3RDLHVEQUF1RDtRQUN2RCxrR0FBa0c7UUFDbEcsNEJBQTRCO1FBQzVCLFFBQVE7UUFDUixRQUFRO1FBQ1IsdUJBQXVCO1FBQ3ZCLHVCQUF1QjtRQUN2QixzQ0FBc0M7UUFDdEMsUUFBUTtRQUNSLGNBQWM7SUFDaEIsQ0FBQztJQUVELGVBQWU7UUFDYiwyQ0FBMkM7UUFDM0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxpQkFBaUI7UUFDZixTQUFTLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTs7WUFDckQsSUFBRyxNQUFBLEdBQUcsQ0FBQyxJQUFJLDBDQUFFLE1BQU0sRUFBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFBLEdBQUcsQ0FBQyxJQUFJLDBDQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLGVBQW1COztRQUNqQyxNQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsWUFBWSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxPQUFvQixFQUFDLEVBQUU7WUFDdkQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFnQixFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRyxJQUFHLFdBQVcsRUFBQztnQkFDYixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7YUFDekM7WUFBQSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQUc7O1FBQ1osR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsTUFBQSxHQUFHLENBQUMsT0FBTywwQ0FBRSxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsV0FBZ0IsRUFBRSxFQUFFOztZQUNyRCxNQUFNLFNBQVMsR0FBRyxNQUFBLEdBQUcsQ0FBQyxTQUFTLDBDQUFFLElBQUksQ0FDbkMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FDbEIsT0FBQSxXQUFXLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFBLEdBQUcsQ0FBQyxTQUFTLDBDQUFFLFdBQVcsRUFBRSxDQUFDLENBQUEsRUFBQSxDQUNwRSxDQUFDO1lBQ0YsSUFBSSxTQUFTLElBQUksQ0FBQSxNQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7Z0JBQ25ELFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQUEsR0FBRyxDQUFDLFNBQVMsMENBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUNqRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7WUFDdkMsTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7O2dCQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFBLFdBQVcsQ0FBQyxNQUFNLDBDQUFFLElBQUksQ0FDeEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLElBQUksQ0FDL0MsQ0FBQztnQkFDRixJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLENBQUEsTUFBQSxHQUFHLENBQUMsU0FBUywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO3dCQUM3QixNQUFBLEdBQUcsQ0FBQyxTQUFTLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFOzRCQUNoQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7b0JBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztpQkFDckM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdkMsQ0FBQztJQUVELGlCQUFpQjs7UUFDZixNQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsWUFBWSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQyxJQUFJLE9BQU8sQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBCQUEwQjs7UUFDeEIsTUFBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLFlBQVksMENBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDL0MsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTs7Z0JBQ25DLElBQ0UsS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsU0FBUztxQkFDeEMsTUFBQSxLQUFLLENBQUMsU0FBUywwQ0FBRSxTQUFTLENBQUEsRUFDMUI7b0JBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7d0JBQ3RCOzRCQUNFLElBQUksRUFBRSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUs7NEJBQy9CLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVM7eUJBQ3JDO3dCQUNELEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO3FCQUN0QixDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLFFBQWlCLEtBQUs7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXOztRQUNULE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7O1lBQzlFLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDOUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FDOUIsQ0FBQztnQkFDRixJQUFJLGVBQWUsRUFBRTtvQkFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFBLFFBQVEsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7d0JBQzNELGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDOUMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQzNDO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsb0JBQW9CO1FBQ2xCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QyxJQUFJLFdBQVcsR0FBVyxDQUFDLENBQUM7WUFDNUIsSUFBSSxjQUFjLEdBQVcsQ0FBQyxDQUFDO1lBQy9CLElBQUksWUFBWSxHQUFXLENBQUMsQ0FBQztZQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO29CQUN0QixXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO3dCQUN2QyxJQUFJLFdBQVcsR0FBUSxTQUFTLENBQUMsV0FBVyxDQUFDO3dCQUM3QyxJQUFJLGtCQUFrQixHQUFRLEVBQUUsQ0FBQzt3QkFDakMsSUFBSSxDQUFDLFdBQVc7NEJBQUUsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLFdBQVc7NEJBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO3dCQUN0RCxJQUFJLHNCQUFzQixHQUFHLEtBQUssQ0FBQzt3QkFFbkMsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUN2RCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFlLEVBQUUsRUFBRTtnQ0FDN0MsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO2dDQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29DQUNyQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7d0NBQ3ZELE9BQU8sR0FBRyxJQUFJLENBQUM7cUNBQ2hCO29DQUVELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFO3dDQUM1QyxJQUFJLE9BQU8sRUFBRTs0Q0FDWCxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt5Q0FDM0I7NkNBQU07NENBQ0wsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7eUNBQzNCO3FDQUNGO3lDQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFO3dDQUNuRCxJQUFJLE9BQU8sRUFBRTs0Q0FDWCxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs0Q0FDM0IsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7eUNBQzVCOzZDQUFNOzRDQUNMLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7NENBQ3JDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRDQUM1QixTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt5Q0FDM0I7cUNBQ0Y7Z0NBQ0gsQ0FBQyxDQUFDLENBQUM7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7NkJBQU0sSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2hELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFlLEVBQUUsRUFBRTtnQ0FDdEMsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO2dDQUM3QixJQUFJLFVBQVUsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29DQUNuRCxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO3dDQUNyQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7NENBQ3ZELE9BQU8sR0FBRyxJQUFJLENBQUM7eUNBQ2hCO29DQUNILENBQUMsQ0FBQyxDQUFDO29DQUNILElBQ0UsVUFBVSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSTt3Q0FDeEMsQ0FBQyxzQkFBc0IsRUFDdkI7d0NBQ0EsSUFBSSxPQUFPLEVBQUU7NENBQ1gsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7eUNBQzNCOzZDQUFNOzRDQUNMLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO3lDQUN6QjtxQ0FDRjt5Q0FBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTt3Q0FDbkQsSUFBSSxPQUFPLEVBQUU7NENBQ1gsc0JBQXNCLEdBQUcsSUFBSSxDQUFDOzRDQUM5QixTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs0Q0FDM0IsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7eUNBQzFCOzZDQUFNOzRDQUNMLElBQ0UsU0FBUyxDQUFDLFdBQVc7Z0RBQ3JCLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDaEM7Z0RBQ0EsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0RBQzdCLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0RBQ3JDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzZDQUMzQjtpREFBTTtnREFDTCxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnREFDNUIsV0FBVyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnREFDckMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7NkNBQzNCO3lDQUNGO3FDQUNGO2lDQUNGOzRCQUNILENBQUMsQ0FBQyxDQUFDO3lCQUNKO3dCQUVELFdBQVcsRUFBRSxDQUFDO3dCQUVkLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTs0QkFDdEIsY0FBYyxFQUFFLENBQUM7eUJBQ2xCO3dCQUVELElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTs0QkFDcEIsWUFBWSxFQUFFLENBQUM7eUJBQ2hCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxLQUFLLGNBQWMsQ0FBQztZQUN4RSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxLQUFLLFlBQVksQ0FBQztTQUNyRTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxXQUF5QjtRQUN2QyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsV0FBeUIsRUFBRSxRQUFpQjtRQUNoRSxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUMzQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBcUI7O1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDbkQsTUFBTSxFQUFFLFdBQVc7WUFDbkIsS0FBSyxFQUFFLENBQUEsTUFBQSxTQUFTLENBQUMsU0FBUywwQ0FBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ3JFLE1BQU0sRUFBRSxDQUFBLE1BQUEsU0FBUyxDQUFDLFNBQVMsMENBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztZQUN4RSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBQSxTQUFTLENBQUMsU0FBUywwQ0FBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUU7U0FDdEUsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGVBQWUsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM1QixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7b0JBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxTQUFxQjs7UUFDbkMsSUFBSSxDQUFBLE1BQUEsU0FBUyxDQUFDLFNBQVMsMENBQUUsTUFBTSxNQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDcEQsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO2FBQU0sSUFBSSxDQUFBLE1BQUEsU0FBUyxDQUFDLFNBQVMsMENBQUUsTUFBTSxNQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNwRCxXQUFXLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNO2FBQ3hDLENBQUMsQ0FBQztTQUNKO2FBQU0sSUFBSSxDQUFBLE1BQUEsU0FBUyxDQUFDLFNBQVMsMENBQUUsTUFBTSxNQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtnQkFDcEUsTUFBTSxFQUFFLENBQUEsTUFBQSxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksMENBQUUsTUFBTTtvQkFDdEMsQ0FBQyxDQUFDLE1BQUEsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLDBDQUFFLE1BQU07b0JBQ2xDLENBQUMsQ0FBQyxFQUFFO2dCQUNOLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pFLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxhQUFhLEVBQUM7Z0JBQ2hFLE1BQU0sRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ3ZFLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU07YUFDakMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBQSxNQUFBLFNBQVMsQ0FBQyxTQUFTLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDO1lBQzNELElBQUksYUFBYSxFQUFFO2dCQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQ3ZDLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLDBDQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDN0IsYUFBYSxDQUNkLENBQUM7YUFDSDtZQUNELFNBQVMsQ0FBQyxlQUFlLENBQ3ZCLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FDdkQsQ0FBQztZQUNGLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksR0FBRyxFQUFFO29CQUNQLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTt3QkFDdEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDekI7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCLENBQUMsU0FBYzs7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ25ELE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDNUIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dCQUNqRCxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dCQUMzQixDQUFDLENBQUMsS0FBSztZQUNULE1BQU0sRUFBRSxDQUFBLE1BQUEsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUywwQ0FBRSxNQUFNO2dCQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNO2dCQUM1QixDQUFDLENBQUMsS0FBSztZQUNULElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsMENBQUUsSUFBSTtvQkFDakQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJO29CQUM3QyxDQUFDLENBQUMsRUFBRTtnQkFDTixRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUN2QyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRywwQ0FBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQzdCLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsU0FBUyxDQUFDLGVBQWUsQ0FDdkIsQ0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUN2RCxDQUFDO1FBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM1QixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7b0JBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDbEMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsNEJBQTRCO1FBQzFCLElBQ0UsSUFBSSxDQUFDLElBQUk7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDakM7WUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDekMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDckQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTs0QkFDbEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ3RDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDOzZCQUM1Qjt3QkFDSCxDQUFDLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWE7UUFDdkIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7WUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxVQUFVOztRQUNSLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTs7WUFDOUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN2RCxNQUFBLFdBQVcsQ0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO3dCQUM3QyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUU7NEJBQzFCLG1CQUFtQixHQUFHLG1CQUFtQjtnQ0FDdkMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLEtBQUssR0FBRyxTQUFTLENBQUMsWUFBWTtnQ0FDdEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7eUJBQzVCO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDckUsQ0FBQztvQkFDRixJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUNyQixtQkFBbUIsRUFDbkIsSUFBSSxFQUNKLGdCQUFnQixDQUNqQixDQUFDO3FCQUNIO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztxQkFDckU7b0JBQ0QsUUFBUSxHQUFHLEtBQUssQ0FBQztpQkFDbEI7Z0JBRUQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTs7b0JBQ3hDLHlEQUF5RDtvQkFDekQsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxXQUFXLEVBQUU7d0JBQzlDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzt3QkFFbEMsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDckQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQ0FDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO29DQUNsRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2lDQUNqQzs0QkFDSCxDQUFDLENBQUMsQ0FBQzt5QkFDSjtxQkFDRjtvQkFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRTt3QkFDdkMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUEsTUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTs0QkFDN0MsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUN2QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3hELENBQUM7NEJBQ0YsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQzs2QkFDaEM7eUJBQ0Y7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLEVBQUU7WUFDWiwrQkFBK0I7WUFDL0IsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sT0FBTyxHQUNYLE1BQUEsTUFBQSxJQUFJLENBQUMsRUFBRSwwQ0FBRSxhQUFhLDBDQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVELElBQUksZUFBZSxHQUFZLEtBQUssQ0FBQztZQUNyQyxJQUFJLFNBQVMsR0FBUSxFQUFFLENBQUM7WUFDeEIsMENBQTBDO1lBQzFDLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFFO29CQUNsQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFOzt3QkFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTs0QkFDbkQsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7eUJBQ3BCO3dCQUNELGtDQUFrQzt3QkFDbEMsSUFDRSxLQUFLLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxRQUFROzRCQUN2QyxLQUFLLENBQUMsUUFBUTs0QkFDZCxLQUFLLENBQUMsWUFBWTs0QkFDbEIsQ0FBQyxDQUFBLE1BQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxRQUFRLEVBQUUsMENBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBOzRCQUN4QyxDQUFDLENBQUEsTUFBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUEsRUFDeEM7NEJBQ0EsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3lCQUMvRDt3QkFDRCxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sTUFBSyxZQUFZLENBQUMsT0FBTyxFQUFFOzRCQUMzQyxNQUFNLFVBQVUsR0FBRyxNQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sMENBQUUsWUFBWSwwQ0FBRSxVQUFVLENBQUM7NEJBQzNELElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtnQ0FDZixJQUFJLENBQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSwwQ0FBRSxJQUFJLE1BQUssU0FBUyxFQUFFO29DQUNyQyxJQUFJLE1BQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxZQUFZLDBDQUFFLGNBQWMsRUFBRTt3Q0FDOUMsSUFBSSxVQUFVLEVBQUU7NENBQ2QsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQ3RCLE1BQUEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQywwQ0FBRSxRQUFRLEVBQUUsQ0FDaEMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7eUNBQ3ZCOzZDQUFNOzRDQUNMLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7eUNBQ2pDO3FDQUNGO3lDQUFNLElBQUksVUFBVSxFQUFFO3dDQUNyQixLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FDQUMzRDtpQ0FDRjs2QkFDRjt5QkFDRjt3QkFFRCx1Q0FBdUM7d0JBQ3ZDLElBQ0UsS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsWUFBWTs0QkFDM0MsQ0FBQyxLQUFLLENBQUMsWUFBWTs0QkFDbkIsS0FBSyxDQUFDLEtBQUs7NEJBQ1gsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN0Qjs0QkFDQSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDM0IsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQzFDLENBQUM7NEJBQ0YsSUFDRSxLQUFLO2dDQUNMLENBQUMsQ0FBQSxNQUFBLEtBQUssQ0FBQyxRQUFRLEVBQUUsMENBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQztxQ0FDOUIsTUFBQSxLQUFLLENBQUMsUUFBUSxFQUFFLDBDQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLEVBQ2xDO2dDQUNBLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0NBQ2xCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7NkJBQ3JEO3lCQUNGO3dCQUNELHdDQUF3Qzt3QkFDeEMsSUFDRSxLQUFLLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxXQUFXOzRCQUMxQyxLQUFLLENBQUMsS0FBSzs0QkFDWCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7NEJBQzFCLEtBQUssQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUM1Qjs0QkFDQSxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsUUFBUSxFQUFFLENBQUM7eUJBQ3ZDO3dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsUUFBUSxFQUFFOzRCQUMzQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNuQzt3QkFDRCwrQkFBK0I7d0JBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsU0FBUyxJQUFJLENBQUMsZUFBZSxFQUFFOzRCQUNoRSxlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUN2QixJQUFJLFdBQVcsRUFBRTtnQ0FDZixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7NkJBQ3JCO2lDQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUN4QyxLQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtvQ0FDdkIsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssRUFBRSxDQUFDO2lDQUNkOzZCQUNGO3lCQUNGO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsVUFBVSxDQUNSLEdBQUcsRUFBRTtnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdDLENBQUMsRUFDRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNyQixDQUFDO1lBQ0YsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksMENBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzlDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtvQkFDdEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTs7d0JBQ3hDLElBQ0UsS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsWUFBWTs0QkFDM0MsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUNuQjs0QkFDQSxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQUEsTUFBQSxTQUFTO2lDQUNwQixRQUFRLEVBQUU7aUNBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsMENBQ25CLEtBQUssQ0FBQyxHQUFHLENBQUMsMENBQ1YsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO3lCQUN4RDt3QkFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLFFBQVEsRUFBRTs0QkFDM0MsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7eUJBQ2hEO3dCQUNELElBQUksQ0FBQSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLDBDQUFFLElBQUksTUFBSyxTQUFTLEVBQUU7NEJBQ3JDLE1BQU0sVUFBVSxHQUFHLE1BQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSwwQ0FBRSxZQUFZLDBDQUFFLFVBQVUsQ0FBQzs0QkFDM0QsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO2dDQUNmLElBQUksTUFBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLFlBQVksMENBQUUsY0FBYyxFQUFFO29DQUM5QyxJQUFJLFVBQVUsRUFBRTt3Q0FDZCxLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FDdEIsTUFBQSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLDBDQUFFLFFBQVEsRUFBRSxDQUNoQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztxQ0FDdkI7eUNBQU07d0NBQ0wsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztxQ0FDakM7aUNBQ0Y7cUNBQU0sSUFBSSxVQUFVLEVBQUU7b0NBQ3JCLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7aUNBQzNEOzZCQUNGO3lCQUVGO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFO1lBQ3pFLElBQUksQ0FBQyxZQUFZO2lCQUNkLE9BQU8sQ0FBQztnQkFDUCxHQUFHLEVBQUUsY0FBYztnQkFDbkIsT0FBTyxFQUFFLHVEQUF1RDthQUNqRSxDQUFDO2lCQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7b0JBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzdDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2lCQUNuQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBcUI7UUFDcEMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ25CLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUN0QixTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRSxJQUFJLElBQUksR0FBUSxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxXQUFXLENBQUM7UUFDOUIsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3pDLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUM5QyxJQUFJLGlCQUFpQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxTQUFxQixFQUFFLElBQVM7O1FBQzVDLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUNyQixJQUFJLEtBQVUsQ0FBQztZQUNmLElBQUksR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxTQUFTLEdBQVcsRUFBRSxDQUFDO1lBQzNCLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxPQUFPLFNBQVMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMxRCxJQUNFLFNBQVMsQ0FBQyxLQUFLO29CQUNmLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSTtvQkFDcEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQ3RDO29CQUNBLFNBQVMsR0FBRyxNQUFBLE1BQUEsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxJQUFJLEVBQUUsQ0FBQztvQkFDckQsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFO3dCQUMxQixLQUFLLEdBQUcsTUFBQSxNQUFBLE1BQUEsU0FBUyxDQUFDLEtBQUssMENBQUUsS0FBSywwQ0FBRSxRQUFRLEVBQUUsMENBQUUsSUFBSSxFQUFFLENBQUM7cUJBQ3BEO2lCQUNGO2FBQ0Y7aUJBQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQy9ELFNBQVMsR0FBRyxNQUFBLE1BQUEsU0FBUyxDQUFDLEtBQUssMENBQUUsUUFBUSxFQUFFLDBDQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pEO1lBQ0QsTUFBTSxhQUFhLEdBQUcsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLENBQUM7WUFDM0MsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FDdkMsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsMENBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUM3QixhQUFhLENBQ2QsQ0FBQzthQUNIO1lBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxrQ0FDeEMsSUFBSSxDQUFDLElBQUksS0FDWixJQUFJLGtCQUNGLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUN0QixLQUFLLEVBQUUsS0FBSyxFQUNaLFVBQVUsRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLFVBQVUsSUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBRW5CLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsU0FBYztRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQ25ELEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUN0QixDQUFDO1FBQ0YsSUFBSSxTQUFTLEVBQUU7WUFDYixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQXFCO1FBQ2hDLElBQUksU0FBUyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUNwRCxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsU0FBYztRQUM5QixJQUNFLFNBQVMsQ0FBQyxLQUFLO1lBQ2YsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQzVCLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDMUM7WUFDQSxNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsYUFBYSxDQUNqQyxTQUFTLEVBQ1QsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUMzQyxDQUFDO1lBQ0YsU0FBUyxDQUFDLGVBQWUsQ0FDdkIsQ0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUN2RCxDQUFDO1lBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ25CLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQzNDLFNBQVMsRUFDVCxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQzNDLEdBQUcsQ0FDSixDQUFDO2lCQUNIO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRO29CQUMxQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsQ0FBQyxFQUNELENBQUMsRUFBRSxLQUFLLEVBQU8sRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQ0YsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxTQUFxQjtRQUNyQyxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbkUsU0FBUyxDQUFDLGVBQWUsQ0FDdkIsQ0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUN2RCxDQUFDO1lBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ25CLENBQUMsR0FBUSxFQUFFLEVBQUU7O2dCQUNYLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtvQkFDbkIsTUFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsMENBQUUsS0FBSyxFQUFFLENBQUM7aUJBQ25EO2dCQUNELElBQUksR0FBRyxFQUFFO29CQUNQLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUMzQyxTQUFTLEVBQ1QsU0FBUyxDQUFDLGFBQWEsRUFDdkIsR0FBRyxDQUNKLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7b0JBQzVCLElBQUksU0FBUyxDQUFDLFFBQVE7d0JBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNsRTtnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNLGNBQWMsR0FDbEIsT0FBTyxTQUFTLENBQUMsS0FBSyxLQUFLLFFBQVE7b0JBQ2pDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQ3RCLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN0QixLQUFLLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZELElBQUksY0FBYyxLQUFLLEtBQUssRUFBRTtvQkFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7d0JBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQy9CO2lCQUNGO1lBQ0gsQ0FBQyxFQUNELENBQUMsRUFBRSxLQUFLLEVBQU8sRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsU0FBcUI7UUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsU0FBcUI7O1FBQ25DLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQy9DLGdDQUFnQztZQUNoQyxJQUNFLFNBQVMsQ0FBQyxRQUFRO2dCQUNsQixDQUFDLENBQUEsTUFBQSxTQUFTLENBQUMsS0FBSywwQ0FBRSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztxQkFDekMsTUFBQSxTQUFTLENBQUMsS0FBSywwQ0FBRSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsRUFDN0M7Z0JBQ0EsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1RDtZQUNELElBQ0UsQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQzFDLFNBQVMsQ0FBQyxLQUFLO2dCQUNmLFNBQVMsQ0FBQyxlQUFlLEVBQ3pCO2dCQUNBLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQ3hCLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQzlDLENBQUM7YUFDSDtpQkFBTSxJQUNMLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUMxQyxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dCQUNoQixTQUFTLENBQUMsZUFBZSxFQUN6QjtnQkFDQSxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0RTtZQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQztJQUNELG1CQUFtQixDQUFDLFNBQWM7UUFDaEMsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxhQUFhLEVBQUU7WUFDL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDdEIsU0FBUyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUMxQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsT0FBcUI7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxTQUFxQjtRQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFlO1lBQ2pDLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztnQkFDdEIsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZO2FBQ3JDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGVBQWUsQ0FDdkIsQ0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSyxDQUN2RCxDQUFDO1FBQ0YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3pCLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDWixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUM5QixTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFCO1FBQ0gsQ0FBQyxFQUNELENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQXFCO1FBQ2hDLElBQUksU0FBUyxDQUFDLE1BQU07WUFBRSxPQUFPLFNBQVMsQ0FBQzs7WUFDbEMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVLEVBQUUsU0FBYztRQUNuQyxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUU7WUFDdEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLFNBQXFCOztRQUNuQyxJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDckIsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDMUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO29CQUNuQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFO1lBQ3RFLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBcUI7UUFDcEMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ3ZDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDbkQsQ0FBQyxFQUNELFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2hDLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDRjtRQUNELElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkQsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLFNBQXFCLEVBQUUsS0FBVTtRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBYztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxTQUFxQjtRQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVU7UUFDZixPQUFPLE9BQU8sS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLElBQUksT0FBTyxHQUFRLEdBQUcsQ0FBQztRQUN2QixJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsTUFBTTtRQUNyQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsSUFDRSxJQUFJLENBQUMsSUFBSTtZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNqQztZQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFOztvQkFDcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxJQUFJLEVBQUU7d0JBQ3ZDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFBLE1BQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7NEJBQzdDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDdEMsSUFBSSxHQUFHLEVBQUU7Z0NBQ1AsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFO29DQUNwQixPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUM7aUNBQ3pCO3FDQUFNO29DQUNMLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxhQUFhLENBQUM7aUNBQ3JDOzZCQUNGO3lCQUNGO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzNCO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsYUFBYSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQVM7UUFDMUIsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLE1BQU0sRUFBRTtZQUNoQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztTQUNqQzthQUFNO1lBQ0wsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXO1FBQzNCLElBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDOzs7WUE3dENGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsdXN3Q0FBb0M7O2FBRXJDOzs7O1lBZlEscUJBQXFCO1lBTnJCLFdBQVc7WUFDWCxZQUFZO1lBVVosWUFBWTtZQVRaLGFBQWE7WUFIbUMsd0JBQXdCO1lBQUUsaUJBQWlCO1lBVzNGLE1BQU07WUFYb0osVUFBVTtZQWFwSyxRQUFRO1lBQ1IsV0FBVztZQUNYLGlCQUFpQjs7OzRCQVN2QixLQUFLO21CQUNMLEtBQUs7NkJBQ0wsS0FBSzsrQkFDTCxLQUFLOzBCQUNMLEtBQUs7c0JBQ0wsS0FBSzs2QkFDTCxLQUFLO3VCQUtMLE1BQU07eUJBQ04sTUFBTTtrQ0FDTixNQUFNO2tDQUNOLE1BQU07d0NBRU4sWUFBWSxTQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2tDQXlDcEUsWUFBWSxTQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIENvbXBvbmVudEZhY3RvcnksIFZpZXdDb250YWluZXJSZWYsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBOb3Rlc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9ub3Rlcy9ub3Rlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRUZvcm1Db250cm9sLCBFSHlwZXJsaW5rLCBJRm9ybUZpZWxkLCBJRHluYW1pY0Zvcm0sIElGb3JtU2VjdGlvbiwgRVZhbGlkYXRvciwgSUR5bmFtaWNDYXJkLCBJRm9ybUJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN0aWNreUFjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmb3JtOiBJRHluYW1pY0Zvcm07XG4gIEBJbnB1dCgpIGhpZGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybUJ1dHRvbnM6IElGb3JtQnV0dG9uW10gPSBbXTtcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpIHNhdmVGb3JtOiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2FuY2VsRm9ybTogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyb3BEb3duQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VjdGlvbkNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgZHluYW1pY0Nhc2UgPSBFRm9ybUNvbnRyb2w7XG4gIHBlcm1pc3Npb25UeXBlID0gRVBlcm1pc3Npb25UeXBlO1xuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNGb3JtSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbXBvbmVudHNMaXN0OiBJRGljdGlvbmFyeVtdID0gW107XG4gIGZpbGVVcGxvYWRVcmxzOiBhbnk7XG4gIHNob3dmaWxlVXBsb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FyZExpc3Q6IElEeW5hbWljQ2FyZDtcbiAgY2FsZW5kZXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZGVmYXVsdERhdGU6IHN0cmluZyA9ICcnO1xuICBsb29rdXBGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3l5JztcbiAgc2V0Q2FyZERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLy8gYXBwbHkgY2hlY2tlZC91bkNoZWNrZWQgcHJvcCBmb3IgQ2hlY2tCb3ggb2YgdGhlIEZvcm1cbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnZUxvZ2dlclNlcnZpY2U6IFBhZ2VMb2dnZXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgLy8gYnJvd3NlciB0YWIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCB8fCB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mb3JtICYmXG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zICYmXG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIC8vIHN0YXJ0IGNhcmRMaXN0IHJlZmVyZW5jZSBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgICBsZXQgZm9ybVZhbHVlcyA9IHsgLi4udGhpcy5mb3JtIH07XG4gICAgICBmb3JtVmFsdWVzLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQuaXNQYXNzd29yZCkge1xuICAgICAgICAgICAgICBmaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gZGF0ZVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgZmllbGQ/Lm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGZpZWxkWydwcmV2aW91c1ZhbHVlJ10gPSBmaWVsZD8udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnRpbWVPbmx5ICYmXG4gICAgICAgICAgICAgIChmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShmaWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgIGZpZWxkPy52YWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkPy52YWx1ZS5tYXAoXG4gICAgICAgICAgICAgICAgKHZhbHVlOiBhbnkpID0+IHZhbHVlW2ZpZWxkPy5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnOycpIHx8XG4gICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoJywnLCAnOycpXG4gICAgICAgICAgICAgICAgICA/LnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWw6IGFueSkgPT4gKHsgW2ZpZWxkPy5kaXNwbGF5RmllbGRdOiB2YWwgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBtdWx0aVNlbGVjdCBzdHJpbmcgdmFsdWUgaW4gYXJyYXlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gW2ZpZWxkLnZhbHVlXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgICB0aGlzLmZvcm0gPSB7fTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmRhdGE/LmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBmaWVsZD8uY2FyZD8uZm9ybVNlY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB4LmR5bmFtaWNGb3JtID0ge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uczogSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0gPSBmb3JtVmFsdWVzO1xuICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRW5kIGNhcmRMaXN0IHJlZmVyZW5jZSBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd5JyB8fFxuICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGZvcm1cbiAgICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xuICAgICAgdGhpcy5hcHBseVVzZXJQZXJtaXNzaW9ucygpO1xuICAgICAgdGhpcy5hcHBseVJlcXVpcmVkRmllbGRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnJlbW92ZVdoaXRlU3BhY2VzKCk7XG4gICAgICB0aGlzLnNldEh5cGVybGlua0NvbXBvbmVudFJvdXRlKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRDYWxhbmRlcldpZHRoKCk7XG4gICAgICB9LCAzMDAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgY2FsZW5kZXIgMiBPciA0IGRpZ2l0IHllYXIgZm9ybWF0XG4gIGNhbGVuZGVySW5wdXRWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZm9ybUZpZWxkLmZpZWxkKVswXVxuICAgICAgPy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICh2YWw6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB5ZWFyID0gdmFsPy50YXJnZXQ/LnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLycpWzJdO1xuICAgICAgICBpZiAoeWVhcj8ubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95eSc7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUodmFsLnRhcmdldC52YWx1ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKFxuICAgICAgICAgICAgJ2VuLVVTJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhcj8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95JztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBzZXQgcGVyY2VudCBhbmQgZGVjaW1hbCB2YWx1ZXNcbiAgc2V0bnVtZXJpY3ZhbHVlcygpIHtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDKSB7XG4gICAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gZmllbGQ/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgKGZpZWxkLnZhbHVlICogMTAwKT8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlICogMTAwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICBkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBmb3JtIGhhcyBhbnkgZmllbGQgd2l0aCBkeW5hbWljIGNvbXBvbmVudDtcbiAgICogQ3JlYXRlcyBjb21wb25lbnQgaW5zdGFuY2UgdXNpbmcgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAqIEluamVjdHMgY29tcG9uZW50IHRocm91Z2ggdmlld1JlZi5jcmVhdGVDb21wb25lbnQoKVxuICAgKiBQYXNzZXMgZGF0YSB0byBjb21wb25lbnRcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIHBhc3NlZCB0byB0aGUgY29tcG9uZW50c1xuICAgKiBGaW5hbGx5IGZvcmNlcyBBbmd1bGFyIHRvIGRldGVjaCBjaGFuZ2VzXG4gICAqL1xuICBsb2FkRHluYW1pY0NvbXBvbmVudHMoKSB7XG4gICAgdGhpcy5jb21wb25lbnRzTGlzdCA9IFtdO1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnksIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQpIHtcbiAgICAgICAgICBjb25zdCB2aWV3UmVmOiBhbnkgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRDb250YWluZXIuZmluZChcbiAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICB4LmVsZW1lbnQubmF0aXZlRWxlbWVudC5pZCA9PSBgJHtmb3JtU2VjdGlvbi5uYW1lfS0ke2ZpZWxkSW5kZXh9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaGFuZGxlcnMsXG4gICAgICAgICAgfSA9IGZpZWxkLmNvbXBvbmVudENvbnRyb2w7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID1cbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCk7XG4gICAgICAgICAgLy8gUGFzc2luZyBkYXRhIHRvIGNvbXBvbmVudFxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdSZWY/LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICAgICAgICBpZiAoY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhID8/IHt9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogZmllbGQuY29tcG9uZW50Q29udHJvbD8uaWQsXG4gICAgICAgICAgICAgIHZhbHVlOiBjb21wb25lbnRSZWYsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZXMgdG8gdGhlIGV2ZW50cyBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudHNcbiAgICAgICAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhoYW5kbGVycykuZm9yRWFjaCgoW2V2ZW50LCBoYW5kbGVyXTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZVtldmVudF0gYXMgRXZlbnRFbWl0dGVyPGFueT4pPy5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGludm9rZSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vaW52b2tlIHdoZW4gZmlsZSB1cGxvYWQgT1IgZGVsZXRlIGEgZmlsZVxuICBmaWxlT25jaGFuZ2VFdmVudCgpIHtcbiAgICB0aGlzLnNldENhcmREYXRhID0gIXRoaXMuc2V0Q2FyZERhdGE7XG4gICAgLy8gICBsZXQgY2FyZENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvLyAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbik9PiB7XG4gICAgLy8gICAgIGlmKGZvcm1TZWN0aW9uPy5maWVsZHM/LnNvbWUoKGZvcm1GaWVsZDogYW55KT0+IGZvcm1GaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpKXtcbiAgICAvLyAgICAgICBjYXJkQ29udHJvbCA9IHRydWU7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgIGlmKGNhcmRDb250cm9sKXtcbiAgICAvLyAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50cygpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9LCAzMDAwKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBsb2FkIGR5bmFtaWMgY29tcG9uZW50cyBpZiBleGlzdCBpbiBmb3JtXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldG51bWVyaWN2YWx1ZXMoKTtcbiAgICAgIHRoaXMub25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCk7XG4gICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50cygpO1xuICAgICAgdGhpcy5zZXRDYXJkUmVzcG9uc2VJZCgpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBzZXRDYXJkUmVzcG9uc2VJZCgpIHtcbiAgICB1dGlsaXRpZXMub25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmKHJlcy5kYXRhPy5pc1NhdmUpe1xuICAgICAgICB0aGlzLnNldENhcmRJZHMocmVzLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXREZWxldGVDYXJkSWQocmVzLmRhdGE/LmNhcmREYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERlbGV0ZUNhcmRJZCh1cGRhdGVkQ2FyZERhdGE6YW55KXtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjpJRm9ybVNlY3Rpb24pPT57XG4gICAgICBjb25zdCBjYXJkQ29udHJvbCA9IHNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkOklGb3JtRmllbGQpPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgaWYoY2FyZENvbnRyb2wpe1xuICAgICAgICBjYXJkQ29udHJvbC5jYXJkLmRhdGEgPSB1cGRhdGVkQ2FyZERhdGE7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIFxuICB9XG5cbiAgc2V0Q2FyZElkcyhyZXMpIHtcbiAgICByZXMucmVjb3JkcyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXMucmVjb3Jkcyk7XG4gICAgcmVzLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55LCByZWNvcmRJbmRleDogYW55KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaENhcmQgPSByZXMuY2FyZHNJbmZvPy5maW5kKFxuICAgICAgICAoaW5mbywgY2FyZEluZGV4KSA9PlxuICAgICAgICAgIHJlY29yZEluZGV4ID09PSBjYXJkSW5kZXggJiYgcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoQ2FyZCAmJiBPYmplY3Qua2V5cyhtYXRjaENhcmQpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1hdGNoQ2FyZFtyZXMuZmllbGROYW1lXSA9IHJlY29yZFtyZXMuZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmluZChcbiAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgICAgICBpZiAocmVzLmNhcmRzSW5mbz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzLmNhcmRzSW5mbz8uZm9yRWFjaCgoY2FyZElkKSA9PiB7XG4gICAgICAgICAgICAgIGNhcmRJZC5pZCA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybUZpZWxkLmNhcmQuZGF0YSA9IHJlcy5jYXJkc0luZm87XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldENhcmREYXRhID0gIXRoaXMuc2V0Q2FyZERhdGE7XG4gIH1cblxuICByZW1vdmVXaGl0ZVNwYWNlcygpIHtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24uY2xhc3MpIHNlY3Rpb24uY2xhc3MgPSBzZWN0aW9uLmNsYXNzLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRIeXBlcmxpbmtDb21wb25lbnRSb3V0ZSgpIHtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgICAgIGZpZWxkLmh5cGVybGluaz8uY29tcG9uZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucm91dGVyLnJlc2V0Q29uZmlnKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF0aDogJ2h5cGVybGluaycgKyBmaWVsZC5sYWJlbCxcbiAgICAgICAgICAgICAgY29tcG9uZW50OiBmaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMucm91dGVyLmNvbmZpZyxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBicm93c2VyVGFiQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBldmVudDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCl7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyBhbnkgY2hhbmdlIGluIER5bmFtaWMgRm9ybSBjb21wb25lbnQgU3RhdGVcbiAgICovXG4gIG9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHV0aWxpdGllcy5vbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UuaWQgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWZPYmogPSB0aGlzLmNvbXBvbmVudHNMaXN0LmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgubmFtZSA9PT0gcmVzcG9uc2UuaWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudFJlZk9iaikge1xuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmRhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29tcG9uZW50UmVmT2JqLnZhbHVlLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb21wb25lbnRSZWZPYmoudmFsdWUuaW5zdGFuY2UubmdPbkluaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zXG4gIGFwcGx5VXNlclBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGRpc2FibGVkRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBhbnkgPSBmb3JtRmllbGQucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBsZXQgc2VjdGlvblBlcm1pc3Npb25zOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghcGVybWlzc2lvbnMpIHNlY3Rpb25QZXJtaXNzaW9ucyA9IGZvcm1TZWN0aW9uLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9ucykgcGVybWlzc2lvbnMgPSB0aGlzLmZvcm0ucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc2VjdGlvblBlcm1pc3Npb25zICYmIHNlY3Rpb25QZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNlY3Rpb25QZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnBlcm1pc3Npb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG90YWxGaWVsZHMrKztcblxuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICBkaXNhYmxlZEZpZWxkcysrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikge1xuICAgICAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNGb3JtRGlzYWJsZWQgPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGRpc2FibGVkRmllbGRzO1xuICAgICAgdGhpcy5pc0Zvcm1IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBJRnJhbWUgaW4gaHlwZXJsaW5rIENvbnRyb2xcbiAgICovXG4gIHNlY3Rpb25EaXNhYmxlZChmb3JtU2VjdGlvbjogSUZvcm1TZWN0aW9uKSB7XG4gICAgaWYgKGZvcm1TZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFNlY3Rpb25GaWVsZHMoZm9ybVNlY3Rpb24sIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFNlY3Rpb25GaWVsZHMoZm9ybVNlY3Rpb24sIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlZFNlY3Rpb25GaWVsZHMoZm9ybVNlY3Rpb246IElGb3JtU2VjdGlvbiwgZGlzYWJsZWQ6IGJvb2xlYW4pe1xuICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5tYXAoKGZpZWxkOiBJRm9ybUZpZWxkKSA9PiB7XG4gICAgICBmaWVsZC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtU2VjdGlvbjtcbiAgfVxuXG4gIGxvYWRJRnJhbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgdGhpcy5oYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6ICdIeXBlcmxpbmsnLFxuICAgICAgd2lkdGg6IGZvcm1GaWVsZC5oeXBlcmxpbms/LndpZHRoID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA6ICc5MCUnLFxuICAgICAgaGVpZ2h0OiBmb3JtRmllbGQuaHlwZXJsaW5rPy5oZWlnaHQgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA6ICc4MCUnLFxuICAgICAgZGF0YTogeyB2YWx1ZTogZm9ybUZpZWxkLmh5cGVybGluaz8ubGluaywgaUZyYW1lSWQ6IGZvcm1GaWVsZC5sYWJlbCB9LFxuICAgIH0pO1xuICAgIHV0aWxpdGllcy5kcmFnZ2FibGVEaWFsb2coZm9ybUZpZWxkPy5maWVsZCk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEaWFsb2cgaW4gaHlwZXJsaW5rIENvbnRyb2xcbiAgICovXG4gIGh5cGVybGlua0RpYWxvZyhmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkJMQU5LKSB7XG4gICAgICB2YXIgdmFsdWUgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgIHdpbmRvdy5vcGVuKCdoeXBlcmxpbmsnICsgZm9ybUZpZWxkLmxhYmVsKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5TRUxGKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2h5cGVybGluaycgKyBmb3JtRmllbGQubGFiZWxdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkRJQUxPRykge1xuICAgICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50LCB7XG4gICAgICAgIGhlYWRlcjogZm9ybUZpZWxkLmh5cGVybGluay5kYXRhPy5oZWFkZXJcbiAgICAgICAgICA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuZGF0YT8uaGVhZGVyXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgd2lkdGg6IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJycsXG4gICAgICAgIHN0eWxlOiBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoPycnOiB7J21heC13aWR0aCc6J2ZpdC1jb250ZW50J30sXG4gICAgICAgIGhlaWdodDogZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHQgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA6ICc4MCUnLFxuICAgICAgICBkYXRhOiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyAgICAgICAgXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBmb3JtRmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnQ/Lm5hbWU7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgICAgICB0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSxcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgICBmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWxcbiAgICAgICk7XG4gICAgICBkaWFsb2cub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikge1xuICAgICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBJZnJhbWUgb24gTGFiZWxcbiAgICovXG4gIGxvYWRMYWJlbENvbnRyb2xJRnJhbWUoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsud2lkdGhcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoXG4gICAgICAgIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5oZWlnaHRcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodFxuICAgICAgICA6ICc4MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/LmxpbmtcbiAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmtcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAnSWZyYW1lQ29tcG9uZW50J1xuICAgICk7XG4gICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhcbiAgICAgIGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbFxuICAgICk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQub25DbGljaykge1xuICAgICAgZm9ybUZpZWxkLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZmluZCB0aGUgcmVxdWlyZWQgZmllbGQgaW4gZm9ybVxuICAgKi9cbiAgYXBwbHlSZXF1aXJlZEZpZWxkVmFsaWRhdGlvbigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zICYmIGZpZWxkLnZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb25zLmZvckVhY2goKHZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZC50eXBlID09PSBFVmFsaWRhdG9yLlJFUVVJUkVEKSB7XG4gICAgICAgICAgICAgICAgZmllbGQucmVxdWlyZWRGaWVsZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRGaWxlVXJscyhmaWxlVXJsczogYW55KSB7XG4gICAgaWYgKGZpbGVVcmxzICYmIGZpbGVVcmxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFVybHMgPSBmaWxlVXJscztcbiAgICAgIHRoaXMuc2hvd2ZpbGVVcGxvYWRFcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZUZvcm0oKSB7XG4gICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlscyA9ICcnO1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KGZvcm1TZWN0aW9uLmZpZWxkcykpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlsc1xuICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlRGV0YWlscyArICcgLCAnICsgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgZmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHMuc29tZShcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQucmVxdWlyZWRGaWVsZCAmJiBmaWVsZC5lcnJvck1lc3NhZ2UgJiYgIWZpZWxkLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsaWRpdHkgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgICAgICA1MDAwLFxuICAgICAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2VEZXRhaWxzLCA1MDAwLCAnSU5WQUxJRCBGSUVMRCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGl0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgdXBsb2FkRmlsZSBVUkwgaW4gRm9ybUZpZWxkIGluIGNhc2Ugb2YgRklMRV9VUExPQURcbiAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkZJTEVfVVBMT0FEKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZmlsZVVwbG9hZFVybHM7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucyAmJiBmaWVsZC52YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb25zLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4LnR5cGUgPT09IEVWYWxpZGF0b3IuUkVRVUlSRUQgJiYgIWZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmaWxlVXBsb2FkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkRGF0YSA9IGZpZWxkLmNhcmQuZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHg6IGFueSkgPT4geC5zZWxlY3RlZENhcmQgJiYgeC5zZWxlY3RlZENhcmQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhICYmIHNlbGVjdGVkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuY2FyZC5kYXRhID0gc2VsZWN0ZWREYXRhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodmFsaWRpdHkpIHtcbiAgICAgIC8vIFNhdmUgZ3JpZCBvbiBmb3JtU2F2ZSBCdXR0b25cbiAgICAgIGNvbnN0IHNhdmVBbGxHcmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVBbGxHcmlkVmFsdWVzJyk7XG4gICAgICBjb25zdCBnZXRCdG5zOiBhbnkgPVxuICAgICAgICB0aGlzLmVsPy5uYXRpdmVFbGVtZW50Py5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzYXZlUm93Jyk7XG4gICAgICBsZXQgY3VzdG9tQ29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgdGVtcFZhbHVlOiBhbnkgPSBbXTtcbiAgICAgIC8vIHNldCB2YWx1ZSBhcyAxIG9yIDAgaW4gY2FzZSBvZiBjaGVja2JveFxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcyAmJiB2YWxpZGl0eSkge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWUgPT09ICcnIHx8IGZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGFzIHN0cmluZ1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQudGltZU9ubHkgJiZcbiAgICAgICAgICAgICAgZmllbGQuc2F2ZUFzU3RyaW5nICYmXG4gICAgICAgICAgICAgICFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICdoaDptbSBhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgLyAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgLyAxMDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBvZiBhdXRvQ29tcGxldGUgYXMgc3RyaW5nc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgICFmaWVsZC5zaG93QWxsVmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQudmFsdWUubWFwKFxuICAgICAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB2YWx1ZVtmaWVsZC5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnOycpIHx8XG4gICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0ZW1wVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbXVsdGlTZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmXG4gICAgICAgICAgICAgIGZpZWxkLnNhdmVBc1N0cmluZyAhPT0gZmFsc2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlPy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID8gMSA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTYXZlIGdyaWQgb24gZm9ybVNhdmUgQnV0dG9uXG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJiAhY3VzdG9tQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudCA9IHRydWU7XG4gICAgICAgICAgICAgIGlmIChzYXZlQWxsR3JpZCkge1xuICAgICAgICAgICAgICAgIHNhdmVBbGxHcmlkLmNsaWNrKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBidG4gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICAgICAgYnRuPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2F2ZUZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZUFsbEdyaWQgPyA4MCA6IDBcbiAgICAgICk7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICAhZmllbGQuc2hvd0FsbFZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB0ZW1wVmFsdWVcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCcsJywgJzsnKVxuICAgICAgICAgICAgICAgID8uc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgID8ubWFwKCh2YWw6IGFueSkgPT4gKHsgW2ZpZWxkLmRpc3BsYXlGaWVsZF06IHZhbCB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT09IDEgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgKiAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgKiAxMDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbEZvcm0oKSB7XG4gICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0IHx8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2VcbiAgICAgICAgLmNvbmZpcm0oe1xuICAgICAgICAgIGtleTogJ2NhbmNlbEJ1dHRvbicsXG4gICAgICAgICAgbWVzc2FnZTogJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/JyxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXNbMF0uZGV0YWlsID09PSAnWWVzJykge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgICAgICAgdXRpbGl0aWVzLnJlbW92ZUFjdGl2ZUljb25DbGFzcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuY2VsRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgdXRpbGl0aWVzLnJlbW92ZUFjdGl2ZUljb25DbGFzcygpO1xuICAgIH1cbiAgfVxuXG4gIGxvb2t1cENsZWFyVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC52YWx1ZSkge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlID0gJyc7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgIH1cbiAgICBpZiAoZm9ybUZpZWxkLm9uQ2hhbmdlKSB7XG4gICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgY2FsZW5kZXIgd2lkdGhcbiAgICovXG4gIHNldENhbGFuZGVyV2lkdGgoKSB7XG4gICAgY29uc3QgY2FsYW5kZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnAtY2FsZW5kYXInKTtcbiAgICBsZXQgZm9ybTogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybScpO1xuICAgIGxldCB3aWR0aCA9IGZvcm0/LmNsaWVudFdpZHRoO1xuICAgIGNhbGFuZGVyRWxlbWVudD8uZm9yRWFjaCgoY2FsYW5kZXI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2FsYW5kZXJPZnNldExlZnQgPSBjYWxhbmRlci5vZmZzZXRMZWZ0O1xuICAgICAgaWYgKGNhbGFuZGVyT2ZzZXRMZWZ0IDw9IHdpZHRoIC8gMikge1xuICAgICAgICBjYWxhbmRlci5jbGFzc0xpc3QuYWRkKCdvcGVuLXJpZ2h0LXNpZGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGR5bmFtaWMgZGlhbG9nIGRhdGFcbiAgICovXG4gIHNldERpYWxvZ0RhdGEoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCBkYXRhOiBhbnkpOiBhbnkge1xuICAgIGlmIChkYXRhICYmIGZvcm1GaWVsZCkge1xuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBkYXRhID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKGRhdGEpO1xuICAgICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0LnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0Py50b1N0cmluZygpPy50cmltKCk7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQudmFsdWUgJiYgZm9ybUZpZWxkLnZhbHVlLnRvU3RyaW5nKCkudHJpbSgpKSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGRhdGEuY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8oXG4gICAgICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRhdGEuY29tcG9uZW50LCB7XG4gICAgICAgIC4uLmRhdGEuZGF0YSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxuICAgICAgICAgIGZpZWxkOiBmb3JtRmllbGQuZmllbGQsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlRmllbGQ6IGRhdGEuZGF0YT8udmFsdWVGaWVsZCxcbiAgICAgICAgICAuLi5kYXRhLmRhdGEuZGF0YSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRhYkZvY3VzRXZlbnQoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuJyArIGZvcm1GaWVsZC5maWVsZFxuICAgICk7XG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGlja0V2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQub25DbGljayAmJiBmb3JtRmllbGQuZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNsaWNrKGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgbGFiZWxcbiAgICovXG4gIHNlbGVjdExvb2t1cExhYmVsKGZvcm1GaWVsZDogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2xcbiAgICApIHtcbiAgICAgIGNvbnN0IHJlZjogYW55ID0gdGhpcy5zZXREaWFsb2dEYXRhKFxuICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFxuICAgICAgKTtcbiAgICAgIHV0aWxpdGllcy5kcmFnZ2FibGVEaWFsb2coXG4gICAgICAgIGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbFxuICAgICAgKTtcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgIGZvcm1GaWVsZD8ubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmxhYmVsLm9uUmV0dXJuKVxuICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uUmV0dXJuKGZvcm1GaWVsZC52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICBzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHRoaXMubG9va3VwRm9jdXNPdXQgPSB0cnVlO1xuICAgICAgbGV0IHZhbHVlID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5zZXREaWFsb2dEYXRhKGZvcm1GaWVsZCwgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpO1xuICAgICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhcbiAgICAgICAgZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsXG4gICAgICApO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtRmllbGQuZmllbGQpPy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubG9va3VwRm9jdXNPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIGZvcm1GaWVsZC5vblJldHVybihmb3JtRmllbGQudmFsdWUsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgICAgICAgY29uc3QgZm9ybUZpZWxkVmFsdWUgPVxuICAgICAgICAgICAgdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWUudGV4dFxuICAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZS50ZXh0IDogdmFsdWU7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgZXZlbnQgaW52b2tlZCAmJiBvcGVuIERpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkL2xhYmVsXG4gICAqL1xuICBoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbCkge1xuICAgICAgdGhpcy5zZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQpO1xuICAgICAgdGhpcy5zZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgQ2FsZW5kZXIgRGF0ZSBGb3JtYXQgJiYgc2V0IERhdGUgTWludXRlIGludGVydmFsXG4gICAqL1xuICBzZXRDYWxlbmRlckRhdGUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIpIHtcbiAgICAgIC8vIGNvbnZlcnQgdGltZSBpbnRvIGRhdGUgZm9ybWF0XG4gICAgICBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC50aW1lT25seSAmJlxuICAgICAgICAoZm9ybUZpZWxkLnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGZvcm1GaWVsZC52YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChmb3JtRmllbGQuc2hvd1RpbWUgfHwgZm9ybUZpZWxkLnRpbWVPbmx5KSAmJlxuICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgZm9ybUZpZWxkLm1pbnV0ZXNJbnRlcnZhbFxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgIHV0aWxpdGllcy5zZXRNaW51dGVzSW50ZXJ2YWwoZm9ybUZpZWxkLnZhbHVlKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKGZvcm1GaWVsZC5zaG93VGltZSB8fCBmb3JtRmllbGQudGltZU9ubHkpICYmXG4gICAgICAgICFmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgZm9ybUZpZWxkLm1pbnV0ZXNJbnRlcnZhbFxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IG5ldyBEYXRlKHV0aWxpdGllcy5zZXRNaW51dGVzSW50ZXJ2YWwobmV3IERhdGUoKSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUgPSBmb3JtRmllbGQudmFsdWU7XG4gICAgfVxuICB9XG4gIGNhbGVuZGFyQ2hhbmdlVmFsdWUoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICE9PSBmb3JtRmllbGQucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgICAgZm9ybUZpZWxkLnByZXZpb3VzVmFsdWUgPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2VkIHNlY3Rpb24gQ2xpY2tlZCBldmVudFxuICAgKi9cbiAgY2xpY2tlZFNlY3Rpb24oc2VjdGlvbjogSUZvcm1TZWN0aW9uKSB7XG4gICAgdGhpcy5zZWN0aW9uQ2xpY2tlZEV2ZW50LmVtaXQoc2VjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgaW4gTm90ZV9GaWVsZCBjb25ydHJvbFxuICAgKi9cbiAgaGFuZGxlTm90ZUZpZWxkRGlhbG9nKGZvcm1maWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKE5vdGVzQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGZvcm1maWVsZC5sYWJlbCBhcyBzdHJpbmcsXG4gICAgICB3aWR0aDogJzUwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiBmb3JtZmllbGQudmFsdWUsXG4gICAgICAgIGRpc2FibGVkVGV4dDogZm9ybWZpZWxkLmRpc2FibGVkVGV4dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhcbiAgICAgIGZvcm1maWVsZD8uZmllbGQgPyBmb3JtZmllbGQ/LmZpZWxkIDogZm9ybWZpZWxkPy5sYWJlbFxuICAgICk7XG4gICAgZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBmb3JtZmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtZmllbGQub25SZXR1cm4oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0Q2xhc3NOYW1lKGZvcm1GaWVsZDogSUZvcm1GaWVsZCk6IHN0cmluZyB7XG4gICAgaWYgKGZvcm1GaWVsZC5oaWRkZW4pIHJldHVybiAnIGhpZGRlbic7XG4gICAgZWxzZSByZXR1cm4gJyc7XG4gIH1cblxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGZvcm1GaWVsZDogYW55KSB7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBldmVudCkge1xuICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2VkIG9uRm9jdXNPdXQgRXZlbnRcbiAgICovXG4gIG9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBsZXQgcmVjb3JkOiBhbnkgPSB7fTtcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZCkge1xuICAgICAgICAgIHJlY29yZFtmb3JtRmllbGQuZmllbGRdID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB1dGlsaXRpZXMuc2V0SHlwZXJsaW5rUGFyYW1WYWx1ZShyZWNvcmQsIHRoaXMuZm9ybSk7XG4gICAgdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC5vbkZvY3VzT3V0ICYmIHRoaXMubG9va3VwRm9jdXNPdXQgPT09IGZhbHNlKSB7XG4gICAgICBmb3JtRmllbGQub25Gb2N1c091dChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmFja1NwYWNlRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgaWYgKHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3JtRmllbGQudmFsdWUudGV4dCA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0LnN1YnN0cmluZyhcbiAgICAgICAgMCxcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlLnRleHQubGVuZ3RoIC0gMVxuICAgICAgKTtcbiAgICAgIGlmIChmb3JtRmllbGQudmFsdWUudGV4dC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNsZWFyIHRoZSBkcm9wZG93biB2YWx1ZSB3aGVuIGNsaWNrIG9uIHhcbiAgICovXG4gIG9uQ2xlYXJWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQsIGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgIHRoaXMub25DaGFuZ2VFdmVudChmb3JtRmllbGQpO1xuICAgIHRoaXMuZHJvcERvd25DaGFuZ2VFdmVudC5lbWl0KGZvcm1GaWVsZCk7XG4gICAgaWYgKCFldmVudC52YWx1ZSkge1xuICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckRyb3Bkb3duVmFsdWUoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBvbkNoYW5nZSBFdmVudCB3aGVuIFZhbHVlIENoYW5nZWRcbiAgICovXG4gIG9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICBpZiAoZm9ybUZpZWxkLm9uQ2hhbmdlKSB7XG4gICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICB0eXBlT2YodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogY29udmVydCB1blNhZmUgbGluayBpbnRvIHNhZmUgbGlua1xuICAgKi9cbiAgc2FuaXRpemVVcmwodXJsOiBzdHJpbmcpIHtcbiAgICBsZXQgbGlua1VybDogYW55ID0gdXJsO1xuICAgIGlmIChsaW5rVXJsKSB7XG4gICAgICBsaW5rVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChsaW5rVXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmtVcmw7XG4gIH1cblxuICAvKipcbiAgICogaW52b2tlIG9uIGR5bmFtaWMgYnV0dG9ucyBjbGlja1xuICAgKi9cbiAgb25OZXdCdXR0b25DbGljayhidXR0b24pIHtcbiAgICBidXR0b24uZnVuYygpO1xuICB9XG5cbiAgc2VsZWN0ZWRDYXJkQ2xpY2tFdmVudChkYXRhOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmNhcmQgJiYgZmllbGQuY2FyZC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBvYmogPSBmaWVsZC5jYXJkLmRhdGFbZGF0YS5pbmRleF07XG4gICAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLnNlbGVjdGVkQ2FyZCkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iai5zZWxlY3RlZENhcmQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG9ialsnc2VsZWN0ZWRDYXJkJ10gPSAnY2FyZC1hY3RpdmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc2VsZWN0ZWRDYXJkKSB7XG4gICAgICBkYXRhWydzZWxlY3RlZENhcmQnXSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGFzc3dvcmRUeXBlKGZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQudGV4dFR5cGUgPT0gJ3RleHQnKSB7XG4gICAgICBmb3JtRmllbGQudGV4dFR5cGUgPSAncGFzc3dvcmQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRmllbGQudGV4dFR5cGUgPSAndGV4dCc7XG4gICAgfVxuICB9XG4gIG9uTGlua0NsaWNrKGxpbmssIGZvcm1TZWN0aW9uKXtcbiAgICBpZighbGluay5kaXNhYmxlZCAmJiAhZm9ybVNlY3Rpb24uZGlzYWJsZWQpe1xuICAgICAgbGluay5vbkNsaWNrKCk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
|