@churchillliving/se-ui-toolkit 6.54.155 → 6.54.157
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/esm2022/lib/components/base/form/form.component.mjs +3 -5
- package/esm2022/lib/services/utilities.service.mjs +2 -17
- package/fesm2022/churchillliving-se-ui-toolkit.mjs +4 -21
- package/fesm2022/churchillliving-se-ui-toolkit.mjs.map +1 -1
- package/lib/services/utilities.service.d.ts +0 -1
- package/package.json +1 -1
|
@@ -772,7 +772,7 @@ export class FormComponent {
|
|
|
772
772
|
field.value = utilities.setTimeInDate(field.value);
|
|
773
773
|
}
|
|
774
774
|
if (field.showTime) {
|
|
775
|
-
field.value = this.datePipe.transform(field.value, '
|
|
775
|
+
field.value = this.datePipe.transform(field.value, 'HH:mm:ss');
|
|
776
776
|
}
|
|
777
777
|
else if (!field.value?.toString()?.includes('AM') &&
|
|
778
778
|
!field.value?.toString()?.includes('PM')) {
|
|
@@ -853,9 +853,7 @@ export class FormComponent {
|
|
|
853
853
|
formSection.fields.forEach((field) => {
|
|
854
854
|
if (field.control === EFormControl.CALENDAR &&
|
|
855
855
|
field.timeOnly && field.showTime) {
|
|
856
|
-
|
|
857
|
-
field.value = this.datePipe.transform(field.value, 'hh:mm a');
|
|
858
|
-
}
|
|
856
|
+
field.value = this.datePipe.transform(field.value, 'hh:mm a');
|
|
859
857
|
}
|
|
860
858
|
if (field.control === EFormControl.MULTISELECT &&
|
|
861
859
|
field.value) {
|
|
@@ -1386,4 +1384,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
1386
1384
|
type: HostListener,
|
|
1387
1385
|
args: ['window:beforeunload', ['$event']]
|
|
1388
1386
|
}] } });
|
|
1389
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUErQyxZQUFZLEVBQStCLGdCQUFnQixFQUFjLFlBQVksR0FBc0IsTUFBTSxlQUFlLENBQUM7QUFJdk8sT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUEwQyxVQUFVLEVBQTZCLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRSxPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU83RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3RDLE1BQU0sT0FBTyxhQUFhO0lBVXhCLElBQWEsY0FBYyxDQUFDLEdBQVE7UUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFFBQVEsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQThCRCxZ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O2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRVAseUJBQXlCO3NCQUR4QixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQStDckUsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIENvbXBvbmVudEZhY3RvcnksIFZpZXdDb250YWluZXJSZWYsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgUmVuZGVyZXIyLCBOZ1pvbmUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgTm90ZXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbm90ZXMvbm90ZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEVGb3JtQ29udHJvbCwgRUh5cGVybGluaywgSUZvcm1GaWVsZCwgSUR5bmFtaWNGb3JtLCBJRm9ybVNlY3Rpb24sIEVWYWxpZGF0b3IsIElEeW5hbWljQ2FyZCwgSUZvcm1CdXR0b24sIEVGb3JtYXRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgZHJhZ2dhYmxlRGlhbG9nIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc3RpY2t5QWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGZvcm06IElEeW5hbWljRm9ybTtcbiAgQElucHV0KCkgc2F2ZUJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY2FuY2VsQnV0dG9uTGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBoaWRlU2F2ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlQ2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1CdXR0b25zOiBJRm9ybUJ1dHRvbltdID0gW107XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiBcbiAgQElucHV0KCkgc2V0IGFjdGl2ZVRlc3RNb2RlKHZhbDogYW55KSB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xuICAgICAgZGVidWdnZXI7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKSBzYXZlRm9ybTogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNhbmNlbEZvcm06IEV2ZW50RW1pdHRlcjxJRm9ybVNlY3Rpb25bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkcm9wRG93bkNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlY3Rpb25DbGlja2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxJRm9ybVNlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkcmVuKCdkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGR5bmFtaWNDb21wb25lbnRDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICBkeW5hbWljQ2FzZSA9IEVGb3JtQ29udHJvbDtcbiAgc2F2ZUZvcm1QYWdlOiBTdWJzY3JpcHRpb247XG4gIHBlcm1pc3Npb25UeXBlID0gRVBlcm1pc3Npb25UeXBlO1xuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNGb3JtSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbXBvbmVudHNMaXN0OiBJRGljdGlvbmFyeVtdID0gW107XG4gIGZpbGVVcGxvYWRVcmxzOiBhbnk7XG4gIHNob3dmaWxlVXBsb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FyZExpc3Q6IElEeW5hbWljQ2FyZDtcbiAgY2FsZW5kYXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZGVmYXVsdERhdGU6IHN0cmluZyA9ICcnO1xuICBsb29rdXBGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3l5JztcbiAgc2V0Q2FyZERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGRpYWxvZ1JlZjogYW55O1xuXG4gIC8vIGFwcGx5IGNoZWNrZWQvdW5DaGVja2VkIHByb3AgZm9yIENoZWNrQm94IG9mIHRoZSBGb3JtXG4gIGNoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICB1bkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBoeXBlcmxpbmtTZXJ2aWNlIDogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnZUxvZ2dlclNlcnZpY2U6IFBhZ2VMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAvLyBicm93c2VyIHRhYiBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0IHx8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLnNldFRvb2x0aXAoKTtcbiAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZm9ybVxuICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBzdGFydCBjYXJkTGlzdCByZWZlcmVuY2UgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgICAgbGV0IGZvcm1WYWx1ZXMgPSB7IC4uLnRoaXMuZm9ybSB9O1xuXG4gICAgICBmb3JtVmFsdWVzLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRmllbGRSZXF1aXJlZChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoZmllbGQuaXNQYXNzd29yZCkge1xuICAgICAgICAgICAgICBmaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gZGF0ZVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgZmllbGQ/Lm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGZpZWxkWydwcmV2aW91c1ZhbHVlJ10gPSBmaWVsZD8udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnRpbWVPbmx5ICYmXG4gICAgICAgICAgICAgIChmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShmaWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgIGZpZWxkPy52YWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkPy52YWx1ZS5tYXAoXG4gICAgICAgICAgICAgICAgKHZhbHVlOiBhbnkpID0+IHZhbHVlW2ZpZWxkPy5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnOycpIHx8XG4gICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoJywnLCAnOycpXG4gICAgICAgICAgICAgICAgICA/LnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWw6IGFueSkgPT4gKHsgW2ZpZWxkPy5kaXNwbGF5RmllbGRdOiB2YWwgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBtdWx0aVNlbGVjdCBzdHJpbmcgdmFsdWUgaW4gYXJyYXlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlLnJlcGxhY2UoL1xccyosXFxzKi9nLCBcIixcIik/LnRvU3RyaW5nKCk/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBbZmllbGQudmFsdWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHt9O1xuICAgICAgICAgICAgICBmaWVsZD8uY2FyZD8uZGF0YT8uZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgeC5keW5hbWljRm9ybSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb25zOiBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm1WYWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFbmQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAneScgfHxcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hcHBseVVzZXJQZXJtaXNzaW9ucygpO1xuICAgICAgdGhpcy5yZW1vdmVXaGl0ZVNwYWNlcygpO1xuICAgICAgdGhpcy5zZXRIeXBlcmxpbmtDb21wb25lbnRSb3V0ZSgpO1xuICAgICAgdGhpcy5zZXRDYWxhbmRlcldpZHRoKCk7XG4gICAgICB0aGlzLm9yZGVyRm9ybVNlY3Rpb25zKCk7XG4gICAgICB0aGlzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuICBvcmRlckZvcm1TZWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICAgIGxldCB1c2VyU2VjdGlvbiA9IGN1cnJlbnRVc2VySW5mbz8ucGFnZVNlY3Rpb25zPy5sZW5ndGggPiAwID8gY3VycmVudFVzZXJJbmZvLnBhZ2VTZWN0aW9ucyA6IFtdO1xuICAgICAgY29uc3QgcGFnZVVybCA9IHRoaXMucGFnZU5hbWUoKTtcbiAgICAgIGlmICh1c2VyU2VjdGlvbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICB1c2VyU2VjdGlvbiA9IHVzZXJTZWN0aW9uLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyU2VjdGlvbjpcIiwgdXNlclNlY3Rpb24pXG4gICAgICAgIHVzZXJTZWN0aW9uLmZvckVhY2goKHBhZ2VTZWN0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZE5hbWU6IGJvb2xlYW4gPSB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5zb21lKChzZWN0aW9uKSA9PiBwYWdlU2VjdGlvbj8uc2VjdGlvbj8udG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbj8ubmFtZT8udG9Mb3dlckNhc2UoKSkgJiYgcGFnZVNlY3Rpb24/LnBhZ2U/LnRvTG93ZXJDYXNlKCkgPT09IHBhZ2VVcmw/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKG1hdGNoZWROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZpbmRJbmRleCgoc2VjdGlvbikgPT4gcGFnZVNlY3Rpb24/LnNlY3Rpb24/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb24/Lm5hbWU/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKHBhZ2VTZWN0aW9uLnJvbGUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucm9sZXM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhwYWdlU2VjdGlvbi5yb2xlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3dhcFNlY3Rpb25zKHBhZ2VTZWN0aW9uLm9yZGVyIC0gMSwgaW5kZXgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnNbaW5kZXhdLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3dhcFNlY3Rpb25zKHBhZ2VTZWN0aW9uLm9yZGVyIC0gMSwgaW5kZXgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBzd2FwU2VjdGlvbnMob3JkZXI6IG51bWJlciwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHJlT3JkZXJTZWN0aW9uID0geyAuLi50aGlzLmZvcm0uZm9ybVNlY3Rpb25zW29yZGVyXSB9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnNbb3JkZXJdID0gdGhpcy5mb3JtLmZvcm1TZWN0aW9uc1tpbmRleF07XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9uc1tpbmRleF0gPSByZU9yZGVyU2VjdGlvbjtcbiAgfVxuICBwYWdlTmFtZSgpIHtcbiAgICBsZXQgdXJsID0gdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSk7XG4gICAgaWYgKHVybD8uaW5jbHVkZXMoJz8nKSkge1xuICAgICAgdXJsID0gdXJsLnNwbGl0KCc/JylbMF07XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgc2V0Rm9ybVNlY3Rpb24oc2VjdGlvbiwgaW5kZXgsIHBhZ2VTZWN0aW9uKSB7XG4gICAgY29uc3QgcmVPcmRlclNlY3Rpb24gPSB7IC4uLnNlY3Rpb24gfTtcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5zcGxpY2UocGFnZVNlY3Rpb24/Lm9yZGVyIC0gMSwgMCwgcmVPcmRlclNlY3Rpb24pO1xuICB9XG4gIGNoZWNrRmllbGRSZXF1aXJlZChmaWVsZDogYW55KSB7XG4gICBpZihmaWVsZC52YWxpZGF0aW9ucz8uZmluZCh2YWxpZGF0aW9uPT52YWxpZGF0aW9uLnR5cGU9PT1FVmFsaWRhdG9yLlJFUVVJUkVEKSl7XG4gICAgICBmaWVsZC5yZXF1aXJlZEZpZWxkID0gdHJ1ZTtcbiAgIH1cbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRhciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kYXJJbnB1dFZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmKCFmb3JtRmllbGQudGltZU9ubHkpe1xuICAgICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZvcm1GaWVsZC5maWVsZClbMF1cbiAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF2YWw/LnRhcmdldD8udmFsdWU/LmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBmb3JtRmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuU0hPUlREQVRFKSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KShcXGR7Mn0pKFxcZHs0fSkvLCAnJDEvJDIvJDMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodmFsPy50YXJnZXQ/LnZhbHVlLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCkuc3BsaXQoJy8nKVsyXTtcbiAgICAgICAgaWYgKHllYXI/Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcbiAgICAgICAgICAgICdlbi1VUydcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXI/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAgXG4gIH1cblxuICAvLyBzZXQgcGVyY2VudCBhbmQgZGVjaW1hbCB2YWx1ZXNcbiAgc2V0bnVtZXJpY3ZhbHVlcygpIHtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDKSB7XG4gICAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gZmllbGQ/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgKGZpZWxkLnZhbHVlICogMTAwKT8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlICogMTAwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICBkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBmb3JtIGhhcyBhbnkgZmllbGQgd2l0aCBkeW5hbWljIGNvbXBvbmVudDtcbiAgICogQ3JlYXRlcyBjb21wb25lbnQgaW5zdGFuY2UgdXNpbmcgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAqIEluamVjdHMgY29tcG9uZW50IHRocm91Z2ggdmlld1JlZi5jcmVhdGVDb21wb25lbnQoKVxuICAgKiBQYXNzZXMgZGF0YSB0byBjb21wb25lbnRcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIHBhc3NlZCB0byB0aGUgY29tcG9uZW50c1xuICAgKiBGaW5hbGx5IGZvcmNlcyBBbmd1bGFyIHRvIGRldGVjaCBjaGFuZ2VzXG4gICAqL1xuICBsb2FkRHluYW1pY0NvbXBvbmVudHMoKSB7XG4gICAgdGhpcy5jb21wb25lbnRzTGlzdCA9IFtdO1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnksIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQpIHtcbiAgICAgICAgICBjb25zdCB2aWV3UmVmOiBhbnkgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRDb250YWluZXIuZmluZChcbiAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICB4LmVsZW1lbnQubmF0aXZlRWxlbWVudC5pZCA9PSBgJHtmb3JtU2VjdGlvbi5uYW1lfS0ke2ZpZWxkSW5kZXh9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaGFuZGxlcnMsXG4gICAgICAgICAgfSA9IGZpZWxkLmNvbXBvbmVudENvbnRyb2w7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID1cbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCk7XG4gICAgICAgICAgLy8gUGFzc2luZyBkYXRhIHRvIGNvbXBvbmVudFxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdSZWY/LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICAgICAgICBpZiAoY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICBpZihmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQpe1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5hZGRDbGFzcyhjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgZmllbGQuY29tcG9uZW50Q29udHJvbC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhID8/IHt9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogZmllbGQuY29tcG9uZW50Q29udHJvbD8uaWQsXG4gICAgICAgICAgICAgIHZhbHVlOiBjb21wb25lbnRSZWYsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZXMgdG8gdGhlIGV2ZW50cyBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudHNcbiAgICAgICAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhoYW5kbGVycykuZm9yRWFjaCgoW2V2ZW50LCBoYW5kbGVyXTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZVtldmVudF0gYXMgRXZlbnRFbWl0dGVyPGFueT4pPy5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGludm9rZSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vaW52b2tlIHdoZW4gZmlsZSB1cGxvYWQgT1IgZGVsZXRlIGEgZmlsZVxuICBmaWxlT25jaGFuZ2VFdmVudCgpIHtcbiAgICB0aGlzLnNldENhcmREYXRhID0gIXRoaXMuc2V0Q2FyZERhdGE7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gbG9hZCBkeW5hbWljIGNvbXBvbmVudHMgaWYgZXhpc3QgaW4gZm9ybVxuICAgIHRoaXMuc2V0bnVtZXJpY3ZhbHVlcygpO1xuICAgIHRoaXMub25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCk7XG4gICAgdGhpcy5sb2FkRHluYW1pY0NvbXBvbmVudHMoKTtcbiAgICB0aGlzLnNldENhcmRSZXNwb25zZUlkKCk7XG4gIH1cblxuICBzZXRDYXJkUmVzcG9uc2VJZCgpIHtcbiAgICB1dGlsaXRpZXMub25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmKHJlcy5kYXRhPy5pc1NhdmUpe1xuICAgICAgICB0aGlzLnNldENhcmRJZHMocmVzLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXREZWxldGVDYXJkSWQocmVzLmRhdGE/LmNhcmREYXRhLCByZXMuZGF0YT8uZHluYW1pY0Zvcm0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGVsZXRlQ2FyZElkKHVwZGF0ZWRDYXJkRGF0YTphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pe1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOklGb3JtU2VjdGlvbik9PntcbiAgICAgIGNvbnN0IGNhcmRDb250cm9sID0gc2VjdGlvbi5maWVsZHMuZmluZCgoZmllbGQ6SUZvcm1GaWVsZCk9PiBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICBpZihjYXJkQ29udHJvbCl7XG4gICAgICAgIGNhcmRDb250cm9sLmNhcmQuZGF0YSA9IHVwZGF0ZWRDYXJkRGF0YTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZHluYW1pY0Zvcm0gPSB0aGlzLmZvcm07XG4gIH1cblxuICBzZXRDYXJkSWRzKHJlcykge1xuICAgIHJlcy5yZWNvcmRzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlcy5yZWNvcmRzKTtcbiAgICByZXMucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnksIHJlY29yZEluZGV4OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoQ2FyZCA9IHJlcy5jYXJkc0luZm8/LmZpbmQoXG4gICAgICAgIChpbmZvLCBjYXJkSW5kZXgpID0+XG4gICAgICAgICAgcmVjb3JkSW5kZXggPT09IGNhcmRJbmRleCAmJiByZWNvcmRbcmVzLmZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKV1cbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hDYXJkICYmIE9iamVjdC5rZXlzKG1hdGNoQ2FyZCk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWF0Y2hDYXJkW3Jlcy5maWVsZE5hbWVdID0gcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZvcm1GaWVsZDogSUZvcm1GaWVsZDtcbiAgICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmKHJlcy5jYXJkSWQpe1xuICAgICAgICAgIGZvcm1GaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmluZChcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQgJiYgZmllbGQuaWQgPT09IHJlcy5jYXJkSWRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1GaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmluZChcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgICAgaWYgKHJlcy5jYXJkc0luZm8/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcy5jYXJkc0luZm8/LmZvckVhY2goKGNhcmRJZCkgPT4ge1xuICAgICAgICAgICAgICBjYXJkSWQuaWQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1GaWVsZC5jYXJkLmRhdGEgPSByZXMuY2FyZHNJbmZvO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRDYXJkRGF0YSA9ICF0aGlzLnNldENhcmREYXRhO1xuICB9XG5cbiAgcmVtb3ZlV2hpdGVTcGFjZXMoKSB7XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChzZWN0aW9uLmNsYXNzKSBzZWN0aW9uLmNsYXNzID0gc2VjdGlvbi5jbGFzcy5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0SHlwZXJsaW5rQ29tcG9uZW50Um91dGUoKSB7XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgJiZcbiAgICAgICAgICBmaWVsZC5oeXBlcmxpbms/LmNvbXBvbmVudFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5yZXNldENvbmZpZyhbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhdGg6ICdoeXBlcmxpbmsnICsgZmllbGQubGFiZWwsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogZmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLnJvdXRlci5jb25maWcsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYnJvd3NlclRhYkNsb3NlRXZlbnQoZXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpe1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgYW55IGNoYW5nZSBpbiBEeW5hbWljIEZvcm0gY29tcG9uZW50IFN0YXRlXG4gICAqL1xuICBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB1dGlsaXRpZXMub25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLmlkICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmT2JqID0gdGhpcy5jb21wb25lbnRzTGlzdC5maW5kKFxuICAgICAgICAgICh4KSA9PiB4Lm5hbWUgPT09IHJlc3BvbnNlLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjb21wb25lbnRSZWZPYmopIHtcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS5kYXRhID8/IHt9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZk9iai52YWx1ZS5pbnN0YW5jZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYocmVzcG9uc2U/LmxvYWRDb21wb25lbnQpe1xuICAgICAgICAgICAgY29tcG9uZW50UmVmT2JqLnZhbHVlLmluc3RhbmNlLm5nT25Jbml0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9uc1xuICBhcHBseVVzZXJQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpIHtcbiAgICAgIGxldCB0b3RhbEZpZWxkczogbnVtYmVyID0gMDtcbiAgICAgIGxldCBkaXNhYmxlZEZpZWxkczogbnVtYmVyID0gMDtcbiAgICAgIGxldCBoaWRkZW5GaWVsZHM6IG51bWJlciA9IDA7XG5cbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9uczogYW55ID0gZm9ybUZpZWxkLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgbGV0IHNlY3Rpb25QZXJtaXNzaW9uczogYW55ID0gW107XG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb25zKSBzZWN0aW9uUGVybWlzc2lvbnMgPSBmb3JtU2VjdGlvbi5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGlmICghcGVybWlzc2lvbnMpIHBlcm1pc3Npb25zID0gdGhpcy5mb3JtLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHNlY3Rpb25QZXJtaXNzaW9ucyAmJiBzZWN0aW9uUGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBzZWN0aW9uUGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5wZXJtaXNzaW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnBlcm1pc3Npb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1TZWN0aW9uLmRpc2FibGVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG90YWxGaWVsZHMrKztcblxuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICBkaXNhYmxlZEZpZWxkcysrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikge1xuICAgICAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNGb3JtRGlzYWJsZWQgPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGRpc2FibGVkRmllbGRzO1xuICAgICAgdGhpcy5pc0Zvcm1IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBJRnJhbWUgaW4gaHlwZXJsaW5rIENvbnRyb2xcbiAgICovXG4gIHNlY3Rpb25EaXNhYmxlZChmb3JtU2VjdGlvbjogSUZvcm1TZWN0aW9uKSB7XG4gICAgaWYgKGZvcm1TZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFNlY3Rpb25GaWVsZHMoZm9ybVNlY3Rpb24sIHRydWUpO1xuICAgIH0gZWxzZSBpZihmb3JtU2VjdGlvbi5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbiwgZmFsc2UpO1xuICAgIH1lbHNlIHtcbiAgICAgIHJldHVybiBmb3JtU2VjdGlvbjtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlZFNlY3Rpb25GaWVsZHMoZm9ybVNlY3Rpb246IElGb3JtU2VjdGlvbiwgZGlzYWJsZWQ6IGJvb2xlYW4pe1xuICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5tYXAoKGZpZWxkOiBJRm9ybUZpZWxkKSA9PiB7XG4gICAgICBmaWVsZC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtU2VjdGlvbjtcbiAgfVxuXG4gIGxvYWRJRnJhbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgdGhpcy5oYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6ICdIeXBlcmxpbmsnLFxuICAgICAgd2lkdGg6IGZvcm1GaWVsZC5oeXBlcmxpbms/LndpZHRoID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA6ICc5MCUnLFxuICAgICAgaGVpZ2h0OiBmb3JtRmllbGQuaHlwZXJsaW5rPy5oZWlnaHQgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA6ICc4MCUnLFxuICAgICAgZGF0YTogeyB2YWx1ZTogZm9ybUZpZWxkLmh5cGVybGluaz8ubGluaywgaUZyYW1lSWQ6IGZvcm1GaWVsZC5sYWJlbCB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQpO1xuICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtRmllbGQub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGh5cGVybGluayBDb250cm9sXG4gICAqL1xuICBoeXBlcmxpbmtEaWFsb2coZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCBldmVudDogYW55KSB7XG4gICAgaWYgKGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5CTEFOSykge1xuICAgICAgdmFyIHZhbHVlID0gZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXM7XG4gICAgICB3aW5kb3cub3BlbignaHlwZXJsaW5rJyArIGZvcm1GaWVsZC5sYWJlbCk7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuU0VMRikge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydoeXBlcmxpbmsnICsgZm9ybUZpZWxkLmxhYmVsXSwge1xuICAgICAgICBxdWVyeVBhcmFtczogZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cpIHtcbiAgICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50LCBmb3JtRmllbGQuaHlwZXJsaW5rPy5wYXJhbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnQsIHtcbiAgICAgICAgICBoZWFkZXI6IGZvcm1GaWVsZC5oeXBlcmxpbmsuZGF0YT8uaGVhZGVyXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuZGF0YT8uaGVhZGVyXG4gICAgICAgICAgICA6ICcnLFxuICAgICAgICAgIHdpZHRoOiBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA6ICcnLFxuICAgICAgICAgIHN0eWxlOiBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoID8ge30gOiB7ICdtYXgtd2lkdGgnOiAnZml0LWNvbnRlbnQnIH0sXG4gICAgICAgICAgaGVpZ2h0OiBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICAgICAgZGF0YTogZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXNcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpe1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBmb3JtRmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnQ/Lm5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8oXG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSxcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gSWZyYW1lIG9uIExhYmVsXG4gICAqL1xuICBsb2FkTGFiZWxDb250cm9sSUZyYW1lKGZvcm1GaWVsZDogYW55KSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGZvcm1GaWVsZC5sYWJlbC5uYW1lLFxuICAgICAgd2lkdGg6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLndpZHRoXG4gICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aFxuICAgICAgICA6ICc5MCUnLFxuICAgICAgaGVpZ2h0OiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8uaGVpZ2h0XG4gICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHRcbiAgICAgICAgOiAnODAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5saW5rXG4gICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgaUZyYW1lSWQ6IGZvcm1GaWVsZC5sYWJlbC5uYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgJ0lmcmFtZUNvbXBvbmVudCdcbiAgICApO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICB9KTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC5vbkNsaWNrKSB7XG4gICAgICBmb3JtRmllbGQub25DbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBmaW5kIHRoZSByZXF1aXJlZCBmaWVsZCBpbiBmb3JtXG4gICAqL1xuLy8gICBhcHBseVJlcXVpcmVkRmllbGRWYWxpZGF0aW9uKCkge1xuLy8gY29uc29sZS5sb2coJ2FwcGx5aW5nIHJlcXVpcmVkZmlsZWQgdmFsaWRhdGlvbnMnKVxuLy8gICAgIGlmIChcbi8vICAgICAgIHRoaXMuZm9ybSAmJlxuLy8gICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuLy8gICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4vLyAgICAgKSB7XG4vLyAgICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb24pID0+IHtcbi8vICAgICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbi8vICAgICAgICAgICBjb25zb2xlLmxvZygnZmllbGQnLCBmaWVsZClcbi8vICAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvbnMgJiYgZmllbGQudmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuLy8gICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbnMuZm9yRWFjaCgodmFsaWQpID0+IHtcbi8vICAgICAgICAgICAgICAgaWYgKHZhbGlkLnR5cGUgPT09IEVWYWxpZGF0b3IuUkVRVUlSRUQpIHtcbi8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZmllbGQnLGZpZWxkLCdpcyByZXF1aXJlZCcpXG4vLyAgICAgICAgICAgICAgICAgZmllbGQucmVxdWlyZWRGaWVsZCA9IHRydWU7XG4vLyAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgIH0pO1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgfSk7XG4vLyAgICAgICB9KTtcbi8vICAgICB9XG4vLyAgIH1cblxuICBzZXRGaWxlVXJscyhmaWxlVXJsczogYW55KSB7XG4gICAgaWYgKGZpbGVVcmxzICYmIGZpbGVVcmxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFVybHMgPSBmaWxlVXJscztcbiAgICAgIHRoaXMuc2hvd2ZpbGVVcGxvYWRFcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZUZvcm0oKSB7XG4gICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlscyA9ICcnO1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgbGV0IG11bGlTZWxlY3RWYWx1ZSA9IHt9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KGZvcm1TZWN0aW9uLmZpZWxkcykpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlsc1xuICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlRGV0YWlscyArICcgLCAnICsgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgZmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHMuc29tZShcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQucmVxdWlyZWRGaWVsZCAmJiBmaWVsZC5lcnJvck1lc3NhZ2UgJiYgIWZpZWxkLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsaWRpdHkgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgICAgICA1MDAwLFxuICAgICAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2VEZXRhaWxzLCA1MDAwLCAnSU5WQUxJRCBGSUVMRCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGl0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgdXBsb2FkRmlsZSBVUkwgaW4gRm9ybUZpZWxkIGluIGNhc2Ugb2YgRklMRV9VUExPQURcbiAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkZJTEVfVVBMT0FEKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZmlsZVVwbG9hZFVybHM7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucyAmJiBmaWVsZC52YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb25zLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4LnR5cGUgPT09IEVWYWxpZGF0b3IuUkVRVUlSRUQgJiYgIWZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmaWxlVXBsb2FkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkRGF0YSA9IGZpZWxkLmNhcmQuZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHg6IGFueSkgPT4geC5zZWxlY3RlZENhcmQgJiYgeC5zZWxlY3RlZENhcmQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhICYmIHNlbGVjdGVkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuY2FyZC5kYXRhID0gc2VsZWN0ZWREYXRhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodmFsaWRpdHkpIHtcbiAgICAgIC8vIFNhdmUgZ3JpZCBvbiBmb3JtU2F2ZSBCdXR0b25cbiAgICAgIGxldCBjdXN0b21Db21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCB0ZW1wVmFsdWU6IGFueSA9IFtdO1xuICAgICAgbGV0IHNhdmVBbGxHcmlkOiBhbnkgPSBbXTtcbiAgICAgIGxldCBnZXRCdG5zOiBhbnkgPSBbXTtcbiAgICAgIC8vIHNldCB2YWx1ZSBhcyAxIG9yIDAgaW4gY2FzZSBvZiBjaGVja2JveFxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcyAmJiB2YWxpZGl0eSkge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWUgPT09ICcnIHx8IGZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGFzIHN0cmluZ1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQudGltZU9ubHkgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmllbGQuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkLnZhbHVlLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykgJiZcbiAgICAgICAgICAgICAgICAhZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWVsZC52YWx1ZSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTlVNRVJJQykge1xuICAgICAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gZmllbGQ/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IGZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLicpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjYWxjdWxhdGVkVmFsdWUgPyBmaWVsZC52YWx1ZSA6IGZpZWxkLnZhbHVlIC8gMTAwKT8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcuJykgJiYgIWNhbGN1bGF0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgLyAxMDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBvZiBhdXRvQ29tcGxldGUgYXMgc3RyaW5nc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgICFmaWVsZC5zaG93QWxsVmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQudmFsdWUubWFwKFxuICAgICAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB2YWx1ZVtmaWVsZC5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnOycpIHx8XG4gICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0ZW1wVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbXVsdGlTZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmXG4gICAgICAgICAgICAgIGZpZWxkLnNhdmVBc1N0cmluZyAhPT0gZmFsc2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBtdWxpU2VsZWN0VmFsdWVbZmllbGQuZmllbGRdID0gZmllbGQudmFsdWVcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA/IDEgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2F2ZSBncmlkIG9uIGZvcm1TYXZlIEJ1dHRvblxuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiYgIWN1c3RvbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICBzYXZlQWxsR3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nICsgZmllbGQ/LmNvbXBvbmVudENvbnRyb2w/LmlkICsgJyAnICsgJyNzYXZlQWxsR3JpZFZhbHVlcycpO1xuICAgICAgICAgICAgICBnZXRCdG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQgKyAnICcgKyAnLnNhdmVSb3cnKTtcbiAgICAgICAgICAgICAgaWYgKHNhdmVBbGxHcmlkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNhdmVBbGxHcmlkWzBdLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRm9ybVBhZ2UgPSBpbnRlcnZhbCg3NTApLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlRm9ybVBhZ2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmIChnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzYXZlUm93QnRuIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICAgICAgICAgIHNhdmVSb3dCdG4/LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgaWYgKCFzYXZlQWxsR3JpZC5sZW5ndGggJiYgIWdldEJ0bnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2F2ZUZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQudGltZU9ubHkgJiYgZmllbGQuc2hvd1RpbWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgIGlmICghdXRpbGl0aWVzLmlzVmFsaWRUaW1lRm9ybWF0KGZpZWxkLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICdoaDptbSBhJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBtdWxpU2VsZWN0VmFsdWVbZmllbGQuZmllbGRdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICAhZmllbGQuc2hvd0FsbFZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB0ZW1wVmFsdWVcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCcsJywgJzsnKVxuICAgICAgICAgICAgICAgID8uc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgID8ubWFwKCh2YWw6IGFueSkgPT4gKHsgW2ZpZWxkLmRpc3BsYXlGaWVsZF06IHZhbCB9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID09PSAxID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGZpZWxkPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIChmaWVsZC52YWx1ZSAqIDEwMCk/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWxGb3JtKCkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCB8fCB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlXG4gICAgICAgIC5jb25maXJtKHtcbiAgICAgICAgICBrZXk6ICdjYW5jZWxCdXR0b24nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlPycsXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzWzBdLmRldGFpbCA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbEZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgICAgICAgIHV0aWxpdGllcy5yZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbmNlbEZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgIHV0aWxpdGllcy5yZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICB9XG4gIH1cblxuICBsb29rdXBDbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgfVxuICAgLy8gdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgY2FsZW5kYXIgd2lkdGhcbiAgICovXG4gIHNldENhbGFuZGVyV2lkdGgoKSB7XG4gICAgY29uc3QgY2FsYW5kZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnAtY2FsZW5kYXInKTtcbiAgICBsZXQgZm9ybTogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybScpO1xuICAgIGxldCB3aWR0aCA9IGZvcm0/LmNsaWVudFdpZHRoO1xuICAgIGNhbGFuZGVyRWxlbWVudD8uZm9yRWFjaCgoY2FsYW5kZXI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2FsYW5kZXJPZnNldExlZnQgPSBjYWxhbmRlci5vZmZzZXRMZWZ0O1xuICAgICAgaWYgKGNhbGFuZGVyT2ZzZXRMZWZ0IDw9IHdpZHRoIC8gMikge1xuICAgICAgICBjYWxhbmRlci5jbGFzc0xpc3QuYWRkKCdvcGVuLXJpZ2h0LXNpZGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGR5bmFtaWMgZGlhbG9nIGRhdGFcbiAgICovXG4gIHNldERpYWxvZ0RhdGEoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCBkYXRhOiBhbnkpOiBhbnkge1xuICAgIGlmIChkYXRhICYmIGZvcm1GaWVsZCkge1xuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBkYXRhID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKGRhdGEpO1xuICAgICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0LnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0Py50b1N0cmluZygpPy50cmltKCk7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQudmFsdWUgJiYgZm9ybUZpZWxkLnZhbHVlLnRvU3RyaW5nKCkudHJpbSgpKSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGRhdGEuY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8oXG4gICAgICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRhdGEuY29tcG9uZW50LCB7XG4gICAgICAgIC4uLmRhdGEuZGF0YSxcbiAgICAgICAgc3R5bGVDbGFzczogJ2xvb2t1cC1tb2RlbCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgICAgICBmaWVsZDogZm9ybUZpZWxkLmZpZWxkLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB2YWx1ZUZpZWxkOiBkYXRhLmRhdGE/LnZhbHVlRmllbGQsXG4gICAgICAgICAgLi4uZGF0YS5kYXRhLmRhdGEsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0YWJGb2N1c0V2ZW50KGZvcm1GaWVsZDogYW55KSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLicgKyBmb3JtRmllbGQuZmllbGRcbiAgICApO1xuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICBmb3JtRmllbGQub25DbGljayhmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGxhYmVsXG4gICAqL1xuICBzZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQ6IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFxuICAgICkge1xuICAgICAgaWYoZXZlbnQuY3RybEtleSAmJiBmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCl7XG4gICAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmNvbXBvbmVudCwgZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhLmRhdGEpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnN0IHJlZjogYW55ID0gdGhpcy5zZXREaWFsb2dEYXRhKFxuICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQ/LmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQubGFiZWwub25SZXR1cm4pXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vblJldHVybihmb3JtRmllbGQudmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgfVxuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkaWFsb2cgcmVmIHdoZW4gcG9wdXAgb3BlblxuICAgKi9cbiAgc2V0RHluYW1pY0RpYWxvZ1JlZihyZWY6IGFueSl7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgfVxuXG4gIGludGVyY2VwdERpYWxvZ0Nsb3NlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0IHx8IHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0KSB7XG4gICAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpID09IHRydWUpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgdGhpcy5sb29rdXBGb2N1c091dCA9IHRydWU7XG4gICAgICBsZXQgdmFsdWUgPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuc2V0RGlhbG9nRGF0YShmb3JtRmllbGQsIGZvcm1GaWVsZC5sb29rdXBDb250cm9sKTtcbiAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWwpO1xuICAgICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9ZmFsc2U7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUZpZWxkLmZpZWxkKT8uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxvb2t1cEZvY3VzT3V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSBmb3JtRmllbGQub25SZXR1cm4oZm9ybUZpZWxkLnZhbHVlLCByZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZFZhbHVlID1cbiAgICAgICAgICAgIHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlLnRleHRcbiAgICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUudGV4dCA6IHZhbHVlO1xuICAgICAgICAgIGlmIChmb3JtRmllbGRWYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvbkNsaWNrIGV2ZW50IGludm9rZWQgJiYgb3BlbiBEaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZC9sYWJlbFxuICAgKi9cbiAgaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHRoaXMuc2VsZWN0TG9va3VwTGFiZWwoZm9ybUZpZWxkKTtcbiAgICAgIHRoaXMuc2VsZWN0TG9va3VwRmllbGQoZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdENsYXNzKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGxldCBtdWx0aVNlbGVjdENsYXNzID0gJydcbiAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiBmb3JtRmllbGQudmFsdWU/Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgbXVsdGlTZWxlY3RDbGFzcyA9ICduZy1pbnZhbGlkIG5nLWRpcnR5IHdyYXAtY2hpcHMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlTZWxlY3RDbGFzcyA9ICduZy1pbnZhbGlkIG5nLWRpcnR5JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiBmb3JtRmllbGQudmFsdWU/Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgbXVsdGlTZWxlY3RDbGFzcyA9ICdmb3JtLWNvbnRyb2wgd3JhcC1jaGlwcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ2Zvcm0tY29udHJvbCBuZy1kaXJ0eSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtdWx0aVNlbGVjdENsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBDYWxlbmRhciBEYXRlIEZvcm1hdCAmJiBzZXQgRGF0ZSBNaW51dGUgaW50ZXJ2YWxcbiAgICovXG4gIHNldENhbGVuZGFyRGF0ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUikge1xuICAgICAgLy8gY29udmVydCB0aW1lIGludG8gZGF0ZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLnRpbWVPbmx5ICYmXG4gICAgICAgIChmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgIH1lbHNlIGlmIChcbiAgICAgICAgKGZvcm1GaWVsZC5zaG93VGltZSB8fCBmb3JtRmllbGQudGltZU9ubHkpICYmXG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUoXG4gICAgICAgICAgdXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChmb3JtRmllbGQudmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoZm9ybUZpZWxkLnNob3dUaW1lIHx8IGZvcm1GaWVsZC50aW1lT25seSkgJiZcbiAgICAgICAgIWZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICB9XG4gIH1cbiAgY2FsZW5kYXJDaGFuZ2VWYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUgIT09IGZvcm1GaWVsZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICBmb3JtRmllbGQucHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgc2VjdGlvbiBDbGlja2VkIGV2ZW50XG4gICAqL1xuICBjbGlja2VkU2VjdGlvbihzZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICB0aGlzLnNlY3Rpb25DbGlja2VkRXZlbnQuZW1pdChzZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBpbiBOb3RlX0ZpZWxkIGNvbnJ0cm9sXG4gICAqL1xuICBoYW5kbGVOb3RlRmllbGREaWFsb2coZm9ybWZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oTm90ZXNDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybWZpZWxkLmxhYmVsIGFzIHN0cmluZyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1maWVsZC52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWRUZXh0OiBmb3JtZmllbGQuZGlzYWJsZWRUZXh0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhmb3JtZmllbGQ/LmZpZWxkID8gZm9ybWZpZWxkPy5maWVsZCA6IGZvcm1maWVsZD8ubGFiZWwpO1xuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBmb3JtZmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtZmllbGQub25SZXR1cm4oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0Q2xhc3NOYW1lKGZvcm1GaWVsZDogSUZvcm1GaWVsZCk6IHN0cmluZyB7XG4gICAgaWYgKGZvcm1GaWVsZC5oaWRkZW4pIHJldHVybiAnIGhpZGRlbic7XG4gICAgZWxzZSByZXR1cm4gJyc7XG4gIH1cblxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGZvcm1GaWVsZDogYW55KSB7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBldmVudCkge1xuICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2VkIG9uRm9jdXNPdXQgRXZlbnRcbiAgICovXG4gIG9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBsZXQgcmVjb3JkOiBhbnkgPSB7fTtcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZCkge1xuICAgICAgICAgIHJlY29yZFtmb3JtRmllbGQuZmllbGRdID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB1dGlsaXRpZXMuc2V0SHlwZXJsaW5rUGFyYW1WYWx1ZShyZWNvcmQsIHRoaXMuZm9ybSk7XG4gICAvLyB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uRm9jdXNPdXQgJiYgdGhpcy5sb29rdXBGb2N1c091dCA9PT0gZmFsc2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkZvY3VzT3V0KGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrU3BhY2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAodHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0ID0gZm9ybUZpZWxkLnZhbHVlLnRleHQuc3Vic3RyaW5nKFxuICAgICAgICAwLFxuICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZS50ZXh0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8vdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiBmb3JtRmllbGQudmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmb3JtRmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNsZWFyIHRoZSBkcm9wZG93biB2YWx1ZSB3aGVuIGNsaWNrIG9uIHhcbiAgICovXG4gIG9uQ2xlYXJWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQsIGV2ZW50OiBhbnkpIHtcbiAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGZvcm1GaWVsZCk7XG4gICAgdGhpcy5kcm9wRG93bkNoYW5nZUV2ZW50LmVtaXQoZm9ybUZpZWxkKTtcbiAgICBpZiAoIWV2ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRHJvcGRvd25WYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIG9uQ2hhbmdlIEV2ZW50IHdoZW4gVmFsdWUgQ2hhbmdlZFxuICAgKi9cbiAgb25DaGFuZ2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVuU2FmZSBsaW5rIGludG8gc2FmZSBsaW5rXG4gICAqL1xuICBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZykge1xuICAgIGxldCBsaW5rVXJsOiBhbnkgPSB1cmw7XG4gICAgaWYgKGxpbmtVcmwpIHtcbiAgICAgIGxpbmtVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGxpbmtVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlua1VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2Ugb24gZHluYW1pYyBidXR0b25zIGNsaWNrXG4gICAqL1xuICBvbk5ld0J1dHRvbkNsaWNrKGJ1dHRvbikge1xuICAgIGxldCBzYXZlQWxsR3JpZDogYW55ID0gW107XG4gICAgbGV0IGdldEJ0bnM6IGFueSA9IFtdO1xuICAgIGxldCB2YWxpZGl0eSA9IHRydWU7XG4gICAgbGV0IGVycm9yTWVzc2FnZURldGFpbHMgPSAnJztcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShmb3JtU2VjdGlvbi5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyA9IGVycm9yTWVzc2FnZURldGFpbHNcbiAgICAgICAgICAgICAgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgIDogZm9ybUZpZWxkLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHMuc29tZShcbiAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLnJlcXVpcmVkRmllbGQgJiYgZmllbGQuZXJyb3JNZXNzYWdlICYmICFmaWVsZC52YWx1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodmFsaWRpdHkgJiYgZmllbGQpIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMsXG4gICAgICAgICAgICA1MDAwLFxuICAgICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlRGV0YWlscywgNTAwMCwgJ0lOVkFMSUQgRklFTEQnKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGl0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkaXR5KSB7XG4gICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIHNhdmVBbGxHcmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQgKyAnICcgKyAnI3NhdmVBbGxHcmlkVmFsdWVzJyk7XG4gICAgICAgICAgZ2V0QnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nICsgZmllbGQ/LmNvbXBvbmVudENvbnRyb2w/LmlkICsgJyAnICsgJy5zYXZlUm93Jyk7XG4gICAgICAgICAgaWYgKHNhdmVBbGxHcmlkLmxlbmd0aCkge1xuICAgICAgICAgICAgc2F2ZUFsbEdyaWRbMF0uY2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoZ2V0QnRucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzYXZlUm93QnRuIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICAgICAgc2F2ZVJvd0J0bj8uY2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgICBidXR0b24uZnVuYygpO1xuICB9XG5cbiAgc2VsZWN0ZWRDYXJkQ2xpY2tFdmVudChkYXRhOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmNhcmQgJiYgZmllbGQuY2FyZC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBvYmogPSBmaWVsZC5jYXJkLmRhdGFbZGF0YS5pbmRleF07XG4gICAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLnNlbGVjdGVkQ2FyZCkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iai5zZWxlY3RlZENhcmQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG9ialsnc2VsZWN0ZWRDYXJkJ10gPSAnY2FyZC1hY3RpdmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc2VsZWN0ZWRDYXJkKSB7XG4gICAgICBkYXRhWydzZWxlY3RlZENhcmQnXSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGFzc3dvcmRUeXBlKGZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQudGV4dFR5cGUgPT0gJ3RleHQnKSB7XG4gICAgICBmb3JtRmllbGQudGV4dFR5cGUgPSAncGFzc3dvcmQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRmllbGQudGV4dFR5cGUgPSAndGV4dCc7XG4gICAgfVxuICB9XG4gIG9uTGlua0NsaWNrKGxpbmssIGZvcm1TZWN0aW9uKXtcbiAgICBpZighbGluay5kaXNhYmxlZCAmJiAhZm9ybVNlY3Rpb24uZGlzYWJsZWQpe1xuICAgICAgbGluay5vbkNsaWNrKCk7XG4gICAgfVxuICB9XG4gIGlzVmFsaWRDb2x1bW4oY29sOiBhbnkpe1xuICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29sKSAmJiBjb2wgPiAwICYmIGNvbCA8PSAxMlxuICB9XG59XG5cbiIsIjxwLWNvbmZpcm1EaWFsb2cgW3N0eWxlXT1cInsgd2lkdGg6ICc1MHZ3JyB9XCIga2V5PVwiY2FuY2VsQnV0dG9uXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG48Zm9ybSAqbmdJZj1cIiFpc0Zvcm1IaWRkZW4gJiYgZm9ybVwiPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxwLXByb2dyZXNzU3Bpbm5lciBjbGFzcz1cInByb2dyZXNzLXNwaW5uZXIgcC1wcm9ncmVzcy1zcGlubmVyLWNpcmNsZSBjdXN0b20tc3Bpbm5lclwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleC13cmFwXCI+XG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieyAnZml4ZWQtaGVpZ2h0Jzogc3RpY2t5QWN0aW9ucyB9XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmb3JtU2VjdGlvbiBvZiBmb3JtLmZvcm1TZWN0aW9uc1wiIFtjbGFzc109XCIhZm9ybVNlY3Rpb24uaGlkZGVuID8gJ2NhcmQgdy0xMDAnIDogJydcIj5cbiAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNsaWNrZWRTZWN0aW9uKGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZm9ybVNlY3Rpb24gPyAnJyA6IHNlY3Rpb25EaXNhYmxlZChmb3JtU2VjdGlvbilcIj5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImZvcm1TZWN0aW9uLmhpZGRlbiA/ICdoaWRkZW4nIDogZm9ybVNlY3Rpb24uY2xhc3NcIj5cbiAgICAgICAgICAgICAgPHAtYWNjb3JkaW9uPlxuICAgICAgICAgICAgICAgIDxwLWFjY29yZGlvblRhYiBbc2VsZWN0ZWRdPVwiZm9ybVNlY3Rpb24uZXhwYW5kZWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtU2VjdGlvbi5hY2NvcmRpb25EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIhZm9ybVNlY3Rpb24uc2hvd0FjY29yZGlvbiA/ICdoaWRlLWFjY29yZGlhbicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPHAtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaWNvblwiIFt0aXRsZV09XCJmb3JtU2VjdGlvbi5uYW1lXCIgY2xhc3M9XCJtci0xIHBsLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Vic2VjdGlvbi1oZWFkZXJcIj57eyBmb3JtU2VjdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3AtaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC1jb2wgZm9ybS1jb21wb25lbnQgYWNjb3JkaW9uLWhlYWRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uXCIgZm9yPVwibmFtZVwiIGNsYXNzPVwiYWNjb3JkaW9uSGVhZGVyTmFtZSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFt0aXRsZV09XCJmb3JtU2VjdGlvbi5uYW1lXCIgW2NsYXNzXT1cImZvcm1TZWN0aW9uLmljb25cIiBjbGFzcz1cIlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7eyBmb3JtU2VjdGlvbi5uYW1lIH19IDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxpbmsgb2YgZm9ybVNlY3Rpb24ubGlua3NcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibXItMyBjdXN0b20tbGlua1wiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBbY2xhc3NdPVwibGluay5uYW1lICYmIWZvcm1TZWN0aW9uLmRpc2FibGVkJiYhbGluay5kaXNhYmxlZCAgPyAnY3VzdG9tLWxpbmsnIDogJ2Rpc2FibGVkLWxpbmsnXCIgKGNsaWNrKT1cIm9uTGlua0NsaWNrKGxpbmssIGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGZvcm0tY29tcG9uZW50IGZvcm0tYm9keS13cmFwcGVyXCI+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiKGZvcm1GaWVsZC5jb250cm9sPT09J2FkZF9idXR0b24nPyAnIGZvcm0tYnV0dG9uLWZpZWxkLXdyYXBwZXIgJzonJykrXG4gICAgICAgICAgICAgICAgICAgICggaXNWYWxpZENvbHVtbihmb3JtRmllbGQuY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICA/ICdjb2wtJyArIGZvcm1GaWVsZC5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6IGlzVmFsaWRDb2x1bW4oZm9ybS5jb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgID8gJ2NvbC0nICsgZm9ybS5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5jb2x1bW4gfHwgZm9ybS5jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgPyAnIGNvbCAnXG4gICAgICAgICAgICAgICAgICAgIDogJ2NvbC0xMiBtZDpjb2wtMyBmbGV4IGZsZXgtY29sdW1uJyArIHNldENsYXNzTmFtZShmb3JtRmllbGQpKVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtRmllbGQuY29udHJvbCA9PT0gJ2JyZWFrX2xpbmUnID8gJ2JyZWFrLWxpbmUnIDogJydcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZvcm1GaWVsZCBvZiBmb3JtU2VjdGlvbi5maWVsZHM7IGxldCBmb3JtRmllbGRJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBsYWJlbENvbnRyb2wgSHlwZXJsaW5rIG9uIGxvb2t1cCAgQ29udHJvbCBGaWVsZC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIGNsYXNzPVwidG9Gcm9udEZvclRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWxhYmVsIGN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwiZm9ybUZpZWxkLm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKSA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZFRleHQgPyAnZGlzYWJsZS1sYWJlbC1jb250cm9sJyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWxhYmVsIGN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnRhcmdldCA9PT0gJ19pZnJhbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cImxvYWRMYWJlbENvbnRyb2xJRnJhbWUoZm9ybUZpZWxkKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbGFiZWxDb250cm9sIG9uIGFkZFRleHRib3gsIGNhbGVuZGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5kaXNhYmxlZCA/ICdkaXNhYmxlLWxhYmVsLWNvbnRyb2wnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQsICRldmVudClcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImZvcm1GaWVsZC5jb250cm9sXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3BhY2VyIENvbnRyb2wgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNQQUNFUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY29sdW1uPyAnY29sLScgK2Zvcm1GaWVsZC5jb2x1bW4gOiAnJ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5wdXQgVGV4dEFyZWEgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuVEVYVEFSRUFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgcElucHV0VGV4dGFyZWEgW3Jvd3NdPVwiZm9ybUZpZWxkLnJvdyA/IGZvcm1GaWVsZC5yb3cgOiAxIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntoZWlnaHQ6IGZvcm1GaWVsZC5oZWlnaHQgPyBmb3JtRmllbGQuaGVpZ2h0IDogJyd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGV4dCBJbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuSU5QVVRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybUZpZWxkLmRpc2FibGVkICYmICFmb3JtRmllbGQuc2hvd0JvdHRvbUJvcmRlciA/ICdkaXNhYmxlZC1sYWJlbCcgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxhYmVsJyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQuaXNQYXNzd29yZFwiPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiZm9ybUZpZWxkLnRleHRUeXBlPT0ncGFzc3dvcmQnO2Vsc2UgaGlkZUJ1dHRvblwiIHRpdGxlPVwiaGlkZVwiIGNsYXNzPVwicGkgcGktZXllXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hpZGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWV5ZS1zbGFzaFwiIHRpdGxlPVwic2hvd1wiIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1wiIFtpZF09XCJmb3JtRmllbGQuc2hvd0JvdHRvbUJvcmRlciA/ICdyZW1vdmUtYm9kZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJmb3JtRmllbGQudGV4dFR5cGUgPyBmb3JtRmllbGQudGV4dFR5cGUgOiAndGV4dCdcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlLnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkID8gZm9ybUZpZWxkLmZpZWxkIDogZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLk5VTUVSSUNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBDdXJyZW5jeSAmJiBudW1iZXIgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJpbnB1dCxzcGFuXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIiAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIiAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCIgW21vZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkZWNpbWFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbY3VycmVuY3ldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1VTRCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW2xvY2FsZV09XCJmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2VuLVVTJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdkZWNpbWFsJyB8fCBmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3N1ZmZpeF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAncGVyY2VudCcgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZFwiPiAqIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBhc3N3b3JkIElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5QQVNTV09SRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHR5cGU9XCJwYXNzd29yZFwiIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZFwiPiAqIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmNsYXNzXCIgKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0wIGZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0hFQ0tCT1hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIgJ2ZsZXggYWxpZ24taXRlbXMtY2VudGVyICcrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGZvcm1GaWVsZClcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDYWxlbmRhciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0FMRU5EQVJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWNhbGVuZGFyLWhlYWRlci1zcGFuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJpbnB1dFwiICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5ICcgKyBmb3JtRmllbGQuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wgJysgZm9ybUZpZWxkLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbc2hvd0J1dHRvbkJhcl09XCIhZm9ybUZpZWxkLnRpbWVPbmx5XCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIGhvdXJGb3JtYXQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdERhdGVdPVwiZGVmYXVsdERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBNaW51dGVdPVwiZm9ybUZpZWxkLm1pbnV0ZXNJbnRlcnZhbCA/IGZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWwgOiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJmb3JtRmllbGQuc2hvd1RpbWVcIiAob25TaG93KT1cInNldENhbGVuZGFyRGF0ZShmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aW1lT25seV09XCJmb3JtRmllbGQudGltZU9ubHlcIiBbdmlld109XCJmb3JtRmllbGQubW9udGhPbmx5ID8gJ21vbnRoJyA6ICdkYXRlJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJmb3JtRmllbGQ/LmZvcm1hdD8udHlwZSA/IGZvcm1GaWVsZC5mb3JtYXQ/LnR5cGUgOiBjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjYWxlbmRhckNoYW5nZVZhbHVlKGZvcm1GaWVsZClcIiAob25JbnB1dCk9XCJjYWxlbmRhcklucHV0VmFsdWUoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFt0b2RheUJ1dHRvblN0eWxlQ2xhc3NdPVwiY29sdW1uLnRpbWVPbmx5ID8gJ2hpZGUtdG9kYXktYnRuJyA6ICdzaG93LXRvZGF5LWJ0bidcIiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5EUk9QRE9XTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZCAmJiAhZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2xcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtzdHlsZUNsYXNzXT0nZm9ybUZpZWxkLmZpZWxkJyBbcGxhY2Vob2xkZXJdPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgW2ZpbHRlcl09XCJmb3JtRmllbGQuYWxsb3dTZWFyY2hcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiZm9ybUZpZWxkLm9wdGlvbkxhYmVsXCIgW29wdGlvblZhbHVlXT1cImZvcm1GaWVsZC5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiAoa2V5dXAuVGFiKT1cInRhYkZvY3VzRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEcm9wZG93blZhbHVlKGZvcm1GaWVsZClcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbc2hvd0NsZWFyXT1cImZvcm1GaWVsZC52YWx1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DbGVhclZhbHVlKGZvcm1GaWVsZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmb3JtRmllbGQudmFsdWUgPiAwID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkPy5pc1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmhpZGRlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3JcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQXV0b0NvbXBsZXRlIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQVVUT0NPTVBMRVRFXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbHVpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtzdWdnZXN0aW9uc109XCJmb3JtRmllbGQuZGF0YVwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwiYXV0b1NlYXJjaCgkZXZlbnQsIGZvcm1GaWVsZClcIiBbZHJvcGRvd25dPVwiZm9ybUZpZWxkLnNob3dPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFwiIFtuYW1lXT1cImZvcm1GaWVsZC5sYWJlbFwiIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNdWx0aS1zZWxlY3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLk1VTFRJU0VMRUNUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJpbnB1dCxzcGFuXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TXVsdGlTZWxlY3RDbGFzcyhmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgW29wdGlvbkxhYmVsXT1cImZvcm1GaWVsZC5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZm9ybUZpZWxkLm9wdGlvblZhbHVlXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQub25DbGljayA/IGZvcm1GaWVsZC5vbkNsaWNrKCkgOiAnJ1wiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEh5cGVybGluay0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkaXNhYmxlZC1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdsaW5rLWxhYmVsIGN1c3RvbS1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuSFlQRVJMSU5LXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cImh5cGVybGlua0RpYWxvZyhmb3JtRmllbGQsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2hyZWZdPVwiZm9ybUZpZWxkLmRpc2FibGVkPycnOnNhbml0aXplVXJsKGZvcm1GaWVsZC5oeXBlcmxpbms/LmxpbmspXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0XCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay50YXJnZXQgPT09ICdfaWZyYW1lJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwbC0yXCIgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cImxvYWRJRnJhbWUoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiICBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9va3VwIENvbnRyb2wgRmllbGQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkxPT0tVUF9JTlBVVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtbG9va3VwLWhlYWRlcicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZXZyb24tcmlnaHQgbG9va3VwLWlucHV0LWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb21wb25lbnQgbG9va3VwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWUgJiYgdHlwZU9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLlRhYik9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiLTFcIiAqbmdJZj1cImZvcm1GaWVsZC52YWx1ZSAmJiAhZm9ybUZpZWxkLmRpc2FibGVkXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9va3VwLWNsZWFyLWljb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoZm9ybUZpZWxkKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbGUgVXBsb2FkIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5GSUxFX1VQTE9BRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1maWxlLXVwbG9hZCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd011bHRpcGxlXT1cImZvcm1GaWVsZC5zZWxlY3RNdWx0aXBsZUZpbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRGaWxlVHlwZXNdPVwiZm9ybUZpZWxkLlNldGZpbGVUeXBlc1wiIFtmaWVsZHNdPVwiZm9ybUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlVXJsKT1cInNldEZpbGVVcmxzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwbG9hZEZpbGVPblJldHVybik9XCJmaWxlT25jaGFuZ2VFdmVudCgpXCI+PC9zZS1maWxlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dmaWxlVXBsb2FkRXJyb3JcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0IEJ1dHRvbiBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TRUxFQ1RCVVRUT05cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXNlbGVjdEJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQuZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmb3JtRmllbGQuZGlzcGxheVN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLXNlbGVjdEJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5ICBDYXJkIGZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DQVJEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2UtY2FyZCBbY2FyZF09XCJmb3JtRmllbGQuY2FyZFwiIFtzZXRDYXJkRGF0YV09XCJzZXRDYXJkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDYXJkKT1cInNlbGVjdGVkQ2FyZENsaWNrRXZlbnQoJGV2ZW50KVwiPjwvc2UtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd2ZpbGVVcGxvYWRFcnJvclwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBOb3RlIERldGFpbCBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTk9URV9GSUVMRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGlzYWJsZWQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGFuZGxlTm90ZUZpZWxkRGlhbG9nKGZvcm1GaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Zvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiICBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBDb21wb25lbnQgQ29udGFpbmVyLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmhpZGRlbiA/ICdoaWRkZW4nIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInt7Zm9ybVNlY3Rpb24ubmFtZX19LXt7Zm9ybUZpZWxkSW5kZXh9fVwiICNkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkNPTVBPTkVOVFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciBjb21wb25lbnQtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuU0VDVElPTl9IRUFERVJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiID4gIHt7IGZvcm1GaWVsZC5sYWJlbCB9fSA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIE9uQ2xpY2sgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5BRERfQlVUVE9OXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbaWNvbl09XCJmb3JtRmllbGQuaWNvblwiIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIiBbbGFiZWxdPVwiZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie2JhY2tncm91bmQ6IGZvcm1GaWVsZC5jb2xvciA/IGZvcm1GaWVsZC5jb2xvciA6ICcnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzcz9mb3JtRmllbGQuY2xhc3M6JydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgR2VuZXJhdGUgUmVwb3J0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuUkVQT1JUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gW3JlcEluZm9dPVwiZm9ybUZpZWxkXCIgW2xhYmVsXT1cImZvcm1GaWVsZC5sYWJlbFwiIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmFtc109XCJmb3JtRmllbGQucGFyYW1zXCIgW3Nob3dEaWFsb2ddPVwiZm9ybUZpZWxkLnNob3dEaWFsb2dcIiBbcmVwb3J0VHlwZV09XCIgZm9ybUZpZWxkLnJlcG9ydFR5cGVcIiBbcmVwb3J0SGVhZGVyXT1cImZvcm1GaWVsZC5yZXBvcnRIZWFkZXJcIiBbcmVwb3J0Rm9vdGVyXT1cImZvcm1GaWVsZC5yZXBvcnRGb290ZXJcIiBbZm9ybV09XCJmb3JtXCIgW2ljb25dPVwiZm9ybUZpZWxkLmljb25cIiBbY2xhc3NdPVwiZm9ybUZpZWxkLmNsYXNzXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBJbnB1dCBTd2l0Y2ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNXSVRDSFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtaW5wdXRTd2l0Y2ggW25hbWVdPVwiZm9ybUZpZWxkLmxhYmVsID8gZm9ybUZpZWxkLmxhYmVsOiAnc3dpdGNoJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCI+PC9wLWlucHV0U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxuICAgICAgICAgICAgICA8L3AtYWNjb3JkaW9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc3Bhbj5cblxuICAgIDwhLS0gc2F2ZSBhbmQgY2xvc2UgYnV0dG9ucyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGFjdGlvbnMtYnV0dG9ucy1tYWluLXdyYXBwZXIgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgW25nQ2xhc3NdPVwieyBzdGlja3k6IHN0aWNreUFjdGlvbnMgfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlubmVyLXN0aWNreSBmb3JtLWNvbXBvbmVudCBhY3Rpb25zLWJ1dHRvbnMtd3JhcHBlci1kaXZcIj5cbiAgICAgICAgPCEtLSBzYXZlIGJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRlU2F2ZUJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZFwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1jaGVja1wiXG4gICAgICAgICAgW2xhYmVsXT1cInNhdmVCdXR0b25MYWJlbCA/IHNhdmVCdXR0b25MYWJlbCA6ICdTYXZlJ1wiIGNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBmb3JtLXNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2F2ZUZvcm0oKVwiPjwvYnV0dG9uPlxuICAgICAgICA8IS0tIGNsb3NlIGJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRlQ2FuY2VsQnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzRm9ybURpc2FibGVkXCIgKGNsaWNrKT1cIm9uQ2FuY2VsRm9ybSgpXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIiBbbGFiZWxdPVwiY2FuY2VsQnV0dG9uTGFiZWwgPyBjYW5jZWxCdXR0b25MYWJlbCA6ICdDYW5jZWwnXCIgY2xhc3M9XCJwLWJ1dHRvbi1kYW5nZXIgbWwtM1wiPjwvYnV0dG9uPiAgICAgICBcbiAgICAgICAgIDwhLS0gZHluYW1pYyBidXR0b25zIC0tPlxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGZvcm1CdXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFidXR0b24uaGlkZGVuXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cImJ1dHRvbi5sYWJlbFwiIFtpY29uXT1cImJ1dHRvbi5pY29uID8gYnV0dG9uLmljb24gOiAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgbWwtM1wiIChjbGljayk9XCJvbk5ld0J1dHRvbkNsaWNrKGJ1dHRvbilcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkID8gYnV0dG9uLmRpc2FibGVkIDogZmFsc2VcIj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+Il19
|
|
1387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUErQyxZQUFZLEVBQStCLGdCQUFnQixFQUFjLFlBQVksR0FBc0IsTUFBTSxlQUFlLENBQUM7QUFJdk8sT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUEwQyxVQUFVLEVBQTZCLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRSxPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU83RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3RDLE1BQU0sT0FBTyxhQUFhO0lBVXhCLElBQWEsY0FBYyxDQUFDLEdBQVE7UUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFFBQVEsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQThCRCxZ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Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRVAseUJBQXlCO3NCQUR4QixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQStDckUsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIENvbXBvbmVudEZhY3RvcnksIFZpZXdDb250YWluZXJSZWYsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgUmVuZGVyZXIyLCBOZ1pvbmUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgTm90ZXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbm90ZXMvbm90ZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEVGb3JtQ29udHJvbCwgRUh5cGVybGluaywgSUZvcm1GaWVsZCwgSUR5bmFtaWNGb3JtLCBJRm9ybVNlY3Rpb24sIEVWYWxpZGF0b3IsIElEeW5hbWljQ2FyZCwgSUZvcm1CdXR0b24sIEVGb3JtYXRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgZHJhZ2dhYmxlRGlhbG9nIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc3RpY2t5QWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGZvcm06IElEeW5hbWljRm9ybTtcbiAgQElucHV0KCkgc2F2ZUJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY2FuY2VsQnV0dG9uTGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBoaWRlU2F2ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlQ2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1CdXR0b25zOiBJRm9ybUJ1dHRvbltdID0gW107XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiBcbiAgQElucHV0KCkgc2V0IGFjdGl2ZVRlc3RNb2RlKHZhbDogYW55KSB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xuICAgICAgZGVidWdnZXI7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKSBzYXZlRm9ybTogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNhbmNlbEZvcm06IEV2ZW50RW1pdHRlcjxJRm9ybVNlY3Rpb25bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkcm9wRG93bkNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlY3Rpb25DbGlja2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxJRm9ybVNlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkcmVuKCdkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGR5bmFtaWNDb21wb25lbnRDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICBkeW5hbWljQ2FzZSA9IEVGb3JtQ29udHJvbDtcbiAgc2F2ZUZvcm1QYWdlOiBTdWJzY3JpcHRpb247XG4gIHBlcm1pc3Npb25UeXBlID0gRVBlcm1pc3Npb25UeXBlO1xuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNGb3JtSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbXBvbmVudHNMaXN0OiBJRGljdGlvbmFyeVtdID0gW107XG4gIGZpbGVVcGxvYWRVcmxzOiBhbnk7XG4gIHNob3dmaWxlVXBsb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FyZExpc3Q6IElEeW5hbWljQ2FyZDtcbiAgY2FsZW5kYXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZGVmYXVsdERhdGU6IHN0cmluZyA9ICcnO1xuICBsb29rdXBGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3l5JztcbiAgc2V0Q2FyZERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGRpYWxvZ1JlZjogYW55O1xuXG4gIC8vIGFwcGx5IGNoZWNrZWQvdW5DaGVja2VkIHByb3AgZm9yIENoZWNrQm94IG9mIHRoZSBGb3JtXG4gIGNoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICB1bkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBoeXBlcmxpbmtTZXJ2aWNlIDogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnZUxvZ2dlclNlcnZpY2U6IFBhZ2VMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAvLyBicm93c2VyIHRhYiBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0IHx8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLnNldFRvb2x0aXAoKTtcbiAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZm9ybVxuICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBzdGFydCBjYXJkTGlzdCByZWZlcmVuY2UgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgICAgbGV0IGZvcm1WYWx1ZXMgPSB7IC4uLnRoaXMuZm9ybSB9O1xuXG4gICAgICBmb3JtVmFsdWVzLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRmllbGRSZXF1aXJlZChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoZmllbGQuaXNQYXNzd29yZCkge1xuICAgICAgICAgICAgICBmaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gZGF0ZVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgZmllbGQ/Lm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGZpZWxkWydwcmV2aW91c1ZhbHVlJ10gPSBmaWVsZD8udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnRpbWVPbmx5ICYmXG4gICAgICAgICAgICAgIChmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShmaWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgIGZpZWxkPy52YWx1ZSAmJlxuICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkPy52YWx1ZS5tYXAoXG4gICAgICAgICAgICAgICAgKHZhbHVlOiBhbnkpID0+IHZhbHVlW2ZpZWxkPy5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnOycpIHx8XG4gICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoJywnLCAnOycpXG4gICAgICAgICAgICAgICAgICA/LnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWw6IGFueSkgPT4gKHsgW2ZpZWxkPy5kaXNwbGF5RmllbGRdOiB2YWwgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBtdWx0aVNlbGVjdCBzdHJpbmcgdmFsdWUgaW4gYXJyYXlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlLnJlcGxhY2UoL1xccyosXFxzKi9nLCBcIixcIik/LnRvU3RyaW5nKCk/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBbZmllbGQudmFsdWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHt9O1xuICAgICAgICAgICAgICBmaWVsZD8uY2FyZD8uZGF0YT8uZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgeC5keW5hbWljRm9ybSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb25zOiBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm1WYWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFbmQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAneScgfHxcbiAgICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hcHBseVVzZXJQZXJtaXNzaW9ucygpO1xuICAgICAgdGhpcy5yZW1vdmVXaGl0ZVNwYWNlcygpO1xuICAgICAgdGhpcy5zZXRIeXBlcmxpbmtDb21wb25lbnRSb3V0ZSgpO1xuICAgICAgdGhpcy5zZXRDYWxhbmRlcldpZHRoKCk7XG4gICAgICB0aGlzLm9yZGVyRm9ybVNlY3Rpb25zKCk7XG4gICAgICB0aGlzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuICBvcmRlckZvcm1TZWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICAgIGxldCB1c2VyU2VjdGlvbiA9IGN1cnJlbnRVc2VySW5mbz8ucGFnZVNlY3Rpb25zPy5sZW5ndGggPiAwID8gY3VycmVudFVzZXJJbmZvLnBhZ2VTZWN0aW9ucyA6IFtdO1xuICAgICAgY29uc3QgcGFnZVVybCA9IHRoaXMucGFnZU5hbWUoKTtcbiAgICAgIGlmICh1c2VyU2VjdGlvbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICB1c2VyU2VjdGlvbiA9IHVzZXJTZWN0aW9uLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyU2VjdGlvbjpcIiwgdXNlclNlY3Rpb24pXG4gICAgICAgIHVzZXJTZWN0aW9uLmZvckVhY2goKHBhZ2VTZWN0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZE5hbWU6IGJvb2xlYW4gPSB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5zb21lKChzZWN0aW9uKSA9PiBwYWdlU2VjdGlvbj8uc2VjdGlvbj8udG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbj8ubmFtZT8udG9Mb3dlckNhc2UoKSkgJiYgcGFnZVNlY3Rpb24/LnBhZ2U/LnRvTG93ZXJDYXNlKCkgPT09IHBhZ2VVcmw/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKG1hdGNoZWROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZpbmRJbmRleCgoc2VjdGlvbikgPT4gcGFnZVNlY3Rpb24/LnNlY3Rpb24/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb24/Lm5hbWU/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKHBhZ2VTZWN0aW9uLnJvbGUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucm9sZXM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhwYWdlU2VjdGlvbi5yb2xlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3dhcFNlY3Rpb25zKHBhZ2VTZWN0aW9uLm9yZGVyIC0gMSwgaW5kZXgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnNbaW5kZXhdLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3dhcFNlY3Rpb25zKHBhZ2VTZWN0aW9uLm9yZGVyIC0gMSwgaW5kZXgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBzd2FwU2VjdGlvbnMob3JkZXI6IG51bWJlciwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHJlT3JkZXJTZWN0aW9uID0geyAuLi50aGlzLmZvcm0uZm9ybVNlY3Rpb25zW29yZGVyXSB9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnNbb3JkZXJdID0gdGhpcy5mb3JtLmZvcm1TZWN0aW9uc1tpbmRleF07XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9uc1tpbmRleF0gPSByZU9yZGVyU2VjdGlvbjtcbiAgfVxuICBwYWdlTmFtZSgpIHtcbiAgICBsZXQgdXJsID0gdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSk7XG4gICAgaWYgKHVybD8uaW5jbHVkZXMoJz8nKSkge1xuICAgICAgdXJsID0gdXJsLnNwbGl0KCc/JylbMF07XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgc2V0Rm9ybVNlY3Rpb24oc2VjdGlvbiwgaW5kZXgsIHBhZ2VTZWN0aW9uKSB7XG4gICAgY29uc3QgcmVPcmRlclNlY3Rpb24gPSB7IC4uLnNlY3Rpb24gfTtcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5zcGxpY2UocGFnZVNlY3Rpb24/Lm9yZGVyIC0gMSwgMCwgcmVPcmRlclNlY3Rpb24pO1xuICB9XG4gIGNoZWNrRmllbGRSZXF1aXJlZChmaWVsZDogYW55KSB7XG4gICBpZihmaWVsZC52YWxpZGF0aW9ucz8uZmluZCh2YWxpZGF0aW9uPT52YWxpZGF0aW9uLnR5cGU9PT1FVmFsaWRhdG9yLlJFUVVJUkVEKSl7XG4gICAgICBmaWVsZC5yZXF1aXJlZEZpZWxkID0gdHJ1ZTtcbiAgIH1cbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRhciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kYXJJbnB1dFZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmKCFmb3JtRmllbGQudGltZU9ubHkpe1xuICAgICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZvcm1GaWVsZC5maWVsZClbMF1cbiAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF2YWw/LnRhcmdldD8udmFsdWU/LmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBmb3JtRmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuU0hPUlREQVRFKSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KShcXGR7Mn0pKFxcZHs0fSkvLCAnJDEvJDIvJDMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodmFsPy50YXJnZXQ/LnZhbHVlLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCkuc3BsaXQoJy8nKVsyXTtcbiAgICAgICAgaWYgKHllYXI/Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcbiAgICAgICAgICAgICdlbi1VUydcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXI/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAgXG4gIH1cblxuICAvLyBzZXQgcGVyY2VudCBhbmQgZGVjaW1hbCB2YWx1ZXNcbiAgc2V0bnVtZXJpY3ZhbHVlcygpIHtcbiAgICB0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDKSB7XG4gICAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gZmllbGQ/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgKGZpZWxkLnZhbHVlICogMTAwKT8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlICogMTAwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICBkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBmb3JtIGhhcyBhbnkgZmllbGQgd2l0aCBkeW5hbWljIGNvbXBvbmVudDtcbiAgICogQ3JlYXRlcyBjb21wb25lbnQgaW5zdGFuY2UgdXNpbmcgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAqIEluamVjdHMgY29tcG9uZW50IHRocm91Z2ggdmlld1JlZi5jcmVhdGVDb21wb25lbnQoKVxuICAgKiBQYXNzZXMgZGF0YSB0byBjb21wb25lbnRcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIHBhc3NlZCB0byB0aGUgY29tcG9uZW50c1xuICAgKiBGaW5hbGx5IGZvcmNlcyBBbmd1bGFyIHRvIGRldGVjaCBjaGFuZ2VzXG4gICAqL1xuICBsb2FkRHluYW1pY0NvbXBvbmVudHMoKSB7XG4gICAgdGhpcy5jb21wb25lbnRzTGlzdCA9IFtdO1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnksIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQpIHtcbiAgICAgICAgICBjb25zdCB2aWV3UmVmOiBhbnkgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRDb250YWluZXIuZmluZChcbiAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICB4LmVsZW1lbnQubmF0aXZlRWxlbWVudC5pZCA9PSBgJHtmb3JtU2VjdGlvbi5uYW1lfS0ke2ZpZWxkSW5kZXh9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaGFuZGxlcnMsXG4gICAgICAgICAgfSA9IGZpZWxkLmNvbXBvbmVudENvbnRyb2w7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID1cbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCk7XG4gICAgICAgICAgLy8gUGFzc2luZyBkYXRhIHRvIGNvbXBvbmVudFxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdSZWY/LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICAgICAgICBpZiAoY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICBpZihmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQpe1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5hZGRDbGFzcyhjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgZmllbGQuY29tcG9uZW50Q29udHJvbC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhID8/IHt9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogZmllbGQuY29tcG9uZW50Q29udHJvbD8uaWQsXG4gICAgICAgICAgICAgIHZhbHVlOiBjb21wb25lbnRSZWYsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZXMgdG8gdGhlIGV2ZW50cyBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudHNcbiAgICAgICAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhoYW5kbGVycykuZm9yRWFjaCgoW2V2ZW50LCBoYW5kbGVyXTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZVtldmVudF0gYXMgRXZlbnRFbWl0dGVyPGFueT4pPy5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGludm9rZSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vaW52b2tlIHdoZW4gZmlsZSB1cGxvYWQgT1IgZGVsZXRlIGEgZmlsZVxuICBmaWxlT25jaGFuZ2VFdmVudCgpIHtcbiAgICB0aGlzLnNldENhcmREYXRhID0gIXRoaXMuc2V0Q2FyZERhdGE7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gbG9hZCBkeW5hbWljIGNvbXBvbmVudHMgaWYgZXhpc3QgaW4gZm9ybVxuICAgIHRoaXMuc2V0bnVtZXJpY3ZhbHVlcygpO1xuICAgIHRoaXMub25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCk7XG4gICAgdGhpcy5sb2FkRHluYW1pY0NvbXBvbmVudHMoKTtcbiAgICB0aGlzLnNldENhcmRSZXNwb25zZUlkKCk7XG4gIH1cblxuICBzZXRDYXJkUmVzcG9uc2VJZCgpIHtcbiAgICB1dGlsaXRpZXMub25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmKHJlcy5kYXRhPy5pc1NhdmUpe1xuICAgICAgICB0aGlzLnNldENhcmRJZHMocmVzLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXREZWxldGVDYXJkSWQocmVzLmRhdGE/LmNhcmREYXRhLCByZXMuZGF0YT8uZHluYW1pY0Zvcm0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGVsZXRlQ2FyZElkKHVwZGF0ZWRDYXJkRGF0YTphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pe1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOklGb3JtU2VjdGlvbik9PntcbiAgICAgIGNvbnN0IGNhcmRDb250cm9sID0gc2VjdGlvbi5maWVsZHMuZmluZCgoZmllbGQ6SUZvcm1GaWVsZCk9PiBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICBpZihjYXJkQ29udHJvbCl7XG4gICAgICAgIGNhcmRDb250cm9sLmNhcmQuZGF0YSA9IHVwZGF0ZWRDYXJkRGF0YTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZHluYW1pY0Zvcm0gPSB0aGlzLmZvcm07XG4gIH1cblxuICBzZXRDYXJkSWRzKHJlcykge1xuICAgIHJlcy5yZWNvcmRzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlcy5yZWNvcmRzKTtcbiAgICByZXMucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnksIHJlY29yZEluZGV4OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoQ2FyZCA9IHJlcy5jYXJkc0luZm8/LmZpbmQoXG4gICAgICAgIChpbmZvLCBjYXJkSW5kZXgpID0+XG4gICAgICAgICAgcmVjb3JkSW5kZXggPT09IGNhcmRJbmRleCAmJiByZWNvcmRbcmVzLmZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKV1cbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hDYXJkICYmIE9iamVjdC5rZXlzKG1hdGNoQ2FyZCk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWF0Y2hDYXJkW3Jlcy5maWVsZE5hbWVdID0gcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZvcm1GaWVsZDogSUZvcm1GaWVsZDtcbiAgICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmKHJlcy5jYXJkSWQpe1xuICAgICAgICAgIGZvcm1GaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmluZChcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQgJiYgZmllbGQuaWQgPT09IHJlcy5jYXJkSWRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1GaWVsZCA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmluZChcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgICAgaWYgKHJlcy5jYXJkc0luZm8/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcy5jYXJkc0luZm8/LmZvckVhY2goKGNhcmRJZCkgPT4ge1xuICAgICAgICAgICAgICBjYXJkSWQuaWQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1GaWVsZC5jYXJkLmRhdGEgPSByZXMuY2FyZHNJbmZvO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRDYXJkRGF0YSA9ICF0aGlzLnNldENhcmREYXRhO1xuICB9XG5cbiAgcmVtb3ZlV2hpdGVTcGFjZXMoKSB7XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChzZWN0aW9uLmNsYXNzKSBzZWN0aW9uLmNsYXNzID0gc2VjdGlvbi5jbGFzcy5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0SHlwZXJsaW5rQ29tcG9uZW50Um91dGUoKSB7XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgJiZcbiAgICAgICAgICBmaWVsZC5oeXBlcmxpbms/LmNvbXBvbmVudFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5yZXNldENvbmZpZyhbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhdGg6ICdoeXBlcmxpbmsnICsgZmllbGQubGFiZWwsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogZmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLnJvdXRlci5jb25maWcsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYnJvd3NlclRhYkNsb3NlRXZlbnQoZXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpe1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgYW55IGNoYW5nZSBpbiBEeW5hbWljIEZvcm0gY29tcG9uZW50IFN0YXRlXG4gICAqL1xuICBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB1dGlsaXRpZXMub25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLmlkICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmT2JqID0gdGhpcy5jb21wb25lbnRzTGlzdC5maW5kKFxuICAgICAgICAgICh4KSA9PiB4Lm5hbWUgPT09IHJlc3BvbnNlLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjb21wb25lbnRSZWZPYmopIHtcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS5kYXRhID8/IHt9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZk9iai52YWx1ZS5pbnN0YW5jZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYocmVzcG9uc2U/LmxvYWRDb21wb25lbnQpe1xuICAgICAgICAgICAgY29tcG9uZW50UmVmT2JqLnZhbHVlLmluc3RhbmNlLm5nT25Jbml0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9uc1xuICBhcHBseVVzZXJQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpIHtcbiAgICAgIGxldCB0b3RhbEZpZWxkczogbnVtYmVyID0gMDtcbiAgICAgIGxldCBkaXNhYmxlZEZpZWxkczogbnVtYmVyID0gMDtcbiAgICAgIGxldCBoaWRkZW5GaWVsZHM6IG51bWJlciA9IDA7XG5cbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9uczogYW55ID0gZm9ybUZpZWxkLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgbGV0IHNlY3Rpb25QZXJtaXNzaW9uczogYW55ID0gW107XG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb25zKSBzZWN0aW9uUGVybWlzc2lvbnMgPSBmb3JtU2VjdGlvbi5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGlmICghcGVybWlzc2lvbnMpIHBlcm1pc3Npb25zID0gdGhpcy5mb3JtLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHNlY3Rpb25QZXJtaXNzaW9ucyAmJiBzZWN0aW9uUGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBzZWN0aW9uUGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5wZXJtaXNzaW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnBlcm1pc3Npb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1TZWN0aW9uLmRpc2FibGVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG90YWxGaWVsZHMrKztcblxuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICBkaXNhYmxlZEZpZWxkcysrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikge1xuICAgICAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNGb3JtRGlzYWJsZWQgPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGRpc2FibGVkRmllbGRzO1xuICAgICAgdGhpcy5pc0Zvcm1IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBJRnJhbWUgaW4gaHlwZXJsaW5rIENvbnRyb2xcbiAgICovXG4gIHNlY3Rpb25EaXNhYmxlZChmb3JtU2VjdGlvbjogSUZvcm1TZWN0aW9uKSB7XG4gICAgaWYgKGZvcm1TZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFNlY3Rpb25GaWVsZHMoZm9ybVNlY3Rpb24sIHRydWUpO1xuICAgIH0gZWxzZSBpZihmb3JtU2VjdGlvbi5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbiwgZmFsc2UpO1xuICAgIH1lbHNlIHtcbiAgICAgIHJldHVybiBmb3JtU2VjdGlvbjtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlZFNlY3Rpb25GaWVsZHMoZm9ybVNlY3Rpb246IElGb3JtU2VjdGlvbiwgZGlzYWJsZWQ6IGJvb2xlYW4pe1xuICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5tYXAoKGZpZWxkOiBJRm9ybUZpZWxkKSA9PiB7XG4gICAgICBmaWVsZC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtU2VjdGlvbjtcbiAgfVxuXG4gIGxvYWRJRnJhbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgdGhpcy5oYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6ICdIeXBlcmxpbmsnLFxuICAgICAgd2lkdGg6IGZvcm1GaWVsZC5oeXBlcmxpbms/LndpZHRoID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA6ICc5MCUnLFxuICAgICAgaGVpZ2h0OiBmb3JtRmllbGQuaHlwZXJsaW5rPy5oZWlnaHQgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA6ICc4MCUnLFxuICAgICAgZGF0YTogeyB2YWx1ZTogZm9ybUZpZWxkLmh5cGVybGluaz8ubGluaywgaUZyYW1lSWQ6IGZvcm1GaWVsZC5sYWJlbCB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQpO1xuICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtRmllbGQub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGh5cGVybGluayBDb250cm9sXG4gICAqL1xuICBoeXBlcmxpbmtEaWFsb2coZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCBldmVudDogYW55KSB7XG4gICAgaWYgKGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5CTEFOSykge1xuICAgICAgdmFyIHZhbHVlID0gZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXM7XG4gICAgICB3aW5kb3cub3BlbignaHlwZXJsaW5rJyArIGZvcm1GaWVsZC5sYWJlbCk7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuU0VMRikge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydoeXBlcmxpbmsnICsgZm9ybUZpZWxkLmxhYmVsXSwge1xuICAgICAgICBxdWVyeVBhcmFtczogZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cpIHtcbiAgICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50LCBmb3JtRmllbGQuaHlwZXJsaW5rPy5wYXJhbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnQsIHtcbiAgICAgICAgICBoZWFkZXI6IGZvcm1GaWVsZC5oeXBlcmxpbmsuZGF0YT8uaGVhZGVyXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuZGF0YT8uaGVhZGVyXG4gICAgICAgICAgICA6ICcnLFxuICAgICAgICAgIHdpZHRoOiBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA6ICcnLFxuICAgICAgICAgIHN0eWxlOiBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoID8ge30gOiB7ICdtYXgtd2lkdGgnOiAnZml0LWNvbnRlbnQnIH0sXG4gICAgICAgICAgaGVpZ2h0OiBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICAgICAgZGF0YTogZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXNcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpe1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBmb3JtRmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnQ/Lm5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8oXG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSxcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gSWZyYW1lIG9uIExhYmVsXG4gICAqL1xuICBsb2FkTGFiZWxDb250cm9sSUZyYW1lKGZvcm1GaWVsZDogYW55KSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGZvcm1GaWVsZC5sYWJlbC5uYW1lLFxuICAgICAgd2lkdGg6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLndpZHRoXG4gICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aFxuICAgICAgICA6ICc5MCUnLFxuICAgICAgaGVpZ2h0OiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8uaGVpZ2h0XG4gICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHRcbiAgICAgICAgOiAnODAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5saW5rXG4gICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgaUZyYW1lSWQ6IGZvcm1GaWVsZC5sYWJlbC5uYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgJ0lmcmFtZUNvbXBvbmVudCdcbiAgICApO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICB9KTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC5vbkNsaWNrKSB7XG4gICAgICBmb3JtRmllbGQub25DbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBmaW5kIHRoZSByZXF1aXJlZCBmaWVsZCBpbiBmb3JtXG4gICAqL1xuLy8gICBhcHBseVJlcXVpcmVkRmllbGRWYWxpZGF0aW9uKCkge1xuLy8gY29uc29sZS5sb2coJ2FwcGx5aW5nIHJlcXVpcmVkZmlsZWQgdmFsaWRhdGlvbnMnKVxuLy8gICAgIGlmIChcbi8vICAgICAgIHRoaXMuZm9ybSAmJlxuLy8gICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuLy8gICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4vLyAgICAgKSB7XG4vLyAgICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb24pID0+IHtcbi8vICAgICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbi8vICAgICAgICAgICBjb25zb2xlLmxvZygnZmllbGQnLCBmaWVsZClcbi8vICAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvbnMgJiYgZmllbGQudmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuLy8gICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbnMuZm9yRWFjaCgodmFsaWQpID0+IHtcbi8vICAgICAgICAgICAgICAgaWYgKHZhbGlkLnR5cGUgPT09IEVWYWxpZGF0b3IuUkVRVUlSRUQpIHtcbi8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZmllbGQnLGZpZWxkLCdpcyByZXF1aXJlZCcpXG4vLyAgICAgICAgICAgICAgICAgZmllbGQucmVxdWlyZWRGaWVsZCA9IHRydWU7XG4vLyAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgIH0pO1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgfSk7XG4vLyAgICAgICB9KTtcbi8vICAgICB9XG4vLyAgIH1cblxuICBzZXRGaWxlVXJscyhmaWxlVXJsczogYW55KSB7XG4gICAgaWYgKGZpbGVVcmxzICYmIGZpbGVVcmxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFVybHMgPSBmaWxlVXJscztcbiAgICAgIHRoaXMuc2hvd2ZpbGVVcGxvYWRFcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZUZvcm0oKSB7XG4gICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlscyA9ICcnO1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgbGV0IG11bGlTZWxlY3RWYWx1ZSA9IHt9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KGZvcm1TZWN0aW9uLmZpZWxkcykpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlsc1xuICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlRGV0YWlscyArICcgLCAnICsgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgZmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHMuc29tZShcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQucmVxdWlyZWRGaWVsZCAmJiBmaWVsZC5lcnJvck1lc3NhZ2UgJiYgIWZpZWxkLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsaWRpdHkgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgICAgICA1MDAwLFxuICAgICAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2VEZXRhaWxzLCA1MDAwLCAnSU5WQUxJRCBGSUVMRCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGl0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgdXBsb2FkRmlsZSBVUkwgaW4gRm9ybUZpZWxkIGluIGNhc2Ugb2YgRklMRV9VUExPQURcbiAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkZJTEVfVVBMT0FEKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZmlsZVVwbG9hZFVybHM7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucyAmJiBmaWVsZC52YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb25zLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4LnR5cGUgPT09IEVWYWxpZGF0b3IuUkVRVUlSRUQgJiYgIWZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmaWxlVXBsb2FkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkRGF0YSA9IGZpZWxkLmNhcmQuZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHg6IGFueSkgPT4geC5zZWxlY3RlZENhcmQgJiYgeC5zZWxlY3RlZENhcmQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhICYmIHNlbGVjdGVkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuY2FyZC5kYXRhID0gc2VsZWN0ZWREYXRhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodmFsaWRpdHkpIHtcbiAgICAgIC8vIFNhdmUgZ3JpZCBvbiBmb3JtU2F2ZSBCdXR0b25cbiAgICAgIGxldCBjdXN0b21Db21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCB0ZW1wVmFsdWU6IGFueSA9IFtdO1xuICAgICAgbGV0IHNhdmVBbGxHcmlkOiBhbnkgPSBbXTtcbiAgICAgIGxldCBnZXRCdG5zOiBhbnkgPSBbXTtcbiAgICAgIC8vIHNldCB2YWx1ZSBhcyAxIG9yIDAgaW4gY2FzZSBvZiBjaGVja2JveFxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcyAmJiB2YWxpZGl0eSkge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWUgPT09ICcnIHx8IGZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGFzIHN0cmluZ1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQudGltZU9ubHkgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmllbGQuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkLnZhbHVlLCAnSEg6bW06c3MnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpICYmXG4gICAgICAgICAgICAgICAgIWZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICdoaDptbSBhJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGZpZWxkPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJy4nKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2FsY3VsYXRlZFZhbHVlID8gZmllbGQudmFsdWUgOiBmaWVsZC52YWx1ZSAvIDEwMCk/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLicpICYmICFjYWxjdWxhdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlIC8gMTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZXQgdmFsdWUgb2YgYXV0b0NvbXBsZXRlIGFzIHN0cmluZ3NcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICAhZmllbGQuc2hvd0FsbFZhbHVlICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLnZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAodmFsdWU6IGFueSkgPT4gdmFsdWVbZmllbGQuZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJzsnKSB8fFxuICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGVtcFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IG11bHRpU2VsZWN0IGFycmF5IGludG8gc3RyaW5nXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKSAmJlxuICAgICAgICAgICAgICBmaWVsZC5zYXZlQXNTdHJpbmcgIT09IGZhbHNlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbXVsaVNlbGVjdFZhbHVlW2ZpZWxkLmZpZWxkXSA9IGZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPyAxIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNhdmUgZ3JpZCBvbiBmb3JtU2F2ZSBCdXR0b25cbiAgICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ09NUE9ORU5UICYmICFjdXN0b21Db21wb25lbnQpIHtcbiAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgc2F2ZUFsbEdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJyArIGZpZWxkPy5jb21wb25lbnRDb250cm9sPy5pZCArICcgJyArICcjc2F2ZUFsbEdyaWRWYWx1ZXMnKTtcbiAgICAgICAgICAgICAgZ2V0QnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nICsgZmllbGQ/LmNvbXBvbmVudENvbnRyb2w/LmlkICsgJyAnICsgJy5zYXZlUm93Jyk7XG4gICAgICAgICAgICAgIGlmIChzYXZlQWxsR3JpZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzYXZlQWxsR3JpZFswXS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUZvcm1QYWdlID0gaW50ZXJ2YWwoNzUwKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUZvcm1QYWdlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNhdmVGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoZ2V0QnRucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgc2F2ZVJvd0J0biBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgICAgICAgICBzYXZlUm93QnRuPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgIGlmICghc2F2ZUFsbEdyaWQubGVuZ3RoICYmICFnZXRCdG5zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNhdmVGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgICAgICAgICAgIGZpZWxkLnRpbWVPbmx5ICYmIGZpZWxkLnNob3dUaW1lXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScpOyAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBtdWxpU2VsZWN0VmFsdWVbZmllbGQuZmllbGRdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICAhZmllbGQuc2hvd0FsbFZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB0ZW1wVmFsdWVcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCcsJywgJzsnKVxuICAgICAgICAgICAgICAgID8uc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgID8ubWFwKCh2YWw6IGFueSkgPT4gKHsgW2ZpZWxkLmRpc3BsYXlGaWVsZF06IHZhbCB9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID09PSAxID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGZpZWxkPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIChmaWVsZC52YWx1ZSAqIDEwMCk/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWxGb3JtKCkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCB8fCB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlXG4gICAgICAgIC5jb25maXJtKHtcbiAgICAgICAgICBrZXk6ICdjYW5jZWxCdXR0b24nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlPycsXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzWzBdLmRldGFpbCA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbEZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgICAgICAgIHV0aWxpdGllcy5yZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbmNlbEZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgIHV0aWxpdGllcy5yZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICB9XG4gIH1cblxuICBsb29rdXBDbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgfVxuICAgLy8gdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgY2FsZW5kYXIgd2lkdGhcbiAgICovXG4gIHNldENhbGFuZGVyV2lkdGgoKSB7XG4gICAgY29uc3QgY2FsYW5kZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnAtY2FsZW5kYXInKTtcbiAgICBsZXQgZm9ybTogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybScpO1xuICAgIGxldCB3aWR0aCA9IGZvcm0/LmNsaWVudFdpZHRoO1xuICAgIGNhbGFuZGVyRWxlbWVudD8uZm9yRWFjaCgoY2FsYW5kZXI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2FsYW5kZXJPZnNldExlZnQgPSBjYWxhbmRlci5vZmZzZXRMZWZ0O1xuICAgICAgaWYgKGNhbGFuZGVyT2ZzZXRMZWZ0IDw9IHdpZHRoIC8gMikge1xuICAgICAgICBjYWxhbmRlci5jbGFzc0xpc3QuYWRkKCdvcGVuLXJpZ2h0LXNpZGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGR5bmFtaWMgZGlhbG9nIGRhdGFcbiAgICovXG4gIHNldERpYWxvZ0RhdGEoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCBkYXRhOiBhbnkpOiBhbnkge1xuICAgIGlmIChkYXRhICYmIGZvcm1GaWVsZCkge1xuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBkYXRhID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKGRhdGEpO1xuICAgICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0LnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0Py50b1N0cmluZygpPy50cmltKCk7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQudmFsdWUgJiYgZm9ybUZpZWxkLnZhbHVlLnRvU3RyaW5nKCkudHJpbSgpKSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGRhdGEuY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8oXG4gICAgICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRhdGEuY29tcG9uZW50LCB7XG4gICAgICAgIC4uLmRhdGEuZGF0YSxcbiAgICAgICAgc3R5bGVDbGFzczogJ2xvb2t1cC1tb2RlbCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgICAgICBmaWVsZDogZm9ybUZpZWxkLmZpZWxkLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB2YWx1ZUZpZWxkOiBkYXRhLmRhdGE/LnZhbHVlRmllbGQsXG4gICAgICAgICAgLi4uZGF0YS5kYXRhLmRhdGEsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0YWJGb2N1c0V2ZW50KGZvcm1GaWVsZDogYW55KSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLicgKyBmb3JtRmllbGQuZmllbGRcbiAgICApO1xuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICBmb3JtRmllbGQub25DbGljayhmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGxhYmVsXG4gICAqL1xuICBzZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQ6IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFxuICAgICkge1xuICAgICAgaWYoZXZlbnQuY3RybEtleSAmJiBmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCl7XG4gICAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmNvbXBvbmVudCwgZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhLmRhdGEpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnN0IHJlZjogYW55ID0gdGhpcy5zZXREaWFsb2dEYXRhKFxuICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQ/LmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQubGFiZWwub25SZXR1cm4pXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vblJldHVybihmb3JtRmllbGQudmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgfVxuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkaWFsb2cgcmVmIHdoZW4gcG9wdXAgb3BlblxuICAgKi9cbiAgc2V0RHluYW1pY0RpYWxvZ1JlZihyZWY6IGFueSl7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgfVxuXG4gIGludGVyY2VwdERpYWxvZ0Nsb3NlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0IHx8IHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0KSB7XG4gICAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpID09IHRydWUpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgdGhpcy5sb29rdXBGb2N1c091dCA9IHRydWU7XG4gICAgICBsZXQgdmFsdWUgPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuc2V0RGlhbG9nRGF0YShmb3JtRmllbGQsIGZvcm1GaWVsZC5sb29rdXBDb250cm9sKTtcbiAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWwpO1xuICAgICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9ZmFsc2U7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUZpZWxkLmZpZWxkKT8uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxvb2t1cEZvY3VzT3V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSBmb3JtRmllbGQub25SZXR1cm4oZm9ybUZpZWxkLnZhbHVlLCByZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZFZhbHVlID1cbiAgICAgICAgICAgIHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlLnRleHRcbiAgICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUudGV4dCA6IHZhbHVlO1xuICAgICAgICAgIGlmIChmb3JtRmllbGRWYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvbkNsaWNrIGV2ZW50IGludm9rZWQgJiYgb3BlbiBEaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZC9sYWJlbFxuICAgKi9cbiAgaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHRoaXMuc2VsZWN0TG9va3VwTGFiZWwoZm9ybUZpZWxkKTtcbiAgICAgIHRoaXMuc2VsZWN0TG9va3VwRmllbGQoZm9ybUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdENsYXNzKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGxldCBtdWx0aVNlbGVjdENsYXNzID0gJydcbiAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiBmb3JtRmllbGQudmFsdWU/Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgbXVsdGlTZWxlY3RDbGFzcyA9ICduZy1pbnZhbGlkIG5nLWRpcnR5IHdyYXAtY2hpcHMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlTZWxlY3RDbGFzcyA9ICduZy1pbnZhbGlkIG5nLWRpcnR5JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiBmb3JtRmllbGQudmFsdWU/Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgbXVsdGlTZWxlY3RDbGFzcyA9ICdmb3JtLWNvbnRyb2wgd3JhcC1jaGlwcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aVNlbGVjdENsYXNzID0gJ2Zvcm0tY29udHJvbCBuZy1kaXJ0eSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtdWx0aVNlbGVjdENsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBDYWxlbmRhciBEYXRlIEZvcm1hdCAmJiBzZXQgRGF0ZSBNaW51dGUgaW50ZXJ2YWxcbiAgICovXG4gIHNldENhbGVuZGFyRGF0ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUikge1xuICAgICAgLy8gY29udmVydCB0aW1lIGludG8gZGF0ZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLnRpbWVPbmx5ICYmXG4gICAgICAgIChmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgIH1lbHNlIGlmIChcbiAgICAgICAgKGZvcm1GaWVsZC5zaG93VGltZSB8fCBmb3JtRmllbGQudGltZU9ubHkpICYmXG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUoXG4gICAgICAgICAgdXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChmb3JtRmllbGQudmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoZm9ybUZpZWxkLnNob3dUaW1lIHx8IGZvcm1GaWVsZC50aW1lT25seSkgJiZcbiAgICAgICAgIWZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICB9XG4gIH1cbiAgY2FsZW5kYXJDaGFuZ2VWYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUgIT09IGZvcm1GaWVsZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICBmb3JtRmllbGQucHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgc2VjdGlvbiBDbGlja2VkIGV2ZW50XG4gICAqL1xuICBjbGlja2VkU2VjdGlvbihzZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICB0aGlzLnNlY3Rpb25DbGlja2VkRXZlbnQuZW1pdChzZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBpbiBOb3RlX0ZpZWxkIGNvbnJ0cm9sXG4gICAqL1xuICBoYW5kbGVOb3RlRmllbGREaWFsb2coZm9ybWZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oTm90ZXNDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybWZpZWxkLmxhYmVsIGFzIHN0cmluZyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1maWVsZC52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWRUZXh0OiBmb3JtZmllbGQuZGlzYWJsZWRUZXh0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhmb3JtZmllbGQ/LmZpZWxkID8gZm9ybWZpZWxkPy5maWVsZCA6IGZvcm1maWVsZD8ubGFiZWwpO1xuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBmb3JtZmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtZmllbGQub25SZXR1cm4oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0Q2xhc3NOYW1lKGZvcm1GaWVsZDogSUZvcm1GaWVsZCk6IHN0cmluZyB7XG4gICAgaWYgKGZvcm1GaWVsZC5oaWRkZW4pIHJldHVybiAnIGhpZGRlbic7XG4gICAgZWxzZSByZXR1cm4gJyc7XG4gIH1cblxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGZvcm1GaWVsZDogYW55KSB7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBldmVudCkge1xuICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2VkIG9uRm9jdXNPdXQgRXZlbnRcbiAgICovXG4gIG9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBsZXQgcmVjb3JkOiBhbnkgPSB7fTtcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZCkge1xuICAgICAgICAgIHJlY29yZFtmb3JtRmllbGQuZmllbGRdID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB1dGlsaXRpZXMuc2V0SHlwZXJsaW5rUGFyYW1WYWx1ZShyZWNvcmQsIHRoaXMuZm9ybSk7XG4gICAvLyB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uRm9jdXNPdXQgJiYgdGhpcy5sb29rdXBGb2N1c091dCA9PT0gZmFsc2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkZvY3VzT3V0KGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrU3BhY2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAodHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0ID0gZm9ybUZpZWxkLnZhbHVlLnRleHQuc3Vic3RyaW5nKFxuICAgICAgICAwLFxuICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZS50ZXh0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8vdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiBmb3JtRmllbGQudmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmb3JtRmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNsZWFyIHRoZSBkcm9wZG93biB2YWx1ZSB3aGVuIGNsaWNrIG9uIHhcbiAgICovXG4gIG9uQ2xlYXJWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQsIGV2ZW50OiBhbnkpIHtcbiAgIC8vIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGZvcm1GaWVsZCk7XG4gICAgdGhpcy5kcm9wRG93bkNoYW5nZUV2ZW50LmVtaXQoZm9ybUZpZWxkKTtcbiAgICBpZiAoIWV2ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRHJvcGRvd25WYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIG9uQ2hhbmdlIEV2ZW50IHdoZW4gVmFsdWUgQ2hhbmdlZFxuICAgKi9cbiAgb25DaGFuZ2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVuU2FmZSBsaW5rIGludG8gc2FmZSBsaW5rXG4gICAqL1xuICBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZykge1xuICAgIGxldCBsaW5rVXJsOiBhbnkgPSB1cmw7XG4gICAgaWYgKGxpbmtVcmwpIHtcbiAgICAgIGxpbmtVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGxpbmtVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlua1VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2Ugb24gZHluYW1pYyBidXR0b25zIGNsaWNrXG4gICAqL1xuICBvbk5ld0J1dHRvbkNsaWNrKGJ1dHRvbikge1xuICAgIGxldCBzYXZlQWxsR3JpZDogYW55ID0gW107XG4gICAgbGV0IGdldEJ0bnM6IGFueSA9IFtdO1xuICAgIGxldCB2YWxpZGl0eSA9IHRydWU7XG4gICAgbGV0IGVycm9yTWVzc2FnZURldGFpbHMgPSAnJztcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShmb3JtU2VjdGlvbi5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyA9IGVycm9yTWVzc2FnZURldGFpbHNcbiAgICAgICAgICAgICAgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgIDogZm9ybUZpZWxkLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHMuc29tZShcbiAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLnJlcXVpcmVkRmllbGQgJiYgZmllbGQuZXJyb3JNZXNzYWdlICYmICFmaWVsZC52YWx1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodmFsaWRpdHkgJiYgZmllbGQpIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMsXG4gICAgICAgICAgICA1MDAwLFxuICAgICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlRGV0YWlscywgNTAwMCwgJ0lOVkFMSUQgRklFTEQnKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGl0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkaXR5KSB7XG4gICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIHNhdmVBbGxHcmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBmaWVsZD8uY29tcG9uZW50Q29udHJvbD8uaWQgKyAnICcgKyAnI3NhdmVBbGxHcmlkVmFsdWVzJyk7XG4gICAgICAgICAgZ2V0QnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nICsgZmllbGQ/LmNvbXBvbmVudENvbnRyb2w/LmlkICsgJyAnICsgJy5zYXZlUm93Jyk7XG4gICAgICAgICAgaWYgKHNhdmVBbGxHcmlkLmxlbmd0aCkge1xuICAgICAgICAgICAgc2F2ZUFsbEdyaWRbMF0uY2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoZ2V0QnRucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzYXZlUm93QnRuIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICAgICAgc2F2ZVJvd0J0bj8uY2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgICBidXR0b24uZnVuYygpO1xuICB9XG5cbiAgc2VsZWN0ZWRDYXJkQ2xpY2tFdmVudChkYXRhOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmNhcmQgJiYgZmllbGQuY2FyZC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBvYmogPSBmaWVsZC5jYXJkLmRhdGFbZGF0YS5pbmRleF07XG4gICAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLnNlbGVjdGVkQ2FyZCkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iai5zZWxlY3RlZENhcmQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG9ialsnc2VsZWN0ZWRDYXJkJ10gPSAnY2FyZC1hY3RpdmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc2VsZWN0ZWRDYXJkKSB7XG4gICAgICBkYXRhWydzZWxlY3RlZENhcmQnXSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGFzc3dvcmRUeXBlKGZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQudGV4dFR5cGUgPT0gJ3RleHQnKSB7XG4gICAgICBmb3JtRmllbGQudGV4dFR5cGUgPSAncGFzc3dvcmQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRmllbGQudGV4dFR5cGUgPSAndGV4dCc7XG4gICAgfVxuICB9XG4gIG9uTGlua0NsaWNrKGxpbmssIGZvcm1TZWN0aW9uKXtcbiAgICBpZighbGluay5kaXNhYmxlZCAmJiAhZm9ybVNlY3Rpb24uZGlzYWJsZWQpe1xuICAgICAgbGluay5vbkNsaWNrKCk7XG4gICAgfVxuICB9XG4gIGlzVmFsaWRDb2x1bW4oY29sOiBhbnkpe1xuICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29sKSAmJiBjb2wgPiAwICYmIGNvbCA8PSAxMlxuICB9XG59XG5cbiIsIjxwLWNvbmZpcm1EaWFsb2cgW3N0eWxlXT1cInsgd2lkdGg6ICc1MHZ3JyB9XCIga2V5PVwiY2FuY2VsQnV0dG9uXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG48Zm9ybSAqbmdJZj1cIiFpc0Zvcm1IaWRkZW4gJiYgZm9ybVwiPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxwLXByb2dyZXNzU3Bpbm5lciBjbGFzcz1cInByb2dyZXNzLXNwaW5uZXIgcC1wcm9ncmVzcy1zcGlubmVyLWNpcmNsZSBjdXN0b20tc3Bpbm5lclwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleC13cmFwXCI+XG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieyAnZml4ZWQtaGVpZ2h0Jzogc3RpY2t5QWN0aW9ucyB9XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmb3JtU2VjdGlvbiBvZiBmb3JtLmZvcm1TZWN0aW9uc1wiIFtjbGFzc109XCIhZm9ybVNlY3Rpb24uaGlkZGVuID8gJ2NhcmQgdy0xMDAnIDogJydcIj5cbiAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNsaWNrZWRTZWN0aW9uKGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZm9ybVNlY3Rpb24gPyAnJyA6IHNlY3Rpb25EaXNhYmxlZChmb3JtU2VjdGlvbilcIj5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImZvcm1TZWN0aW9uLmhpZGRlbiA/ICdoaWRkZW4nIDogZm9ybVNlY3Rpb24uY2xhc3NcIj5cbiAgICAgICAgICAgICAgPHAtYWNjb3JkaW9uPlxuICAgICAgICAgICAgICAgIDxwLWFjY29yZGlvblRhYiBbc2VsZWN0ZWRdPVwiZm9ybVNlY3Rpb24uZXhwYW5kZWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtU2VjdGlvbi5hY2NvcmRpb25EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIhZm9ybVNlY3Rpb24uc2hvd0FjY29yZGlvbiA/ICdoaWRlLWFjY29yZGlhbicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPHAtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaWNvblwiIFt0aXRsZV09XCJmb3JtU2VjdGlvbi5uYW1lXCIgY2xhc3M9XCJtci0xIHBsLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Vic2VjdGlvbi1oZWFkZXJcIj57eyBmb3JtU2VjdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3AtaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC1jb2wgZm9ybS1jb21wb25lbnQgYWNjb3JkaW9uLWhlYWRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uXCIgZm9yPVwibmFtZVwiIGNsYXNzPVwiYWNjb3JkaW9uSGVhZGVyTmFtZSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFt0aXRsZV09XCJmb3JtU2VjdGlvbi5uYW1lXCIgW2NsYXNzXT1cImZvcm1TZWN0aW9uLmljb25cIiBjbGFzcz1cIlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7eyBmb3JtU2VjdGlvbi5uYW1lIH19IDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxpbmsgb2YgZm9ybVNlY3Rpb24ubGlua3NcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibXItMyBjdXN0b20tbGlua1wiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBbY2xhc3NdPVwibGluay5uYW1lICYmIWZvcm1TZWN0aW9uLmRpc2FibGVkJiYhbGluay5kaXNhYmxlZCAgPyAnY3VzdG9tLWxpbmsnIDogJ2Rpc2FibGVkLWxpbmsnXCIgKGNsaWNrKT1cIm9uTGlua0NsaWNrKGxpbmssIGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGZvcm0tY29tcG9uZW50IGZvcm0tYm9keS13cmFwcGVyXCI+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiKGZvcm1GaWVsZC5jb250cm9sPT09J2FkZF9idXR0b24nPyAnIGZvcm0tYnV0dG9uLWZpZWxkLXdyYXBwZXIgJzonJykrXG4gICAgICAgICAgICAgICAgICAgICggaXNWYWxpZENvbHVtbihmb3JtRmllbGQuY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICA/ICdjb2wtJyArIGZvcm1GaWVsZC5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6IGlzVmFsaWRDb2x1bW4oZm9ybS5jb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgID8gJ2NvbC0nICsgZm9ybS5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5jb2x1bW4gfHwgZm9ybS5jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgPyAnIGNvbCAnXG4gICAgICAgICAgICAgICAgICAgIDogJ2NvbC0xMiBtZDpjb2wtMyBmbGV4IGZsZXgtY29sdW1uJyArIHNldENsYXNzTmFtZShmb3JtRmllbGQpKVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtRmllbGQuY29udHJvbCA9PT0gJ2JyZWFrX2xpbmUnID8gJ2JyZWFrLWxpbmUnIDogJydcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZvcm1GaWVsZCBvZiBmb3JtU2VjdGlvbi5maWVsZHM7IGxldCBmb3JtRmllbGRJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBsYWJlbENvbnRyb2wgSHlwZXJsaW5rIG9uIGxvb2t1cCAgQ29udHJvbCBGaWVsZC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIGNsYXNzPVwidG9Gcm9udEZvclRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWxhYmVsIGN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwiZm9ybUZpZWxkLm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKSA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZFRleHQgPyAnZGlzYWJsZS1sYWJlbC1jb250cm9sJyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWxhYmVsIGN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnRhcmdldCA9PT0gJ19pZnJhbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cImxvYWRMYWJlbENvbnRyb2xJRnJhbWUoZm9ybUZpZWxkKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbGFiZWxDb250cm9sIG9uIGFkZFRleHRib3gsIGNhbGVuZGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5kaXNhYmxlZCA/ICdkaXNhYmxlLWxhYmVsLWNvbnRyb2wnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQsICRldmVudClcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImZvcm1GaWVsZC5jb250cm9sXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3BhY2VyIENvbnRyb2wgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNQQUNFUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY29sdW1uPyAnY29sLScgK2Zvcm1GaWVsZC5jb2x1bW4gOiAnJ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5wdXQgVGV4dEFyZWEgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuVEVYVEFSRUFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgcElucHV0VGV4dGFyZWEgW3Jvd3NdPVwiZm9ybUZpZWxkLnJvdyA/IGZvcm1GaWVsZC5yb3cgOiAxIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntoZWlnaHQ6IGZvcm1GaWVsZC5oZWlnaHQgPyBmb3JtRmllbGQuaGVpZ2h0IDogJyd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGV4dCBJbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuSU5QVVRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybUZpZWxkLmRpc2FibGVkICYmICFmb3JtRmllbGQuc2hvd0JvdHRvbUJvcmRlciA/ICdkaXNhYmxlZC1sYWJlbCcgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxhYmVsJyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQuaXNQYXNzd29yZFwiPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiZm9ybUZpZWxkLnRleHRUeXBlPT0ncGFzc3dvcmQnO2Vsc2UgaGlkZUJ1dHRvblwiIHRpdGxlPVwiaGlkZVwiIGNsYXNzPVwicGkgcGktZXllXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hpZGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWV5ZS1zbGFzaFwiIHRpdGxlPVwic2hvd1wiIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1wiIFtpZF09XCJmb3JtRmllbGQuc2hvd0JvdHRvbUJvcmRlciA/ICdyZW1vdmUtYm9kZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJmb3JtRmllbGQudGV4dFR5cGUgPyBmb3JtRmllbGQudGV4dFR5cGUgOiAndGV4dCdcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlLnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkID8gZm9ybUZpZWxkLmZpZWxkIDogZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLk5VTUVSSUNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBDdXJyZW5jeSAmJiBudW1iZXIgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJpbnB1dCxzcGFuXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIiAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIiAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCIgW21vZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkZWNpbWFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbY3VycmVuY3ldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1VTRCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW2xvY2FsZV09XCJmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2VuLVVTJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdkZWNpbWFsJyB8fCBmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3N1ZmZpeF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAncGVyY2VudCcgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZFwiPiAqIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBhc3N3b3JkIElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5QQVNTV09SRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHR5cGU9XCJwYXNzd29yZFwiIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZFwiPiAqIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmNsYXNzXCIgKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0wIGZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0hFQ0tCT1hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIgJ2ZsZXggYWxpZ24taXRlbXMtY2VudGVyICcrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGZvcm1GaWVsZClcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDYWxlbmRhciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0FMRU5EQVJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWNhbGVuZGFyLWhlYWRlci1zcGFuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJpbnB1dFwiICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5ICcgKyBmb3JtRmllbGQuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wgJysgZm9ybUZpZWxkLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbc2hvd0J1dHRvbkJhcl09XCIhZm9ybUZpZWxkLnRpbWVPbmx5XCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIGhvdXJGb3JtYXQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdERhdGVdPVwiZGVmYXVsdERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBNaW51dGVdPVwiZm9ybUZpZWxkLm1pbnV0ZXNJbnRlcnZhbCA/IGZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWwgOiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJmb3JtRmllbGQuc2hvd1RpbWVcIiAob25TaG93KT1cInNldENhbGVuZGFyRGF0ZShmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aW1lT25seV09XCJmb3JtRmllbGQudGltZU9ubHlcIiBbdmlld109XCJmb3JtRmllbGQubW9udGhPbmx5ID8gJ21vbnRoJyA6ICdkYXRlJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJmb3JtRmllbGQ/LmZvcm1hdD8udHlwZSA/IGZvcm1GaWVsZC5mb3JtYXQ/LnR5cGUgOiBjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjYWxlbmRhckNoYW5nZVZhbHVlKGZvcm1GaWVsZClcIiAob25JbnB1dCk9XCJjYWxlbmRhcklucHV0VmFsdWUoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFt0b2RheUJ1dHRvblN0eWxlQ2xhc3NdPVwiY29sdW1uLnRpbWVPbmx5ID8gJ2hpZGUtdG9kYXktYnRuJyA6ICdzaG93LXRvZGF5LWJ0bidcIiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5EUk9QRE9XTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZCAmJiAhZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2xcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtzdHlsZUNsYXNzXT0nZm9ybUZpZWxkLmZpZWxkJyBbcGxhY2Vob2xkZXJdPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgW2ZpbHRlcl09XCJmb3JtRmllbGQuYWxsb3dTZWFyY2hcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiZm9ybUZpZWxkLm9wdGlvbkxhYmVsXCIgW29wdGlvblZhbHVlXT1cImZvcm1GaWVsZC5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiAoa2V5dXAuVGFiKT1cInRhYkZvY3VzRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEcm9wZG93blZhbHVlKGZvcm1GaWVsZClcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbc2hvd0NsZWFyXT1cImZvcm1GaWVsZC52YWx1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DbGVhclZhbHVlKGZvcm1GaWVsZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmb3JtRmllbGQudmFsdWUgPiAwID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkPy5pc1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmhpZGRlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3JcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQXV0b0NvbXBsZXRlIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQVVUT0NPTVBMRVRFXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbHVpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIGRhdGEtdGl0bGUtZWxlbWVudD1cImlucHV0LHNwYW5cIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtzdWdnZXN0aW9uc109XCJmb3JtRmllbGQuZGF0YVwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwiYXV0b1NlYXJjaCgkZXZlbnQsIGZvcm1GaWVsZClcIiBbZHJvcGRvd25dPVwiZm9ybUZpZWxkLnNob3dPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFwiIFtuYW1lXT1cImZvcm1GaWVsZC5sYWJlbFwiIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNdWx0aS1zZWxlY3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLk1VTFRJU0VMRUNUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZm9ybUZpZWxkPy5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJpbnB1dCxzcGFuXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TXVsdGlTZWxlY3RDbGFzcyhmb3JtRmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgW29wdGlvbkxhYmVsXT1cImZvcm1GaWVsZC5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZm9ybUZpZWxkLm9wdGlvblZhbHVlXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQub25DbGljayA/IGZvcm1GaWVsZC5vbkNsaWNrKCkgOiAnJ1wiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEh5cGVybGluay0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkaXNhYmxlZC1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdsaW5rLWxhYmVsIGN1c3RvbS1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuSFlQRVJMSU5LXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cImh5cGVybGlua0RpYWxvZyhmb3JtRmllbGQsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2hyZWZdPVwiZm9ybUZpZWxkLmRpc2FibGVkPycnOnNhbml0aXplVXJsKGZvcm1GaWVsZC5oeXBlcmxpbms/LmxpbmspXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0XCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay50YXJnZXQgPT09ICdfaWZyYW1lJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwbC0yXCIgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cImxvYWRJRnJhbWUoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiICBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9va3VwIENvbnRyb2wgRmllbGQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkxPT0tVUF9JTlBVVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtbG9va3VwLWhlYWRlcicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZXZyb24tcmlnaHQgbG9va3VwLWlucHV0LWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb21wb25lbnQgbG9va3VwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWUgJiYgdHlwZU9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLlRhYik9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiLTFcIiAqbmdJZj1cImZvcm1GaWVsZC52YWx1ZSAmJiAhZm9ybUZpZWxkLmRpc2FibGVkXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9va3VwLWNsZWFyLWljb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoZm9ybUZpZWxkKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbGUgVXBsb2FkIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5GSUxFX1VQTE9BRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1maWxlLXVwbG9hZCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd011bHRpcGxlXT1cImZvcm1GaWVsZC5zZWxlY3RNdWx0aXBsZUZpbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRGaWxlVHlwZXNdPVwiZm9ybUZpZWxkLlNldGZpbGVUeXBlc1wiIFtmaWVsZHNdPVwiZm9ybUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlVXJsKT1cInNldEZpbGVVcmxzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwbG9hZEZpbGVPblJldHVybik9XCJmaWxlT25jaGFuZ2VFdmVudCgpXCI+PC9zZS1maWxlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dmaWxlVXBsb2FkRXJyb3JcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0IEJ1dHRvbiBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TRUxFQ1RCVVRUT05cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXNlbGVjdEJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQuZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmb3JtRmllbGQuZGlzcGxheVN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLXNlbGVjdEJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5ICBDYXJkIGZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DQVJEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGZvcm1GaWVsZD8uZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2UtY2FyZCBbY2FyZF09XCJmb3JtRmllbGQuY2FyZFwiIFtzZXRDYXJkRGF0YV09XCJzZXRDYXJkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDYXJkKT1cInNlbGVjdGVkQ2FyZENsaWNrRXZlbnQoJGV2ZW50KVwiPjwvc2UtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd2ZpbGVVcGxvYWRFcnJvclwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBOb3RlIERldGFpbCBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTk9URV9GSUVMRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGlzYWJsZWQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGFuZGxlTm90ZUZpZWxkRGlhbG9nKGZvcm1GaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Zvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiICBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChmb3JtRmllbGQ/LmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBDb21wb25lbnQgQ29udGFpbmVyLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmhpZGRlbiA/ICdoaWRkZW4nIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInt7Zm9ybVNlY3Rpb24ubmFtZX19LXt7Zm9ybUZpZWxkSW5kZXh9fVwiICNkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkNPTVBPTkVOVFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciBjb21wb25lbnQtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuU0VDVElPTl9IRUFERVJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiID4gIHt7IGZvcm1GaWVsZC5sYWJlbCB9fSA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIE9uQ2xpY2sgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5BRERfQlVUVE9OXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbaWNvbl09XCJmb3JtRmllbGQuaWNvblwiIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIiBbbGFiZWxdPVwiZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie2JhY2tncm91bmQ6IGZvcm1GaWVsZC5jb2xvciA/IGZvcm1GaWVsZC5jb2xvciA6ICcnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5jbGFzcz9mb3JtRmllbGQuY2xhc3M6JydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgR2VuZXJhdGUgUmVwb3J0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuUkVQT1JUXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gW3JlcEluZm9dPVwiZm9ybUZpZWxkXCIgW2xhYmVsXT1cImZvcm1GaWVsZC5sYWJlbFwiIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmFtc109XCJmb3JtRmllbGQucGFyYW1zXCIgW3Nob3dEaWFsb2ddPVwiZm9ybUZpZWxkLnNob3dEaWFsb2dcIiBbcmVwb3J0VHlwZV09XCIgZm9ybUZpZWxkLnJlcG9ydFR5cGVcIiBbcmVwb3J0SGVhZGVyXT1cImZvcm1GaWVsZC5yZXBvcnRIZWFkZXJcIiBbcmVwb3J0Rm9vdGVyXT1cImZvcm1GaWVsZC5yZXBvcnRGb290ZXJcIiBbZm9ybV09XCJmb3JtXCIgW2ljb25dPVwiZm9ybUZpZWxkLmljb25cIiBbY2xhc3NdPVwiZm9ybUZpZWxkLmNsYXNzXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBJbnB1dCBTd2l0Y2ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlNXSVRDSFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtaW5wdXRTd2l0Y2ggW25hbWVdPVwiZm9ybUZpZWxkLmxhYmVsID8gZm9ybUZpZWxkLmxhYmVsOiAnc3dpdGNoJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCI+PC9wLWlucHV0U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxuICAgICAgICAgICAgICA8L3AtYWNjb3JkaW9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc3Bhbj5cblxuICAgIDwhLS0gc2F2ZSBhbmQgY2xvc2UgYnV0dG9ucyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGFjdGlvbnMtYnV0dG9ucy1tYWluLXdyYXBwZXIgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgW25nQ2xhc3NdPVwieyBzdGlja3k6IHN0aWNreUFjdGlvbnMgfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlubmVyLXN0aWNreSBmb3JtLWNvbXBvbmVudCBhY3Rpb25zLWJ1dHRvbnMtd3JhcHBlci1kaXZcIj5cbiAgICAgICAgPCEtLSBzYXZlIGJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRlU2F2ZUJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZFwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1jaGVja1wiXG4gICAgICAgICAgW2xhYmVsXT1cInNhdmVCdXR0b25MYWJlbCA/IHNhdmVCdXR0b25MYWJlbCA6ICdTYXZlJ1wiIGNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBmb3JtLXNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2F2ZUZvcm0oKVwiPjwvYnV0dG9uPlxuICAgICAgICA8IS0tIGNsb3NlIGJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRlQ2FuY2VsQnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzRm9ybURpc2FibGVkXCIgKGNsaWNrKT1cIm9uQ2FuY2VsRm9ybSgpXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIiBbbGFiZWxdPVwiY2FuY2VsQnV0dG9uTGFiZWwgPyBjYW5jZWxCdXR0b25MYWJlbCA6ICdDYW5jZWwnXCIgY2xhc3M9XCJwLWJ1dHRvbi1kYW5nZXIgbWwtM1wiPjwvYnV0dG9uPiAgICAgICBcbiAgICAgICAgIDwhLS0gZHluYW1pYyBidXR0b25zIC0tPlxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGZvcm1CdXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFidXR0b24uaGlkZGVuXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cImJ1dHRvbi5sYWJlbFwiIFtpY29uXT1cImJ1dHRvbi5pY29uID8gYnV0dG9uLmljb24gOiAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgbWwtM1wiIChjbGljayk9XCJvbk5ld0J1dHRvbkNsaWNrKGJ1dHRvbilcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkID8gYnV0dG9uLmRpc2FibGVkIDogZmFsc2VcIj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+Il19
|