master-control 0.4.54 → 0.4.55
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.
|
@@ -2065,7 +2065,7 @@ export class MedialQuestionsComponent {
|
|
|
2065
2065
|
singleSection['sectionName'].toUpperCase().replaceAll(' ', '_') ===
|
|
2066
2066
|
'BASIC_DETAILS' ||
|
|
2067
2067
|
singleSection['sectionName'].toUpperCase().replaceAll(' ', '_') ===
|
|
2068
|
-
'
|
|
2068
|
+
'PERSONAL_DETAILS') &&
|
|
2069
2069
|
isValid) {
|
|
2070
2070
|
// validation for height entered in feet
|
|
2071
2071
|
if (this.personUwAnswers['medicalQuestionsHeightUnit'] === 'FEET') {
|
|
@@ -2578,4 +2578,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2578
2578
|
type: ViewChild,
|
|
2579
2579
|
args: ['addressInput']
|
|
2580
2580
|
}] } });
|
|
2581
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVwTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9C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aUIsOEhBQ2pCLGVBQWUsa0pBQ2YsWUFBWSxxS0FDWixlQUFlLDhNQUNmLHVCQUF1Qiw2SUFDdkIsZ0JBQWdCLCtpQ0FDaEIsZUFBZSwyRUFDZixvQkFBb0I7OzRGQUtYLHdCQUF3QjtrQkF0QnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FFUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixvQkFBb0I7cUJBQ3JCO3VHQUtTLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUXFCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgTmdab25lLCBBZnRlclZpZXdJbml0LCBpbnB1dCwgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBxdWVzdGlvbnNSZXNwb25zZSBmcm9tICcuL3F1ZXN0aW9ucy5qc29uJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9iQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9iL2RvYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkL3VwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aXBsZS1zZWxlY3QvbXVsdGlwbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIckxpbmVDb21wb25lbnQgfSBmcm9tICcuLi9oci1saW5lL2hyLWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLXByZXZpZXcvZmlsZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tZWRpYWwtcXVlc3Rpb25zJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUZXh0Ym94Q29tcG9uZW50LFxuICAgIFJhZGlvQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIFNlbGVjdENvbXBvbmVudCxcbiAgICBEb2JDb21wb25lbnQsXG4gICAgVXBsb2FkQ29tcG9uZW50LFxuICAgIE11bHRpcGxlU2VsZWN0Q29tcG9uZW50LFxuICAgIEdvb2dsZU1hcHNNb2R1bGUsXG4gICAgSHJMaW5lQ29tcG9uZW50LFxuICAgIEZpbGVQcmV2aWV3Q29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1lZGlhbFF1ZXN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBPdXRwdXQoKSBxdWVzdGlvbnNWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBjbHVzdGVySWQgOiBhbnkgPSBpbnB1dDxhbnk+KCk7IC8vIG5vbiBtYW5kYXRvcnkgY2x1c3RlciBpZFxuICBASW5wdXQoKSB0cmlnZ2VyVmFsaWRhdGlvbj86IFN1YmplY3Q8dm9pZD47XG4gIG1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIGRlZmF1bHRWYWx1ZXMgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblR5cGU6IGFueSA9IGlucHV0PGFueT4oKTtcbiAgcGVyc29uVXdJZCA6IGFueSA9IFwiXCI7XG4gIGlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA6IGFueSA9IG51bGw7XG4gIG1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA6IGFueSA9IHt9O1xuICBAVmlld0NoaWxkKCdhZGRyZXNzSW5wdXQnKSBhZGRyZXNzSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwcml2YXRlIGF1dG9jb21wbGV0ZSE6IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGU7XG4gIHNhdmVRdWVzdGlvblJlcXVlc3RMYTogYW55ID0gW107XG4gIHNhdmVRdWVzdGlvblJlcXVlc3RQaDogYW55ID0gW107XG4gIGZpZWxkOiBhbnkgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XG4gIHF1ZXN0aW9uTGlzdDogYW55ID0gW107XG4gIGN1cnJlbnRDb29yZGluYXRlczogYW55ID0ge307XG4gIHBlcnNvblV3UmVzcG9uc2VPYmo6IGFueSA9IFtdO1xuICBjZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwgPSB7IGxhdDogNDAuNzMwNjEsIGxuZzogLTczLjkzNTI0MiB9O1xuICBsYXRpdHVkZTogYW55O1xuICBsb25naXR1ZGU6IGFueTtcbiAgem9vbTogYW55O1xuICBtYXJrZXI6IGFueSA9IHt9O1xuXG5cbiAgcGVyc29uVXdBbnN3ZXJzOiBhbnkgPSB7XG4gICAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQ6ICdGRUVUJyxcbiAgICBtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQ6IDAsXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dDogMCxcbiAgfTtcbiAgbWVkUXVlc3Rpb25PYmo6IGFueSA9IHt9O1xuICBsaXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0OiBhbnkgPSBbXTtcbiAgcXVlc3Rpb25IZWFkZXI6IGFueSA9IFsnZWlhIGRldGFpbHMnLCAnYWJoYSBkZXRhaWxzJywgJ3BlcCBkZXRhaWxzJ107XG4gIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0VHlwZXM6IGFueSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ0NtJyxcbiAgICAgIHZhbHVlOiAnQ00nLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgIHZhbHVlOiAnRkVFVCcsXG4gICAgfSxcbiAgXTtcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gIGFkZHJlc3NTdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgaG92ZXJlZEluZGV4ID0gLTE7XG4gIHNlYXJjaFRpbWVvdXQ6IGFueTtcbiAgaG9yaXpvbnRhbExpbmVPYmogOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFN0eWxlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1c1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUJhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlYXRlZERhdGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXJnaW5cIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDc3NcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IFwic29saWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImZpZWxkTmFtZVwiOiBcImhyTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwic29saWQgbGluZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInBsYWNlSG9sZGVyXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YUlkXCI6IFwiTElfQ09NX0dFTl9DVFJMX2hyTGluZV9ockxpbmVfVjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Zpc2libGVcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc0Rpc2FibGVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFZhbHVlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsaWRhdG9yc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVpcmVkTWVzc2FnZVwiOiBcIlRoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkxlbmd0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhNZXNzYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heExlbmd0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhNZXNzYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5cIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0dGVybk1lc3NhZ2VcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjogW10sXG4gICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogXCJjb2wtMTJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiaW1hZ2VVcmxcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJjb25maWdEYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaHJUZXh0XCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRhRGF0YU9ialwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcImlzU2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDb250cm9sXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IFwiaHJMaW5lXCJcbiAgICAgICAgICAgICAgICB9O1xuICBwcmV2aWV3RmlsZTogRmlsZSB8IG51bGwgPSBudWxsO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmdab25lOiBOZ1pvbmUsIHB1YmxpYyBtYXN0ZXJTZXJ2aWNlIDogTWFzdGVyU2VydmljZSkge1xuICAgIGNvbnNvbGUubG9nKCdtZWRpYWxRdWVzdGlvblJlc3BvbnNlZWVlZWUnLCB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKSk7XG4gICAgY29uc29sZS5sb2coJ3BlcnNvbnR5cGUnLCB0aGlzLnBlcnNvblR5cGUoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyVmFsaWRhdGlvbikge1xuICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb24uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKHRydWUpO1xuICAgIH0pO1xuICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgKChjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddLmN1cnJlbnRWYWx1ZSkpIHx8XG4gICAgICAoKGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddLmN1cnJlbnRWYWx1ZSkpXG4gICAgKSB7XG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcbiAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xuICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZTtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHtcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYXRpdHVkZSxcbiAgICAgICAgICAgIGxuZzogdGhpcy5sb25naXR1ZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgLi4udGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpO1xuICAgIH1cblxuICAgIGlmKCgoY2hhbmdlc1snZGVmYXVsdFZhbHVlcyddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ2RlZmF1bHRWYWx1ZXMnXS5jdXJyZW50VmFsdWUpKSkge1xuICAgICAgaWYodHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlcygpID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2VycyA9IHsuLi50aGlzLnBlcnNvblV3QW5zd2VycywgLi4udGhpcy5kZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJyc7XG5cbiAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgIGlmIChzZWN0aW9uLnF1ZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHNlY3Rpb24ucXVlc3Rpb25zKSkge1xuICAgIC8vICAgICBzZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgc3dpdGNoIChxdWVzdGlvbi5jYW1tdW5kYVF1ZXN0aW9uQ29kZSkge1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhUJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRGJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRJJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxuICAgICAgdGhpcy5hZGRyZXNzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcbiAgICAgICAgY29tcG9uZW50UmVzdHJpY3Rpb25zOiB7IGNvdW50cnk6ICdJTicgfSxcbiAgICAgICAgZmllbGRzOiBbJ3BsYWNlX2lkJywgJ2dlb21ldHJ5JywgJ25hbWUnLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm9uUGxhY2VTZWxlY3RlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uUGxhY2VTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBwbGFjZSA9IHRoaXMuYXV0b2NvbXBsZXRlLmdldFBsYWNlKCk7XG5cbiAgICBpZiAoIXBsYWNlLmdlb21ldHJ5IHx8ICFwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ05vIGRldGFpbHMgYXZhaWxhYmxlIGZvciBpbnB1dDogJywgcGxhY2UubmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcblxuICAgIGlmIChwbGFjZS5nZW9tZXRyeS52aWV3cG9ydCkge1xuICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuem9vbSA9IDEzO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBwbGFjZTonLCB7XG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCk6IHZvaWQge1xuICAgIGNvbnN0IGFkZHJlc3NEYXRhID0ge1xuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgZm9ybWF0dGVkQWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfTtcbiAgfVxuXG4gIHNlYXJjaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzOiBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cyAmJiByZXN1bHRzWzBdKSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgICAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnR2VvY29kZSB3YXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAnICsgc3RhdHVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkFkZHJlc3NJbnB1dEtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVvdXRcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggKyAxLFxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPj0gMCAmJlxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdEFkZHJlc3ModGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IDIpIHtcbiAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hBZGRyZXNzZXMocXVlcnkpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBzZWFyY2hBZGRyZXNzZXMocXVlcnk6IHN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXG4gICAgLy8gRm9yIGV4YW1wbGUsIHVzaW5nIEdvb2dsZSBQbGFjZXMgQVBJOlxuXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpO1xuICAgIHNlcnZpY2UuZ2V0UGxhY2VQcmVkaWN0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHF1ZXJ5LFxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICAgKHByZWRpY3Rpb25zLCBzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiZcbiAgICAgICAgICBwcmVkaWN0aW9uc1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IHByZWRpY3Rpb25zLm1hcCgocHJlZGljdGlvbikgPT4gKHtcbiAgICAgICAgICAgIHBsYWNlX2lkOiBwcmVkaWN0aW9uLnBsYWNlX2lkLFxuICAgICAgICAgICAgbWFpbl90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5tYWluX3RleHQsXG4gICAgICAgICAgICBzZWNvbmRhcnlfdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcuc2Vjb25kYXJ5X3RleHQsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJlZGljdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgY29uc3QgYWRkcmVzc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcjYWRkcmVzc0lucHV0J1xuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoYWRkcmVzc0lucHV0KSB7XG4gICAgICBhZGRyZXNzSW5wdXQudmFsdWUgPSBzdWdnZXN0aW9uLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICk7XG4gICAgc2VydmljZS5nZXREZXRhaWxzKFxuICAgICAge1xuICAgICAgICBwbGFjZUlkOiBzdWdnZXN0aW9uLnBsYWNlX2lkLFxuICAgICAgICBmaWVsZHM6IFsnZ2VvbWV0cnknLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH0sXG4gICAgICAocGxhY2UsIHN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBwbGFjZSkge1xuICAgICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XG4gICAgICAgICAgY29uc3QgbG5nID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sbmcoKTtcblxuICAgICAgICAgIGlmIChsYXQgIT09IHVuZGVmaW5lZCAmJiBsbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBsbmc7XG4gICAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gbGF0O1xuXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgbGF0LCBsbmcgfTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5wdXRCbHVyKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShhcnJheU9mT2JqIDogYW55KSB7XG4gICAgaWYoYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgfHwgYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gICdMaWZlTWVkaUNuZHRuJykge1xuICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBhcnJheU9mT2JqO1xuICAgIH1cbiAgICBpZih0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYXJyYXlPZk9ialsncGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5J10pKSB7XG4gICAgICBhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXS5mb3JFYWNoKChzaW5nbGVTdWJBcnJheSA6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlU3ViQXJyYXkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpIHtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCkpIHtcbiAgICAgIGxldCBhcnJheU9mS2V5cyA6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpO1xuICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55LCBzaW5nbGVLZXlMZW5ndGggOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSwgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoIDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBlcnNvblV3QW5zd2VycyhzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgaWYoc2luZ2xlS2V5TGVuZ3RoID09PSAoYXJyYXlPZktleXMubGVuZ3RoIC0gMSkgJiYgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoID09PSAodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCkge1xuICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gW107XG4gICAgbGV0IGRhdGE6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpO1xuICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3ggPSBbXTtcblxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAgIGxldCBwZXJzb25Vd0lkQXJyYXk6IGFueSA9IFtdO1xuICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgIHBlcnNvblV3SWRBcnJheS5wdXNoKHNpbmdsZVF1ZXN0aW9uT2JqWydwZXJzb25VV0lkJ10pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pXG4gICAgICApIHtcblxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3SWQgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3RpdGxlJ10gPT09ICdNZWRpY2FsIERldGFpbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXG4gICAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZSgvXFxcXG4vZywgJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV07XG5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzaW5nbGVRdWVzdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICd7XCJUeXBlXCI6XCJBbHBoYU51bWVyaWNcIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIi9eKFthLXpBLVpdKXs1fShbMC05XSl7NH0oW2EtekEtWl0pezF9PyQvXCJ9JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0Z0Y2FDbnRjRGV0bHMnKSB7XG4gICAgICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID0gJ3tcImN1c3RvbVZhbGlkYXRpb25cIjpbe1wiY291bnRyeVwiOlwiSU5cIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIigoXls2LTldKXsxfShbMC05XSl7OX0kKVwifSx7XCJjb3VudHJ5XCI6XCJPVEhFUlwiLFwiTWluVmFsdWVcIjpcIjVcIixcIk1heFZhbHVlXCI6XCIxNFwifV19JztcbiAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCcpIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xuICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlQWxsKCdcXFxcbicsICc8YnI+Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0ZlZXRMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ0ZSRUVURVhUJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXV1bXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ04nLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnWScsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPSAnSEFSRCBDT1BZJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uc29ydChcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25zTGlzdEZvckxBOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnc3RlcCddID09PSBzdGVwc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgc3RlcDogc3RlcHMsXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSkge1xuICAgICAgICAgICAgICAgIC8vIEhhcmQgQ29weSBhbmQgTWFwIHF1ZXN0aW9uXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdNQVAnLFxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdZJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGlmIE5SSSB0aGVuIHBhc3Nwb3J0IHVwbG9hZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ05hdGlvbmFsaXR5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcXVlc3Rpb25zTGlzdEZvckxBLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcbiAgICAgICAgICAgIC8vIGlmIChsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXIgIT09IHRoaXMubnVtYmVyTWludXNPbmUpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gcXVlc3Rpb25zTGlzdEZvckxBO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0KSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpICkge1xuICAgICAgICAgIGxldCBpc1N1YlF1ZXN0aW9uRXhpc3RzOiBhbnkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA9IG51bGw7XG4gICAgICAgICAgbGV0IGFycmF5T2ZLZXlzIDogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCk7XG4gICAgICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldFN1YlF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsXG4gICAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbJ2Fuc3dlciddLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydChcbiAgICAgICAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGVyc29uVVdJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgKHNpbmdsZTogYW55KSA9PiBzaW5nbGVbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ11cbiAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpLmZvckVhY2goKHNpbmdsZVBlcnNvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF0pKSB7XG4gICAgICAgICAgLy8gICAgIGxldCBhcnJheU9mS2V5cyA9IE9iamVjdC5rZXlzKHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXSk7XG4gICAgICAgICAgLy8gICAgIGlmIChhcnJheU9mS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoYW5zd2VyT2JqOiBhbnkpID0+IHtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IFtdO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gbGV0IGxpc3RPZk9wdGlvbnNTZWxlY3RlZCA6IGFueSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxpc3RPZk9wdGlvbnNTZWxlY3RlZC5mb3JFYWNoKChzaW5nbGVFbGVtZW50IDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZERvbWFpblZhbHVlT2JqIDogYW55ID0gZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddID09PSBzaW5nbGVFbGVtZW50KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0ucHVzaCh7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICAgIGxhYmVsIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluVWlWYWx1ZSddLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZSA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBhbnN3ZXJPYmpbJ2Fuc3dlciddO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxldCBmZWV0QW5zd2VyID0gYW5zd2VyT2JqWydhbnN3ZXInXS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IGZlZXRBbnN3ZXJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddICYmIHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgaXNTdWJRdWVzdGlvbkV4aXN0cyA9IHRydWU7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yRGlzZWFzZVwiOiBcIm1kZWljYWxIaXN0b3J5XCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiYXBpVXJsXCI6IFwiaHR0cHM6Ly9wcmVwcm9kLWRpcmVjdHBvcnRhbGxpZmUuZ29kaWdpdC5jb20vRGlyZWN0UG9ydGFsTGlmZS9saWZlL2ZldGNoU3ViUXVlc3Rpb25zXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JQZXJzb25Vd0lkXCI6IFwicGVyc29uVVdJRFwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInRva2VuQ29va2llUGFyYW1cIjogXCJ2M1Rva2VuXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiaXNTZW5kVG9rZW5cIjogZmFsc2VcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnModGhpcy5maWVsZCgpPy5jb25maWdEYXRhLCBhbnN3ZXJPYmpbJ2Fuc3dlciddLCBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSkuc3Vic2NyaWJlKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoc3ViUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblJlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT4gb2JqZWN0WydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddIDogJycsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogYW5zd2VyT2JqWydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiBhbnN3ZXJPYmouYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnWScgJiYgYW5zd2VyT2JqLmFuc3dlciAhPT0gJ04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqLmFuc3dlci5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKS5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlcl0gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5hbnN3ZXJdID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmopO1xuICAgICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vIH0pO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcblxuICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ10gPSB7XG4gICAgICBjb250cm9sU3R5bGU6IHtcbiAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgIGNvbnRyb2xNZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICB9LFxuICAgICAgZmllbGROYW1lOiBudWxsLFxuICAgICAgbGFiZWw6ICdmZWV0IC8gaW5jaGVzJyxcbiAgICAgIHBsYWNlSG9sZGVyOiAnJyxcbiAgICAgIG1ldGFJZDogJycsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0Rpc2FibGU6IGlzRGlzYWJsZSxcbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgaXNSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVkTWVzc2FnZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtaW5MZW5ndGhNZXNzYWdlOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IDE1MCxcbiAgICAgICAgbWF4TGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgICAgcGF0dGVybjogbnVsbCxcbiAgICAgICAgcGF0dGVybk1lc3NhZ2U6ICcnLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQ20nLFxuICAgICAgICAgIHZhbHVlOiAnQ00nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBzdHlsZTogbnVsbCxcbiAgICAgIGltYWdlVXJsOiBudWxsLFxuICAgICAgY29uZmlnRGF0YToge30sXG4gICAgICBtZXRhRGF0YU9iajogbnVsbCxcbiAgICAgIGlzU2hvd0xhYmVsOiBmYWxzZSxcbiAgICAgIGlzTWFzdGVyQ29udHJvbDogZmFsc2UsXG4gICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmo6IGFueSkge1xuXG4gICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IGFuc3dlck9ialsnYW5zd2VyJ107XG4gICAgfVxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xuICAgICAgbGV0IGZlZXRBbnN3ZXIgPSBhbnN3ZXJPYmpbJ2Fuc3dlciddLnNwbGl0KCcuJyk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJiBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gZmVldEFuc3dlclsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcwJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSkge1xuICAgICAgaWYoZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5KSkge1xuICAgICAgYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eS5mb3JFYWNoKChzdWJxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHN1YnF1ZXN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKClcbiAgICB9XG4gIH1cblxuICBjaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGl0bGVDYXNlKGhlYWRlcjogYW55KTogYW55IHtcbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcbiAgICAgICAgbGV0IHZhbCA9IGhlYWRlci5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4gdmFsWzBdLnRvVXBwZXJDYXNlKCkgKyAnICcgKyB0aGlzLnRvVGl0bGVDYXNlKHZhbFsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaGVhZGVyLnRvVXBwZXJDYXNlKCkgPT09ICdGQVRDQSBERVRBSUxTJykge1xuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9UaXRsZUNhc2UoaGVhZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b1RpdGxlQ2FzZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgL1xcd1xcUyovZyxcbiAgICAgICAgICAodHh0OiBhbnkpID0+IHR4dFswXS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGQocXVlc3Rpb25PYmo6IGFueSkge1xuICAgIGxldCBvcHRpb25zT2JqOiBhbnkgPSBbXTtcbiAgICBsZXQgY29udHJvbFN0eWxlIDogYW55ID0ge307XG4gICAgaWYgKHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkge1xuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgb3B0aW9uc09iai5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcbiAgICAgICAgICB2YWx1ZTogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGlzRGlzYWJsZSA6IGFueSA9IGZhbHNlO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpKSApIHtcbiAgICAgIGxldCBpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSAgOiBhbnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJyk7XG4gICAgICBpc0Rpc2FibGUgPSBKU09OLnBhcnNlKGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1pbkxlbmd0aDogYW55ID0gbnVsbDtcbiAgICBsZXQgbWF4TGVuZ3RoOiBhbnkgPSAyMDA7XG4gICAgbGV0IHBhdHRlcm46IGFueSA9IG51bGw7XG4gICAgbGV0IHBhdHRlcm5NZXNzYWdlOiBhbnkgPSBudWxsO1xuICAgbGV0IGNvbmZpZ0RhdGE6IGFueSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhKVxuICA/IHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YVxuICA6IHt9O1xuXG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsnY29uZmlnRGF0YSddKSkge1xuICAgICAgY29uZmlnRGF0YSA9IHsuLi5jb25maWdEYXRhLCAuLi5xdWVzdGlvbk9ialsnY29uZmlnRGF0YSddfTtcbiAgICB9XG5cbiAgICBpZihxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICAnUkFESU8gQlVUVE9OJyB8fCBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykge1xuICAgICAgY29udHJvbFN0eWxlID0ge1xuICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIxMnB4XCIsXG4gICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogXCI0MDBcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBcIk11bGlzaFwiLFxuICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBcIiNGRkZGRkZcIixcbiAgICAgICAgICAgICAgICAgIFwiY2FyZXRDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJudWRnZURpc3BsYXlJbWFnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlckNvbG9yXCI6IFwiI2ZmYmIwMFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJob3ZlckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogXCIjRUNFQ0VDXCIsXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IFwiI0VDRUNFQ1wiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IFwiMXB4XCIsXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJBTExfQ09NX0dFTl9DVFJMX3JhZGlvX25vbWluZWVHZW5kZXJfVjFcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyU3R5bGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKSkge1xuICAgICAgbGV0IHZhbGlkYXRpb25PYmo6IGFueSA9IEpTT04ucGFyc2UocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXSkpIHtcbiAgICAgICAgbWluTGVuZ3RoID0gdmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ10pKSB7XG4gICAgICAgIG1heExlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ107XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydUeXBlJ10pKSB7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJykge1xuICAgICAgICAgIHBhdHRlcm4gPSAnXlswLTldKyQnO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gJ09ubHkgbnVtYmVycyBhcmUgYWxsb3dlZC4nO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2lzQWxsb3dOdW1iZXJzSW5UZXh0RmllbGRzJ10gPSB0cnVlO1xuICAgICAgICAgIG1heExlbmd0aCA9ICc5Jy5yZXBlYXQoTnVtYmVyKG1heExlbmd0aCkpO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21heFZhbHVlJ10gPSBtYXhMZW5ndGg7XG4gICAgICAgICAgY29uZmlnRGF0YVsnbWluVmFsdWUnXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnQWxwaGFOdW1lcmljJykge1xuICAgICAgICAgIHBhdHRlcm4gPSAnXlthLXpBLVowLTlcXFxcc10rJCc7XG4gICAgICAgICAgcGF0dGVybk1lc3NhZ2UgPSAnT25seSBsZXR0ZXJzIGFuZCBudW1iZXJzIGFyZSBhbGxvd2VkLic7XG4gICAgICAgICAgY29uZmlnRGF0YVsnaXNBbGxvd051bWJlcnNJblRleHRGaWVsZHMnXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdHRlcm4gPSBudWxsO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWdEYXRhOiBjb25maWdEYXRhLFxuICAgICAgY29udHJvbFN0eWxlOiBjb250cm9sU3R5bGUsXG4gICAgICBjb250cm9sVHlwZTpcbiAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJ1xuICAgICAgICAgID8gJ3RleHQnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJ1xuICAgICAgICAgID8gJ3JhZGlvJ1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnIHx8XG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTidcbiAgICAgICAgICA/ICdjaGVja2JveCdcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgID8gJ2RhdGUnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTidcbiAgICAgICAgICA/ICdzZWxlY3QnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnXG4gICAgICAgICAgPyAnZmlsZSdcbiAgICAgICAgICA6ICcnLFxuICAgICAgZmllbGROYW1lOiBxdWVzdGlvbk9ialsncXVlc3Rpb25JZCddLFxuICAgICAgaXNEaXNhYmxlLFxuICAgICAgbGFiZWw6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcbiAgICAgIHBsYWNlSG9sZGVyOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGlzUmVxdWlyZWQ6IHF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgbWluTGVuZ3RoLFxuICAgICAgICBtYXhMZW5ndGgsXG4gICAgICAgIHBhdHRlcm4sXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIGNzc0NsYXNzOiBcIm1iLTJcIixcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNPYmosXG4gICAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMocXVlc3Rpb24/OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzJywgdGhpcy5xdWVzdGlvbkxpc3QpXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5xdWVzdGlvbkxpc3QpKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pKSB7XG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dRdWVzdGlvbihzaW5nbGVRdWVzdGlvbikpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIHRoZSBxdWVzdGlvbiBpZiBpdCBoYXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXT8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RlZmF1bHRWYWx1ZSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5kZWZhdWx0VmFsdWVzKCkpICYmIE9iamVjdC5rZXlzKHRoaXMuZGVmYXVsdFZhbHVlcygpKS5pbmNsdWRlcyhxdWVzdGlvbklkKTtcbiAgICAgICAgICAgIGlmIChoYXNEZWZhdWx0VmFsdWUgJiYgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10pIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10gPSB7XG4gICAgICAgICAgICAgICAgLi4uc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10sXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlOiB0cnVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgICAgIGxldCBpc05vbmVJbkRvbWFpblZhbHVlczogYW55ID0gc2luZ2xlUXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xuICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZU9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVPYmpbJ2RvbWFpblVpVmFsdWUnXS50b1VwcGVyQ2FzZSgpID09PSAnTk9ORSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNOb25lSW5Eb21haW5WYWx1ZXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbm9uZSBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBzZWxlY3RlZCBjaGVja2JveCBxdWVzdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmRvbWFpblVpVmFsdWUudG9VcHBlckNhc2UoKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTk9ORSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdDogYW55ID0gdGhpcy5pc0Jsb2NrZWRRdWVzdGlvbnNMaXN0LmZpbHRlcigoc2luZ2xlQmxvY2tlZE9iajogYW55KSA9PiBzaW5nbGVCbG9ja2VkT2JqWydzZWN0aW9uVGl0bGUnXS50cmltKCkgPT09IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udHJpbSgpKTtcbiAgICAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdCkpIHtcbiAgICAgICAgLy8gICBpZiAoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JDdXN0b21lckZsb3cgJiYgIXRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgaWYgKChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckFnZW50RmxvdyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QyMCcgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDUnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA2JykgJiYgdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBsZXQgaGlkZGVuUXVlc3Rpb25zOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25PYmo6IGFueSkgPT4gIXNpbmdsZVNlY3Rpb25PYmpbJ3Nob3dTZWN0aW9uJ11cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoaWRkZW5RdWVzdGlvbnMpKSB7XG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5xdWVzdGlvbkxpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSk7XG5cbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGxpc3QnLCB0aGlzLnF1ZXN0aW9uTGlzdCk7XG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBhbnN3ZXJzJywgdGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xuICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpO1xuICAgIHRoaXMucXVlc3Rpb25zVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnBlcnNvblV3QW5zd2Vycyk7XG4gIH1cblxuICBzaG93UXVlc3Rpb24oY3VycmVudFF1ZXN0aW9uOiBhbnkpIHtcbiAgICBsZXQgc2hvd1F1ZXN0aW9uOiBhbnkgPSBmYWxzZTtcbiAgICBsZXQgc3ViUXVlc3Rpb25zOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gcXVlc3Rpb25zUmVzcG9uc2VbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHBlcnNvblJvbGUpXG4gICAgLy8gbGV0IHJvbGUgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bY3VycmVudFNlY3Rpb25JbmRleF1bJ3JvbGUnXVxuXG4gICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICBsZXQgaXNTdWJRdWVzdGlvbk9iamVjdDogYW55ID0gW107XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKSkge1xuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0ID0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5maWx0ZXIoXG4gICAgICAgICAgKHF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT5cbiAgICAgICAgICAgIHF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ViUXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICBzdWJRdWVzdGlvbnMucHVzaChzaW5nbGVRdWVzdGlvbik7XG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QuZm9yRWFjaCgoc2luZ2xlU3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdICE9PSAnIScgJiZcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPT09XG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSkgfHxcbiAgICAgICAgICAgIChzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gPT09ICchJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gIT09XG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnIScpWzFdKSB8fFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0/LmluY2x1ZGVzKHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10pXG4gICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5maWx0ZXIoXG4gICAgICAgICAgICAgIC8vICAgKHNpbmdsZU9iajogYW55KSA9PlxuICAgICAgICAgICAgICAvLyAgICAgc2luZ2xlT2JqID09PVxuICAgICAgICAgICAgICAvLyAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxuICAgICAgICAgICAgICAvLyApLmxlbmd0aCA+IDBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvbnMpICYmXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgKSB7XG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKSAmJlxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxuICAgICAgKSAmJlxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxuICAgICAgICBdXG4gICAgICApICYmXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxuICAgICAgXSA9PT0gY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uQW5zd2VyJ11cbiAgICApIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJykge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzaG93UXVlc3Rpb247XG4gIH1cblxuICBzYXZlUXVlc3Rpb25EZXRhaWxzKCkge1xuICAgIC8vIHJlbW92ZSBhbGwgY2hlY2tib3ggcXVlc3Rpb25zIHByZXNlbnQgaW4gdmFsdWVzXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveCkpIHtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZGtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddKTtcbiAgICAgIC8vIGxldCBwb2xpY3lBc3N1cmVkS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddKTtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9uZUtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddKTtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZFR3b0tleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddKTtcbiAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmIChpc05hTihOdW1iZXIoc2luZ2xlS2V5KSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gcG9saWN5QXNzdXJlZEtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gbGlmZUFzc3VyZWRPbmVLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gbGlmZUFzc3VyZWRUd29LZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgIH1cbiAgICAvLyBsZXQgaGVpZ2h0SW5JbmNoZXNPYmo6IGFueSA9IFtdO1xuICAgIC8vIGxldCBoZWlnaHRJbkZlZXRPYmo6IGFueSA9IFtdO1xuICAgIC8vIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmo6IGFueSA9IFtdO1xuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgIC8vICAgbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnKTtcbiAgICAvLyAgIGlmIChsYUluZGV4ICE9PSAtMSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdKSkge1xuICAgIC8vICAgICBoZWlnaHRJbkluY2hlc09iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XG4gICAgLy8gICAgIGhlaWdodEluRmVldE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XG4gICAgLy8gICAgIGhlaWdodEluQ2VudGltZXRlck9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIGFuZCBub24gbWVkaWNhbCBxdWVzdGlvbnMgOlxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iaikgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iajogYW55LCBzaW5nbGVQZXJzb25JbmRleDogYW55KSA9PiB7XG4gICAgLy8gICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10pICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICBsZXQgcm9sZTogYW55ID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcgPyBcImxpZmUgYXNzdXJlZFwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdwb2xpY3lIb2xkZXInID8gXCJwb2xpY3kgaG9sZGVyXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkT25lJyA/IFwiSm9pbnQgTGlmZSAxXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkVHdvJyA/IFwiSm9pbnQgTGlmZSAyXCIgOiBcIlwiO1xuICAgIC8vICAgICAgIHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJiAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnVEVMTF9VU19NT1JFJyB8fCBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdCQVNJQ19ERVRBSUxTJykgJiYgaXNWYWxpZCkge1xuXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSkpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAvLyAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgYmFzaWMgcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ2hhcmRDb3B5TGFuZycgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUSScgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgICAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgIC8vICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSkgJiYgaXNWYWxpZFxuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmXG4gICAgLy8gICAgICAgICAgICAgICByZWRpcmVjdFxuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KGAke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3F1ZXN0aW9uVHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3R5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydwZXJzb25UeXBlJ119YCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgLy8gICAgICAgICAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcblxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyAgIH0pO1xuICAgIC8vICAgICAgICAgICAgIC8vIH1cbiAgICAvLyAgICAgICAgICAgfSk7XG5cbiAgICAvLyAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cbiAgICAvLyAgICAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XG4gICAgLy8gICAgICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgIC8vICAgICAgICAgICAvLyAgICAgKXtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcblxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAvLyAgICAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgfVxuICAgIC8vICAgICAgICAgICAvLyB9KTtcbiAgICAvLyAgICAgICAgICAgLy8gfVxuXG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgfSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cblxuICAgIC8vIGlmICgoaXNWYWxpZCB8fCBzYXZlZHJhZnQpIHx8IHRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcbiAgICAvLyBpZiAoaXNWYWxpZCkge1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheSh0cnVlKTtcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxT2JqOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckxhOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvclBoOiBhbnkgPSBbXTtcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSkge1xuICAgICAgICAvLyBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBpZiAoXG4gICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJlxuICAgICAgICAvLyAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgIC8vICAgICAnVEVMTF9VU19NT1JFJyB8fFxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAvLyAgICAgICAnQkFTSUNfREVUQUlMUycpXG4gICAgICAgIC8vICkge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJiAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICApICYmICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHBhc3MgaGVpZ2h0IGluIGNtIG9ialxuICAgICAgICAgICAgbGV0IGNtT2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2NtT2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICAgICApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICAgICAgKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBpbmNoZXNcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gKiAwLjM5MzcwMVxuICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldDogYW55ID1cbiAgICAgICAgICAgICAgcGFyc2VGbG9hdCgoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdKSA+IDEyXG4gICAgICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxuICAgICAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XG4gICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGZlZXRcblxuICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluRmVldCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJyAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikpIHtcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPVxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddKSAqXG4gICAgICAgICAgICAgICAgICAxMiArXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pO1xuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbTogYW55ID0gKFxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcbiAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgICBsZXQgZmVldE9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChmZWV0T2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10udG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluRmVldE9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IGNtT2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGNtT2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5DbSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluQ21BbnN3ZXJPYmplY3Q6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgIGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3QpICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11dID1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkNtQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3QpICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ11dID1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldEFuc3dlck9iamVjdDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3QpICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICAgIGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBpc05vRGlzcGxheVF1ZXN0aW9uSW5TZWN0aW9uOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddXG4gICAgICAgIClcbiAgICAgICAgICA/IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgICAgKHNpbmdsZURhdGE6IGFueSkgPT4gc2luZ2xlRGF0YVsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddIHx8XG4gICAgICAgICAgICBpc05vRGlzcGxheVF1ZXN0aW9uSW5TZWN0aW9uLmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xuICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSAnRW5nbGlzaCc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnI6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCdcbiAgICAgICAgICAgICAgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBmb3IgY2hlY2tib3ggcXVlc3Rpb25cblxuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3Q6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgb2JqWydhbnN3ZXInXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXG4gICAgICAgICAgICAgICAgICAnYW5zd2VyJ1xuICAgICAgICAgICAgICAgIF0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIG5vbiBjaGVja2JveCBxdWVzdGlvblxuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3Q6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdW1xuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcbiAgICAgICAgICAgICAgICBdID1cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmKHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkge1xuICAgICAgICAgICAgLy8gICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgOiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxuICAgICAgICAgICAgLy8gICBpZihxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgLy8gICAgICAgYW5zd2VyOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgPyB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSksICd5eXl5LU1NLWRkJykgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAvLyAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAvLyAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgIC8vICAgICB9O1xuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgLy8gICAgIGlmKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XG4gICAgICAgICAgICAvLyAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlIDogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgIG9ialsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAvLyBvYmplY3QgYWxyZWFkeSB0aGVyZSBzbyBvdmVyIHJpZGUgdGhlIG5ldyBhbnN3ZXJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FyciA6IGFueSA9IFtdO1xuICAgICAgICAgICAgLy8gICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAvLyAgICAgfVxuXG4gICAgICAgICAgICAvLyAgIH1cblxuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZXRGaW5hbmNFbGdibCcpIHtcbiAgICAgICAgICAgIC8vICAgbGV0IGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT4gKHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxuICAgICAgICAgICAgLy8gICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgLy8gICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAvLyAgICAgYW5zd2VyOiB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHksXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgIC8vICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAvLyAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgICAvLyAgIGlmIChmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleF1bJ2Fuc3dlciddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5O1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdDogYW55ID0gW1xuICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMubWFwKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICBpdGVtLnBlcnNvblVXSWQudG9TdHJpbmcoKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QpKSB7XG4gICAgICAgIG1haW5SZXF1ZXN0Rm9yTGEgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzBdXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgbWFpblJlcXVlc3RGb3JQaCA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxuICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzFdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHNhdmVSZXF1ZXN0c0FycmF5OiBhbnkgPSBbXTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KG1haW5SZXF1ZXN0Rm9yTGEpICYmIHRoaXMucGVyc29uVHlwZSgpICE9PSAnUEgnKSB7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdExhID0gbWFpblJlcXVlc3RGb3JMYTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdExhJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxuICAgICAgICApO1xuICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgTEFfJHt0aGlzLmNsdXN0ZXJJZCgpfWAsIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpKVxuICAgICAgICB9XG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yTGEsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yTGEsICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50KSAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50ICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA/IHRydWUgOiAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWFpblJlcXVlc3RGb3JMYSkgJiYgdGhpcy5wZXJzb25UeXBlKCkgPT09ICdQSCcpIHtcbiAgICAgICAgdGhpcy5zYXZlUXVlc3Rpb25SZXF1ZXN0UGggPSBtYWluUmVxdWVzdEZvckxhO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICdzYXZlUXVlc3Rpb25SZXF1ZXN0UGgnLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpXG4gICAgICAgICk7XG4gICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBQSF8ke3RoaXMuY2x1c3RlcklkKCl9YCwgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSkpXG4gICAgICAgIH1cbiAgICAgICAgLy8gIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50KSAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50ICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA/IHRydWUgOiAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucygpO1xuICB9XG5cbiAgZ2V0Q29va2llVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb29raWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICBsZXQgdG9rZW5OYW1lID0gJyc7XG4gICAgbGV0IHRva2VuVmFsdWUgPSAnJztcbiAgICBjb25zdCBpbmRleDIgPSAyO1xuICAgIGNvb2tpZS5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YS5zcGxpdCgnPScpWzBdLmluY2x1ZGVzKG5hbWUpICYmICEhZGF0YS5zcGxpdCgnPScpWzFdKSB7XG4gICAgICAgIHRva2VuTmFtZSA9IGRhdGEuc3BsaXQoJz0nKVswXS50cmltKCk7XG4gICAgICAgIHRva2VuVmFsdWUgPSBkYXRhLnNwbGl0KCc9JylbMV07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG5hbWUgPT09ICdsaW5rJyAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IG51bGwgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHRva2VuVmFsdWUgPSB0b2tlblZhbHVlICsgJz0nICsgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRva2VuVmFsdWU7XG4gIH1cblxuICB2YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnMoZm9jdXNPbkluVmFsaWQgOiBhbnkgPSBmYWxzZSkge1xuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xuICAgIGxldCB2YWxpZGF0aW9uTWVzc2FnZSA6IGFueSA9ICcnO1xuICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAgICAgJ1RFTExfVVNfTU9SRScgfHxcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnIHx8XG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgICAgICAgICdNRURJQ0FMX0RFVEFJTFMnKSAmJlxuICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxuICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcbiAgICAgICAgICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlc2A7XG4gICAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9ICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIC8vIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAvLyAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxuICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcblxuICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIGNlbnRpbWV0ZXJgO1xuXG4gICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCc7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgLy8gKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIC8vICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ107XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgKFxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAvLyApIHtcbiAgICAgICAgICAvLyAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcbiAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xuICAgICAgICAgIC8vICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAvLyAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAgICAgICAvLyAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgLy8gICB9XG5cbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoaXNWYWxpZCAmJlxuICAgICAgICAgICAgICAgIC8vICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dKSAmJlxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dID09PVxuICAgICAgICAgICAgICAgICAgJ04nKSB8fFxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gKVxuICAgICAgICAgICAgICAvLyB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcblxuICAgICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxuICAgICAgICAgIC8vICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cbiAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xuICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAvLyAgICAgKXtcbiAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxuICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25UeXBlKCkpICYmIHRoaXMucGVyc29uVHlwZSA9PT0gJ1BIJykge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXNNZWRpY2FsUXVlc3Rpb25zVmFsaWRGb3JQSCcsIGlzVmFsaWQpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndmFsaWRhdGlvbk1lc3NhZ2VGb3JNZWRpY2FsUXVlc3Rpb25zRm9yUEgnLCB2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYFBIXyR7dGhpcy5jbHVzdGVySWQoKX1faXNWYWxpZGAsIGlzVmFsaWQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpc01lZGljYWxRdWVzdGlvbnNWYWxpZCcsIGlzVmFsaWQpO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3ZhbGlkYXRpb25NZXNzYWdlRm9yTWVkaWNhbFF1ZXN0aW9ucycsIHZhbGlkYXRpb25NZXNzYWdlKTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgTEFfJHt0aGlzLmNsdXN0ZXJJZCgpfV9pc1ZhbGlkYCwgaXNWYWxpZClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9uIDogYW55KSB7XG4gICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgcXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nICkge1xuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0ubGVuZ3RoID4gMFxuXG4gICAgICAvLyBpZiBub25lIGlzIHNlbGVjdGVkIHRoZW4gcmVtb3ZlIGFsbCBhbmQgY2FsbCBBUElcbiAgICAgIGxldCBpc05vbmVTZWxlY3RlZCA6IGFueSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbmRJbmRleCgoc2luZ2xlT2JqIDphbnkpID0+IHNpbmdsZU9iaiA9PT0gJ05vTWVkSGlzdHJ5Jyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNOb25lU2VsZWN0ZWQgIT09ICAtMVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maWx0ZXIoKHNpbmdsZU9iaiA6IGFueSkgPT4gc2luZ2xlT2JqID09PSAnTm9NZWRIaXN0cnknKVxuICAgICAgfVxuICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdFxuICAgICAgICApKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+ICgodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHx8ICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pICYmICFzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSkgKSk7XG4gICAgICB9XG4gICAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KFxuICAgICAgLy8gICAoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+XG4gICAgICAvLyAgICAgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXG4gICAgICAvLyApO1xuICAgICAgLy8gcmVtb3ZlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBmcm9tIHF1ZXN0aW9ucyByZXNwb25zZSBsaXN0XG4gICAgICAvLyBpZiAoXG4gICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXggIT09IHRoaXMubnVtYmVyQ29uc3RhbnQubnVtYmVybWludXMxICYmXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICApICYmXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAvLyAgICAgXVsncXVlc3Rpb25MaXN0J11cbiAgICAgIC8vICAgKVxuICAgICAgLy8gKSB7XG4gICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcbiAgICAgICAgLy8gXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialtcbiAgICAgICAgLy8gICAncXVlc3Rpb25zUmVzcG9uc2UnXG4gICAgICAgIC8vIF1bY3VycmVudFNlY3Rpb25JbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcbiAgICAgICAgLy8gICAoc2luZ2xlTGlzdEl0ZW06IGFueSkgPT5cbiAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cbiAgICAgICAgLy8gICAgICkgfHxcbiAgICAgICAgLy8gICAgICghdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAvLyAgICAgICBzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXVxuICAgICAgICAvLyAgICAgKSAmJlxuICAgICAgICAvLyAgICAgICAhc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pXG4gICAgICAgIC8vICk7XG4gICAgICAvLyB9XG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vIF0uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyAgICAgXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcblxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb24gOiBhbnkpID0+ICghc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpKTtcbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZU1hc3Rlck9iajogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIC8vICAgaWYgKHNpbmdsZU1hc3Rlck9ialsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkge1xuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9ucyddID0gW107XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheSh0cnVlKTtcblxuICAgICAgbGV0IHNlbGVjdGVkRGlzZWFzZXMgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IEpTT04ucGFyc2UoXG4gICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgLy8gICAgIHRoaXMuZmV0Y2hTdWJRdWVzdGlvbnNMaXN0W1xuICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXG4gICAgICAvLyAgICAgXS50b1N0cmluZygpXG4gICAgICAvLyAgIClcbiAgICAgIC8vICk7XG4gICAgICBpZihxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCdhcGlVcmwnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvckRpc2Vhc2UnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvclBlcnNvblV3SWQnKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ2FwaVVybCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yRGlzZWFzZSddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yUGVyc29uVXdJZCddKSkge1xuICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2UuZ2V0U3ViUXVlc3Rpb25zKHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10sIHNlbGVjdGVkRGlzZWFzZXMsIHRoaXMucGVyc29uVXdJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xuICAgICAgICAgICAgICAgIF0gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgKFxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAvLyAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddXG4gICAgICAgICAgICAgICAgLy8gICApXG4gICAgICAgICAgICAgICAgLy8gKSB7XG4gICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzdWJEb21haW5bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRhdGEuc29ydChcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBkYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10gPT09IHN0ZXBzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogdGhpcy5wZXJzb25Vd0lkLFxuICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgICAvLyBtZXJnZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgaW50byBwZXJzb24gdXcgbWFpbiBxdWVzdGlvbnMgcmVzcG9uc2UgKHJlcXVpcmVkIGZvciBzaG93IHF1ZXN0aW9uIGZ1bmN0aW9uIHRvIHdvcmspXG4gICAgICAgICAgICAgIC8vIGNsZWFyaW5nIG9uIHRvcCBiZWZvcmUgYXBpIGNhbGxcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcbiAgfVxuICBvbkRvY3VtZW50RmlsZVByZXZpZXcoZXZlbnQ6IHsgZmlsZTogRmlsZSwgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ByZXZpZXcgcmVxdWVzdGVkIGZvcjonLCBldmVudC5maWxlLm5hbWUpO1xuICAgIHRoaXMucHJldmlld0ZpbGUgPSBldmVudC5maWxlO1xuICB9XG5cbiAgY2xvc2VGaWxlUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gbnVsbDtcbiAgfVxuXG4gIGNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xuICAgICAgICBdID09PSAnRkVFVCcgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICAgICAgXVxuICAgICAgICAgICkgKiAwLjM5MzcwMVxuICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIChoZWlnaHRJbkluY2hlcyAvIDEyKVxuICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXVxuICAgICAgICAgICkgPiAxMlxuICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxuICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgXSA9IGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgXSA9XG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTEnICYmXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTInICYmXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTMnXG4gICAgICAgICAgICAgID8gaGVpZ2h0SW5GZWV0XG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICAgICAgICAgIC5jaGFyQXQoMClcbiAgICAgICAgICAgICAgOiBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXG4gICAgICAgIF0gPT09ICdDTScgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgXVxuICAgICAgICApICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cbiAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCdcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApLnRvU3RyaW5nKClcbiAgICAgICAgICApICogMTI7XG4gICAgICAgIGxldCBoZWlnaHRJbkNtOiBhbnkgPSAoXG4gICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkluY2hlcykgLyAwLjM5MzcwMVxuICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXG4gICAgICAgIF0gPSBoZWlnaHRJbkNtO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIH1cblxuICBmb2N1c1RvRWxlbWVudChlbGVtZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IGVsZW1lbnRDb2xsZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlbGVtZW50SWQpO1xuICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IDEyMDtcbiAgICBpZiAoIWVsZW1lbnRDb2xsZWN0aW9uIHx8IGVsZW1lbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudENvbGxlY3Rpb25bMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdCBzY3JvbGxDb250YWluZXI6IGFueSA9IHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50KTtcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGZyYW1lIHNvIGxheW91dCBpcyBzZXR0bGVkIGJlZm9yZSBzY3JvbGxpbmcuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8geyB0b3A6IDAgfVxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMFxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuXG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9XG4gICAgICAgIGVsZW1lbnRSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wICsgY3VycmVudFNjcm9sbCAtIGhlYWRlck9mZnNldDtcblxuICAgICAgaWYgKHNjcm9sbENvbnRhaW5lciA9PT0gd2luZG93KSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogdGFyZ2V0UG9zaXRpb24sIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvKHtcbiAgICAgICAgICB0b3A6IHRhcmdldFBvc2l0aW9uLFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdibGlua19tZScsICdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuXG4gICAgICAvLyBSZW1vdmUgYmxpbmsgYW5pbWF0aW9uIGFmdGVyIGR1cmF0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdibGlua19tZScpO1xuICAgICAgfSwgMzUwMCk7XG5cbiAgICAgIC8vIFJlbW92ZSBpbnZhbGlkLWZpZWxkLW9uZS11aSBjbGFzcyB3aGVuIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpZWxkXG4gICAgICBjb25zdCByZW1vdmVJbnZhbGlkQ2xhc3MgPSAoZXZlbnQ/OiBhbnkpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuICAgICAgICAvLyBDbGVhbiB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIGZyb20gbWFpbiBlbGVtZW50XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MsIHRydWUpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIGV2ZW50IGxpc3RlbmVycyBmcm9tIGNoaWxkIHJhZGlvL2NoZWNrYm94IGlucHV0c1xuICAgICAgICBjb25zdCByYWRpb0lucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgICAgcmFkaW9JbnB1dHMuZm9yRWFjaCgocmFkaW86IGFueSkgPT4ge1xuICAgICAgICAgIHJhZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgICAgcmFkaW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2hlY2tib3hJbnB1dHMuZm9yRWFjaCgoY2hlY2tib3g6IGFueSkgPT4ge1xuICAgICAgICAgIGNoZWNrYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgICAgY2hlY2tib3gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEZvciB0ZXh0Ym94IC0gdHJpZ2dlcnMgb24gdHlwaW5nXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gRm9yIHNlbGVjdCBkcm9wZG93biAtIHRyaWdnZXJzIG9uIHZhbHVlIGNoYW5nZVxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBGb3IgZGlyZWN0IGNsaWNrIG9uIHRoZSBlbGVtZW50IC0gdXNlIGNhcHR1cmUgcGhhc2UgdG8gY2F0Y2ggY2hpbGQgZXZlbnRzXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzLCB0cnVlKTtcblxuICAgICAgLy8gRm9yIEFuZ3VsYXIgbmdNb2RlbCBjaGFuZ2VzXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBIYW5kbGUgcmFkaW8gYnV0dG9ucyB3aXRoaW4gdGhlIGVsZW1lbnQgKGNvbW1vbiBpbiBBbmd1bGFyIGZvcm1zKVxuICAgICAgY29uc3QgcmFkaW9JbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgICAgcmFkaW9JbnB1dHMuZm9yRWFjaCgocmFkaW86IGFueSkgPT4ge1xuICAgICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIGNoZWNrYm94ZXMgd2l0aGluIHRoZSBlbGVtZW50IChmb3IgbXVsdGktc2VsZWN0KVxuICAgICAgY29uc3QgY2hlY2tib3hJbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuICAgICAgY2hlY2tib3hJbnB1dHMuZm9yRWFjaCgoY2hlY2tib3g6IGFueSkgPT4ge1xuICAgICAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2Nyb2xsYWJsZVBhcmVudChub2RlOiBIVE1MRWxlbWVudCB8IG51bGwpOiBIVE1MRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgbGV0IHBhcmVudCA9IG5vZGU/LnBhcmVudEVsZW1lbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KS5vdmVyZmxvd1k7XG4gICAgICBpZiAob3ZlcmZsb3dZID09PSAnYXV0bycgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJykge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbn1cbiIsIlxuPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBxdWVzdGlvbkxpc3RcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhY2hlY2tJZlZhbHVlSXNFbXB0eShzZWN0aW9uWydxdWVzdGlvbnMnXSkgJiZcbiAgICAgICAgc2VjdGlvblsnc2hvd1NlY3Rpb24nXVxuICAgICAgXCJcbiAgICAgIGNsYXNzPVwiY2FyZCBwLTMgbWItNFwiXG4gICAgICBpZD1cInBlcnNvblV3TWVkaWNhbFF1ZXN0aW9uc1wiXG4gICAgPlxuICAgICAgPGg2IGNsYXNzPVwicGFnZS10aXRsZSBib2xkLWxhYmVsXCI+XG4gICAgICAgIHt7IGdldFRpdGxlQ2FzZShzZWN0aW9uW1wic2VjdGlvbk5hbWVcIl0pIH19XG4gICAgICA8L2g2PlxuICAgICAgPGxpYi1oci1saW5lIFtmaWVsZF09XCJob3Jpem9udGFsTGluZU9ialwiIC8+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbnMgb2Ygc2VjdGlvblsncXVlc3Rpb25zJ11cIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCdcIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwicXVlc3Rpb25zWydzYW1wbGVTM0xpbmsnXVwiIGNsYXNzPVwiZC1ibG9jayBteC1hdXRvXCIgW2FsdF09XCJxdWVzdGlvbnNbJ3RpdGxlJ11cIj5cbiAgICAgICAgICA8aDMgW2lubmVySFRNTF09XCJxdWVzdGlvbnNbJ3F1ZXN0aW9uVGV4dCddXCI+PC9oMz5cbiAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdGUkVFIFRFWFQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFibGUgZC1ibG9ja1wiXG4gICAgICAgICAgICA+e3sgcXVlc3Rpb25zW1wicXVlc3Rpb25UZXh0XCJdIH19XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5vcHRpb25hbFF1ZXN0aW9uID09PSAnTidcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogI2VlMDAwMFwiXG4gICAgICAgICAgICAgID4mIzQyOzwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvbGFiZWw+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBteS0xXCI+XG4gICAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChibHVyKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYXJkLXRvcGljIGQtYmxvY2sgZmllbGQtbGFibGVcIlxuICAgICAgICAgICAgPkhlaWdodFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogI2VlMDAwMFwiXG4gICAgICAgICAgICAgID4mIzQyOzwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2NsYXNzXT1cIiAnY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXQgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1wiXG4gICAgICAgICAgICBpZD1cIm1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wtMTIgbXktMVwiICpuZ0lmPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBweS0wIGhlaWdodElucHV0c1wiPlxuICAgICAgICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVwiICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tBbmRVcGRhdGVIZWlnaHRVbml0KClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgcGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xuICAgICAgICAgICAgICAgIF0gPT09ICdGRUVUJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11cIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tBbmRVcGRhdGVIZWlnaHRVbml0KClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicm93IG10LTAgcHQtMFwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdNQVAnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuXG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3Mtc2VhcmNoLWNvbnRhaW5lciBtYi0zXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5Mb25naXR1ZGU8L2xhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsb25naXR1ZGVcIlxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgY2FyZC10b3BpY1wiPkxhdGl0dWRlPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsYXRpdHVkZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsYXRpdHVkZVwiXG4gICAgICAgICAgc3RlcD1cImFueVwiXG4gICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjYWRkcmVzc0lucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBmb3IgYWRkcmVzc1wiXG4gICAgICAgIChrZXl1cCk9XCJvbkFkZHJlc3NJbnB1dEtleXVwKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwic2hvd0Ryb3Bkb3duID0gdHJ1ZVwiXG4gICAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKClcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgPlxuICAgICAgPGRpdlxuICAgICpuZ0lmPVwic2hvd0Ryb3Bkb3duICYmIGFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1kcm9wZG93biBwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBtdC0xXCJcbiAgICBzdHlsZT1cInotaW5kZXg6IDEwMDA7IG1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdy15OiBhdXRvOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgYm9yZGVyLXJhZGl1czogNHB4OyBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjEpO1wiXG4gID5cbiAgICA8ZGl2XG4gICAgICAqbmdGb3I9XCJsZXQgc3VnZ2VzdGlvbiBvZiBhZGRyZXNzU3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiXG4gICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XCJcbiAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0QWRkcmVzcyhzdWdnZXN0aW9uKVwiXG4gICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkSW5kZXggPSBpXCJcbiAgICAgIFtjbGFzcy5iZy1saWdodF09XCJob3ZlcmVkSW5kZXggPT09IGlcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+e3sgc3VnZ2VzdGlvbi5tYWluX3RleHQgfX08L2Rpdj5cbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj57eyBzdWdnZXN0aW9uLnNlY29uZGFyeV90ZXh0IH19PC9zbWFsbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYWRkcmVzc2VzPC9zbWFsbD5cbiAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxnb29nbGUtbWFwIFtjZW50ZXJdPVwiY2VudGVyXCIgW3pvb21dPVwiem9vbVwiPlxuICAgICAgICAgICAgICA8bWFwLW1hcmtlciBbcG9zaXRpb25dPVwiY3VycmVudENvb3JkaW5hdGVzXCI+PC9tYXAtbWFya2VyPlxuICAgICAgICAgICAgPC9nb29nbGUtbWFwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpICYmXG4gICAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxpYi1yYWRpbyBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGliLW11bHRpcGxlLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJ2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9ucylcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItY2hlY2tib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxpYi1kb2IgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIlwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RPQ1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxpYi11cGxvYWQgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChmaWxlUHJldmlldyk9XCJvbkRvY3VtZW50RmlsZVByZXZpZXcoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgPGxpYi1maWxlLXByZXZpZXdcbiAgICAgICAgICAgICpuZ0lmPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgICAgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXG4gICAgICAgICAgICBbZmlsZV09XCJwcmV2aWV3RmlsZVwiXG4gICAgICAgICAgICAoY2xvc2VkKT1cImNsb3NlRmlsZVByZXZpZXcoKVwiPlxuICAgICAgICAgIDwvbGliLWZpbGUtcHJldmlldz5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiJdfQ==
|
|
2581
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVwTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7OztBQXlCOUUsTUFBTSxPQUFPLHdCQUF3QjtJQWlJaEI7SUFBdUI7SUFoSWhDLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDekQsU0FBUyxHQUFTLEtBQUssRUFBTyxDQUFDLENBQUMsMkJBQTJCO0lBQ2xELGlCQUFpQixDQUFpQjtJQUMzQyxzQkFBc0IsR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUN0Qyx5QkFBeUIsR0FBUyxLQUFLLEVBQU8sQ0FBQztJQUMvQyxhQUFhLEdBQVMsS0FBSyxFQUFPLENBQUM7SUFDbkMsVUFBVSxHQUFRLEtBQUssRUFBTyxDQUFDO0lBQy9CLFVBQVUsR0FBUyxFQUFFLENBQUM7SUFDdEIsOEJBQThCLEdBQVMsSUFBSSxDQUFDO0lBQzVDLDJCQUEyQixHQUFTLEVBQUUsQ0FBQztJQUNaLFlBQVksQ0FBZ0M7SUFDL0QsWUFBWSxDQUFtQztJQUN2RCxxQkFBcUIsR0FBUSxFQUFFLENBQUM7SUFDaEMscUJBQXFCLEdBQVEsRUFBRSxDQUFDO0lBQ2hDLEtBQUssR0FBUSxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDbkMsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUN2QixrQkFBa0IsR0FBUSxFQUFFLENBQUM7SUFDN0IsbUJBQW1CLEdBQVEsRUFBRSxDQUFDO0lBQzlCLE1BQU0sR0FBOEIsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZFLFFBQVEsQ0FBTTtJQUNkLFNBQVMsQ0FBTTtJQUNmLElBQUksQ0FBTTtJQUNWLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFHakIsZUFBZSxHQUFRO1FBQ3JCLDBCQUEwQixFQUFFLE1BQU07UUFDbEMsd0JBQXdCLEVBQUUsQ0FBQztRQUMzQiwyQkFBMkIsRUFBRSxDQUFDO1FBQzlCLDJCQUEyQixFQUFFLENBQUM7S0FDL0IsQ0FBQztJQUNGLGNBQWMsR0FBUSxFQUFFLENBQUM7SUFDekIsNkJBQTZCLEdBQVEsRUFBRSxDQUFDO0lBQ3hDLHdCQUF3QixHQUFRLEVBQUUsQ0FBQztJQUNuQywwQkFBMEIsR0FBUSxFQUFFLENBQUM7SUFDckMsY0FBYyxHQUFRLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRSwrQkFBK0IsR0FBUTtRQUNyQztZQUNFLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNEO1lBQ0UsS0FBSyxFQUFFLE1BQU07WUFDYixLQUFLLEVBQUUsTUFBTTtTQUNkO0tBQ0YsQ0FBQztJQUNGLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsa0JBQWtCLEdBQVUsRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsQixhQUFhLENBQU07SUFDbkIsaUJBQWlCLEdBQVM7UUFDUixjQUFjLEVBQUU7WUFDWixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixjQUFjLEVBQUUsSUFBSTtZQUNwQixVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixPQUFPLEVBQUUsSUFBSTtZQUNiLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsT0FBTyxFQUFFLElBQUk7WUFDYixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixZQUFZLEVBQUUsSUFBSTtZQUNsQiw0QkFBNEIsRUFBRSxJQUFJO1lBQ2xDLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsK0JBQStCLEVBQUUsSUFBSTtZQUNyQywrQkFBK0IsRUFBRSxJQUFJO1lBQ3JDLGlDQUFpQyxFQUFFLElBQUk7WUFDdkMsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxhQUFhLEVBQUUsSUFBSTtZQUNuQixlQUFlLEVBQUUsa0NBQWtDO1lBQ25ELGFBQWEsRUFBRSxPQUFPO1lBQ3RCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFLElBQUk7WUFDakIsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7U0FDbkI7UUFDRCxXQUFXLEVBQUUsUUFBUTtRQUNyQixPQUFPLEVBQUUsWUFBWTtRQUNyQixhQUFhLEVBQUUsSUFBSTtRQUNuQixRQUFRLEVBQUUsa0NBQWtDO1FBQzVDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLFlBQVksRUFBRTtZQUNWLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLDRCQUE0QjtZQUMvQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsU0FBUyxFQUFFLElBQUk7WUFDZixnQkFBZ0IsRUFBRSxFQUFFO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixVQUFVLEVBQUUsUUFBUTtRQUNwQixPQUFPLEVBQUUsSUFBSTtRQUNiLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFO1lBQ1YsUUFBUSxFQUFFLEVBQUU7U0FDZjtRQUNELGFBQWEsRUFBRSxJQUFJO1FBQ25CLGFBQWEsRUFBRSxJQUFJO1FBQ25CLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsYUFBYSxFQUFFLFFBQVE7S0FDMUIsQ0FBQztJQUNoQixXQUFXLEdBQWdCLElBQUksQ0FBQztJQUNoQyxZQUFtQixNQUFjLEVBQVMsYUFBNkI7UUFBcEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDMUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUNFLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xILENBQUMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQzVILENBQUM7WUFDRCxJQUFJLGFBQWEsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUc7d0JBQ3hCLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDbEIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUNwQixDQUFDO29CQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRyxJQUFHLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXpELGdEQUFnRDtRQUNoRCxpRUFBaUU7UUFDakUscURBQXFEO1FBQ3JELGlEQUFpRDtRQUNqRCxzQkFBc0I7UUFDdEIsdUZBQXVGO1FBQ3ZGLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsb0ZBQW9GO1FBQ3BGLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsdUZBQXVGO1FBQ3ZGLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsVUFBVTtRQUNWLE1BQU07UUFDTixNQUFNO0lBQ1IsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUNyRCxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFDaEM7WUFDRSxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDbEIscUJBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3hDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDO1NBQzlELENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7WUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25CLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO1NBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUV0QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRTtZQUM3QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBcUM7UUFDaEUsTUFBTSxXQUFXLEdBQUc7WUFDbEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3ZCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQ3pDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFlO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3pELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUc7d0JBQ1osR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7d0JBQ25CLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO3FCQUNwQixDQUFDO29CQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FDVCx1REFBdUQsR0FBRyxNQUFNLENBQ2pFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVTtRQUM1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVqQyx5QkFBeUI7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDbkMsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELE9BQU87UUFDVCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQ0UsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDO2dCQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUMxQyxDQUFDO2dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhO1FBQzNCLHdEQUF3RDtRQUN4RCx3Q0FBd0M7UUFFeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdELE9BQU8sQ0FBQyxtQkFBbUIsQ0FDekI7WUFDRSxLQUFLLEVBQUUsS0FBSztZQUNaLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztTQUNuQixFQUNELENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3RCLElBQ0UsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7Z0JBQ3BELFdBQVcsRUFDWCxDQUFDO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUN6RCxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7b0JBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMscUJBQXFCLENBQUMsU0FBUztvQkFDckQsY0FBYyxFQUFFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjO29CQUMvRCxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7aUJBQ3BDLENBQUMsQ0FBQyxDQUFDO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQWU7UUFDM0IsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDekMsZUFBZSxDQUNJLENBQUM7UUFDdEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixZQUFZLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDOUMsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUNsRCxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUM5QixDQUFDO1FBQ0YsT0FBTyxDQUFDLFVBQVUsQ0FDaEI7WUFDRSxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDNUIsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDO1NBQzFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNsRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBRTVDLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO29CQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztvQkFFcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxVQUFnQjtRQUM5QyxJQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLFdBQVcsSUFBSSxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBTSxlQUFlLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsOEJBQThCLEdBQUcsVUFBVSxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUksVUFBVSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBb0IsRUFBRSxFQUFFO2dCQUM1RSxJQUFJLENBQUMsK0JBQStCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3pULElBQUksV0FBVyxHQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDL0csV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWUsRUFBRSxlQUF3QixFQUFFLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3hILElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBcUIsRUFBRSxxQkFBOEIsRUFBRSxFQUFFO3dCQUN6SixJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQzVDLElBQUcsZUFBZSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxxQkFBcUIsS0FBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ25MLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO3dCQUNqQyxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUVMLENBQUM7SUFDSCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxFQUFFLENBQUM7UUFFeEMsSUFBSSxTQUFTLEdBQVMsS0FBSyxDQUFDO1FBQzVCLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQUcsQ0FBQztZQUNuRixJQUFJLDZCQUE2QixHQUFVLGNBQWMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMvRixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2RSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxlQUFlLEdBQVEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7Z0JBQzNELGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztZQUVILElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUMvQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUNwRCxDQUFDO2dCQUVELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN6RCxJQUFJLGFBQWEsR0FBUSxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGtCQUF1QixFQUFFLEVBQUU7d0JBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNsRSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3hDLENBQUMsY0FBbUIsRUFBRSxFQUFFO2dDQUN0QixJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO29DQUNsRCxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUM3QyxjQUFjLENBQ2YsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dDQUMxQixDQUFDO2dDQUNELGNBQWMsQ0FBQyxjQUFjLENBQUM7b0NBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQ0FFckQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0NBRXhELElBQUksY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7b0NBQ3JELGNBQWMsQ0FBQyxhQUFhLENBQUM7d0NBQzNCLG9IQUFvSCxDQUFDO2dDQUN6SCxDQUFDO2dDQUNELG9FQUFvRTtnQ0FDcEUsNE1BQTRNO2dDQUM1TSxJQUFJO2dDQUNKLElBQ0UsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7b0NBQzdDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FDbkMsRUFDRCxDQUFDO29DQUNELGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FDeEMsQ0FBQyx5QkFBOEIsRUFBRSxFQUFFO3dDQUNqQyxJQUFJLGtCQUFrQixHQUFRLGtCQUFrQixDQUM5QyxjQUFjLENBQ2YsQ0FBQyxNQUFNLENBQ04sQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUNkLE1BQU0sQ0FBQyxZQUFZLENBQUM7NENBQ3BCLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQzlDLENBQUM7d0NBQ0YsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7NENBQ2xDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnREFDcEMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQzt3Q0FDckQsQ0FBQztvQ0FDSCxDQUFDLENBQ0YsQ0FBQztnQ0FDSixDQUFDO2dDQUVELElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO29DQUNsRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3Q0FDdkQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQsRUFDRCxDQUFDO3dDQUNELElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDbEIsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUM3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7NENBQ25DLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLEVBQ0QsQ0FBQztnREFDRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUNyQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUFDOzRDQUNKLENBQUM7d0NBQ0gsQ0FBQyxDQUFDLENBQUM7b0NBQ0wsQ0FBQztnQ0FDSCxDQUFDO2dDQUVELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7b0NBQ3BELGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0NBQzdDLENBQUM7Z0NBRUQsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUNqRCxDQUFDLENBQ0YsQ0FBQzs0QkFFRixrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQ0FDM0QsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDO2dDQUN2QyxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxZQUFZLEVBQUUsQ0FBQztvQ0FDOUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FDakMsY0FBYyxDQUNmLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztnQ0FDOUIsQ0FBQztnQ0FFRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO29DQUNoRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29DQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQ0FDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7b0NBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUc7d0NBQ3JELFdBQVcsRUFBRSxRQUFRO3dDQUNyQixXQUFXLEVBQUUsU0FBUzt3Q0FDdEIsV0FBVyxFQUFFLE9BQU87d0NBQ3BCLFlBQVksRUFBRSxJQUFJO3dDQUNsQixRQUFRLEVBQUUsTUFBTTt3Q0FDaEIsVUFBVSxFQUFFLEtBQUs7d0NBQ2pCLFVBQVUsRUFBRSxRQUFRO3dDQUNwQixLQUFLLEVBQUUsU0FBUzt3Q0FDaEIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixpQkFBaUIsRUFBRSxJQUFJO3dDQUN2QixxQkFBcUIsRUFBRSxTQUFTO3dDQUNoQyxtQkFBbUIsRUFBRSxTQUFTO3dDQUM5Qix3QkFBd0IsRUFBRSxLQUFLO3dDQUMvQixLQUFLLEVBQUUsSUFBSTt3Q0FDWCxnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixlQUFlLEVBQUUsSUFBSTt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLDBCQUEwQixFQUFFLElBQUk7d0NBQ2hDLHdCQUF3QixFQUFFLElBQUk7d0NBQzlCLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLCtCQUErQixFQUFFLElBQUk7d0NBQ3JDLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixZQUFZLEVBQUUsU0FBUzt3Q0FDdkIsaUJBQWlCLEVBQUUsU0FBUzt3Q0FDNUIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixPQUFPLEVBQUUsSUFBSTt3Q0FDYixNQUFNLEVBQUUsSUFBSTt3Q0FDWixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsYUFBYSxFQUNYLDZDQUE2Qzt3Q0FDL0MsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUM7Z0NBQ0osQ0FBQztnQ0FDRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO29DQUNoRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29DQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQ0FDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7b0NBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUc7d0NBQ3JELFdBQVcsRUFBRSxRQUFRO3dDQUNyQixXQUFXLEVBQUUsU0FBUzt3Q0FDdEIsV0FBVyxFQUFFLE9BQU87d0NBQ3BCLFlBQVksRUFBRSxJQUFJO3dDQUNsQixRQUFRLEVBQUUsTUFBTTt3Q0FDaEIsVUFBVSxFQUFFLEtBQUs7d0NBQ2pCLFVBQVUsRUFBRSxRQUFRO3dDQUNwQixLQUFLLEVBQUUsU0FBUzt3Q0FDaEIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixpQkFBaUIsRUFBRSxJQUFJO3dDQUN2QixxQkFBcUIsRUFBRSxTQUFTO3dDQUNoQyxtQkFBbUIsRUFBRSxTQUFTO3dDQUM5Qix3QkFBd0IsRUFBRSxLQUFLO3dDQUMvQixLQUFLLEVBQUUsSUFBSTt3Q0FDWCxnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixlQUFlLEVBQUUsSUFBSTt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLDBCQUEwQixFQUFFLElBQUk7d0NBQ2hDLHdCQUF3QixFQUFFLElBQUk7d0NBQzlCLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLCtCQUErQixFQUFFLElBQUk7d0NBQ3JDLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixZQUFZLEVBQUUsU0FBUzt3Q0FDdkIsaUJBQWlCLEVBQUUsU0FBUzt3Q0FDNUIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixPQUFPLEVBQUUsSUFBSTt3Q0FDYixNQUFNLEVBQUUsSUFBSTt3Q0FDWixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsYUFBYSxFQUNYLDZDQUE2Qzt3Q0FDL0MsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUM7Z0NBQ0osQ0FBQztnQ0FDRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO29DQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29DQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQ0FDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7b0NBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUc7d0NBQ3BELFdBQVcsRUFBRSxVQUFVO3dDQUN2QixXQUFXLEVBQUUsU0FBUzt3Q0FDdEIsV0FBVyxFQUFFLE9BQU87d0NBQ3BCLFlBQVksRUFBRSxJQUFJO3dDQUNsQixRQUFRLEVBQUUsTUFBTTt3Q0FDaEIsVUFBVSxFQUFFLEtBQUs7d0NBQ2pCLFVBQVUsRUFBRSxRQUFRO3dDQUNwQixLQUFLLEVBQUUsU0FBUzt3Q0FDaEIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixpQkFBaUIsRUFBRSxJQUFJO3dDQUN2QixxQkFBcUIsRUFBRSxTQUFTO3dDQUNoQyxtQkFBbUIsRUFBRSxTQUFTO3dDQUM5Qix3QkFBd0IsRUFBRSxLQUFLO3dDQUMvQixLQUFLLEVBQUUsSUFBSTt3Q0FDWCxnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixlQUFlLEVBQUUsSUFBSTt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLDBCQUEwQixFQUFFLElBQUk7d0NBQ2hDLHdCQUF3QixFQUFFLElBQUk7d0NBQzlCLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLCtCQUErQixFQUFFLElBQUk7d0NBQ3JDLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixZQUFZLEVBQUUsU0FBUzt3Q0FDdkIsaUJBQWlCLEVBQUUsU0FBUzt3Q0FDNUIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixPQUFPLEVBQUUsSUFBSTt3Q0FDYixNQUFNLEVBQUUsSUFBSTt3Q0FDWixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsYUFBYSxFQUNYLDZDQUE2Qzt3Q0FDL0MsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUM7Z0NBQ0osQ0FBQztnQ0FFRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxhQUFhLEVBQUUsQ0FBQztvQ0FDL0MsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxhQUFhLEVBQUUsQ0FBQzt3Q0FDdkQsOERBQThEO3dDQUM5RCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dDQUM5QixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDOzRDQUM1QixtQkFBbUIsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDOzRDQUMzQyxhQUFhLEVBQUUsR0FBRzt5Q0FDbkIsQ0FBQyxDQUFDO29DQUNMLENBQUM7b0NBQ0QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQ0FDOUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDNUIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQzt3Q0FDM0MsYUFBYSxFQUFFLEdBQUc7cUNBQ25CLENBQUMsQ0FBQztnQ0FDTCxDQUFDO2dDQUVELElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssY0FBYyxFQUFFLENBQUM7b0NBQ3hELFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUM7Z0NBQ3pDLENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7NEJBRUgsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNyQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQ2pFLENBQUM7d0JBQ0osQ0FBQzt3QkFFRCxJQUFJLGtCQUFrQixHQUFRLEVBQUUsQ0FBQzt3QkFDakMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFOzRCQUNuQyxJQUFJLFdBQVcsR0FBUSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQzlELENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FDMUQsQ0FBQzs0QkFDRixJQUFJLEdBQUcsR0FBUTtnQ0FDYixJQUFJLEVBQUUsS0FBSztnQ0FDWCxVQUFVLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFO2dDQUN2RCxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO29DQUMvQyxDQUFDLENBQUMsV0FBVztvQ0FDYixDQUFDLENBQUMsRUFBRTtnQ0FDTixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO29DQUNqRCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQ0FDekIsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sb0JBQW9CLEVBQUUsS0FBSztnQ0FDM0IsV0FBVyxFQUFFLElBQUk7NkJBQ2xCLENBQUM7NEJBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dDQUMzQyw2QkFBNkI7Z0NBQzdCLElBQUksd0JBQXdCLEdBQVEsV0FBVyxDQUFDLE1BQU0sQ0FDcEQsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssYUFBYSxDQUMzRCxDQUFDO2dDQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO29DQUN4RCxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO3dDQUNwQixZQUFZLEVBQUUsS0FBSzt3Q0FDbkIsa0JBQWtCLEVBQUUsSUFBSTt3Q0FDeEIsc0JBQXNCLEVBQUU7NENBQ3RCLGdCQUFnQixFQUNkLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0Q0FDM0Msb0JBQW9CLEVBQUUsR0FBRzt5Q0FDMUI7cUNBQ0YsQ0FBQyxDQUFDO2dDQUNMLENBQUM7Z0NBRUQsMENBQTBDO2dDQUMxQyxJQUFJLDJCQUEyQixHQUFRLFdBQVcsQ0FBQyxNQUFNLENBQ3ZELENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGFBQWEsQ0FDM0QsQ0FBQztnQ0FDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQztvQ0FDM0Qsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDO3dDQUN0QyxZQUFZLEVBQUUsaUJBQWlCO3dDQUMvQixnQkFBZ0IsRUFBRSxHQUFHO3dDQUNyQixZQUFZLEVBQUUsbUJBQW1CO3dDQUNqQyxrQkFBa0IsRUFBRSxJQUFJO3dDQUN4QixzQkFBc0IsRUFBRTs0Q0FDdEIsZ0JBQWdCLEVBQ2QsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRDQUM5QyxvQkFBb0IsRUFBRSxlQUFlO3lDQUN0QztxQ0FDRixDQUFDLENBQUM7b0NBQ0gsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDcEIsWUFBWSxFQUFFLGlCQUFpQjt3Q0FDL0IsZ0JBQWdCLEVBQUUsR0FBRzt3Q0FDckIsWUFBWSxFQUFFLG1CQUFtQjt3Q0FDakMsa0JBQWtCLEVBQUUsSUFBSTt3Q0FDeEIsc0JBQXNCLEVBQUU7NENBQ3RCLGdCQUFnQixFQUNkLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0Q0FDOUMsb0JBQW9CLEVBQUUsZUFBZTt5Q0FDdEM7cUNBQ0YsQ0FBQyxDQUFDO2dDQUNMLENBQUM7NEJBQ0gsQ0FBQzs0QkFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQy9CLENBQUMsQ0FBQyxDQUFDO3dCQUNILCtJQUErSTt3QkFDL0ksZ0VBQWdFO3dCQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDO3dCQUN2QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSTtvQkFDTixDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3ZELENBQUM7WUFDSCxDQUFDO1lBRUMsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEVBQUcsQ0FBQztnQkFDMVQsSUFBSSxtQkFBbUIsR0FBUSxLQUFLLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7Z0JBQzNDLElBQUksV0FBVyxHQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQy9HLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFlLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEgsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFxQixFQUFFLEVBQUU7NEJBQ3pILElBQUksQ0FBQywrQkFBK0IsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDeEQsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxhQUFhO3lCQUNmLGVBQWUsQ0FDZCxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUN4QixJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLEVBQzdDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxZQUFZLENBQUMsQ0FDbEQ7eUJBQ0EsU0FBUyxDQUNSLENBQUMsbUJBQXdCLEVBQUUsRUFBRTt3QkFDM0IsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO3dCQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQzs0QkFDbkQsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFO2dDQUMvQyxXQUFXLENBQUMsY0FBYyxDQUFDO29DQUN6QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FDM0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUMxQixDQUFDO2dDQUVKLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dDQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO29DQUN0RCxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dDQUMvQyxDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDOzRCQUVILG1CQUFtQixDQUFDLElBQUksQ0FDdEIsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0NBQ3JCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQ3hDLENBQUM7NEJBQ0YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsRUFBRTtnQ0FDN0MsSUFBSSxXQUFXLEdBQVEsbUJBQW1CLENBQUMsTUFBTSxDQUMvQyxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUN4QyxDQUFDO2dDQUNGLElBQUksR0FBRyxHQUFRO29DQUNiLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRztvQ0FDaEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQzt3Q0FDL0MsQ0FBQyxDQUFDLFdBQVc7d0NBQ2IsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQzt3Q0FDakQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7d0NBQ3pCLENBQUMsQ0FBQyxFQUFFO29DQUNOLG9CQUFvQixFQUFFLElBQUk7b0NBQzFCLFdBQVcsRUFBRSxJQUFJO29DQUNqQixVQUFVLEVBQ1IsSUFBSSxDQUFDLDhCQUE4QixDQUNqQyxZQUFZLENBQ2IsQ0FBQyxRQUFRLEVBQUU7aUNBQ2YsQ0FBQztnQ0FDRix1REFBdUQ7Z0NBQ3ZELDZEQUE2RDtnQ0FDN0QsS0FBSztnQ0FDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDOUIsQ0FBQyxDQUFDLENBQUM7NEJBQ0gsSUFBSSxDQUFDLDJCQUEyQixHQUFHLG1CQUFtQixDQUFDOzRCQUN2RCwwSkFBMEo7NEJBQzFKLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25ELGNBQWMsQ0FDZixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZELGNBQWMsQ0FDZixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQzs0QkFFM0MsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7d0JBQ2hDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzt3QkFDaEMsQ0FBQztvQkFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDWCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztvQkFDaEMsQ0FBQyxDQUNGLENBQUM7Z0JBQ04sQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO2dCQUNELG9FQUFvRTtnQkFDcEUsaUlBQWlJO2dCQUNqSSw2RkFBNkY7Z0JBQzdGLG9DQUFvQztnQkFDcEMsNkNBQTZDO2dCQUM3Qyw4R0FBOEc7Z0JBQzlHLDRHQUE0RztnQkFFNUcsNkVBQTZFO2dCQUc3RSwyTUFBMk07Z0JBQzNNLHVIQUF1SDtnQkFDdkgsb0VBQW9FO2dCQUNwRSxrRkFBa0Y7Z0JBQ2xGLDRFQUE0RTtnQkFDNUUsMkxBQTJMO2dCQUMzTCwrS0FBK0s7Z0JBQy9LLCtFQUErRTtnQkFDL0UsMkVBQTJFO2dCQUMzRSwrRUFBK0U7Z0JBQy9FLG9GQUFvRjtnQkFDcEYsNkJBQTZCO2dCQUM3Qix5QkFBeUI7Z0JBQ3pCLHVCQUF1QjtnQkFDdkIsdUJBQXVCO2dCQUN2QiwwRkFBMEY7Z0JBQzFGLHVCQUF1QjtnQkFDdkIsOEVBQThFO2dCQUM5RSxnQkFBZ0I7Z0JBRUoscURBQXFEO2dCQUNyRCwrRUFBK0U7Z0JBQy9FLElBQUk7Z0JBQ0osc0RBQXNEO2dCQUN0RCxxREFBcUQ7Z0JBQ3JELCtGQUErRjtnQkFDL0Ysd0VBQXdFO2dCQUN4RSwyRUFBMkU7Z0JBQzNFLGFBQWE7Z0JBQ2Isd0VBQXdFO2dCQUN4RSxpRUFBaUU7Z0JBQ2pFLE1BQU07Z0JBQ04sSUFBSTtnQkFDaEIsa0lBQWtJO2dCQUNsSSx1SkFBdUo7Z0JBQ3ZKLG9GQUFvRjtnQkFDcEYscUJBQXFCO2dCQUNyQixxQkFBcUI7Z0JBQ3JCLDhLQUE4SztnQkFFOUssNkhBQTZIO2dCQUM3SCxrRkFBa0Y7Z0JBQ2xGLG1CQUFtQjtnQkFFbkIsZ0lBQWdJO2dCQUNoSSw0Q0FBNEM7Z0JBRzVDLHFCQUFxQjtnQkFDckIsNkRBQTZEO2dCQUM3RCx1SEFBdUg7Z0JBQ3ZILDREQUE0RDtnQkFDNUQsb0RBQW9EO2dCQUNwRCwwQ0FBMEM7Z0JBQzFDLHFCQUFxQjtnQkFDckIsc0lBQXNJO2dCQUN0SSxrREFBa0Q7Z0JBQ2xELDBEQUEwRDtnQkFDMUQsaURBQWlEO2dCQUNqRCwwRUFBMEU7Z0JBQzFFLDBFQUEwRTtnQkFDMUUsb0VBQW9FO2dCQUNwRSxtRUFBbUU7Z0JBQ25FLDZCQUE2QjtnQkFDN0Isd0ZBQXdGO2dCQUN4RiwwRUFBMEU7Z0JBQzFFLDRCQUE0QjtnQkFDNUIsK0ZBQStGO2dCQUMvRiwwQkFBMEI7Z0JBQzFCLDZCQUE2QjtnQkFDN0Isd0VBQXdFO2dCQUN4RSxxRkFBcUY7Z0JBQ3JGLDRCQUE0QjtnQkFDNUIsd0dBQXdHO2dCQUN4RyxzRkFBc0Y7Z0JBQ3RGLG9IQUFvSDtnQkFDcEgsK0JBQStCO2dCQUMvQixpRUFBaUU7Z0JBQ2pFLHlIQUF5SDtnQkFDekgsOEJBQThCO2dCQUM5Qiw4QkFBOEI7Z0JBQzlCLDBCQUEwQjtnQkFDMUIscUdBQXFHO2dCQUNyRyxvREFBb0Q7Z0JBQ3BELDJCQUEyQjtnQkFFM0IsMkVBQTJFO2dCQUUzRSx5RkFBeUY7Z0JBQ3pGLHVGQUF1RjtnQkFDdkYsd0hBQXdIO2dCQUN4SCxpQ0FBaUM7Z0JBQ2pDLDZCQUE2QjtnQkFDN0IsaUZBQWlGO2dCQUNqRix3RUFBd0U7Z0JBQ3hFLDBCQUEwQjtnQkFDMUIsMEJBQTBCO2dCQUMxQixvSUFBb0k7Z0JBQ3BJLHdFQUF3RTtnQkFDeEUsMklBQTJJO2dCQUMzSSx5Q0FBeUM7Z0JBQ3pDLDRDQUE0QztnQkFDNUMsZ0dBQWdHO2dCQUNoRyw4R0FBOEc7Z0JBQzlHLHNEQUFzRDtnQkFDdEQsNkNBQTZDO2dCQUM3QywwRUFBMEU7Z0JBQzFFLDJCQUEyQjtnQkFDM0IsZ0ZBQWdGO2dCQUNoRixzRkFBc0Y7Z0JBQ3RGLDhCQUE4QjtnQkFDOUIscURBQXFEO2dCQUNyRCx5QkFBeUI7Z0JBQ3pCLDhFQUE4RTtnQkFDOUUsaUxBQWlMO2dCQUNqTCw4TUFBOE07Z0JBQzlNLHNCQUFzQjtnQkFDdEIsb0RBQW9EO2dCQUNwRCwrREFBK0Q7Z0JBQy9ELHFCQUFxQjtnQkFDckIsa0NBQWtDO2dCQUNsQyw4REFBOEQ7Z0JBQzlELDBEQUEwRDtnQkFDMUQsb0JBQW9CO2dCQUNwQixtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsd0JBQXdCO2dCQUN4QixzREFBc0Q7Z0JBQ3RELG1CQUFtQjtnQkFFbkIsa0hBQWtIO2dCQUNsSCx5REFBeUQ7Z0JBQ3pELDRFQUE0RTtnQkFDNUUsNERBQTREO2dCQUM1RCx5QkFBeUI7Z0JBQ3pCLHFCQUFxQjtnQkFDckIsa0VBQWtFO2dCQUNsRSxnQkFBZ0I7Z0JBQ2hCLHVEQUF1RDtnQkFDdkQsZ0JBQWdCO2dCQUNoQixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osUUFBUTtnQkFDUixNQUFNO2dCQUNOLE1BQU07WUFDUixDQUFDO1FBR0wsQ0FBQztRQUVELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRztZQUN6QyxZQUFZLEVBQUU7Z0JBQ1osV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixXQUFXLEVBQUUsT0FBTztnQkFDcEIsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixVQUFVLEVBQUUsS0FBSztnQkFDakIsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixVQUFVLEVBQUUsU0FBUztnQkFDckIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLHFCQUFxQixFQUFFLFNBQVM7Z0JBQ2hDLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLHdCQUF3QixFQUFFLEtBQUs7Z0JBQy9CLEtBQUssRUFBRSxJQUFJO2dCQUNYLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGVBQWUsRUFBRSxJQUFJO2dCQUNyQixVQUFVLEVBQUUsU0FBUztnQkFDckIsMEJBQTBCLEVBQUUsSUFBSTtnQkFDaEMsd0JBQXdCLEVBQUUsSUFBSTtnQkFDOUIsNkJBQTZCLEVBQUUsSUFBSTtnQkFDbkMsNkJBQTZCLEVBQUUsSUFBSTtnQkFDbkMsK0JBQStCLEVBQUUsSUFBSTtnQkFDckMsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixpQkFBaUIsRUFBRSxTQUFTO2dCQUM1QixnQkFBZ0IsRUFBRSxTQUFTO2dCQUMzQixnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixVQUFVLEVBQUUsU0FBUztnQkFDckIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixhQUFhLEVBQUUsNkNBQTZDO2dCQUM1RCxXQUFXLEVBQUUsSUFBSTtnQkFDakIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNELFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLGVBQWU7WUFDdEIsV0FBVyxFQUFFLEVBQUU7WUFDZixNQUFNLEVBQUUsRUFBRTtZQUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixlQUFlLEVBQUUsNEJBQTRCO2dCQUM3QyxTQUFTLEVBQUUsSUFBSTtnQkFDZixnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixTQUFTLEVBQUUsR0FBRztnQkFDZCxnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixPQUFPLEVBQUUsSUFBSTtnQkFDYixjQUFjLEVBQUUsRUFBRTthQUNuQjtZQUNELE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxLQUFLLEVBQUUsSUFBSTtvQkFDWCxLQUFLLEVBQUUsSUFBSTtpQkFDWjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsTUFBTTtvQkFDYixLQUFLLEVBQUUsTUFBTTtpQkFDZDthQUNGO1lBQ0QsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxJQUFJO1lBQ1gsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsRUFBRTtZQUNkLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxRQUFRO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBYztRQUVsQyxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDakQsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEYsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksZ0JBQWdCLEdBQVEsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDNUwsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRyxJQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUUzRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNoRSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQztZQUN4RSxTQUFTLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFO2dCQUNwRSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQVU7UUFDNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLENBQ0wsS0FBSyxLQUFLLFNBQVM7WUFDbkIsS0FBSyxLQUFLLElBQUk7WUFDZCxLQUFLLEtBQUssRUFBRTtZQUNaLENBQUMsS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVztRQUN0QixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9ELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLEVBQUUsQ0FBQztvQkFDN0MsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEtBQUs7aUJBQ1QsUUFBUSxFQUFFO2lCQUNWLE9BQU8sQ0FDTixRQUFRLEVBQ1IsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUNqRSxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsV0FBZ0I7UUFDdkIsSUFBSSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksWUFBWSxHQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO2dCQUM3RCxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNkLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7b0JBQ3pDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDaEQsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQVMsS0FBSyxDQUFDO1FBQzVCLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQUcsQ0FBQztZQUNuRixJQUFJLDZCQUE2QixHQUFVLGNBQWMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMvRixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDO1FBQzFCLElBQUksU0FBUyxHQUFRLEdBQUcsQ0FBQztRQUN6QixJQUFJLE9BQU8sR0FBUSxJQUFJLENBQUM7UUFDeEIsSUFBSSxjQUFjLEdBQVEsSUFBSSxDQUFDO1FBQ2hDLElBQUksVUFBVSxHQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLENBQUM7WUFDMUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVO1lBQzFCLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFSCxJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEQsVUFBVSxHQUFHLEVBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsSUFBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQU0sY0FBYyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRyxZQUFZLEdBQUc7Z0JBQ0gsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLGFBQWEsRUFBRSxTQUFTO2dCQUN4QixhQUFhLEVBQUUsS0FBSztnQkFDcEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLFVBQVUsRUFBRSxNQUFNO2dCQUNsQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixZQUFZLEVBQUUsU0FBUztnQkFDdkIsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCLHVCQUF1QixFQUFFLElBQUk7Z0JBQzdCLHFCQUFxQixFQUFFLElBQUk7Z0JBQzNCLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLE9BQU8sRUFBRSxJQUFJO2dCQUNiLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLGtCQUFrQixFQUFFLFNBQVM7Z0JBQzdCLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLFlBQVksRUFBRSxTQUFTO2dCQUN2Qiw0QkFBNEIsRUFBRSxJQUFJO2dCQUNsQywwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQywrQkFBK0IsRUFBRSxJQUFJO2dCQUNyQywrQkFBK0IsRUFBRSxJQUFJO2dCQUNyQyxpQ0FBaUMsRUFBRSxJQUFJO2dCQUN2QyxrQkFBa0IsRUFBRSxTQUFTO2dCQUM3QixrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixZQUFZLEVBQUUsU0FBUztnQkFDdkIsY0FBYyxFQUFFLFNBQVM7Z0JBQ3pCLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLGtCQUFrQixFQUFFLFNBQVM7Z0JBQzdCLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLGVBQWUsRUFBRSx5Q0FBeUM7Z0JBQzFELGFBQWEsRUFBRSxJQUFJO2dCQUNuQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxXQUFXLEVBQUUsSUFBSTtnQkFDakIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxhQUFhLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsU0FBUyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDeEMsT0FBTyxHQUFHLFVBQVUsQ0FBQztvQkFDckIsY0FBYyxHQUFHLDJCQUEyQixDQUFDO29CQUM3QyxVQUFVLENBQUMsNEJBQTRCLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2hELFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUMxQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUNuQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO3FCQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUNwRCxPQUFPLEdBQUcsbUJBQW1CLENBQUM7b0JBQzlCLGNBQWMsR0FBRyx1Q0FBdUMsQ0FBQztvQkFDekQsVUFBVSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNuRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDZixjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLFVBQVU7WUFDdEIsWUFBWSxFQUFFLFlBQVk7WUFDMUIsV0FBVyxFQUNULFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxXQUFXO2dCQUN6QyxDQUFDLENBQUMsTUFBTTtnQkFDUixDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLGNBQWM7b0JBQzlDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxTQUFTO29CQUMzQyxDQUFDLENBQUMsT0FBTztvQkFDVCxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0JBQzFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxhQUFhO3dCQUMvQyxDQUFDLENBQUMsVUFBVTt3QkFDWixDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7NEJBQzVDLENBQUMsQ0FBQyxNQUFNOzRCQUNSLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTtnQ0FDNUMsQ0FBQyxDQUFDLFFBQVE7Z0NBQ1YsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxXQUFXO29DQUM3QyxDQUFDLENBQUMsTUFBTTtvQ0FDUixDQUFDLENBQUMsRUFBRTtZQUNSLFNBQVMsRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDO1lBQ3BDLFNBQVM7WUFDVCxLQUFLLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUNsQyxXQUFXLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUN4QyxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNsRSxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsT0FBTztnQkFDUCxjQUFjO2FBQ2Y7WUFDRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBYztRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzFELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7d0JBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7NEJBQ3ZDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDN0MsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQsRUFDRCxDQUFDO2dDQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDNUQsQ0FBQzs0QkFDRCxJQUFJO3dCQUNOLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixjQUFjLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUM7d0JBQzlDLENBQUM7d0JBRUQsaURBQWlEO3dCQUNqRCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7d0JBQzVELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNsSSxJQUFJLGVBQWUsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs0QkFDL0MsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dDQUN4QixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0NBQzFCLFNBQVMsRUFBRSxJQUFJOzZCQUNoQixDQUFDO3dCQUNKLENBQUM7d0JBRUQsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7NEJBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDOUQsSUFBSSxvQkFBb0IsR0FBUSxjQUFjLENBQzVDLGNBQWMsQ0FDZixDQUFDLE1BQU0sQ0FDTixDQUFDLFNBQWMsRUFBRSxFQUFFLENBQ2pCLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQ3RELENBQUM7Z0NBQ0YsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FDcEMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO29DQUN6QixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDO3dDQUMvQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FDL0MsQ0FDRjt3Q0FDRCxJQUFJLENBQUMsZUFBZSxDQUNsQixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUMvQyxFQUNELENBQUM7d0NBQ0QsbUJBQW1CO3dDQUNuQixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUNwQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7NENBQ3pCLHlDQUF5Qzs0Q0FDekMsSUFDRSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO2dEQUM3QyxNQUFNLEVBQ04sQ0FBQztnREFDRCxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dEQUNwQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLENBQUM7NENBQ0osQ0FBQzt3Q0FDSCxDQUFDLENBQ0YsQ0FBQztvQ0FDSixDQUFDO3lDQUFNLENBQUM7d0NBQ04saUJBQWlCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQ0FDdkMsQ0FBQztnQ0FDSCxDQUFDLENBQ0YsQ0FBQzs0QkFDSixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCwwTEFBMEw7Z0JBQzFMLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FDOUQsQ0FDRixDQUFDO2dCQUNGLGlFQUFpRTtnQkFDakUsZ0dBQWdHO2dCQUNoRyw0Q0FBNEM7Z0JBQzVDLHVLQUF1SztnQkFDdkssZ0ZBQWdGO2dCQUNoRiw2TkFBNk47Z0JBQzdOLDJEQUEyRDtnQkFDM0Qsb0ZBQW9GO2dCQUNwRixVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTiwwUEFBMFA7Z0JBQzFQLDRDQUE0QztnQkFDNUMsdUtBQXVLO2dCQUN2SyxnRkFBZ0Y7Z0JBQ2hGLDZOQUE2TjtnQkFDN04sMkRBQTJEO2dCQUMzRCxvRkFBb0Y7Z0JBQ3BGLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVixNQUFNO2dCQUNOLElBQUk7Z0JBQ0osSUFBSSxlQUFlLEdBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ2pELENBQUMsZ0JBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQzVELENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFDOUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTt3QkFDN0MsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDaEMsQ0FBQywwQkFBK0IsRUFBRSxFQUFFOzRCQUNsQywwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDekQsMk1BQTJNOzRCQUMzTSxxREFBcUQ7NEJBQ3JELHVEQUF1RDs0QkFDdkQsSUFBSTt3QkFDTixDQUFDLENBQ0YsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFlBQVksQ0FBQyxlQUFvQjtRQUMvQixJQUFJLFlBQVksR0FBUSxLQUFLLENBQUM7UUFDOUIsSUFBSSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBQzNCLG9KQUFvSjtRQUNwSix3RkFBd0Y7UUFFeEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7WUFDdkUsSUFBSSxtQkFBbUIsR0FBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FDN0QsQ0FBQyxtQkFBd0IsRUFBRSxFQUFFLENBQzNCLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDO29CQUNyQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQ2hDLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7b0JBQ3JELElBQ0UsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3QkFDNUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO3dCQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDaEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7NEJBQzdELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDs0QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDaEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7cUNBQ3JDLFFBQVEsRUFBRTtxQ0FDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7NEJBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDs0QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO3dCQUN0Ryw4REFBOEQ7d0JBQzlELHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQiwrQ0FBK0M7d0JBQy9DLGVBQWU7eUJBQ2hCLEVBQ0QsQ0FBQzt3QkFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN0QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFDRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUNuRSxDQUFDO1lBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNwRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQ7WUFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQsQ0FDRjtZQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlELEtBQUssZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFDdkUsQ0FBQztZQUNELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BELFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztZQUNsRSwrRUFBK0U7WUFDL0Usa0ZBQWtGO1lBQ2xGLHFGQUFxRjtZQUNyRixxRkFBcUY7WUFDckYscURBQXFEO1lBQ3JELGdOQUFnTjtZQUNoTiw2REFBNkQ7WUFDN0QsTUFBTTtZQUNOLE1BQU07WUFDTixrREFBa0Q7WUFDbEQscUxBQXFMO1lBQ3JMLDhEQUE4RDtZQUM5RCxNQUFNO1lBQ04sTUFBTTtZQUNOLG1EQUFtRDtZQUNuRCwwTEFBMEw7WUFDMUwsOERBQThEO1lBQzlELE1BQU07WUFDTixNQUFNO1lBQ04sbURBQW1EO1lBQ25ELDBMQUEwTDtZQUMxTCw4REFBOEQ7WUFDOUQsTUFBTTtZQUNOLE1BQU07UUFDUixDQUFDO1FBQ0QsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUNqQyx1Q0FBdUM7UUFDdkMsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLHFLQUFxSztRQUNySyxtS0FBbUs7UUFDbkssNkhBQTZIO1FBQzdILDZLQUE2SztRQUM3SywyS0FBMks7UUFDM0ssZ0xBQWdMO1FBQ2hMLE1BQU07UUFDTixJQUFJO1FBRUoscURBQXFEO1FBQ3JELHlKQUF5SjtRQUN6SixxR0FBcUc7UUFDckcsbUZBQW1GO1FBQ25GLHdSQUF3UjtRQUN4UiwwRUFBMEU7UUFDMUUsa0ZBQWtGO1FBQ2xGLHFRQUFxUTtRQUVyUSx1REFBdUQ7UUFDdkQsbUZBQW1GO1FBQ25GLGlJQUFpSTtRQUNqSSwrSEFBK0g7UUFDL0gsbVJBQW1SO1FBQ25SLG1DQUFtQztRQUNuQyx1RkFBdUY7UUFDdkYsOEZBQThGO1FBQzlGLHdGQUF3RjtRQUN4Rix1RkFBdUY7UUFDdkYsb0VBQW9FO1FBQ3BFLHNCQUFzQjtRQUN0Qiw0R0FBNEc7UUFDNUcsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUseUNBQXlDO1FBQ3pDLHNGQUFzRjtRQUN0RiwwQkFBMEI7UUFDMUIsNkJBQTZCO1FBQzdCLDBIQUEwSDtRQUMxSCx1SkFBdUo7UUFDdkosOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCwrSkFBK0o7UUFDL0osdURBQXVEO1FBQ3ZELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsK0RBQStEO1FBQy9ELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsMEJBQTBCO1FBQzFCLG1HQUFtRztRQUNuRyx1REFBdUQ7UUFDdkQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCw4REFBOEQ7UUFDOUQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBRXhCLHNCQUFzQjtRQUV0QixrQ0FBa0M7UUFDbEMsb0JBQW9CO1FBQ3BCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsNkNBQTZDO1FBQzdDLGtJQUFrSTtRQUNsSSxpRkFBaUY7UUFDakYsaUdBQWlHO1FBQ2pHLCtFQUErRTtRQUMvRSxpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLGtFQUFrRTtRQUNsRSxvQkFBb0I7UUFDcEIsZ0hBQWdIO1FBQ2hILGlFQUFpRTtRQUNqRSw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxtRUFBbUU7UUFDbkUsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQix1R0FBdUc7UUFDdkcscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcscURBQXFEO1FBQ3JELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsNERBQTREO1FBQzVELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsY0FBYztRQUVkLDZFQUE2RTtRQUM3RSxnREFBZ0Q7UUFDaEQsbUJBQW1CO1FBQ25CLGdFQUFnRTtRQUNoRSxvRkFBb0Y7UUFDcEYsMkRBQTJEO1FBQzNELDJCQUEyQjtRQUMzQixzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSxnRkFBZ0Y7UUFDaEYsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHNFQUFzRTtRQUN0RSxzR0FBc0c7UUFDdEcsNEpBQTRKO1FBQzVKLGtCQUFrQjtRQUNsQixpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLHlHQUF5RztRQUN6RyxpRUFBaUU7UUFDakUsNEZBQTRGO1FBQzVGLHNGQUFzRjtRQUN0RixxRkFBcUY7UUFDckYsa0VBQWtFO1FBQ2xFLG9CQUFvQjtRQUNwQiw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxrSEFBa0g7UUFDbEgsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQixzSkFBc0o7UUFDdEoscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcsc0RBQXNEO1FBQ3RELHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsbUJBQW1CO1FBQ25CLDJFQUEyRTtRQUMzRSxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELHVEQUF1RDtRQUN2RCx5QkFBeUI7UUFDekIsa0JBQWtCO1FBQ2xCLDBPQUEwTztRQUMxTyw0RUFBNEU7UUFDNUUsOExBQThMO1FBQzlMLDREQUE0RDtRQUM1RCxnRUFBZ0U7UUFDaEUsdUNBQXVDO1FBQ3ZDLDJIQUEySDtRQUMzSCx3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLCtKQUErSjtRQUMvSixxSkFBcUo7UUFDckosbUlBQW1JO1FBQ25JLDRDQUE0QztRQUM1QyxpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCxxSUFBcUk7UUFDckksOENBQThDO1FBQzlDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QscUlBQXFJO1FBQ3JJLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLGlHQUFpRztRQUNqRyxzREFBc0Q7UUFDdEQsc0JBQXNCO1FBQ3RCLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUVsQixnQkFBZ0I7UUFDaEIsc0RBQXNEO1FBQ3RELGlGQUFpRjtRQUNqRiwyREFBMkQ7UUFDM0Qsb0ZBQW9GO1FBQ3BGLDhEQUE4RDtRQUM5RCxrQkFBa0I7UUFDbEIsK0JBQStCO1FBQy9CLHFFQUFxRTtRQUNyRSxtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLDhHQUE4RztRQUM5RyxzSUFBc0k7UUFDdEksb1NBQW9TO1FBRXBTLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsdUZBQXVGO1FBQ3ZGLHdHQUF3RztRQUN4RyxtRUFBbUU7UUFDbkUsOERBQThEO1FBQzlELGtFQUFrRTtRQUNsRSx5Q0FBeUM7UUFDekMscUhBQXFIO1FBQ3JILDBCQUEwQjtRQUMxQixzQkFBc0I7UUFDdEIsa0NBQWtDO1FBQ2xDLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLHNEQUFzRDtRQUN0RCxrR0FBa0c7UUFDbEcsK0ZBQStGO1FBQy9GLDBCQUEwQjtRQUMxQix5REFBeUQ7UUFDekQsb0VBQW9FO1FBQ3BFLDBFQUEwRTtRQUMxRSxvRUFBb0U7UUFDcEUsbUhBQW1IO1FBQ25ILDRIQUE0SDtRQUM1SCx5QkFBeUI7UUFDekIsd0NBQXdDO1FBQ3hDLG1GQUFtRjtRQUNuRixxRUFBcUU7UUFDckUsNENBQTRDO1FBQzVDLHlJQUF5STtRQUN6SSw2QkFBNkI7UUFDN0IseUJBQXlCO1FBQ3pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLGdCQUFnQjtRQUVoQixnREFBZ0Q7UUFDaEQsa0ZBQWtGO1FBQ2xGLDRFQUE0RTtRQUM1RSw4SEFBOEg7UUFDOUgseUZBQXlGO1FBQ3pGLG1FQUFtRTtRQUNuRSxzQkFBc0I7UUFDdEIsb0NBQW9DO1FBQ3BDLDBFQUEwRTtRQUMxRSx3RkFBd0Y7UUFDeEYsNEZBQTRGO1FBQzVGLG9IQUFvSDtRQUNwSCwySUFBMkk7UUFDM0ksdVNBQXVTO1FBRXZTLGlHQUFpRztRQUNqRywyRkFBMkY7UUFDM0YsMEZBQTBGO1FBQzFGLHlCQUF5QjtRQUN6Qix3Q0FBd0M7UUFDeEMsb0ZBQW9GO1FBQ3BGLG1HQUFtRztRQUNuRyxzRUFBc0U7UUFDdEUsaUVBQWlFO1FBQ2pFLHFFQUFxRTtRQUNyRSw0Q0FBNEM7UUFDNUMsd0hBQXdIO1FBQ3hILDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIscUNBQXFDO1FBQ3JDLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFFakIsWUFBWTtRQUNaLFlBQVk7UUFDWixRQUFRO1FBQ1IsUUFBUTtRQUNSLElBQUk7UUFFSix5RUFBeUU7UUFDekUsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixvQ0FBb0M7WUFDcEMseUJBQXlCO1lBQ3pCLElBQUksVUFBVSxHQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLHlCQUF5QixHQUFRLEVBQUUsQ0FBQztZQUN4QyxJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtnQkFDL0Msb0VBQW9FO2dCQUNwRSxvRUFBb0U7Z0JBQ3BFLE9BQU87Z0JBQ1AsK0RBQStEO2dCQUMvRCx5RUFBeUU7Z0JBQ3pFLHdCQUF3QjtnQkFDeEIsMEVBQTBFO2dCQUMxRSx5QkFBeUI7Z0JBQ3pCLE1BQU07Z0JBQ0osOEJBQThCO2dCQUM5QixJQUFJLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQzNELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDakksQ0FBQztnQkFDRixJQUFJLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDbEksQ0FBQztnQkFDRixJQUFJLGVBQWUsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNyRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQy9ILENBQUM7Z0JBQ0YsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssSUFBSTtvQkFDM0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7b0JBQ2hELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO29CQUNoRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxJQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELElBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDakQsRUFDRCxDQUFDO29CQUNELHdCQUF3QjtvQkFDeEIsSUFBSSxtQkFBbUIsR0FBUSx5QkFBeUIsQ0FBQyxTQUFTLENBQ2hFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzt3QkFDekQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQztvQkFDRixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQy9CLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUN0RCxRQUFRLENBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNqQixDQUFDO3lCQUFNLENBQUM7d0JBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDOzRCQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQzs0QkFDdkMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDbEQsTUFBTSxFQUFFLFFBQVEsQ0FDZCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELENBQUMsUUFBUSxFQUFFOzRCQUNaLGdCQUFnQixFQUFFLENBQUM7NEJBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzs0QkFDMUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt5QkFDakQsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBRUQsbUJBQW1CO29CQUNuQixJQUFJLGNBQWMsR0FBUSxDQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsUUFBUSxDQUMvRCxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDYixJQUFJLFlBQVksR0FDZCxVQUFVLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTt3QkFDN0QsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksdUJBQXVCLEdBQ3pCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO3dCQUNyRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO29CQUNKLElBQUksdUJBQXVCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMseUJBQXlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxRQUFRLENBQUM7NEJBQzFELFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQzlDLE1BQU0sRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFOzRCQUMzQyxnQkFBZ0IsRUFBRSxDQUFDOzRCQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7NEJBQzFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7eUJBQzdDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELGlCQUFpQjtvQkFFakIsSUFBSSxxQkFBcUIsR0FDdkIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO3dCQUNuRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO29CQUNKLElBQUkscUJBQXFCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUM7NEJBQ3hELFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUM1QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTs0QkFDM0MsZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDOzRCQUMxQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt5QkFDM0MsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxNQUFNO29CQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRDtvQkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxFQUNELENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxJQUFJLGNBQWMsR0FDaEIsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs0QkFDMUQsRUFBRTs0QkFDSixVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksVUFBVSxHQUFRLENBQ3BCLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQ3RDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNiLElBQUkscUJBQXFCLEdBQ3ZCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDbkQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDSixJQUFJLHFCQUFxQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2pDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO29DQUMzRCxHQUFHO29DQUNILElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDakIsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3ZDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUM1QyxNQUFNLEVBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQ0FDM0QsR0FBRztvQ0FDSCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQUMsUUFBUSxFQUFFO2dDQUNoRSxnQkFBZ0IsRUFBRSxDQUFDO2dDQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0NBQzFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDOzZCQUMzQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxJQUFJLHVCQUF1QixHQUN6Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDckQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDSixJQUFJLHVCQUF1QixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ25DLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUMxRCxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7Z0NBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO2dDQUN2QyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUM5QyxNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDM0MsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDOzZCQUM3QyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxJQUFJLG1CQUFtQixHQUNyQix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDekQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDSixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQy9CLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUN0RCxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3BDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7Z0NBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO2dDQUN2QyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUNsRCxNQUFNLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDdkMsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDOzZCQUNqRCxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDakUsQ0FBQztvQkFDRCxJQUFJLHNCQUFzQixHQUFRLHlCQUF5QixDQUFDLE1BQU0sQ0FDaEUsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFlBQVksQ0FBQzt3QkFDNUIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ3pDLENBQUM7b0JBQ0YsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQzt3QkFDakQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDOUQsQ0FBQzt3QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUMxRCxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7b0JBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQzdELENBQUM7b0JBQ0QsSUFBSSwwQkFBMEIsR0FDNUIseUJBQXlCLENBQUMsTUFBTSxDQUM5QixDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsWUFBWSxDQUFDO3dCQUM1QixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FDckMsQ0FBQztvQkFDSixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDO3dCQUNyRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNsRSxDQUFDO3dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3RELDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7b0JBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUMzRCxDQUFDO29CQUNELElBQUksd0JBQXdCLEdBQzFCLHlCQUF5QixDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFlBQVksQ0FBQzt3QkFDNUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUNuQyxDQUFDO29CQUNKLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUM7d0JBQ25ELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7d0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3BELHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0gsSUFBSTtnQkFDSixJQUFJLDRCQUE0QixHQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUMvRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQzNCO29CQUNDLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMvQixDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVcsQ0FDaEU7b0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxJQUNFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztvQkFDM0IsNEJBQTRCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDMUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ3JELENBQUM7b0JBQ0QsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW1CLEVBQUUsRUFBRTt3QkFDekQsSUFBSSxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQzs0QkFDOUQsSUFBSSxjQUFjLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO2dDQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQzs0QkFDakUsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDNUQsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQzlELGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3BDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQ0FDekIsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FDRjtvQ0FDRCxJQUFJLENBQUMsZUFBZSxDQUNsQixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxFQUNELENBQUM7b0NBQ0QsaUJBQWlCLENBQUMsSUFBSSxDQUNwQixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUFDO2dDQUNKLENBQUM7NEJBQ0gsQ0FBQyxDQUNGLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxJQUNFLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQzs0QkFDcEMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7K0JBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDaEYsQ0FBQzs0QkFDRCx3QkFBd0I7NEJBRXhCLElBQUksMEJBQTBCLEdBQzVCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxlQUFvQixFQUFFLEVBQUUsQ0FDdkIsZUFBZSxDQUFDLFlBQVksQ0FBQztnQ0FDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQztnQ0FDOUIsZUFBZSxDQUFDLFlBQVksQ0FBQztvQ0FDM0IsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDOzRCQUNKLElBQUksMEJBQTBCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEMsSUFBSSxHQUFHLEdBQVE7b0NBQ2IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7b0NBQ3ZDLFVBQVUsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUN4QyxNQUFNLEVBQUUsRUFBRTtvQ0FDVixnQkFBZ0IsRUFBRSxDQUFDO29DQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0NBQzFDLFNBQVMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDO2lDQUN2QyxDQUFDO2dDQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dDQUM5RSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTix5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUNuRCxRQUFRLENBQ1QsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNwRSxDQUFDO3dCQUNILENBQUM7NkJBQU0sSUFDTCxjQUFjLENBQUMsb0JBQW9CLENBQUM7NEJBQ3BDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQsRUFDRCxDQUFDOzRCQUNELHdCQUF3Qjs0QkFDeEIsSUFBSSwwQkFBMEIsR0FDNUIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLGVBQW9CLEVBQUUsRUFBRSxDQUN2QixlQUFlLENBQUMsWUFBWSxDQUFDO2dDQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2dDQUM5QixlQUFlLENBQUMsWUFBWSxDQUFDO29DQUMzQixhQUFhLENBQUMsWUFBWSxDQUFDLENBQ2hDLENBQUM7NEJBQ0osSUFBSSwwQkFBMEIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUN0QyxJQUFJLEdBQUcsR0FBUTtvQ0FDYixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztvQ0FDdkMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUM7b0NBQ3hDLE1BQU0sRUFDSixjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3Q0FDM0MsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25EO3dDQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQ0FDeEQsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29DQUMxQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQztpQ0FDdkMsQ0FBQztnQ0FDRix5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTix5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUNuRCxRQUFRLENBQ1Q7b0NBQ0MsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0NBQzNDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDt3Q0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDM0QsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELDhIQUE4SDt3QkFDOUgsOE9BQThPO3dCQUM5Tyw0Q0FBNEM7d0JBQzVDLHVCQUF1Qjt3QkFDdkIsaURBQWlEO3dCQUNqRCxrREFBa0Q7d0JBQ2xELDBOQUEwTjt3QkFDMU4sNkJBQTZCO3dCQUM3QixvREFBb0Q7d0JBQ3BELGdEQUFnRDt3QkFDaEQsU0FBUzt3QkFDVCwyQ0FBMkM7d0JBQzNDLDBEQUEwRDt3QkFDMUQsMENBQTBDO3dCQUMxQyx3RUFBd0U7d0JBQ3hFLGdGQUFnRjt3QkFDaEYsOEtBQThLO3dCQUM5SyxnRkFBZ0Y7d0JBQ2hGLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLHNEQUFzRDt3QkFDdEQsUUFBUTt3QkFDUixhQUFhO3dCQUNiLDBEQUEwRDt3QkFDMUQsMERBQTBEO3dCQUMxRCwwQ0FBMEM7d0JBQzFDLHdFQUF3RTt3QkFDeEUsZ0ZBQWdGO3dCQUNoRiw4S0FBOEs7d0JBQzlLLGdGQUFnRjt3QkFDaEYsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLFVBQVU7d0JBQ1Ysd0dBQXdHO3dCQUN4RyxlQUFlO3dCQUNmLHFSQUFxUjt3QkFDclIsUUFBUTt3QkFFUixNQUFNO3dCQUVOLElBQUk7d0JBRUoscUVBQXFFO3dCQUNyRSxnUEFBZ1A7d0JBQ2hQLHFCQUFxQjt3QkFDckIsK0NBQStDO3dCQUMvQyxnREFBZ0Q7d0JBQ2hELHVEQUF1RDt3QkFDdkQsMkJBQTJCO3dCQUMzQixrREFBa0Q7d0JBQ2xELDhDQUE4Qzt3QkFDOUMsT0FBTzt3QkFDUCxrREFBa0Q7d0JBQ2xELDJDQUEyQzt3QkFDM0MsYUFBYTt3QkFDYixzSEFBc0g7d0JBQ3RILE1BQU07d0JBQ04sSUFBSTtvQkFDTixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU07Z0JBQ04sSUFBSTtZQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSwyQkFBMkIsR0FBUTtnQkFDckMsR0FBRyxJQUFJLEdBQUcsQ0FDUix5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUMzQixDQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxnQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQ2pELENBQUMsWUFBaUIsRUFBRSxFQUFFLENBQ3BCLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FDaEUsQ0FBQztnQkFDRixJQUFJLDJCQUEyQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUNqRCxDQUFDLFlBQWlCLEVBQUUsRUFBRSxDQUNwQixZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQ2hFLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlDLGNBQWMsQ0FBQyxPQUFPLENBQ3BCLHVCQUF1QixFQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQ2pDLENBQUM7Z0JBQ0YsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMvQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7Z0JBQ3BGLENBQUM7Z0JBQ0QscUdBQXFHO2dCQUNyRyw4WkFBOFo7WUFDaGEsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDRixJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQy9DLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtnQkFDcEYsQ0FBQztnQkFDRCxzR0FBc0c7Z0JBQ3RHLDhaQUE4WjtZQUNoYSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQ0UsSUFBSSxLQUFLLE1BQU07Z0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUk7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxFQUNyQyxDQUFDO2dCQUNELFVBQVUsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELHdCQUF3QixDQUFDLGlCQUF1QixLQUFLO1FBQ25ELElBQUksT0FBTyxHQUFRLElBQUksQ0FBQztRQUN4QixJQUFJLGlCQUFpQixHQUFTLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNyRSxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDdkQsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7d0JBQzlELGNBQWM7d0JBQ2QsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDOzRCQUM3RCxlQUFlO3dCQUNqQixhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7NEJBQzdELGtCQUFrQixDQUFDO29CQUN2QixPQUFPLEVBQ1AsQ0FBQztvQkFDRCx3Q0FBd0M7b0JBQ3hDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO3dCQUNsRSxJQUFJLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLENBQ3JELENBQUM7d0JBQ0YsSUFBSSxlQUFlLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDckQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sQ0FDckQsQ0FBQzt3QkFDRixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDOzRCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7NEJBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQ2pEO2dDQUNDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLEVBQ0osQ0FBQzs0QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUNoQixpQkFBaUIsR0FBRyx3Q0FBd0MsQ0FBQzs0QkFDN0QsSUFBRyxjQUFjLEVBQUUsQ0FBQztnQ0FDbEIsSUFBSSxVQUFVLEdBQVEsNkJBQTZCLENBQUM7Z0NBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ2xDLENBQUM7NEJBQ0QsdUVBQXVFOzRCQUN2RSw0RUFBNEU7NEJBQzVFLHNFQUFzRTs0QkFDdEUscUVBQXFFOzRCQUNyRSxrREFBa0Q7NEJBQ2xELElBQUk7NEJBQ0osMEZBQTBGOzRCQUMxRixpREFBaUQ7NEJBQ2pELDRDQUE0Qzs0QkFDNUMsZ0RBQWdEOzRCQUNoRCx1QkFBdUI7NEJBQ3ZCLG9FQUFvRTs0QkFDcEUsUUFBUTs0QkFDUixXQUFXOzRCQUNYLHNHQUFzRzs0QkFFdEcsSUFBSTs0QkFFSixnQkFBZ0I7NEJBQ2hCLElBQUk7d0JBQ04sQ0FBQztvQkFDSCxDQUFDO29CQUNELDhCQUE4QjtvQkFDOUIsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMzRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxDQUNwRCxDQUFDO29CQUNGLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7d0JBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRDt3QkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDaEQsT0FBTyxFQUNQLENBQUM7d0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDaEIsaUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7d0JBRXhELElBQUcsY0FBYyxFQUFFLENBQUM7NEJBQ2xCLElBQUksVUFBVSxHQUFRLDZCQUE2QixDQUFDOzRCQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtvQkFDNUQsaUNBQWlDO29CQUNqQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO3dCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNoRSxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDdkMsT0FBTzt3QkFDUCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxZQUFZO3dCQUNsRCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUs7d0JBQ25ELGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLGFBQWE7d0JBQ25ELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssY0FBYzt3QkFDNUQsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssaUJBQWlCO3dCQUN2RCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU07d0JBQ3BELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTTt3QkFDcEQsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFHO3dCQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDdEQ7d0JBQ0Qsd0RBQXdEO3dCQUN4RCxpSEFBaUg7d0JBQ2pILG1JQUFtSTt3QkFDbkksT0FBTyxFQUNQLENBQUM7d0JBQ0QsaUJBQWlCLEdBQUcsbUNBQW1DLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUN0RixPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUVoQixJQUFHLGNBQWMsRUFBRSxDQUFDOzRCQUNsQixJQUFJLFVBQVUsR0FBUSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQztvQkFDSCxDQUFDO29CQUVELE9BQU87b0JBQ1AsK0RBQStEO29CQUMvRCxxREFBcUQ7b0JBQ3JELCtDQUErQztvQkFDL0MsTUFBTTtvQkFDTiw4TkFBOE47b0JBQzlOLGdFQUFnRTtvQkFDaEUsa0xBQWtMO29CQUNsTCxnREFBZ0Q7b0JBQ2hELG9EQUFvRDtvQkFDcEQsMkJBQTJCO29CQUMzQiwrR0FBK0c7b0JBQy9HLFlBQVk7b0JBQ1osZUFBZTtvQkFDZixtSkFBbUo7b0JBQ25KLHlJQUF5STtvQkFDekksdUhBQXVIO29CQUN2SCxnQ0FBZ0M7b0JBQ2hDLHFDQUFxQztvQkFDckMsaUpBQWlKO29CQUNqSix5Q0FBeUM7b0JBQ3pDLHlIQUF5SDtvQkFDekgsa0NBQWtDO29CQUNsQyx1Q0FBdUM7b0JBQ3ZDLGlEQUFpRDtvQkFDakQseUhBQXlIO29CQUN6SCxrQ0FBa0M7b0JBQ2xDLHVDQUF1QztvQkFDdkMsWUFBWTtvQkFDWixxRkFBcUY7b0JBQ3JGLDBDQUEwQztvQkFDMUMsVUFBVTtvQkFDVixRQUFRO29CQUNSLHVCQUF1QjtvQkFDdkIsb0JBQW9CO29CQUNwQixNQUFNO29CQUVOLElBQUk7b0JBQ0osdUNBQXVDO29CQUN2QyxJQUNFLE9BQU87d0JBQ1AsaUJBQWlCLENBQUMsWUFBWSxLQUFLLGFBQWE7d0JBQ2hELGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO3dCQUN2QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNoRSxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsRUFDN0MsQ0FBQzt3QkFDRCxJQUNFLENBQUMsT0FBTzs0QkFDTiw4RUFBOEU7NEJBQzlFLG1FQUFtRTs0QkFDbkUsdUVBQXVFOzRCQUN2RSw4RkFBOEY7NEJBQzlGLCtJQUErSTs0QkFDL0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDbkQsR0FBRyxDQUFDOzRCQUNSLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3REO3dCQUNELElBQUk7d0JBQ0osaUVBQWlFOzBCQUNqRSxDQUFDOzRCQUNELE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ2hCLGlCQUFpQixHQUFHLG1DQUFtQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzs0QkFFdEYsSUFBRyxjQUFjLEVBQUUsQ0FBQztnQ0FDbEIsSUFBSSxVQUFVLEdBQVEsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0NBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ2xDLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUVELHVDQUF1QztvQkFDdkMsbUZBQW1GO29CQUNuRixnRkFBZ0Y7b0JBQ2hGLFdBQVc7b0JBQ1gsMENBQTBDO29CQUMxQyxxREFBcUQ7b0JBQ3JELDJEQUEyRDtvQkFDM0QscURBQXFEO29CQUNyRCxvR0FBb0c7b0JBQ3BHLDZHQUE2RztvQkFDN0csVUFBVTtvQkFDVix5QkFBeUI7b0JBQ3pCLG9FQUFvRTtvQkFDcEUsc0RBQXNEO29CQUN0RCw2QkFBNkI7b0JBQzdCLDBIQUEwSDtvQkFDMUgsY0FBYztvQkFDZCxVQUFVO29CQUNWLFFBQVE7b0JBQ1IsUUFBUTtvQkFDUixJQUFJO2dCQUNOLENBQUMsQ0FBQyxDQUFDO2dCQUVILG1DQUFtQztnQkFDbkMscUVBQXFFO2dCQUNyRSwrREFBK0Q7Z0JBQy9ELGlIQUFpSDtnQkFDakgsNEVBQTRFO2dCQUM1RSxzREFBc0Q7Z0JBQ3RELFNBQVM7Z0JBQ1QsdUJBQXVCO2dCQUN2QixzRkFBc0Y7Z0JBQ3RGLDJFQUEyRTtnQkFDM0UsK0VBQStFO2dCQUMvRSx1R0FBdUc7Z0JBQ3ZHLHVKQUF1SjtnQkFDdkosNFVBQTRVO2dCQUU1VSxvRkFBb0Y7Z0JBQ3BGLDhFQUE4RTtnQkFDOUUsNkVBQTZFO2dCQUM3RSxZQUFZO2dCQUNaLDJCQUEyQjtnQkFDM0IsdUVBQXVFO2dCQUN2RSxzRkFBc0Y7Z0JBQ3RGLHlEQUF5RDtnQkFDekQsb0RBQW9EO2dCQUNwRCx3REFBd0Q7Z0JBQ3hELCtCQUErQjtnQkFDL0IsMkdBQTJHO2dCQUMzRyxnQkFBZ0I7Z0JBQ2hCLFlBQVk7Z0JBQ1osd0JBQXdCO2dCQUN4QixhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixNQUFNO2dCQUNOLElBQUk7WUFDTixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNoRSxjQUFjLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDdkYsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ1IsY0FBYyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzRCxjQUFjLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFFbEYsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsUUFBYztRQUN0QyxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGVBQWUsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxXQUFXLEVBQUcsQ0FBQztZQUM5RyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFFdkQsbURBQW1EO1lBQ25ELElBQUksY0FBYyxHQUFTLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLENBQUM7WUFFbkksSUFDRSxjQUFjLEtBQU0sQ0FBQyxDQUFDLEVBQ3RCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBZSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLENBQUE7WUFDck0sQ0FBQztZQUNELElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDdEMsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLFlBQVksQ0FDbEIsRUFBRSxDQUFDO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQztZQUM3UCxDQUFDO1lBQ0Qsd0dBQXdHO1lBQ3hHLDhCQUE4QjtZQUM5QixrQ0FBa0M7WUFDbEMsc0VBQXNFO1lBQ3RFLEtBQUs7WUFDTCw0REFBNEQ7WUFDNUQsT0FBTztZQUNQLGdFQUFnRTtZQUNoRSxxQ0FBcUM7WUFDckMsbUVBQW1FO1lBQ25FLDRCQUE0QjtZQUM1QixRQUFRO1lBQ1IsU0FBUztZQUNULHFDQUFxQztZQUNyQyxtRUFBbUU7WUFDbkUsNEJBQTRCO1lBQzVCLHdCQUF3QjtZQUN4QixNQUFNO1lBQ04sTUFBTTtZQUNKLCtEQUErRDtZQUMvRCx3QkFBd0I7WUFDeEIsOERBQThEO1lBQzlELHdCQUF3QjtZQUN4QixpREFBaUQ7WUFDakQsNkJBQTZCO1lBQzdCLHNDQUFzQztZQUN0QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLHdDQUF3QztZQUN4QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLGlEQUFpRDtZQUNqRCxLQUFLO1lBQ1AsSUFBSTtZQUNKLGtFQUFrRTtZQUNsRSxtQkFBbUI7WUFDbkIsbURBQW1EO1lBQ25ELGtEQUFrRDtZQUNsRCxzRUFBc0U7WUFDdEUsdUJBQXVCO1lBQ3ZCLDBCQUEwQjtZQUMxQixNQUFNO1lBQ04sTUFBTTtZQUVOLHNMQUFzTDtZQUN0TCxtRUFBbUU7WUFDbkUsbURBQW1EO1lBQ25ELCtEQUErRDtZQUMvRCx1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLE1BQU07WUFDTixNQUFNO1lBQ04sNkJBQTZCO1lBRTdCLElBQUksZ0JBQWdCLEdBQVMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRixpQ0FBaUM7WUFDakMsb0JBQW9CO1lBQ3BCLGtDQUFrQztZQUNsQyx3RUFBd0U7WUFDeEUsbUJBQW1CO1lBQ25CLE1BQU07WUFDTixLQUFLO1lBQ0wsSUFBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xjLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUM5RyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNaLDhCQUE4QjtvQkFDOUIsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7NEJBQ2hDLFdBQVcsQ0FDVCxjQUFjLENBQ2YsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FDL0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUMxQixDQUFDOzRCQUNGLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDMUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDOzRCQUMzQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FDaEM7Z0NBQ0QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQy9DLENBQUM7Z0NBQ0QsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEdBQUc7b0NBQ2hDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztpQ0FDaEMsQ0FBQzs0QkFDSixDQUFDOzRCQUNELElBQ0UsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7Z0NBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FDaEMsRUFDRCxDQUFDO2dDQUNELFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FDckMsQ0FBQyx5QkFBOEIsRUFBRSxFQUFFO29DQUNqQyxJQUFJLGtCQUFrQixHQUFRLElBQUksQ0FBQyxNQUFNLENBQ3ZDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDZCxNQUFNLENBQUMsWUFBWSxDQUFDO3dDQUNwQix5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDO29DQUNGLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dDQUNsQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7NENBQ3BDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUM7b0NBQ3JELENBQUM7Z0NBQ0gsQ0FBQyxDQUNGLENBQUM7NEJBQ0osQ0FBQzs0QkFDRCxPQUFPOzRCQUNQLCtCQUErQjs0QkFDL0Isa0NBQWtDOzRCQUNsQyxNQUFNOzRCQUNOLE1BQU07NEJBQ04sOERBQThEOzRCQUM5RCwyRUFBMkU7NEJBQzNFLHlDQUF5Qzs0QkFDekMsU0FBUzs0QkFDVCxRQUFROzRCQUNSLElBQUk7NEJBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEQsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDL0MsQ0FBQzs0QkFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDcEQsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FDUCxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQ2pFLENBQUM7d0JBQ0YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsRUFBRTs0QkFDN0MsSUFBSSxXQUFXLEdBQVEsSUFBSSxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUMvRCxDQUFDOzRCQUNGLElBQUksR0FBRyxHQUFRO2dDQUNiLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRztnQ0FDaEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDL0MsQ0FBQyxDQUFDLFdBQVc7b0NBQ2IsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUNwQyxXQUFXLENBQ1o7b0NBQ0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxFQUFFO2dDQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQ0FDM0Isb0JBQW9CLEVBQUUsSUFBSTtnQ0FDMUIsV0FBVyxFQUFFLElBQUk7NkJBQ2xCLENBQUM7NEJBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzlCLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7d0JBQ3hDLG1IQUFtSDt3QkFDbkgsa0NBQWtDO3dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztvQkFDckksQ0FBQztvQkFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxFQUNELENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ1gsOEJBQThCO2dCQUNoQyxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUNELHFCQUFxQixDQUFDLEtBQW9DO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3QkFBd0I7UUFDcEIsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUNsQiw0QkFBNEIsQ0FDN0IsS0FBSyxNQUFNO1lBQ1osQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLEVBQ0QsQ0FBQztZQUNELElBQUksY0FBYyxHQUFRLENBQ3hCLFVBQVUsQ0FDUixJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FDRixHQUFHLFFBQVEsQ0FDYixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksWUFBWSxHQUNkLFVBQVUsQ0FDUixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7aUJBQ2xCLFFBQVEsRUFBRTtpQkFDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pCLEdBQUcsRUFBRTtnQkFDSixDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0QyxFQUNELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsMEJBQTBCLENBQzNCLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEMsRUFDRCxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QjtvQkFDQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7d0JBQzlDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTt3QkFDOUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO3dCQUM1QyxDQUFDLENBQUMsWUFBWTs2QkFDVCxRQUFRLEVBQUU7NkJBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDYixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNkLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFDTCxJQUFJLENBQUMsZUFBZSxDQUNsQiw0QkFBNEIsQ0FDN0IsS0FBSyxJQUFJO1lBQ1YsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDBCQUEwQixDQUMzQixDQUNGO1lBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLEVBQ0QsQ0FBQztZQUNELElBQUksY0FBYyxHQUNoQixVQUFVLENBQ1IsVUFBVSxDQUNSLElBQUksQ0FBQyxlQUFlLENBQ2xCLDBCQUEwQixDQUMzQixDQUNGLENBQUMsUUFBUSxFQUFFO2dCQUNWLEdBQUc7Z0JBQ0gsVUFBVSxDQUNSLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLENBQUMsUUFBUSxFQUFFLENBQ2YsR0FBRyxFQUFFLENBQUM7WUFDVCxJQUFJLFVBQVUsR0FBUSxDQUNwQixVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUN0QyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixHQUFHLFVBQVUsQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVILGNBQWMsQ0FBQyxTQUFjO1FBQzNCLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBRXBELE1BQU0sZUFBZSxHQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvRCxpRUFBaUU7UUFDakUscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3BELE1BQU0sYUFBYSxHQUNqQixlQUFlLEtBQUssTUFBTTtnQkFDeEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtnQkFDWixDQUFDLENBQUUsZUFBK0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBRS9ELE1BQU0sYUFBYSxHQUNqQixlQUFlLEtBQUssTUFBTTtnQkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLElBQUksQ0FBQztnQkFDL0QsQ0FBQyxDQUFFLGVBQStCLENBQUMsU0FBUyxDQUFDO1lBRWpELE1BQU0sY0FBYyxHQUNsQixXQUFXLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsYUFBYSxHQUFHLFlBQVksQ0FBQztZQUVyRSxJQUFJLGVBQWUsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNMLGVBQStCLENBQUMsUUFBUSxDQUFDO29CQUN4QyxHQUFHLEVBQUUsY0FBYztvQkFDbkIsUUFBUSxFQUFFLFFBQVE7aUJBQ25CLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFFMUQsd0NBQXdDO1lBQ3hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRVQsdUVBQXVFO1lBQ3ZFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFXLEVBQUUsRUFBRTtnQkFDekMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDakQsaURBQWlEO2dCQUNqRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUVqRSw0REFBNEQ7Z0JBQzVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDMUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNqQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQ3hELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO29CQUN2QyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQzNELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFFRixtQ0FBbUM7WUFDbkMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXRELGlEQUFpRDtZQUNqRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFdkQsNEVBQTRFO1lBQzVFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFNUQsOEJBQThCO1lBQzlCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUU5RCxvRUFBb0U7WUFDcEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDcEUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNqQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3JELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztZQUVILDBEQUEwRDtZQUMxRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUMxRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3ZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDeEQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBd0I7UUFDbEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQztRQUNqQyxPQUFPLE1BQU0sRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RCxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7d0dBMS9GVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qix3eUNDeENyQywyN1NBcVFBLHd2Q0Q5T0ksWUFBWSw2VkFDWixXQUFXLGd4QkFDWCxtQkFBbUIsK0JBQ25CLGdCQUFnQiwySEFDaEIsY0FBYywySEFDZCxpQkFBaUIsOEhBQ2pCLGVBQWUsa0pBQ2YsWUFBWSxxS0FDWixlQUFlLDhNQUNmLHVCQUF1Qiw2SUFDdkIsZ0JBQWdCLCtpQ0FDaEIsZUFBZSwyRUFDZixvQkFBb0I7OzRGQUtYLHdCQUF3QjtrQkF0QnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FFUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixvQkFBb0I7cUJBQ3JCO3VHQUtTLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUXFCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgTmdab25lLCBBZnRlclZpZXdJbml0LCBpbnB1dCwgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBxdWVzdGlvbnNSZXNwb25zZSBmcm9tICcuL3F1ZXN0aW9ucy5qc29uJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9iQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9iL2RvYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkL3VwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aXBsZS1zZWxlY3QvbXVsdGlwbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIckxpbmVDb21wb25lbnQgfSBmcm9tICcuLi9oci1saW5lL2hyLWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLXByZXZpZXcvZmlsZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tZWRpYWwtcXVlc3Rpb25zJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUZXh0Ym94Q29tcG9uZW50LFxuICAgIFJhZGlvQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIFNlbGVjdENvbXBvbmVudCxcbiAgICBEb2JDb21wb25lbnQsXG4gICAgVXBsb2FkQ29tcG9uZW50LFxuICAgIE11bHRpcGxlU2VsZWN0Q29tcG9uZW50LFxuICAgIEdvb2dsZU1hcHNNb2R1bGUsXG4gICAgSHJMaW5lQ29tcG9uZW50LFxuICAgIEZpbGVQcmV2aWV3Q29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1lZGlhbFF1ZXN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBPdXRwdXQoKSBxdWVzdGlvbnNWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBjbHVzdGVySWQgOiBhbnkgPSBpbnB1dDxhbnk+KCk7IC8vIG5vbiBtYW5kYXRvcnkgY2x1c3RlciBpZFxuICBASW5wdXQoKSB0cmlnZ2VyVmFsaWRhdGlvbj86IFN1YmplY3Q8dm9pZD47XG4gIG1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIGRlZmF1bHRWYWx1ZXMgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblR5cGU6IGFueSA9IGlucHV0PGFueT4oKTtcbiAgcGVyc29uVXdJZCA6IGFueSA9IFwiXCI7XG4gIGlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA6IGFueSA9IG51bGw7XG4gIG1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA6IGFueSA9IHt9O1xuICBAVmlld0NoaWxkKCdhZGRyZXNzSW5wdXQnKSBhZGRyZXNzSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwcml2YXRlIGF1dG9jb21wbGV0ZSE6IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGU7XG4gIHNhdmVRdWVzdGlvblJlcXVlc3RMYTogYW55ID0gW107XG4gIHNhdmVRdWVzdGlvblJlcXVlc3RQaDogYW55ID0gW107XG4gIGZpZWxkOiBhbnkgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XG4gIHF1ZXN0aW9uTGlzdDogYW55ID0gW107XG4gIGN1cnJlbnRDb29yZGluYXRlczogYW55ID0ge307XG4gIHBlcnNvblV3UmVzcG9uc2VPYmo6IGFueSA9IFtdO1xuICBjZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwgPSB7IGxhdDogNDAuNzMwNjEsIGxuZzogLTczLjkzNTI0MiB9O1xuICBsYXRpdHVkZTogYW55O1xuICBsb25naXR1ZGU6IGFueTtcbiAgem9vbTogYW55O1xuICBtYXJrZXI6IGFueSA9IHt9O1xuXG5cbiAgcGVyc29uVXdBbnN3ZXJzOiBhbnkgPSB7XG4gICAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQ6ICdGRUVUJyxcbiAgICBtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQ6IDAsXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dDogMCxcbiAgfTtcbiAgbWVkUXVlc3Rpb25PYmo6IGFueSA9IHt9O1xuICBsaXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0OiBhbnkgPSBbXTtcbiAgcXVlc3Rpb25IZWFkZXI6IGFueSA9IFsnZWlhIGRldGFpbHMnLCAnYWJoYSBkZXRhaWxzJywgJ3BlcCBkZXRhaWxzJ107XG4gIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0VHlwZXM6IGFueSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ0NtJyxcbiAgICAgIHZhbHVlOiAnQ00nLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgIHZhbHVlOiAnRkVFVCcsXG4gICAgfSxcbiAgXTtcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gIGFkZHJlc3NTdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgaG92ZXJlZEluZGV4ID0gLTE7XG4gIHNlYXJjaFRpbWVvdXQ6IGFueTtcbiAgaG9yaXpvbnRhbExpbmVPYmogOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFN0eWxlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1c1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUJhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlYXRlZERhdGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXJnaW5cIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDc3NcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IFwic29saWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImZpZWxkTmFtZVwiOiBcImhyTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwic29saWQgbGluZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInBsYWNlSG9sZGVyXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YUlkXCI6IFwiTElfQ09NX0dFTl9DVFJMX2hyTGluZV9ockxpbmVfVjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Zpc2libGVcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc0Rpc2FibGVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFZhbHVlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsaWRhdG9yc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVpcmVkTWVzc2FnZVwiOiBcIlRoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkxlbmd0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhNZXNzYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heExlbmd0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhNZXNzYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5cIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0dGVybk1lc3NhZ2VcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjogW10sXG4gICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogXCJjb2wtMTJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiaW1hZ2VVcmxcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJjb25maWdEYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaHJUZXh0XCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRhRGF0YU9ialwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcImlzU2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDb250cm9sXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IFwiaHJMaW5lXCJcbiAgICAgICAgICAgICAgICB9O1xuICBwcmV2aWV3RmlsZTogRmlsZSB8IG51bGwgPSBudWxsO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmdab25lOiBOZ1pvbmUsIHB1YmxpYyBtYXN0ZXJTZXJ2aWNlIDogTWFzdGVyU2VydmljZSkge1xuICAgIGNvbnNvbGUubG9nKCdtZWRpYWxRdWVzdGlvblJlc3BvbnNlZWVlZWUnLCB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKSk7XG4gICAgY29uc29sZS5sb2coJ3BlcnNvbnR5cGUnLCB0aGlzLnBlcnNvblR5cGUoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyVmFsaWRhdGlvbikge1xuICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb24uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKHRydWUpO1xuICAgIH0pO1xuICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgKChjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddLmN1cnJlbnRWYWx1ZSkpIHx8XG4gICAgICAoKGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddLmN1cnJlbnRWYWx1ZSkpXG4gICAgKSB7XG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcbiAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xuICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZTtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHtcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYXRpdHVkZSxcbiAgICAgICAgICAgIGxuZzogdGhpcy5sb25naXR1ZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgLi4udGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpO1xuICAgIH1cblxuICAgIGlmKCgoY2hhbmdlc1snZGVmYXVsdFZhbHVlcyddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ2RlZmF1bHRWYWx1ZXMnXS5jdXJyZW50VmFsdWUpKSkge1xuICAgICAgaWYodHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlcygpID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2VycyA9IHsuLi50aGlzLnBlcnNvblV3QW5zd2VycywgLi4udGhpcy5kZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJyc7XG5cbiAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgIGlmIChzZWN0aW9uLnF1ZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHNlY3Rpb24ucXVlc3Rpb25zKSkge1xuICAgIC8vICAgICBzZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgc3dpdGNoIChxdWVzdGlvbi5jYW1tdW5kYVF1ZXN0aW9uQ29kZSkge1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhUJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRGJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRJJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxuICAgICAgdGhpcy5hZGRyZXNzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcbiAgICAgICAgY29tcG9uZW50UmVzdHJpY3Rpb25zOiB7IGNvdW50cnk6ICdJTicgfSxcbiAgICAgICAgZmllbGRzOiBbJ3BsYWNlX2lkJywgJ2dlb21ldHJ5JywgJ25hbWUnLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm9uUGxhY2VTZWxlY3RlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uUGxhY2VTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBwbGFjZSA9IHRoaXMuYXV0b2NvbXBsZXRlLmdldFBsYWNlKCk7XG5cbiAgICBpZiAoIXBsYWNlLmdlb21ldHJ5IHx8ICFwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ05vIGRldGFpbHMgYXZhaWxhYmxlIGZvciBpbnB1dDogJywgcGxhY2UubmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcblxuICAgIGlmIChwbGFjZS5nZW9tZXRyeS52aWV3cG9ydCkge1xuICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuem9vbSA9IDEzO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBwbGFjZTonLCB7XG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCk6IHZvaWQge1xuICAgIGNvbnN0IGFkZHJlc3NEYXRhID0ge1xuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgZm9ybWF0dGVkQWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfTtcbiAgfVxuXG4gIHNlYXJjaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzOiBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cyAmJiByZXN1bHRzWzBdKSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgICAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnR2VvY29kZSB3YXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAnICsgc3RhdHVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkFkZHJlc3NJbnB1dEtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVvdXRcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggKyAxLFxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPj0gMCAmJlxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdEFkZHJlc3ModGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IDIpIHtcbiAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hBZGRyZXNzZXMocXVlcnkpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBzZWFyY2hBZGRyZXNzZXMocXVlcnk6IHN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXG4gICAgLy8gRm9yIGV4YW1wbGUsIHVzaW5nIEdvb2dsZSBQbGFjZXMgQVBJOlxuXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpO1xuICAgIHNlcnZpY2UuZ2V0UGxhY2VQcmVkaWN0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHF1ZXJ5LFxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICAgKHByZWRpY3Rpb25zLCBzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiZcbiAgICAgICAgICBwcmVkaWN0aW9uc1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IHByZWRpY3Rpb25zLm1hcCgocHJlZGljdGlvbikgPT4gKHtcbiAgICAgICAgICAgIHBsYWNlX2lkOiBwcmVkaWN0aW9uLnBsYWNlX2lkLFxuICAgICAgICAgICAgbWFpbl90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5tYWluX3RleHQsXG4gICAgICAgICAgICBzZWNvbmRhcnlfdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcuc2Vjb25kYXJ5X3RleHQsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJlZGljdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgY29uc3QgYWRkcmVzc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcjYWRkcmVzc0lucHV0J1xuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoYWRkcmVzc0lucHV0KSB7XG4gICAgICBhZGRyZXNzSW5wdXQudmFsdWUgPSBzdWdnZXN0aW9uLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICk7XG4gICAgc2VydmljZS5nZXREZXRhaWxzKFxuICAgICAge1xuICAgICAgICBwbGFjZUlkOiBzdWdnZXN0aW9uLnBsYWNlX2lkLFxuICAgICAgICBmaWVsZHM6IFsnZ2VvbWV0cnknLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH0sXG4gICAgICAocGxhY2UsIHN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBwbGFjZSkge1xuICAgICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XG4gICAgICAgICAgY29uc3QgbG5nID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sbmcoKTtcblxuICAgICAgICAgIGlmIChsYXQgIT09IHVuZGVmaW5lZCAmJiBsbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBsbmc7XG4gICAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gbGF0O1xuXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgbGF0LCBsbmcgfTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5wdXRCbHVyKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShhcnJheU9mT2JqIDogYW55KSB7XG4gICAgaWYoYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgfHwgYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gICdMaWZlTWVkaUNuZHRuJykge1xuICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBhcnJheU9mT2JqO1xuICAgIH1cbiAgICBpZih0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYXJyYXlPZk9ialsncGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5J10pKSB7XG4gICAgICBhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXS5mb3JFYWNoKChzaW5nbGVTdWJBcnJheSA6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlU3ViQXJyYXkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpIHtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCkpIHtcbiAgICAgIGxldCBhcnJheU9mS2V5cyA6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpO1xuICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55LCBzaW5nbGVLZXlMZW5ndGggOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSwgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoIDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBlcnNvblV3QW5zd2VycyhzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgaWYoc2luZ2xlS2V5TGVuZ3RoID09PSAoYXJyYXlPZktleXMubGVuZ3RoIC0gMSkgJiYgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoID09PSAodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCkge1xuICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gW107XG4gICAgbGV0IGRhdGE6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpO1xuICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3ggPSBbXTtcblxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAgIGxldCBwZXJzb25Vd0lkQXJyYXk6IGFueSA9IFtdO1xuICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgIHBlcnNvblV3SWRBcnJheS5wdXNoKHNpbmdsZVF1ZXN0aW9uT2JqWydwZXJzb25VV0lkJ10pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pXG4gICAgICApIHtcblxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3SWQgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3RpdGxlJ10gPT09ICdNZWRpY2FsIERldGFpbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXG4gICAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZSgvXFxcXG4vZywgJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV07XG5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzaW5nbGVRdWVzdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICd7XCJUeXBlXCI6XCJBbHBoYU51bWVyaWNcIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIi9eKFthLXpBLVpdKXs1fShbMC05XSl7NH0oW2EtekEtWl0pezF9PyQvXCJ9JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0Z0Y2FDbnRjRGV0bHMnKSB7XG4gICAgICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID0gJ3tcImN1c3RvbVZhbGlkYXRpb25cIjpbe1wiY291bnRyeVwiOlwiSU5cIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIigoXls2LTldKXsxfShbMC05XSl7OX0kKVwifSx7XCJjb3VudHJ5XCI6XCJPVEhFUlwiLFwiTWluVmFsdWVcIjpcIjVcIixcIk1heFZhbHVlXCI6XCIxNFwifV19JztcbiAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCcpIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xuICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlQWxsKCdcXFxcbicsICc8YnI+Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0ZlZXRMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ0ZSRUVURVhUJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXV1bXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ04nLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnWScsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPSAnSEFSRCBDT1BZJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uc29ydChcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25zTGlzdEZvckxBOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnc3RlcCddID09PSBzdGVwc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgc3RlcDogc3RlcHMsXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSkge1xuICAgICAgICAgICAgICAgIC8vIEhhcmQgQ29weSBhbmQgTWFwIHF1ZXN0aW9uXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdNQVAnLFxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdZJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGlmIE5SSSB0aGVuIHBhc3Nwb3J0IHVwbG9hZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ05hdGlvbmFsaXR5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcXVlc3Rpb25zTGlzdEZvckxBLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcbiAgICAgICAgICAgIC8vIGlmIChsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXIgIT09IHRoaXMubnVtYmVyTWludXNPbmUpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gcXVlc3Rpb25zTGlzdEZvckxBO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0KSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpICkge1xuICAgICAgICAgIGxldCBpc1N1YlF1ZXN0aW9uRXhpc3RzOiBhbnkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA9IG51bGw7XG4gICAgICAgICAgbGV0IGFycmF5T2ZLZXlzIDogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCk7XG4gICAgICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldFN1YlF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsXG4gICAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbJ2Fuc3dlciddLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydChcbiAgICAgICAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGVyc29uVVdJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgKHNpbmdsZTogYW55KSA9PiBzaW5nbGVbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ11cbiAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpLmZvckVhY2goKHNpbmdsZVBlcnNvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF0pKSB7XG4gICAgICAgICAgLy8gICAgIGxldCBhcnJheU9mS2V5cyA9IE9iamVjdC5rZXlzKHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXSk7XG4gICAgICAgICAgLy8gICAgIGlmIChhcnJheU9mS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoYW5zd2VyT2JqOiBhbnkpID0+IHtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IFtdO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gbGV0IGxpc3RPZk9wdGlvbnNTZWxlY3RlZCA6IGFueSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxpc3RPZk9wdGlvbnNTZWxlY3RlZC5mb3JFYWNoKChzaW5nbGVFbGVtZW50IDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZERvbWFpblZhbHVlT2JqIDogYW55ID0gZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddID09PSBzaW5nbGVFbGVtZW50KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0ucHVzaCh7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICAgIGxhYmVsIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluVWlWYWx1ZSddLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZSA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBhbnN3ZXJPYmpbJ2Fuc3dlciddO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxldCBmZWV0QW5zd2VyID0gYW5zd2VyT2JqWydhbnN3ZXInXS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IGZlZXRBbnN3ZXJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddICYmIHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgaXNTdWJRdWVzdGlvbkV4aXN0cyA9IHRydWU7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yRGlzZWFzZVwiOiBcIm1kZWljYWxIaXN0b3J5XCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiYXBpVXJsXCI6IFwiaHR0cHM6Ly9wcmVwcm9kLWRpcmVjdHBvcnRhbGxpZmUuZ29kaWdpdC5jb20vRGlyZWN0UG9ydGFsTGlmZS9saWZlL2ZldGNoU3ViUXVlc3Rpb25zXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JQZXJzb25Vd0lkXCI6IFwicGVyc29uVVdJRFwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInRva2VuQ29va2llUGFyYW1cIjogXCJ2M1Rva2VuXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiaXNTZW5kVG9rZW5cIjogZmFsc2VcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnModGhpcy5maWVsZCgpPy5jb25maWdEYXRhLCBhbnN3ZXJPYmpbJ2Fuc3dlciddLCBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSkuc3Vic2NyaWJlKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoc3ViUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblJlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT4gb2JqZWN0WydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddIDogJycsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogYW5zd2VyT2JqWydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiBhbnN3ZXJPYmouYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnWScgJiYgYW5zd2VyT2JqLmFuc3dlciAhPT0gJ04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqLmFuc3dlci5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKS5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlcl0gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5hbnN3ZXJdID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmopO1xuICAgICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vIH0pO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcblxuICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ10gPSB7XG4gICAgICBjb250cm9sU3R5bGU6IHtcbiAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgIGNvbnRyb2xNZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICB9LFxuICAgICAgZmllbGROYW1lOiBudWxsLFxuICAgICAgbGFiZWw6ICdmZWV0IC8gaW5jaGVzJyxcbiAgICAgIHBsYWNlSG9sZGVyOiAnJyxcbiAgICAgIG1ldGFJZDogJycsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0Rpc2FibGU6IGlzRGlzYWJsZSxcbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgaXNSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVkTWVzc2FnZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtaW5MZW5ndGhNZXNzYWdlOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IDE1MCxcbiAgICAgICAgbWF4TGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgICAgcGF0dGVybjogbnVsbCxcbiAgICAgICAgcGF0dGVybk1lc3NhZ2U6ICcnLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQ20nLFxuICAgICAgICAgIHZhbHVlOiAnQ00nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBzdHlsZTogbnVsbCxcbiAgICAgIGltYWdlVXJsOiBudWxsLFxuICAgICAgY29uZmlnRGF0YToge30sXG4gICAgICBtZXRhRGF0YU9iajogbnVsbCxcbiAgICAgIGlzU2hvd0xhYmVsOiBmYWxzZSxcbiAgICAgIGlzTWFzdGVyQ29udHJvbDogZmFsc2UsXG4gICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmo6IGFueSkge1xuXG4gICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IGFuc3dlck9ialsnYW5zd2VyJ107XG4gICAgfVxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xuICAgICAgbGV0IGZlZXRBbnN3ZXIgPSBhbnN3ZXJPYmpbJ2Fuc3dlciddLnNwbGl0KCcuJyk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJiBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gZmVldEFuc3dlclsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcwJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSkge1xuICAgICAgaWYoZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5KSkge1xuICAgICAgYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eS5mb3JFYWNoKChzdWJxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHN1YnF1ZXN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKClcbiAgICB9XG4gIH1cblxuICBjaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGl0bGVDYXNlKGhlYWRlcjogYW55KTogYW55IHtcbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcbiAgICAgICAgbGV0IHZhbCA9IGhlYWRlci5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4gdmFsWzBdLnRvVXBwZXJDYXNlKCkgKyAnICcgKyB0aGlzLnRvVGl0bGVDYXNlKHZhbFsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaGVhZGVyLnRvVXBwZXJDYXNlKCkgPT09ICdGQVRDQSBERVRBSUxTJykge1xuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9UaXRsZUNhc2UoaGVhZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b1RpdGxlQ2FzZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgL1xcd1xcUyovZyxcbiAgICAgICAgICAodHh0OiBhbnkpID0+IHR4dFswXS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGQocXVlc3Rpb25PYmo6IGFueSkge1xuICAgIGxldCBvcHRpb25zT2JqOiBhbnkgPSBbXTtcbiAgICBsZXQgY29udHJvbFN0eWxlIDogYW55ID0ge307XG4gICAgaWYgKHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkge1xuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgb3B0aW9uc09iai5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcbiAgICAgICAgICB2YWx1ZTogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGlzRGlzYWJsZSA6IGFueSA9IGZhbHNlO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpKSApIHtcbiAgICAgIGxldCBpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSAgOiBhbnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJyk7XG4gICAgICBpc0Rpc2FibGUgPSBKU09OLnBhcnNlKGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1pbkxlbmd0aDogYW55ID0gbnVsbDtcbiAgICBsZXQgbWF4TGVuZ3RoOiBhbnkgPSAyMDA7XG4gICAgbGV0IHBhdHRlcm46IGFueSA9IG51bGw7XG4gICAgbGV0IHBhdHRlcm5NZXNzYWdlOiBhbnkgPSBudWxsO1xuICAgbGV0IGNvbmZpZ0RhdGE6IGFueSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhKVxuICA/IHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YVxuICA6IHt9O1xuXG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsnY29uZmlnRGF0YSddKSkge1xuICAgICAgY29uZmlnRGF0YSA9IHsuLi5jb25maWdEYXRhLCAuLi5xdWVzdGlvbk9ialsnY29uZmlnRGF0YSddfTtcbiAgICB9XG5cbiAgICBpZihxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICAnUkFESU8gQlVUVE9OJyB8fCBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykge1xuICAgICAgY29udHJvbFN0eWxlID0ge1xuICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIxMnB4XCIsXG4gICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogXCI0MDBcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBcIk11bGlzaFwiLFxuICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBcIiNGRkZGRkZcIixcbiAgICAgICAgICAgICAgICAgIFwiY2FyZXRDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJudWRnZURpc3BsYXlJbWFnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlckNvbG9yXCI6IFwiI2ZmYmIwMFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJob3ZlckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogXCIjRUNFQ0VDXCIsXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IFwiI0VDRUNFQ1wiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IFwiMXB4XCIsXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJBTExfQ09NX0dFTl9DVFJMX3JhZGlvX25vbWluZWVHZW5kZXJfVjFcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyU3R5bGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKSkge1xuICAgICAgbGV0IHZhbGlkYXRpb25PYmo6IGFueSA9IEpTT04ucGFyc2UocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXSkpIHtcbiAgICAgICAgbWluTGVuZ3RoID0gdmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ10pKSB7XG4gICAgICAgIG1heExlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ107XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydUeXBlJ10pKSB7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJykge1xuICAgICAgICAgIHBhdHRlcm4gPSAnXlswLTldKyQnO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gJ09ubHkgbnVtYmVycyBhcmUgYWxsb3dlZC4nO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2lzQWxsb3dOdW1iZXJzSW5UZXh0RmllbGRzJ10gPSB0cnVlO1xuICAgICAgICAgIG1heExlbmd0aCA9ICc5Jy5yZXBlYXQoTnVtYmVyKG1heExlbmd0aCkpO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21heFZhbHVlJ10gPSBtYXhMZW5ndGg7XG4gICAgICAgICAgY29uZmlnRGF0YVsnbWluVmFsdWUnXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnQWxwaGFOdW1lcmljJykge1xuICAgICAgICAgIHBhdHRlcm4gPSAnXlthLXpBLVowLTlcXFxcc10rJCc7XG4gICAgICAgICAgcGF0dGVybk1lc3NhZ2UgPSAnT25seSBsZXR0ZXJzIGFuZCBudW1iZXJzIGFyZSBhbGxvd2VkLic7XG4gICAgICAgICAgY29uZmlnRGF0YVsnaXNBbGxvd051bWJlcnNJblRleHRGaWVsZHMnXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdHRlcm4gPSBudWxsO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWdEYXRhOiBjb25maWdEYXRhLFxuICAgICAgY29udHJvbFN0eWxlOiBjb250cm9sU3R5bGUsXG4gICAgICBjb250cm9sVHlwZTpcbiAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJ1xuICAgICAgICAgID8gJ3RleHQnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJ1xuICAgICAgICAgID8gJ3JhZGlvJ1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnIHx8XG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTidcbiAgICAgICAgICA/ICdjaGVja2JveCdcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgID8gJ2RhdGUnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTidcbiAgICAgICAgICA/ICdzZWxlY3QnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnXG4gICAgICAgICAgPyAnZmlsZSdcbiAgICAgICAgICA6ICcnLFxuICAgICAgZmllbGROYW1lOiBxdWVzdGlvbk9ialsncXVlc3Rpb25JZCddLFxuICAgICAgaXNEaXNhYmxlLFxuICAgICAgbGFiZWw6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcbiAgICAgIHBsYWNlSG9sZGVyOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGlzUmVxdWlyZWQ6IHF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgbWluTGVuZ3RoLFxuICAgICAgICBtYXhMZW5ndGgsXG4gICAgICAgIHBhdHRlcm4sXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIGNzc0NsYXNzOiBcIm1iLTJcIixcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNPYmosXG4gICAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMocXVlc3Rpb24/OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzJywgdGhpcy5xdWVzdGlvbkxpc3QpXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5xdWVzdGlvbkxpc3QpKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pKSB7XG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dRdWVzdGlvbihzaW5nbGVRdWVzdGlvbikpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIHRoZSBxdWVzdGlvbiBpZiBpdCBoYXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXT8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RlZmF1bHRWYWx1ZSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5kZWZhdWx0VmFsdWVzKCkpICYmIE9iamVjdC5rZXlzKHRoaXMuZGVmYXVsdFZhbHVlcygpKS5pbmNsdWRlcyhxdWVzdGlvbklkKTtcbiAgICAgICAgICAgIGlmIChoYXNEZWZhdWx0VmFsdWUgJiYgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10pIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10gPSB7XG4gICAgICAgICAgICAgICAgLi4uc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10sXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlOiB0cnVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgICAgIGxldCBpc05vbmVJbkRvbWFpblZhbHVlczogYW55ID0gc2luZ2xlUXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xuICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZU9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVPYmpbJ2RvbWFpblVpVmFsdWUnXS50b1VwcGVyQ2FzZSgpID09PSAnTk9ORSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNOb25lSW5Eb21haW5WYWx1ZXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbm9uZSBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBzZWxlY3RlZCBjaGVja2JveCBxdWVzdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmRvbWFpblVpVmFsdWUudG9VcHBlckNhc2UoKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTk9ORSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdDogYW55ID0gdGhpcy5pc0Jsb2NrZWRRdWVzdGlvbnNMaXN0LmZpbHRlcigoc2luZ2xlQmxvY2tlZE9iajogYW55KSA9PiBzaW5nbGVCbG9ja2VkT2JqWydzZWN0aW9uVGl0bGUnXS50cmltKCkgPT09IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udHJpbSgpKTtcbiAgICAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdCkpIHtcbiAgICAgICAgLy8gICBpZiAoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JDdXN0b21lckZsb3cgJiYgIXRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgaWYgKChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckFnZW50RmxvdyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QyMCcgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDUnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA2JykgJiYgdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBsZXQgaGlkZGVuUXVlc3Rpb25zOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25PYmo6IGFueSkgPT4gIXNpbmdsZVNlY3Rpb25PYmpbJ3Nob3dTZWN0aW9uJ11cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoaWRkZW5RdWVzdGlvbnMpKSB7XG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5xdWVzdGlvbkxpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSk7XG5cbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGxpc3QnLCB0aGlzLnF1ZXN0aW9uTGlzdCk7XG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBhbnN3ZXJzJywgdGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xuICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpO1xuICAgIHRoaXMucXVlc3Rpb25zVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnBlcnNvblV3QW5zd2Vycyk7XG4gIH1cblxuICBzaG93UXVlc3Rpb24oY3VycmVudFF1ZXN0aW9uOiBhbnkpIHtcbiAgICBsZXQgc2hvd1F1ZXN0aW9uOiBhbnkgPSBmYWxzZTtcbiAgICBsZXQgc3ViUXVlc3Rpb25zOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gcXVlc3Rpb25zUmVzcG9uc2VbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHBlcnNvblJvbGUpXG4gICAgLy8gbGV0IHJvbGUgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bY3VycmVudFNlY3Rpb25JbmRleF1bJ3JvbGUnXVxuXG4gICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICBsZXQgaXNTdWJRdWVzdGlvbk9iamVjdDogYW55ID0gW107XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKSkge1xuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0ID0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5maWx0ZXIoXG4gICAgICAgICAgKHF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT5cbiAgICAgICAgICAgIHF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ViUXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICBzdWJRdWVzdGlvbnMucHVzaChzaW5nbGVRdWVzdGlvbik7XG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QuZm9yRWFjaCgoc2luZ2xlU3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdICE9PSAnIScgJiZcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPT09XG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSkgfHxcbiAgICAgICAgICAgIChzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gPT09ICchJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gIT09XG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnIScpWzFdKSB8fFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0/LmluY2x1ZGVzKHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10pXG4gICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5maWx0ZXIoXG4gICAgICAgICAgICAgIC8vICAgKHNpbmdsZU9iajogYW55KSA9PlxuICAgICAgICAgICAgICAvLyAgICAgc2luZ2xlT2JqID09PVxuICAgICAgICAgICAgICAvLyAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxuICAgICAgICAgICAgICAvLyApLmxlbmd0aCA+IDBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvbnMpICYmXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgKSB7XG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKSAmJlxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxuICAgICAgKSAmJlxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxuICAgICAgICBdXG4gICAgICApICYmXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxuICAgICAgXSA9PT0gY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uQW5zd2VyJ11cbiAgICApIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJykge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzaG93UXVlc3Rpb247XG4gIH1cblxuICBzYXZlUXVlc3Rpb25EZXRhaWxzKCkge1xuICAgIC8vIHJlbW92ZSBhbGwgY2hlY2tib3ggcXVlc3Rpb25zIHByZXNlbnQgaW4gdmFsdWVzXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveCkpIHtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZGtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddKTtcbiAgICAgIC8vIGxldCBwb2xpY3lBc3N1cmVkS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddKTtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9uZUtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddKTtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZFR3b0tleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddKTtcbiAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmIChpc05hTihOdW1iZXIoc2luZ2xlS2V5KSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gcG9saWN5QXNzdXJlZEtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gbGlmZUFzc3VyZWRPbmVLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gbGlmZUFzc3VyZWRUd29LZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgIH1cbiAgICAvLyBsZXQgaGVpZ2h0SW5JbmNoZXNPYmo6IGFueSA9IFtdO1xuICAgIC8vIGxldCBoZWlnaHRJbkZlZXRPYmo6IGFueSA9IFtdO1xuICAgIC8vIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmo6IGFueSA9IFtdO1xuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgIC8vICAgbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnKTtcbiAgICAvLyAgIGlmIChsYUluZGV4ICE9PSAtMSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdKSkge1xuICAgIC8vICAgICBoZWlnaHRJbkluY2hlc09iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XG4gICAgLy8gICAgIGhlaWdodEluRmVldE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XG4gICAgLy8gICAgIGhlaWdodEluQ2VudGltZXRlck9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIGFuZCBub24gbWVkaWNhbCBxdWVzdGlvbnMgOlxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iaikgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iajogYW55LCBzaW5nbGVQZXJzb25JbmRleDogYW55KSA9PiB7XG4gICAgLy8gICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10pICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICBsZXQgcm9sZTogYW55ID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcgPyBcImxpZmUgYXNzdXJlZFwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdwb2xpY3lIb2xkZXInID8gXCJwb2xpY3kgaG9sZGVyXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkT25lJyA/IFwiSm9pbnQgTGlmZSAxXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkVHdvJyA/IFwiSm9pbnQgTGlmZSAyXCIgOiBcIlwiO1xuICAgIC8vICAgICAgIHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJiAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnVEVMTF9VU19NT1JFJyB8fCBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdCQVNJQ19ERVRBSUxTJykgJiYgaXNWYWxpZCkge1xuXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSkpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAvLyAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgYmFzaWMgcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ2hhcmRDb3B5TGFuZycgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUSScgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgICAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgIC8vICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSkgJiYgaXNWYWxpZFxuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmXG4gICAgLy8gICAgICAgICAgICAgICByZWRpcmVjdFxuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KGAke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3F1ZXN0aW9uVHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3R5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydwZXJzb25UeXBlJ119YCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgLy8gICAgICAgICAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcblxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyAgIH0pO1xuICAgIC8vICAgICAgICAgICAgIC8vIH1cbiAgICAvLyAgICAgICAgICAgfSk7XG5cbiAgICAvLyAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cbiAgICAvLyAgICAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XG4gICAgLy8gICAgICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgIC8vICAgICAgICAgICAvLyAgICAgKXtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcblxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAvLyAgICAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgfVxuICAgIC8vICAgICAgICAgICAvLyB9KTtcbiAgICAvLyAgICAgICAgICAgLy8gfVxuXG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgfSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cblxuICAgIC8vIGlmICgoaXNWYWxpZCB8fCBzYXZlZHJhZnQpIHx8IHRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcbiAgICAvLyBpZiAoaXNWYWxpZCkge1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheSh0cnVlKTtcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxT2JqOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckxhOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvclBoOiBhbnkgPSBbXTtcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSkge1xuICAgICAgICAvLyBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBpZiAoXG4gICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJlxuICAgICAgICAvLyAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgIC8vICAgICAnVEVMTF9VU19NT1JFJyB8fFxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAvLyAgICAgICAnQkFTSUNfREVUQUlMUycpXG4gICAgICAgIC8vICkge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJiAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICApICYmICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHBhc3MgaGVpZ2h0IGluIGNtIG9ialxuICAgICAgICAgICAgbGV0IGNtT2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2NtT2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICAgICApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICAgICAgKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBpbmNoZXNcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gKiAwLjM5MzcwMVxuICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldDogYW55ID1cbiAgICAgICAgICAgICAgcGFyc2VGbG9hdCgoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdKSA+IDEyXG4gICAgICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxuICAgICAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XG4gICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGZlZXRcblxuICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluRmVldCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJyAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikpIHtcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPVxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddKSAqXG4gICAgICAgICAgICAgICAgICAxMiArXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pO1xuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbTogYW55ID0gKFxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcbiAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgICBsZXQgZmVldE9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChmZWV0T2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10udG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluRmVldE9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IGNtT2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGNtT2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5DbSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluQ21BbnN3ZXJPYmplY3Q6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgIGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3QpICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11dID1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkNtQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3QpICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ11dID1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldEFuc3dlck9iamVjdDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3QpICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICAgIGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBpc05vRGlzcGxheVF1ZXN0aW9uSW5TZWN0aW9uOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddXG4gICAgICAgIClcbiAgICAgICAgICA/IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgICAgKHNpbmdsZURhdGE6IGFueSkgPT4gc2luZ2xlRGF0YVsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddIHx8XG4gICAgICAgICAgICBpc05vRGlzcGxheVF1ZXN0aW9uSW5TZWN0aW9uLmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xuICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSAnRW5nbGlzaCc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnI6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCdcbiAgICAgICAgICAgICAgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBmb3IgY2hlY2tib3ggcXVlc3Rpb25cblxuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3Q6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgb2JqWydhbnN3ZXInXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXG4gICAgICAgICAgICAgICAgICAnYW5zd2VyJ1xuICAgICAgICAgICAgICAgIF0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIG5vbiBjaGVja2JveCBxdWVzdGlvblxuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3Q6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdW1xuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcbiAgICAgICAgICAgICAgICBdID1cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmKHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkge1xuICAgICAgICAgICAgLy8gICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgOiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxuICAgICAgICAgICAgLy8gICBpZihxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgLy8gICAgICAgYW5zd2VyOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgPyB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSksICd5eXl5LU1NLWRkJykgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAvLyAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAvLyAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgIC8vICAgICB9O1xuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgLy8gICAgIGlmKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XG4gICAgICAgICAgICAvLyAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlIDogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgIG9ialsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAvLyBvYmplY3QgYWxyZWFkeSB0aGVyZSBzbyBvdmVyIHJpZGUgdGhlIG5ldyBhbnN3ZXJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FyciA6IGFueSA9IFtdO1xuICAgICAgICAgICAgLy8gICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAvLyAgICAgfVxuXG4gICAgICAgICAgICAvLyAgIH1cblxuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZXRGaW5hbmNFbGdibCcpIHtcbiAgICAgICAgICAgIC8vICAgbGV0IGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT4gKHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxuICAgICAgICAgICAgLy8gICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgLy8gICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAvLyAgICAgYW5zd2VyOiB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHksXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgIC8vICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAvLyAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgICAvLyAgIGlmIChmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleF1bJ2Fuc3dlciddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5O1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdDogYW55ID0gW1xuICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMubWFwKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICBpdGVtLnBlcnNvblVXSWQudG9TdHJpbmcoKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QpKSB7XG4gICAgICAgIG1haW5SZXF1ZXN0Rm9yTGEgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzBdXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgbWFpblJlcXVlc3RGb3JQaCA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxuICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzFdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHNhdmVSZXF1ZXN0c0FycmF5OiBhbnkgPSBbXTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KG1haW5SZXF1ZXN0Rm9yTGEpICYmIHRoaXMucGVyc29uVHlwZSgpICE9PSAnUEgnKSB7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdExhID0gbWFpblJlcXVlc3RGb3JMYTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdExhJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxuICAgICAgICApO1xuICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgTEFfJHt0aGlzLmNsdXN0ZXJJZCgpfWAsIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpKVxuICAgICAgICB9XG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yTGEsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yTGEsICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50KSAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50ICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA/IHRydWUgOiAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWFpblJlcXVlc3RGb3JMYSkgJiYgdGhpcy5wZXJzb25UeXBlKCkgPT09ICdQSCcpIHtcbiAgICAgICAgdGhpcy5zYXZlUXVlc3Rpb25SZXF1ZXN0UGggPSBtYWluUmVxdWVzdEZvckxhO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICdzYXZlUXVlc3Rpb25SZXF1ZXN0UGgnLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpXG4gICAgICAgICk7XG4gICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBQSF8ke3RoaXMuY2x1c3RlcklkKCl9YCwgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSkpXG4gICAgICAgIH1cbiAgICAgICAgLy8gIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50KSAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50ICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA/IHRydWUgOiAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucygpO1xuICB9XG5cbiAgZ2V0Q29va2llVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb29raWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICBsZXQgdG9rZW5OYW1lID0gJyc7XG4gICAgbGV0IHRva2VuVmFsdWUgPSAnJztcbiAgICBjb25zdCBpbmRleDIgPSAyO1xuICAgIGNvb2tpZS5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YS5zcGxpdCgnPScpWzBdLmluY2x1ZGVzKG5hbWUpICYmICEhZGF0YS5zcGxpdCgnPScpWzFdKSB7XG4gICAgICAgIHRva2VuTmFtZSA9IGRhdGEuc3BsaXQoJz0nKVswXS50cmltKCk7XG4gICAgICAgIHRva2VuVmFsdWUgPSBkYXRhLnNwbGl0KCc9JylbMV07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG5hbWUgPT09ICdsaW5rJyAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IG51bGwgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHRva2VuVmFsdWUgPSB0b2tlblZhbHVlICsgJz0nICsgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRva2VuVmFsdWU7XG4gIH1cblxuICB2YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnMoZm9jdXNPbkluVmFsaWQgOiBhbnkgPSBmYWxzZSkge1xuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xuICAgIGxldCB2YWxpZGF0aW9uTWVzc2FnZSA6IGFueSA9ICcnO1xuICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAgICAgJ1RFTExfVVNfTU9SRScgfHxcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnIHx8XG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgICAgICAgICdQRVJTT05BTF9ERVRBSUxTJykgJiZcbiAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcbiAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmXG4gICAgICAgICAgICAgICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXNgO1xuICAgICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0JztcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAgICAgLy8gICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgLy8gICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGVcbiAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG5cbiAgICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIEhlaWdodCBpbiBjZW50aW1ldGVyYDtcblxuICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9ICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICBpc1ZhbGlkICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIC8vICgoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAvLyAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgICAgICAgICAgLy8gICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSlcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJHtzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddfWA7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlmIChcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyAmJlxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgLy8gKSB7XG4gICAgICAgICAgLy8gICBsZXQgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iajogYW55ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5xdWVzdGlvbnNQYXNzcG9ydFVwbG9hZE9iai5maWx0ZXIoKHNpbmdsZU9iajogYW55KSA9PiAoc2luZ2xlT2JqWydwZXJzb25UeXBlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddICYmIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVPYmpbJ2Rtc0lkJ10pKSk7XG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xuICAgICAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcbiAgICAgICAgICAvLyAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgICAgLy8gICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlXG4gICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgICAgICAgLy8gICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAgICAgICAvLyAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XG4gICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIC8vICAgfVxuXG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGRlY2xhcmF0aW9uIHF1ZXN0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGlzVmFsaWQgJiZcbiAgICAgICAgICAgICAgICAvLyAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXG4gICAgICAgICAgICAgICAgLy8gICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSA9PT1cbiAgICAgICAgICAgICAgICAgICdOJykgfHxcbiAgICAgICAgICAgICAgIXRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dIHx8XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIClcbiAgICAgICAgICAgICAgLy8gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJHtzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddfWA7XG5cbiAgICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcbiAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXG4gICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcbiAgICAgICAgICAvLyAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxuICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXG4gICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xuICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcbiAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAgICAgLy8gICAgICl7XG4gICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXG4gICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV0pICYmXG4gICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAgJiZcbiAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xuXG4gICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVHlwZSgpKSAmJiB0aGlzLnBlcnNvblR5cGUgPT09ICdQSCcpIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkRm9yUEgnLCBpc1ZhbGlkKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3ZhbGlkYXRpb25NZXNzYWdlRm9yTWVkaWNhbFF1ZXN0aW9uc0ZvclBIJywgdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmNsdXN0ZXJJZCgpKSkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBQSF8ke3RoaXMuY2x1c3RlcklkKCl9X2lzVmFsaWRgLCBpc1ZhbGlkKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXNNZWRpY2FsUXVlc3Rpb25zVmFsaWQnLCBpc1ZhbGlkKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd2YWxpZGF0aW9uTWVzc2FnZUZvck1lZGljYWxRdWVzdGlvbnMnLCB2YWxpZGF0aW9uTWVzc2FnZSk7XG5cbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYExBXyR7dGhpcy5jbHVzdGVySWQoKX1faXNWYWxpZGAsIGlzVmFsaWQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbiA6IGFueSkge1xuICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0xpZmVNZWRpQ25kdG4nIHx8IHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJyApIHtcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmxlbmd0aCA+IDBcblxuICAgICAgLy8gaWYgbm9uZSBpcyBzZWxlY3RlZCB0aGVuIHJlbW92ZSBhbGwgYW5kIGNhbGwgQVBJXG4gICAgICBsZXQgaXNOb25lU2VsZWN0ZWQgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maW5kSW5kZXgoKHNpbmdsZU9iaiA6YW55KSA9PiBzaW5nbGVPYmogPT09ICdOb01lZEhpc3RyeScpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGlzTm9uZVNlbGVjdGVkICE9PSAgLTFcbiAgICAgICkge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9iaiA9PT0gJ05vTWVkSGlzdHJ5JylcbiAgICAgIH1cbiAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gW107XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3RcbiAgICAgICAgKSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbjogYW55KSA9PiAoKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB8fCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSAmJiAhc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpICkpO1xuICAgICAgfVxuICAgICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleChcbiAgICAgIC8vICAgKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PlxuICAgICAgLy8gICAgIHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PVxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxuICAgICAgLy8gKTtcbiAgICAgIC8vIHJlbW92ZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgZnJvbSBxdWVzdGlvbnMgcmVzcG9uc2UgbGlzdFxuICAgICAgLy8gaWYgKFxuICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4ICE9PSB0aGlzLm51bWJlckNvbnN0YW50Lm51bWJlcm1pbnVzMSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgKSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9uTGlzdCddXG4gICAgICAvLyAgIClcbiAgICAgIC8vICkge1xuICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcbiAgICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAgIC8vIF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbXG4gICAgICAgIC8vICAgJ3F1ZXN0aW9uc1Jlc3BvbnNlJ1xuICAgICAgICAvLyBdW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXG4gICAgICAgIC8vICAgKHNpbmdsZUxpc3RJdGVtOiBhbnkpID0+XG4gICAgICAgIC8vICAgICB0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIC8vICAgICAgIHNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddXG4gICAgICAgIC8vICAgICApIHx8XG4gICAgICAgIC8vICAgICAoIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cbiAgICAgICAgLy8gICAgICkgJiZcbiAgICAgICAgLy8gICAgICAgIXNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddKVxuICAgICAgICAvLyApO1xuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAvLyAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyBdLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB7XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gICAgIF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG5cbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKChzaW5nbGVTZWN0aW9uIDogYW55KSA9PiAoIXNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pKSk7XG4gICAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVNYXN0ZXJPYmo6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAvLyAgIGlmIChzaW5nbGVNYXN0ZXJPYmpbJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdW1xuICAgICAgLy8gICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbnMnXSA9IFtdO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkodHJ1ZSk7XG5cbiAgICAgIGxldCBzZWxlY3RlZERpc2Vhc2VzIDogYW55ID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBKU09OLnBhcnNlKFxuICAgICAgLy8gICBKU09OLnN0cmluZ2lmeShcbiAgICAgIC8vICAgICB0aGlzLmZldGNoU3ViUXVlc3Rpb25zTGlzdFtcbiAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxuICAgICAgLy8gICAgIF0udG9TdHJpbmcoKVxuICAgICAgLy8gICApXG4gICAgICAvLyApO1xuICAgICAgaWYocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgnYXBpVXJsJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JEaXNlYXNlJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJykgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWydhcGlVcmwnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvckRpc2Vhc2UnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvclBlcnNvblV3SWQnXSkpIHtcbiAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyhxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLCBzZWxlY3RlZERpc2Vhc2VzLCB0aGlzLnBlcnNvblV3SWQpLnN1YnNjcmliZShcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcbiAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddID0gW1xuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IGRhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIChcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgLy8gICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXVxuICAgICAgICAgICAgICAgIC8vICAgKVxuICAgICAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5zdWJNZWRpY2FsUXVlc3Rpb25zRG9tYWluSW50ZXJuYWxWYWx1ZXNMaXN0LnB1c2goXG4gICAgICAgICAgICAgICAgLy8gICAgICAgc3ViRG9tYWluWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAvLyAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkYXRhLnNvcnQoXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHRoaXMucGVyc29uVXdJZCxcbiAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgICAgICAgLy8gbWVyZ2UgbWVkaWNhbCBzdWIgcXVlc3Rpb25zIGludG8gcGVyc29uIHV3IG1haW4gcXVlc3Rpb25zIHJlc3BvbnNlIChyZXF1aXJlZCBmb3Igc2hvdyBxdWVzdGlvbiBmdW5jdGlvbiB0byB3b3JrKVxuICAgICAgICAgICAgICAvLyBjbGVhcmluZyBvbiB0b3AgYmVmb3JlIGFwaSBjYWxsXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXG4gIH1cbiAgb25Eb2N1bWVudEZpbGVQcmV2aWV3KGV2ZW50OiB7IGZpbGU6IEZpbGUsIGluZGV4OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdQcmV2aWV3IHJlcXVlc3RlZCBmb3I6JywgZXZlbnQuZmlsZS5uYW1lKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gZXZlbnQuZmlsZTtcbiAgfVxuXG4gIGNsb3NlRmlsZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3RmlsZSA9IG51bGw7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgXSA9PT0gJ0ZFRVQnICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxuICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApICogMC4zOTM3MDFcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxuICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAoaGVpZ2h0SW5JbmNoZXMgLyAxMilcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICApID4gMTJcbiAgICAgICAgICAgID8gKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMSlcbiAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xuICAgICAgICAgIF0gPSBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgIF0gPVxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzExJyAmJlxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEyJyAmJlxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEzJ1xuICAgICAgICAgICAgICA/IGhlaWdodEluRmVldFxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgICAgICAgICAuY2hhckF0KDApXG4gICAgICAgICAgICAgIDogaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xuICAgICAgICBdID09PSAnQ00nICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCdcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKS50b1N0cmluZygpXG4gICAgICAgICAgKSAqIDEyO1xuICAgICAgICBsZXQgaGVpZ2h0SW5DbTogYW55ID0gKFxuICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICBdID0gaGVpZ2h0SW5DbTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICB9XG5cbiAgZm9jdXNUb0VsZW1lbnQoZWxlbWVudElkOiBhbnkpIHtcbiAgICBjb25zdCBlbGVtZW50Q29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZWxlbWVudElkKTtcbiAgICBjb25zdCBoZWFkZXJPZmZzZXQgPSAxMjA7XG4gICAgaWYgKCFlbGVtZW50Q29sbGVjdGlvbiB8fCBlbGVtZW50Q29sbGVjdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRDb2xsZWN0aW9uWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyOiBhbnkgPSB0aGlzLmdldFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudCk7XG5cbiAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBmcmFtZSBzbyBsYXlvdXQgaXMgc2V0dGxlZCBiZWZvcmUgc2Nyb2xsaW5nLlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyID09PSB3aW5kb3dcbiAgICAgICAgICA/IHsgdG9wOiAwIH1cbiAgICAgICAgICA6IChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyID09PSB3aW5kb3dcbiAgICAgICAgICA/IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IDBcbiAgICAgICAgICA6IChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcblxuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPVxuICAgICAgICBlbGVtZW50UmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCArIGN1cnJlbnRTY3JvbGwgLSBoZWFkZXJPZmZzZXQ7XG5cbiAgICAgIGlmIChzY3JvbGxDb250YWluZXIgPT09IHdpbmRvdykge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRhcmdldFBvc2l0aW9uLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoc2Nyb2xsQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUbyh7XG4gICAgICAgICAgdG9wOiB0YXJnZXRQb3NpdGlvbixcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYmxpbmtfbWUnLCAnaW52YWxpZC1maWVsZC1vbmUtdWknKTtcblxuICAgICAgLy8gUmVtb3ZlIGJsaW5rIGFuaW1hdGlvbiBhZnRlciBkdXJhdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYmxpbmtfbWUnKTtcbiAgICAgIH0sIDM1MDApO1xuXG4gICAgICAvLyBSZW1vdmUgaW52YWxpZC1maWVsZC1vbmUtdWkgY2xhc3Mgd2hlbiB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBmaWVsZFxuICAgICAgY29uc3QgcmVtb3ZlSW52YWxpZENsYXNzID0gKGV2ZW50PzogYW55KSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaW52YWxpZC1maWVsZC1vbmUtdWknKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgYWxsIGV2ZW50IGxpc3RlbmVycyBmcm9tIG1haW4gZWxlbWVudFxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzLCB0cnVlKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCduZ01vZGVsQ2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCBldmVudCBsaXN0ZW5lcnMgZnJvbSBjaGlsZCByYWRpby9jaGVja2JveCBpbnB1dHNcbiAgICAgICAgY29uc3QgcmFkaW9JbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgICAgICBjb25zdCBjaGVja2JveElucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICAgIHJhZGlvSW5wdXRzLmZvckVhY2goKHJhZGlvOiBhbnkpID0+IHtcbiAgICAgICAgICByYWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgIHJhZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNoZWNrYm94SW5wdXRzLmZvckVhY2goKGNoZWNrYm94OiBhbnkpID0+IHtcbiAgICAgICAgICBjaGVja2JveC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgIGNoZWNrYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICAvLyBGb3IgdGV4dGJveCAtIHRyaWdnZXJzIG9uIHR5cGluZ1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgIC8vIEZvciBzZWxlY3QgZHJvcGRvd24gLSB0cmlnZ2VycyBvbiB2YWx1ZSBjaGFuZ2VcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gRm9yIGRpcmVjdCBjbGljayBvbiB0aGUgZWxlbWVudCAtIHVzZSBjYXB0dXJlIHBoYXNlIHRvIGNhdGNoIGNoaWxkIGV2ZW50c1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcywgdHJ1ZSk7XG5cbiAgICAgIC8vIEZvciBBbmd1bGFyIG5nTW9kZWwgY2hhbmdlc1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCduZ01vZGVsQ2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gSGFuZGxlIHJhZGlvIGJ1dHRvbnMgd2l0aGluIHRoZSBlbGVtZW50IChjb21tb24gaW4gQW5ndWxhciBmb3JtcylcbiAgICAgIGNvbnN0IHJhZGlvSW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKTtcbiAgICAgIHJhZGlvSW5wdXRzLmZvckVhY2goKHJhZGlvOiBhbnkpID0+IHtcbiAgICAgICAgcmFkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgcmFkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBjaGVja2JveGVzIHdpdGhpbiB0aGUgZWxlbWVudCAoZm9yIG11bHRpLXNlbGVjdClcbiAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgIGNoZWNrYm94SW5wdXRzLmZvckVhY2goKGNoZWNrYm94OiBhbnkpID0+IHtcbiAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjcm9sbGFibGVQYXJlbnQobm9kZTogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBXaW5kb3cge1xuICAgIGxldCBwYXJlbnQgPSBub2RlPy5wYXJlbnRFbGVtZW50O1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGNvbnN0IG92ZXJmbG93WSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkub3ZlcmZsb3dZO1xuICAgICAgaWYgKG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93O1xuICB9XG59XG4iLCJcbjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXG4gICAgICAgIHNlY3Rpb25bJ3Nob3dTZWN0aW9uJ11cbiAgICAgIFwiXG4gICAgICBjbGFzcz1cImNhcmQgcC0zIG1iLTRcIlxuICAgICAgaWQ9XCJwZXJzb25Vd01lZGljYWxRdWVzdGlvbnNcIlxuICAgID5cbiAgICAgIDxoNiBjbGFzcz1cInBhZ2UtdGl0bGUgYm9sZC1sYWJlbFwiPlxuICAgICAgICB7eyBnZXRUaXRsZUNhc2Uoc2VjdGlvbltcInNlY3Rpb25OYW1lXCJdKSB9fVxuICAgICAgPC9oNj5cbiAgICAgIDxsaWItaHItbGluZSBbZmllbGRdPVwiaG9yaXpvbnRhbExpbmVPYmpcIiAvPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb25zIG9mIHNlY3Rpb25bJ3F1ZXN0aW9ucyddXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnXCI+XG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XG4gICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwicXVlc3Rpb25zWydxdWVzdGlvblRleHQnXVwiPjwvaDM+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmxlIGQtYmxvY2tcIlxuICAgICAgICAgICAgPnt7IHF1ZXN0aW9uc1tcInF1ZXN0aW9uVGV4dFwiXSB9fVxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMub3B0aW9uYWxRdWVzdGlvbiA9PT0gJ04nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2xhYmVsPiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbXktMVwiPlxuICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoYmx1cik9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0hFSUdIVElOUFVUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2FyZC10b3BpYyBkLWJsb2NrIGZpZWxkLWxhYmxlXCJcbiAgICAgICAgICAgID5IZWlnaHRcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzc109XCIgJ2NvbC1hdXRvIHB4LTAgbXktMCBweS0wIGhlaWdodGlucHV0IG1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcIlxuICAgICAgICAgICAgaWQ9XCJtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLTEyIG15LTFcIiAqbmdJZj1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIj5cbiAgICAgICAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11cIiAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnTUFQJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cblxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsb25naXR1ZGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbG9uZ2l0dWRlXCJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcbiAgICAgICAgICByZWFkb25seVxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5MYXRpdHVkZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGF0aXR1ZGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIlxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2FkZHJlc3NJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIGFkZHJlc3NcIlxuICAgICAgICAoa2V5dXApPVwib25BZGRyZXNzSW5wdXRLZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cInNob3dEcm9wZG93biA9IHRydWVcIlxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgID5cbiAgICAgIDxkaXZcbiAgICAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgY2xhc3M9XCJhdXRvY29tcGxldGUtZHJvcGRvd24gcG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgbXQtMVwiXG4gICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwOyBtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IGJvcmRlci1yYWRpdXM6IDRweDsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nRm9yPVwibGV0IHN1Z2dlc3Rpb24gb2YgYWRkcmVzc1N1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxuICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1wiXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEluZGV4ID0gaVwiXG4gICAgICBbY2xhc3MuYmctbGlnaHRdPVwiaG92ZXJlZEluZGV4ID09PSBpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPnt7IHN1Z2dlc3Rpb24ubWFpbl90ZXh0IH19PC9kaXY+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgc3VnZ2VzdGlvbi5zZWNvbmRhcnlfdGV4dCB9fTwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlN0YXJ0IHR5cGluZyB0byBzZWFyY2ggZm9yIGFkZHJlc3Nlczwvc21hbGw+XG4gICAgPC9kaXY+XG4gICAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cbiAgICAgICAgICAgICAgPG1hcC1tYXJrZXIgW3Bvc2l0aW9uXT1cImN1cnJlbnRDb29yZGluYXRlc1wiPjwvbWFwLW1hcmtlcj5cbiAgICAgICAgICAgIDwvZ29vZ2xlLW1hcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSAmJlxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItcmFkaW8gWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxpYi1tdWx0aXBsZS1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGliLWNoZWNrYm94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoZmlsZVByZXZpZXcpPVwib25Eb2N1bWVudEZpbGVQcmV2aWV3KCRldmVudClcIiAvPlxuICAgICAgICAgIDxsaWItZmlsZS1wcmV2aWV3XG4gICAgICAgICAgICAqbmdJZj1cInByZXZpZXdGaWxlXCJcbiAgICAgICAgICAgIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIlxuICAgICAgICAgICAgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgICAgKGNsb3NlZCk9XCJjbG9zZUZpbGVQcmV2aWV3KClcIj5cbiAgICAgICAgICA8L2xpYi1maWxlLXByZXZpZXc+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4iXX0=
|