@lowcodeunit/applications-flow-common 1.39.3-DevOpsBugs → 1.39.5-team-mgmt

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.
@@ -212,7 +212,7 @@ export class DevopsSourceControlFormComponent {
212
212
  // ...this.Environment,
213
213
  Sources: this.Environment.Sources || {},
214
214
  },
215
- EnvironmentLookup: this.EnvironmentLookup,
215
+ // EnvironmentLookup: this.EnvironmentLookup,
216
216
  // EnterpriseDataTokens: {},
217
217
  };
218
218
  let source = {
@@ -394,4 +394,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
394
394
  type: ViewChild,
395
395
  args: ['branches']
396
396
  }] } });
397
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvY29udHJvbHMvZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvY29udHJvbHMvZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsV0FBVyxFQUVYLFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBSXhCLE9BQU8sRUFBcUMsSUFBSSxFQUFVLE1BQU0sYUFBYSxDQUFDO0FBWTlFLE9BQU8sRUFJSCxxQkFBcUIsR0FDeEIsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPN0MsTUFBTSxPQUFPLGdDQUFnQztJQW1IekMsZ0JBQWdCO0lBQ2hCLFlBQ2MsV0FBb0MsRUFDcEMsTUFBa0IsRUFDbEIsV0FBd0I7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFOdEIsdUJBQWtCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7UUFRekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFFbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBRTdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUEvRkQsY0FBYztJQUVkLElBQVcsbUJBQW1CO1FBQzFCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsQ0FDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FDdEMsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLG9CQUFvQjtRQUMzQixPQUFPLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLENBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQ3ZDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBVyw2QkFBNkI7UUFDcEMsT0FBTyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQVcscUJBQXFCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsQ0FDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFlBQVksQ0FDeEMsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLHVCQUF1QjtRQUM5QixPQUFPLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLENBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQzFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBVyxxQkFBcUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxDQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUN4QyxDQUFDO0lBQ04sQ0FBQztJQStERCxjQUFjO0lBQ1AsZUFBZSxLQUFVLENBQUM7SUFFMUIsV0FBVztRQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxRQUFRO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUV0RSxJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxJQUFJLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDakM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXpELElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtZQUNuQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFL0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxRQUFRO29CQUNULElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN4RDtZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7Z0JBRXBELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN6QixJQUFJLENBQUMsWUFBWTt3QkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDL0Q7YUFDSjtZQUVELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUM7Z0JBRTFELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUVoRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUM5RCxJQUFJLENBQUMsb0JBQW9CO2dCQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUNsRTtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLEVBQUU7WUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FDUCxpQ0FBaUMsRUFDakMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FDNUMsQ0FBQztZQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLDBCQUEwQixFQUFFO1lBQ3pELElBQUksQ0FBQyxrQkFBa0I7Z0JBQ25CLElBQUksQ0FBQyxvQkFBb0IsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRTthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNsQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEUsdUVBQXVFO0lBQzNFLENBQUM7SUFFRCxlQUFlO0lBQ1IsZUFBZSxDQUFDLEtBQXdCO1FBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBbUM7UUFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxlQUFlLENBQUMsUUFBa0I7UUFDckMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQXNCO1FBQzFDLGdCQUFnQjtJQUNwQixDQUFDO0lBRU0sc0JBQXNCO1FBQ3pCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFFL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxzQkFBc0I7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRU0sR0FBRztRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0seUJBQXlCLENBQUMsS0FBc0I7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQXNCO1FBQzNDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFzQjtRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFFekMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxvQkFBb0I7UUFDdkIsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxNQUFjO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBc0I7UUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBRXhDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUUzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRU0sY0FBYztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBRS9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7UUFFbEQsSUFBSSxDQUFDLFdBQVc7YUFDWCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLFFBQXNCLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNILGtEQUFrRDtnQkFFbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDeEI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxRQUFnQjtRQUMzQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsUUFBUSxDQUFDO0lBQy9DLENBQUM7SUFFTSxtQkFBbUI7UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FDUCw0QkFBNEIsRUFDNUIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FDMUMsQ0FBQztRQUNGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsTUFBTSxVQUFVLEdBQXNDO1lBQ2xELFdBQVcsRUFBRTtnQkFDVCx1QkFBdUI7Z0JBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxFQUFFO2FBQzFDO1lBQ0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6Qyw0QkFBNEI7U0FDL0IsQ0FBQztRQUVGLElBQUksTUFBTSxHQUFxQjtZQUMzQixHQUFHLElBQUksQ0FBQyxvQkFBb0I7WUFDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLO1NBQy9DLENBQUM7UUFFRixNQUFNLEdBQUc7WUFDTCxHQUFHLE1BQU07WUFDVCxJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRTtZQUNsRiwwQkFBMEIsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNyRCxZQUFZLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUs7WUFDaEQsVUFBVSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLO1NBQy9DLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxZQUFZLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXhFLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUVsRCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVyQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUNuQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0IsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFUyxxQkFBcUI7UUFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FDMUIsQ0FBQztRQUNOLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFUyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsQ0FDM0MsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNsRCxDQUFDO1FBRUYsSUFBSSxDQUFDLDRCQUE0QixFQUFFLGFBQWEsQ0FDNUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNoRCxDQUFDO1FBRUYsSUFBSSxDQUFDLDRCQUE0QixFQUFFLGFBQWEsQ0FDNUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsYUFBYSxDQUM1QyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ3BELENBQUM7UUFFRixJQUFJLENBQUMsNEJBQTRCLEVBQUUsYUFBYSxDQUM1QyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ2xELENBQUM7SUFDTixDQUFDO0lBRVMsbUJBQW1CO1FBQ3pCLElBQ0ksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sR0FBRyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSztnQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FDbkMsR0FBRyxDQUFDLENBQUMsRUFDWjtZQUNFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3RCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQ3ZELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUNoQyxDQUFDO1NBQ0w7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN0QztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFUyxZQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixJQUFJLENBQUMsV0FBVztpQkFDWCxZQUFZLENBQ1QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FDbkM7aUJBQ0EsU0FBUyxDQUFDLENBQUMsUUFBNkMsRUFBRSxFQUFFO2dCQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBRXBDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUVyQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakQsSUFBSSxDQUFDLGdCQUFnQjt3QkFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztpQkFDMUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM3QixDQUFDO29CQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3hEO2dCQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUUzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7U0FDVjtJQUNMLENBQUM7SUFFUyxjQUFjO1FBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixJQUFJLENBQUMsV0FBVztpQkFDWCxjQUFjLENBQ1gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FDbkM7aUJBQ0EsU0FBUyxDQUFDLENBQUMsUUFBdUMsRUFBRSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFFdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBRXJCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FDM0IsQ0FBQztpQkFDTDtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ1Y7SUFDTCxDQUFDO0lBRVMsaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksQ0FBQyxXQUFXO2FBQ1gsaUJBQWlCLEVBQUU7YUFDbkIsU0FBUyxDQUNOLENBQUMsUUFBbUQsRUFBRSxFQUFFO1lBQ3BELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQ1Asd0JBQXdCLEVBQ3hCLElBQUksQ0FBQyxtQkFBbUIsQ0FDM0IsQ0FBQztZQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBRXJCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLFlBQVksRUFBRTtnQkFDekMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUN6QyxDQUFDO29CQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FDakIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FDeEMsQ0FBQztnQkFDTixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDVDtRQUNMLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVTLGdCQUFnQixDQUFDLGFBQXFCLElBQUk7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVc7YUFDWCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO2FBQ3BELFNBQVMsQ0FBQyxDQUFDLFFBQWlELEVBQUUsRUFBRTtZQUM3RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUV4QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVyQixJQUFJLFVBQVUsRUFBRTtnQkFDWixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBRWhELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFFcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7d0JBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztxQkFDekI7Z0JBQ0wsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ1Q7aUJBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzthQUNsQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVTLHlCQUF5QjtRQUMvQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVuQyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLENBQUMsU0FBUyxDQUNsRCxDQUFDLFFBQW9ELEVBQUUsRUFBRTtnQkFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUVyQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBRXBDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pDLENBQUMsRUFDRCxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN4QyxDQUFDLENBQ0osQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVTLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQ3hDLG9CQUFvQixFQUNwQixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUNyRCxDQUFDO1FBRUYsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FDeEMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUNqRCxJQUFJLFdBQVcsQ0FDWCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFDNUMsVUFBVSxDQUFDLFFBQVEsQ0FDdEIsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FDeEMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUMvQyxJQUFJLFdBQVcsQ0FDWCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFDMUMsVUFBVSxDQUFDLFFBQVEsQ0FDdEIsQ0FDSixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQ3hDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDN0MsSUFBSSxXQUFXLENBQ1gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQ3pDLFVBQVUsQ0FBQyxRQUFRLENBQ3RCLENBQ0osQ0FBQztZQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDO1lBRTVELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQ3hDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDL0MsSUFBSSxXQUFXLENBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQzFDLFVBQVUsQ0FBQyxRQUFRLENBQ3RCLENBQ0osQ0FBQztTQUNMO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQ3hDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDOUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUM3RCxDQUFDO1NBQ0w7SUFDTCxDQUFDOzs2SEE1bkJRLGdDQUFnQztpSEFBaEMsZ0NBQWdDLGdmQzlDN0MscWllQThaQTsyRkRoWGEsZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNJLGdDQUFnQztpS0FVbkMsMEJBQTBCO3NCQURoQyxLQUFLO3VCQUFDLCtCQUErQjtnQkFJL0IsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxhQUFhO2dCQUliLGlCQUFpQjtzQkFEdkIsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBSXBCLE9BQU87c0JBRGIsS0FBSzt1QkFBQyxTQUFTO2dCQUlULGVBQWU7c0JBRHJCLE1BQU07dUJBQUMsbUJBQW1CO2dCQUlwQixhQUFhO3NCQURuQixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT01NQSwgRU5URVIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgRm9ybUJ1aWxkZXIsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgQmFzZU1vZGVsZWRSZXNwb25zZSwgQmFzZVJlc3BvbnNlLCBHdWlkLCBTdGF0dXMgfSBmcm9tICdAbGN1L2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEVhQ0FydGlmYWN0LFxuICAgIEVhQ0Rldk9wc0FjdGlvbixcbiAgICBFYUNFbnZpcm9ubWVudEFzQ29kZSxcbiAgICBFYUNTb3VyY2VDb250cm9sLFxufSBmcm9tICdAc2VtYW50aWNqcy9jb21tb24nO1xuaW1wb3J0IHsgQXBwbGljYXRpb25zRmxvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbnMtZmxvdy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgRWFDU2VydmljZSxcbiAgICBTYXZlRW52aXJvbm1lbnRBc0NvZGVFdmVudFJlcXVlc3QsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VhYy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgR2l0SHViQnJhbmNoLFxuICAgIEdpdEh1Yk9yZ2FuaXphdGlvbixcbiAgICBHaXRIdWJSZXBvc2l0b3J5LFxuICAgIFByb2plY3RIb3N0aW5nRGV0YWlscyxcbn0gZnJvbSAnLi4vLi4vc3RhdGUvYXBwbGljYXRpb25zLWZsb3cuc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xjdS1kZXZvcHMtc291cmNlLWNvbnRyb2wtZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Rldm9wcy1zb3VyY2UtY29udHJvbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kZXZvcHMtc291cmNlLWNvbnRyb2wtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEZXZvcHNTb3VyY2VDb250cm9sRm9ybUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXRcbntcbiAgICAvLyAgRmllbGRzXG5cbiAgICBASW5wdXQoJ2VkaXRpbmctc291cmNlLWNvbnRyb2wtbG9va3VwJylcbiAgICBwdWJsaWMgRWRpdGluZ1NvdXJjZUNvbnRyb2xMb29rdXA6IHN0cmluZztcblxuICAgIEBJbnB1dCgnZW52aXJvbm1lbnQnKVxuICAgIHB1YmxpYyBFbnZpcm9ubWVudDogRWFDRW52aXJvbm1lbnRBc0NvZGU7XG5cbiAgICBASW5wdXQoJ2Vudmlyb25tZW50LWxvb2t1cCcpXG4gICAgcHVibGljIEVudmlyb25tZW50TG9va3VwOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoJ2xvYWRpbmcnKVxuICAgIHB1YmxpYyBMb2FkaW5nOiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgnc2F2ZS1zdGF0dXMtZXZlbnQnKVxuICAgIHB1YmxpYyBTYXZlU3RhdHVzRXZlbnQ6IEV2ZW50RW1pdHRlcjxTdGF0dXM+O1xuXG4gICAgQFZpZXdDaGlsZCgnYnJhbmNoZXMnKVxuICAgIHB1YmxpYyBCcmFuY2hlc0lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLy9PcHRpb25hbCBpbnB1dCBub3QgYmVpbmcgdXNlZCBzZXR0aW5nIHRvXG4gICAgLy8gQElucHV0KCdidWlsZC1wYXRoJylcbiAgICBwdWJsaWMgQnVpbGRQYXRoOiBzdHJpbmc7XG5cbiAgICAvL09wdGlvbmFsIG5vdCBiZWluZyB1c2VkXG4gICAgLy8gQElucHV0KCdidWlsZC1wYXRoLWRpc2FibGVkJylcbiAgICBwdWJsaWMgQnVpbGRQYXRoRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvLyB0aGlzIGlucHV0IGlzIG5vdCBiZWluZyB1c2VkIGFueXdoZXJlXG4gICAgLy8gQElucHV0KCdzb3VyY2UtY29udHJvbC1yb290JylcbiAgICBwdWJsaWMgU291cmNlQ29udHJvbFJvb3Q6IHN0cmluZztcblxuICAgIC8vbm90IGJlaW5nIHVzZWQgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIC8vIEBJbnB1dCgndXNlLWJyYW5jaGVzJylcbiAgICBwdWJsaWMgVXNlQnJhbmNoZXM6IGJvb2xlYW47XG5cbiAgICAvL25vdCBiZWluZyB1c2VkIHNldCB0byBmYWxzZSBieSBkZWZhdWx0XG4gICAgLy8gQElucHV0KCd1c2UtYnVpbGQtcGF0aCcpXG4gICAgcHVibGljIFVzZUJ1aWxkUGF0aDogYm9vbGVhbjtcblxuICAgIC8vICBQcm9wZXJ0aWVzXG5cbiAgICBwdWJsaWMgZ2V0IEJyYW5jaGVzRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cD8uZ2V0KFxuICAgICAgICAgICAgdGhpcy5Tb3VyY2VDb250cm9sUm9vdCArICdicmFuY2hlcydcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IEJ1aWxkUGF0aEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LmdldChcbiAgICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbFJvb3QgKyAnYnVpbGRQYXRoJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cD8uZ2V0KCdkZXZPcHNBY3Rpb25Mb29rdXAnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IE1haW5CcmFuY2hGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5nZXQoXG4gICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xSb290ICsgJ21haW5CcmFuY2gnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBPcmdhbml6YXRpb25Gb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5nZXQoXG4gICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xSb290ICsgJ29yZ2FuaXphdGlvbidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IFJlcG9zaXRvcnlGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5nZXQoXG4gICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xSb290ICsgJ3JlcG9zaXRvcnknXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIEFydGlmYWN0OiBFYUNBcnRpZmFjdDtcblxuICAgIHB1YmxpYyBBcnRpZmFjdExvb2t1cDogc3RyaW5nO1xuXG4gICAgcHVibGljIEFydGlmYWN0TG9va3VwczogQXJyYXk8c3RyaW5nPjtcblxuICAgIHB1YmxpYyBCcmFuY2hPcHRpb25zOiBHaXRIdWJCcmFuY2hbXTtcblxuICAgIHB1YmxpYyBCdWlsZFBhdGhPcHRpb25zOiBzdHJpbmdbXTtcblxuICAgIHB1YmxpYyBDcmVhdGluZ1JlcG9zaXRvcnk6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgRGV2T3BzQWN0aW9uOiBFYUNEZXZPcHNBY3Rpb247XG5cbiAgICBwdWJsaWMgRGV2T3BzQWN0aW9uczogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNEZXZPcHNBY3Rpb24gfTtcblxuICAgIHB1YmxpYyBEZXZPcHNBY3Rpb25Mb29rdXA6IHN0cmluZztcblxuICAgIHB1YmxpYyBEZXZPcHNBY3Rpb25Mb29rdXBzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgcHVibGljIERldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAgIHB1YmxpYyBFZGl0aW5nU291cmNlQ29udHJvbDogRWFDU291cmNlQ29udHJvbDtcblxuICAgIHB1YmxpYyBIb3N0aW5nRGV0YWlsczogUHJvamVjdEhvc3RpbmdEZXRhaWxzO1xuXG4gICAgcHVibGljIE9yZ2FuaXphdGlvbk9wdGlvbnM6IEdpdEh1Yk9yZ2FuaXphdGlvbltdO1xuXG4gICAgcHVibGljIFJlcG9zaXRvcnlPcHRpb25zOiBHaXRIdWJSZXBvc2l0b3J5W107XG5cbiAgICBwdWJsaWMgU2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW107XG5cbiAgICBwdWJsaWMgU2tlbGV0b25FZmZlY3Q6IHN0cmluZztcblxuICAgIHB1YmxpYyByZWFkb25seSBTZXBhcmF0b3JLZXlzQ29kZXMgPSBbRU5URVIsIENPTU1BXSBhcyBjb25zdDtcblxuICAgIC8vICBDb25zdHJ1Y3RvcnNcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGFwcHNGbG93U3ZjOiBBcHBsaWNhdGlvbnNGbG93U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlclxuICAgICkge1xuICAgICAgICB0aGlzLlNhdmVTdGF0dXNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sID0ge307XG5cbiAgICAgICAgdGhpcy5CdWlsZFBhdGggPSBudWxsO1xuXG4gICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMgPSBuZXcgUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk7XG5cbiAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gW107XG5cbiAgICAgICAgdGhpcy5Tb3VyY2VDb250cm9sUm9vdCA9ICcnO1xuXG4gICAgICAgIHRoaXMuU2tlbGV0b25FZmZlY3QgPSAnd2F2ZSc7XG5cbiAgICAgICAgdGhpcy5Vc2VCcmFuY2hlcyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5Vc2VCdWlsZFBhdGggPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAgTGlmZSBDeWNsZVxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7fVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lGb3JtQ29udHJvbHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzb3VyY2UgY29udHJvbCBsb29rdXAnLCB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sTG9va3VwKTtcblxuICAgICAgICBpZiAodGhpcy5FZGl0aW5nU291cmNlQ29udHJvbExvb2t1cCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5DcmVhdGVOZXdTb3VyY2VDb250cm9sKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ3NvdXJjZSBjb250cm9sJywgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbCk7XG5cbiAgICAgICAgaWYgKHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7fSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0dXBGb3JtQ29udHJvbHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuUmVmcmVzaE9yZ2FuaXphdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLkVudmlyb25tZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5FbnZpcm9ubWVudD8uQXJ0aWZhY3RzICYmIHRoaXMuQXJ0aWZhY3RMb29rdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLkFydGlmYWN0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5FbnZpcm9ubWVudD8uQXJ0aWZhY3RzW3RoaXMuQXJ0aWZhY3RMb29rdXBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5FbnZpcm9ubWVudD8uRGV2T3BzQWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuRGV2T3BzQWN0aW9ucyA9IHRoaXMuRW52aXJvbm1lbnQuRGV2T3BzQWN0aW9ucztcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLkRldk9wc0FjdGlvbkxvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLkRldk9wc0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkVudmlyb25tZW50LkRldk9wc0FjdGlvbnNbdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuRGV2T3BzQWN0aW9uPy5BcnRpZmFjdExvb2t1cHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLkFydGlmYWN0TG9va3VwcyA9IHRoaXMuRGV2T3BzQWN0aW9uPy5BcnRpZmFjdExvb2t1cHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLkFydGlmYWN0TG9va3VwID0gdGhpcy5EZXZPcHNBY3Rpb24/LkFydGlmYWN0TG9va3Vwc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5EZXZPcHNBY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cHMgPSBPYmplY3Qua2V5cyh0aGlzLkRldk9wc0FjdGlvbnMgfHwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2Rldm9wc0FjdGlvbiBsb29rdXBzOiAnLCB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cHMpO1xuXG4gICAgICAgIGlmICh0aGlzLkVudmlyb25tZW50Py5Tb3VyY2VzICYmIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2xMb29rdXApIHtcbiAgICAgICAgICAgIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wgPVxuICAgICAgICAgICAgICAgIHRoaXMuRW52aXJvbm1lbnQ/LlNvdXJjZXNbdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbExvb2t1cF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISF0aGlzLkRldk9wc0FjdGlvbkxvb2t1cEZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ0Rldk9wc0FjdGlvbkxvb2t1cEZvcm1Db250cm9sOiAnLFxuICAgICAgICAgICAgICAgIHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXAgPSB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cEZvcm1Db250cm9sPy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghIXRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2w/LkRldk9wc0FjdGlvblRyaWdnZXJMb29rdXBzKSB7XG4gICAgICAgICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cCA9XG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbD8uRGV2T3BzQWN0aW9uVHJpZ2dlckxvb2t1cHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ2Rldm9wcyBhY3Rpb24gbG9va3VwID0gJywgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybSB2YWx1ZScsIHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2wudmFsdWUpO1xuICAgIH1cblxuICAgIC8vICBBUEkgTWV0aG9kc1xuICAgIHB1YmxpYyBBZGRCcmFuY2hPcHRpb24oZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkQnJhbmNoT3B0aW9uKGV2ZW50LnZhbHVlKTtcblxuICAgICAgICBldmVudC5pbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBCcmFuY2hPcHRpb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZEJyYW5jaE9wdGlvbihldmVudC5vcHRpb24udmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBCcmFuY2hlc0NoYW5nZWQoYnJhbmNoZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZFByb2plY3RIb3N0aW5nRGV0YWlscygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBCdWlsZFBhdGhDaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgLy9kbyBzb21ldGhpbmc/P1xuICAgIH1cblxuICAgIHB1YmxpYyBDcmVhdGVOZXdTb3VyY2VDb250cm9sKCk6IHZvaWQge1xuICAgICAgICB0aGlzLlNldEVkaXRpbmdTb3VyY2VDb250cm9sKEd1aWQuQ3JlYXRlUmF3KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBDcmVhdGVSZXBvc2l0b3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLkNyZWF0aW5nUmVwb3NpdG9yeSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgQ2FuY2VsQ3JlYXRlUmVwb3NpdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5DcmVhdGluZ1JlcG9zaXRvcnkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgTG9nKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZm9ybSB2YWx1ZScsIHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2wudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBEZXZPcHNBY3Rpb25Mb29rdXBDaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXAgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVEZXZPcHNBY3Rpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgTWFpbkJyYW5jaENoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmVtaXRCcmFuY2hlc0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZyA9IHRoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w7XG5cbiAgICAgICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wucmVzZXQoKTtcblxuICAgICAgICBpZiAodGhpcy5Vc2VCcmFuY2hlcykge1xuICAgICAgICAgICAgdGhpcy5CcmFuY2hlc0Zvcm1Db250cm9sLnJlc2V0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0UmVwb3NpdG9yaWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIFJlZnJlc2hPcmdhbml6YXRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RPcmdhbml6YXRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbD8ucmVzZXQoKTtcblxuICAgICAgICB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbD8ucmVzZXQoKTtcblxuICAgICAgICBpZiAodGhpcy5Vc2VCcmFuY2hlcykge1xuICAgICAgICAgICAgdGhpcy5CcmFuY2hlc0Zvcm1Db250cm9sPy5yZXNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIFJlbW92ZUJyYW5jaE9wdGlvbihvcHRpb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5pbmRleE9mKG9wdGlvbik7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0QnJhbmNoZXNDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIFJlcG9zaXRvcnlDaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVwbyA9IHRoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sO1xuXG4gICAgICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICAgICAgICB0aGlzLkJyYW5jaGVzRm9ybUNvbnRyb2wucmVzZXQoKTtcblxuICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gW107XG5cbiAgICAgICAgICAgIHRoaXMubGlzdEJyYW5jaGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuVXNlQnJhbmNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEJ1aWxkUGF0aHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBTYXZlUmVwb3NpdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBvcmcgPSB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IHJlcG9OYW1lID0gdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgdGhpcy5hcHBzRmxvd1N2Y1xuICAgICAgICAgICAgLkNyZWF0ZVJlcG9zaXRvcnkob3JnLCByZXBvTmFtZSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBCYXNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuU3RhdHVzLkNvZGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0UmVwb3NpdG9yaWVzKHJlcG9OYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLkNyZWF0aW5nUmVwb3NpdG9yeSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICBUT0RPOiAgTmVlZCB0byBzdXJmYWNlIGFuIGVycm9yIHRvIHRoZSB1c2VyLi4uXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFNldEVkaXRpbmdTb3VyY2VDb250cm9sKHNjTG9va3VwOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbExvb2t1cCA9IHNjTG9va3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBTdWJtaXRTb3VyY2VDb250cm9sKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICdzb3VyY2UgY29udHJvbCBzdWJtaXR0ZWQ6ICcsXG4gICAgICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAudmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5TYXZlU291cmNlQ29udHJvbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBTYXZlU291cmNlQ29udHJvbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2F2ZUVudlJlcTogU2F2ZUVudmlyb25tZW50QXNDb2RlRXZlbnRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICAvLyAuLi50aGlzLkVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgIFNvdXJjZXM6IHRoaXMuRW52aXJvbm1lbnQuU291cmNlcyB8fCB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBFbnZpcm9ubWVudExvb2t1cDogdGhpcy5FbnZpcm9ubWVudExvb2t1cCxcbiAgICAgICAgICAgIC8vIEVudGVycHJpc2VEYXRhVG9rZW5zOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgc291cmNlOiBFYUNTb3VyY2VDb250cm9sID0ge1xuICAgICAgICAgICAgLi4udGhpcy5FZGl0aW5nU291cmNlQ29udHJvbCxcbiAgICAgICAgICAgIEJyYW5jaGVzOiB0aGlzLlNlbGVjdGVkQnJhbmNoZXMsXG4gICAgICAgICAgICBNYWluQnJhbmNoOiB0aGlzLk1haW5CcmFuY2hGb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAuLi5zb3VyY2UsXG4gICAgICAgICAgICBUeXBlOiAnR2l0SHViJyxcbiAgICAgICAgICAgIE5hbWU6IGBAJHt0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlfS8ke3RoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sLnZhbHVlfWAsXG4gICAgICAgICAgICBEZXZPcHNBY3Rpb25UcmlnZ2VyTG9va3VwczogW3RoaXMuRGV2T3BzQWN0aW9uTG9va3VwXSxcbiAgICAgICAgICAgIE9yZ2FuaXphdGlvbjogdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgIFJlcG9zaXRvcnk6IHRoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNjTG9va3VwID0gYGdpdGh1YjovLyR7c291cmNlLk9yZ2FuaXphdGlvbn0vJHtzb3VyY2UuUmVwb3NpdG9yeX1gO1xuXG4gICAgICAgIHNhdmVFbnZSZXEuRW52aXJvbm1lbnQuU291cmNlc1tzY0xvb2t1cF0gPSBzb3VyY2U7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3NhdmUgU0M6ICcsIHNhdmVFbnZSZXEpO1xuXG4gICAgICAgIGxldCByZXNwID0gdGhpcy5lYWNTdmMuU2F2ZUVudmlyb25tZW50QXNDb2RlKHNhdmVFbnZSZXEpO1xuXG4gICAgICAgIHJlc3AudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLlNhdmVTdGF0dXNFdmVudC5lbWl0KHJlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICBIZWxwZXJzXG5cbiAgICBwcm90ZWN0ZWQgYWRkQnJhbmNoT3B0aW9uKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfHwgJycpLnRyaW0oKTtcblxuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5TZWxlY3RlZEJyYW5jaGVzLmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5CcmFuY2hlc0lucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuXG4gICAgICAgIHRoaXMuZW1pdEJyYW5jaGVzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25maWd1cmVEZXZPcHNBY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBGb3JtQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRlc3Ryb3lGb3JtQ29udHJvbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFxuICAgICAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdtYWluQnJhbmNoJ10uam9pbignJylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LnJlbW92ZUNvbnRyb2woXG4gICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ2JyYW5jaGVzJ10uam9pbignJylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LnJlbW92ZUNvbnRyb2woXG4gICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ2J1aWxkUGF0aCddLmpvaW4oJycpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gW107XG5cbiAgICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5yZW1vdmVDb250cm9sKFxuICAgICAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdvcmdhbml6YXRpb24nXS5qb2luKCcnKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cD8ucmVtb3ZlQ29udHJvbChcbiAgICAgICAgICAgIFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAncmVwb3NpdG9yeSddLmpvaW4oJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGVtaXRCcmFuY2hlc0NoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgKCF0aGlzLk1haW5CcmFuY2hGb3JtQ29udHJvbC52YWx1ZSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLk1haW5CcmFuY2hGb3JtQ29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICAgICkgPCAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoYnJhbmNoKSA9PiBicmFuY2ggPT09ICdtYWluJyB8fCBicmFuY2ggPT09ICdtYXN0ZXInXG4gICAgICAgICAgICAgICAgKSB8fCB0aGlzLlNlbGVjdGVkQnJhbmNoZXNbMF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5TZWxlY3RlZEJyYW5jaGVzPy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5NYWluQnJhbmNoRm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuQnJhbmNoZXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLlNlbGVjdGVkQnJhbmNoZXMuam9pbignLCcpKTtcblxuICAgICAgICB0aGlzLkJyYW5jaGVzQ2hhbmdlZCh0aGlzLlNlbGVjdGVkQnJhbmNoZXMgfHwgW10pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsaXN0QnJhbmNoZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAgICAgICAgICAgLkxpc3RCcmFuY2hlcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8R2l0SHViQnJhbmNoW10+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQnJhbmNoT3B0aW9ucyA9IHJlc3BvbnNlLk1vZGVsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5CcmFuY2hlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sLkJyYW5jaGVzO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQnJhbmNoT3B0aW9ucz8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkJyYW5jaGVzRm9ybUNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5CcmFuY2hPcHRpb25zWzBdLk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcyA9IFt0aGlzLkJyYW5jaE9wdGlvbnNbMF0uTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRCcmFuY2hlc0NoYW5nZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RCdWlsZFBhdGhzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbGlzdEJ1aWxkUGF0aHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLlVzZUJ1aWxkUGF0aCkge1xuICAgICAgICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5hcHBzRmxvd1N2Y1xuICAgICAgICAgICAgICAgIC5MaXN0QnVpbGRQYXRocyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8c3RyaW5nW10+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQnVpbGRQYXRoT3B0aW9ucyA9IHJlc3BvbnNlLk1vZGVsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLkJ1aWxkUGF0aE9wdGlvbnM/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5CdWlsZFBhdGhGb3JtQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkJ1aWxkUGF0aE9wdGlvbnNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBsaXN0T3JnYW5pemF0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAgICAgICAuTGlzdE9yZ2FuaXphdGlvbnMoKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8R2l0SHViT3JnYW5pemF0aW9uW10+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuT3JnYW5pemF0aW9uT3B0aW9ucyA9IHJlc3BvbnNlLk1vZGVsO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdPcmdhbml6YXRpb24gT3B0aW9uczogJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuT3JnYW5pemF0aW9uT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5Pcmdhbml6YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wuT3JnYW5pemF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdFJlcG9zaXRvcmllcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbD8uUmVwb3NpdG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxpc3RSZXBvc2l0b3JpZXMoYWN0aXZlUmVwbzogc3RyaW5nID0gbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuYXBwc0Zsb3dTdmNcbiAgICAgICAgICAgIC5MaXN0UmVwb3NpdG9yaWVzKHRoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogQmFzZU1vZGVsZWRSZXNwb25zZTxHaXRIdWJSZXBvc2l0b3J5W10+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5SZXBvc2l0b3J5T3B0aW9ucyA9IHJlc3BvbnNlLk1vZGVsO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUmVwbykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sLnNldFZhbHVlKGFjdGl2ZVJlcG8pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RCcmFuY2hlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuVXNlQnJhbmNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RCdWlsZFBhdGhzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5SZXBvc2l0b3J5T3B0aW9ucz8ubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5DcmVhdGluZ1JlcG9zaXRvcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5TZWxlY3RlZEJyYW5jaGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLkhvc3RpbmdEZXRhaWxzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLmFwcHNGbG93U3ZjLkxvYWRQcm9qZWN0SG9zdGluZ0RldGFpbHMoKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHJlc3BvbnNlOiBCYXNlTW9kZWxlZFJlc3BvbnNlPFByb2plY3RIb3N0aW5nRGV0YWlscz4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Ib3N0aW5nRGV0YWlscyA9IHJlc3BvbnNlLk1vZGVsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMuTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRGV2T3BzQWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Ib3N0aW5nRGV0YWlscy5Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXR1cEZvcm1Db250cm9scygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95Rm9ybUNvbnRyb2xzKCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ1NvdXJjZSBDb250cm9sOiAnLCB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sKTtcblxuICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICAgICAgICdkZXZPcHNBY3Rpb25Mb29rdXAnLFxuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwIHx8ICcnLCBbXSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICAgICAgIFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAnb3JnYW5pemF0aW9uJ10uam9pbignJyksXG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbC5Pcmdhbml6YXRpb24gPz8gJycsXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdyZXBvc2l0b3J5J10uam9pbignJyksXG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbC5SZXBvc2l0b3J5ID8/ICcnLFxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5Vc2VCcmFuY2hlcykge1xuICAgICAgICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdicmFuY2hlcyddLmpvaW4oJycpLFxuICAgICAgICAgICAgICAgIG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbD8uQnJhbmNoZXMgPz8gJycsXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5CcmFuY2hlcztcblxuICAgICAgICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdtYWluQnJhbmNoJ10uam9pbignJyksXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sLk1haW5CcmFuY2ggPz8gJycsXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuVXNlQnVpbGRQYXRoKSB7XG4gICAgICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ2J1aWxkUGF0aCddLmpvaW4oJycpLFxuICAgICAgICAgICAgICAgIG5ldyBGb3JtQ29udHJvbCh0aGlzLkJ1aWxkUGF0aCA/PyAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8Zm9ybVxuICAgIGNsYXNzPVwiZm9ybS1jYXJkXCJcbiAgICBbZm9ybUdyb3VwXT1cIkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXBcIlxuICAgIChuZ1N1Ym1pdCk9XCJTdWJtaXRTb3VyY2VDb250cm9sKClcIlxuICAgIChjbGljayk9XCJMb2coKVwiXG4+XG4gICAgPCEtLSA8bWF0LWNhcmQgY2xhc3M9XCJzcHJlYWRcIiBjbGFzcz1cInNjLWNhcmRcIj4gLS0+XG4gICAgPCEtLSA8bWF0LWNhcmQtaGVhZGVyPlxuICAgICAgPG1hdC1jYXJkLXRpdGxlPiBTb3VyY2UgQ29udHJvbCA8L21hdC1jYXJkLXRpdGxlPlxuXG4gICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cblxuICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCBtYXRUb29sdGlwPVwiQ29uZmlndXJlIHNvdXJjZSBjb250cm9sLCBEZXZPcHMgQ0kvQ0QsIGFuZCBhcnRpZmFjdHMuXCI+XG4gICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1jYXJkLWhlYWRlcj4gLS0+XG5cbiAgICA8IS0tIDxtYXQtY2FyZC1jb250ZW50PiAtLT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJMb2FkaW5nXCI+XG4gICAgICAgIDxsY3UtbG9hZGVyIFtsb2FkaW5nXT1cIkxvYWRpbmdcIj48L2xjdS1sb2FkZXI+XG5cbiAgICAgICAgPCEtLSA8c2tlbGV0b24tYmxvY2sgXG4gICAgICAgICAgY2xhc3M9XCJzLWJsb2NrXCJcbiAgICAgICAgICBbZWZmZWN0XT1cIlNrZWxldG9uRWZmZWN0XCIgXG4gICAgICAgID48L3NrZWxldG9uLWJsb2NrPlxuXG4gICAgICAgIDxza2VsZXRvbi1ibG9jayBcbiAgICAgICAgICBjbGFzcz1cInMtYmxvY2tcIlxuICAgICAgICAgIFtlZmZlY3RdPVwiU2tlbGV0b25FZmZlY3RcIiBcbiAgICAgICAgPjwvc2tlbGV0b24tYmxvY2s+XG5cbiAgICAgICAgPHNrZWxldG9uLWJsb2NrIFxuICAgICAgICAgIGNsYXNzPVwicy1ibG9ja1wiXG4gICAgICAgICAgW2VmZmVjdF09XCJTa2VsZXRvbkVmZmVjdFwiICBcbiAgICAgICAgPjwvc2tlbGV0b24tYmxvY2s+XG5cbiAgICAgICAgPHNrZWxldG9uLWJsb2NrIFxuICAgICAgICAgIGNsYXNzPVwicy1ibG9ja1wiXG4gICAgICAgICAgW2VmZmVjdF09XCJTa2VsZXRvbkVmZmVjdFwiICBcbiAgICAgICAgPjwvc2tlbGV0b24tYmxvY2s+IC0tPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFMb2FkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRldk9wc0FjdGlvbkxvb2t1cFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGV2T3BzIEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiRGV2T3BzQWN0aW9uTG9va3VwQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkZXZPcHNBY3Rpb25Mb29rdXAgb2YgRGV2T3BzQWN0aW9uTG9va3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRldk9wc0FjdGlvbkxvb2t1cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2T3BzQWN0aW9uc1tkZXZPcHNBY3Rpb25Mb29rdXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGV2T3BzQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJkZXZPcHNBY3Rpb24uTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGV2T3BzQWN0aW9uLk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJcIj4tLSBDcmVhdGUgTmV3IC0tPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiICpuZ0lmPVwiT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbGlkIHx8ICFMb2FkaW5nXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoIHdpdGgtaGludCBtYXJnaW4tYm90dG9tXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIk9yZ2FuaXphdGlvbk9wdGlvbnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZy1pY29uXCIgbWF0UHJlZml4PmNvcnBvcmF0ZV9mYXJlPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiU291cmNlQ29udHJvbFJvb3QgKyAnb3JnYW5pemF0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiT3JnYW5pemF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJPcmdhbml6YXRpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiTG9hZGluZyB8fCBIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcmdPcHQgb2YgT3JnYW5pemF0aW9uT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9yZ09wdC5OYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JnT3B0Lk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiUmVmcmVzaE9yZ2FuaXphdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZWZyZXNoIE9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIvLm9hdXRoL0dpdEh1Yk9BdXRoP29hdXRoLWZvcmNlLWVkaXQ9dHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlLWF1dGhvcml6ZSBPcmdhbml6YXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgbGF1bmNoXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG9uJ3QgaGF2ZSBhbiBvcmdhbml6YXRpb24gb3Igd291bGQgbGlrZSB0byBjcmVhdGUgYVxuICAgICAgICAgICAgICAgICAgICBuZXcgb25lLFxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9hY2NvdW50L29yZ2FuaXphdGlvbnMvbmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJpbWFyeS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGhlcmVcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNhcmRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBSZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbGlkIHx8XG4gICAgICAgICAgICAgICAgKE9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy52YWxpZCAmJiAhTG9hZGluZylcbiAgICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnLWljb25cIiBtYXRQcmVmaXg+ZGVzY3JpcHRpb248L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJTb3VyY2VDb250cm9sUm9vdCArICdyZXBvc2l0b3J5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ1JlcG9zaXRvcnknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnUmVwb3NpdG9yeSAoc2VsZWN0IG9yZ2FuaXphdGlvbiBmaXJzdCknXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFPcmdhbml6YXRpb25Gb3JtQ29udHJvbD8udmFsaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiUmVwb3NpdG9yeUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIUNyZWF0aW5nUmVwb3NpdG9yeVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXBvT3B0IG9mIFJlcG9zaXRvcnlPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicmVwb09wdC5OYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVwb09wdC5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJlcG9zaXRvcnkgKGNyZWF0ZXMgbmV3IGlmIGRvZXMgbm90IGV4aXN0KVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiU291cmNlQ29udHJvbFJvb3QgKyAncmVwb3NpdG9yeSdcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIkNyZWF0aW5nUmVwb3NpdG9yeVwiXG4gICAgICAgICAgICAgICAgICAgIFtmeEhpZGVdPVwiTG9hZGluZyB8fCBIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkNyZWF0ZVJlcG9zaXRvcnkoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtmeEhpZGVdPVwiTG9hZGluZyB8fCBIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAhQ3JlYXRpbmdSZXBvc2l0b3J5ICYmIE9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy52YWxpZFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgYWRkX2NpcmNsZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJTYXZlUmVwb3NpdG9yeSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJDcmVhdGluZ1JlcG9zaXRvcnkgJiYgUmVwb3NpdG9yeUZvcm1Db250cm9sPy52YWxpZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4IGNvbG9yPVwicHJpbWFyeVwiPiBzYXZlIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJDYW5jZWxDcmVhdGVSZXBvc2l0b3J5KClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIkNyZWF0aW5nUmVwb3NpdG9yeVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4PiBjYW5jZWwgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZFwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIChCcmFuY2hlc0Zvcm1Db250cm9sPy52YWxpZCB8fFxuICAgICAgICAgICAgICAgICAgICAoT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhTG9hZGluZykpICYmXG4gICAgICAgICAgICAgICAgIUNyZWF0aW5nUmVwb3NpdG9yeSAmJlxuICAgICAgICAgICAgICAgIFVzZUJyYW5jaGVzXG4gICAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZy1pY29uXCIgbWF0UHJlZml4PmFjY291bnRfdHJlZTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlNlbGVjdGVkIEJyYW5jaGVzPC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiQnJhbmNoT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICNicmFuY2hPcHRpb25zPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJyYW5jaE9wdCBvZiBCcmFuY2hPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiYnJhbmNoT3B0Lk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBicmFuY2hPcHQuTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdCAjc2VsZWN0ZWRCcmFuY2hlcz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZWQpPVwiUmVtb3ZlQnJhbmNoT3B0aW9uKHNlbEJyYW5jaClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlbEJyYW5jaCBvZiBTZWxlY3RlZEJyYW5jaGVzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VsQnJhbmNoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmV3IEJyYW5jaC4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIlNvdXJjZUNvbnRyb2xSb290ICsgJ2JyYW5jaGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAjYnJhbmNoZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYnJhbmNoT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cInNlbGVjdGVkQnJhbmNoZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cIlNlcGFyYXRvcktleXNDb2Rlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cIkFkZEJyYW5jaE9wdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJMb2FkaW5nIHx8IEhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZnVsbC13aWR0aCB3aXRoLWhpbnRcIlxuICAgICAgICAgICAgICAgIFtmeFNob3ddPVwiU2VsZWN0ZWRCcmFuY2hlcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnLWljb25cIiBtYXRQcmVmaXg+YWNjb3VudF90cmVlPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiU291cmNlQ29udHJvbFJvb3QgKyAnbWFpbkJyYW5jaCdcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk1haW4gQnJhbmNoXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkxvYWRpbmcgfHwgSG9zdGluZ0RldGFpbHM/LkxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIk1haW5CcmFuY2hDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnJhbmNoIG9mIFNlbGVjdGVkQnJhbmNoZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJicmFuY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBicmFuY2ggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiUmVmcmVzaE9yZ2FuaXphdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBocmVmPVwiLy5vYXV0aC9HaXRIdWJPQXV0aD9vYXV0aC1mb3JjZS1lZGl0PXRydWVcIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImFjY2VudFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZS1hdXRob3JpemUgT3JnYW5pemF0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImFjY2VudFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvbid0IGhhdmUgYW4gb3JnYW5pemF0aW9uIG9yIHdvdWxkIGxpa2UgdG8gY3JlYXRlIGFcbiAgICAgICAgICAgICAgICAgICAgbmV3IG9uZSxcbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vYWNjb3VudC9vcmdhbml6YXRpb25zL25ld1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcmltYXJ5LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBoZXJlXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjYXJkXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgKEJ1aWxkUGF0aEZvcm1Db250cm9sPy52YWxpZCB8fFxuICAgICAgICAgICAgICAgICAgICAoT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhTG9hZGluZykpICYmXG4gICAgICAgICAgICAgICAgIUNyZWF0aW5nUmVwb3NpdG9yeSAmJlxuICAgICAgICAgICAgICAgIFVzZUJ1aWxkUGF0aFxuICAgICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGggd2l0aC1oaW50XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnLWljb25cIiBtYXRQcmVmaXg+YnVpbGQ8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJTb3VyY2VDb250cm9sUm9vdCArICdidWlsZFBhdGgnXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJCdWlsZCBQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkxvYWRpbmcgfHwgQnVpbGRQYXRoRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIkJ1aWxkUGF0aENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidWlsZFBhdGggb2YgQnVpbGRQYXRoT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImJ1aWxkUGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJ1aWxkUGF0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBwYXRoIGlkZW50aWZpZXMgd2hpY2ggYnVpbGQgYWN0aW9uIHRvIHVzZSBmb3IgeW91clxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLlxuICAgICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwcmVhZFwiPlxuICAgICAgICAgICAgICAgIDxsY3UtbG9hZGVyIHN0eWxlPVwibWFyZ2luOiBhdXRvXCIgW2xvYWRpbmddPVwidHJ1ZVwiPjwvbGN1LWxvYWRlcj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXJnaW4tM1wiPlxuICAgICAgICAgICAgICAgICAgICA8aDRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIU9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgb3JnYW5pemF0aW9uc1xuICAgICAgICAgICAgICAgICAgICA8L2g0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxoNFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmdhbml6YXRpb25Gb3JtQ29udHJvbD8udmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhUmVwb3NpdG9yeUZvcm1Db250cm9sPy52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGluZyByZXBvc2l0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9oND5cblxuICAgICAgICAgICAgICAgICAgICA8aDRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3NpdG9yeUZvcm1Db250cm9sPy52YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFCcmFuY2hlc0Zvcm1Db250cm9sPy52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGluZyBicmFuY2hlc1xuICAgICAgICAgICAgICAgICAgICA8L2g0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxoNFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmVwb3NpdG9yeUZvcm1Db250cm9sPy52YWxpZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hlc0Zvcm1Db250cm9sPy52YWxpZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhQnVpbGRQYXRoRm9ybUNvbnRyb2w/LnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2FkaW5nIGJ1aWxkIHBhdGhzXG4gICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIDwvbWF0LWNhcmQtY29udGVudD4gLS0+XG4gICAgPCEtLSA8bWF0LWNhcmQtYWN0aW9ucyBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPiAtLT5cblxuICAgIDwhLS0gPGJ1dHRvbiBcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXG4gICAgICAgICpuZ0lmPVwiIUxvYWRpbmdcIlxuICAgICAgICB0eXBlPVwic3VibWl0XCIgXG4gICAgICAgIGZ4RmxleD1cIjEwMCVcIiBcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAgIFtkaXNhYmxlZF09XCIhRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC52YWxpZCB8fCAhRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5kaXJ0eVwiPlxuICAgICAgICA8bWF0LWljb24+c2F2ZTwvbWF0LWljb24+XG4gICAgICAgIFNhdmUgU291cmNlIENvbnRyb2xcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGxjdS1sb2FkZXIgW2xvYWRpbmddPVwiTG9hZGluZ1wiPjwvbGN1LWxvYWRlcj4gLS0+XG5cbiAgICA8IS0tIDwvbWF0LWNhcmQtYWN0aW9ucz4gLS0+XG4gICAgPCEtLSA8L21hdC1jYXJkPiAtLT5cbjwvZm9ybT5cbiJdfQ==
397
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvY29udHJvbHMvZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvY29udHJvbHMvZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsV0FBVyxFQUVYLFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBSXhCLE9BQU8sRUFBcUMsSUFBSSxFQUFVLE1BQU0sYUFBYSxDQUFDO0FBWTlFLE9BQU8sRUFJSCxxQkFBcUIsR0FDeEIsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPN0MsTUFBTSxPQUFPLGdDQUFnQztJQW1IekMsZ0JBQWdCO0lBQ2hCLFlBQ2MsV0FBb0MsRUFDcEMsTUFBa0IsRUFDbEIsV0FBd0I7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFOdEIsdUJBQWtCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7UUFRekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FB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QWE7c0JBRG5CLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTU1BLCBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCxcbiAgICBGb3JtQnVpbGRlcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBGb3JtR3JvdXAsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBCYXNlTW9kZWxlZFJlc3BvbnNlLCBCYXNlUmVzcG9uc2UsIEd1aWQsIFN0YXR1cyB9IGZyb20gJ0BsY3UvY29tbW9uJztcbmltcG9ydCB7XG4gICAgRWFDQXJ0aWZhY3QsXG4gICAgRWFDRGV2T3BzQWN0aW9uLFxuICAgIEVhQ0Vudmlyb25tZW50QXNDb2RlLFxuICAgIEVhQ1NvdXJjZUNvbnRyb2wsXG59IGZyb20gJ0BzZW1hbnRpY2pzL2NvbW1vbic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbnNGbG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9ucy1mbG93LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBFYUNTZXJ2aWNlLFxuICAgIFNhdmVFbnZpcm9ubWVudEFzQ29kZUV2ZW50UmVxdWVzdCxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWFjLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBHaXRIdWJCcmFuY2gsXG4gICAgR2l0SHViT3JnYW5pemF0aW9uLFxuICAgIEdpdEh1YlJlcG9zaXRvcnksXG4gICAgUHJvamVjdEhvc3RpbmdEZXRhaWxzLFxufSBmcm9tICcuLi8uLi9zdGF0ZS9hcHBsaWNhdGlvbnMtZmxvdy5zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGN1LWRldm9wcy1zb3VyY2UtY29udHJvbC1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Rldm9wcy1zb3VyY2UtY29udHJvbC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERldm9wc1NvdXJjZUNvbnRyb2xGb3JtQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdFxue1xuICAgIC8vICBGaWVsZHNcblxuICAgIEBJbnB1dCgnZWRpdGluZy1zb3VyY2UtY29udHJvbC1sb29rdXAnKVxuICAgIHB1YmxpYyBFZGl0aW5nU291cmNlQ29udHJvbExvb2t1cDogc3RyaW5nO1xuXG4gICAgQElucHV0KCdlbnZpcm9ubWVudCcpXG4gICAgcHVibGljIEVudmlyb25tZW50OiBFYUNFbnZpcm9ubWVudEFzQ29kZTtcblxuICAgIEBJbnB1dCgnZW52aXJvbm1lbnQtbG9va3VwJylcbiAgICBwdWJsaWMgRW52aXJvbm1lbnRMb29rdXA6IHN0cmluZztcblxuICAgIEBJbnB1dCgnbG9hZGluZycpXG4gICAgcHVibGljIExvYWRpbmc6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCdzYXZlLXN0YXR1cy1ldmVudCcpXG4gICAgcHVibGljIFNhdmVTdGF0dXNFdmVudDogRXZlbnRFbWl0dGVyPFN0YXR1cz47XG5cbiAgICBAVmlld0NoaWxkKCdicmFuY2hlcycpXG4gICAgcHVibGljIEJyYW5jaGVzSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvL09wdGlvbmFsIGlucHV0IG5vdCBiZWluZyB1c2VkIHNldHRpbmcgdG9cbiAgICAvLyBASW5wdXQoJ2J1aWxkLXBhdGgnKVxuICAgIHB1YmxpYyBCdWlsZFBhdGg6IHN0cmluZztcblxuICAgIC8vT3B0aW9uYWwgbm90IGJlaW5nIHVzZWRcbiAgICAvLyBASW5wdXQoJ2J1aWxkLXBhdGgtZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBCdWlsZFBhdGhEaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8vIHRoaXMgaW5wdXQgaXMgbm90IGJlaW5nIHVzZWQgYW55d2hlcmVcbiAgICAvLyBASW5wdXQoJ3NvdXJjZS1jb250cm9sLXJvb3QnKVxuICAgIHB1YmxpYyBTb3VyY2VDb250cm9sUm9vdDogc3RyaW5nO1xuXG4gICAgLy9ub3QgYmVpbmcgdXNlZCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgLy8gQElucHV0KCd1c2UtYnJhbmNoZXMnKVxuICAgIHB1YmxpYyBVc2VCcmFuY2hlczogYm9vbGVhbjtcblxuICAgIC8vbm90IGJlaW5nIHVzZWQgc2V0IHRvIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAvLyBASW5wdXQoJ3VzZS1idWlsZC1wYXRoJylcbiAgICBwdWJsaWMgVXNlQnVpbGRQYXRoOiBib29sZWFuO1xuXG4gICAgLy8gIFByb3BlcnRpZXNcblxuICAgIHB1YmxpYyBnZXQgQnJhbmNoZXNGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5nZXQoXG4gICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xSb290ICsgJ2JyYW5jaGVzJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgQnVpbGRQYXRoRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cD8uZ2V0KFxuICAgICAgICAgICAgdGhpcy5Tb3VyY2VDb250cm9sUm9vdCArICdidWlsZFBhdGgnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBEZXZPcHNBY3Rpb25Mb29rdXBGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5nZXQoJ2Rldk9wc0FjdGlvbkxvb2t1cCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgTWFpbkJyYW5jaEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LmdldChcbiAgICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbFJvb3QgKyAnbWFpbkJyYW5jaCdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IE9yZ2FuaXphdGlvbkZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LmdldChcbiAgICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbFJvb3QgKyAnb3JnYW5pemF0aW9uJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgUmVwb3NpdG9yeUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LmdldChcbiAgICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbFJvb3QgKyAncmVwb3NpdG9yeSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgQXJ0aWZhY3Q6IEVhQ0FydGlmYWN0O1xuXG4gICAgcHVibGljIEFydGlmYWN0TG9va3VwOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgQXJ0aWZhY3RMb29rdXBzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgcHVibGljIEJyYW5jaE9wdGlvbnM6IEdpdEh1YkJyYW5jaFtdO1xuXG4gICAgcHVibGljIEJ1aWxkUGF0aE9wdGlvbnM6IHN0cmluZ1tdO1xuXG4gICAgcHVibGljIENyZWF0aW5nUmVwb3NpdG9yeTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBEZXZPcHNBY3Rpb246IEVhQ0Rldk9wc0FjdGlvbjtcblxuICAgIHB1YmxpYyBEZXZPcHNBY3Rpb25zOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0Rldk9wc0FjdGlvbiB9O1xuXG4gICAgcHVibGljIERldk9wc0FjdGlvbkxvb2t1cDogc3RyaW5nO1xuXG4gICAgcHVibGljIERldk9wc0FjdGlvbkxvb2t1cHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBwdWJsaWMgRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgcHVibGljIEVkaXRpbmdTb3VyY2VDb250cm9sOiBFYUNTb3VyY2VDb250cm9sO1xuXG4gICAgcHVibGljIEhvc3RpbmdEZXRhaWxzOiBQcm9qZWN0SG9zdGluZ0RldGFpbHM7XG5cbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uT3B0aW9uczogR2l0SHViT3JnYW5pemF0aW9uW107XG5cbiAgICBwdWJsaWMgUmVwb3NpdG9yeU9wdGlvbnM6IEdpdEh1YlJlcG9zaXRvcnlbXTtcblxuICAgIHB1YmxpYyBTZWxlY3RlZEJyYW5jaGVzOiBzdHJpbmdbXTtcblxuICAgIHB1YmxpYyBTa2VsZXRvbkVmZmVjdDogc3RyaW5nO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IFNlcGFyYXRvcktleXNDb2RlcyA9IFtFTlRFUiwgQ09NTUFdIGFzIGNvbnN0O1xuXG4gICAgLy8gIENvbnN0cnVjdG9yc1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgYXBwc0Zsb3dTdmM6IEFwcGxpY2F0aW9uc0Zsb3dTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZWFjU3ZjOiBFYUNTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuU2F2ZVN0YXR1c0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgICAgIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wgPSB7fTtcblxuICAgICAgICB0aGlzLkJ1aWxkUGF0aCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5Ib3N0aW5nRGV0YWlscyA9IG5ldyBQcm9qZWN0SG9zdGluZ0RldGFpbHMoKTtcblxuICAgICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSBbXTtcblxuICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xSb290ID0gJyc7XG5cbiAgICAgICAgdGhpcy5Ta2VsZXRvbkVmZmVjdCA9ICd3YXZlJztcblxuICAgICAgICB0aGlzLlVzZUJyYW5jaGVzID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLlVzZUJ1aWxkUGF0aCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICBMaWZlIEN5Y2xlXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveUZvcm1Db250cm9scygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3NvdXJjZSBjb250cm9sIGxvb2t1cCcsIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2xMb29rdXApO1xuXG4gICAgICAgIGlmICh0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sTG9va3VwID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLkNyZWF0ZU5ld1NvdXJjZUNvbnRyb2woKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnc291cmNlIGNvbnRyb2wnLCB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sKTtcblxuICAgICAgICBpZiAodGhpcy5FZGl0aW5nU291cmNlQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHt9KTtcblxuICAgICAgICAgICAgdGhpcy5zZXR1cEZvcm1Db250cm9scygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5SZWZyZXNoT3JnYW5pemF0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuRW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHMgJiYgdGhpcy5BcnRpZmFjdExvb2t1cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuQXJ0aWZhY3QgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHNbdGhpcy5BcnRpZmFjdExvb2t1cF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLkVudmlyb25tZW50Py5EZXZPcHNBY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5EZXZPcHNBY3Rpb25zID0gdGhpcy5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuRGV2T3BzQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuRW52aXJvbm1lbnQuRGV2T3BzQWN0aW9uc1t0aGlzLkRldk9wc0FjdGlvbkxvb2t1cF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5EZXZPcHNBY3Rpb24/LkFydGlmYWN0TG9va3Vwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuQXJ0aWZhY3RMb29rdXBzID0gdGhpcy5EZXZPcHNBY3Rpb24/LkFydGlmYWN0TG9va3VwcztcblxuICAgICAgICAgICAgICAgIHRoaXMuQXJ0aWZhY3RMb29rdXAgPSB0aGlzLkRldk9wc0FjdGlvbj8uQXJ0aWZhY3RMb29rdXBzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLkRldk9wc0FjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwcyA9IE9iamVjdC5rZXlzKHRoaXMuRGV2T3BzQWN0aW9ucyB8fCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnZGV2b3BzQWN0aW9uIGxvb2t1cHM6ICcsIHRoaXMuRGV2T3BzQWN0aW9uTG9va3Vwcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuRW52aXJvbm1lbnQ/LlNvdXJjZXMgJiYgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbExvb2t1cCkge1xuICAgICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbCA9XG4gICAgICAgICAgICAgICAgdGhpcy5FbnZpcm9ubWVudD8uU291cmNlc1t0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sTG9va3VwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghIXRoaXMuRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2w6ICcsXG4gICAgICAgICAgICAgICAgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBGb3JtQ29udHJvbD8udmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cCA9IHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2w/LnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEhdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbD8uRGV2T3BzQWN0aW9uVHJpZ2dlckxvb2t1cHMpIHtcbiAgICAgICAgICAgIHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwID1cbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5EZXZPcHNBY3Rpb25UcmlnZ2VyTG9va3Vwc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnZGV2b3BzIGFjdGlvbiBsb29rdXAgPSAnLCB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtIHZhbHVlJywgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBGb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gIEFQSSBNZXRob2RzXG4gICAgcHVibGljIEFkZEJyYW5jaE9wdGlvbihldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRCcmFuY2hPcHRpb24oZXZlbnQudmFsdWUpO1xuXG4gICAgICAgIGV2ZW50LmlucHV0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIEJyYW5jaE9wdGlvblNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkQnJhbmNoT3B0aW9uKGV2ZW50Lm9wdGlvbi52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIEJyYW5jaGVzQ2hhbmdlZChicmFuY2hlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIEJ1aWxkUGF0aENoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgICAgICAvL2RvIHNvbWV0aGluZz8/XG4gICAgfVxuXG4gICAgcHVibGljIENyZWF0ZU5ld1NvdXJjZUNvbnRyb2woKTogdm9pZCB7XG4gICAgICAgIHRoaXMuU2V0RWRpdGluZ1NvdXJjZUNvbnRyb2woR3VpZC5DcmVhdGVSYXcoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIENyZWF0ZVJlcG9zaXRvcnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuQ3JlYXRpbmdSZXBvc2l0b3J5ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC5yZXNldCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBDYW5jZWxDcmVhdGVSZXBvc2l0b3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLkNyZWF0aW5nUmVwb3NpdG9yeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBMb2coKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdmb3JtIHZhbHVlJywgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBGb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIERldk9wc0FjdGlvbkxvb2t1cENoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cCA9IGV2ZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZURldk9wc0FjdGlvbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBNYWluQnJhbmNoQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1pdEJyYW5jaGVzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBPcmdhbml6YXRpb25DaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3JnID0gdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbDtcblxuICAgICAgICB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC5yZXNldCgpO1xuXG4gICAgICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICAgICAgICB0aGlzLkJyYW5jaGVzRm9ybUNvbnRyb2wucmVzZXQoKTtcblxuICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RSZXBvc2l0b3JpZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgUmVmcmVzaE9yZ2FuaXphdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMuTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdE9yZ2FuaXphdGlvbnMoKTtcblxuICAgICAgICB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sPy5yZXNldCgpO1xuXG4gICAgICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICAgICAgICB0aGlzLkJyYW5jaGVzRm9ybUNvbnRyb2w/LnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgUmVtb3ZlQnJhbmNoT3B0aW9uKG9wdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5TZWxlY3RlZEJyYW5jaGVzLmluZGV4T2Yob3B0aW9uKTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXRCcmFuY2hlc0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgUmVwb3NpdG9yeUNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXBvID0gdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2w7XG5cbiAgICAgICAgaWYgKHRoaXMuVXNlQnJhbmNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuQnJhbmNoZXNGb3JtQ29udHJvbC5yZXNldCgpO1xuXG4gICAgICAgICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSBbXTtcblxuICAgICAgICAgICAgdGhpcy5saXN0QnJhbmNoZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5Vc2VCcmFuY2hlcykge1xuICAgICAgICAgICAgdGhpcy5saXN0QnVpbGRQYXRocygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIFNhdmVSZXBvc2l0b3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IG9yZyA9IHRoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgY29uc3QgcmVwb05hbWUgPSB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAgICAgICAuQ3JlYXRlUmVwb3NpdG9yeShvcmcsIHJlcG9OYW1lKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEJhc2VSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5TdGF0dXMuQ29kZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RSZXBvc2l0b3JpZXMocmVwb05hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQ3JlYXRpbmdSZXBvc2l0b3J5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gIFRPRE86ICBOZWVkIHRvIHN1cmZhY2UgYW4gZXJyb3IgdG8gdGhlIHVzZXIuLi5cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgU2V0RWRpdGluZ1NvdXJjZUNvbnRyb2woc2NMb29rdXA6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sTG9va3VwID0gc2NMb29rdXA7XG4gICAgfVxuXG4gICAgcHVibGljIFN1Ym1pdFNvdXJjZUNvbnRyb2woKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgJ3NvdXJjZSBjb250cm9sIHN1Ym1pdHRlZDogJyxcbiAgICAgICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC52YWx1ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLlNhdmVTb3VyY2VDb250cm9sKCk7XG4gICAgfVxuXG4gICAgcHVibGljIFNhdmVTb3VyY2VDb250cm9sKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzYXZlRW52UmVxOiBTYXZlRW52aXJvbm1lbnRBc0NvZGVFdmVudFJlcXVlc3QgPSB7XG4gICAgICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIC8vIC4uLnRoaXMuRW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgU291cmNlczogdGhpcy5FbnZpcm9ubWVudC5Tb3VyY2VzIHx8IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEVudmlyb25tZW50TG9va3VwOiB0aGlzLkVudmlyb25tZW50TG9va3VwLFxuICAgICAgICAgICAgLy8gRW50ZXJwcmlzZURhdGFUb2tlbnM6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBzb3VyY2U6IEVhQ1NvdXJjZUNvbnRyb2wgPSB7XG4gICAgICAgICAgICAuLi50aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sLFxuICAgICAgICAgICAgQnJhbmNoZXM6IHRoaXMuU2VsZWN0ZWRCcmFuY2hlcyxcbiAgICAgICAgICAgIE1haW5CcmFuY2g6IHRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZSA9IHtcbiAgICAgICAgICAgIC4uLnNvdXJjZSxcbiAgICAgICAgICAgIFR5cGU6ICdHaXRIdWInLFxuICAgICAgICAgICAgTmFtZTogYEAke3RoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2wudmFsdWV9LyR7dGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wudmFsdWV9YCxcbiAgICAgICAgICAgIERldk9wc0FjdGlvblRyaWdnZXJMb29rdXBzOiBbdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBdLFxuICAgICAgICAgICAgT3JnYW5pemF0aW9uOiB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgICAgUmVwb3NpdG9yeTogdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2NMb29rdXAgPSBgZ2l0aHViOi8vJHtzb3VyY2UuT3JnYW5pemF0aW9ufS8ke3NvdXJjZS5SZXBvc2l0b3J5fWA7XG5cbiAgICAgICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5Tb3VyY2VzW3NjTG9va3VwXSA9IHNvdXJjZTtcblxuICAgICAgICBjb25zb2xlLmxvZygnc2F2ZSBTQzogJywgc2F2ZUVudlJlcSk7XG5cbiAgICAgICAgbGV0IHJlc3AgPSB0aGlzLmVhY1N2Yy5TYXZlRW52aXJvbm1lbnRBc0NvZGUoc2F2ZUVudlJlcSk7XG5cbiAgICAgICAgcmVzcC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuU2F2ZVN0YXR1c0V2ZW50LmVtaXQocmVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gIEhlbHBlcnNcblxuICAgIHByb3RlY3RlZCBhZGRCcmFuY2hPcHRpb24odmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8fCAnJykudHJpbSgpO1xuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLlNlbGVjdGVkQnJhbmNoZXMuaW5kZXhPZih2YWx1ZSkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLkJyYW5jaGVzSW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG5cbiAgICAgICAgdGhpcy5lbWl0QnJhbmNoZXNDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyZURldk9wc0FjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cEZvcm1Db250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwXG4gICAgICAgICAgICApO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZGVzdHJveUZvcm1Db250cm9scygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXG4gICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ21haW5CcmFuY2gnXS5qb2luKCcnKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cD8ucmVtb3ZlQ29udHJvbChcbiAgICAgICAgICAgIFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAnYnJhbmNoZXMnXS5qb2luKCcnKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cD8ucmVtb3ZlQ29udHJvbChcbiAgICAgICAgICAgIFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAnYnVpbGRQYXRoJ10uam9pbignJylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSBbXTtcblxuICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LnJlbW92ZUNvbnRyb2woXG4gICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ29yZ2FuaXphdGlvbiddLmpvaW4oJycpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5yZW1vdmVDb250cm9sKFxuICAgICAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdyZXBvc2l0b3J5J10uam9pbignJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW1pdEJyYW5jaGVzQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAoIXRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sLnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sLnZhbHVlXG4gICAgICAgICAgICAgICAgKSA8IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5NYWluQnJhbmNoRm9ybUNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChicmFuY2gpID0+IGJyYW5jaCA9PT0gJ21haW4nIHx8IGJyYW5jaCA9PT0gJ21hc3RlcidcbiAgICAgICAgICAgICAgICApIHx8IHRoaXMuU2VsZWN0ZWRCcmFuY2hlc1swXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLlNlbGVjdGVkQnJhbmNoZXM/Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLk1haW5CcmFuY2hGb3JtQ29udHJvbC5yZXNldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5CcmFuY2hlc0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5qb2luKCcsJykpO1xuXG4gICAgICAgIHRoaXMuQnJhbmNoZXNDaGFuZ2VkKHRoaXMuU2VsZWN0ZWRCcmFuY2hlcyB8fCBbXSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxpc3RCcmFuY2hlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuVXNlQnJhbmNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuYXBwc0Zsb3dTdmNcbiAgICAgICAgICAgICAgICAuTGlzdEJyYW5jaGVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogQmFzZU1vZGVsZWRSZXNwb25zZTxHaXRIdWJCcmFuY2hbXT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5CcmFuY2hPcHRpb25zID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2w/LkJyYW5jaGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wuQnJhbmNoZXM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5CcmFuY2hPcHRpb25zPy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuQnJhbmNoZXNGb3JtQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkJyYW5jaE9wdGlvbnNbMF0uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gW3RoaXMuQnJhbmNoT3B0aW9uc1swXS5OYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdEJyYW5jaGVzQ2hhbmdlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdEJ1aWxkUGF0aHMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBsaXN0QnVpbGRQYXRocygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuVXNlQnVpbGRQYXRoKSB7XG4gICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAgICAgICAgICAgLkxpc3RCdWlsZFBhdGhzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogQmFzZU1vZGVsZWRSZXNwb25zZTxzdHJpbmdbXT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5CdWlsZFBhdGhPcHRpb25zID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuQnVpbGRQYXRoT3B0aW9ucz8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkJ1aWxkUGF0aEZvcm1Db250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuQnVpbGRQYXRoT3B0aW9uc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxpc3RPcmdhbml6YXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuYXBwc0Zsb3dTdmNcbiAgICAgICAgICAgIC5MaXN0T3JnYW5pemF0aW9ucygpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChyZXNwb25zZTogQmFzZU1vZGVsZWRSZXNwb25zZTxHaXRIdWJPcmdhbml6YXRpb25bXT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25PcHRpb25zID0gcmVzcG9uc2UuTW9kZWw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ09yZ2FuaXphdGlvbiBPcHRpb25zOiAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25PcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2w/Lk9yZ2FuaXphdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbC5Pcmdhbml6YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0UmVwb3NpdG9yaWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5SZXBvc2l0b3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbGlzdFJlcG9zaXRvcmllcyhhY3RpdmVSZXBvOiBzdHJpbmcgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hcHBzRmxvd1N2Y1xuICAgICAgICAgICAgLkxpc3RSZXBvc2l0b3JpZXModGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBCYXNlTW9kZWxlZFJlc3BvbnNlPEdpdEh1YlJlcG9zaXRvcnlbXT4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLlJlcG9zaXRvcnlPcHRpb25zID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVSZXBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wuc2V0VmFsdWUoYWN0aXZlUmVwbyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdEJyYW5jaGVzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5Vc2VCcmFuY2hlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdEJ1aWxkUGF0aHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLlJlcG9zaXRvcnlPcHRpb25zPy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLkNyZWF0aW5nUmVwb3NpdG9yeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRQcm9qZWN0SG9zdGluZ0RldGFpbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkQnJhbmNoZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMuTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuYXBwc0Zsb3dTdmMuTG9hZFByb2plY3RIb3N0aW5nRGV0YWlscygpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8UHJvamVjdEhvc3RpbmdEZXRhaWxzPikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLkhvc3RpbmdEZXRhaWxzID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Ib3N0aW5nRGV0YWlscy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEZXZPcHNBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLkhvc3RpbmdEZXRhaWxzLkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldHVwRm9ybUNvbnRyb2xzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lGb3JtQ29udHJvbHMoKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnU291cmNlIENvbnRyb2w6ICcsIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wpO1xuXG4gICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICAgJ2Rldk9wc0FjdGlvbkxvb2t1cCcsXG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2wodGhpcy5EZXZPcHNBY3Rpb25Mb29rdXAgfHwgJycsIFtdKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdvcmdhbml6YXRpb24nXS5qb2luKCcnKSxcbiAgICAgICAgICAgIG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sLk9yZ2FuaXphdGlvbiA/PyAnJyxcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ3JlcG9zaXRvcnknXS5qb2luKCcnKSxcbiAgICAgICAgICAgIG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sLlJlcG9zaXRvcnkgPz8gJycsXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ2JyYW5jaGVzJ10uam9pbignJyksXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5CcmFuY2hlcyA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcyA9IHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2w/LkJyYW5jaGVzO1xuXG4gICAgICAgICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICAgICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ21haW5CcmFuY2gnXS5qb2luKCcnKSxcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wuTWFpbkJyYW5jaCA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5Vc2VCdWlsZFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICAgICAgIFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAnYnVpbGRQYXRoJ10uam9pbignJyksXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHRoaXMuQnVpbGRQYXRoID8/ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxmb3JtXG4gICAgY2xhc3M9XCJmb3JtLWNhcmRcIlxuICAgIFtmb3JtR3JvdXBdPVwiRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cFwiXG4gICAgKG5nU3VibWl0KT1cIlN1Ym1pdFNvdXJjZUNvbnRyb2woKVwiXG4gICAgKGNsaWNrKT1cIkxvZygpXCJcbj5cbiAgICA8IS0tIDxtYXQtY2FyZCBjbGFzcz1cInNwcmVhZFwiIGNsYXNzPVwic2MtY2FyZFwiPiAtLT5cbiAgICA8IS0tIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICA8bWF0LWNhcmQtdGl0bGU+IFNvdXJjZSBDb250cm9sIDwvbWF0LWNhcmQtdGl0bGU+XG5cbiAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4IG1hdFRvb2x0aXA9XCJDb25maWd1cmUgc291cmNlIGNvbnRyb2wsIERldk9wcyBDSS9DRCwgYW5kIGFydGlmYWN0cy5cIj5cbiAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPiAtLT5cblxuICAgIDwhLS0gPG1hdC1jYXJkLWNvbnRlbnQ+IC0tPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkxvYWRpbmdcIj5cbiAgICAgICAgPGxjdS1sb2FkZXIgW2xvYWRpbmddPVwiTG9hZGluZ1wiPjwvbGN1LWxvYWRlcj5cblxuICAgICAgICA8IS0tIDxza2VsZXRvbi1ibG9jayBcbiAgICAgICAgICBjbGFzcz1cInMtYmxvY2tcIlxuICAgICAgICAgIFtlZmZlY3RdPVwiU2tlbGV0b25FZmZlY3RcIiBcbiAgICAgICAgPjwvc2tlbGV0b24tYmxvY2s+XG5cbiAgICAgICAgPHNrZWxldG9uLWJsb2NrIFxuICAgICAgICAgIGNsYXNzPVwicy1ibG9ja1wiXG4gICAgICAgICAgW2VmZmVjdF09XCJTa2VsZXRvbkVmZmVjdFwiIFxuICAgICAgICA+PC9za2VsZXRvbi1ibG9jaz5cblxuICAgICAgICA8c2tlbGV0b24tYmxvY2sgXG4gICAgICAgICAgY2xhc3M9XCJzLWJsb2NrXCJcbiAgICAgICAgICBbZWZmZWN0XT1cIlNrZWxldG9uRWZmZWN0XCIgIFxuICAgICAgICA+PC9za2VsZXRvbi1ibG9jaz5cblxuICAgICAgICA8c2tlbGV0b24tYmxvY2sgXG4gICAgICAgICAgY2xhc3M9XCJzLWJsb2NrXCJcbiAgICAgICAgICBbZWZmZWN0XT1cIlNrZWxldG9uRWZmZWN0XCIgIFxuICAgICAgICA+PC9za2VsZXRvbi1ibG9jaz4gLS0+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUxvYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGV2T3BzQWN0aW9uTG9va3VwXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEZXZPcHMgQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJEZXZPcHNBY3Rpb25Mb29rdXBDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRldk9wc0FjdGlvbkxvb2t1cCBvZiBEZXZPcHNBY3Rpb25Mb29rdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGV2T3BzQWN0aW9uTG9va3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZPcHNBY3Rpb25zW2Rldk9wc0FjdGlvbkxvb2t1cF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXZPcHNBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImRldk9wc0FjdGlvbi5OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkZXZPcHNBY3Rpb24uTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiPi0tIENyZWF0ZSBOZXcgLS08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgKm5nSWY9XCJPcmdhbml6YXRpb25Gb3JtQ29udHJvbD8udmFsaWQgfHwgIUxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGggd2l0aC1oaW50IG1hcmdpbi1ib3R0b21cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiT3JnYW5pemF0aW9uT3B0aW9ucz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnLWljb25cIiBtYXRQcmVmaXg+Y29ycG9yYXRlX2ZhcmU8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJTb3VyY2VDb250cm9sUm9vdCArICdvcmdhbml6YXRpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJPcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIk9yZ2FuaXphdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJMb2FkaW5nIHx8IEhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9yZ09wdCBvZiBPcmdhbml6YXRpb25PcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3JnT3B0Lk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmdPcHQuTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJSZWZyZXNoT3JnYW5pemF0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlZnJlc2ggT3JnYW5pemF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cIi8ub2F1dGgvR2l0SHViT0F1dGg/b2F1dGgtZm9yY2UtZWRpdD10cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImFjY2VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmUtYXV0aG9yaXplIE9yZ2FuaXphdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXVuY2hcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCBoYXZlIGFuIG9yZ2FuaXphdGlvbiBvciB3b3VsZCBsaWtlIHRvIGNyZWF0ZSBhXG4gICAgICAgICAgICAgICAgICAgIG5ldyBvbmUsXG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2FjY291bnQvb3JnYW5pemF0aW9ucy9uZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcmltYXJ5LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgaGVyZVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZFwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIFJlcG9zaXRvcnlGb3JtQ29udHJvbD8udmFsaWQgfHxcbiAgICAgICAgICAgICAgICAoT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbGlkICYmICFMb2FkaW5nKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmctaWNvblwiIG1hdFByZWZpeD5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIlNvdXJjZUNvbnRyb2xSb290ICsgJ3JlcG9zaXRvcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnUmVwb3NpdG9yeSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdSZXBvc2l0b3J5IChzZWxlY3Qgb3JnYW5pemF0aW9uIGZpcnN0KSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIU9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy52YWxpZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGluZyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgSG9zdGluZ0RldGFpbHM/LkxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJSZXBvc2l0b3J5Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhQ3JlYXRpbmdSZXBvc2l0b3J5XCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcG9PcHQgb2YgUmVwb3NpdG9yeU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJyZXBvT3B0Lk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZXBvT3B0Lk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmVwb3NpdG9yeSAoY3JlYXRlcyBuZXcgaWYgZG9lcyBub3QgZXhpc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJTb3VyY2VDb250cm9sUm9vdCArICdyZXBvc2l0b3J5J1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiQ3JlYXRpbmdSZXBvc2l0b3J5XCJcbiAgICAgICAgICAgICAgICAgICAgW2Z4SGlkZV09XCJMb2FkaW5nIHx8IEhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiQ3JlYXRlUmVwb3NpdG9yeSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Z4SGlkZV09XCJMb2FkaW5nIHx8IEhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFDcmVhdGluZ1JlcG9zaXRvcnkgJiYgT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbGlkXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBhZGRfY2lyY2xlXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlNhdmVSZXBvc2l0b3J5KClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIkNyZWF0aW5nUmVwb3NpdG9yeSAmJiBSZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbGlkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXggY29sb3I9XCJwcmltYXJ5XCI+IHNhdmUgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkNhbmNlbENyZWF0ZVJlcG9zaXRvcnkoKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiQ3JlYXRpbmdSZXBvc2l0b3J5XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+IGNhbmNlbCA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjYXJkXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgKEJyYW5jaGVzRm9ybUNvbnRyb2w/LnZhbGlkIHx8XG4gICAgICAgICAgICAgICAgICAgIChPcmdhbml6YXRpb25Gb3JtQ29udHJvbD8udmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9zaXRvcnlGb3JtQ29udHJvbD8udmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFMb2FkaW5nKSkgJiZcbiAgICAgICAgICAgICAgICAhQ3JlYXRpbmdSZXBvc2l0b3J5ICYmXG4gICAgICAgICAgICAgICAgVXNlQnJhbmNoZXNcbiAgICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnLWljb25cIiBtYXRQcmVmaXg+YWNjb3VudF90cmVlPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U2VsZWN0ZWQgQnJhbmNoZXM8L21hdC1sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJCcmFuY2hPcHRpb25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgI2JyYW5jaE9wdGlvbnM9XCJtYXRBdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnJhbmNoT3B0IG9mIEJyYW5jaE9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJicmFuY2hPcHQuTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJyYW5jaE9wdC5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cblxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0ICNzZWxlY3RlZEJyYW5jaGVzPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXBcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJSZW1vdmVCcmFuY2hPcHRpb24oc2VsQnJhbmNoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsQnJhbmNoIG9mIFNlbGVjdGVkQnJhbmNoZXNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWxCcmFuY2ggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOZXcgQnJhbmNoLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiU291cmNlQ29udHJvbFJvb3QgKyAnYnJhbmNoZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNicmFuY2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJicmFuY2hPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwic2VsZWN0ZWRCcmFuY2hlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwiU2VwYXJhdG9yS2V5c0NvZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiQWRkQnJhbmNoT3B0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkxvYWRpbmcgfHwgSG9zdGluZ0RldGFpbHM/LkxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoIHdpdGgtaGludFwiXG4gICAgICAgICAgICAgICAgW2Z4U2hvd109XCJTZWxlY3RlZEJyYW5jaGVzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmctaWNvblwiIG1hdFByZWZpeD5hY2NvdW50X3RyZWU8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJTb3VyY2VDb250cm9sUm9vdCArICdtYWluQnJhbmNoJ1wiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTWFpbiBCcmFuY2hcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiTG9hZGluZyB8fCBIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiTWFpbkJyYW5jaENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBicmFuY2ggb2YgU2VsZWN0ZWRCcmFuY2hlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImJyYW5jaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJyYW5jaCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJSZWZyZXNoT3JnYW5pemF0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIvLm9hdXRoL0dpdEh1Yk9BdXRoP29hdXRoLWZvcmNlLWVkaXQ9dHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlLWF1dGhvcml6ZSBPcmdhbml6YXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgbGF1bmNoXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG9uJ3QgaGF2ZSBhbiBvcmdhbml6YXRpb24gb3Igd291bGQgbGlrZSB0byBjcmVhdGUgYVxuICAgICAgICAgICAgICAgICAgICBuZXcgb25lLFxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9hY2NvdW50L29yZ2FuaXphdGlvbnMvbmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByaW1hcnktbGlua1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGhlcmVcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNhcmRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAoQnVpbGRQYXRoRm9ybUNvbnRyb2w/LnZhbGlkIHx8XG4gICAgICAgICAgICAgICAgICAgIChPcmdhbml6YXRpb25Gb3JtQ29udHJvbD8udmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9zaXRvcnlGb3JtQ29udHJvbD8udmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFMb2FkaW5nKSkgJiZcbiAgICAgICAgICAgICAgICAhQ3JlYXRpbmdSZXBvc2l0b3J5ICYmXG4gICAgICAgICAgICAgICAgVXNlQnVpbGRQYXRoXG4gICAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aCB3aXRoLWhpbnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmctaWNvblwiIG1hdFByZWZpeD5idWlsZDwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIlNvdXJjZUNvbnRyb2xSb290ICsgJ2J1aWxkUGF0aCdcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJ1aWxkIFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiTG9hZGluZyB8fCBCdWlsZFBhdGhEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiQnVpbGRQYXRoQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1aWxkUGF0aCBvZiBCdWlsZFBhdGhPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiYnVpbGRQYXRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYnVpbGRQYXRoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHBhdGggaWRlbnRpZmllcyB3aGljaCBidWlsZCBhY3Rpb24gdG8gdXNlIGZvciB5b3VyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJMb2FkaW5nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ByZWFkXCI+XG4gICAgICAgICAgICAgICAgPGxjdS1sb2FkZXIgc3R5bGU9XCJtYXJnaW46IGF1dG9cIiBbbG9hZGluZ109XCJ0cnVlXCI+PC9sY3UtbG9hZGVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcmdpbi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhT3JnYW5pemF0aW9uRm9ybUNvbnRyb2w/LnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGluZyBvcmdhbml6YXRpb25zXG4gICAgICAgICAgICAgICAgICAgIDwvaDQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPGg0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC10aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy52YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFSZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2FkaW5nIHJlcG9zaXRvcmllc1xuICAgICAgICAgICAgICAgICAgICA8L2g0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxoNFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIUJyYW5jaGVzRm9ybUNvbnRyb2w/LnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2FkaW5nIGJyYW5jaGVzXG4gICAgICAgICAgICAgICAgICAgIDwvaDQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPGg0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC10aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbGlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaGVzRm9ybUNvbnRyb2w/LnZhbGlkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFCdWlsZFBhdGhGb3JtQ29udHJvbD8udmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgYnVpbGQgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gPC9tYXQtY2FyZC1jb250ZW50PiAtLT5cbiAgICA8IS0tIDxtYXQtY2FyZC1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+IC0tPlxuXG4gICAgPCEtLSA8YnV0dG9uIFxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcbiAgICAgICAgKm5nSWY9XCIhTG9hZGluZ1wiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIiBcbiAgICAgICAgZnhGbGV4PVwiMTAwJVwiIFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFEZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLnZhbGlkIHx8ICFEZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLmRpcnR5XCI+XG4gICAgICAgIDxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj5cbiAgICAgICAgU2F2ZSBTb3VyY2UgQ29udHJvbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8bGN1LWxvYWRlciBbbG9hZGluZ109XCJMb2FkaW5nXCI+PC9sY3UtbG9hZGVyPiAtLT5cblxuICAgIDwhLS0gPC9tYXQtY2FyZC1hY3Rpb25zPiAtLT5cbiAgICA8IS0tIDwvbWF0LWNhcmQ+IC0tPlxuPC9mb3JtPlxuIl19
@@ -0,0 +1,91 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { FormControl, FormGroup, Validators, } from '@angular/forms';
3
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/dialog";
6
+ import * as i2 from "../../services/eac.service";
7
+ import * as i3 from "@angular/material/snack-bar";
8
+ import * as i4 from "@angular/forms";
9
+ import * as i5 from "@angular/material/button";
10
+ import * as i6 from "@angular/material/icon";
11
+ import * as i7 from "@angular/material/form-field";
12
+ import * as i8 from "@angular/flex-layout/flex";
13
+ import * as i9 from "@angular/material/input";
14
+ import * as i10 from "@angular/common";
15
+ export class AddTeamMemberDialogComponent {
16
+ constructor(dialogRef, eacSvc, data, snackBar, formBuilder) {
17
+ this.dialogRef = dialogRef;
18
+ this.eacSvc = eacSvc;
19
+ this.data = data;
20
+ this.snackBar = snackBar;
21
+ this.formBuilder = formBuilder;
22
+ }
23
+ get Email() {
24
+ return this.AddTeamMemberFormGroup?.controls.email;
25
+ }
26
+ get Permission() {
27
+ return this.AddTeamMemberFormGroup?.controls.permission;
28
+ }
29
+ ngOnInit() {
30
+ this.BuildForm();
31
+ this.Enterprise = this.data.enterprise;
32
+ console.log('ent: ', this.Enterprise);
33
+ this.Projects = this.data.projects;
34
+ console.log('projects: ', this.Projects);
35
+ this.ProjectLookup = this.data.projectLookup;
36
+ console.log('ent: ', this.Enterprise);
37
+ }
38
+ //include current project, ent lookup, relyingparty, accessconfig and then the user list
39
+ AddMember() {
40
+ console.log('ent lookup: ', this.Enterprise.ParentEnterpriseLookup);
41
+ console.log('invited: ', this.Email.value);
42
+ // console.log('permission: ', this.Permission.value);
43
+ let proj = this.Projects[this.ProjectLookup];
44
+ console.log('Proj: ', proj);
45
+ proj.RelyingParty.AccessConfigurations[this.Projects[this.data.projectLookup].RelyingParty.DefaultAccessConfigurationLookup].Usernames = [this.Email.value];
46
+ const saveProjectRequest = {
47
+ Project: proj,
48
+ ProjectLookup: this.data.projectLookup,
49
+ };
50
+ console.log('request: ', saveProjectRequest);
51
+ this.eacSvc.SaveProjectAsCode(saveProjectRequest).then((result) => {
52
+ if (result.Code === 0) {
53
+ this.snackBar.open('Member Succesfully Added', 'Dismiss', {
54
+ duration: 5000,
55
+ });
56
+ this.CloseDialog();
57
+ }
58
+ else {
59
+ console.log('FAILED: ', result.Message);
60
+ }
61
+ });
62
+ }
63
+ BuildForm() {
64
+ // permission: new FormControl('', [Validators.required]),
65
+ this.AddTeamMemberFormGroup = new FormGroup({
66
+ email: new FormControl('', [Validators.required, Validators.email]),
67
+ });
68
+ }
69
+ Cancel() {
70
+ this.CloseDialog();
71
+ }
72
+ GetErrorMessage() {
73
+ if (this.Email.hasError('required')) {
74
+ return 'You must enter a value';
75
+ }
76
+ return this.Email.hasError('email') ? 'Not a valid email' : '';
77
+ }
78
+ CloseDialog() {
79
+ this.dialogRef.close();
80
+ }
81
+ }
82
+ AddTeamMemberDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AddTeamMemberDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.EaCService }, { token: MAT_DIALOG_DATA }, { token: i3.MatSnackBar }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
83
+ AddTeamMemberDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: AddTeamMemberDialogComponent, selector: "lcu-add-team-member-dialog", ngImport: i0, template: "<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <h3>Invite Member to {{ Enterprise.Name }}</h3>\n <button mat-icon-button (click)=\"Cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n<form\n class=\"invite-form\"\n [formGroup]=\"AddTeamMemberFormGroup\"\n (ngSubmit)=\"AddMember()\"\n>\n <mat-form-field appearance=\"fill\" class=\"invite-container\">\n <mat-label>Enter email</mat-label>\n <input\n matInput\n placeholder=\"Enter Email of Invitee\"\n [formControl]=\"Email\"\n required\n />\n <mat-error *ngIf=\"Email.invalid\">{{ GetErrorMessage() }}</mat-error>\n </mat-form-field>\n\n <!-- <mat-form-field appearance=\"fill\" class=\"invite-container\">\n <mat-label>Permission</mat-label>\n <mat-select [formControl]=\"Permission\">\n <mat-option value=\"option\">Option</mat-option>\n </mat-select>\n </mat-form-field> -->\n <div fxLayoutAlign=\"end center\">\n <button mat-raised-button color=\"primary\" id=\"send-invite-btn\">\n Send Invite\n </button>\n </div>\n</form>\n", styles: [".invite-container{width:100%}\n"], components: [{ type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.MatLabel, selector: "mat-label" }, { type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }] });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AddTeamMemberDialogComponent, decorators: [{
85
+ type: Component,
86
+ args: [{ selector: 'lcu-add-team-member-dialog', template: "<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <h3>Invite Member to {{ Enterprise.Name }}</h3>\n <button mat-icon-button (click)=\"Cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n<form\n class=\"invite-form\"\n [formGroup]=\"AddTeamMemberFormGroup\"\n (ngSubmit)=\"AddMember()\"\n>\n <mat-form-field appearance=\"fill\" class=\"invite-container\">\n <mat-label>Enter email</mat-label>\n <input\n matInput\n placeholder=\"Enter Email of Invitee\"\n [formControl]=\"Email\"\n required\n />\n <mat-error *ngIf=\"Email.invalid\">{{ GetErrorMessage() }}</mat-error>\n </mat-form-field>\n\n <!-- <mat-form-field appearance=\"fill\" class=\"invite-container\">\n <mat-label>Permission</mat-label>\n <mat-select [formControl]=\"Permission\">\n <mat-option value=\"option\">Option</mat-option>\n </mat-select>\n </mat-form-field> -->\n <div fxLayoutAlign=\"end center\">\n <button mat-raised-button color=\"primary\" id=\"send-invite-btn\">\n Send Invite\n </button>\n </div>\n</form>\n", styles: [".invite-container{width:100%}\n"] }]
87
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.EaCService }, { type: undefined, decorators: [{
88
+ type: Inject,
89
+ args: [MAT_DIALOG_DATA]
90
+ }] }, { type: i3.MatSnackBar }, { type: i4.FormBuilder }]; } });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRlYW0tbWVtYmVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9kaWFsb2dzL2FkZC10ZWFtLW1lbWJlci1kaWFsb2cvYWRkLXRlYW0tbWVtYmVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9kaWFsb2dzL2FkZC10ZWFtLW1lbWJlci1kaWFsb2cvYWRkLXRlYW0tbWVtYmVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBR0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFtQnpFLE1BQU0sT0FBTyw0QkFBNEI7SUFpQnJDLFlBQ1csU0FBcUQsRUFDbEQsTUFBa0IsRUFDSSxJQUE2QixFQUNuRCxRQUFxQixFQUN2QixXQUF3QjtRQUp6QixjQUFTLEdBQVQsU0FBUyxDQUE0QztRQUNsRCxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ0ksU0FBSSxHQUFKLElBQUksQ0FBeUI7UUFDbkQsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUNqQyxDQUFDO0lBZEosSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDNUQsQ0FBQztJQVVNLFFBQVE7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QUNuRSxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7eUhBM0ZRLDRCQUE0Qix3RUFvQnpCLGVBQWU7NkdBcEJsQiw0QkFBNEIsa0VDM0J6QywrcENBa0NBOzJGRFBhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDSSw0QkFBNEI7OzBCQXdCakMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgRm9ybUJ1aWxkZXIsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEVhQ1Byb2plY3RBc0NvZGUsIEVudGVycHJpc2VBc0NvZGUgfSBmcm9tICdAc2VtYW50aWNqcy9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBFYUNTZXJ2aWNlLFxuICAgIFNhdmVQcm9qZWN0QXNDb2RlRXZlbnRSZXF1ZXN0LFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lYWMuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkVGVhbU1lbWJlckRpYWxvZ0RhdGEge1xuICAgIGVudGVycHJpc2U6IGFueTtcbiAgICBwcm9qZWN0TG9va3VwOiBzdHJpbmc7XG4gICAgcHJvamVjdHM6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsY3UtYWRkLXRlYW0tbWVtYmVyLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkZC10ZWFtLW1lbWJlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FkZC10ZWFtLW1lbWJlci1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWRkVGVhbU1lbWJlckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHVibGljIEFkZFRlYW1NZW1iZXJGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAgIHB1YmxpYyBFbnRlcnByaXNlOiBhbnk7XG5cbiAgICBwdWJsaWMgUHJvamVjdHM6IGFueTtcblxuICAgIHB1YmxpYyBQcm9qZWN0TG9va3VwOiBhbnk7XG5cbiAgICBwdWJsaWMgZ2V0IEVtYWlsKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLkFkZFRlYW1NZW1iZXJGb3JtR3JvdXA/LmNvbnRyb2xzLmVtYWlsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgUGVybWlzc2lvbigpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5BZGRUZWFtTWVtYmVyRm9ybUdyb3VwPy5jb250cm9scy5wZXJtaXNzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkVGVhbU1lbWJlckRpYWxvZ0NvbXBvbmVudD4sXG4gICAgICAgIHByb3RlY3RlZCBlYWNTdmM6IEVhQ1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQWRkVGVhbU1lbWJlckRpYWxvZ0RhdGEsXG4gICAgICAgIHByb3RlY3RlZCBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLkJ1aWxkRm9ybSgpO1xuXG4gICAgICAgIHRoaXMuRW50ZXJwcmlzZSA9IHRoaXMuZGF0YS5lbnRlcnByaXNlO1xuICAgICAgICBjb25zb2xlLmxvZygnZW50OiAnLCB0aGlzLkVudGVycHJpc2UpO1xuXG4gICAgICAgIHRoaXMuUHJvamVjdHMgPSB0aGlzLmRhdGEucHJvamVjdHM7XG4gICAgICAgIGNvbnNvbGUubG9nKCdwcm9qZWN0czogJywgdGhpcy5Qcm9qZWN0cyk7XG4gICAgICAgIHRoaXMuUHJvamVjdExvb2t1cCA9IHRoaXMuZGF0YS5wcm9qZWN0TG9va3VwO1xuICAgICAgICBjb25zb2xlLmxvZygnZW50OiAnLCB0aGlzLkVudGVycHJpc2UpO1xuICAgIH1cblxuICAgIC8vaW5jbHVkZSBjdXJyZW50IHByb2plY3QsIGVudCBsb29rdXAsIHJlbHlpbmdwYXJ0eSwgYWNjZXNzY29uZmlnIGFuZCB0aGVuIHRoZSB1c2VyIGxpc3RcblxuICAgIHB1YmxpYyBBZGRNZW1iZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlbnQgbG9va3VwOiAnLCB0aGlzLkVudGVycHJpc2UuUGFyZW50RW50ZXJwcmlzZUxvb2t1cCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbnZpdGVkOiAnLCB0aGlzLkVtYWlsLnZhbHVlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Blcm1pc3Npb246ICcsIHRoaXMuUGVybWlzc2lvbi52YWx1ZSk7XG5cbiAgICAgICAgbGV0IHByb2o6IEVhQ1Byb2plY3RBc0NvZGUgPSB0aGlzLlByb2plY3RzW3RoaXMuUHJvamVjdExvb2t1cF07XG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9qOiAnLCBwcm9qKTtcblxuICAgICAgICBwcm9qLlJlbHlpbmdQYXJ0eS5BY2Nlc3NDb25maWd1cmF0aW9uc1tcbiAgICAgICAgICAgIHRoaXMuUHJvamVjdHNbXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnByb2plY3RMb29rdXBcbiAgICAgICAgICAgIF0uUmVseWluZ1BhcnR5LkRlZmF1bHRBY2Nlc3NDb25maWd1cmF0aW9uTG9va3VwXG4gICAgICAgIF0uVXNlcm5hbWVzID0gW3RoaXMuRW1haWwudmFsdWVdO1xuXG4gICAgICAgIGNvbnN0IHNhdmVQcm9qZWN0UmVxdWVzdDogU2F2ZVByb2plY3RBc0NvZGVFdmVudFJlcXVlc3QgPSB7XG4gICAgICAgICAgICBQcm9qZWN0OiBwcm9qLFxuICAgICAgICAgICAgUHJvamVjdExvb2t1cDogdGhpcy5kYXRhLnByb2plY3RMb29rdXAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZXF1ZXN0OiAnLCBzYXZlUHJvamVjdFJlcXVlc3QpO1xuICAgICAgICB0aGlzLmVhY1N2Yy5TYXZlUHJvamVjdEFzQ29kZShzYXZlUHJvamVjdFJlcXVlc3QpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5Db2RlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdNZW1iZXIgU3VjY2VzZnVsbHkgQWRkZWQnLCAnRGlzbWlzcycsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5DbG9zZURpYWxvZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRkFJTEVEOiAnLCByZXN1bHQuTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBCdWlsZEZvcm0oKSB7XG4gICAgICAgIC8vIHBlcm1pc3Npb246IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgICAgdGhpcy5BZGRUZWFtTWVtYmVyRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgQ2FuY2VsKCkge1xuICAgICAgICB0aGlzLkNsb3NlRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIEdldEVycm9yTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuRW1haWwuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIHJldHVybiAnWW91IG11c3QgZW50ZXIgYSB2YWx1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5FbWFpbC5oYXNFcnJvcignZW1haWwnKSA/ICdOb3QgYSB2YWxpZCBlbWFpbCcgOiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgQ2xvc2VEaWFsb2coKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxufVxuIiwiPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxuICAgIDxoMz5JbnZpdGUgTWVtYmVyIHRvIHt7IEVudGVycHJpc2UuTmFtZSB9fTwvaDM+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIkNhbmNlbCgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG48Zm9ybVxuICAgIGNsYXNzPVwiaW52aXRlLWZvcm1cIlxuICAgIFtmb3JtR3JvdXBdPVwiQWRkVGVhbU1lbWJlckZvcm1Hcm91cFwiXG4gICAgKG5nU3VibWl0KT1cIkFkZE1lbWJlcigpXCJcbj5cbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImludml0ZS1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1sYWJlbD5FbnRlciBlbWFpbDwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIEVtYWlsIG9mIEludml0ZWVcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIkVtYWlsXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgIC8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJFbWFpbC5pbnZhbGlkXCI+e3sgR2V0RXJyb3JNZXNzYWdlKCkgfX08L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPCEtLSA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImludml0ZS1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1sYWJlbD5QZXJtaXNzaW9uPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJQZXJtaXNzaW9uXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIm9wdGlvblwiPk9wdGlvbjwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxuICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBpZD1cInNlbmQtaW52aXRlLWJ0blwiPlxuICAgICAgICAgICAgU2VuZCBJbnZpdGVcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=