@eqproject/eqp-dynamic-module 2.10.62 → 2.10.64

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.
@@ -779,6 +779,9 @@ export class EqpDynamicModuleConfiguratorComponent {
779
779
  this.form.Triggers = null;
780
780
  this.form.ObjectActionButtons = JSON.stringify(this.form.ActionButtons);
781
781
  this.form.ActionButtons = null;
782
+ if (this.form.Code == null) {
783
+ this.setCode(this.form.Name);
784
+ }
782
785
  // chiamata effettiva
783
786
  const dynamicModuleParams = [
784
787
  {
@@ -1549,4 +1552,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1549
1552
  type: ViewChild,
1550
1553
  args: ["dialogAiEdit", { static: true }]
1551
1554
  }] } });
1552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFB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bkQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNbEQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVdkMsYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR0csR0FBRztzQkFBWixNQUFNO2dCQUl3QyxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHRSxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBYUEsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHsgVGhyb3dTdG10IH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIFR5cGVDb2x1bW4sXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXRhYmxlXCI7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIERhdGFHZXR0ZXIsIERhdGFHZXR0ZXJUeXBlRW51bSwgRmllbGRJbnZpc2liaWxpdHlFbnVtLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2NvbnRleHQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBBY3Rpb25PblJlY29yZCxcclxuICBGb3JtLFxyXG4gIEZvcm1GaWVsZEdyb3VwLFxyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSxcclxuICBGb3JtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFycmF5VmFsaWRhdG9ycyB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgVHJpZ2dlciwgQWN0aW9uQnV0dG9uLCBBY3Rpb25GbGFnRW51bSwgRmlyZVRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRlc3R1YWxpemF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9nZXR0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZpZWxkRXh0cmFDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkRXh0cmFDb25maWcubW9kZWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZmllbGRzRXh0cmFDb25maWc6IEFycmF5PEZpZWxkRXh0cmFDb25maWc+O1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnKCk7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlOiBzdHJpbmcgPSBcImFkZE9yRWRpdFwiOyAvLyBFeHBvcnRcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgdHJpZ2dlcnM6IGFueTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBhbnk7XHJcbiAgQElucHV0KCkgY29udGVzdHVhbGl6YXRpb246IEFycmF5PENvbnRlc3R1YWxpemF0aW9uPjtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnk7IC8vIEVzZW1waW86IHtjdXJyb2xlOiByb2xlLCB1c2VyOiB1c2VyLCBtZWRpY2FsOiBtZWRpY2FsZXhhbWluYXRpb259XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFRva2VuIGRhIHVzYXJlIG5lZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBzb2xvIHNlIHZpZW5lIHBvcG9sYXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIuXHJcbiAgICovXHJcbiAgdXNlclRva2VuOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYXppb25lIGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIGRhdGkuXHJcbiAgICogUHXDsiBlc3NlcmUgZGVmaW5pdGEgZGFsbCd1dGVudGUgb3BwdXJlIGxhc2NpYXRhIG51bGwsIHZpZW5lIHBvcG9sYXRhIGNvbiBkZWlcclxuICAgKiB2YWxvcmkgZGkgZGVmYXVsdCBzZSB2aWVuZSB2YWxvcml6emF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiIGFsdHJpbWVudGlcclxuICAgKiB2aWVuZSBsYXNjaWF0YSBudWxsIGUgbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgYWwgc2VydmVyLlxyXG4gICAqL1xyXG4gIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uID0gbnVsbDtcclxuICAvKipcclxuICAgKiBVcmwgZGVsIHNlcnZlciBkYSBjaGlhbWFyZSBwZXIgcmVjdWVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG5cclxuICAvKiBleHBvcnQgdmFyaWFibGVzICovXHJcbiAgZG93bmxvYWROYW1lOiBzdHJpbmc7XHJcbiAgZG93bmxvYWRKc29uSHJlZjogYW55O1xyXG4gIHN0cmluZ2lmaWVkRm9ybTogc3RyaW5nO1xyXG5cclxuICAvKiBpbXBvcnQgdmFyaWFibGVzICovXHJcbiAgaW1wb3J0ZWRNb2R1bGU6IHN0cmluZyA9IG51bGw7IC8vIGpzb24gb2JqZWN0XHJcbiAgZGlhbG9nSW1wb3J0UmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0ltcG9ydFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dJbXBvcnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIGJhY2t1cEZvcm06IEZvcm0gPSBudWxsO1xyXG4gIHNhdmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3JnYUlEOiBzdHJpbmcgPSBudWxsO1xyXG4gIFVzZXJJRDogbnVtYmVyID0gMzY7XHJcbiAgaW5uZXJGb3JtTWFuYWdtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5uZXJGb3JtUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIC8qIENPTkZJR1VSQVpJT05FIFBFUiBWSVNVQUxJWlpBWklPTkUgRk9STSBDUkVBVEEgKi9cclxuICB2aWV3Q29uZmlnOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyhcclxuICAgIHRydWUsXHJcbiAgICBmYWxzZSxcclxuICAgIGZhbHNlLFxyXG4gICAgXCIwXCJcclxuICApO1xyXG5cclxuICBmb3JtRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwID0gbnVsbDtcclxuICBmb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgcHJldmlld0Zvcm06IEZvcm07XHJcbiAgZm9ybUZpZWxkR3JvdXBOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcclxuXHJcbiAgLy8jcmVnaW9uIEVudW1lcmF0b3JpIHVzYXRpIG5lbGwnaHRtbFxyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBGb3JtU2NhbGFyVHlwZUVudW0gPSBGb3JtU2NhbGFyVHlwZUVudW07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhemlvbmUvbW9kaWZpY2EgY2FtcG9cclxuICBmaWVsZHNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWVsZHNUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZmllbGRzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkRmllbGQ6IEJhc2VGaWVsZDtcclxuICBpbmRleFNlbGVjdGVkRmllbGQ6IG51bWJlcjtcclxuICBhY3Rpb25PblJlY29yZEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBkaWFsb2dGaWVsZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dGaWVsZFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dGaWVsZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIHVuYSBGb3JtIGRpIGRldHRhZ2xpb1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtOiBGb3JtO1xyXG4gIGluZGV4U2VsZWN0ZWRJbm5lckZvcm06IG51bWJlcjtcclxuICBkaWFsb2dJbm5lckZvcm1SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nSW5uZXJGb3JtXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nSW5uZXJGb3JtOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIGlubmVyRm9ybUNvbmZpZzogRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZztcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkaSB1bmEgRm9ybVxyXG4gIGFjdGlvbnNPblJlY29yZENvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImFjdGlvbnNPblJlY29yZFRhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGFjdGlvbnNPblJlY29yZFRhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEFjdGlvbjogQWN0aW9uT25SZWNvcmQ7XHJcbiAgaW5kZXhTZWxlY3RlZEFjdGlvbjogbnVtYmVyO1xyXG4gIGRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FjdGlvbk9uUmVjb3JkXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nQWN0aW9uT25SZWNvcmQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSBkZWkgYm90dG9uaSBhemlvbmVcclxuICBhY3Rpb25CdXR0b25zQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiYWN0aW9uQnV0dG9uc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGFjdGlvbkJ1dHRvbnNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRBY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbjtcclxuICBpbmRleFNlbGVjdGVkQWN0aW9uQnV0dG9uOiBudW1iZXI7XHJcbiAgZGlhbG9nQWN0aW9uQnV0dG9uUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FjdGlvbkJ1dHRvblwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0FjdGlvbkJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgYWN0aW9uQnV0dG9uc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBhY3Rpb25zRmxhZyA9IEFjdGlvbkZsYWdFbnVtO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIHF1YW5kbyBzaSBzYWx2YSB1bmEgZm9ybSBlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZUZvcm1FdmVudDogRXZlbnRFbWl0dGVyPEZvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpb2RpIHVuYSBmb3JtIGFsbCdlbmRwb2ludCBzcGVjaWZpY2F0by5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8vIE91dCBjb21wb25lbnRlIGVzdGVybm9cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcbiAgLy8gVHJpZ2dlcnNcclxuICBkaWFsb2dUcmlnZ2Vyc1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dUcmlnZ2Vyc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dUcmlnZ2VyczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzZWxlY3RlZFRyaWdnZXI6IFRyaWdnZXI7XHJcbiAgdHJpZ2dlcnNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0cmlnZ2Vyc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0cmlnZ2Vyc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgc2hvd0FsbEZpZWxkczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBDb250ZXN0dWFsaXphdGlvblxyXG4gIHNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb246IHN0cmluZyA9IG51bGw7XHJcbiAgc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICBzaG93RGVsZXRlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGaWVsZHM6IEFycmF5PEJhc2VGaWVsZD4gPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG5cclxuICAvLyBBSSBFZGl0IGRpYWxvZ1xyXG4gIGRpYWxvZ0FpRWRpdFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBaUVkaXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nQWlFZGl0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIGFpRWRpdFByb21wdDogc3RyaW5nID0gXCJcIjtcclxuICBhaUVkaXRBdHRhY2htZW50czogQXJyYXk8eyBmaWxlTmFtZTogc3RyaW5nOyBiYXNlNjRDb250ZW50OiBzdHJpbmc7IG1lZGlhVHlwZTogc3RyaW5nIH0+ID0gW107XHJcbiAgYWlFZGl0QXV0b3NhdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhaUVkaXRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIENvc3RhbnRpIHBlciBsYSBzdGltYSBkZWwgY29zdG8gQUkgKEhhaWt1IDQuNSwgcHJlenppIFVTRC9NVG9rKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TID0gMl8wMDA7ICAvLyB0b2tlbiBmaXNzaTogRmxkSnNvbk1vZGlmaWVyU2tpbGwubWRcclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX1RPS0VOU19QRVJfRklFTEQgPSAxMDA7ICAgIC8vIHN0aW1hIHRva2VuIHBlciBjYW1wbyBkZWwgZm9ybSBzZXJpYWxpenphdG9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX09VVFBVVF9UT0tFTlMgPSAzXzUwMDsgIC8vIHN0aW1hIGNvbnNlcnZhdGl2YSBvdXRwdXQgSlNPTiBtb2RpZmljYXRvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9QREZfQ0hBUlMgPSAxNV8wNjA7IC8vIGZpbmVzdHJhIG1heCBlc3RyYXR0YSBwZXIgYWxsZWdhdG8gUERGXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9DSEFSU19QRVJfVE9LRU4gPSA0OyAgICAgIC8vIGNoYXIvdG9rZW4gbWVkaSBwZXIgdGVzdG8gaXRhbGlhbm9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX0VVUl9VU0RfUkFURSA9IDEuMTA7ICAgLy8gdGFzc28gRVVSL1VTRCBhcHByb3NzaW1hdG9cclxuXHJcbiAgZ2V0IGFpRWRpdENvc3RGaXJzdEV1cigpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZm9ybVRva2VucyA9ICh0aGlzLmZvcm0/LkZpZWxkcz8ubGVuZ3RoID8/IDApICogdGhpcy5BSV9UT0tFTlNfUEVSX0ZJRUxEO1xyXG4gICAgY29uc3QgdmFySW5wdXQgPSAodGhpcy5haUVkaXRQcm9tcHQ/Lmxlbmd0aCA/PyAwKSAvIHRoaXMuQUlfQ0hBUlNfUEVSX1RPS0VOXHJcbiAgICAgICsgdGhpcy5haUVkaXRBdHRhY2htZW50cy5sZW5ndGggKiAodGhpcy5BSV9QREZfQ0hBUlMgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTik7XHJcbiAgICBjb25zdCB1c2QgPSAodGhpcy5BSV9NT0RJRklFUl9TS0lMTF9UT0tFTlMgKiAwLjEwICsgKGZvcm1Ub2tlbnMgKyB2YXJJbnB1dCkgKiAwLjA4ICsgdGhpcy5BSV9PVVRQVVRfVE9LRU5TICogMC40MCkgLyAxXzAwMF8wMDA7XHJcbiAgICByZXR1cm4gdXNkIC8gdGhpcy5BSV9FVVJfVVNEX1JBVEU7XHJcbiAgfVxyXG5cclxuICBnZXQgYWlFZGl0Q29zdFN1YnNlcXVlbnRFdXIoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZvcm1Ub2tlbnMgPSAodGhpcy5mb3JtPy5GaWVsZHM/Lmxlbmd0aCA/PyAwKSAqIHRoaXMuQUlfVE9LRU5TX1BFUl9GSUVMRDtcclxuICAgIGNvbnN0IHZhcklucHV0ID0gKHRoaXMuYWlFZGl0UHJvbXB0Py5sZW5ndGggPz8gMCkgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTlxyXG4gICAgICArIHRoaXMuYWlFZGl0QXR0YWNobWVudHMubGVuZ3RoICogKHRoaXMuQUlfUERGX0NIQVJTIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU4pO1xyXG4gICAgY29uc3QgdXNkID0gKHRoaXMuQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TICogMC4wMDggKyAoZm9ybVRva2VucyArIHZhcklucHV0KSAqIDAuMDggKyB0aGlzLkFJX09VVFBVVF9UT0tFTlMgKiAwLjQwKSAvIDFfMDAwXzAwMDtcclxuICAgIHJldHVybiB1c2QgLyB0aGlzLkFJX0VVUl9VU0RfUkFURTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEFpRWRpdENvc3QoZXVyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGV1ci50b0ZpeGVkKDYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTmV3Rm9ybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mb3JtPy5JRDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z01vZGUgPSB0aGlzLmRlYnVnTW9kZTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ25nT25Jbml0IC0gY29uZmlndXJhdGlvbnMnLCB0aGlzLmNvbmZpZ3VyYXRpb25zKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ25nT25Jbml0IC0gZm9ybUlEJywgdGhpcy5mb3JtSUQpO1xyXG5cclxuICAgIHRoaXMuYmFzZVNlcnZlclVybCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuYmFzZVNlcnZlclVybDtcclxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuY29udGV4dDtcclxuICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5lbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgICAvLyB0aGlzLmZvcm1JRCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZm9ybUlEO1xyXG4gICAgdGhpcy51c2VyVG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLnVzZXJUb2tlbjtcclxuXHJcbiAgICB0aGlzLmZvcm0gPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtO1xyXG4gICAgdGhpcy5vcmdhSUQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5vcmdhSUQ7XHJcbiAgICB0aGlzLlVzZXJJRCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLlVzZXJJRDtcclxuICAgIHRoaXMuaW5uZXJGb3JtTWFuYWdtZW50ID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtTWFuYWdtZW50O1xyXG4gICAgdGhpcy5pbm5lckZvcm1SZWYgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWY7XHJcblxyXG4gICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpO1xyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xyXG4gICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5TZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogU2UgbGEgcHJvcHJpZXTDoCBiYXNlU2VydmVyVXJsIMOoIG51bGwgZSBub24gc29ubyBzdGF0aSBjb25maWd1cmF0aSBpIHZhcmkgZW5kcG9pbnQgYWxsb3JhXHJcbiAgICogbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgaHR0cCBwZXIgcmVjdXBlcmFyZS9zYWx2YXJlIGkgZGF0aS5cclxuICAgKi9cclxuICBjb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJiB0aGlzLmJhc2VTZXJ2ZXJVcmwpIHtcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgICAgICAgIHRoaXMuYmFzZVNlcnZlclVybCxcclxuICAgICAgICAgIHRoaXMudXNlclRva2VuXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybUlEKSB7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LlBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzdHJpbmdTYW5pdGl6ZXIodmFsdWUpIHtcclxuICAgIGlmICghVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKHZhbHVlKSkge1xyXG4gICAgICBhbGVydChcImVycm9yZSEgZXJhbm8gcHJlc2VudGkgZGVsbGUgcGFyZW50ZXNpLlwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXROYW1lKE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnN0cmluZ1Nhbml0aXplcihOYW1lKSkge1xyXG4gICAgICBjb25zdCBSZWdFeHBQYXJldGVzaXMgPSAvW1xcKFxcKVxcW1xcXVxce1xcfV0vZztcclxuICAgICAgLy8gUmltdW92aSB0dXR0ZSBsZSBwYXJlbnRlc2kgbm9uIGJpbGFuY2lhdGVcclxuICAgICAgdGhpcy5mb3JtLk5hbWUgPSBOYW1lLnJlcGxhY2UoUmVnRXhwUGFyZXRlc2lzLCAnJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb3JtLklEID09IG51bGwpIHsgLy8gdGhpcy5mb3JtLkNvZGUgPT0gbnVsbCB8fCB0aGlzLmZvcm0uQ29kZSA9PSB1bmRlZmluZWQgfHwgdGhpcy5mb3JtLkNvZGUgPT0gXCJcIiApe1xyXG4gICAgICB0aGlzLnNldENvZGUodGhpcy5mb3JtLk5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRDb2RlKENvZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdHJpbmdTYW5pdGl6ZXIoQ29kZSk7XHJcblxyXG4gICAgY29uc3QgUmVnRXhwUGxhaW4gPSAvW15cXHddL2c7XHJcbiAgICB0aGlzLmZvcm0uQ29kZSA9IENvZGUudG9VcHBlckNhc2UoKS5yZXBsYWNlKFJlZ0V4cFBsYWluLCBcIlwiKTtcclxuICB9XHJcbiAgb21pdF9zcGVjaWFsX2NoYXIoZXZlbnQpIHtcclxuICAgIHZhciBrO1xyXG4gICAgayA9IGV2ZW50LmtleUNvZGU7IC8vICAgICAgICAgayA9IGV2ZW50LmtleUNvZGU7ICAoQm90aCBjYW4gYmUgdXNlZClcclxuICAgIGlmIChrID09IDM0KSB7XHJcbiAgICAgIGV2ZW50LmtleUNvZGUgPSAwO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBJTVBPUlQgRlVOQ1RJT04gKi9cclxuICBvbkltcG9ydChldmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICBmaWxlUmVhZGVyLnJlYWRBc1RleHQoc2VsZWN0ZWRGaWxlLCBcIlVURi04XCIpO1xyXG4gICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uSW1wb3J0IC0gZmlsZVJlYWRlci5yZXN1bHQudG9TdHJpbmcoKScsIGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCkpO1xyXG4gICAgICB0aGlzLmltcG9ydGVkTW9kdWxlID0gZmlsZVJlYWRlci5yZXN1bHQudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmltcG9ydGVkTW9kdWxlICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoY29uZmlybShcInN0YWkgcGVyIHNvdnJhc2NyaXZlcmUgaWwgbW9kdWxvXCIpKSB7XHJcbiAgICAgICAgICAvLyBjaGlhbW8gaWwgcGFyc2UgY29zw6wgZGEgbm9uIGNyZWFyZSB1biByZWZlcmVuY2VCaW5kaW5nXHJcbiAgICAgICAgICB2YXIgaW1wb3J0ZWRGb3JtOiBGb3JtID0gSlNPTi5wYXJzZSh0aGlzLmltcG9ydGVkTW9kdWxlKTtcclxuICAgICAgICAgIGltcG9ydGVkRm9ybS5JRCA9IFwiXCI7XHJcbiAgICAgICAgICBpbXBvcnRlZEZvcm0uTmFtZSA9IGltcG9ydGVkRm9ybS5OYW1lICsgXCIgKEltcG9ydGF0bylcIjtcclxuXHJcbiAgICAgICAgICBpbXBvcnRlZEZvcm0gPSB0aGlzLnNldEltcG9ydGVkRm9ybShpbXBvcnRlZEZvcm0pO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKGltcG9ydGVkRm9ybSk7XHJcbiAgICAgICAgICB0aGlzLnNldE5hbWUoaW1wb3J0ZWRGb3JtLk5hbWUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY2xvc2VJbXBvcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWxlcnQoXCJzZWxlemlvbmEgdW4gZmlsZVwiKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZpbGVSZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICBhbGVydChcInNlbGV6aW9uYSB1biBmaWxlIHZhbGlkbyBvIGNvbnRyb2xsYSBjaGUgbm9uIHNpYSBjb3Jyb3R0b1wiKTtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2V0SW1wb3J0ZWRGb3JtKGZvcm06IEZvcm0pIHtcclxuXHJcbiAgICAvLyBNb2RpZmljYSBkZWwgY3JlYXRpb24gdXNlciBzdSBJbXBvcnRcclxuICAgIGZvcm0uQ3JlYXRpb25Vc2VyID0gdGhpcy5Vc2VySUQ7XHJcblxyXG4gICAgLy8gTW9kaWZpY2EgZGVpIEZpZWxkIHN1IEltcG9ydFxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdKSB7XHJcbiAgICAgICAgKGZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgICAgYXR0YWNobWVudC5JRCA9IDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIGltcG9ydE1vZHVsZSgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ltcG9ydCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAvLyB3aWR0aDogXCI3NSVcIixcclxuICAgICAgLy8gbWF4SGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgICAvLyBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlSW1wb3J0KCkge1xyXG4gICAgdGhpcy5kaWFsb2dJbXBvcnRSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgLyogRU5EIElNUE9SVCBGVU5DVElPTiAqL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgZGkgZXNwb3J0YXppb25lIG1vZHVsb1xyXG4gICAqL1xyXG5cclxuICBleHBvcnQoKSB7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuRXhwb3J0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAoYmFzZTY0cmVzOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgbmV3QmxvYiA9IG5ldyBCbG9iKFtiYXNlNjRyZXNdLCB7IHR5cGU6IFwidGV4dC9wbGFpblwiIH0pO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXdCbG9iKTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgbGluay5ocmVmID0gZGF0YTtcclxuICAgICAgICBsaW5rLmRvd25sb2FkID0gXCJleHBvcnRfXCIgKyB0aGlzLmZvcm1JRCArIFwiX2Zvcm0udHh0XCI7IC8vIHNldCBhIG5hbWUgZm9yIHRoZSBmaWxlXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShuZXcgRm9ybSgpKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICovXHJcbiAgZ2V0Rm9ybUJ5SUQoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybUlEICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUocmVzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShuZXcgRm9ybSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VybyBsJ2V4cG9ydCBkZWwgZm9ybVxyXG4gICAqL1xyXG5cclxuICBjb25maWd1cmVFeHBvcnQocmVzOiBGb3JtKSB7XHJcblxyXG4gICAgLyogZ2V0dGluZyByZWFkeSBmb3IgZXhwb3J0ICovXHJcbiAgICBsZXQgY2xvbmUgPSBuZXcgRm9ybSgpO1xyXG4gICAgY2xvbmUuQ29kZSA9IFwiSU1QT1JUX1wiICsgcmVzLkNvZGU7XHJcbiAgICBjbG9uZS5OYW1lID0gXCJpbXBvcnRfXCIgKyByZXMuTmFtZTtcclxuICAgIGNsb25lLkRlc2NyaXB0aW9uID0gcmVzLkRlc2NyaXB0aW9uO1xyXG4gICAgY2xvbmUuRm9ybVNjYWxhclR5cGUgPSByZXMuRm9ybVNjYWxhclR5cGU7XHJcbiAgICBjbG9uZS5Gb3JtRmllbGRzR3JvdXBzID0gcmVzLkZvcm1GaWVsZHNHcm91cHM7XHJcbiAgICBjbG9uZS5BY3Rpb25zT25SZWNvcmQgPSByZXMuQWN0aW9uc09uUmVjb3JkO1xyXG4gICAgY2xvbmUuRmllbGRzID0gcmVzLkZpZWxkcztcclxuICAgIGNsb25lLk9iamVjdEZpZWxkcyA9IHJlcy5PYmplY3RGaWVsZHM7XHJcbiAgICBjbG9uZS5Jbm5lckZvcm1zID0gcmVzLklubmVyRm9ybXM7XHJcbiAgICBjbG9uZS5Sb290RW50aXR5SUQgPSByZXMuUm9vdEVudGl0eUlEO1xyXG4gICAgY2xvbmUuT3JnYUlEID0gcmVzLk9yZ2FJRDtcclxuXHJcbiAgICB0aGlzLmRvd25sb2FkTmFtZSA9IFwiZXhwb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICB0aGlzLnN0cmluZ2lmaWVkRm9ybSA9IEpTT04uc3RyaW5naWZ5KGNsb25lKTtcclxuICAgIHRoaXMuZG93bmxvYWRKc29uSHJlZiA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXHJcbiAgICAgIFwiZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCxcIiArXHJcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnN0cmluZ2lmaWVkRm9ybSlcclxuICAgICk7XHJcblxyXG4gICAgLyogZW5kIGV4cG9ydCAqL1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHRpcG8gZGkgdmlzdWFsaXp6YXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICogU2UgbCd1dGVudGUgc2NlZ2xpZSB1bmEgdmlzdWFsaXp6YXppb25lIHJhZ2dydXBwYXRhIGlsIG1ldG9kbyBhZ2dpdW5nZSBhbCBGb3JtR3JvdXAgdW4gbnVvdm9cclxuICAgKiBjb250cm9sbG8gcGVyIGwnYXJyYXkgZGVpIG5vbWkgZGVsbGUgc2V6aW9uaSBkYSBjcmVhcmUuXHJcbiAgICovXHJcbiAgb25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRhaW5zKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKTtcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRm9ybUZpZWxkc0dyb3Vwc1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcywgW1xyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICBBcnJheVZhbGlkYXRvcnMubWluTGVuZ2h0KDEpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcyA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1Gb3JtR3JvdXAuY29udGFpbnMoXCJGb3JtRmllbGRzR3JvdXBzXCIpKVxyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBpbnZvY2F0byBhbCBrZXl1cCBuZWxsJ2lucHV0IHBlciBpbnNlcmlyZSBpIG5vbWkgZGVsbGUgc2V6aW9uaSBwZXIgbGEgdmlzdWFsaXp6YXppb25lXHJcbiAgICogcmFnZ3J1cHBhdGEgZGVsbGEgZm9ybS4gUXVhbnRvIGwndXRlbnRlIHByZW1lIGlsIHRhc3RvIGludmlvIHZpZW5lIGFnZ2l1bnRvIGlsIG51b3ZvIG5vbWUgYWxsZVxyXG4gICAqIHNlemlvbmkgZGlzcG9iaWxpIHNlIG5vbiBuZSBlc2lzdGUgdW5hIGNvbiBsbyBzdGVzc28gbm9tZS5cclxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGNoZSByYXBwcmVzZW50YSBpbCBrZXl1cCBzdWxsYSB0YXN0aWVyYS5cclxuICAgKi9cclxuICBvbkZvcm1GaWVsZEdyb3VwTmFtZUtleVVwKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMgPSBuZXcgQXJyYXk8Rm9ybUZpZWxkR3JvdXA+KCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgKG4pID0+IG4uTmFtZSA9PSB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMucHVzaCh7IE5hbWU6IHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEltcG9zdG8gaWwgbnVvdm8gdmFsb3JlIGRlbCBGb3JtQ29udHJvbCBwZXIgYWdnaW9ybmFyZSBsbyBzdGF0byBkZWxsYSBmb3JtLlxyXG4gICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAuY29udHJvbHNbXCJGb3JtRmllbGRzR3JvdXBzXCJdLnNldFZhbHVlKFxyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lID0gbnVsbDtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgbGEgc2V6aW9uZSBzZWxlemlvbmF0YSBkYSBxdWVsbGUgZGlzcG9uaWJpbGkgcGVyIGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIGdyb3VwTmFtZSBOb21lIGRlbGxhIHNlemlvbmUgZGEgZWxpbWluYXJlLlxyXG4gICAqL1xyXG4gIG9uRGVsZXRlRm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5zcGxpY2UoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZpbmRJbmRleCgoZykgPT4gZy5OYW1lID09PSBncm91cE5hbWUpLFxyXG4gICAgICAxXHJcbiAgICApO1xyXG4gICAgLy8gSW1wb3N0byBpbCBudW92byB2YWxvcmUgZGVsIEZvcm1Db250cm9sIHBlciBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRlbGxhIGZvcm0uXHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAuY29udHJvbHNbXCJGb3JtRmllbGRzR3JvdXBzXCJdLnNldFZhbHVlKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgKTtcclxuICAgIC8vIFNlIGVzaXN0b25vIEZpZWxkIGxlZ2F0aSBhbGxhIHNlemlvbmUgY2hlIHNpIHZ1b2xlIGVsaW1pbmFyZSBhbGxvcmEgcm9tcG8gaWwgbGVnYW1lLlxyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZSkpIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuRmllbGRHcm91cCA9PSBncm91cE5hbWUpLmZvckVhY2goXHJcbiAgICAgICAgKGYpID0+IChmLkZpZWxkR3JvdXAgPSBudWxsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cE9yZGluYWxQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uRWRpdEZvcm1GaWVsZEdyb3VwTmFtZShmb3JtRmllbGRHcm91cDogRm9ybUZpZWxkR3JvdXApIHtcclxuXHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Qcm9tcHQoXHJcbiAgICAgIFwiTW9kaWZpY2EgaWwgbm9tZVwiLFxyXG4gICAgICAobmFtZSkgPT4ge1xyXG4gICAgICAgIGZvcm1GaWVsZEdyb3VwLk5hbWUgPSBuYW1lO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSB1biBudW92byBjYW1wbyBvIHNpIHZ1b2xlIG1vZGlmaWNhcmUgdW5vIGVzaXN0ZW50ZS5cclxuICAgKiBNZW1vcml6emEgbCdldmVudHVhbGUgRmllbGQgc2NlbHRvIG9uZSBjcmVhIHVubyBudW92byBwcmltYSBkaSBhcHJpcmUgaWwgZGlhbG9nIHBlciBtb2RpZmljYXJsby9hZ2dpdW5nZXJsby5cclxuICAgKiBAcGFyYW0gZmllbGQgT2dnZXR0byBCYXNlRmllbGQgZGEgbW9kaWZpY2FyZS4gU2UgbnVsbCBuZSB2aWVuZSBjcmVhdGEgdW5hIG51b3ZhIGlzdGFuemEgcGVyIGwnYWdnaXVudGEuXHJcbiAgICovXHJcbiAgb3BlbkZpZWxkRGlhbG9nKGZpZWxkOiBCYXNlRmllbGQgPSBudWxsKSB7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm9wZW5GaWVsZERpYWxvZ1wiLCBmaWVsZCk7XHJcblxyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG5cclxuICAgICAgLy8gRGF0byBjaGUgY29uIGlsIEpTT04ucGFyc2Ugc2kgcGVyZGUgcGVyIHN0cmFkYSBsYSBmb3JtdWxhLCBsYSByaW1ldHRvIGRvcG8uXHJcbiAgICAgIC8vIFRhbnRvIG9yYW1haSBpbCByaWZlcmltZW50byBjb24gXCJmaWVsZFwiIMOoIHN0YXRvIHBlcnNvIGUgc3RpYW1vIHBhc3NhbmRvIHVuYSBzdHJpbmdhXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gZmllbGQuRm9ybXVsYTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9IHsgSW5MaXN0VmlldzogdHJ1ZSwgVmlzaWJsZUlmOiBudWxsLCBGaWVsZHN0eWxlQ1NTOiBcIlwiLCBMYWJlbHN0eWxlQ1NTOiBcIlwiLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dGaWVsZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGaWVsZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNhbHZhIGlsIGNhbXBvIGFwcGVuYSBjcmVhdG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFByaW1hIGRlbCBzYWx2YXRhZ2dpbyBjb250cm9sbGEgc2UgZXNpc3RlIHVuIGFsdHJvIGNhbXBvIGNvbiBsYSBzdGVzc2EgbGFiZWwsIGluIHF1ZXN0b1xyXG4gICAqIGNhc2UgZ2VuZXJlIHVuIGVycm9yZSAoaSBjYW1waSBkZXZvbm8gYXZlcmUgbm9taSwgZSBxdWluZGkgbGFiZWwsIHVuaXZvY2hlIC0gaSBub21pIHZlbmdvbm9cclxuICAgKiByaWNhdmF0aSB1bmVuZG8gbGUgcGFyb2xlIGNoZSBmb3JtYW5vIGxhIGxhYmVsIHRyYW1pdGUgXCJfXCIpLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBkYSBzYWx2YXJlXHJcbiAgICogQHBhcmFtIHJlb3BlbiBzZSBwcmVzZW50ZSByaWFwcmUgbGEgZGlhbG9nIGRpIG1vZGlmaWNhIGRlbCBjYW1wbyBwZXNjYW5kbyBkYWxsYSBsaXN0YSBpbCBwcm9zc2ltbyBpbiBjYXNvIGRpIHZhbG9yZSBbMV0gbyBpbCBwcmVjZWRlbnRlIGluIGNhc28gZGkgdmFsb3JlIFstMV1cclxuICAgKi9cclxuICBvblNhdmVGaWVsZChldjogeyBmaWVsZDogQmFzZUZpZWxkLCByZW9wZW46IG51bWJlciB9KSB7XHJcbiAgICBsZXQgZmllbGQgPSBldi5maWVsZDtcclxuICAgIGxldCByZW9wZW4gPSBldi5yZW9wZW47XHJcblxyXG4gICAgLy8gc2UgYyfDqCBpbCBjYW1wb1xyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIC8vIGNvbnRyb2xsbyBjaGUgbm9uIGNpIHNpYSB1biBhbHRybyBjYW1wbyBjb24gbG8gc3Rlc3NvIGNvZGUgKGxhYmVsKSBlIG5vbiBzaWEgZXNzbyBzdGVzc29cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAoZiwgaSkgPT5cclxuICAgICAgICAgICAgZi5MYWJlbCA9PT0gZmllbGQuTGFiZWwgJiZcclxuICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID09IG51bGxcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGNhbXBpIGNvbiBsbyBzdGVzc28gQ29kaWNlLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZSBobyB1biBpbmRpY2UgaW4gY3VpIGluc2VyaXJlIGlsIGNhbXBvICh2ZXJvc2ltaWxtZW50ZSBzb25vIGluIG1vZGlmaWNhKVxyXG4gICAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbCAmJiB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBmaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDDqCB1biBjYW1wbyBudW92b1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICAgICAgLy8gc2Ugw6ggaWwgcHJpbW8gY2FtcG8gY2hlIHN0byBpbnNlcmVuZG8gcHJlcGFybyB1biBhcnJheVxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG5ldyBBcnJheTxCYXNlRmllbGQ+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TYXZlRmllbGRcIiwgdGhpcy5mb3JtKVxyXG4gICAgdGhpcy5jbG9zZUZpZWxkRGlhbG9nKCk7XHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcblxyXG4gICAgaWYgKHJlb3BlbiAhPSAwKSB7XHJcbiAgICAgIGxldCBuZXdGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgKyByZW9wZW5dO1xyXG4gICAgICB0aGlzLm9wZW5GaWVsZERpYWxvZyhuZXdGaWVsZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgY29udHJvbGxhIHNlIGxvIHN0ZXAgcGVyIGwnYWdnaXVudGEgZGVpIGNhbXBpIG5lbGxhIGZvcm0gw6ggY29uY2x1c28uXHJcbiAgICogQHJldHVybnMgU2UgVFJVRSBsbyBzdGVwIHZpZW5lIGNvbnNpZGVyYXRvIGNvbXBsZXRhdG8gZWQgw6ggcG9zc2JpbGUgcGFzc2FyZSBhbCBzdWNjZXNzaXZvLlxyXG4gICAqL1xyXG4gIGlzRmllbGRTdGVwQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+ICFmLkZpZWxkR3JvdXApXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gaW5uZW5yRm9ybSBGb3JtIGRpIGRldHRhZ2xpbyBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbklubmVyRm9ybURpYWxvZyhpbm5lbnJGb3JtOiBGb3JtID0gbnVsbCkge1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRydWU7XHJcbiAgICAvLyB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZlxyXG4gICAgLy8gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgLy8gW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIC8vIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCJcclxuXHJcbiAgICBpZiAoaW5uZW5yRm9ybSkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5pbmRleE9mKGlubmVuckZvcm0pO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5uZW5yRm9ybSkpO1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtLk9sZE5hbWUgPSBpbm5lbnJGb3JtLk5hbWU7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZSA9XHJcbiAgICAgICAgaW5uZW5yRm9ybS5OYW1lO1xyXG5cclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmRJbmRleChcclxuICAgICAgICAoZikgPT4gZi5MYWJlbCA9PT0gaW5uZW5yRm9ybS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtID0gbmV3IEZvcm0oKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0gPVxyXG4gICAgICAgIG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG5cclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWYgPVxyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nSW5uZXJGb3JtLCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiBcIjg1JVwiLFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBzY2F0ZW5hdG8gYWwgc2FsdmF0YWdnaW8gZGkgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIEBwYXJhbSBldmVudCBGb3JtIGNyZWF0YS9tb2RpZmljYXRhIGRhbGwndXRlbnRlLiBTZSDDqCBudWxsIGFsbG9yYSBsJ3V0ZW50ZSBoYSBhYmJhbmRvbmF0byBsYSBjb25maWd1cmF6aW9uZS5cclxuICAgKi9cclxuICBvblNhdmVPckV4aXRJbm5lckZvcm0oZXZlbnQ6IEZvcm0pIHtcclxuICAgIGlmIChldmVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZvcm0uTmFtZSA9PT0gZXZlbnQuTmFtZSB8fFxyXG4gICAgICAgICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChcclxuICAgICAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICAgICAgYS5OYW1lID09PSBldmVudC5OYW1lICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9PSBpKVxyXG4gICAgICAgICAgKSkgfHxcclxuICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID09IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgICAgKGYsIGkpID0+XHJcbiAgICAgICAgICAgICAgZi5MYWJlbCA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgICApKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBmb3JtIGRpIGRldHRhZ2xpbyBjb24gbG8gc3Rlc3NvIG5vbWUuXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbm5lckZvcm1GaWVsZDogQmFzZUZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5OYW1lID0gZXZlbnQuTmFtZS5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkxhYmVsID0gZXZlbnQuTmFtZTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRUeXBlID0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5GaWVsZEdyb3VwID1cclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGRdLkZpZWxkR3JvdXBcclxuICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gIT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA+PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zW3RoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybV0gPSBldmVudDtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGlubmVyRm9ybUZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLklubmVyRm9ybXMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zID0gbmV3IEFycmF5PEZvcm0+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLnB1c2goZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChpbm5lckZvcm1GaWVsZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dJbm5lckZvcm1SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgYWN0aW9uLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb25PblJlY29yZCBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGFjdGlvbjogQWN0aW9uT25SZWNvcmQgPSBudWxsKSB7XHJcbiAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb24pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBuZXcgQWN0aW9uT25SZWNvcmQoKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCk7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlaSBib3R0b25pIGF6aW9uZS5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uQnV0dG9uIGRhIG1vZGlmaWNhcmUgKHNlIG51bGwgYWxsb3JhIHZhZG8gaW4gYWRkKS5cclxuICAgKi9cclxuICBvcGVuQWN0aW9uQnV0dG9uRGlhbG9nKGV2OiBBY3Rpb25CdXR0b24gPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGV2ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbkJ1dHRvbiA9IGV2O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbkJ1dHRvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25CdXR0b25SZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBpIHZhbG9yaSBkYSBzdWdnZXJpcmUgbmVsbCdhdXRvY29tcGxldGUgZGVsIGNhbXBvIEZvcm11bGEuXHJcbiAgICogVmllbmUgc2NhdGVuYXRvIGFsIGZvY3VzIChpbiBxdWVzdG8gY2FzbyB2aWVuZSBwYXNzYXRvIGlsIHBhcmFtZXRybyBhIG51bGwgcGVyIGRpZmZlcmVuemlhcmxvXHJcbiAgICogZGFsbCdldmVudG8gZGkgY2xpY2sgc3VsbGEgdGFzdGllcmEpIGUgYWwga2V5dXAgc3VsbCdpbnB1dCAoaWwgcGFyYW1ldHJvIMOoIGRpdmVyc28gZGEgbnVsbCkuXHJcbiAgICogQHBhcmFtIGtleWJvYXJkRXZlbnQgRXZlbnRvIHNjYXRlbmF0byBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYS4gU2UgbnVsbCBhbGxvcmEgaWwgbWV0b2RvIMOoIHN0YXRvIGludm9jYXRvIGRhbCBmb2N1cyBzdWxsJ2lucHV0LlxyXG4gICAqIEBzdW1tYXJ5IEFnZ2lvcm5hIGwnZWxlbmNvIGRlaSBzdWdnZXJpbWVudGkgcGVyIGwnYXV0b2NvbXBsZXRlIHNlIGwndXRlbnRlIGVzZWd1ZSBpbCBmb2N1cyBzdWxsJ2lucHV0XHJcbiAgICogb3BwdXJlIGFsIGtleXVwIHN1bGxhIHRhc3RpZXJhIGRpIHVuIHRhc3RvIGRpdmVyc28gZGFsbGUgZnJlY2NlLlxyXG4gICAqL1xyXG4gIHNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgLy8gQ3JlbyBsJ2FycmF5IHBlciBsJ2F1dG9jb21wbGV0ZSBzb2xvIHNlIHN0byBmYWNlbmRvIGlsIGZvY3VzIHN1bGwnaW5wdXQgbyBzZSBzdG8gcHJlbWVuZG8gdW4gdGFzdG9cclxuICAgIC8vIHN1bGxhIHRhc3RpZXJhIGRpdmVyc28gZGFsbGUgZnJlY2NlIChpbiBxdWVzdCd1bHRpbW8gY2Fzbywgc2Ugbm9uIHZpZW5lIGVzZWd1aXRvIGlsIGZpbHRybyBzdWxsJ2V2ZW50byxcclxuICAgIC8vIG5vbiBzaSBwdcOyIHNlbGV6aW9uYXJlIHVuIHN1Z2dlcmltZW50byBkZWxsJ2F1dG9jb21wbGV0ZSBwZXJjaMOoIGFsIGNsaWNrIHZlcnJlYmJlIHJpY2FyaWNhdG8gbCdhcnJheSBlXHJcbiAgICAvLyBzaSBwcmVkZXJlYmJlIGxhIHNlbGV6aW9uZSBhcHBlbmEgZmF0dGEpLlxyXG4gICAgaWYgKCFrZXlib2FyZEV2ZW50IHx8ICFrZXlib2FyZEV2ZW50LmNvZGUuaW5jbHVkZXMoXCJBcnJvd1wiKSkge1xyXG4gICAgICB0aGlzLmFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMgPVxyXG4gICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkdldEF1dG9jb21wbGV0ZU9wdGlvbnMoXHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5BY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgbCdhemlvbmUgY3JlYXRhL21vZGlmaWNhdGUuXHJcbiAgICovXHJcbiAgc2F2ZUFjdGlvbk9uUmVjb3JkKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkICYmXHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuZmluZChcclxuICAgICAgICAoYSwgaSkgPT5cclxuICAgICAgICAgIGEuTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEFjdGlvbi5OYW1lICYmXHJcbiAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID09IG51bGxcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uICE9PSBpKVxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBhY3Rpb24gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBhY3Rpb24gY29uIGxvIHN0ZXNzbyBub21lLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uICE9IG51bGwgJiYgdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID49IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZFt0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb25dID0gdGhpcy5zZWxlY3RlZEFjdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQgPSBuZXcgQXJyYXk8QWN0aW9uT25SZWNvcmQ+KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5wdXNoKHRoaXMuc2VsZWN0ZWRBY3Rpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKCk7XHJcbiAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25CdXR0b25zKGVsZW1lbnQ6IEFjdGlvbkJ1dHRvbikge1xyXG5cclxuICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zICE9IG51bGwpIHtcclxuICAgICAgICB2YXIgZXhpc3RzQWN0aW9uQnV0dG9ucyA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmZpbmQoeCA9PiB4LkJ1dHRvblVuaXF1ZUlkID09IGVsZW1lbnQuQnV0dG9uVW5pcXVlSWQpO1xyXG4gICAgICAgIGlmIChleGlzdHNBY3Rpb25CdXR0b25zID09IG51bGwpIHtcclxuICAgICAgICAgIC8vIE51b3ZvIHRyaWdnZXJcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4aXN0c0FjdGlvbkJ1dHRvbnMgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGVsbGEgaW5uZXIgZm9ybS5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0lubmVyRm9ybSgpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkaSBnZXN0aW9uZSBkZWxsZSBhY3Rpb24uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uT25SZWNvcmRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRpIGdlc3Rpb25lIGRlbGxlIGFjdGlvbiBidXR0b25zLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uQnV0dG9ucygpIHtcclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNlZ25hcmUgY29tZSBjb25jbHVzYSBsYSBjcmVhemlvbmUgZGVsbGEgZm9ybSBlIHBlciBjcmVhcm5lIHVuYSBjb3BpYVxyXG4gICAqIGRhIHZpc2FsaXp6YXJlIGNvbWUgYW50ZXByaW1hLlxyXG4gICAqIEBwYXJhbSBjb21wbGV0ZWQgU2UgVFJVRSBzZWduYSBsYSBmb3JtIGNvbWUgY29uY2x1c2EgZSBuZSBjcmVhIHVuYSBjb3BpYSBkYSB2aXN1YWxpenphcmVcclxuICAgKi9cclxuICBzZXRGb3JtU3RhdHVzKGNvbXBsZXRlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGNvbXBsZXRlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0pKTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInByZXZpZXdGb3JtXCIsIHRoaXMucHJldmlld0Zvcm0pXHJcblxyXG4gICAgICAvLyBQZXIgdmlzdWFsaXp6YXJlIGNvcnJldHRhbWVudGUgbCdvYW50ZXByaW1hIGRlbGxhIGZvcm0gYXBwZW5hIGNyZWF0YVxyXG4gICAgICAvLyBiaXNvZ25hIHZhbG9yaXp6YXJlIGxhIHByb3ByaWV0w6AgTmFtZSBkZWkgY2FtcGkgZGVsbGEgZm9ybSBlIGRlbGxlIElubmVyRm9ybXMuXHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgbGEgZm9ybSBjcmVhdGEgYWxsYSBmaW5lIGRlbCB3aXphcmQuXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwYXNzYW5kbyBsJ29nZ2V0byBkYSBzYWx2YXJlXHJcbiAgICogbmVsIGJvZHkgZGVsbGEgY2hpYW1hdGEsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBcInNhdmVGb3JtRXZlbnRcIi5cclxuICAgKi9cclxuICBzYXZlRm9ybSgpIHtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50XHJcbiAgICApIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5zYXZlZCkge1xyXG4gICAgICAgIHRoaXMuYmFja3VwRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2t1cEZvcm0pKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIFBlciBmYXIgYXJyaXZhcmUgYWwgc2VydmVyIGwnYXJyYXkgZGkgRmllbGQgYmlzb2duYSBwYXNzYXJsaSBzdSBBbnlcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZpZWxkcyA9IFtdO1xyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIGRhdGFnZXR0ZXIgaW4gQmFzZTY0XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmaWVsZC5EYXRhR2V0dGVyKSk7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gICAgICAgICAgY29uc3QgZmxkQTogYW55ID0gZmllbGQ7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhT2JqZWN0RmllbGRzID0gZmxkQS5NZXRhZGF0YUZpZWxkcztcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFGaWVsZHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmbGRBKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl0pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NYXhWYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1pblZhbHVlID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0uTW9kaWZ5VXNlciA9IHRoaXMuVXNlcklEO1xyXG5cclxuICAgICAgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLlRyaWdnZXJzKTtcclxuICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG51bGw7XHJcblxyXG5cclxuXHJcbiAgICAgIC8vIGNoaWFtYXRhIGVmZmV0dGl2YVxyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJGb3JtXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0sXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICB0aGlzLnNhdmVkID0gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIkZvcm0gc2FsdmF0YSBjb24gc3VjY2Vzc28hXCIpO1xyXG4gICAgICAgICAgdGhpcy5hZnRlclNhdmVGb3JtRXZlbnQuZW1pdCh0aGlzLmZvcm0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcihcIkVycm9yZSBuZWwgc2FsdmF0YWdnaW8gZGVsbGEgZm9ybVwiKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcmUgbmVsIHNhbHZhdGFnZ2lvIGRlbGxhIGZvcm1cIiwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1FdmVudC5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gRlVOWklPTkkgUFJJVkFURVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBsYSBmb3JtIGUgY29uZmlndXJhcmUgY29sb25uZS9Gb3JtR291cnAuXHJcbiAgICogQHBhcmFtIGZvcm0gRm9ybSBkYSB1dGlsaXp6YXJlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUFuZENvbmZpZ3VyZShmb3JtOiBGb3JtID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChmb3JtICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5mb3JtID0gZm9ybTtcclxuICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG4gICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpIHtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm0uRmllbGRzICE9IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIEJhc2U2NFN0cmluZyBkZWwgRGF0YWdldHRlciBuZWwgRGF0YWdldHRlciB2ZXJvIGUgcHJvcHJpb1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBKU09OLnBhcnNlKGF0b2IoZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nKSk7XHJcbiAgICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPSBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IG51bGwgPyBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSA6IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gbmV3IERhdGFHZXR0ZXIoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBudWxsO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Gb3JtKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGUgY29sb25uZSBwZXIgbGUgdGFiZWxsZSBuZWNlc3NhcmllIGFsbGEgY3JlYXppb25lIGRlbGxhIGZvcm06XHJcbiAgICogIC0gcGVyIGxhIHZpc3VhbGl6emF6aW9uZSBkZWkgY2FtcGkgaW5zZXJpdGlcclxuICAgKiAgLSBwZXIgbGUgZm9ybSBkaSBkZXR0YWdsaW8gY3JlYXRlXHJcbiAgICogIC0gcGVyIGxlIGF6aW9uaSBjb25maWd1cmF0ZSBzdWkgcmVjb3JkIGRlbGxhIGZvcm1cclxuICAgKi9cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5maWVsZHNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA0cmVtXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5lZGl0RmllbGQoZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkR1cGxpY2Egc290dG9cIixcclxuICAgICAgICAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmR1cGxpY2F0ZUZpZWxkKGVsZW1lbnQsIGVsZW1lbnQuT3JkaW5hbFBvc2l0aW9uICsgMSksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkR1cGxpY2EgaW4gZm9uZG9cIixcclxuICAgICAgICAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmR1cGxpY2F0ZUZpZWxkKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnQsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC8vIHtcclxuICAgICAgICAgIC8vICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgIC8vICAgaWNvbjogXCJhcnJvd191cHdhcmRcIixcclxuICAgICAgICAgIC8vICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgLy8gICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICAvLyAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT4gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICAgIC8vIHtcclxuICAgICAgICAgIC8vICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgLy8gICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAvLyAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlLCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIC8vICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgLy8gICAgIHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihlbGVtZW50KSA+PSB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICAvLyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRmllbGRUeXBlXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJUaXBvbG9naWFcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkVudW0sXHJcbiAgICAgICAgZW51bU1vZGVsOiBGaWVsZFR5cGVFbnVtLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkxhYmVsXCIsIGRpc3BsYXk6IFwiTGFiZWxcIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDhyZW1cIiB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRGVzY3JpcHRpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIkRlc2NyaXppb25lXCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJEYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJUaXBvIFJlY3VwZXJvIERhdGlcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkVudW0sXHJcbiAgICAgICAgZW51bU1vZGVsOiBEYXRhR2V0dGVyVHlwZUVudW0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJSZXF1aXJlZFwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiT2JibGlnYXRvcmlvXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LlJlcXVpcmVkLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkZvcm11bGFcIixcclxuICAgICAgICBkaXNwbGF5OiBcIkNhbGNvbGF0b1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Gb3JtdWxhICE9IG51bGwgJiYgZWxlbWVudC5Gb3JtdWxhICE9ICcnLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkluTGlzdFZpZXdcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlZpc2liaWxlIGluIENvbXBpbGF6aW9uZVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Jbkxpc3RWaWV3LFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkludmlzaWJpbGl0eVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiT2NjdXBhIHNwYXppbz9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuSW5MaXN0VmlldyB8fCBlbGVtZW50LkludmlzaWJpbGl0eSA9PSBGaWVsZEludmlzaWJpbGl0eUVudW1bXCJOQVNDT1NUTyBDT04gQVJFQSBWSVNJQklMRVwiXSxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJWaXNpYmxlSWZcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlZpc2liaWxpdMOgIGNvbmRpemlvbmF0YVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5WaXNpYmxlSWYgIT0gbnVsbCAmJiBlbGVtZW50LlZpc2libGVJZiAhPSBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlZpc2liaWxlIG5lbGxhIHJpc3Bvc3RhXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiAhZWxlbWVudC5BbnN3ZXJTdHlsZSB8fCBlbGVtZW50LkFuc3dlclN0eWxlICYmIGVsZW1lbnQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgJiZcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmllbGRzQ29sdW1ucy5zcGxpY2UoMSwgMCwge1xyXG4gICAgICAgIGtleTogXCJGaWVsZEdyb3VwXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJTZXppb25lXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGUsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDE0cmVtXCIgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHRoaXMuZmllbGRzQ29sdW1ucy5wdXNoKFxyXG4gICAgICAvLyAgIHtcclxuICAgICAgLy8gICAgIGtleTogXCJGaWVsZEdyb3VwXCIsXHJcbiAgICAgIC8vICAgICBkaXNwbGF5OiBcIlNlemlvbmVcIixcclxuICAgICAgLy8gICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgLy8gICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGUsXHJcbiAgICAgIC8vICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTRyZW1cIiB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9uQnV0dG9uc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuQWN0aW9uQnV0dG9uRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUFjdGlvbkJ1dHRvbihlbGVtZW50KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJCdXR0b25MYWJlbFwiLCBkaXNwbGF5OiBcIkV0aWNoZXR0YVwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgMzAlXCIgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkJ1dHRvbkNvZGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIkNvZGljZVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAyMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkljb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIkljb25hXCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEwJVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiU2hvd0luXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJTZXppb25pXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbCkgPT4ge1xyXG4gICAgICAgICAgdmFyIGZpbmFsVGV4dCA9IFwiXCI7XHJcbiAgICAgICAgICBpZiAoZWwuU2hvd0luID09IG51bGwgfHwgZWwuU2hvd0luLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIk5lc3N1bmFcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsLlNob3dJbi5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBmaW5hbFRleHQgKz0gQWN0aW9uRmxhZ0VudW1bZWxlbWVudF0gKyBcIiAvIFwiO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gZmluYWxUZXh0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDIwJVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuYWN0aW9uc09uUmVjb3JkQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLm9wZW5BY3Rpb25PblJlY29yZERpYWxvZyhlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnQsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd191cHdhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoZWxlbWVudCkgPT09IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBnacO5XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGVsZW1lbnQpID49XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJJY29uXCIsIGRpc3BsYXk6IFwiSWNvbmFcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAxNSVcIiB9IH0sXHJcbiAgICAgIHsga2V5OiBcIk5hbWVcIiwgZGlzcGxheTogXCJOb21lXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMjAlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJBY3Rpb25cIiwgZGlzcGxheTogXCJBemlvbmVcIiB9LFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnRyaWdnZXJzQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLm9wZW5UcmlnZ2Vyc0RpYWxvZyhlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUcmlnZ2VyKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcImRlc2NyaXB0aW9uXCIsIGRpc3BsYXk6IFwiRGVzY3JpemlvbmVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAxNSVcIiB9IH0sXHJcbiAgICAgIHsga2V5OiBcImV4ZWN1dGlvblwiLCBkaXNwbGF5OiBcIkNvc2EgZXNlZ3VlXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgXTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBwZXIgbCdvZ2dldHRvIEZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Gb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIENvZGU6IFt0aGlzLmZvcm0uQ29kZV0sXHJcbiAgICAgIE5hbWU6IFt0aGlzLmZvcm0uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIERlc2NyaXB0aW9uOiBbdGhpcy5mb3JtLkRlc2NyaXB0aW9uXSxcclxuICAgICAgRm9ybVNjYWxhclR5cGU6IFt0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyYWcgYW5kIERyb3AgZGVsbGUgY29sb25uZSBkZWwgZm9ybVxyXG4gICAqL1xyXG5cclxuICBvbkRyYWdSZWxlYXNlZChldmVudCkge1xyXG5cclxuICB9XHJcblxyXG4gIG9uRHJhZ0VuZGVkKGV2ZW50KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWEgaWwgRm9ybUdyb3VwIGVwciBsJ2FnZ2l1bnRhIG8gbGEgbW9kaWZpY2EgZGkgdW5hIGFjdGlvbiBzdWkgcmVjb3JkIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVBY3Rpb25PblJlY29yZEZvcm0oKSB7XHJcbiAgICB0aGlzLmFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIE5hbWU6IFt0aGlzLnNlbGVjdGVkQWN0aW9uLk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBJY29uOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5JY29uLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgQWN0aW9uOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5BY3Rpb24sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGl1ZGUgaWwgZGlhbG9nIHBlciBhZ2dpdW5nZXJlL21vZGlmaWNhcmUgdW4gRmllbGQgc2VuemEgc2FsdmFyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xvc2VGaWVsZERpYWxvZygpIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0ZpZWxkUmVmICE9IHVuZGVmaW5lZCkgdGhpcy5kaWFsb2dGaWVsZFJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGwnYXBlcnR1cmEgZGVsIGRpYWxvZyBwZXIgbGEgbW9kaWZpY2EgZGkgdW4gRmllbGQuXHJcbiAgICogU2UgaWwgZmllbGQgw6ggZGkgdGlwbyBcIkZvcm0gZGkgZGV0dGFnbGlvXCIgYXByZSBpbCBkaWFsb2cgcGVyIGxhIG1vZGlmaWNhIGRpIHVuYVxyXG4gICAqIElubmVyRm9ybSBhbHRyaW1lbnRpIGFwcmUgcXVlbGxvIHBlciBsYSBtb2RpZmljYSBkaSB1biBGaWVsZC5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgbW9kaWZpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZWRpdEZpZWxkKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgIT0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKSB7XHJcbiAgICAgIHRoaXMub3BlbkZpZWxkRGlhbG9nKGZpZWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlbklubmVyRm9ybURpYWxvZyhcclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5maW5kKChmKSA9PiBmLk5hbWUgPT0gZmllbGQuTGFiZWwpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgbGEgZHVwbGljYXppb25lIGRpIHVuIEZpZWxkLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBkYSBtb2RpZmljYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkdXBsaWNhdGVGaWVsZChmaWVsZDogQmFzZUZpZWxkLCBvcmRpbmFsUG9zaXRpb24gPSBudWxsKSB7XHJcbiAgICBpZiAoZmllbGQuRmllbGRUeXBlICE9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSkge1xyXG4gICAgICAvLyByaWNyZW8gbCdvZ2dldHRvIHBhc3NhbmRvIHBlciB1biBqc29uXHJcbiAgICAgIGxldCBjbG9uZUZpZWxkOiBCYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkKSk7XHJcblxyXG4gICAgICBjbG9uZUZpZWxkLkxhYmVsID0gZmllbGRbXCJMYWJlbFwiXSArIFwiQ29weVwiO1xyXG4gICAgICBjbG9uZUZpZWxkLklEID0gdGhpcy5nZW5lcmF0ZUdVSUQoKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICBpZiAob3JkaW5hbFBvc2l0aW9uID09IG51bGwpIHtcclxuICAgICAgICBjbG9uZUZpZWxkLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoICsgMTtcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2xvbmVGaWVsZC5PcmRpbmFsUG9zaXRpb24gPSBvcmRpbmFsUG9zaXRpb247XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBvcmRpbmFsUG9zaXRpb247XHJcbiAgICAgICAgLy8gdXRpbGl6em8gb3JkaW5hbCBwb3NpdGlvbiBwZXIgaW5maWxhcmUgaWwgY2FtcG8gY29ycmV0dGFtZXRuZSBuZWxsYSBsaXN0YVxyXG4gICAgICAgIC8vIHBlciBmYXJsbyBzZSBub24gw6ggbnVsbG8gZGV2byBjcmVhcmUgbG8gc3BhemlvXHJcbiAgICAgICAgdGhpcy5PcmRpbmF0ZWRJbnNlcnRGaWVsZChmaWVsZCwgb3JkaW5hbFBvc2l0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY2xvbmVGaWVsZFN0cnVjdHVyZSA9IHsgZmllbGQ6IGNsb25lRmllbGQsIHJlb3BlbjogMCB9XHJcbiAgICAgIHRoaXMub25TYXZlRmllbGQoY2xvbmVGaWVsZFN0cnVjdHVyZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhbGVydChcIm5vbiDDqCBwb3NzaWJpbGUgZHVwbGljYXJlIHVuYSBmb3JtIGRpIGRldHRhZ2xpb1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgT3JkaW5hdGVkSW5zZXJ0RmllbGQoZmllbGQ6IEJhc2VGaWVsZCwgb3JkaW5hbFBvc2l0aW9uID0gMCkge1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkcy5zcGxpY2Uob3JkaW5hbFBvc2l0aW9uLCAwLCBmaWVsZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvc2l0aW9uRXhjaGFuZ2VGaWVsZHMoZmllbGQxOiBCYXNlRmllbGQsIGZpZWxkMjogQmFzZUZpZWxkKSB7XHJcbiAgICBjb25zdCB0ZW1wID0gZmllbGQxO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkc1tmaWVsZDEuT3JkaW5hbFBvc2l0aW9uXSA9IGZpZWxkMjtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHNbZmllbGQyLk9yZGluYWxQb3NpdGlvbl0gPSB0ZW1wO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBnZW5lcmEgdW5hIG51b3ZhIEdVSURcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlR1VJRCgpIHtcclxuICAgIHJldHVybiAneHh4eC14eHh4LXh4eHgteHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsXHJcbiAgICAgICAgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSB1biBGaWVsZCBhbGwnaW50ZXJubyBkaSB1bmEgRm9ybS5cclxuICAgKiBSaWNoaWVkZSBjb25mZXJtYSBhbGwndXRlbnRlIHByaW1hIGRpIHJpbXVvdmVybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBkYSByaW11b3ZlcmVcclxuICAgKi9cclxuICBwcml2YXRlIGRlbGV0ZUVsZW1lbnQoXHJcbiAgICBlbGVtZW50OiBCYXNlRmllbGQgfCBBY3Rpb25PblJlY29yZCB8IEZvcm0sXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuQ29uZmlybShcclxuICAgICAgXCJFbGltaW5hcmUgbCdlbGVtZW50byBzZWxlemlvbmF0bz9cIixcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZShcclxuICAgICAgICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLmluZGV4T2YoZWxlbWVudCksXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIkZpZWxkc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uc09uUmVjb3JkXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uQnV0dG9uc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGlvbkJ1dHRvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRBY3Rpb25CdXR0b25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNwb3N0YXJlIHVuIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gZGkgdGlwbyBCYXNlRmllbGQgZGEgc3Bvc3RhcmUuXHJcbiAgICogQHBhcmFtIG1vdmVVcCBTZSBUUlVFIGFsbG9yYSBzcG9zdGEgdmVyc28gbCdhbHRvIGlsIGNhbXBvIChhYmJhc3NhIGwnaW5kaWNlKSBhbHRyaW1lbnRpIGlsIGNvbnRyYXJpby5cclxuICAgKi9cclxuICBwcml2YXRlIG1vdmVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQsXHJcbiAgICBtb3ZlVXA6IGJvb2xlYW4sXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICBjb25zdCBlbmRpbmdJbmRleCA9IHN0YXJ0aW5nSW5kZXggKyAobW92ZVVwID8gLTEgOiAxKTtcclxuXHJcbiAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2Uoc3RhcnRpbmdJbmRleCwgMSk7XHJcbiAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoZW5kaW5nSW5kZXgsIDAsIGVsZW1lbnQpO1xyXG5cclxuICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiRmllbGRzXCIpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25zT25SZWNvcmRcIikge1xyXG4gICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVsbGUgc2V6aW9uaSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5mb3JFYWNoKChnLCBpKSA9PiAoZy5PcmRpbmFsUG9zaXRpb24gPSBpKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVpIGNhbXBpIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0gaW4gYmFzZSBhbGwnb3JkaW5lIGNoZSBsJ3V0ZW50ZVxyXG4gICAqIGhhIGRlZmluaXRvIG5lbGxhIHRhYmVsbGEgaW4gY3VpIHNvbm8gbW9zdHJhdGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZpZWxkLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlaSBjYW1waSBhZ2dpdW50aSBpbiB1bmEgZm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkRmllbGRzVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZHNUYWJsZSkge1xyXG4gICAgICB0aGlzLmZpZWxkc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCkge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGFjdGlvbi5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVpIGNhbXBpIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0gaW4gYmFzZSBhbGwnb3JkaW5lIGNoZSBsJ3V0ZW50ZVxyXG4gICAqIGhhIGRlZmluaXRvIG5lbGxhIHRhYmVsbGEgaW4gY3VpIHNvbm8gbW9zdHJhdGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldEFjdGlvbkJ1dHRvbk9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucykge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBhY3Rpb24uT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWxsZSBhemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmFjdGlvbnNPblJlY29yZFRhYmxlKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uc09uUmVjb3JkVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVsbGUgYXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkQWN0aW9uQnV0dG9uc09uUmVjb3JkVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5hY3Rpb25CdXR0b25zVGFibGUpIHtcclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpIHtcclxuICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVFJJR0dFUlNcclxuICAgKi9cclxuXHJcbiAgb3BlblRyaWdnZXJzRGlhbG9nKGV2OiBUcmlnZ2VyID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChldiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmlnZ2VyID0gZXY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJpZ2dlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dUcmlnZ2Vyc1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dUcmlnZ2Vycywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlVHJpZ2dlcihlbGVtZW50OiBUcmlnZ2VyKSB7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtLlRyaWdnZXJzICE9IG51bGwpIHtcclxuICAgICAgICB2YXIgZXhpc3RzVHJpZ2dlciA9IHRoaXMuZm9ybS5UcmlnZ2Vycy5maW5kKHggPT4geC5DSUQgPT0gZWxlbWVudC5DSUQpO1xyXG4gICAgICAgIGlmIChleGlzdHNUcmlnZ2VyID09IG51bGwpIHtcclxuICAgICAgICAgIC8vIE51b3ZvIHRyaWdnZXJcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleGlzdHNUcmlnZ2VyID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nVHJpZ2dlcnNSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVRyaWdnZXIoZWxlbWVudDogVHJpZ2dlcikge1xyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5mb3JtLlRyaWdnZXJzLmZpbmRJbmRleCh4ID0+IHguQ0lEID09IGVsZW1lbnQuQ0lEKTtcclxuICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQWN0aW9uQnV0dG9uKGVsZW1lbnQ6IEFjdGlvbkJ1dHRvbikge1xyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZmluZEluZGV4KHggPT4geC5CdXR0b25Db2RlID09IGVsZW1lbnQuQnV0dG9uQ29kZSk7XHJcbiAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuQWlFZGl0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5haUVkaXRQcm9tcHQgPSBcIlwiO1xyXG4gICAgdGhpcy5haUVkaXRBdHRhY2htZW50cyA9IFtdO1xyXG4gICAgdGhpcy5haUVkaXRBdXRvc2F2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5haUVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpYWxvZ0FpRWRpdFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBaUVkaXQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNjAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlQWlFZGl0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dBaUVkaXRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uQWlFZGl0RmlsZUNoYW5nZShldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoIWlucHV0LmZpbGVzPy5sZW5ndGgpIHJldHVybjtcclxuICAgIEFycmF5LmZyb20oaW5wdXQuZmlsZXMpLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgICAgIHRoaXMuYWlFZGl0QXR0YWNobWVudHMucHVzaCh7IGZpbGVOYW1lOiBmaWxlLm5hbWUsIGJhc2U2NENvbnRlbnQ6IGJhc2U2NCwgbWVkaWFUeXBlOiBmaWxlLnR5cGUgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQWlFZGl0QXR0YWNobWVudChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICBzZW5kQWlFZGl0KCkge1xyXG4gICAgaWYgKCF0aGlzLmFpRWRpdFByb21wdD8udHJpbSgpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5haUVkaXRMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBQcmVwYXJhIGlsIGZvcm0gY29tZSBpbiBzYXZlRm9ybTogRmllbGRzIOKGkiBPYmplY3RGaWVsZHNcclxuICAgIGNvbnN0IGZvcm1Ub1NlbmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybSkpO1xyXG4gICAgZm9ybVRvU2VuZC5PYmplY3RGaWVsZHMgPSBbXTtcclxuICAgIGZvcm1Ub1NlbmQuT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBbXTtcclxuXHJcbiAgICBpZiAoZm9ybVRvU2VuZC5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgIGZvcm1Ub1NlbmQuT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1Ub1NlbmQuRmxkRXh0cmFDb25maWdWYWx1ZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZm9ybVRvU2VuZC5GaWVsZHMpIHtcclxuICAgICAgZm9ybVRvU2VuZC5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAgICAgICAgIGNvbnN0IGZsZEE6IGFueSA9IGZpZWxkO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YU9iamVjdEZpZWxkcyA9IGZsZEEuTWV0YWRhdGFGaWVsZHM7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhRmllbGRzID0gW107XHJcbiAgICAgICAgICBmbGRBLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZmxkQS5EYXRhR2V0dGVyID8/IHt9KSk7XHJcbiAgICAgICAgICBmbGRBLkRhdGFHZXR0ZXIgPSBudWxsO1xyXG4gICAgICAgICAgZm9ybVRvU2VuZC5PYmplY3RGaWVsZHMucHVzaChmbGRBKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmaWVsZC5EYXRhR2V0dGVyID8/IHt9KSk7XHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gbnVsbDtcclxuICAgICAgICAgIGZvcm1Ub1NlbmQuT2JqZWN0RmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmb3JtVG9TZW5kLkZpZWxkcyA9IG51bGw7XHJcbiAgICBmb3JtVG9TZW5kLk9iamVjdFRyaWdnZXJzID0gSlNPTi5zdHJpbmdpZnkoZm9ybVRvU2VuZC5UcmlnZ2VycyA/PyBbXSk7XHJcbiAgICBmb3JtVG9TZW5kLlRyaWdnZXJzID0gbnVsbDtcclxuICAgIGZvcm1Ub1NlbmQuT2JqZWN0QWN0aW9uQnV0dG9ucyA9IEpTT04uc3RyaW5naWZ5KGZvcm1Ub1NlbmQuQWN0aW9uQnV0dG9ucyA/PyBbXSk7XHJcbiAgICBmb3JtVG9TZW5kLkFjdGlvbkJ1dHRvbnMgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIkZvcm1cIiwgUGFyYW1WYWx1ZTogZm9ybVRvU2VuZCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJTcGVlY2hUZXh0XCIsIFBhcmFtVmFsdWU6IHRoaXMuYWlFZGl0UHJvbXB0LCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIk9yZ2FJRFwiLCBQYXJhbVZhbHVlOiBwYXJzZUludCh0aGlzLm9yZ2FJRCkgfHwgMCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJNb2RpZnlVc2VyXCIsIFBhcmFtVmFsdWU6IHRoaXMuVXNlcklELCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIkF1dG9zYXZlXCIsIFBhcmFtVmFsdWU6IHRoaXMuYWlFZGl0QXV0b3NhdmUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiQXR0YWNobWVudHNcIiwgUGFyYW1WYWx1ZTogdGhpcy5haUVkaXRBdHRhY2htZW50cy5tYXAoYSA9PiAoeyBGaWxlTmFtZTogYS5maWxlTmFtZSwgQmFzZTY0Q29udGVudDogYS5iYXNlNjRDb250ZW50LCBNZWRpYVR5cGU6IGEubWVkaWFUeXBlIH0pKSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJUcmlnZ2VyRGVmaW5pdGlvbnNcIiwgUGFyYW1WYWx1ZTogdGhpcy50cmlnZ2VycyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIkFjdGlvbkJ1dHRvbkRlZmluaXRpb25zXCIsIFBhcmFtVmFsdWU6IHRoaXMuYWN0aW9uQnV0dG9ucyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TcGVlY2hUb0Zvcm1FZGl0RW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IHsgRm9ybTogRm9ybSwgV2FybmluZ3M6IHN0cmluZ1tdLCBDb3N0Q2VudHM6IG51bWJlciwgRWxhcHNlZE1zOiBudW1iZXIgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWlFZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2xvc2VBaUVkaXREaWFsb2coKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUocmVzLkZvcm0pO1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlN1Y2Nlc3MoXCJGb3JtIG1vZGlmaWNhdGEgY29uIEFJIVwiKTtcclxuICAgICAgICBpZiAocmVzLldhcm5pbmdzICYmIHJlcy5XYXJuaW5ncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKHJlcy5XYXJuaW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmFpRWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcihcIkVycm9yZSBuZWxsYSBtb2RpZmljYSBkZWxsYSBmb3JtIGNvbiBBSVwiKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3JlIG5lbGxhIG1vZGlmaWNhIGRlbGxhIGZvcm0gY29uIEFJXCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3QoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZSA9IHRoaXMuY29udGVzdHVhbGl6YXRpb24uZmluZCh4ID0+IHguZW50aXR5VGFibGVOYW1lID09IHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbikuZW50aXR5SUQ7XHJcbiAgfVxyXG5cclxuICBvbkNvbnRlc3R1YWxpemF0aW9uU2VsZWN0VmFsdWUoKSB7XHJcbiAgICB0aGlzLmNvbnRlc3R1YWxpemF0aW9uLmZpbmQoeCA9PiB4LmVudGl0eVRhYmxlTmFtZSA9PSB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb24pLmVudGl0eUlEID0gdGhpcy5zZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uVmFsdWU7XHJcbiAgfVxyXG5cclxuICBhcHBseUNvbnRlc3R1YWxpemF0aW9uKGVsZW1lbnQpIHtcclxuICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuY29udGVzdHVhbGl6YXRpb24gPSBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuXHJcbiAgb25GaXJlVHJpZ2dlcihldjogRmlyZVRyaWdnZXIpIHtcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVEZWxldGVCdXR0b24oZXZlbnQ6IEFycmF5PEJhc2VGaWVsZD4pIHtcclxuICAgIHRoaXMuc2hvd0RlbGV0ZUJ1dHRvbiA9IGV2ZW50Lmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmllbGRzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTZWxlY3RlZEZpZWxkcyhwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG5cclxuXHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICBcIkVsaW1pbmFyZSBnbGkgZWxlbWVudGkgc2VsZXppb25hdGk/XCIsXHJcbiAgICAgICgpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkcy5mb3JFYWNoKChzZWxlY3RlZEZpZWxkKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UodGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uaW5kZXhPZihzZWxlY3RlZEZpZWxkKSwgMSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgXCJSaWNoaWVzdGEgY29uZmVybWFcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxlcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj48L2VxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItaGVhZGVyIHJvdyB0aXRsZSBwLTFcIiAqbmdJZj1cImlubmVyRm9ybU1hbmFnbWVudFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5BZ2dpdW50YSBmb3JtIGRpIGRldHRhZ2xpbzwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZURpYWxvZ0lubmVyRm9ybSgpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0jcmVnaW9uIEVYUE9SVCBNT0RVTEUgLS0+XHJcbjxkaXYgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItZXhwb3J0ZXJcIiAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSAnRXhwb3J0J1wiIGNsYXNzPVwicC0zXCI+XHJcbiAgXHJcbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJleHBvcnQoKVwiPkVzcG9ydGE8L2J1dHRvbj5cclxuICBcclxuICA8IS0tPGFcclxuICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhclwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIHRpdGxlPVwiRG93bmxvYWQgSlNPTlwiXHJcbiAgICBbaHJlZl09XCJkb3dubG9hZEpzb25IcmVmXCJcclxuICAgIGRvd25sb2FkPVwie3sgZG93bmxvYWROYW1lIH19Lmpzb25cIlxyXG4gICAgPkV4cG9ydDwvYT4tLT5cclxuXHJcbjwvZGl2PlxyXG48IS0tI2VuZHJlZ2lvbiBFWFBPUlQgTU9EVUxFIC0tPlxyXG5cclxuPG1hdC1ob3Jpem9udGFsLXN0ZXBwZXJcclxuICAqbmdJZj1cImxvYWRlciAmJiBmb3JtRm9ybUdyb3VwICYmIHZpZXdNb2RlID09ICdhZGRPckVkaXQnXCJcclxuICBsaW5lYXJcclxuICAjc3RlcHBlclxyXG4gIFtuZ0NsYXNzXT1cInsgb3V0ZXJGb3JtOiB0cnVlLCAnaW5uZXJGb3JtTWFuYWdtZW50LXN0ZXBwZXInOiBpbm5lckZvcm1NYW5hZ21lbnQgIH1cIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLXN0ZXBwZXIge3sgJ2xhc3QtZWRpdGVkLXN0ZXAtJyArIHN0ZXBwZXIuc2VsZWN0ZWRJbmRleCB9fVwiXHJcbj5cclxuICA8IS0tI3JlZ2lvbiBEQVRJIEdFTkVSQUxJIERFTExBIEZPUk0gLS0+XHJcbiAgPG1hdC1zdGVwIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWdlbmVyYWwtZGF0YVwiIFtzdGVwQ29udHJvbF09XCJmb3JtRm9ybUdyb3VwXCI+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtR3JvdXBcIiAoa2V5ZG93bi5lbnRlcik9XCIoZmFsc2UpXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCJcclxuICAgICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIERhdGkgZ2VuZXJhbGkgZGVsbGEgZm9ybVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIG1lLTJcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cImFjY2VudFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkFpRWRpdERpYWxvZygpXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJlbmRQb2ludENvbmZpZ3VyYXRpb24/LkZvcm1zPy5TcGVlY2hUb0Zvcm1FZGl0RW5kUG9pbnRcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj57eyBpc05ld0Zvcm0gPyAnQ3JlYSBjb24gQUknIDogJ01vZGlmaWNhIGNvbiBBSScgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGZpcnN0Um93XCI+XHJcbiAgICAgICAgPCEtLSBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidWYSBpbnNlcml0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29tZSByaWZlcmltZW50byBuZWkgdGVtcGxhdGUuIG5vbiBhY2NldHRhIGNhcmF0dGVyaSBzcGVjaWFsaSBuZSBzcGF6aS4nXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQ29kaWNlIFVuaXZvY28gXHJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInVmEgaW5zZXJpdG8gcGVyIGVzc2VyZSB1dGlsaXp6YXRvIGNvbWUgcmlmZXJpbWVudG8gbmVpIHRlbXBsYXRlLiBub24gYWNjZXR0YSBjYXJhdHRlcmkgc3BlY2lhbGkgbmUgc3BhemkuJ1wiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQ29kZVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtLkNvZGVcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNldENvZGUoZm9ybS5Db2RlKVwiXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICByZWFkb25seT1cInRydWVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+PC9kaXY+XHJcbiAgICAgICAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuYW1lXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgPiAgICAgICAgICBcclxuICAgICAgICAgIDxtYXQtbGFiZWw+Tm9tZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21lXCJcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybS5OYW1lXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIChmb2N1c291dCk9XCJzZXROYW1lKGZvcm0uTmFtZSlcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8IS0tIDxtYXQtbGFiZWw+VGlwbyBkaSB2aXN1YWxpenphemlvbmU8L21hdC1sYWJlbD4gLS0+XHJcbiAgICAgICAgICA8ZXFwLXNlbGVjdFxyXG4gICAgICAgICAgICBjbGFzcz1cIm5hbWVTZWN0aW9uXCJcclxuICAgICAgICAgICAgW2VudW1EYXRhXT1cIkZvcm1TY2FsYXJUeXBlRW51bVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmb3JtLkZvcm1TY2FsYXJUeXBlXCJcclxuICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmb3JtRm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGb3JtU2NhbGFyVHlwZSdcIlxyXG4gICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVGlwbyBkaSB2aXN1YWxpenphemlvbmVcIlxyXG5cclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkRlc2NyaXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybS5EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmb3JtLk5hbWUpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRlc2NyaXppb25lXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJyb3cgaW5zZXJ0ZWRcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICYmXHJcbiAgICAgICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVTZWN0aW9uXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gTm9tZSBzZXppb25lIChpbnZpbyBwZXIgY29uZmVybWFyZSkgPC9tYXQtbGFiZWw+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkR3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgIChrZXl1cCk9XCJvbkZvcm1GaWVsZEdyb3VwTmFtZUtleVVwKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTm9tZSBzZXppb25lIChpbnZpbyBwZXIgY29uZmVybWFyZSlcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItM1wiPlNlemlvbmkgaW5zZXJpdGU6PC9zcGFuPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwic2VjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZ3JvdXBOYW1lIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3VwczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbkluc2VydFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXItMVwiIChjbGljayk9XCJvbkRlbGV0ZUZvcm1GaWVsZEdyb3VwTmFtZShncm91cE5hbWUuTmFtZSlcIj5jbG9zZTwvbWF0LWljb24+IFxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXItMSBpY29uLWJsYWNrXCIgKGNsaWNrKT1cIm9uRWRpdEZvcm1GaWVsZEdyb3VwTmFtZShncm91cE5hbWUpXCI+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICB7eyBncm91cE5hbWUuTmFtZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICA8IS0tIElNUE9SVCAtLT5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF0aGlzLmZvcm1JRFwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLW5leHQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJpbXBvcnRNb2R1bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgSW1wb3J0YVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwhLS0gRU5EIElNUE9SVCAtLT5cclxuXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZvcm1Hcm91cC5pbnZhbGlkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gREFUSSBHRU5FUkFMSSBERUxMQSBGT1JNIC0tPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBBR0dJVU5UQSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItYWRkLWZpZWxkXCIgW2NvbXBsZXRlZF09XCJpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICA8bWF0LWxhYmVsPkNhbXBpIGRhIGluc2VyaXJlPC9tYXQtbGFiZWw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuRmllbGREaWFsb2coKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgY2FtcG88L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuSW5uZXJGb3JtRGlhbG9nKClcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhaW5uZXJGb3JtTWFuYWdtZW50XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBmb3JtIGRpIGRldHRhZ2xpbzwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBidG4tb3V0bGluZWQtcmVkIG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicmVkXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVNlbGVjdGVkRmllbGRzKCdGaWVsZHMnKVwiXHJcbiAgICAgICAgICAqbmdJZj1cInNob3dEZWxldGVCdXR0b25cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+RWxpbWluYSBjYW1waSBzZWxlemlvbmF0aTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BaUVkaXREaWFsb2coKVwiXHJcbiAgICAgICAgICAqbmdJZj1cImVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9fZml4X2hpZ2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPnt7IGlzTmV3Rm9ybSA/ICdDcmVhIGNvbiBBSScgOiAnTW9kaWZpY2EgY29uIEFJJyB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZXFwLXRhYmxlXHJcbiAgICAgIGNsYXNzPVwidGFibGVcIlxyXG4gICAgICAjZmllbGRzVGFibGVcclxuICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICBbY29sdW1uc109XCJmaWVsZHNDb2x1bW5zXCJcclxuICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cImZhbHNlXCJcclxuICAgICAgW2VuYWJsZURyYWdDb2x1bW5dPVwidHJ1ZVwiXHJcbiAgICAgIFtjaGFuZ2VEcmFnUm93UG9zaXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgIFtpc011bHRpcGxlU2VsZWN0aW9uXT1cInRydWVcIlxyXG4gICAgICBbZGF0YV09XCJmb3JtLkZpZWxkc1wiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIGNhbXBvIGluc2VyaXRvJ1wiXHJcbiAgICAgIChkcmFnUmVsZWFzZWRFdmVudCk9XCJvbkRyYWdSZWxlYXNlZCgkZXZlbnQpXCJcclxuICAgICAgKGRyYWdFbmRlZEV2ZW50KT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIlxyXG4gICAgICAoY2hlY2tib3hJbmZvKT1cInRvZ2dsZURlbGV0ZUJ1dHRvbigkZXZlbnQpXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgICBbcGFnaW5hdG9yVmlzaWJsZV09XCJmYWxzZVwiXHJcbiAgICA+XHJcbiAgICA8L2VxcC10YWJsZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBwcmV2aW91c1wiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBmb3JtRm9ybUdyb3VwLmludmFsaWQgfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG5cclxuICA8bmctdGVtcGxhdGUgbWF0U3RlcHBlckljb249XCJlZGl0XCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgIDxtYXQtbGFiZWw+e3sgaW5kZXggKyAxIH19PC9tYXQtbGFiZWw+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVMTEUgT1BFUkFaSU9OSSBTVUkgUkVDT1JEIC0tPlxyXG4gIDwhLS0jPG1hdC1zdGVwPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgQXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZFxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BY3Rpb25PblJlY29yZERpYWxvZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBhemlvbmU8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZXFwLXRhYmxlXHJcbiAgICAgIGNsYXNzPVwidGFibGVcIlxyXG4gICAgICAjYWN0aW9uc09uUmVjb3JkVGFibGVcclxuICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICBbY29sdW1uc109XCJhY3Rpb25zT25SZWNvcmRDb2x1bW5zXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5BY3Rpb25zT25SZWNvcmRcIlxyXG4gICAgICBbZW1wdHlUYWJsZU1lc3NhZ2VdPVwiJ05lc3N1bmEgYWN0aW9uIGluc2VyaXRhJ1wiXHJcbiAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbnNOZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+LS0+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVMTEUgT1BFUkFaSU9OSSBTVUkgUkVDT1JEIC0tPlxyXG5cclxuXHJcblxyXG4gIDwhLS0jcmVnaW9uIEFHR0lVTlRBIERFSSBCT1RUT05JIEFaSU9ORSAtLT4gIFxyXG4gIDxtYXQtc3RlcD5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIEJvdHRvbmkgQXppb25lXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFjdGlvbkJ1dHRvbkRpYWxvZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBib3R0b25lIGF6aW9uZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNhY3Rpb25CdXR0b25zVGFibGVcclxuICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICBbY29sdW1uc109XCJhY3Rpb25CdXR0b25zQ29sdW1uc1wiXHJcbiAgICAgIFtkYXRhXT1cImZvcm0uQWN0aW9uQnV0dG9uc1wiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIGJvdHRvbmUgYXppb25lIGluc2VyaXRvJ1wiXHJcbiAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuXHJcbiAgICAgIFtlbmFibGVEcmFnQW5kRHJvcF09XCJmYWxzZVwiXHJcbiAgICAgIFtlbmFibGVEcmFnQ29sdW1uXT1cInRydWVcIlxyXG4gICAgICBbY2hhbmdlRHJhZ1Jvd1Bvc2l0aW9uXT1cInRydWVcIlxyXG4gICAgICAoZHJhZ1JlbGVhc2VkRXZlbnQpPVwib25EcmFnUmVsZWFzZWQoJGV2ZW50KVwiXHJcbiAgICAgIChkcmFnRW5kZWRFdmVudCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCIgICAgICAgXHJcbiAgICA+XHJcbiAgICA8L2VxcC10YWJsZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b25zTmV4dERpdlwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBwcmV2aW91c1wiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFSSBCT1RUT05JIEFaSU9ORSAtLT4gIFxyXG5cclxuICBcclxuXHJcbiAgPCEtLSNyZWdpb24gVFJJR0dFUlMtLT5cclxuICA8bWF0LXN0ZXA+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICBUcmlnZ2Vyc1xyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuVHJpZ2dlcnNEaWFsb2coKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgdHJpZ2dlcjwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDxlcXAtdGFibGVcclxuICAgICAgICBjbGFzcz1cInRhYmxlXCJcclxuICAgICAgICAjdHJpZ2dlcnNUYWJsZVxyXG4gICAgICAgIFtjcmVhdGVNYXRDYXJkXT1cImZhbHNlXCJcclxuICAgICAgICBbY29sdW1uc109XCJ0cmlnZ2Vyc0NvbHVtbnNcIlxyXG4gICAgICAgIFtkYXRhXT1cImZvcm0uVHJpZ2dlcnNcIlxyXG4gICAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuYSBhY3Rpb24gaW5zZXJpdGEnXCJcclxuICAgICAgICBbc2VhcmNoVGV4dF09XCInJ1wiXHJcbiAgICAgID5cclxuICAgICAgPC9lcXAtdGFibGU+ICAgICAgXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGZvcm1Gb3JtR3JvdXAuaW52YWxpZCB9XCJcclxuICAgICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKHRydWUpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PiAgICAgIFxyXG5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIFRSSUdHRVJTLS0+XHJcblxyXG4gIDwhLS0jcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItcHJldmlld1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoIGZvcm1Gb3JtR3JvdXAudmFsaWQgJiYgZm9ybS5GaWVsZHMgJiYgZm9ybS5GaWVsZHMubGVuZ3RoID4gMCApXCJcclxuICAgICAgPjwvZGl2PlxyXG4gICAgICBBbnRlcHJpbWFcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInNob3dBbGxGaWVsZHNcIlxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgTW9zdHJhIGFuY2hlIGkgY2FtcGkgaW52aXNpYmlsaVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCJcclxuICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3QoKVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidDb250ZXN0dWFsaXp6YXppb25lIGRlbCBEQkdldHRlcidcIlxyXG4gICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPjwvZXFwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiICpuZ0lmPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbiAhPSBudWxsXCI+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZVwiIChjaGFuZ2UpPVwib25Db250ZXN0dWFsaXphdGlvblNlbGVjdFZhbHVlKClcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiICpuZ0lmPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbiAhPSBudWxsXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJhcHBseUNvbnRlc3R1YWxpemF0aW9uKGNvbnRlc3R1YWxpemF0aW9uKVwiPkFwcGxpY2E8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiYXBwbHlDb250ZXN0dWFsaXphdGlvbihudWxsKVwiPlJpbXVvdmk8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGhyLz5cclxuXHJcbiAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICpuZ0lmPVwicHJldmlld0Zvcm0gJiYgZm9ybUNvbXBsZXRlZFwiXHJcbiAgICAgIFtmb3JtXT1cInByZXZpZXdGb3JtXCJcclxuICAgICAgW3VzZXJJRF09XCJVc2VySURcIlxyXG4gICAgICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgICAgIFtmb3JtdWxhT2JqZWN0XSA9IFwiZm9ybXVsYU9iamVjdFwiXHJcbiAgICAgIFtjb25maWd1cmF0aW9uc109XCJ2aWV3Q29uZmlnXCJcclxuICAgICAgW3Nob3dBbGxGaWVsZHNdPVwic2hvd0FsbEZpZWxkc1wiXHJcbiAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgW2luQ29uZmlnXT1cInRydWVcIlxyXG4gICAgICA+XHJcbiAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b24tbmV4dERpdlwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJtci0yIGJ1dHRvbi1leGl0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIG1hdFN0ZXBwZXJQcmV2aW91c1xyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIChjbGljayk9XCJzYXZlRm9ybSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFNhbHZhIGZvcm1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuXHJcbjwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbjwhLS0gRElBTE9HIEFHR0lVTlRBL01PRElGSUNBIENBTVBPIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ZpZWxkPlxyXG4gIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGRcclxuICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgW2ZpZWxkXT1cInNlbGVjdGVkRmllbGRcIlxyXG4gICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXHJcbiAgICBbaW5kZXhGaWVsZF09XCJpbmRleFNlbGVjdGVkRmllbGRcIlxyXG4gICAgW2F2YWlsYWJsZUZpZWxkc109XCJmb3JtLkZpZWxkc1wiXHJcbiAgICBbY29udGVzdHVhbGl6YXRpb25dPVwiY29udGVzdHVhbGl6YXRpb25cIlxyXG4gICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgIFtmaWVsZHNFeHRyYUNvbmZpZ109XCJmaWVsZHNFeHRyYUNvbmZpZ1wiXHJcbiAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuICAgIFtmb3JtRmllbGRzR3JvdXBzXT1cIlxyXG4gICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgICA/IGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgICA6IG51bGxcclxuICAgICAgXCJcclxuXHJcbiAgICAoc2F2ZUZpZWxkRXZlbnQpPVwib25TYXZlRmllbGQoJGV2ZW50KVwiXHJcbiAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgVklTVUFMSVpaQVJFIExBIENPTE9OTkEgREVMTEEgU0VaSU9ORSBORUxMQSBUQUJFTExBIERFSSBGSUVMRFMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gIDxlcXAtc2VsZWN0XHJcbiAgICBbYXJyYXlEYXRhXT1cImZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiXHJcbiAgICBbKG5nTW9kZWxJbnB1dCldPVwicm93LkZpZWxkR3JvdXBcIlxyXG4gICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgIHBsYWNlaG9sZGVyPVwiU2V6aW9uZVwiXHJcbiAgICBbaXNSZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiXHJcbiAgPlxyXG4gIDwvZXFwLXNlbGVjdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgVU5BIEFDVElPTiBTVUkgUkVDT1JEIERFTExBIEZPUk0gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQWN0aW9uT25SZWNvcmQ+XHJcbiAgXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJjb250YWluZXItZmx1aWQgdGhpcmQtbW9kYWxcIlxyXG4gICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiA3MHZoICFpbXBvcnRhbnQ7IG92ZXJmbG93LXg6IGhpZGRlbjsgb3ZlcmZsb3cteTogYXV0b1wiXHJcbiAgPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IHRpdGxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIGluZGV4U2VsZWN0ZWRBY3Rpb24gPj0gMFxyXG4gICAgICAgICAgICAgID8gXCJNb2RpZmljYVwiXHJcbiAgICAgICAgICAgICAgOiBcIkFnZ2l1bmdpXCJcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBhemlvbmUgc3VsIHJlY29yZFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD4gTm9tZSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uTmFtZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD4gSWNvbmEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkljb25cIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLkljb25cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkF6aW9uZSAoSmF2YXNjcmlwdCk8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbcm93c109XCIzXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJBY3Rpb25cIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5BY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYWN0aW9uQXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAoa2V5dXApPVwic2V0QWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwic2V0QWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucyhudWxsKVwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYWN0aW9uQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zRm9ybVwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBtYXQtcmFpc2VkLWJ1dHRvbiBjYW5jZWxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yLTIgc2F2ZVwiXHJcbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlQWN0aW9uT25SZWNvcmQoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cC5pbnZhbGlkXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFNhbHZhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIFVOIEJPVFRPTkUgQVpJT05FIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FjdGlvbkJ1dHRvbj5cclxuICA8YWN0aW9uLWJ1dHRvbi1jcmVhdG9yIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiIFtmb3JtdWxhc109XCJhY3Rpb25CdXR0b25zXCIgW2FjdGlvbkJ1dHRvbl09XCJzZWxlY3RlZEFjdGlvbkJ1dHRvblwiIChvblNhdmVSZWNvcmQpPVwic2F2ZUFjdGlvbkJ1dHRvbnMoJGV2ZW50KVwiPjwvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgQ09ORklHVVJBUkUgTEUgRk9STSBESSBERVRUQUdMSU8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nSW5uZXJGb3JtPlxyXG4gIDwhLS0gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCIgLS0+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3JcclxuXHJcbiAgICBbY29uZmlndXJhdGlvbnNdPVwiaW5uZXJGb3JtQ29uZmlnXCJcclxuICAgIChzYXZlRm9ybUV2ZW50KT1cIm9uU2F2ZU9yRXhpdElubmVyRm9ybSgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgSU1QT1JUIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ltcG9ydD5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJpbXBvcnREaWFsb2dcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJwLTIganVzdGlmeS1jb250ZW50LWFyb3VuZFwiPiBcclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIEltcG9ydFxyXG4gICAgICA8L21hdC1jYXJkLXRpdGxlPiAgICAgICAgXHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiaW5wdXQtZmlsZS1idG4gcGItMlwiIChjaGFuZ2UpPVwib25JbXBvcnQoJGV2ZW50KVwiIC8+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLWJhY2sgbWUtMlwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cImRpc2FibGVkXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2VJbXBvcnQoKVwiXHJcbiAgICAgID5cclxuICAgICAgICBBbm51bGxhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgSSBUUklHR0VSUyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dUcmlnZ2Vycz5cclxuICA8dHJpZ2dlci1jcmVhdG9yIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiIFtmb3JtdWxhc109XCJ0cmlnZ2Vyc1wiIFt0cmlnZ2VyXT1cInNlbGVjdGVkVHJpZ2dlclwiIChvblNhdmVSZWNvcmQpPVwic2F2ZVRyaWdnZXIoJGV2ZW50KVwiPjwvdHJpZ2dlci1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgTU9ESUZJQ0EgQ09OIEFJIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FpRWRpdD5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtaW4td2lkdGg6IDQ4MHB4XCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT57eyBpc05ld0Zvcm0gPyAnQ3JlYSBmb3JtIGNvbiBBSScgOiAnTW9kaWZpY2EgZm9ybSBjb24gQUknIH19PC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0zXCI+XHJcbiAgICAgIDwhLS0gUHJvbXB0IHRleHRhcmVhICsgbWljcm9mb25vIC0tPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBpc05ld0Zvcm0gPyAnRGVzY3JpdmkgaWwgZm9ybSBkYSBjcmVhcmUnIDogJ0Rlc2NyaXZpIGxhIG1vZGlmaWNhIGRhIGFwcG9ydGFyZScgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFpRWRpdFByb21wdFwiXHJcbiAgICAgICAgICAgIHJvd3M9XCI1XCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzTmV3Rm9ybSA/ICdFczogY3JlYSB1biBmb3JtIHBlciBsYSByZWdpc3RyYXppb25lIHBhemllbnRpIGNvbiBjYW1waSBub21lLCBjb2dub21lLCBkYXRhIGRpIG5hc2NpdGEgZSBjb2RpY2UgZmlzY2FsZS4uLicgOiAnRXM6IGFnZ2l1bmdpIHVuIGNhbXBvIGRhdGEgZGkgbmFzY2l0YSwgcmltdW92aSBpbCBjYW1wbyBlbWFpbCwgcmVuZGkgb2JibGlnYXRvcmlvIGlsIGNhbXBvIHRlbGVmb25vLi4uJ1wiXHJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ0cnVlXCJcclxuICAgICAgICAgIFNwZWVjaFRvVGV4dFxyXG4gICAgICAgICAgWyhiaW5kZWRUZXh0KV09XCJhaUVkaXRQcm9tcHRcIlxyXG4gICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMnB4OyB0b3A6IDEycHg7IGN1cnNvcjogcG9pbnRlcjsgY29sb3I6ICM2NjZcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXNOZXdGb3JtID8gJ1BhcmxhIHBlciBkZXNjcml2ZXJlIGlsIGZvcm0nIDogJ1BhcmxhIHBlciBkZXR0YXJlIGxhIG1vZGlmaWNhJ1wiXHJcbiAgICAgICAgPmtleWJvYXJkX3ZvaWNlPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEFsbGVnYXRpIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMiBtdC0xXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhaUVkaXRGaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmF0dGFjaF9maWxlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDZweFwiPkFnZ2l1bmdpIGFsbGVnYXRpIChQREYgbyBpbW1hZ2luaSk8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAjYWlFZGl0RmlsZUlucHV0XHJcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKixhcHBsaWNhdGlvbi9wZGZcIlxyXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25BaUVkaXRGaWxlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8dWwgKm5nSWY9XCJhaUVkaXRBdHRhY2htZW50cy5sZW5ndGggPiAwXCIgc3R5bGU9XCJsaXN0LXN0eWxlOiBub25lOyBwYWRkaW5nOiAwOyBtYXJnaW46IDAgMCAxMnB4XCI+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHQgb2YgYWlFZGl0QXR0YWNobWVudHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBtYXJnaW4tYm90dG9tOiA0cHhcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMThweFwiPmluc2VydF9kcml2ZV9maWxlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPnt7IGF0dC5maWxlTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogIzk5OVwiIChjbGljayk9XCJyZW1vdmVBaUVkaXRBdHRhY2htZW50KGkpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcblxyXG4gICAgICA8IS0tIEF1dG9zYXZlIC0tPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImFpRWRpdEF1dG9zYXZlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAge3sgaXNOZXdGb3JtID8gJ1NhbHZhIGF1dG9tYXRpY2FtZW50ZSBkb3BvIGxhIGNyZWF6aW9uZScgOiAnU2FsdmEgYXV0b21hdGljYW1lbnRlIGRvcG8gbGEgbW9kaWZpY2EnIH19XHJcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuXHJcbiAgICAgIDwhLS0gU3RpbWEgY29zdG8gQUkgKGFnZ2lvcm5hdGEgaW4gdGVtcG8gcmVhbGUgYWwgdmFyaWFyZSBkZWwgcHJvbXB0IGUgZGVnbGkgYWxsZWdhdGkpIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgIDxiPkNvc3RvIHN0aW1hdG8gdXNvIEFJPC9iPjxici8+XHJcbiAgICAgICAgICBQcmltbyB1c286IGFsIG1hc3NpbW8ge3sgZm9ybWF0QWlFZGl0Q29zdChhaUVkaXRDb3N0Rmlyc3RFdXIpIH19IEV1cm88YnIvPlxyXG4gICAgICAgICAgVXNpIHN1Y2Nlc3Npdmk6IGFsIG1hc3NpbW8ge3sgZm9ybWF0QWlFZGl0Q29zdChhaUVkaXRDb3N0U3Vic2VxdWVudEV1cikgfX0gRXVyb1xyXG4gICAgICAgIDwvc21hbGw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIiBzdHlsZT1cImdhcDogOHB4XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJhaUVkaXRMb2FkaW5nXCIgKGNsaWNrKT1cImNsb3NlQWlFZGl0RGlhbG9nKClcIj5cclxuICAgICAgICBBbm51bGxhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhYWlFZGl0UHJvbXB0Py50cmltKCkgfHwgYWlFZGl0TG9hZGluZ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbmRBaUVkaXQoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJhaUVkaXRMb2FkaW5nXCIgZGlhbWV0ZXI9XCIxOFwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW4tcmlnaHQ6IDZweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPHNwYW4+e3sgYWlFZGl0TG9hZGluZyA/ICdFbGFib3JhemlvbmUuLi4nIDogKGlzTmV3Rm9ybSA/ICdDcmVhIGNvbiBBSScgOiAnTW9kaWZpY2EgY29uIEFJJykgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
1555
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNuRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUV4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakUsT0FBTyxFQUF5QixjQUFjLEVBQWUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVbkcsTUFBTSxPQUFPLHFDQUFxQztJQXNLaEQsSUFBSSxrQkFBa0I7UUFDcEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQy9FLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtjQUN2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFTLENBQUM7UUFDL0gsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSx1QkFBdUI7UUFDekIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQy9FLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtjQUN2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLEdBQUcsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFTLENBQUM7UUFDaEksT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFDVSxXQUErQixFQUMvQixNQUFpQixFQUNqQixvQkFBMEMsRUFDMUMsU0FBdUI7UUFIdkIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBaE14QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRzNCLG1CQUFjLEdBQ3JCLElBQUksK0JBQStCLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLGFBQVEsR0FBVyxXQUFXLENBQUMsQ0FBQyxTQUFTO1FBT3hDLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7UUFFbkYsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4Qjs7O1dBR0c7UUFDSCxjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3pCOzs7OztXQUtHO1FBQ0gsMEJBQXFCLEdBQTBCLElBQUksQ0FBQztRQUNwRDs7O1dBR0c7UUFDSCxrQkFBYSxHQUFXLElBQUksQ0FBQztRQUM3QixZQUFPLEdBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQU9qQyxzQkFBc0I7UUFDdEIsbUJBQWMsR0FBVyxJQUFJLENBQUMsQ0FBQyxjQUFjO1FBSTdDLFNBQUksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLGVBQVUsR0FBUyxJQUFJLENBQUM7UUFDeEIsVUFBSyxHQUFZLEtBQUssQ0FBQztRQUN2QixXQUFNLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBR3BDLG9EQUFvRDtRQUNwRCxlQUFVLEdBQStCLElBQUksMEJBQTBCLENBQ3JFLElBQUksRUFDSixLQUFLLEVBQ0wsS0FBSyxFQUNMLEdBQUcsQ0FDSixDQUFDO1FBRUYsa0JBQWEsR0FBcUIsSUFBSSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBTXRCLHFDQUFxQztRQUNyQyxpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUM1Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQThDeEMsZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUFDN0IsWUFBWTtRQUVaOztXQUVHO1FBQ08sa0JBQWEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RTs7V0FFRztRQUNPLHVCQUFrQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTVFLHlCQUF5QjtRQUNmLFFBQUcsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQVNyRSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUUvQixvQkFBb0I7UUFDcEIsOEJBQXlCLEdBQVcsSUFBSSxDQUFDO1FBQ3pDLG1DQUE4QixHQUFXLElBQUksQ0FBQztRQUU5QyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsbUJBQWMsR0FBcUIsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUsxRCxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixzQkFBaUIsR0FBMEUsRUFBRSxDQUFDO1FBQzlGLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRS9CLGtFQUFrRTtRQUNqRCw2QkFBd0IsR0FBRyxJQUFLLENBQUMsQ0FBRSx1Q0FBdUM7UUFDMUUsd0JBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUksOENBQThDO1FBQzVFLHFCQUFnQixHQUFHLElBQUssQ0FBQyxDQUFFLDRDQUE0QztRQUN2RSxpQkFBWSxHQUFHLEtBQU0sQ0FBQyxDQUFDLHlDQUF5QztRQUNoRSx1QkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBTSxxQ0FBcUM7UUFDbEUsb0JBQWUsR0FBRyxJQUFJLENBQUMsQ0FBRyw2QkFBNkI7SUErQnBFLENBQUM7SUFFTCxRQUFRO1FBQ04sYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pFLGFBQWEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxhQUFhO1lBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsYUFBYSxDQUFDO1FBQy9ELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUM7UUFDdEUsSUFBSSxDQUFDLHFCQUFxQjtZQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLHFCQUFxQixDQUFDO1FBQ3ZFLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDO1FBRTFFLElBQUksQ0FBQyxJQUFJO1lBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1Q0FBdUMsQ0FBQyxJQUFJLENBQUM7UUFDbkUsSUFBSSxDQUFDLE1BQU07WUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLHVDQUF1QyxDQUFDLE1BQU0sQ0FBQztRQUNyRSxJQUFJLENBQUMsTUFBTTtZQUNULElBQUksQ0FBQyxjQUFjLENBQUMsdUNBQXVDLENBQUMsTUFBTSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxrQkFBa0I7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1Q0FBdUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWTtZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsdUNBQXVDLENBQUMsWUFBWSxDQUFDO1FBRTNFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFL0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyRCxJQUFJLENBQUMscUJBQXFCO2dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMseUJBQXlCLENBQ2pELElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztZQUNKLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUc7b0JBQ3hEO3dCQUNFLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTTt3QkFDdkIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7cUJBQ3hDO2lCQUNGLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFLO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0RCxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUNqRCxPQUFPLEtBQUssQ0FBQTtTQUNiO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQTtTQUNaO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFZO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDO1lBQzFDLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsbUZBQW1GO1lBQzdHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBSztRQUNyQixJQUFJLENBQUMsQ0FBQztRQUNOLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsaURBQWlEO1FBQ3BFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNYLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLFFBQVEsQ0FBQyxLQUFLO1FBQ1osTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNwQyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUN2QixhQUFhLENBQUMsUUFBUSxDQUFDLHlDQUF5QyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFbkQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRTtnQkFDL0IsSUFBSSxPQUFPLENBQUMsa0NBQWtDLENBQUMsRUFBRTtvQkFDL0MseURBQXlEO29CQUN6RCxJQUFJLFlBQVksR0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDekQsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQ3JCLFlBQVksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7b0JBRXZELFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUVoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3BCO2FBQ0Y7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0IsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFDbkUsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVU7UUFFeEIsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUVoQywrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3RELEtBQTRCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO29CQUNsRSxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUE7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN6RCxZQUFZLEVBQUUsSUFBSTtZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixnQkFBZ0I7WUFDaEIsb0JBQW9CO1lBQ3BCLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELHlCQUF5QjtJQUd6Qjs7T0FFRztJQUVILE1BQU07UUFFSixNQUFNLG1CQUFtQixHQUN2QixJQUFJLEtBQUssRUFBc0IsQ0FBQztRQUNsQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDdkIsU0FBUyxFQUFFLElBQUk7WUFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDdkIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7U0FDeEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFDbkQsbUJBQW1CLEVBQ25CLENBQUMsU0FBaUIsRUFBRSxFQUFFO1lBRXBCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsMEJBQTBCO1lBQ2pGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVmLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQ0YsQ0FBQztJQUVKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsSUFDRSxJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksQ0FBQyxxQkFBcUI7WUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUs7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQ2hEO1lBQ0EsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxLQUFLLEVBQXNCLENBQUM7WUFDbEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN2QixTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3ZCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNoRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUVILGVBQWUsQ0FBQyxHQUFTO1FBRXZCLDhCQUE4QjtRQUM5QixJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsS0FBSyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNsQyxLQUFLLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDcEMsS0FBSyxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQzVDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMxQixLQUFLLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDdEMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUN0QyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQzNELCtCQUErQjtZQUMvQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQ3pDLENBQUM7UUFFRixnQkFBZ0I7SUFFbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzQkFBc0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUMzQixrQkFBa0IsRUFDbEIsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUNqRCxVQUFVLENBQUMsUUFBUTtvQkFDbkIsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7aUJBQzdCLENBQUMsQ0FDSCxDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5QkFBeUIsQ0FBQyxLQUFLO1FBQzdCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7YUFDMUQ7WUFDRCxJQUNFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzlCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FDekMsRUFDRDtnQkFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2FBQ3BFO1lBQ0QsOEVBQThFO1lBQzlFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUMzQixDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCwwQkFBMEIsQ0FBQyxTQUFpQjtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQ2pFLENBQUMsQ0FDRixDQUFDO1FBQ0YsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUMzQixDQUFDO1FBQ0YsdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxFQUFFO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQy9ELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQzdCLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFHRCx3QkFBd0IsQ0FBQyxjQUE4QjtRQUVyRCw2QkFBNkIsQ0FBQyxNQUFNLENBQ2xDLGtCQUFrQixFQUNsQixDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1AsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQyxDQUNGLENBQUM7SUFFSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxRQUFtQixJQUFJO1FBRXJDLGFBQWEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFakQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFdkQsOEVBQThFO1lBQzlFLHNGQUFzRjtZQUN0RixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBRTNDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDOUs7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7U0FFaEM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdkQsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsV0FBVyxDQUFDLEVBQXdDO1FBQ2xELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDckIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUV2QixrQkFBa0I7UUFDbEIsSUFBSSxLQUFLLEVBQUU7WUFDVCwyRkFBMkY7WUFDM0YsSUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLO29CQUN2QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJO3dCQUM5QixDQUFDLENBQUMsSUFBSTt3QkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxDQUNyQyxFQUNEO2dCQUNBLDZCQUE2QixDQUFDLE9BQU8sQ0FDbkMsc0RBQXNELENBQ3ZELENBQUM7Z0JBQ0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO2FBQ3pFO1lBRUQsNkVBQTZFO1lBQzdFLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxFQUFFO2dCQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0wsbUJBQW1CO2dCQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3JCLHlEQUF5RDtvQkFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztpQkFDM0M7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7UUFFRCxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ2YsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUE7U0FDL0I7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRO1lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQzNDO1lBQ0EsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLGFBQW1CLElBQUk7UUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLCtCQUErQixFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1Q0FBdUMsQ0FBQyxrQkFBa0I7WUFDN0UsSUFBSSxDQUFDO1FBQ1Asb0VBQW9FO1FBQ3BFLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsNkJBQTZCO1FBQzdCLDhCQUE4QjtRQUM5QixzQ0FBc0M7UUFFdEMsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXZFLG1FQUFtRTtZQUNuRSxvREFBb0Q7WUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1Q0FBdUMsQ0FBQyxJQUFJO2dCQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLHVDQUF1QyxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUN2RSxVQUFVLENBQUMsSUFBSSxDQUFDO1lBRWxCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQ2xELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQ25DLENBQUM7U0FDSDthQUFNO1lBQ0wsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsdUNBQXVDLENBQUMsSUFBSTtnQkFDL0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNoQztRQUNELHFFQUFxRTtRQUVyRSxJQUFJLENBQUMsZUFBZSxDQUFDLHVDQUF1QyxDQUFDLFlBQVk7WUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDckMsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxLQUFXO1FBQy9CLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixJQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJO2dCQUM3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtvQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN2QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNQLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUk7d0JBQ3JCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUk7NEJBQ2xDLENBQUMsQ0FBQyxJQUFJOzRCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEtBQUssQ0FBQyxDQUFDLENBQ3pDLENBQUM7Z0JBQ0osQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07b0JBQ2YsSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUk7b0JBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxJQUFJO3dCQUN0QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJOzRCQUM5QixDQUFDLENBQUMsSUFBSTs0QkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxDQUNyQyxDQUFDLEVBQ0o7Z0JBQ0EsNkJBQTZCLENBQUMsT0FBTyxDQUNuQyxnRUFBZ0UsQ0FDakUsQ0FBQztnQkFDRixNQUFNLElBQUksS0FBSyxDQUNiLGdFQUFnRSxDQUNqRSxDQUFDO2FBQ0g7WUFFRCxNQUFNLGNBQWMsR0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xELGNBQWMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELGNBQWMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNsQyxjQUFjLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzlELGNBQWMsQ0FBQyxVQUFVO2dCQUN2QixJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSTtvQkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFVBQVU7b0JBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFWCxJQUNFLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJO2dCQUNuQyxJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQyxFQUNoQztnQkFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGNBQWMsQ0FBQzthQUM1RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxFQUFRLENBQUM7aUJBQzFDO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3QkFBd0IsQ0FBQyxTQUF5QixJQUFJO1FBQ3BELElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzFEO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDekUsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLEtBQW1CLElBQUk7UUFFNUMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ2QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztTQUNoQzthQUFNO1lBQ0wsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztTQUNsQztRQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDckUsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDRCQUE0QixDQUFDLGFBQTRCO1FBQ3ZELHFHQUFxRztRQUNyRywwR0FBMEc7UUFDMUcseUdBQXlHO1FBQ3pHLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0QsSUFBSSxDQUFDLHlCQUF5QjtnQkFDNUIsb0JBQW9CLENBQUMsc0JBQXNCLENBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDM0IsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUNEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLElBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDNUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSTtnQkFDbkMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSTtvQkFDL0IsQ0FBQyxDQUFDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxDQUFDLENBQUMsQ0FDdEMsRUFDRDtZQUNBLDZCQUE2QixDQUFDLE9BQU8sQ0FDbkMscURBQXFELENBQ3RELENBQUM7WUFDRixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDeEU7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsRUFBRTtZQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQzNFO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksS0FBSyxFQUFrQixDQUFDO2FBQ3pEO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLE9BQXFCO1FBRXJDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDbkMsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDeEcsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLEVBQUU7b0JBQy9CLGdCQUFnQjtvQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN2QztxQkFBTTtvQkFDTCxtQkFBbUIsR0FBRyxPQUFPLENBQUM7aUJBQy9CO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILHdCQUF3QjtRQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsU0FBa0I7UUFDOUIsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RCxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFdkQsdUVBQXVFO1lBQ3ZFLGlGQUFpRjtZQUNqRixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDeEMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDdEM7Z0JBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQzVCLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoRCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRO1FBRU4sSUFDRSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSTtZQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDN0M7WUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzthQUN6RDtZQUdELHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7WUFFMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtnQkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7YUFDbkc7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFFakMsb0NBQW9DO2dCQUNwQyxLQUFLLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUV4QixJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRTtvQkFDN0MsTUFBTSxJQUFJLEdBQVEsS0FBSyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDbkM7cUJBQU07b0JBQ0wsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO3dCQUN0RCxJQUNpQixLQUFNLENBQUMsUUFBUSxJQUFJLFNBQVM7NEJBQzVCLEtBQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxFQUN0Qzs0QkFDZSxLQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzt5QkFDMUQ7d0JBQ0QsSUFDaUIsS0FBTSxDQUFDLFFBQVEsSUFBSSxTQUFTOzRCQUM1QixLQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFDdEM7NEJBQ2UsS0FBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7eUJBQ3BDO3FCQUNGO29CQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDcEM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRTFCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUUvQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1lBR0QscUJBQXFCO1lBQ3JCLE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCO29CQUNFLFNBQVMsRUFBRSxNQUFNO29CQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ3JCLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDO2lCQUNwQzthQUNGLENBQUM7WUFFRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUlsQixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDN0MsbUJBQW1CLEVBQ25CLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sNkJBQTZCLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCwwQkFBMEI7SUFFMUI7OztPQUdHO0lBQ0ssbUJBQW1CLENBQUMsT0FBYSxJQUFJO1FBRTNDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzNEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7YUFDM0M7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFFO2dCQUNoRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNyRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssRUFBZ0IsQ0FBQzthQUNyRDtZQUVELElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxXQUFXLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUVqQyx5RUFBeUU7b0JBQ3pFLElBQUksS0FBSyxDQUFDLDJCQUEyQixJQUFJLElBQUksRUFBRTt3QkFDN0MsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO3dCQUN2RSxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7cUJBQzFJO3lCQUFNO3dCQUNMLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztxQkFDckM7b0JBRUQsS0FBSyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztnQkFFM0MsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUtLLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CO2dCQUNFLEdBQUcsRUFBRSxRQUFRO2dCQUNiLE9BQU8sRUFBRSxFQUFFO2dCQUNYLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVTtnQkFDM0IsY0FBYyxFQUFFLFdBQVc7Z0JBQzNCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQzVCLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsSUFBSSxFQUFFLE1BQU07d0JBQ1osRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO3FCQUNyRDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsZUFBZTt3QkFDckIsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztxQkFDdkY7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjt3QkFDeEIsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztxQkFDMUQ7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztxQkFDbkU7b0JBQ0QsSUFBSTtvQkFDSix1QkFBdUI7b0JBQ3ZCLDBCQUEwQjtvQkFDMUIsaUNBQWlDO29CQUNqQyxpREFBaUQ7b0JBQ2pELG9FQUFvRTtvQkFDcEUsS0FBSztvQkFDTCxJQUFJO29CQUNKLHdCQUF3QjtvQkFDeEIsNEJBQTRCO29CQUM1QixpQ0FBaUM7b0JBQ2pDLGtEQUFrRDtvQkFDbEQsMkJBQTJCO29CQUMzQix3RUFBd0U7b0JBQ3hFLEtBQUs7aUJBQ047YUFDRjtZQUNEO2dCQUNFLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixPQUFPLEVBQUUsV0FBVztnQkFDcEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO2dCQUNyQixTQUFTLEVBQUUsYUFBYTtnQkFDeEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTthQUM5QjtZQUNELEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUNoRTtnQkFDRSxHQUFHLEVBQUUsYUFBYTtnQkFDbEIsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7YUFDOUI7WUFDRDtnQkFDRSxHQUFHLEVBQUUsMkJBQTJCO2dCQUNoQyxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3JCLFNBQVMsRUFBRSxrQkFBa0I7Z0JBQzdCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7YUFDOUI7WUFDRDtnQkFDRSxHQUFHLEVBQUUsVUFBVTtnQkFDZixPQUFPLEVBQUUsY0FBYztnQkFDdkIsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFDcEMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUN4QixhQUFhLEVBQUU7b0JBQ2IsSUFBSSxFQUFFLDJDQUEyQztvQkFDakQsS0FBSyxFQUFFLHlDQUF5QztpQkFDakQ7Z0JBQ0QsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFO2FBQ3RFO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFO2dCQUNwRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQ3hCLGFBQWEsRUFBRTtvQkFDYixJQUFJLEVBQUUsMkNBQTJDO29CQUNqRCxLQUFLLEVBQUUseUNBQXlDO2lCQUNqRDtnQkFDRCxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7YUFDdEU7WUFDRDtnQkFDRSxHQUFHLEVBQUUsWUFBWTtnQkFDakIsT0FBTyxFQUFFLDBCQUEwQjtnQkFDbkMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVTtnQkFDdEMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUN4QixhQUFhLEVBQUU7b0JBQ2IsSUFBSSxFQUFFLDJDQUEyQztvQkFDakQsS0FBSyxFQUFFLHlDQUF5QztpQkFDakQ7Z0JBQ0QsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFO2FBQ3RFO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLGNBQWM7Z0JBQ25CLE9BQU8sRUFBRSxnQkFBZ0I7Z0JBQ3pCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLHFCQUFxQixDQUFDLDRCQUE0QixDQUFDO2dCQUNySCxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQ3hCLGFBQWEsRUFBRTtvQkFDYixJQUFJLEVBQUUsMkNBQTJDO29CQUNqRCxLQUFLLEVBQUUseUNBQXlDO2lCQUNqRDtnQkFDRCxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7YUFDdEU7WUFDRDtnQkFDRSxHQUFHLEVBQUUsV0FBVztnQkFDaEIsT0FBTyxFQUFFLHlCQUF5QjtnQkFDbEMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUU7Z0JBQ3hFLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTztnQkFDeEIsYUFBYSxFQUFFO29CQUNiLElBQUksRUFBRSwyQ0FBMkM7b0JBQ2pELEtBQUssRUFBRSx5Q0FBeUM7aUJBQ2pEO2dCQUNELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRTthQUN0RTtZQUNEO2dCQUNFLEdBQUcsRUFBRSx3QkFBd0I7Z0JBQzdCLE9BQU8sRUFBRSx5QkFBeUI7Z0JBQ2xDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVO2dCQUNqRyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQ3hCLGFBQWEsRUFBRTtvQkFDYixJQUFJLEVBQUUsMkNBQTJDO29CQUNqRCxLQUFLLEVBQUUseUNBQXlDO2lCQUNqRDtnQkFDRCxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7YUFDdEU7U0FDRixDQUFDO1FBRUYsSUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUN2RDtZQUNBLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzlCLEdBQUcsRUFBRSxZQUFZO2dCQUNqQixPQUFPLEVBQUUsU0FBUztnQkFDbEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7Z0JBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQywwQkFBMEI7Z0JBQ2pELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsMkJBQTJCO1lBQzNCLE1BQU07WUFDTix5QkFBeUI7WUFDekIsMEJBQTBCO1lBQzFCLHlDQUF5QztZQUN6Qyx5REFBeUQ7WUFDekQsb0NBQW9DO1lBQ3BDLE1BQU07WUFDTixLQUFLO1NBQ047UUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUc7WUFDMUI7Z0JBQ0UsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2dCQUMzQixjQUFjLEVBQUUsV0FBVztnQkFDM0IsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDMUIsT0FBTyxFQUFFO29CQUNQO3dCQUNFLElBQUksRUFBRSxVQUFVO3dCQUNoQixJQUFJLEVBQUUsTUFBTTt3QkFDWixFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQztxQkFDbEU7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDO3FCQUNuQztpQkFDRjthQUNGO1lBQ0QsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3pFO2dCQUNFLEdBQUcsRUFBRSxZQUFZO2dCQUNqQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTthQUM1QjtZQUNEO2dCQUNFLEdBQUcsRUFBRSxNQUFNO2dCQUNYLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2FBQzVCO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUNaLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7d0JBQzlDLE9BQU8sU0FBUyxDQUFDO3FCQUNsQjtvQkFDRCxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUIsU0FBUyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQy9DLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7YUFDNUI7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLHNCQUFzQixHQUFHO1lBQzVCO2dCQUNFLEdBQUcsRUFBRSxRQUFRO2dCQUNiLE9BQU8sRUFBRSxFQUFFO2dCQUNYLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVTtnQkFDM0IsY0FBYyxFQUFFLFdBQVc7Z0JBQzNCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQzFCLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsSUFBSSxFQUFFLE1BQU07d0JBQ1osRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUM7cUJBQ3BFO29CQUNEO3dCQUNFLElBQUksRUFBRSxTQUFTO3dCQUNmLElBQUksRUFBRSxRQUFRO3dCQUNkLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7cUJBQ2pEO29CQUNEO3dCQUNFLElBQUksRUFBRSxXQUFXO3dCQUNqQixJQUFJLEVBQUUsY0FBYzt3QkFDcEIsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUM7d0JBQ3BELFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO3FCQUNuRDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsWUFBWTt3QkFDbEIsSUFBSSxFQUFFLGdCQUFnQjt3QkFDdEIsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUM7d0JBQ3JELFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7NEJBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO3FCQUN2QztpQkFDRjthQUNGO1lBQ0QsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQy9ELEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUM5RCxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtTQUNyQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQjtnQkFDRSxHQUFHLEVBQUUsUUFBUTtnQkFDYixPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJLEVBQUUsVUFBVSxDQUFDLFVBQVU7Z0JBQzNCLGNBQWMsRUFBRSxXQUFXO2dCQUMzQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUMxQixPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLElBQUksRUFBRSxNQUFNO3dCQUNaLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDO3FCQUM5RDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsU0FBUzt3QkFDZixJQUFJLEVBQUUsUUFBUTt3QkFDZCxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO3FCQUM5QjtpQkFDRjthQUNGO1lBQ0QsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQzVFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtTQUMzRSxDQUFDO0lBRUosQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDM0MsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDcEMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNoRSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxjQUFjLENBQUMsS0FBSztJQUVwQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCO1FBQzlCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNwRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3JELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDckQsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUMxRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVMsQ0FBQyxLQUFnQjtRQUNoQyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUN4RCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssY0FBYyxDQUFDLEtBQWdCLEVBQUUsZUFBZSxHQUFHLElBQUk7UUFDN0QsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ3pELHdDQUF3QztZQUN4QyxJQUFJLFVBQVUsR0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUU5RCxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDM0MsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtnQkFDM0IsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNMLFVBQVUsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDO2dCQUMxQyw0RUFBNEU7Z0JBQzVFLGlEQUFpRDtnQkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQTthQUNsRDtZQUVELElBQUksbUJBQW1CLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQTtZQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNMLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWdCLEVBQUUsZUFBZSxHQUFHLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQWlCLEVBQUUsTUFBaUI7UUFDakUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2xCLE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7WUFDdkQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQzVCLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWEsQ0FDbkIsT0FBMEMsRUFDMUMsWUFBb0I7UUFFcEIsNkJBQTZCLENBQUMsT0FBTyxDQUNuQyxtQ0FBbUMsRUFDbkMsR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUN4QyxDQUFDLENBQ0YsQ0FBQztZQUNGLElBQUksWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzFCO2lCQUFNLElBQUksWUFBWSxLQUFLLGlCQUFpQixFQUFFO2dCQUM3QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxZQUFZLEtBQUssZUFBZSxFQUFFO2dCQUMzQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7YUFDekM7UUFDSCxDQUFDLEVBQ0QsS0FBSyxFQUNMLG9CQUFvQixDQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxXQUFXLENBQ2pCLE9BQW1DLEVBQ25DLE1BQWUsRUFDZixZQUFvQjtRQUVwQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxNQUFNLFdBQVcsR0FBRyxhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV4RCxJQUFJLFlBQVksS0FBSyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7YUFBTSxJQUFJLFlBQVksS0FBSyxpQkFBaUIsRUFBRTtZQUM3QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGdDQUFnQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7O09BR0c7SUFDSyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDakMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyx3QkFBd0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDM0MsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyw4QkFBOEI7UUFDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLDBCQUEwQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQ0FBZ0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVELFlBQVk7SUFFWixzQkFBc0IsQ0FBQyxFQUFZO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUVILGtCQUFrQixDQUFDLEtBQWMsSUFBSTtRQUVuQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUM3RCxZQUFZLEVBQUUsSUFBSTtZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFnQjtRQUUxQixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQzlCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7b0JBQ3pCLGdCQUFnQjtvQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNsQztxQkFBTTtvQkFDTCxhQUFhLEdBQUcsT0FBTyxDQUFDO2lCQUN6QjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNsQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdEM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQjtRQUM1QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQXFCO1FBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN6RCxZQUFZLEVBQUUsSUFBSTtZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFZO1FBQzdCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU07WUFBRSxPQUFPO1FBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNuQixNQUFNLE1BQU0sR0FBSSxNQUFNLENBQUMsTUFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRyxDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUU7WUFBRSxPQUFPO1FBRXZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLDBEQUEwRDtRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsVUFBVSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDN0IsVUFBVSxDQUFDLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztRQUUzQyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLEVBQUU7WUFDM0MsVUFBVSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1NBQ3JHO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFO29CQUM3QyxNQUFNLElBQUksR0FBUSxLQUFLLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO29CQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ3ZCLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNwQztxQkFBTTtvQkFDTCxLQUFLLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDeEIsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQzNCLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEYsVUFBVSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFaEMsTUFBTSxtQkFBbUIsR0FBRztZQUMxQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2xGLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQy9GLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNwRyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6RixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMvRixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsTSxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzRyxFQUFFLFNBQVMsRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtTQUN0SCxDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFDekQsbUJBQW1CLEVBQ25CLENBQUMsR0FBNkUsRUFBRSxFQUFFO1lBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDakUsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0MsNkJBQTZCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNyRDtRQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsNkJBQTZCLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDL0UsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN2SSxDQUFDO0lBRUQsOEJBQThCO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUM7SUFDdkksQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQU87UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztTQUMxRTtRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQWU7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXVCO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsWUFBb0I7UUFHdkMsNkJBQTZCLENBQUMsT0FBTyxDQUNuQyxxQ0FBcUMsRUFDckMsR0FBRyxFQUFFO1lBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUUzQixDQUFDLEVBQ0QsS0FBSyxFQUNMLG9CQUFvQixDQUNyQixDQUFDO0lBQ0osQ0FBQzs7bUlBendEVSxxQ0FBcUM7dUhBQXJDLHFDQUFxQyx1MURDeERsRCwwcTRCQTB4QmMsK2l3SURsdUJELHFDQUFxQzs0RkFBckMscUNBQXFDO2tCQUxqRCxTQUFTOytCQUNFLGlDQUFpQzsrTEFNbEMsU0FBUztzQkFBakIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBOEJzQyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBZ0NFLFdBQVc7c0JBQXZELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLQyxXQUFXO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTFDLDBCQUEwQjtzQkFEekIsU0FBUzt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3pELGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUTlDLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTXBELG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT25ELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTWxELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBVXZDLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLEdBQUc7c0JBQVosTUFBTTtnQkFJd0MsY0FBYztzQkFBNUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR0UsYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWFBLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1xyXG4gIENlbGxBbGlnbm1lbnRFbnVtLFxyXG4gIENvbmZpZ0NvbHVtbixcclxuICBFcXBUYWJsZUNvbXBvbmVudCxcclxuICBUeXBlQ29sdW1uLFxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBEYXRhR2V0dGVyLCBEYXRhR2V0dGVyVHlwZUVudW0sIEZpZWxkSW52aXNpYmlsaXR5RW51bSwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQWN0aW9uT25SZWNvcmQsXHJcbiAgRm9ybSxcclxuICBGb3JtRmllbGRHcm91cCxcclxuICBGb3JtU2NhbGFyVHlwZUVudW0sXHJcbiAgRm9ybVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcnJheVZhbGlkYXRvcnMgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvY3VzdG9tLWZvcm0tdmFsaWRhdG9ycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFRyaWdnZXIsIEFjdGlvbkJ1dHRvbiwgQWN0aW9uRmxhZ0VudW0sIEZpcmVUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBDb250ZXN0dWFsaXphdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZ2V0dGVyLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlU2VsZWN0b3JGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlU2VsZWN0b3JGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGaWVsZEV4dHJhQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZEV4dHJhQ29uZmlnLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZGVidWdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkc0V4dHJhQ29uZmlnOiBBcnJheTxGaWVsZEV4dHJhQ29uZmlnPjtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZyA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSB2aWV3TW9kZTogc3RyaW5nID0gXCJhZGRPckVkaXRcIjsgLy8gRXhwb3J0XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIHRyaWdnZXJzOiBhbnk7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogYW55O1xyXG4gIEBJbnB1dCgpIGNvbnRlc3R1YWxpemF0aW9uOiBBcnJheTxDb250ZXN0dWFsaXphdGlvbj47XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55OyAvLyBFc2VtcGlvOiB7Y3Vycm9sZTogcm9sZSwgdXNlcjogdXNlciwgbWVkaWNhbDogbWVkaWNhbGV4YW1pbmF0aW9ufVxyXG5cclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG5cclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSBkYXRpLlxyXG4gICAqIFB1w7IgZXNzZXJlIGRlZmluaXRhIGRhbGwndXRlbnRlIG9wcHVyZSBsYXNjaWF0YSBudWxsLCB2aWVuZSBwb3BvbGF0YSBjb24gZGVpXHJcbiAgICogdmFsb3JpIGRpIGRlZmF1bHQgc2UgdmllbmUgdmFsb3JpenphdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiBhbHRyaW1lbnRpXHJcbiAgICogdmllbmUgbGFzY2lhdGEgbnVsbCBlIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGFsIHNlcnZlci5cclxuICAgKi9cclxuICBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogVXJsIGRlbCBzZXJ2ZXIgZGEgY2hpYW1hcmUgcGVyIHJlY3VlcmFyZSwgc2FsdmFyZSBvIGVsaW1pbmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIGRlZmF1bHQgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUuXHJcbiAgICovXHJcbiAgYmFzZVNlcnZlclVybDogc3RyaW5nID0gbnVsbDtcclxuICBjb250ZXh0OiBDb250ZXh0ID0gbmV3IENvbnRleHQoKTtcclxuXHJcbiAgLyogZXhwb3J0IHZhcmlhYmxlcyAqL1xyXG4gIGRvd25sb2FkTmFtZTogc3RyaW5nO1xyXG4gIGRvd25sb2FkSnNvbkhyZWY6IGFueTtcclxuICBzdHJpbmdpZmllZEZvcm06IHN0cmluZztcclxuXHJcbiAgLyogaW1wb3J0IHZhcmlhYmxlcyAqL1xyXG4gIGltcG9ydGVkTW9kdWxlOiBzdHJpbmcgPSBudWxsOyAvLyBqc29uIG9iamVjdFxyXG4gIGRpYWxvZ0ltcG9ydFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dJbXBvcnRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nSW1wb3J0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBmb3JtOiBGb3JtID0gbmV3IEZvcm0oKTtcclxuICBiYWNrdXBGb3JtOiBGb3JtID0gbnVsbDtcclxuICBzYXZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9yZ2FJRDogc3RyaW5nID0gbnVsbDtcclxuICBVc2VySUQ6IG51bWJlciA9IDM2O1xyXG4gIGlubmVyRm9ybU1hbmFnbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlubmVyRm9ybVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICAvKiBDT05GSUdVUkFaSU9ORSBQRVIgVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBICovXHJcbiAgdmlld0NvbmZpZzogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICB0cnVlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBmYWxzZSxcclxuICAgIFwiMFwiXHJcbiAgKTtcclxuXHJcbiAgZm9ybUZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCA9IG51bGw7XHJcbiAgZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gIHByZXZpZXdGb3JtOiBGb3JtO1xyXG4gIGZvcm1GaWVsZEdyb3VwTmFtZTogc3RyaW5nO1xyXG5cclxuICBhY3Rpb25BdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcblxyXG4gIC8vI3JlZ2lvbiBFbnVtZXJhdG9yaSB1c2F0aSBuZWxsJ2h0bWxcclxuICBGb3JtVHlwZUVudW0gPSBGb3JtVHlwZUVudW07XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXppb25lL21vZGlmaWNhIGNhbXBvXHJcbiAgZmllbGRzQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiZmllbGRzVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGZpZWxkc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgaW5kZXhTZWxlY3RlZEZpZWxkOiBudW1iZXI7XHJcbiAgYWN0aW9uT25SZWNvcmRGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZGlhbG9nRmllbGRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nRmllbGRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRmllbGQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSB1bmEgRm9ybSBkaSBkZXR0YWdsaW9cclxuICBzZWxlY3RlZElubmVyRm9ybTogRm9ybTtcclxuICBpbmRleFNlbGVjdGVkSW5uZXJGb3JtOiBudW1iZXI7XHJcbiAgZGlhbG9nSW5uZXJGb3JtUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0lubmVyRm9ybVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0lubmVyRm9ybTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBpbm5lckZvcm1Db25maWc6IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWc7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSB1bmEgYWN0aW9uIHN1aSByZWNvcmQgZGkgdW5hIEZvcm1cclxuICBhY3Rpb25zT25SZWNvcmRDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhY3Rpb25zT25SZWNvcmRUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBhY3Rpb25zT25SZWNvcmRUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRBY3Rpb246IEFjdGlvbk9uUmVjb3JkO1xyXG4gIGluZGV4U2VsZWN0ZWRBY3Rpb246IG51bWJlcjtcclxuICBkaWFsb2dBY3Rpb25PblJlY29yZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBY3Rpb25PblJlY29yZFwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0FjdGlvbk9uUmVjb3JkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgZGVpIGJvdHRvbmkgYXppb25lXHJcbiAgYWN0aW9uQnV0dG9uc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImFjdGlvbkJ1dHRvbnNUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBhY3Rpb25CdXR0b25zVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkQWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b247XHJcbiAgaW5kZXhTZWxlY3RlZEFjdGlvbkJ1dHRvbjogbnVtYmVyO1xyXG4gIGRpYWxvZ0FjdGlvbkJ1dHRvblJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBY3Rpb25CdXR0b25cIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dBY3Rpb25CdXR0b246IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGFjdGlvbkJ1dHRvbnNGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgYWN0aW9uc0ZsYWcgPSBBY3Rpb25GbGFnRW51bTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGVtZXNzbyBxdWFuZG8gc2kgc2FsdmEgdW5hIGZvcm0gZSBub24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gdW4gZW5kcG9pbnQgZGEgY2hpYW1hcmUuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHNhdmVGb3JtRXZlbnQ6IEV2ZW50RW1pdHRlcjxGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGVtZXNzbyBET1BPIGF2ZXIgZXNlZ3VpdG8gdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwZXIgaWwgc2FsdmF0YWdnaW9kaSB1bmEgZm9ybSBhbGwnZW5kcG9pbnQgc3BlY2lmaWNhdG8uXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGFmdGVyU2F2ZUZvcm1FdmVudDogRXZlbnRFbWl0dGVyPEZvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xyXG5cclxuICAvLyBPdXQgY29tcG9uZW50ZSBlc3Rlcm5vXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcblxyXG4gIC8vIFRyaWdnZXJzXHJcbiAgZGlhbG9nVHJpZ2dlcnNSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nVHJpZ2dlcnNcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nVHJpZ2dlcnM6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgc2VsZWN0ZWRUcmlnZ2VyOiBUcmlnZ2VyO1xyXG4gIHRyaWdnZXJzQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwidHJpZ2dlcnNUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgdHJpZ2dlcnNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIHNob3dBbGxGaWVsZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29udGVzdHVhbGl6YXRpb25cclxuICBzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gIHNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZTogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgc2hvd0RlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkRmllbGRzOiBBcnJheTxCYXNlRmllbGQ+ID0gbmV3IEFycmF5PEJhc2VGaWVsZD4oKTtcclxuXHJcbiAgLy8gQUkgRWRpdCBkaWFsb2dcclxuICBkaWFsb2dBaUVkaXRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWlFZGl0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0FpRWRpdDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBhaUVkaXRQcm9tcHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgYWlFZGl0QXR0YWNobWVudHM6IEFycmF5PHsgZmlsZU5hbWU6IHN0cmluZzsgYmFzZTY0Q29udGVudDogc3RyaW5nOyBtZWRpYVR5cGU6IHN0cmluZyB9PiA9IFtdO1xyXG4gIGFpRWRpdEF1dG9zYXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWlFZGl0TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBDb3N0YW50aSBwZXIgbGEgc3RpbWEgZGVsIGNvc3RvIEFJIChIYWlrdSA0LjUsIHByZXp6aSBVU0QvTVRvaylcclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX01PRElGSUVSX1NLSUxMX1RPS0VOUyA9IDJfMDAwOyAgLy8gdG9rZW4gZmlzc2k6IEZsZEpzb25Nb2RpZmllclNraWxsLm1kXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9UT0tFTlNfUEVSX0ZJRUxEID0gMTAwOyAgICAvLyBzdGltYSB0b2tlbiBwZXIgY2FtcG8gZGVsIGZvcm0gc2VyaWFsaXp6YXRvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9PVVRQVVRfVE9LRU5TID0gM181MDA7ICAvLyBzdGltYSBjb25zZXJ2YXRpdmEgb3V0cHV0IEpTT04gbW9kaWZpY2F0b1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfUERGX0NIQVJTID0gMTVfMDYwOyAvLyBmaW5lc3RyYSBtYXggZXN0cmF0dGEgcGVyIGFsbGVnYXRvIFBERlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfQ0hBUlNfUEVSX1RPS0VOID0gNDsgICAgICAvLyBjaGFyL3Rva2VuIG1lZGkgcGVyIHRlc3RvIGl0YWxpYW5vXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9FVVJfVVNEX1JBVEUgPSAxLjEwOyAgIC8vIHRhc3NvIEVVUi9VU0QgYXBwcm9zc2ltYXRvXHJcblxyXG4gIGdldCBhaUVkaXRDb3N0Rmlyc3RFdXIoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZvcm1Ub2tlbnMgPSAodGhpcy5mb3JtPy5GaWVsZHM/Lmxlbmd0aCA/PyAwKSAqIHRoaXMuQUlfVE9LRU5TX1BFUl9GSUVMRDtcclxuICAgIGNvbnN0IHZhcklucHV0ID0gKHRoaXMuYWlFZGl0UHJvbXB0Py5sZW5ndGggPz8gMCkgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTlxyXG4gICAgICArIHRoaXMuYWlFZGl0QXR0YWNobWVudHMubGVuZ3RoICogKHRoaXMuQUlfUERGX0NIQVJTIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU4pO1xyXG4gICAgY29uc3QgdXNkID0gKHRoaXMuQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TICogMC4xMCArIChmb3JtVG9rZW5zICsgdmFySW5wdXQpICogMC4wOCArIHRoaXMuQUlfT1VUUFVUX1RPS0VOUyAqIDAuNDApIC8gMV8wMDBfMDAwO1xyXG4gICAgcmV0dXJuIHVzZCAvIHRoaXMuQUlfRVVSX1VTRF9SQVRFO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpRWRpdENvc3RTdWJzZXF1ZW50RXVyKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBmb3JtVG9rZW5zID0gKHRoaXMuZm9ybT8uRmllbGRzPy5sZW5ndGggPz8gMCkgKiB0aGlzLkFJX1RPS0VOU19QRVJfRklFTEQ7XHJcbiAgICBjb25zdCB2YXJJbnB1dCA9ICh0aGlzLmFpRWRpdFByb21wdD8ubGVuZ3RoID8/IDApIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU5cclxuICAgICAgKyB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzLmxlbmd0aCAqICh0aGlzLkFJX1BERl9DSEFSUyAvIHRoaXMuQUlfQ0hBUlNfUEVSX1RPS0VOKTtcclxuICAgIGNvbnN0IHVzZCA9ICh0aGlzLkFJX01PRElGSUVSX1NLSUxMX1RPS0VOUyAqIDAuMDA4ICsgKGZvcm1Ub2tlbnMgKyB2YXJJbnB1dCkgKiAwLjA4ICsgdGhpcy5BSV9PVVRQVVRfVE9LRU5TICogMC40MCkgLyAxXzAwMF8wMDA7XHJcbiAgICByZXR1cm4gdXNkIC8gdGhpcy5BSV9FVVJfVVNEX1JBVEU7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRBaUVkaXRDb3N0KGV1cjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBldXIudG9GaXhlZCg2KTtcclxuICB9XHJcblxyXG4gIGdldCBpc05ld0Zvcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZm9ybT8uSUQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdNb2RlID0gdGhpcy5kZWJ1Z01vZGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGZvcm1JRCcsIHRoaXMuZm9ybUlEKTtcclxuXHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmNvbnRleHQ7XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy8gdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy51c2VyVG9rZW47XHJcblxyXG4gICAgdGhpcy5mb3JtID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybTtcclxuICAgIHRoaXMub3JnYUlEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcub3JnYUlEO1xyXG4gICAgdGhpcy5Vc2VySUQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5Vc2VySUQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudDtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmO1xyXG5cclxuICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgYmFzZVNlcnZlclVybCDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1JRCkge1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludC5QYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgYWxlcnQoXCJlcnJvcmUhIGVyYW5vIHByZXNlbnRpIGRlbGxlIHBhcmVudGVzaS5cIik7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgc2V0TmFtZShOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zdHJpbmdTYW5pdGl6ZXIoTmFtZSkpIHtcclxuICAgICAgY29uc3QgUmVnRXhwUGFyZXRlc2lzID0gL1tcXChcXClcXFtcXF1cXHtcXH1dL2c7XHJcbiAgICAgIC8vIFJpbXVvdmkgdHV0dGUgbGUgcGFyZW50ZXNpIG5vbiBiaWxhbmNpYXRlXHJcbiAgICAgIHRoaXMuZm9ybS5OYW1lID0gTmFtZS5yZXBsYWNlKFJlZ0V4cFBhcmV0ZXNpcywgJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9ybS5JRCA9PSBudWxsKSB7IC8vIHRoaXMuZm9ybS5Db2RlID09IG51bGwgfHwgdGhpcy5mb3JtLkNvZGUgPT0gdW5kZWZpbmVkIHx8IHRoaXMuZm9ybS5Db2RlID09IFwiXCIgKXtcclxuICAgICAgdGhpcy5zZXRDb2RlKHRoaXMuZm9ybS5OYW1lKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2V0Q29kZShDb2RlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RyaW5nU2FuaXRpemVyKENvZGUpO1xyXG5cclxuICAgIGNvbnN0IFJlZ0V4cFBsYWluID0gL1teXFx3XS9nO1xyXG4gICAgdGhpcy5mb3JtLkNvZGUgPSBDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZShSZWdFeHBQbGFpbiwgXCJcIik7XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogSU1QT1JUIEZVTkNUSU9OICovXHJcbiAgb25JbXBvcnQoZXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KHNlbGVjdGVkRmlsZSwgXCJVVEYtOFwiKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbkltcG9ydCAtIGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCknLCBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICAgICAgdGhpcy5pbXBvcnRlZE1vZHVsZSA9IGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbXBvcnRlZE1vZHVsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpcm0oXCJzdGFpIHBlciBzb3ZyYXNjcml2ZXJlIGlsIG1vZHVsb1wiKSkge1xyXG4gICAgICAgICAgLy8gY2hpYW1vIGlsIHBhcnNlIGNvc8OsIGRhIG5vbiBjcmVhcmUgdW4gcmVmZXJlbmNlQmluZGluZ1xyXG4gICAgICAgICAgdmFyIGltcG9ydGVkRm9ybTogRm9ybSA9IEpTT04ucGFyc2UodGhpcy5pbXBvcnRlZE1vZHVsZSk7XHJcbiAgICAgICAgICBpbXBvcnRlZEZvcm0uSUQgPSBcIlwiO1xyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtLk5hbWUgPSBpbXBvcnRlZEZvcm0uTmFtZSArIFwiIChJbXBvcnRhdG8pXCI7XHJcblxyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtID0gdGhpcy5zZXRJbXBvcnRlZEZvcm0oaW1wb3J0ZWRGb3JtKTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShpbXBvcnRlZEZvcm0pO1xyXG4gICAgICAgICAgdGhpcy5zZXROYW1lKGltcG9ydGVkRm9ybS5OYW1lKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNsb3NlSW1wb3J0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KFwic2VsZXppb25hIHVuIGZpbGVcIik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgYWxlcnQoXCJzZWxlemlvbmEgdW4gZmlsZSB2YWxpZG8gbyBjb250cm9sbGEgY2hlIG5vbiBzaWEgY29ycm90dG9cIik7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNldEltcG9ydGVkRm9ybShmb3JtOiBGb3JtKSB7XHJcblxyXG4gICAgLy8gTW9kaWZpY2EgZGVsIGNyZWF0aW9uIHVzZXIgc3UgSW1wb3J0XHJcbiAgICBmb3JtLkNyZWF0aW9uVXNlciA9IHRoaXMuVXNlcklEO1xyXG5cclxuICAgIC8vIE1vZGlmaWNhIGRlaSBGaWVsZCBzdSBJbXBvcnRcclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXSkge1xyXG4gICAgICAgIChmaWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuSUQgPSAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICBpbXBvcnRNb2R1bGUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbXBvcnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgLy8gd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIC8vIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgLy8gaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltcG9ydCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qIEVORCBJTVBPUlQgRlVOQ1RJT04gKi9cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGRpIGVzcG9ydGF6aW9uZSBtb2R1bG9cclxuICAgKi9cclxuXHJcbiAgZXhwb3J0KCkge1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkV4cG9ydEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKGJhc2U2NHJlczogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0Jsb2IgPSBuZXcgQmxvYihbYmFzZTY0cmVzXSwgeyB0eXBlOiBcInRleHQvcGxhaW5cIiB9KTtcclxuICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3QmxvYik7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGRhdGE7XHJcbiAgICAgICAgbGluay5kb3dubG9hZCA9IFwiZXhwb3J0X1wiICsgdGhpcy5mb3JtSUQgKyBcIl9mb3JtLnR4dFwiOyAvLyBzZXQgYSBuYW1lIGZvciB0aGUgZmlsZVxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUobmV3IEZvcm0oKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqL1xyXG4gIGdldEZvcm1CeUlEKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1JRCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUobmV3IEZvcm0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cm8gbCdleHBvcnQgZGVsIGZvcm1cclxuICAgKi9cclxuXHJcbiAgY29uZmlndXJlRXhwb3J0KHJlczogRm9ybSkge1xyXG5cclxuICAgIC8qIGdldHRpbmcgcmVhZHkgZm9yIGV4cG9ydCAqL1xyXG4gICAgbGV0IGNsb25lID0gbmV3IEZvcm0oKTtcclxuICAgIGNsb25lLkNvZGUgPSBcIklNUE9SVF9cIiArIHJlcy5Db2RlO1xyXG4gICAgY2xvbmUuTmFtZSA9IFwiaW1wb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICBjbG9uZS5EZXNjcmlwdGlvbiA9IHJlcy5EZXNjcmlwdGlvbjtcclxuICAgIGNsb25lLkZvcm1TY2FsYXJUeXBlID0gcmVzLkZvcm1TY2FsYXJUeXBlO1xyXG4gICAgY2xvbmUuRm9ybUZpZWxkc0dyb3VwcyA9IHJlcy5Gb3JtRmllbGRzR3JvdXBzO1xyXG4gICAgY2xvbmUuQWN0aW9uc09uUmVjb3JkID0gcmVzLkFjdGlvbnNPblJlY29yZDtcclxuICAgIGNsb25lLkZpZWxkcyA9IHJlcy5GaWVsZHM7XHJcbiAgICBjbG9uZS5PYmplY3RGaWVsZHMgPSByZXMuT2JqZWN0RmllbGRzO1xyXG4gICAgY2xvbmUuSW5uZXJGb3JtcyA9IHJlcy5Jbm5lckZvcm1zO1xyXG4gICAgY2xvbmUuUm9vdEVudGl0eUlEID0gcmVzLlJvb3RFbnRpdHlJRDtcclxuICAgIGNsb25lLk9yZ2FJRCA9IHJlcy5PcmdhSUQ7XHJcblxyXG4gICAgdGhpcy5kb3dubG9hZE5hbWUgPSBcImV4cG9ydF9cIiArIHJlcy5OYW1lO1xyXG4gICAgdGhpcy5zdHJpbmdpZmllZEZvcm0gPSBKU09OLnN0cmluZ2lmeShjbG9uZSk7XHJcbiAgICB0aGlzLmRvd25sb2FkSnNvbkhyZWYgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9VVRGLTgsXCIgK1xyXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdHJpbmdpZmllZEZvcm0pXHJcbiAgICApO1xyXG5cclxuICAgIC8qIGVuZCBleHBvcnQgKi9cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB0aXBvIGRpIHZpc3VhbGl6emF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqIFNlIGwndXRlbnRlIHNjZWdsaWUgdW5hIHZpc3VhbGl6emF6aW9uZSByYWdncnVwcGF0YSBpbCBtZXRvZG8gYWdnaXVuZ2UgYWwgRm9ybUdyb3VwIHVuIG51b3ZvXHJcbiAgICogY29udHJvbGxvIHBlciBsJ2FycmF5IGRlaSBub21pIGRlbGxlIHNlemlvbmkgZGEgY3JlYXJlLlxyXG4gICAqL1xyXG4gIG9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSkge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpIHtcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkZvcm1GaWVsZHNHcm91cHNcIik7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkZvcm1GaWVsZHNHcm91cHNcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMsIFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRhaW5zKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKSlcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkZvcm1GaWVsZHNHcm91cHNcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gaW52b2NhdG8gYWwga2V5dXAgbmVsbCdpbnB1dCBwZXIgaW5zZXJpcmUgaSBub21pIGRlbGxlIHNlemlvbmkgcGVyIGxhIHZpc3VhbGl6emF6aW9uZVxyXG4gICAqIHJhZ2dydXBwYXRhIGRlbGxhIGZvcm0uIFF1YW50byBsJ3V0ZW50ZSBwcmVtZSBpbCB0YXN0byBpbnZpbyB2aWVuZSBhZ2dpdW50byBpbCBudW92byBub21lIGFsbGVcclxuICAgKiBzZXppb25pIGRpc3BvYmlsaSBzZSBub24gbmUgZXNpc3RlIHVuYSBjb24gbG8gc3Rlc3NvIG5vbWUuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgc3VsbGEgdGFzdGllcmEuXHJcbiAgICovXHJcbiAgb25Gb3JtRmllbGRHcm91cE5hbWVLZXlVcChldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09IFwiRW50ZXJcIiB8fCBldmVudC5jb2RlID09PSBcIk51bXBhZEVudGVyXCIpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcykge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbmV3IEFycmF5PEZvcm1GaWVsZEdyb3VwPigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZChcclxuICAgICAgICAgIChuKSA9PiBuLk5hbWUgPT0gdGhpcy5mb3JtRmllbGRHcm91cE5hbWVcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnB1c2goeyBOYW1lOiB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZSB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybUZpZWxkc0dyb3Vwc1wiXS5zZXRWYWx1ZShcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIGxhIHNlemlvbmUgc2VsZXppb25hdGEgZGEgcXVlbGxlIGRpc3BvbmliaWxpIHBlciBsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBncm91cE5hbWUgTm9tZSBkZWxsYSBzZXppb25lIGRhIGVsaW1pbmFyZS5cclxuICAgKi9cclxuICBvbkRlbGV0ZUZvcm1GaWVsZEdyb3VwTmFtZShncm91cE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuc3BsaWNlKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5maW5kSW5kZXgoKGcpID0+IGcuTmFtZSA9PT0gZ3JvdXBOYW1lKSxcclxuICAgICAgMVxyXG4gICAgKTtcclxuICAgIC8vIEltcG9zdG8gaWwgbnVvdm8gdmFsb3JlIGRlbCBGb3JtQ29udHJvbCBwZXIgYWdnaW9ybmFyZSBsbyBzdGF0byBkZWxsYSBmb3JtLlxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybUZpZWxkc0dyb3Vwc1wiXS5zZXRWYWx1ZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICk7XHJcbiAgICAvLyBTZSBlc2lzdG9ubyBGaWVsZCBsZWdhdGkgYWxsYSBzZXppb25lIGNoZSBzaSB2dW9sZSBlbGltaW5hcmUgYWxsb3JhIHJvbXBvIGlsIGxlZ2FtZS5cclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+IGYuRmllbGRHcm91cCA9PSBncm91cE5hbWUpKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKS5mb3JFYWNoKFxyXG4gICAgICAgIChmKSA9PiAoZi5GaWVsZEdyb3VwID0gbnVsbClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKTtcclxuICB9XHJcblxyXG5cclxuICBvbkVkaXRGb3JtRmllbGRHcm91cE5hbWUoZm9ybUZpZWxkR3JvdXA6IEZvcm1GaWVsZEdyb3VwKSB7XHJcblxyXG4gICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuUHJvbXB0KFxyXG4gICAgICBcIk1vZGlmaWNhIGlsIG5vbWVcIixcclxuICAgICAgKG5hbWUpID0+IHtcclxuICAgICAgICBmb3JtRmllbGRHcm91cC5OYW1lID0gbmFtZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUgdW4gbnVvdm8gY2FtcG8gbyBzaSB2dW9sZSBtb2RpZmljYXJlIHVubyBlc2lzdGVudGUuXHJcbiAgICogTWVtb3JpenphIGwnZXZlbnR1YWxlIEZpZWxkIHNjZWx0byBvbmUgY3JlYSB1bm8gbnVvdm8gcHJpbWEgZGkgYXByaXJlIGlsIGRpYWxvZyBwZXIgbW9kaWZpY2FybG8vYWdnaXVuZ2VybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gQmFzZUZpZWxkIGRhIG1vZGlmaWNhcmUuIFNlIG51bGwgbmUgdmllbmUgY3JlYXRhIHVuYSBudW92YSBpc3RhbnphIHBlciBsJ2FnZ2l1bnRhLlxyXG4gICAqL1xyXG4gIG9wZW5GaWVsZERpYWxvZyhmaWVsZDogQmFzZUZpZWxkID0gbnVsbCkge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvcGVuRmllbGREaWFsb2dcIiwgZmllbGQpO1xyXG5cclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuXHJcbiAgICAgIC8vIERhdG8gY2hlIGNvbiBpbCBKU09OLnBhcnNlIHNpIHBlcmRlIHBlciBzdHJhZGEgbGEgZm9ybXVsYSwgbGEgcmltZXR0byBkb3BvLlxyXG4gICAgICAvLyBUYW50byBvcmFtYWkgaWwgcmlmZXJpbWVudG8gY29uIFwiZmllbGRcIiDDqCBzdGF0byBwZXJzbyBlIHN0aWFtbyBwYXNzYW5kbyB1bmEgc3RyaW5nYVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQuRm9ybXVsYSA9IGZpZWxkLkZvcm11bGE7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogXCJcIiwgTGFiZWxzdHlsZUNTUzogXCJcIiwgQ29sU3BhblNpemVzOiBbXSwgSW52aXNpYmlsaXR5OiBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8gfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGhlaWdodDogXCI4MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzYWx2YSBpbCBjYW1wbyBhcHBlbmEgY3JlYXRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBQcmltYSBkZWwgc2FsdmF0YWdnaW8gY29udHJvbGxhIHNlIGVzaXN0ZSB1biBhbHRybyBjYW1wbyBjb24gbGEgc3Rlc3NhIGxhYmVsLCBpbiBxdWVzdG9cclxuICAgKiBjYXNlIGdlbmVyZSB1biBlcnJvcmUgKGkgY2FtcGkgZGV2b25vIGF2ZXJlIG5vbWksIGUgcXVpbmRpIGxhYmVsLCB1bml2b2NoZSAtIGkgbm9taSB2ZW5nb25vXHJcbiAgICogcmljYXZhdGkgdW5lbmRvIGxlIHBhcm9sZSBjaGUgZm9ybWFubyBsYSBsYWJlbCB0cmFtaXRlIFwiX1wiKS5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgc2FsdmFyZVxyXG4gICAqIEBwYXJhbSByZW9wZW4gc2UgcHJlc2VudGUgcmlhcHJlIGxhIGRpYWxvZyBkaSBtb2RpZmljYSBkZWwgY2FtcG8gcGVzY2FuZG8gZGFsbGEgbGlzdGEgaWwgcHJvc3NpbW8gaW4gY2FzbyBkaSB2YWxvcmUgWzFdIG8gaWwgcHJlY2VkZW50ZSBpbiBjYXNvIGRpIHZhbG9yZSBbLTFdXHJcbiAgICovXHJcbiAgb25TYXZlRmllbGQoZXY6IHsgZmllbGQ6IEJhc2VGaWVsZCwgcmVvcGVuOiBudW1iZXIgfSkge1xyXG4gICAgbGV0IGZpZWxkID0gZXYuZmllbGQ7XHJcbiAgICBsZXQgcmVvcGVuID0gZXYucmVvcGVuO1xyXG5cclxuICAgIC8vIHNlIGMnw6ggaWwgY2FtcG9cclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAvLyBjb250cm9sbG8gY2hlIG5vbiBjaSBzaWEgdW4gYWx0cm8gY2FtcG8gY29uIGxvIHN0ZXNzbyBjb2RlIChsYWJlbCkgZSBub24gc2lhIGVzc28gc3Rlc3NvXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzICYmXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKFxyXG4gICAgICAgICAgKGYsIGkpID0+XHJcbiAgICAgICAgICAgIGYuTGFiZWwgPT09IGZpZWxkLkxhYmVsICYmXHJcbiAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9PSBudWxsXHJcbiAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPT0gaSlcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBjYW1waSBjb24gbG8gc3Rlc3NvIENvZGljZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGNhbXBpIGNvbiBsbyBzdGVzc28gQ29kaWNlLlwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2UgaG8gdW4gaW5kaWNlIGluIGN1aSBpbnNlcmlyZSBpbCBjYW1wbyAodmVyb3NpbWlsbWVudGUgc29ubyBpbiBtb2RpZmljYSlcclxuICAgICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9IG51bGwgJiYgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGRdID0gZmllbGQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gw6ggdW4gY2FtcG8gbnVvdm9cclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgICAgIC8vIHNlIMOoIGlsIHByaW1vIGNhbXBvIGNoZSBzdG8gaW5zZXJlbmRvIHByZXBhcm8gdW4gYXJyYXlcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm9uU2F2ZUZpZWxkXCIsIHRoaXMuZm9ybSlcclxuICAgIHRoaXMuY2xvc2VGaWVsZERpYWxvZygpO1xyXG4gICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG5cclxuICAgIGlmIChyZW9wZW4gIT0gMCkge1xyXG4gICAgICBsZXQgbmV3RmllbGQgPSB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICsgcmVvcGVuXTtcclxuICAgICAgdGhpcy5vcGVuRmllbGREaWFsb2cobmV3RmllbGQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGNvbnRyb2xsYSBzZSBsbyBzdGVwIHBlciBsJ2FnZ2l1bnRhIGRlaSBjYW1waSBuZWxsYSBmb3JtIMOoIGNvbmNsdXNvLlxyXG4gICAqIEByZXR1cm5zIFNlIFRSVUUgbG8gc3RlcCB2aWVuZSBjb25zaWRlcmF0byBjb21wbGV0YXRvIGVkIMOoIHBvc3NiaWxlIHBhc3NhcmUgYWwgc3VjY2Vzc2l2by5cclxuICAgKi9cclxuICBpc0ZpZWxkU3RlcENvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UgJiZcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiAhZi5GaWVsZEdyb3VwKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGlubmVuckZvcm0gRm9ybSBkaSBkZXR0YWdsaW8gZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5Jbm5lckZvcm1EaWFsb2coaW5uZW5yRm9ybTogRm9ybSA9IG51bGwpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0cnVlO1xyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm1cclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWVcclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWZcclxuICAgIC8vIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIC8vIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICAvLyBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiXHJcblxyXG4gICAgaWYgKGlubmVuckZvcm0pIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID0gdGhpcy5mb3JtLklubmVyRm9ybXMuaW5kZXhPZihpbm5lbnJGb3JtKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybS5PbGROYW1lID0gaW5uZW5yRm9ybS5OYW1lO1xyXG4gICAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybSA9XHJcbiAgICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbm5lbnJGb3JtKSk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWUgPVxyXG4gICAgICAgIGlubmVuckZvcm0uTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGYpID0+IGYuTGFiZWwgPT09IGlubmVuckZvcm0uTmFtZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBuZXcgRm9ybSgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSBudWxsO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm0sIHtcclxuXHJcbiAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogXCI4NSVcIixcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gc2NhdGVuYXRvIGFsIHNhbHZhdGFnZ2lvIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpby5cclxuICAgKiBAcGFyYW0gZXZlbnQgRm9ybSBjcmVhdGEvbW9kaWZpY2F0YSBkYWxsJ3V0ZW50ZS4gU2Ugw6ggbnVsbCBhbGxvcmEgbCd1dGVudGUgaGEgYWJiYW5kb25hdG8gbGEgY29uZmlndXJhemlvbmUuXHJcbiAgICovXHJcbiAgb25TYXZlT3JFeGl0SW5uZXJGb3JtKGV2ZW50OiBGb3JtKSB7XHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLk5hbWUgPT09IGV2ZW50Lk5hbWUgfHxcclxuICAgICAgICAodGhpcy5mb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoXHJcbiAgICAgICAgICAgIChhLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGEuTmFtZSA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSAhPT0gaSlcclxuICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgKHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGYuTGFiZWwgPT09IGV2ZW50Lk5hbWUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGZvcm0gZGkgZGV0dGFnbGlvIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW5uZXJGb3JtRmllbGQ6IEJhc2VGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuTmFtZSA9IGV2ZW50Lk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5MYWJlbCA9IGV2ZW50Lk5hbWU7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkZpZWxkVHlwZSA9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRHcm91cCA9XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbFxyXG4gICAgICAgICAgPyB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXS5GaWVsZEdyb3VwXHJcbiAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9IG51bGwgJiZcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPj0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtc1t0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm1dID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBpbm5lckZvcm1GaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5Jbm5lckZvcm1zKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3JtcyA9IG5ldyBBcnJheTxGb3JtPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5wdXNoKGV2ZW50KTtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goaW5uZXJGb3JtRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGFjdGlvbi5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uT25SZWNvcmQgZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5BY3Rpb25PblJlY29yZERpYWxvZyhhY3Rpb246IEFjdGlvbk9uUmVjb3JkID0gbnVsbCkge1xyXG4gICAgaWYgKGFjdGlvbikge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYWN0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gbmV3IEFjdGlvbk9uUmVjb3JkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpO1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhcHJpcmUgaWwgZGlhbG9nIGRpIGNyZWF6aW9uZS9tb2RpZmljYSBkZWkgYm90dG9uaSBhemlvbmUuXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbkJ1dHRvbiBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbkFjdGlvbkJ1dHRvbkRpYWxvZyhldjogQWN0aW9uQnV0dG9uID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChldiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb25CdXR0b24gPSBldjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb25CdXR0b24gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvbiwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICBzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5hY3Rpb25BdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJlxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZpbmQoXHJcbiAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICBhLk5hbWUgPT09IHRoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSAmJlxyXG4gICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPT0gaSlcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmRbdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uXSA9IHRoaXMuc2VsZWN0ZWRBY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkID0gbmV3IEFycmF5PEFjdGlvbk9uUmVjb3JkPigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQucHVzaCh0aGlzLnNlbGVjdGVkQWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsJ2F6aW9uZSBjcmVhdGEvbW9kaWZpY2F0ZS5cclxuICAgKi9cclxuICBzYXZlQWN0aW9uQnV0dG9ucyhlbGVtZW50OiBBY3Rpb25CdXR0b24pIHtcclxuXHJcbiAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIGV4aXN0c0FjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5maW5kKHggPT4geC5CdXR0b25VbmlxdWVJZCA9PSBlbGVtZW50LkJ1dHRvblVuaXF1ZUlkKTtcclxuICAgICAgICBpZiAoZXhpc3RzQWN0aW9uQnV0dG9ucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBOdW92byB0cmlnZ2VyXHJcbiAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleGlzdHNBY3Rpb25CdXR0b25zID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25CdXR0b25SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRlbGxhIGlubmVyIGZvcm0uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dJbm5lckZvcm0oKSB7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGkgZ2VzdGlvbmUgZGVsbGUgYWN0aW9uLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkaSBnZXN0aW9uZSBkZWxsZSBhY3Rpb24gYnV0dG9ucy5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0FjdGlvbkJ1dHRvbnMoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzZWduYXJlIGNvbWUgY29uY2x1c2EgbGEgY3JlYXppb25lIGRlbGxhIGZvcm0gZSBwZXIgY3JlYXJuZSB1bmEgY29waWFcclxuICAgKiBkYSB2aXNhbGl6emFyZSBjb21lIGFudGVwcmltYS5cclxuICAgKiBAcGFyYW0gY29tcGxldGVkIFNlIFRSVUUgc2VnbmEgbGEgZm9ybSBjb21lIGNvbmNsdXNhIGUgbmUgY3JlYSB1bmEgY29waWEgZGEgdmlzdWFsaXp6YXJlXHJcbiAgICovXHJcbiAgc2V0Rm9ybVN0YXR1cyhjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChjb21wbGV0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtKSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJwcmV2aWV3Rm9ybVwiLCB0aGlzLnByZXZpZXdGb3JtKVxyXG5cclxuICAgICAgLy8gUGVyIHZpc3VhbGl6emFyZSBjb3JyZXR0YW1lbnRlIGwnb2FudGVwcmltYSBkZWxsYSBmb3JtIGFwcGVuYSBjcmVhdGFcclxuICAgICAgLy8gYmlzb2duYSB2YWxvcml6emFyZSBsYSBwcm9wcmlldMOgIE5hbWUgZGVpIGNhbXBpIGRlbGxhIGZvcm0gZSBkZWxsZSBJbm5lckZvcm1zLlxyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zICYmXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGxhIGZvcm0gY3JlYXRhIGFsbGEgZmluZSBkZWwgd2l6YXJkLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlRm9ybUV2ZW50XCIuXHJcbiAgICovXHJcbiAgc2F2ZUZvcm0oKSB7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2F2ZWQpIHtcclxuICAgICAgICB0aGlzLmJhY2t1cEZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5iYWNrdXBGb3JtKSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvLyBQZXIgZmFyIGFycml2YXJlIGFsIHNlcnZlciBsJ2FycmF5IGRpIEZpZWxkIGJpc29nbmEgcGFzc2FybGkgc3UgQW55XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMgPSBbXTtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAgIC8vIFRyYXNmb3JtbyBpbCBkYXRhZ2V0dGVyIGluIEJhc2U2NFxyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZmllbGQuRGF0YUdldHRlcikpO1xyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAgICAgICAgIGNvbnN0IGZsZEE6IGFueSA9IGZpZWxkO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YU9iamVjdEZpZWxkcyA9IGZsZEEuTWV0YWRhdGFGaWVsZHM7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhRmllbGRzID0gW107XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmxkQSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBudWxsO1xyXG4gICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25Vc2VyID0gdGhpcy5Vc2VySUQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLk1vZGlmeVVzZXIgPSB0aGlzLlVzZXJJRDtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5UcmlnZ2Vycyk7XHJcbiAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zKTtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybS5Db2RlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldENvZGUodGhpcy5mb3JtLk5hbWUpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy8gY2hpYW1hdGEgZWZmZXR0aXZhXHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkZvcm1cIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybSxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIHRoaXMuc2F2ZWQgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TYXZlRW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKFwiRm9ybSBzYWx2YXRhIGNvbiBzdWNjZXNzbyFcIik7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyU2F2ZUZvcm1FdmVudC5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKFwiRXJyb3JlIG5lbCBzYWx2YXRhZ2dpbyBkZWxsYSBmb3JtXCIpO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yZSBuZWwgc2FsdmF0YWdnaW8gZGVsbGEgZm9ybVwiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlRm9ybUV2ZW50LmVtaXQodGhpcy5mb3JtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBGVU5aSU9OSSBQUklWQVRFXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGxhIGZvcm0gZSBjb25maWd1cmFyZSBjb2xvbm5lL0Zvcm1Hb3VycC5cclxuICAgKiBAcGFyYW0gZm9ybSBGb3JtIGRhIHV0aWxpenphcmUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGb3JtQW5kQ29uZmlndXJlKGZvcm06IEZvcm0gPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGZvcm0gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG4gICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybS5GaWVsZHMgIT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgICAgICAvLyBUcmFzZm9ybW8gaWwgQmFzZTY0U3RyaW5nIGRlbCBEYXRhZ2V0dGVyIG5lbCBEYXRhZ2V0dGVyIHZlcm8gZSBwcm9wcmlvXHJcbiAgICAgICAgICBpZiAoZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IEpTT04ucGFyc2UoYXRvYihmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcpKTtcclxuICAgICAgICAgICAgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gbnVsbCA/IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIDogZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBuZXcgRGF0YUdldHRlcigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUZvcm0oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYSBsZSBjb2xvbm5lIHBlciBsZSB0YWJlbGxlIG5lY2Vzc2FyaWUgYWxsYSBjcmVhemlvbmUgZGVsbGEgZm9ybTpcclxuICAgKiAgLSBwZXIgbGEgdmlzdWFsaXp6YXppb25lIGRlaSBjYW1waSBpbnNlcml0aVxyXG4gICAqICAtIHBlciBsZSBmb3JtIGRpIGRldHRhZ2xpbyBjcmVhdGVcclxuICAgKiAgLSBwZXIgbGUgYXppb25pIGNvbmZpZ3VyYXRlIHN1aSByZWNvcmQgZGVsbGEgZm9ybVxyXG4gICAqL1xyXG5cclxuXHJcblxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmZpZWxkc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDRyZW1cIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmVkaXRGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRHVwbGljYSBzb3R0b1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlRmllbGQoZWxlbWVudCwgZWxlbWVudC5PcmRpbmFsUG9zaXRpb24gKyAxKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRHVwbGljYSBpbiBmb25kb1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlRmllbGQoZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgLy8gICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgLy8gICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgLy8gICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIC8vICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PiB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPT09IDAsXHJcbiAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgLy8gICBuYW1lOiBcIlNwb3N0YSBnacO5XCIsXHJcbiAgICAgICAgICAvLyAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgIC8vICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgLy8gICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgLy8gICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGVsZW1lbnQpID49IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGaWVsZFR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG9sb2dpYVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IEZpZWxkVHlwZUVudW0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiTGFiZWxcIiwgZGlzcGxheTogXCJMYWJlbFwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgOHJlbVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJEZXNjcmlwdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiRGVzY3JpemlvbmVcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG8gUmVjdXBlcm8gRGF0aVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IERhdGFHZXR0ZXJUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlJlcXVpcmVkXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPYmJsaWdhdG9yaW9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuUmVxdWlyZWQsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRm9ybXVsYVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiQ2FsY29sYXRvXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkZvcm11bGEgIT0gbnVsbCAmJiBlbGVtZW50LkZvcm11bGEgIT0gJycsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgaW4gQ29tcGlsYXppb25lXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW52aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPY2N1cGEgc3BhemlvP1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Jbkxpc3RWaWV3IHx8IGVsZW1lbnQuSW52aXNpYmlsaXR5ID09IEZpZWxkSW52aXNpYmlsaXR5RW51bVtcIk5BU0NPU1RPIENPTiBBUkVBIFZJU0lCSUxFXCJdLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlZpc2libGVJZlwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGl0w6AgY29uZGl6aW9uYXRhXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LlZpc2libGVJZiAhPSBudWxsICYmIGVsZW1lbnQuVmlzaWJsZUlmICE9IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiQW5zd2VyU3R5bGUuSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgbmVsbGEgcmlzcG9zdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+ICFlbGVtZW50LkFuc3dlclN0eWxlIHx8IGVsZW1lbnQuQW5zd2VyU3R5bGUgJiYgZWxlbWVudC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3LFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZHNDb2x1bW5zLnNwbGljZSgxLCAwLCB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlNlemlvbmVcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTRyZW1cIiB9LFxyXG4gICAgICB9KTtcclxuICAgICAgLy8gdGhpcy5maWVsZHNDb2x1bW5zLnB1c2goXHJcbiAgICAgIC8vICAge1xyXG4gICAgICAvLyAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgLy8gICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAvLyAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgLy8gICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25CdXR0b25zQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLm9wZW5BY3Rpb25CdXR0b25EaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlQWN0aW9uQnV0dG9uKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkJ1dHRvbkxhYmVsXCIsIGRpc3BsYXk6IFwiRXRpY2hldHRhXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCAzMCVcIiB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiQnV0dG9uQ29kZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiQ29kaWNlXCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDIwJVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSWNvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiSWNvbmFcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJTaG93SW5cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlNlemlvbmlcIixcclxuICAgICAgICB2YWx1ZTogKGVsKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZmluYWxUZXh0ID0gXCJcIjtcclxuICAgICAgICAgIGlmIChlbC5TaG93SW4gPT0gbnVsbCB8fCBlbC5TaG93SW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiTmVzc3VuYVwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWwuU2hvd0luLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGZpbmFsVGV4dCArPSBBY3Rpb25GbGFnRW51bVtlbGVtZW50XSArIFwiIC8gXCI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBmaW5hbFRleHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMjAlXCIgfSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5hY3Rpb25zT25SZWNvcmRDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoZWxlbWVudCkgPj1cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkljb25cIiwgZGlzcGxheTogXCJJY29uYVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiTmFtZVwiLCBkaXNwbGF5OiBcIk5vbWVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAyMCVcIiB9IH0sXHJcbiAgICAgIHsga2V5OiBcIkFjdGlvblwiLCBkaXNwbGF5OiBcIkF6aW9uZVwiIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlcnNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlblRyaWdnZXJzRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRyaWdnZXIoZWxlbWVudCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiZGVzY3JpcHRpb25cIiwgZGlzcGxheTogXCJEZXNjcml6aW9uZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiZXhlY3V0aW9uXCIsIGRpc3BsYXk6IFwiQ29zYSBlc2VndWVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAxNSVcIiB9IH0sXHJcbiAgICBdO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWEgaWwgRm9ybUdyb3VwIHBlciBsJ29nZ2V0dG8gRm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUZvcm0oKSB7XHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgQ29kZTogW3RoaXMuZm9ybS5Db2RlXSxcclxuICAgICAgTmFtZTogW3RoaXMuZm9ybS5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgRGVzY3JpcHRpb246IFt0aGlzLmZvcm0uRGVzY3JpcHRpb25dLFxyXG4gICAgICBGb3JtU2NhbGFyVHlwZTogW3RoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMub25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRHJhZyBhbmQgRHJvcCBkZWxsZSBjb2xvbm5lIGRlbCBmb3JtXHJcbiAgICovXHJcblxyXG4gIG9uRHJhZ1JlbGVhc2VkKGV2ZW50KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgb25EcmFnRW5kZWQoZXZlbnQpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgZXByIGwnYWdnaXVudGEgbyBsYSBtb2RpZmljYSBkaSB1bmEgYWN0aW9uIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpIHtcclxuICAgIHRoaXMuYWN0aW9uT25SZWNvcmRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgTmFtZTogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEljb246IFt0aGlzLnNlbGVjdGVkQWN0aW9uLkljb24sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBBY3Rpb246IFt0aGlzLnNlbGVjdGVkQWN0aW9uLkFjdGlvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoaXVkZSBpbCBkaWFsb2cgcGVyIGFnZ2l1bmdlcmUvbW9kaWZpY2FyZSB1biBGaWVsZCBzZW56YSBzYWx2YXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbG9zZUZpZWxkRGlhbG9nKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRmllbGRSZWYgIT0gdW5kZWZpbmVkKSB0aGlzLmRpYWxvZ0ZpZWxkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgbCdhcGVydHVyYSBkZWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1biBGaWVsZC5cclxuICAgKiBTZSBpbCBmaWVsZCDDqCBkaSB0aXBvIFwiRm9ybSBkaSBkZXR0YWdsaW9cIiBhcHJlIGlsIGRpYWxvZyBwZXIgbGEgbW9kaWZpY2EgZGkgdW5hXHJcbiAgICogSW5uZXJGb3JtIGFsdHJpbWVudGkgYXByZSBxdWVsbG8gcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBkYSBtb2RpZmljYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlZGl0RmllbGQoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgdGhpcy5vcGVuRmllbGREaWFsb2coZmllbGQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcGVuSW5uZXJGb3JtRGlhbG9nKFxyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoKGYpID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsYSBkdXBsaWNhemlvbmUgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGR1cGxpY2F0ZUZpZWxkKGZpZWxkOiBCYXNlRmllbGQsIG9yZGluYWxQb3NpdGlvbiA9IG51bGwpIHtcclxuICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgIT0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKSB7XHJcbiAgICAgIC8vIHJpY3JlbyBsJ29nZ2V0dG8gcGFzc2FuZG8gcGVyIHVuIGpzb25cclxuICAgICAgbGV0IGNsb25lRmllbGQ6IEJhc2VGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuXHJcbiAgICAgIGNsb25lRmllbGQuTGFiZWwgPSBmaWVsZFtcIkxhYmVsXCJdICsgXCJDb3B5XCI7XHJcbiAgICAgIGNsb25lRmllbGQuSUQgPSB0aGlzLmdlbmVyYXRlR1VJRCgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIGlmIChvcmRpbmFsUG9zaXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgIGNsb25lRmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggKyAxO1xyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbG9uZUZpZWxkLk9yZGluYWxQb3NpdGlvbiA9IG9yZGluYWxQb3NpdGlvbjtcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG9yZGluYWxQb3NpdGlvbjtcclxuICAgICAgICAvLyB1dGlsaXp6byBvcmRpbmFsIHBvc2l0aW9uIHBlciBpbmZpbGFyZSBpbCBjYW1wbyBjb3JyZXR0YW1ldG5lIG5lbGxhIGxpc3RhXHJcbiAgICAgICAgLy8gcGVyIGZhcmxvIHNlIG5vbiDDqCBudWxsbyBkZXZvIGNyZWFyZSBsbyBzcGF6aW9cclxuICAgICAgICB0aGlzLk9yZGluYXRlZEluc2VydEZpZWxkKGZpZWxkLCBvcmRpbmFsUG9zaXRpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjbG9uZUZpZWxkU3RydWN0dXJlID0geyBmaWVsZDogY2xvbmVGaWVsZCwgcmVvcGVuOiAwIH1cclxuICAgICAgdGhpcy5vblNhdmVGaWVsZChjbG9uZUZpZWxkU3RydWN0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwibm9uIMOoIHBvc3NpYmlsZSBkdXBsaWNhcmUgdW5hIGZvcm0gZGkgZGV0dGFnbGlvXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBPcmRpbmF0ZWRJbnNlcnRGaWVsZChmaWVsZDogQmFzZUZpZWxkLCBvcmRpbmFsUG9zaXRpb24gPSAwKSB7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLnNwbGljZShvcmRpbmFsUG9zaXRpb24sIDAsIGZpZWxkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9zaXRpb25FeGNoYW5nZUZpZWxkcyhmaWVsZDE6IEJhc2VGaWVsZCwgZmllbGQyOiBCYXNlRmllbGQpIHtcclxuICAgIGNvbnN0IHRlbXAgPSBmaWVsZDE7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzW2ZpZWxkMS5PcmRpbmFsUG9zaXRpb25dID0gZmllbGQyO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkc1tmaWVsZDIuT3JkaW5hbFBvc2l0aW9uXSA9IHRlbXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGdlbmVyYSB1bmEgbnVvdmEgR1VJRFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVHVUlEKCkge1xyXG4gICAgcmV0dXJuICd4eHh4LXh4eHgteHh4eC14eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCxcclxuICAgICAgICB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIHVuIEZpZWxkIGFsbCdpbnRlcm5vIGRpIHVuYSBGb3JtLlxyXG4gICAqIFJpY2hpZWRlIGNvbmZlcm1hIGFsbCd1dGVudGUgcHJpbWEgZGkgcmltdW92ZXJsby5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVsZXRlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkIHwgRm9ybSxcclxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICBcIkVsaW1pbmFyZSBsJ2VsZW1lbnRvIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKFxyXG4gICAgICAgICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uaW5kZXhPZihlbGVtZW50KSxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiRmllbGRzXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25zT25SZWNvcmRcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25CdXR0b25zXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aW9uQnV0dG9uT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZEFjdGlvbkJ1dHRvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgXCJSaWNoaWVzdGEgY29uZmVybWFcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc3Bvc3RhcmUgdW4gY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gZmllbGQgT2dnZXR0byBkaSB0aXBvIEJhc2VGaWVsZCBkYSBzcG9zdGFyZS5cclxuICAgKiBAcGFyYW0gbW92ZVVwIFNlIFRSVUUgYWxsb3JhIHNwb3N0YSB2ZXJzbyBsJ2FsdG8gaWwgY2FtcG8gKGFiYmFzc2EgbCdpbmRpY2UpIGFsdHJpbWVudGkgaWwgY29udHJhcmlvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgbW92ZUVsZW1lbnQoXHJcbiAgICBlbGVtZW50OiBCYXNlRmllbGQgfCBBY3Rpb25PblJlY29yZCxcclxuICAgIG1vdmVVcDogYm9vbGVhbixcclxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzdGFydGluZ0luZGV4ID0gdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uaW5kZXhPZihlbGVtZW50KTtcclxuICAgIGNvbnN0IGVuZGluZ0luZGV4ID0gc3RhcnRpbmdJbmRleCArIChtb3ZlVXAgPyAtMSA6IDEpO1xyXG5cclxuICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZShzdGFydGluZ0luZGV4LCAxKTtcclxuICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZShlbmRpbmdJbmRleCwgMCwgZWxlbWVudCk7XHJcblxyXG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJGaWVsZHNcIikge1xyXG4gICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbnNPblJlY29yZFwiKSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWxsZSBzZXppb25pIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGb3JtRmllbGRHcm91cE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZvckVhY2goKGcsIGkpID0+IChnLk9yZGluYWxQb3NpdGlvbiA9IGkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVpIGNhbXBpIGFnZ2l1bnRpIGluIHVuYSBmb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRGaWVsZHNUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkc1RhYmxlKSB7XHJcbiAgICAgIHRoaXMuZmllbGRzVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVpIGNhbXBpIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0gaW4gYmFzZSBhbGwnb3JkaW5lIGNoZSBsJ3V0ZW50ZVxyXG4gICAqIGhhIGRlZmluaXRvIG5lbGxhIHRhYmVsbGEgaW4gY3VpIHNvbm8gbW9zdHJhdGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgYWN0aW9uLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QWN0aW9uQnV0dG9uT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGFjdGlvbi5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlbGxlIGF6aW9uaSBhZ2dpdW50aXZlIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uc09uUmVjb3JkVGFibGUpIHtcclxuICAgICAgdGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWxsZSBhemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRBY3Rpb25CdXR0b25zT25SZWNvcmRUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZSkge1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCkge1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUUklHR0VSU1xyXG4gICAqL1xyXG5cclxuICBvcGVuVHJpZ2dlcnNEaWFsb2coZXY6IFRyaWdnZXIgPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGV2ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyaWdnZXIgPSBldjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmlnZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ1RyaWdnZXJzUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1RyaWdnZXJzLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVUcmlnZ2VyKGVsZW1lbnQ6IFRyaWdnZXIpIHtcclxuXHJcbiAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uVHJpZ2dlcnMgIT0gbnVsbCkge1xyXG4gICAgICAgIHZhciBleGlzdHNUcmlnZ2VyID0gdGhpcy5mb3JtLlRyaWdnZXJzLmZpbmQoeCA9PiB4LkNJRCA9PSBlbGVtZW50LkNJRCk7XHJcbiAgICAgICAgaWYgKGV4aXN0c1RyaWdnZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gTnVvdm8gdHJpZ2dlclxyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4aXN0c1RyaWdnZXIgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyaWdnZXJzVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dUcmlnZ2Vyc1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlVHJpZ2dlcihlbGVtZW50OiBUcmlnZ2VyKSB7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLmZvcm0uVHJpZ2dlcnMuZmluZEluZGV4KHggPT4geC5DSUQgPT0gZWxlbWVudC5DSUQpO1xyXG4gICAgdGhpcy5mb3JtLlRyaWdnZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLnRyaWdnZXJzVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBY3Rpb25CdXR0b24oZWxlbWVudDogQWN0aW9uQnV0dG9uKSB7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5maW5kSW5kZXgoeCA9PiB4LkJ1dHRvbkNvZGUgPT0gZWxlbWVudC5CdXR0b25Db2RlKTtcclxuICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICB9XHJcblxyXG4gIG9wZW5BaUVkaXREaWFsb2coKSB7XHJcbiAgICB0aGlzLmFpRWRpdFByb21wdCA9IFwiXCI7XHJcbiAgICB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzID0gW107XHJcbiAgICB0aGlzLmFpRWRpdEF1dG9zYXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmFpRWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuZGlhbG9nQWlFZGl0UmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FpRWRpdCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI2MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VBaUVkaXREaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FpRWRpdFJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BaUVkaXRGaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmICghaW5wdXQuZmlsZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgQXJyYXkuZnJvbShpbnB1dC5maWxlcykuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBiYXNlNjQgPSAocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLnNwbGl0KCcsJylbMV07XHJcbiAgICAgICAgdGhpcy5haUVkaXRBdHRhY2htZW50cy5wdXNoKHsgZmlsZU5hbWU6IGZpbGUubmFtZSwgYmFzZTY0Q29udGVudDogYmFzZTY0LCBtZWRpYVR5cGU6IGZpbGUudHlwZSB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICAgIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBaUVkaXRBdHRhY2htZW50KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWlFZGl0QXR0YWNobWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIHNlbmRBaUVkaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWlFZGl0UHJvbXB0Py50cmltKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmFpRWRpdExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIC8vIFByZXBhcmEgaWwgZm9ybSBjb21lIGluIHNhdmVGb3JtOiBGaWVsZHMg4oaSIE9iamVjdEZpZWxkc1xyXG4gICAgY29uc3QgZm9ybVRvU2VuZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtKSk7XHJcbiAgICBmb3JtVG9TZW5kLk9iamVjdEZpZWxkcyA9IFtdO1xyXG4gICAgZm9ybVRvU2VuZC5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IFtdO1xyXG5cclxuICAgIGlmIChmb3JtVG9TZW5kLkZsZEV4dHJhQ29uZmlnVmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgZm9ybVRvU2VuZC5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVRvU2VuZC5GbGRFeHRyYUNvbmZpZ1ZhbHVlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtVG9TZW5kLkZpZWxkcykge1xyXG4gICAgICBmb3JtVG9TZW5kLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gICAgICAgICAgY29uc3QgZmxkQTogYW55ID0gZmllbGQ7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhT2JqZWN0RmllbGRzID0gZmxkQS5NZXRhZGF0YUZpZWxkcztcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFGaWVsZHMgPSBbXTtcclxuICAgICAgICAgIGZsZEEuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmbGRBLkRhdGFHZXR0ZXIgPz8ge30pKTtcclxuICAgICAgICAgIGZsZEEuRGF0YUdldHRlciA9IG51bGw7XHJcbiAgICAgICAgICBmb3JtVG9TZW5kLk9iamVjdEZpZWxkcy5wdXNoKGZsZEEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBidG9hKEpTT04uc3RyaW5naWZ5KGZpZWxkLkRhdGFHZXR0ZXIgPz8ge30pKTtcclxuICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBudWxsO1xyXG4gICAgICAgICAgZm9ybVRvU2VuZC5PYmplY3RGaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGZvcm1Ub1NlbmQuRmllbGRzID0gbnVsbDtcclxuICAgIGZvcm1Ub1NlbmQuT2JqZWN0VHJpZ2dlcnMgPSBKU09OLnN0cmluZ2lmeShmb3JtVG9TZW5kLlRyaWdnZXJzID8/IFtdKTtcclxuICAgIGZvcm1Ub1NlbmQuVHJpZ2dlcnMgPSBudWxsO1xyXG4gICAgZm9ybVRvU2VuZC5PYmplY3RBY3Rpb25CdXR0b25zID0gSlNPTi5zdHJpbmdpZnkoZm9ybVRvU2VuZC5BY3Rpb25CdXR0b25zID8/IFtdKTtcclxuICAgIGZvcm1Ub1NlbmQuQWN0aW9uQnV0dG9ucyA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiRm9ybVwiLCBQYXJhbVZhbHVlOiBmb3JtVG9TZW5kLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIlNwZWVjaFRleHRcIiwgUGFyYW1WYWx1ZTogdGhpcy5haUVkaXRQcm9tcHQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiT3JnYUlEXCIsIFBhcmFtVmFsdWU6IHBhcnNlSW50KHRoaXMub3JnYUlEKSB8fCAwLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIk1vZGlmeVVzZXJcIiwgUGFyYW1WYWx1ZTogdGhpcy5Vc2VySUQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiQXV0b3NhdmVcIiwgUGFyYW1WYWx1ZTogdGhpcy5haUVkaXRBdXRvc2F2ZSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJBdHRhY2htZW50c1wiLCBQYXJhbVZhbHVlOiB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzLm1hcChhID0+ICh7IEZpbGVOYW1lOiBhLmZpbGVOYW1lLCBCYXNlNjRDb250ZW50OiBhLmJhc2U2NENvbnRlbnQsIE1lZGlhVHlwZTogYS5tZWRpYVR5cGUgfSkpLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIlRyaWdnZXJEZWZpbml0aW9uc1wiLCBQYXJhbVZhbHVlOiB0aGlzLnRyaWdnZXJzID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiQWN0aW9uQnV0dG9uRGVmaW5pdGlvbnNcIiwgUGFyYW1WYWx1ZTogdGhpcy5hY3Rpb25CdXR0b25zID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogeyBGb3JtOiBGb3JtLCBXYXJuaW5nczogc3RyaW5nW10sIENvc3RDZW50czogbnVtYmVyLCBFbGFwc2VkTXM6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5haUVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jbG9zZUFpRWRpdERpYWxvZygpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShyZXMuRm9ybSk7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIkZvcm0gbW9kaWZpY2F0YSBjb24gQUkhXCIpO1xyXG4gICAgICAgIGlmIChyZXMuV2FybmluZ3MgJiYgcmVzLldhcm5pbmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcocmVzLldhcm5pbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuYWlFZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKFwiRXJyb3JlIG5lbGxhIG1vZGlmaWNhIGRlbGxhIGZvcm0gY29uIEFJXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcmUgbmVsbGEgbW9kaWZpY2EgZGVsbGEgZm9ybSBjb24gQUlcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25Db250ZXN0dWFsaXphdGlvblNlbGVjdCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlID0gdGhpcy5jb250ZXN0dWFsaXphdGlvbi5maW5kKHggPT4geC5lbnRpdHlUYWJsZU5hbWUgPT0gdGhpcy5zZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uKS5lbnRpdHlJRDtcclxuICB9XHJcblxyXG4gIG9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3RWYWx1ZSgpIHtcclxuICAgIHRoaXMuY29udGVzdHVhbGl6YXRpb24uZmluZCh4ID0+IHguZW50aXR5VGFibGVOYW1lID09IHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbikuZW50aXR5SUQgPSB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5Q29udGVzdHVhbGl6YXRpb24oZWxlbWVudCkge1xyXG4gICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5jb250ZXN0dWFsaXphdGlvbiA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcikge1xyXG4gICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlbGV0ZUJ1dHRvbihldmVudDogQXJyYXk8QmFzZUZpZWxkPikge1xyXG4gICAgdGhpcy5zaG93RGVsZXRlQnV0dG9uID0gZXZlbnQubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBldmVudDtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVNlbGVjdGVkRmllbGRzKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcblxyXG5cclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIFwiRWxpbWluYXJlIGdsaSBlbGVtZW50aSBzZWxlemlvbmF0aT9cIixcclxuICAgICAgKCkgPT4ge1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGRzLmZvckVhY2goKHNlbGVjdGVkRmllbGQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZSh0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKHNlbGVjdGVkRmllbGQpLCAxKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1oZWFkZXIgcm93IHRpdGxlIHAtMVwiICpuZ0lmPVwiaW5uZXJGb3JtTWFuYWdtZW50XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPkFnZ2l1bnRhIGZvcm0gZGkgZGV0dGFnbGlvPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIHRleHQtcmlnaHRcIj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNsb3NlXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nSW5uZXJGb3JtKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSNyZWdpb24gRVhQT1JUIE1PRFVMRSAtLT5cclxuPGRpdiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1leHBvcnRlclwiICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09ICdFeHBvcnQnXCIgY2xhc3M9XCJwLTNcIj5cclxuICBcclxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImV4cG9ydCgpXCI+RXNwb3J0YTwvYnV0dG9uPlxyXG4gIFxyXG4gIDwhLS08YVxyXG4gICAgY2xhc3M9XCJidG4gYnRuLWNsZWFyXCJcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgdGl0bGU9XCJEb3dubG9hZCBKU09OXCJcclxuICAgIFtocmVmXT1cImRvd25sb2FkSnNvbkhyZWZcIlxyXG4gICAgZG93bmxvYWQ9XCJ7eyBkb3dubG9hZE5hbWUgfX0uanNvblwiXHJcbiAgICA+RXhwb3J0PC9hPi0tPlxyXG5cclxuPC9kaXY+XHJcbjwhLS0jZW5kcmVnaW9uIEVYUE9SVCBNT0RVTEUgLS0+XHJcblxyXG48bWF0LWhvcml6b250YWwtc3RlcHBlclxyXG4gICpuZ0lmPVwibG9hZGVyICYmIGZvcm1Gb3JtR3JvdXAgJiYgdmlld01vZGUgPT0gJ2FkZE9yRWRpdCdcIlxyXG4gIGxpbmVhclxyXG4gICNzdGVwcGVyXHJcbiAgW25nQ2xhc3NdPVwieyBvdXRlckZvcm06IHRydWUsICdpbm5lckZvcm1NYW5hZ21lbnQtc3RlcHBlcic6IGlubmVyRm9ybU1hbmFnbWVudCAgfVwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3Itc3RlcHBlciB7eyAnbGFzdC1lZGl0ZWQtc3RlcC0nICsgc3RlcHBlci5zZWxlY3RlZEluZGV4IH19XCJcclxuPlxyXG4gIDwhLS0jcmVnaW9uIERBVEkgR0VORVJBTEkgREVMTEEgRk9STSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItZ2VuZXJhbC1kYXRhXCIgW3N0ZXBDb250cm9sXT1cImZvcm1Gb3JtR3JvdXBcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUZvcm1Hcm91cFwiIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgRGF0aSBnZW5lcmFsaSBkZWxsYSBmb3JtXHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiXHJcbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuQWlFZGl0RGlhbG9nKClcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPnt7IGlzTmV3Rm9ybSA/ICdDcmVhIGNvbiBBSScgOiAnTW9kaWZpY2EgY29uIEFJJyB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZmlyc3RSb3dcIj5cclxuICAgICAgICA8IS0tIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1ZhIGluc2VyaXRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb21lIHJpZmVyaW1lbnRvIG5laSB0ZW1wbGF0ZS4gbm9uIGFjY2V0dGEgY2FyYXR0ZXJpIHNwZWNpYWxpIG5lIHNwYXppLidcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBDb2RpY2UgVW5pdm9jbyBcclxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidWYSBpbnNlcml0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29tZSByaWZlcmltZW50byBuZWkgdGVtcGxhdGUuIG5vbiBhY2NldHRhIGNhcmF0dGVyaSBzcGVjaWFsaSBuZSBzcGF6aS4nXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJDb2RlXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm0uQ29kZVwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic2V0Q29kZShmb3JtLkNvZGUpXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZD1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PiBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj48L2Rpdj5cclxuICAgICAgICAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgICAgICA+ICAgICAgICAgIFxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5Ob21lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5vbWVcIlxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtLk5hbWVcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNldE5hbWUoZm9ybS5OYW1lKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDwhLS0gPG1hdC1sYWJlbD5UaXBvIGRpIHZpc3VhbGl6emF6aW9uZTwvbWF0LWxhYmVsPiAtLT5cclxuICAgICAgICAgIDxlcXAtc2VsZWN0XHJcbiAgICAgICAgICAgIGNsYXNzPVwibmFtZVNlY3Rpb25cIlxyXG4gICAgICAgICAgICBbZW51bURhdGFdPVwiRm9ybVNjYWxhclR5cGVFbnVtXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm0uRm9ybVNjYWxhclR5cGVcIlxyXG4gICAgICAgICAgICBbaXNSZXF1aXJlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZvcm1Gb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Zvcm1TY2FsYXJUeXBlJ1wiXHJcbiAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUaXBvIGRpIHZpc3VhbGl6emF6aW9uZVwiXHJcblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RGVzY3JpemlvbmU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJEZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZvcm0uTmFtZSlcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGVzY3JpemlvbmVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInJvdyBpbnNlcnRlZFwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgJiZcclxuICAgICAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVNlY3Rpb25cIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIHNlemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKSA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGRHcm91cE5hbWVcIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgKGtleXVwKT1cIm9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21lIHNlemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0zXCI+U2V6aW9uaSBpbnNlcml0ZTo8L3NwYW4+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJzZWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cE5hbWUgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uSW5zZXJ0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci0xXCIgKGNsaWNrKT1cIm9uRGVsZXRlRm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZS5OYW1lKVwiPmNsb3NlPC9tYXQtaWNvbj4gXHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci0xIGljb24tYmxhY2tcIiAoY2xpY2spPVwib25FZGl0Rm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZSlcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7IGdyb3VwTmFtZS5OYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDwhLS0gSU1QT1JUIC0tPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwiIXRoaXMuZm9ybUlEXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhciBidXR0b24tbmV4dCBtZS0yXCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImltcG9ydE1vZHVsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBJbXBvcnRhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPCEtLSBFTkQgSU1QT1JUIC0tPlxyXG5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRm9ybUdyb3VwLmludmFsaWRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9tYXQtc3RlcD5cclxuICA8IS0tI2VuZHJlZ2lvbiBEQVRJIEdFTkVSQUxJIERFTExBIEZPUk0gLS0+XHJcblxyXG4gIDwhLS0jcmVnaW9uIEFHR0lVTlRBIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG4gIDxtYXQtc3RlcCBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1hZGQtZmllbGRcIiBbY29tcGxldGVkXT1cImlzRmllbGRTdGVwQ29tcGxldGVkKClcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIDxtYXQtbGFiZWw+Q2FtcGkgZGEgaW5zZXJpcmU8L21hdC1sYWJlbD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWVsZERpYWxvZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBjYW1wbzwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5Jbm5lckZvcm1EaWFsb2coKVwiXHJcbiAgICAgICAgICAqbmdJZj1cIiFpbm5lckZvcm1NYW5hZ21lbnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGZvcm0gZGkgZGV0dGFnbGlvPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIGJ0bi1vdXRsaW5lZC1yZWQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJyZWRcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VsZWN0ZWRGaWVsZHMoJ0ZpZWxkcycpXCJcclxuICAgICAgICAgICpuZ0lmPVwic2hvd0RlbGV0ZUJ1dHRvblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5FbGltaW5hIGNhbXBpIHNlbGV6aW9uYXRpPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFpRWRpdERpYWxvZygpXCJcclxuICAgICAgICAgICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9Gb3JtRWRpdEVuZFBvaW50XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+e3sgaXNOZXdGb3JtID8gJ0NyZWEgY29uIEFJJyA6ICdNb2RpZmljYSBjb24gQUknIH19PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNmaWVsZHNUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImZpZWxkc0NvbHVtbnNcIlxyXG4gICAgICBbZW5hYmxlRHJhZ0FuZERyb3BdPVwiZmFsc2VcIlxyXG4gICAgICBbZW5hYmxlRHJhZ0NvbHVtbl09XCJ0cnVlXCJcclxuICAgICAgW2NoYW5nZURyYWdSb3dQb3NpdGlvbl09XCJ0cnVlXCJcclxuICAgICAgW2lzTXVsdGlwbGVTZWxlY3Rpb25dPVwidHJ1ZVwiXHJcbiAgICAgIFtkYXRhXT1cImZvcm0uRmllbGRzXCJcclxuICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gY2FtcG8gaW5zZXJpdG8nXCJcclxuICAgICAgKGRyYWdSZWxlYXNlZEV2ZW50KT1cIm9uRHJhZ1JlbGVhc2VkKCRldmVudClcIlxyXG4gICAgICAoZHJhZ0VuZGVkRXZlbnQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiXHJcbiAgICAgIChjaGVja2JveEluZm8pPVwidG9nZ2xlRGVsZXRlQnV0dG9uKCRldmVudClcIlxyXG4gICAgICBbc2VhcmNoVGV4dF09XCInJ1wiXHJcbiAgICAgIFtwYWdpbmF0b3JWaXNpYmxlXT1cImZhbHNlXCJcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRmllbGRTdGVwQ29tcGxldGVkKClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGZvcm1Gb3JtR3JvdXAuaW52YWxpZCB9XCJcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImVkaXRcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgPG1hdC1sYWJlbD57eyBpbmRleCArIDEgfX08L21hdC1sYWJlbD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcbiAgPCEtLSM8bWF0LXN0ZXA+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICBBemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGF6aW9uZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNhY3Rpb25zT25SZWNvcmRUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImFjdGlvbnNPblJlY29yZENvbHVtbnNcIlxyXG4gICAgICBbZGF0YV09XCJmb3JtLkFjdGlvbnNPblJlY29yZFwiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuYSBhY3Rpb24gaW5zZXJpdGEnXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uc05leHREaXZcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtc3RlcD4tLT5cclxuICA8IS0tI2VuZHJlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcblxyXG5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVJIEJPVFRPTkkgQVpJT05FIC0tPiAgXHJcbiAgPG1hdC1zdGVwPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgQm90dG9uaSBBemlvbmVcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQWN0aW9uQnV0dG9uRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGJvdHRvbmUgYXppb25lPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGVxcC10YWJsZVxyXG4gICAgICBjbGFzcz1cInRhYmxlXCJcclxuICAgICAgI2FjdGlvbkJ1dHRvbnNUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImFjdGlvbkJ1dHRvbnNDb2x1bW5zXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5BY3Rpb25CdXR0b25zXCJcclxuICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gYm90dG9uZSBhemlvbmUgaW5zZXJpdG8nXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG5cclxuICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cImZhbHNlXCJcclxuICAgICAgW2VuYWJsZURyYWdDb2x1bW5dPVwidHJ1ZVwiXHJcbiAgICAgIFtjaGFuZ2VEcmFnUm93UG9zaXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgIChkcmFnUmVsZWFzZWRFdmVudCk9XCJvbkRyYWdSZWxlYXNlZCgkZXZlbnQpXCJcclxuICAgICAgKGRyYWdFbmRlZEV2ZW50KT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIiAgICAgICBcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbnNOZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIEJPVFRPTkkgQVpJT05FIC0tPiAgXHJcblxyXG4gIFxyXG5cclxuICA8IS0tI3JlZ2lvbiBUUklHR0VSUy0tPlxyXG4gIDxtYXQtc3RlcD5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIFRyaWdnZXJzXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UcmlnZ2Vyc0RpYWxvZygpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSB0cmlnZ2VyPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgPGVxcC10YWJsZVxyXG4gICAgICAgIGNsYXNzPVwidGFibGVcIlxyXG4gICAgICAgICN0cmlnZ2Vyc1RhYmxlXHJcbiAgICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtjb2x1bW5zXT1cInRyaWdnZXJzQ29sdW1uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZm9ybS5UcmlnZ2Vyc1wiXHJcbiAgICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW5hIGFjdGlvbiBpbnNlcml0YSdcIlxyXG4gICAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgICAgPlxyXG4gICAgICA8L2VxcC10YWJsZT4gICAgICBcclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRmllbGRTdGVwQ29tcGxldGVkKClcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZm9ybUZvcm1Hcm91cC5pbnZhbGlkIH1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXModHJ1ZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+ICAgICAgXHJcblxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gVFJJR0dFUlMtLT5cclxuXHJcbiAgPCEtLSNyZWdpb24gVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBIC0tPlxyXG4gIDxtYXQtc3RlcCBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCJcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyggZm9ybUZvcm1Hcm91cC52YWxpZCAmJiBmb3JtLkZpZWxkcyAmJiBmb3JtLkZpZWxkcy5sZW5ndGggPiAwIClcIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICAgIEFudGVwcmltYVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwic2hvd0FsbEZpZWxkc1wiXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICBNb3N0cmEgYW5jaGUgaSBjYW1waSBpbnZpc2liaWxpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJjb250ZXN0dWFsaXphdGlvblwiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uXCJcclxuICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIlxyXG4gICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Db250ZXN0dWFsaXphdGlvblNlbGVjdCgpXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0NvbnRlc3R1YWxpenphemlvbmUgZGVsIERCR2V0dGVyJ1wiXHJcbiAgICAgICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+PC9lcXAtc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCIgKm5nSWY9XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIj5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlXCIgKGNoYW5nZSk9XCJvbkNvbnRlc3R1YWxpemF0aW9uU2VsZWN0VmFsdWUoKVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCIgKm5nSWY9XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImFwcGx5Q29udGVzdHVhbGl6YXRpb24oY29udGVzdHVhbGl6YXRpb24pXCI+QXBwbGljYTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJhcHBseUNvbnRlc3R1YWxpemF0aW9uKG51bGwpXCI+UmltdW92aTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8aHIvPlxyXG5cclxuICAgIDxhZGQtZm9ybS1yZWNvcmRcclxuICAgICAgKm5nSWY9XCJwcmV2aWV3Rm9ybSAmJiBmb3JtQ29tcGxldGVkXCJcclxuICAgICAgW2Zvcm1dPVwicHJldmlld0Zvcm1cIlxyXG4gICAgICBbdXNlcklEXT1cIlVzZXJJRFwiXHJcbiAgICAgIFtvcmdhSURdPVwib3JnYUlEXCJcclxuICAgICAgW2Zvcm11bGFPYmplY3RdID0gXCJmb3JtdWxhT2JqZWN0XCJcclxuICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cInZpZXdDb25maWdcIlxyXG4gICAgICBbc2hvd0FsbEZpZWxkc109XCJzaG93QWxsRmllbGRzXCJcclxuICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICBbaW5Db25maWddPVwidHJ1ZVwiXHJcbiAgICAgID5cclxuICAgIDwvYWRkLWZvcm0tcmVjb3JkPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1uZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cIm1yLTIgYnV0dG9uLWV4aXRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgbWF0U3RlcHBlclByZXZpb3VzXHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVGb3JtKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU2FsdmEgZm9ybVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBIC0tPlxyXG5cclxuPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxyXG5cclxuPCEtLSBESUFMT0cgQUdHSVVOVEEvTU9ESUZJQ0EgQ0FNUE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nRmllbGQ+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZFxyXG4gICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICBbZmllbGRdPVwic2VsZWN0ZWRGaWVsZFwiXHJcbiAgICBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCJcclxuICAgIFtpbmRleEZpZWxkXT1cImluZGV4U2VsZWN0ZWRGaWVsZFwiXHJcbiAgICBbYXZhaWxhYmxlRmllbGRzXT1cImZvcm0uRmllbGRzXCJcclxuICAgIFtjb250ZXN0dWFsaXphdGlvbl09XCJjb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgW2ZpZWxkc0V4dHJhQ29uZmlnXT1cImZpZWxkc0V4dHJhQ29uZmlnXCJcclxuICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gICAgW2Zvcm1GaWVsZHNHcm91cHNdPVwiXHJcbiAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICAgID8gZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICAgIDogbnVsbFxyXG4gICAgICBcIlxyXG5cclxuICAgIChzYXZlRmllbGRFdmVudCk9XCJvblNhdmVGaWVsZCgkZXZlbnQpXCJcclxuICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBWSVNVQUxJWlpBUkUgTEEgQ09MT05OQSBERUxMQSBTRVpJT05FIE5FTExBIFRBQkVMTEEgREVJIEZJRUxEUyAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgPGVxcC1zZWxlY3RcclxuICAgIFthcnJheURhdGFdPVwiZm9ybS5Gb3JtRmllbGRzR3JvdXBzXCJcclxuICAgIFsobmdNb2RlbElucHV0KV09XCJyb3cuRmllbGRHcm91cFwiXHJcbiAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInTmFtZSdcIlxyXG4gICAgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInTmFtZSdcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJTZXppb25lXCJcclxuICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCJcclxuICA+XHJcbiAgPC9lcXAtc2VsZWN0PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBVTkEgQUNUSU9OIFNVSSBSRUNPUkQgREVMTEEgRk9STSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dBY3Rpb25PblJlY29yZD5cclxuICBcclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCB0aGlyZC1tb2RhbFwiXHJcbiAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDcwdmggIWltcG9ydGFudDsgb3ZlcmZsb3cteDogaGlkZGVuOyBvdmVyZmxvdy15OiBhdXRvXCJcclxuICA+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlLXN0YW5kYXJkXCI+XHJcbiAgICAgICAgICB7e1xyXG4gICAgICAgICAgICBpbmRleFNlbGVjdGVkQWN0aW9uICE9IG51bGwgJiYgaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwXHJcbiAgICAgICAgICAgICAgPyBcIk1vZGlmaWNhXCJcclxuICAgICAgICAgICAgICA6IFwiQWdnaXVuZ2lcIlxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGF6aW9uZSBzdWwgcmVjb3JkXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5OYW1lXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBJY29uYSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiSWNvblwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uSWNvblwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+QXppb25lIChKYXZhc2NyaXB0KTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWFcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhY3Rpb25BdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgIChrZXl1cCk9XCJzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgbGlnaHRncmF5ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhY3Rpb25BdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhY3Rpb25BdXRvY29tcGxldGVPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMiBtYi0xXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNGb3JtXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIG1hdC1yYWlzZWQtYnV0dG9uIGNhbmNlbFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKClcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQW5udWxsYVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXItMiBzYXZlXCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBY3Rpb25PblJlY29yZCgpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwLmludmFsaWRcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgU2FsdmFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgVU4gQk9UVE9ORSBBWklPTkUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQWN0aW9uQnV0dG9uPlxyXG4gIDxhY3Rpb24tYnV0dG9uLWNyZWF0b3IgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbZm9ybV09XCJmb3JtXCIgW2Zvcm11bGFzXT1cImFjdGlvbkJ1dHRvbnNcIiBbYWN0aW9uQnV0dG9uXT1cInNlbGVjdGVkQWN0aW9uQnV0dG9uXCIgKG9uU2F2ZVJlY29yZCk9XCJzYXZlQWN0aW9uQnV0dG9ucygkZXZlbnQpXCI+PC9hY3Rpb24tYnV0dG9uLWNyZWF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBDT05GSUdVUkFSRSBMRSBGT1JNIERJIERFVFRBR0xJTyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dJbm5lckZvcm0+XHJcbiAgPCEtLSBbZm9ybV09XCJzZWxlY3RlZElubmVyRm9ybVwiXHJcbiAgICBbaW5uZXJGb3JtTWFuYWdtZW50XT1cInRydWVcIlxyXG4gICAgW2lubmVyRm9ybVJlZl09XCJkaWFsb2dJbm5lckZvcm1SZWZcIiAtLT5cclxuICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvclxyXG5cclxuICAgIFtjb25maWd1cmF0aW9uc109XCJpbm5lckZvcm1Db25maWdcIlxyXG4gICAgKHNhdmVGb3JtRXZlbnQpPVwib25TYXZlT3JFeGl0SW5uZXJGb3JtKCRldmVudClcIlxyXG4gID5cclxuICA8L2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBJTVBPUlQgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nSW1wb3J0PlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cImltcG9ydERpYWxvZ1wiPlxyXG4gICAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cInAtMiBqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kXCI+IFxyXG4gICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgSW1wb3J0XHJcbiAgICAgIDwvbWF0LWNhcmQtdGl0bGU+ICAgICAgICBcclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJpbnB1dC1maWxlLWJ0biBwYi0yXCIgKGNoYW5nZSk9XCJvbkltcG9ydCgkZXZlbnQpXCIgLz5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhciBidXR0b24tYmFjayBtZS0yXCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIChjbGljayk9XCJjbG9zZUltcG9ydCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIEFubnVsbGFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBJIFRSSUdHRVJTIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1RyaWdnZXJzPlxyXG4gIDx0cmlnZ2VyLWNyZWF0b3IgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbZm9ybV09XCJmb3JtXCIgW2Zvcm11bGFzXT1cInRyaWdnZXJzXCIgW3RyaWdnZXJdPVwic2VsZWN0ZWRUcmlnZ2VyXCIgKG9uU2F2ZVJlY29yZCk9XCJzYXZlVHJpZ2dlcigkZXZlbnQpXCI+PC90cmlnZ2VyLWNyZWF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBNT0RJRklDQSBDT04gQUkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQWlFZGl0PlxyXG4gIDxtYXQtY2FyZCBzdHlsZT1cIm1pbi13aWR0aDogNDgwcHhcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPnt7IGlzTmV3Rm9ybSA/ICdDcmVhIGZvcm0gY29uIEFJJyA6ICdNb2RpZmljYSBmb3JtIGNvbiBBSScgfX08L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcblxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTNcIj5cclxuICAgICAgPCEtLSBQcm9tcHQgdGV4dGFyZWEgKyBtaWNyb2Zvbm8gLS0+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IGlzTmV3Rm9ybSA/ICdEZXNjcml2aSBpbCBmb3JtIGRhIGNyZWFyZScgOiAnRGVzY3JpdmkgbGEgbW9kaWZpY2EgZGEgYXBwb3J0YXJlJyB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWlFZGl0UHJvbXB0XCJcclxuICAgICAgICAgICAgcm93cz1cIjVcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNOZXdGb3JtID8gJ0VzOiBjcmVhIHVuIGZvcm0gcGVyIGxhIHJlZ2lzdHJhemlvbmUgcGF6aWVudGkgY29uIGNhbXBpIG5vbWUsIGNvZ25vbWUsIGRhdGEgZGkgbmFzY2l0YSBlIGNvZGljZSBmaXNjYWxlLi4uJyA6ICdFczogYWdnaXVuZ2kgdW4gY2FtcG8gZGF0YSBkaSBuYXNjaXRhLCByaW11b3ZpIGlsIGNhbXBvIGVtYWlsLCByZW5kaSBvYmJsaWdhdG9yaW8gaWwgY2FtcG8gdGVsZWZvbm8uLi4nXCJcclxuICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cInRydWVcIlxyXG4gICAgICAgICAgU3BlZWNoVG9UZXh0XHJcbiAgICAgICAgICBbKGJpbmRlZFRleHQpXT1cImFpRWRpdFByb21wdFwiXHJcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEycHg7IHRvcDogMTJweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogIzY2NlwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpc05ld0Zvcm0gPyAnUGFybGEgcGVyIGRlc2NyaXZlcmUgaWwgZm9ybScgOiAnUGFybGEgcGVyIGRldHRhcmUgbGEgbW9kaWZpY2EnXCJcclxuICAgICAgICA+a2V5Ym9hcmRfdm9pY2U8L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQWxsZWdhdGkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIG10LTFcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFpRWRpdEZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YXR0YWNoX2ZpbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNnB4XCI+QWdnaXVuZ2kgYWxsZWdhdGkgKFBERiBvIGltbWFnaW5pKTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICNhaUVkaXRGaWxlSW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qLGFwcGxpY2F0aW9uL3BkZlwiXHJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkFpRWRpdEZpbGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDx1bCAqbmdJZj1cImFpRWRpdEF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcIiBzdHlsZT1cImxpc3Qtc3R5bGU6IG5vbmU7IHBhZGRpbmc6IDA7IG1hcmdpbjogMCAwIDEycHhcIj5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGF0dCBvZiBhaUVkaXRBdHRhY2htZW50czsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IG1hcmdpbi1ib3R0b206IDRweFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4XCI+aW5zZXJ0X2RyaXZlX2ZpbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4+e3sgYXR0LmZpbGVOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4OyBjdXJzb3I6IHBvaW50ZXI7IGNvbG9yOiAjOTk5XCIgKGNsaWNrKT1cInJlbW92ZUFpRWRpdEF0dGFjaG1lbnQoaSlcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuXHJcbiAgICAgIDwhLS0gQXV0b3NhdmUgLS0+XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiYWlFZGl0QXV0b3NhdmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICB7eyBpc05ld0Zvcm0gPyAnU2FsdmEgYXV0b21hdGljYW1lbnRlIGRvcG8gbGEgY3JlYXppb25lJyA6ICdTYWx2YSBhdXRvbWF0aWNhbWVudGUgZG9wbyBsYSBtb2RpZmljYScgfX1cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cclxuICAgICAgPCEtLSBTdGltYSBjb3N0byBBSSAoYWdnaW9ybmF0YSBpbiB0ZW1wbyByZWFsZSBhbCB2YXJpYXJlIGRlbCBwcm9tcHQgZSBkZWdsaSBhbGxlZ2F0aSkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgPGI+Q29zdG8gc3RpbWF0byB1c28gQUk8L2I+PGJyLz5cclxuICAgICAgICAgIFByaW1vIHVzbzogYWwgbWFzc2ltbyB7eyBmb3JtYXRBaUVkaXRDb3N0KGFpRWRpdENvc3RGaXJzdEV1cikgfX0gRXVybzxici8+XHJcbiAgICAgICAgICBVc2kgc3VjY2Vzc2l2aTogYWwgbWFzc2ltbyB7eyBmb3JtYXRBaUVkaXRDb3N0KGFpRWRpdENvc3RTdWJzZXF1ZW50RXVyKSB9fSBFdXJvXHJcbiAgICAgICAgPC9zbWFsbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIHN0eWxlPVwiZ2FwOiA4cHhcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImFpRWRpdExvYWRpbmdcIiAoY2xpY2spPVwiY2xvc2VBaUVkaXREaWFsb2coKVwiPlxyXG4gICAgICAgIEFubnVsbGFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFhaUVkaXRQcm9tcHQ/LnRyaW0oKSB8fCBhaUVkaXRMb2FkaW5nXCJcclxuICAgICAgICAoY2xpY2spPVwic2VuZEFpRWRpdCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImFpRWRpdExvYWRpbmdcIiBkaWFtZXRlcj1cIjE4XCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi1yaWdodDogNnB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8c3Bhbj57eyBhaUVkaXRMb2FkaW5nID8gJ0VsYWJvcmF6aW9uZS4uLicgOiAoaXNOZXdGb3JtID8gJ0NyZWEgY29uIEFJJyA6ICdNb2RpZmljYSBjb24gQUknKSB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==