mmhglobal-dynamicform 2.36.2 → 2.36.5

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.
@@ -931,10 +931,10 @@ export class ZgridComponent extends DataListingFieldBase {
931
931
  if (col.IsRequired) {
932
932
  validators.push(Validators.required);
933
933
  if (col.Type === 'ztexteditor') {
934
- validators.push(ZComponentHelper.requiredValidator_WithoutWhiteSpaces_TextEditor);
934
+ validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
935
935
  }
936
936
  else {
937
- validators.push(ZComponentHelper.requiredValidator_WithoutWhiteSpaces);
937
+ validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
938
938
  }
939
939
  }
940
940
  if (col.ValidatorPattern) {
@@ -1004,10 +1004,10 @@ export class ZgridComponent extends DataListingFieldBase {
1004
1004
  if (col.IsRequired) {
1005
1005
  validators.push(Validators.required);
1006
1006
  if (col.Type === 'ztexteditor') {
1007
- validators.push(ZComponentHelper.requiredValidator_WithoutWhiteSpaces_TextEditor);
1007
+ validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
1008
1008
  }
1009
1009
  else {
1010
- validators.push(ZComponentHelper.requiredValidator_WithoutWhiteSpaces);
1010
+ validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
1011
1011
  }
1012
1012
  }
1013
1013
  if (col.ValidatorPattern) {
@@ -1153,4 +1153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
1153
1153
  type: ViewChild,
1154
1154
  args: [ElementContainerDirective, { static: true }]
1155
1155
  }] } });
1156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR3JGLE9BQU8sRUFFRyxNQUFNLEVBQWMsZ0JBQWdCLEVBQzhCLFNBQVMsRUFDcEYsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUMsRUFBRTtvQkFDdEMsT0FBTyxVQUFVLENBQUM7aUJBQ25CO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxHQUFHLENBQUM7U0FDZDtJQUNILENBQUM7SUFDRCxZQUFZO0lBRVosc0NBQXNDO0lBQ3RDLElBQVcsWUFBWSxDQUFDLFFBQWdCO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFlBQVksQ0FBQyxLQUFZO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDOzsyR0E1eENVLGNBQWM7K0ZBQWQsY0FBYyw2RkFDZCxnQkFBZ0IsbUZBQ2hCLHlCQUF5QixxRkM3RHRDLHNvM0JBOFlBLHk2dkNEeFZjO1FBQ1YsNEJBQTRCO0tBQzdCOzJGQUdVLGNBQWM7a0JBVDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUdUO3dCQUNWLDRCQUE0QjtxQkFDN0I7NmZBSW1DLFVBQVU7c0JBQTdDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUM2QixnQkFBZ0I7c0JBQXZFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWxheSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRXhjZWxFeHBvcnREYXRhIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcclxuaW1wb3J0IHsgR3JpZEl0ZW0sIFNlbGVjdGFibGVTZXR0aW5ncywgU2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcclxuaW1wb3J0IHsgU29ydERlc2NyaXB0b3IsIFN0YXRlLCBwcm9jZXNzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5XCI7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10b29sdGlwJztcclxuaW1wb3J0IHsgR3JpZERhdGFSZXN1bHQsIERhdGFTdGF0ZUNoYW5nZUV2ZW50LCBQYWdlQ2hhbmdlRXZlbnQsIENlbGxDbGlja0V2ZW50LCBHcmlkQ29tcG9uZW50LCBSb3dBcmdzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWRcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRGF0YUxpc3RpbmdGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGhpZGVBbmRTaG93VmVydGljYWxBbmltYXRpb24gfSBmcm9tIFwiLi4vYW5pbWF0aW9ucy9jb21wb25lbnQtYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb25zdGFudCB9IGZyb20gXCIuLi9jb25zdGFudHMvY29uc3RhbnRcIjtcclxuaW1wb3J0IHsgTWFpblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvbWFpbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vZGlyZWN0aXZlcy9lbGVtZW50Y29udGFpbmVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBaR3JpZEJpbmRpbmdEaXJlY3RpdmUgfSBmcm9tIFwiLi96Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBaR3JpZFNlcnZpY2UgfSBmcm9tIFwiLi96Z3JpZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgV2ViQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpDb3JlU2VydmljZSwgU3RvcmFnZVNlc3Npb25TZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgWkdyaWRQb3N0QXBpUGFyYW1zLCBaR3JpZFNldHRpbmdzLCBaR3JpZEN1c3RvbUNvbHVtbiwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBTdGF0ZVR5cGUsIFN0YXRlU2V0dGluZ0luZm8sIEF1dGhTZXJ2aWNlLCBTdGF0ZVNldHRpbmdTZXJ2aWNlXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgWkdyaWQge1xyXG4gIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zO1xyXG4gIHN0YXRlOiBTdGF0ZTtcclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBwYWdpbmF0aW9uQXBpUG9zdFVybDogc3RyaW5nO1xyXG4gIGRhdGE6IFpGaWVsZDtcclxuICBncm91cDogWkdyb3VwO1xyXG4gIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwczogRm9ybUdyb3VwO1xyXG4gIGdldEdyaWREYXRhOiAoKSA9PiBhbnlbXTtcclxuICBnZXREYXRhOiAoKSA9PiB2b2lkO1xyXG4gIGNsZWFyRGF0YTogKCkgPT4gdm9pZDtcclxuICBzZXREYXRhOiAoZGF0YTogYW55KSA9PiB2b2lkO1xyXG4gIHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gdm9pZDtcclxuICAkc2V0Q29sdW1uczogKGNvbHVtbkZpZWxkc05hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgZ2V0Rm9ybUNvbnRyb2xEYXRhKCk6IGFueVtdO1xyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpncmlkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96Z3JpZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96Z3JpZC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFpncmlkQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChUb29sdGlwRGlyZWN0aXZlKSBwdWJsaWMgdG9vbHRpcERpcjogVG9vbHRpcERpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGVsZW1lbnRDb250YWluZXIhOiBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlO1xyXG4gIC8vIEBWaWV3Q2hpbGQoWkdyaWRCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuXHJcbiAgemdyaWQ6IGFueSA9IG51bGw7XHJcbiAgb2F1dGhVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgZ3JpZERhdGE6IEdyaWREYXRhUmVzdWx0O1xyXG4gIHNlbGVjdGFibGVTZXR0aW5nczogU2VsZWN0YWJsZVNldHRpbmdzO1xyXG4gIHJvd1NlbGVjdGlvbjogc3RyaW5nW10gPSBbXTtcclxuICBteVNlbGVjdGlvbiA9IG5ldyBNYXAoKTtcclxuICBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwOyAvLyBmb3Iga2VuZG8gZ3JpZCBidWlsdC1pblxyXG4gIHB1YmxpYyBwcmV2aW91c05leHQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGdyaWRCdG47XHJcbiAgcHVibGljIHBhZ2VhYmxlOiBhbnkgPSBmYWxzZTtcclxuICBwdWJsaWMgZmlsdGVyR3JvdXAgPSBuZXcgWkdyb3VwKCk7XHJcbiAgcHVibGljIGFkdmZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBpc1Nob3dBZHZGaWx0ZXIgPSBmYWxzZTtcclxuICBwdWJsaWMgZ3JpZFRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICBwcml2YXRlIGlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNoZWNrYm94Q29sdW1uUGlubmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcyA9IHtcclxuICAgIHJlZmVySWQ6IG51bGwsXHJcbiAgICBwYWdlTm86IDAsXHJcbiAgICBwYWdlU2l6ZTogMjAsXHJcbiAgICBzb3J0Q29sdW1uTmFtZTogXCJcIixcclxuICAgIHNvcnRPcmRlcjogXCJcIixcclxuICAgIHNvcnRDb2x1bW5OYW1lczogW10sXHJcbiAgICBzb3J0T3JkZXJzOiBbXSxcclxuICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICBwYXJhbWV0ZXJzOiBcIlwiLFxyXG4gICAgZmlsdGVyczogXCJcIixcclxuICAgIGNvbHVtbnM6IFwiXCIsXHJcbiAgICBncmFudFR5cGU6IDRcclxuICB9O1xyXG5cclxuICBncmlkU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZDogYW55W107XHJcbiAgZWRpdGFibGVDb2x1bW5zOiBhbnlbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwYWdlU2l6ZXM6IGJvb2xlYW4gfCBhbnlbXTtcclxuICBncmlkU3RvcmFnZUtleTogc3RyaW5nO1xyXG4gIGdyaWREZWZhdWx0U3RhdGVFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTmV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGVkaXRlZFJvd0luZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGdyaWRTZXR0aW5nOiBaR3JpZFNldHRpbmdzO1xyXG4gIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYWluU2VydmljZTogTWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBaR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0YXRlU2V0dGluZ1NlcnZpY2U6IFN0YXRlU2V0dGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuemNvcmVTZXJ2aWNlLmdldEVudmlyb25tZW50KCk7XHJcbiAgICB0aGlzLm9hdXRoVXJsID0gdGhpcy5lbnZpcm9ubWVudC5lMU9hdXRoVXJsICsgXCIvXCI7XHJcbiAgICB0aGlzLmFsbFJlc3VsdHMgPSB0aGlzLmFsbFJlc3VsdHMuYmluZCh0aGlzKTtcclxuICAgIHRoaXMucmVmcmVzaERhdGEgPSB0aGlzLnJlZnJlc2hEYXRhLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLmNsZWFyRGF0YSA9IHRoaXMuY2xlYXJEYXRhLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLnNldHVwSW5uZXJGaWVsZCgpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlckZlYXR1cmUoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nID0geyBncmlkU3RhdGU6IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0dXBHcmlkU2V0dGluZyh0aGlzLmRhdGEpIH07XHJcblxyXG4gICAgdGhpcy5zZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCk7XHJcblxyXG4gICAgc3VwZXIudHJhbnNsYXRlVG9vbEJhckl0ZW1zKCkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWRDYWxsYmFjayh0aGlzLmdyb3VwKTtcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIGNvbnN0IGlzQmFja05hdmlnYXRlZCA9IChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiKSA9PT0gJ3RydWUnKTtcclxuICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuXHJcbiAgICBpZiAoaXNCYWNrTmF2aWdhdGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcIm5hdmlnYXRlZFJlbG9hZEdyaWRcIiwgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBTdGF0ZSAocGFnaW5hdGlvbiwgc29ydGFibGUsIGZpbHRlciwgb3JkZXJpbmcpXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZGF0YVN0YXRlQ2hhbmdlKHN0YXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydGFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrZWQoY29sU2V0dGluZzogYW55KSB7XHJcbiAgICBpZiAoY29sU2V0dGluZ1sncGlubmVkTGVmdCddID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwdWJsaWMgb25FeGNlbEV4cG9ydChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbFJlcXVpcmVkRm9ybWF0ID0gW107XHJcblxyXG4gICAgLy8gQ29sbGVjdCBjb2x1bW5zIHRoYXQgaGF2ZSBhIHNwZWNpZmljIEV4Y2VsIGNlbGwgZm9ybWF0XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBpZiAoY29sLkV4Y2VsQ2VsbEZvcm1hdCkge1xyXG4gICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LnB1c2goeyBjb2xOYW1lOiBjb2wuRGlzcGxheU5hbWUgPz8gY29sLk5hbWUsIGNlbGxGb3JtYXQ6IGNvbC5FeGNlbENlbGxGb3JtYXQsIGNvbEluZGV4OiBudWxsIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sUmVxdWlyZWRGb3JtYXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLndvcmtib29rLnNoZWV0c1swXS5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgaWYgKHJvdy50eXBlID09PSAnaGVhZGVyJykge1xyXG4gICAgICAgIC8vIENoZWNrIGhlYWRlciBjZWxscyB0byBmaW5kIG1hdGNoaW5nIGNvbHVtbiBuYW1lcyBhbmQgc3RvcmUgdGhlaXIgaW5kZXhcclxuICAgICAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNlbGwudmFsdWUgPT09IGNvbC5jb2xOYW1lKSB7XHJcbiAgICAgICAgICAgICAgY29sLmNvbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHJvdy50eXBlID09PSAnZGF0YScpIHtcclxuICAgICAgICAvLyBBcHBseSB0aGUgZm9ybWF0IHRvIGNlbGxzIGluIGRhdGEgcm93cyBpZiB0aGVpciBpbmRleCBtYXRjaGVzXHJcbiAgICAgICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb2xSZXF1aXJlZEZvcm1hdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gY29sLmNvbEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgY2VsbC5mb3JtYXQgPSBjb2wuY2VsbEZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgQ29sdW1uc1xyXG4gIHB1YmxpYyBpc1NlbGVjdE9wdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBjaGVja2JveE9ubHk6IGZhbHNlLFxyXG4gICAgICAgIG1vZGU6ICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucz8udG9Mb3dlckNhc2UoKSA9PT0gXCJtdWx0aXBsZVwiKSA/IFwibXVsdGlwbGVcIiA6IFwic2luZ2xlXCJcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyAkc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwW2NvbHVtbk5hbWVdID0gdGhpcy53cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5zKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1uTGlzdDogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICByZXR1cm4gb2YoY29sdW1uTGlzdC5tYXAoYyA9PiB7XHJcbiAgICAgIGNvbnN0IGlzSGlkZGVuOiBib29sZWFuID0gYy5IaWRkZW47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgTmFtZTogYy5OYW1lLFxyXG4gICAgICAgIFZhbHVlOiBjLkNvZGUsXHJcbiAgICAgICAgVHlwZTogYy5UeXBlLFxyXG4gICAgICAgIGdyaWRDb2xWaXNpYmxlOiAhaXNIaWRkZW4sXHJcbiAgICAgICAgRW5hYmxlR3JpZFZhbHVlOiBjLkVuYWJsZUdyaWRWYWx1ZSB8fCBmYWxzZSxcclxuICAgICAgICB3aWR0aDogMTAwICsgYy5OYW1lLmxlbmd0aCAqIDQsXHJcbiAgICAgICAgZW5hYmxlRmlsdGVyaW5nOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgICAgRGl2Q2xhc3M6IFwiY29sLXhzLTEyIGNvbC1zbS02XCIsXHJcbiAgICAgICAgSXNFZGl0YWJsZUluR3JpZDogYy5FZGl0YWJsZVxyXG4gICAgICB9O1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUdyaWRDb2x1bW5zKGdyaWRTZXR0aW5nPzogWkdyaWRTZXR0aW5ncyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBjb2x1bW5GaWVsZHMkOiBPYnNlcnZhYmxlPGFueT4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgIHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICkgfHwgb2YoW10pO1xyXG5cclxuICAgIGlmICghdGhpcy5kYXRhLkNvbHVtbkZpZWxkcykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQvRW1wdHkgZ3JpZCgnICsgdGhpcy5kYXRhLk5hbWUgKyAnKSBjb2x1bW5GaWVsZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29sdW1uRmllbGRzJCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnRmFpbCB0byBnZW5lcmF0ZSBncmlkIGNvbHVtbiBmaWVsZHMuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uRmllbGRzJC5waXBlKFxyXG4gICAgICB0YXAoY29sdW1uRmllbGQgPT4ge1xyXG4gICAgICAgIGlmICghY29sdW1uRmllbGQpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGRhdGEgdG8gZ2VuZXJhdGUgY29sdW1uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICAgICAgICBjb25zdCBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMgPSBbXTtcclxuXHJcbiAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zKHtcclxuICAgICAgICAgICAgY29sdW1uRmllbGQ6IGNvbHVtbkZpZWxkLFxyXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgICAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uczogZ3JpZFNldHRpbmc/LmNvbHVtbkNvbmZpZ3VyYXRpb25zLFxyXG4gICAgICAgICAgICBnZW5lcmF0ZUhpZGRlbkNvbHVtbnM6IGdlbmVyYXRlSGlkZGVuQ29sdW1ucyxcclxuICAgICAgICAgICAgZ3JpZEF0dHJpYnV0ZXM6IHRoaXMuZGF0YVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKGdlbmVyYXRlSGlkZGVuQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQgPSBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMubWFwKGZpZWxkID0+ICh7IGZpZWxkOiBmaWVsZCwgVmlzaWJsZTogdHJ1ZSwgSXNSZXF1aXJlZDogZmFsc2UsIFZhbHVlOiBmaWVsZCB9KSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkLnB1c2goZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gc3VwZXIudHJhbnNsYXRlQ29sdW1uSGVhZGVyKHRoaXMuY29sdW1ucyk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbk5hbWUoZ3JpZENlbGxSZXBsYWNlVmFsdWU6IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGdyaWRDZWxsUmVwbGFjZVZhbHVlICYmIGdyaWRDZWxsUmVwbGFjZVZhbHVlW3ZhbHVlXSkge1xyXG4gICAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRGb250QXdlc29tZShncmlkQ2VsbFJlcGxhY2VWYWx1ZVt2YWx1ZV0sIHRoaXMuZm9udEF3ZVNvbWVTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzdHlsaW5nXHJcbiAgcHVibGljIGNlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoIWNvbmRpdGlvblJlc3VsdCkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ1ZhbHVlJ10gPT0gY29sVmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmRpdGlvblJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDZWxsU3R5bGVDb25kaXRpb24oY29sLCBjb2xWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAoY29sWydDZWxsU3R5bGVDb25kaXRpb24nXSkge1xyXG4gICAgICBjb25zdCBjb25kaXRpb25IaWdobGlnaHRjb2w6IFtdID0gY29sWydDZWxsU3R5bGVDb25kaXRpb24nXTtcclxuICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9ICcnO1xyXG5cclxuICAgICAgY29uZGl0aW9uSGlnaGxpZ2h0Y29sLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGFbJ1ZhbHVlJ10gPT0gY29sVmFsdWUpIHtcclxuICAgICAgICAgIGlmIChkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSAnYmFja2dyb3VuZC1jb2xvcjonICsgZGF0YVsnQmFja2dyb3VuZENvbG9yJ10gKyAnOyc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFbJ0NvbG9yJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ICs9ICdjb2xvcjonICsgZGF0YVsnQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnU3R5bGVFeHByZXNzaW9uJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ICs9IGRhdGFbJ1N0eWxlRXhwcmVzc2lvbiddO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE9uY2VsbCBjbGljayBoYW5kbGluZ1xyXG4gIC8vIDEuIGluQ2VsbCBFZGl0XHJcbiAgLy8gMi4gT25JdGVtQ2xpY2tcclxuICAvLyAzLiBOYXZpZ2F0ZSB0byBGb3JtIFBhZ2VcclxuICAvLyA0LiBTaG93IEZvcm0gUGFnZSBpbiB0aGUgc2FtZSBwYWdlIChERUMgYW5kIERyYXdlcilcclxuICBwdWJsaWMgY2VsbENsaWNrSGFuZGxlcihldmVudDogQ2VsbENsaWNrRXZlbnQpIHtcclxuICAgIC8vIFJpZ2h0IGNsaWNrIGhhbmRsZXJcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImNvbnRleHRtZW51XCIpIHtcclxuICAgICAgdGhpcy5kYXRhSXRlbUNvbnRleHRNZW51LnNob3dDb250ZXh0TWVudU1hbnVhbGx5KGV2ZW50LCBldmVudC5kYXRhSXRlbSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciA9IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA/IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA6IGZhbHNlO1xyXG4gICAgY29uc3QgaXNDb21tYW5kQ29sdW1uID0gZXZlbnQuY29sdW1uLmNvbnN0cnVjdG9yLm5hbWUgPT0gJ0NvbW1hbmRDb2x1bW5Db21wb25lbnQnID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnRvb2x0aXBEaXIpIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyICYmICFpc0NvbW1hbmRDb2x1bW4pIHtcclxuICAgICAgY29uc3QgaW5DZWxsRWRpdGFibGUgPSB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgPyB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgOiBmYWxzZTtcclxuICAgICAgaWYgKGluQ2VsbEVkaXRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+IGV2ZW50LnNlbmRlci5lZGl0Q2VsbChldmVudC5yb3dJbmRleCwgZXZlbnQuY29sdW1uSW5kZXgsIHRoaXMuY3JlYXRlRm9ybUdyb3VwKGV2ZW50LmRhdGFJdGVtLCBzLmZpZWxkKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNlbGxDbGljayBldmVudDogXCIsIGV2ZW50KTtcclxuICAgICAgICAvL3RoaXMuY2FjaGVTZXJ2aWNlLnNldCgnbGFzdENsaWNrZWRHcmlkUmVjb3JkJywgZXZlbnQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhLk9uSXRlbUNsaWNrKSB7XHJcbiAgICAgICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljayk7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gc3RvcmUgY2xpY2tlZCBpZCBhbmQgYWN0aW9uIGFzIGVkaXQgdG8gdGhlIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgICAgLy8gT25JdGVtQ2xpY2ssIHByb2plY3QgaGF2ZSB0byBzZXQgdGhlbXNlbGYuXHJcbiAgICAgICAgICB0aGlzLm1haW5TZXJ2aWNlLnNldE5hdmlnYXRpb25QYXJhbXMoW2V2ZW50LmRhdGFJdGVtLklkLCAnZWRpdCddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdE1vZGVsKGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRDZWxsQ2xvc2VIYW5kbGVyKGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBmb3JtR3JvdXAsIGRhdGFJdGVtIH0gPSBhcmdzO1xyXG4gICAgaWYgKCFmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhSXRlbSwgeyBbcy5maWVsZF06IGZvcm1Hcm91cC52YWx1ZVtzLmZpZWxkXSB9KSk7XHJcbiAgICAgIC8vIHRoaXMubXlTZWxlY3Rpb24ubWFwKHMgPT4gKHMuSWQgPT09IGRhdGFJdGVtLklkKSA/IE9iamVjdC5hc3NpZ24ocywgZGF0YUl0ZW0pIDogbnVsbCk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXplIG15U2VsZWN0aW9uIGlmIGl0J3MgdW5kZWZpbmVkXHJcbiAgICAgIGlmICghdGhpcy5teVNlbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMubXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24uZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS5JZCA9PT0gZGF0YUl0ZW0uSWQpIHtcclxuICAgICAgICAgIHRoaXMubXlTZWxlY3Rpb24uc2V0KGtleSwgeyAuLi52YWx1ZSwgLi4uZGF0YUl0ZW0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG8oZXZlbnQ6IGFueSwgY2xpY2tBY3Rpb246IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICAvLyBjb25zdCBuID0gY29sU2V0dGluZy5uYXZpZ2F0ZVRvLnJlcGxhY2UoJy86aWQnLCBjZWxsRGF0YSk7XHJcbiAgICBjb25zdCBuID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGNsaWNrQWN0aW9uLkNsaWNrKTtcclxuICAgIGlmIChuKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogJ3pncmlkLW9uTmF2aWdhdGVUbycsXHJcbiAgICAgICAgdGFyZ2V0OiBjbGlja0FjdGlvbi5DbGljayxcclxuICAgICAgICByb3dEYXRhOiByb3dEYXRhLFxyXG4gICAgICAgIGRhdGE6IGNlbGxEYXRhXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZWRpdE1vZGVsKGRhdGFJdGVtOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRWRpdENsaWNrVVJMKSB7XHJcbiAgICAgIC8vIEVkaXQgaW5jZWxsIGZpZWxkXHJcbiAgICAgIGNvbnN0IGNvbEZpZWxkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuQ29sdW1uRmllbGRzLCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtY2VsbENsaWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRWRpdENsaWNrVVJMLFxyXG4gICAgICAgIGRhdGE6IGRhdGFJdGVtLFxyXG4gICAgICAgIGNvbHVtbkZpZWxkcyQ6IGNvbEZpZWxkc1xyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRhdGFbJ0NvbnRhaW5lckZvcm0nXSkge1xyXG4gICAgICB0aGlzLnNob3dGb3JtUGFnZS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTF0sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIC8vc2tpcExvY2F0aW9uQ2hhbmdlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vLy8gV2hlbiBjbGlja2VkIHJvdXRlIHRvIHBhZ2VcclxuICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkwsIGRhdGFJdGVtLklkLCAnZWRpdCddLCB7XHJcbiAgICAgIC8vICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlXHJcbiAgICAgIC8vfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CdG5DbGljayhldmVudDogYW55LCBjb2xTZXR0aW5nOiBhbnksIHJvd0RhdGE6IGFueSwgY2VsbERhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5vbk5hdmlnYXRlVG8oZXZlbnQsIGNvbFNldHRpbmcsIHJvd0RhdGEsIGNlbGxEYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKGRhdGFJdGVtOiBhbnksIGZpZWxkTmFtZTogYW55KTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgW2ZpZWxkTmFtZV06IGRhdGFJdGVtW2ZpZWxkTmFtZV1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEhlbHBlciBmdW5jdGlvbnNcclxuICBwdWJsaWMgZ2V0Q2xhc3MoZGF0YUl0ZW06IGFueSwgY29sOiBhbnkpIHtcclxuICAgIGxldCBuZ0NsYXNzID0gXCJncmlkQ2VsbCBcIjtcclxuICAgIGlmIChjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJyB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYycpIHtcclxuICAgICAgbmdDbGFzcyArPSBcInJpZ2h0QWxpZ25lZCBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YUl0ZW1bY29sLmZpZWxkICsgJ19DbGFzcyddKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gZGF0YUl0ZW1bY29sLmZpZWxkICsgJ19DbGFzcyddICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5DbGFzcykge1xyXG4gICAgICBuZ0NsYXNzICs9IGNvbC5DbGFzcyArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuUG9wT3ZlckNvbnRlbnQpIHtcclxuICAgICAgbmdDbGFzcyArPSBcIiB3aXRoUG9wb3ZlckluR3JpZFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZ0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1hdChjb2w6IGFueSwgZGVmYXVsdEZvcm1hdD86IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiXCI7XHJcbiAgICBpZiAoY29sLkZvcm1hdE9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3JtYXQgPSBkZWZhdWx0Rm9ybWF0ID8gZGVmYXVsdEZvcm1hdCA6IFwiXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmb3JtYXRBcnIgPSBjb2wuRm9ybWF0T3B0aW9ucy5zcGxpdChcIi5cIilcclxuICAgICAgbGV0IGRwID0gMDtcclxuXHJcbiAgICAgIGlmIChmb3JtYXRBcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGRwID0gZm9ybWF0QXJyWzFdLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRwICE9PSAwKSB7XHJcbiAgICAgICAgZm9ybWF0ID0gXCIxLlwiICsgZHAgKyBcIi1cIiArIGRwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFsbFJlc3VsdHMoKTogT2JzZXJ2YWJsZTxFeGNlbEV4cG9ydERhdGE+IHtcclxuICAgIGNvbnN0IGdyaWRDb250cm9sID0gdGhpcy56Z3JpZCBhcyBaR3JpZDtcclxuICAgIGNvbnN0IGdyaWRDb21wb25lbnQgPSB0aGlzLnpncmlkLmdyaWQgYXMgR3JpZENvbXBvbmVudDtcclxuICAgIGNvbnN0IGRhdGEgPSBncmlkQ29tcG9uZW50LmRhdGEgYXMgR3JpZERhdGFSZXN1bHQ7XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VVUkxGb3JHZW5lcmF0ZURhdGEgPSB0aGlzLmRhdGEuRXhwb3J0RGF0YVJlc291cmNlVVJMID8gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKHRoaXMuZGF0YS5FeHBvcnREYXRhUmVzb3VyY2VVUkwpIDogZ3JpZENvbnRyb2wucGFnaW5hdGlvbkFwaVBvc3RVcmw7XHJcblxyXG4gICAgLy8gTmVlZCB0byBjbG9uZSwgaWYgbm90IHdpbGwgYWZmZWN0IHRoZSBncmlkIHBhcmFtcy5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1zKTtcclxuICAgIHBhcmFtcy5wYWdlTm8gPSAwO1xyXG4gICAgcGFyYW1zLnBhZ2VTaXplID0gZGF0YS50b3RhbDtcclxuXHJcbiAgICBjb25zdCBkYXRlVGltZVJlZ2V4ID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSg/OltUXFxzXVxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsN30pPyg/Olp8W1xcK1xcLV1cXGR7Mn06XFxkezJ9KT8pPyQvO1xyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGNvbnZlcnQgZGF0ZSBzdHJpbmdzIHRvIERhdGUgb2JqZWN0c1xyXG4gICAgY29uc3QgY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyA9IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV3SXRlbSkge1xyXG4gICAgICAgICAgaWYgKG5ld0l0ZW0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ld0l0ZW1ba2V5XTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIGFuZCBtYXRjaGVzIHRoZSBkYXRlVGltZVJlZ2V4IHBhdHRlcm5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgZGF0ZVRpbWVSZWdleC50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIG5ld0l0ZW1ba2V5XSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHJlc291cmNlVVJMRm9yR2VuZXJhdGVEYXRhLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydCBkYXRlIHN0cmluZ3MgdG8gRGF0ZSBvYmplY3RzXHJcbiAgICAgICAgZGF0YS5kYXRhU2V0ID0gY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhkYXRhLmRhdGFTZXQpO1xyXG5cclxuICAgICAgICAvLyBQcmVwYXJlIHRoZSByZXN1bHQgZm9yIEV4Y2VsIGV4cG9ydFxyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRXhjZWxFeHBvcnREYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogcHJvY2VzcyhkYXRhLmRhdGFTZXQsIHt9KS5kYXRhXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb25TZWdtZW50ID0gZXZlbnQudGFyZ2V0LnRyaW0oKS5zcGxpdCgnLicpO1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb24gPSBfZ3JpZE9wdGlvblNlZ21lbnRbMV07XHJcbiAgICBpZiAoX2dyaWRPcHRpb24pIHtcclxuICAgICAgY29uc3QgemdyaWRDb250cm9sID0gZ3JvdXBbX2dyaWRPcHRpb25dIGFzIFpHcmlkO1xyXG4gICAgICBpZiAoemdyaWRDb250cm9sKSB7XHJcbiAgICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIGZpbmQgZ3JpZCB2YWx1ZTogJyArIF9ncmlkT3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ0ludmFsaWQgcmVmcmVzaEdyaWQgZXZlbnQ6ICcsIGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoRGF0YSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRGF0YSgpIHtcclxuICAgIHRoaXMuemdyaWQuY2xlYXJEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1Rvb2x0aXAoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5Jc1Nob3dUb29sVGlwID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGlzQ29tbWFuZENvbHVtbiA9IGZhbHNlO1xyXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT0gJ2stY29tbWFuZC1jZWxsJykge1xyXG4gICAgICAgIGlzQ29tbWFuZENvbHVtbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghaXNDb21tYW5kQ29sdW1uICYmXHJcbiAgICAgIChcclxuICAgICAgICAoKGVsZW1lbnQubm9kZU5hbWUgPT09ICdURCcgfHwgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1RIJykgJiYgZWxlbWVudC5vZmZzZXRXaWR0aCA8IChlbGVtZW50LnNjcm9sbFdpZHRoKSkgfHxcclxuICAgICAgICAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1NQQU4nICYmIGVsZW1lbnQuY2xhc3NMaXN0ICYmIGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA+IDAgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2dyaWQtY2VsbC1kYXRhJykgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoIDwgKGVsZW1lbnQucGFyZW50RWxlbWVudC5zY3JvbGxXaWR0aCkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci50b2dnbGUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dTZWxlY3Rpb25LZXkgPSAoY29udGV4dDogUm93QXJncyk6IGFueSA9PiB7XHJcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgdXNpbmcgZWl0aGVyIHRoaXMuZGF0YS5VbmlxdWVLZXkgb3IgY29udGV4dC5kYXRhSXRlbS5JZC5cclxuICAgIGNvbnN0IGtleSA9ICh0aGlzLmRhdGEuVW5pcXVlS2V5ID8/IGNvbnRleHQuZGF0YUl0ZW0uSWQpOy8vICsgXCIgXCIgKyBjb250ZXh0LmluZGV4O1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVW5pcXVlS2V5ICYmIGNvbnRleHQuZGF0YUl0ZW0uSWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQSB1bmlxdWUgY29sdW1uIGZpZWxkIGlzIHJlcXVpcmVkLiBFbnN1cmUgZWl0aGVyIHRoZSBJZCBjb2x1bW4gaXMgcHJlc2VudCBvciB0aGUgVW5pcXVlS2V5IHByb3BlcnR5IGlzIHNldCBmb3IgemdyaWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBteVNlbGVjdGlvbiBpZiBpdCdzIHVuZGVmaW5lZFxyXG4gICAgaWYgKCF0aGlzLm15U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RvcmUgdGhlIGRhdGEgaXRlbSBpbiB0aGUgbXlTZWxlY3Rpb24gbWFwIHdpdGggdGhlIGdlbmVyYXRlZCBrZXkuXHJcbiAgICB0aGlzLm15U2VsZWN0aW9uLnNldChrZXksIGNvbnRleHQuZGF0YUl0ZW0pO1xyXG5cclxuICAgIC8vIFJldHVybiB0aGUgZ2VuZXJhdGVkIGtleS5cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogYW55IHtcclxuICAgIC8vIE1hcCBlYWNoIGtleSBpbiByb3dTZWxlY3Rpb24gdG8gaXRzIGNvcnJlc3BvbmRpbmcgZGF0YSBpdGVtIGluIHRoZSBteVNlbGVjdGlvbiBtYXAuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZCA9IHRoaXMucm93U2VsZWN0aW9uLm1hcChrZXkgPT4gdGhpcy5teVNlbGVjdGlvbi5nZXQoa2V5KSk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiBzZWxlY3RlZCByZWNvcmRzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGVkUmVjb3JkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgLy8gQ2hlY2sgaWYgbXlTZWxlY3Rpb24gaXMgZGVmaW5lZCBiZWZvcmUgdHJ5aW5nIHRvIGNsZWFyIGl0XHJcbiAgICBpZiAodGhpcy5teVNlbGVjdGlvbikge1xyXG4gICAgICAvLyBDbGVhciB0aGUgbWFwIHRoYXQgc3RvcmVzIHNlbGVjdGVkIGRhdGEgaXRlbXMuXHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wdGlvbmFsbHksIHlvdSBjYW4gaW5pdGlhbGl6ZSBpdCBpZiBpdCdzIHVuZGVmaW5lZFxyXG4gICAgICB0aGlzLm15U2VsZWN0aW9uID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHRoZSBhcnJheSB0aGF0IHRyYWNrcyBzZWxlY3RlZCBrZXlzLlxyXG4gICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy56Z3JpZC5nZXREYXRhQmluZGluZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigndGhpcy56Z3JpZCBpcyB1bmRlZmluZWQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1VzZUxvY2FsRGF0YSgpID8gKHRoaXMuemdyaWQuZGF0YSB8fCB0aGlzLnpncmlkLm9yaWdpbmFsRGF0YSkgOiAodGhpcy56Z3JpZC5ncmlkLmRhdGEgJiYgdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA/IHRoaXMuemdyaWQuZ3JpZC5kYXRhLmRhdGEgOiBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICBpZiAodGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5kYXRhID0gZ0RhdGE7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZUF1dG9BcHBlbmRHcmlkRGF0ZUZpbHRlckNvbCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRlQ29sRm9yRmlsdGVyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZ3JpZC5kYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogZ0RhdGEsXHJcbiAgICAgICAgICB0b3RhbDogZ0RhdGEudG90YWxDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ3pncmlkIGlzIG51bGwgZm9yIHNldERhdGEuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG4gICAgZ3JpZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGNvbC5OYW1lID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogR3JpZEl0ZW0pOiBhbnkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhpdGVtLmRhdGFbJ0lkJ10gfHwgaW5kZXgpO1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VzZUxvY2FsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvL3JldHVybiBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuZGF0YS5SZXNvdXJjZVVSTCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzZXR1cFxyXG4gIHByaXZhdGUgc2V0dXBHcmlkQ29tcG9uZW50QXR0cmlidXRlcygpIHtcclxuICAgIC8vIEdyaWQgZGVmYXVsdCBzZXR0aW5nXHJcbiAgICB0aGlzLmdyaWRUaXRsZSA9IHRoaXMuZGF0YS5UaXRsZTtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlU2l6ZXMgPSBbNSwgMTAsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMF07XHJcbiAgICB0aGlzLnByZXZpb3VzTmV4dCA9IHRoaXMuZGF0YVsnRW5hYmxlUHJldmlvdXNOZXh0QnV0dG9uJ10gfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gW01vYmlsZV0gRGlzYWJsZSBwYWdlIHNpemVzIGlmIFBhZ2VTaXplcyBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSBvciBvbiBhIG1vYmlsZSBzY3JlZW4uXHJcbiAgICBpZiAodGhpcy5kYXRhLlBhZ2VTaXplcyA9PT0gZmFsc2UgfHwgdGhpcy5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemVzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIHBhZ2luYXRpb24gc2V0dGluZ3MuXHJcbiAgICB0aGlzLnBhZ2VhYmxlID0gdGhpcy5kYXRhLnBhZ2VBYmxlICE9IHVuZGVmaW5lZCA/IHRoaXMuZGF0YS5wYWdlQWJsZSA6IHtcclxuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcclxuICAgICAgYnV0dG9uQ291bnQ6IDMsXHJcbiAgICAgIHBhZ2VTaXplczogdGhpcy5wYWdlU2l6ZXMsXHJcbiAgICAgIHByZXZpb3VzTmV4dDogdGhpcy5wcmV2aW91c05leHQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENvbmZpZ3VyZSBncmlkIHNlbGVjdGlvbiBvcHRpb25zIGlmIHNldCBTZWxlY3RPcHRpb25zIGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgRXJyb3I6IGdyaWQoJHt0aGlzLmRhdGEuTmFtZX0pLCB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyBzaG91bGQgYmUgYSBzdHJpbmcgd2l0aCB2YWx1ZSAnc2luZ2xlJyBvciAnbXVsdGlwbGUnLmApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgICAgbW9kZTogdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMudG9Mb3dlckNhc2UoKSA9PT0gJ3NpbmdsZScgPyAnc2luZ2xlJyA6ICdtdWx0aXBsZSdcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQmluZCBjb21wb25lbnQgdG8gZ3JvdXAgdXNpbmcgdGhlIHByb3ZpZGVkIFZhbHVlIHNldCBpbiBmaWVsZCBlbGVtZW50IGF0dHJpYnV0ZS5cclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgdGhpcy5ncm91cFt0aGlzLmRhdGEuVmFsdWUuc2xpY2UoNildID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBTdWJzY3JpcHRpb25Gb3JHcmlkU3ViamVjdCgpIHtcclxuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYW55IGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLlxyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnJvbSBoZXJlIHdpbGwgY2FsbCB6Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZS5cclxuICAgIC8vIFN1YnNjcmliZSB0byBnZXQgZnJvbSBkaXJlY3RpdmUgYW5kIHNldCB0byBjb21wb25lbnRcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ncmlkU3ViamVjdC5waXBlKFxyXG4gICAgICB0YXAoZ3JpZERpcmVjdGl2ZSA9PiB7XHJcbiAgICAgICAgLy8gU2V0IHRoZSB6Z3JpZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgZW1pdHRlZCBncmlkRGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuemdyaWQgPSBncmlkRGlyZWN0aXZlO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbHVtbnMgcHJvcGVydHkgd2l0aCB0aGUgZ3JpZCBjb2x1bW5zIGZyb20gZ3JpZERpcmVjdGl2ZS5cclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmNvbHVtbnM7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIGF1dG9tYXRpYyBhcHBlbmRpbmcgb2YgYSBncmlkIGRhdGUgZmlsdGVyIGNvbHVtbiBpcyBub3QgZGlzYWJsZWQuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZUF1dG9BcHBlbmRHcmlkRGF0ZUZpbHRlckNvbCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRlQ29sRm9yRmlsdGVyaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgdXAgZ3JpZCB3aXRoIGlubGluZSBlZGl0aW5nLlxyXG4gICAgICAgIHRoaXMuc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHVwIGEgcG9wb3ZlciBmZWF0dXJlIGJhc2VkIG9uIGNvbHVtbnMgYW5kIGdyaWQgZGF0YS5cclxuICAgICAgICB0aGlzLnNldHVwUG9wb3ZlckZlYXR1cmUodGhpcy5jb2x1bW5zLCB0aGlzLmdldEdyaWREYXRhKCkpO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAvLyBDaGVjayBpZiBjb2x1bW4gaGVhZGVycyBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2xhdGVkLlxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1hcmsgY29sdW1uIGhlYWRlcnMgYXMgdHJhbnNsYXRlZCBhbmQgcGVyZm9ybSB0aGUgdHJhbnNsYXRpb24uXHJcbiAgICAgICAgdGhpcy5pc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChfID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94Q29sdW1uUGlubmVkID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnNQaW5uZWQ7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVHcmlkU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBncmlkU3RhdGVMb2dpYyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5kYXRhKTtcclxuICAgIGNvbnN0IGNhY2hlTmFtZSA9IHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5nZXRTdG9yYWdlQ2FjaGVLZXkoU3RhdGVUeXBlLnNhdmVkU2V0dGluZywgdGhpcy5kYXRhKTtcclxuICAgIGNvbnN0IHByZXZpb3VzQ2FjaGVkRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0U3RhdGVDYWNoZUJ5TmFtZShjYWNoZU5hbWUpO1xyXG4gICAgY29uc3QgY29sdW1uQ29uZmlndXJhdGlvbnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zQ29uZmlnKHRoaXMuemdyaWQuZ3JpZC5jb2x1bW5zKTtcclxuICAgIGNvbnN0IHNldHRpbmdDb25maWc6IFpHcmlkU2V0dGluZ3MgPSB7IGNvbHVtbkNvbmZpZ3VyYXRpb25zIH07XHJcblxyXG4gICAgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyA9IHtcclxuICAgICAgLi4udGhpcy56Z3JpZC5ncmlkU2V0dGluZyxcclxuICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnNcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGdyaWRTdGF0ZUxvZ2ljID09PSBTdGF0ZVR5cGUuY2FjaGVkRGF0YVNldHRpbmcpIHtcclxuICAgICAgc2V0dGluZ0NvbmZpZy5ncmlkU3RhdGUgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldFN0YXRlVG9DYWNoZShjYWNoZU5hbWUsIHNldHRpbmdDb25maWcpO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlU2V0dGluZ0luZm86IFN0YXRlU2V0dGluZ0luZm8gPSB7XHJcbiAgICAgIHByb2plY3RDb2RlOiB0aGlzLmVudmlyb25tZW50LnByb2plY3RDb2Rlc1swXSxcclxuICAgICAgZmllbGRFbGVtZW50TmFtZTogdGhpcy5kYXRhLkZpZWxkRWxlbWVudE5hbWUsXHJcbiAgICAgIGNvbXBvbmVudFVuaXF1ZUtleTogdGhpcy5kYXRhLkNhY2hlSW5mby5OYW1lID8/IHRoaXMuZGF0YS5GaWVsZEVsZW1lbnROYW1lLFxyXG4gICAgICB1c2VySWQ6IHRoaXMuYXV0aFNlcnZpY2UuZTFUb2tlbi51c2VyTmFtZSxcclxuICAgICAgc3RhdGVUeXBlOiBTdGF0ZVR5cGUuc2F2ZWRTZXR0aW5nLFxyXG4gICAgICBzdGF0ZURhdGE6IEpTT04uc3RyaW5naWZ5KHNldHRpbmdDb25maWcpLFxyXG4gICAgICBzdG9yYWdlQ2FjaGVOYW1lOiBjYWNoZU5hbWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAocHJldmlvdXNDYWNoZWREYXRhICYmIHByZXZpb3VzQ2FjaGVkRGF0YS5pZCkge1xyXG4gICAgICBzdGF0ZVNldHRpbmdJbmZvLmlkID0gcHJldmlvdXNDYWNoZWREYXRhLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvbnQgbmVlZCB0byB3YWl0LCBhcyBpdCB3aWxsIGZpcnN0IHNhdmUgdG8gdGhlIGJyb3dzZXIgc3RvcmFnZS5cclxuICAgIHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5zYXZlU3RhdGVTZXR0aW5nKHN0YXRlU2V0dGluZ0luZm8pLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBTYXZlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdG9yZUdyaWRTZXR0aW5ncygpIHtcclxuICAgIC8vIEVuc3VyZSBjb2x1bW5zIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgb3JpZ2luYWwgb3JkZXJcclxuICAgIHRoaXMuY29sdW1ucy5zb3J0KChhLCBiKSA9PiBhLm9yaWdpbmFsT3JkZXJJbmRleCAtIGIub3JpZ2luYWxPcmRlckluZGV4KTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBncmlkIGNvbHVtbnMgYW5kIGxvYWQgZGF0YVxyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDYWxsIHRoZSBncmlkU2VydmljZS5nZXRTdGF0ZUNhY2hlIGFuZCBoYW5kbGUgdGhlIHJlc3VsdCB2aWEgc3Vic2NyaXB0aW9uXHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmdldFN0YXRlQ2FjaGUoU3RhdGVUeXBlLnNhdmVkU2V0dGluZywgdGhpcy5kYXRhKS5zdWJzY3JpYmUoKGNhY2hlZERhdGEpID0+IHtcclxuICAgICAgaWYgKGNhY2hlZERhdGEpIHtcclxuICAgICAgICAvLyBDYWNoZSBmb3VuZCwgcHJvY2VlZCB3aXRoIGRlbGV0aW9uXHJcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5kZWxldGVTdGF0ZUNhY2hlKFN0YXRlVHlwZS5zYXZlZFNldHRpbmcsIHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIC8vIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSByZXN0b3JlIGJ1dHRvblxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuXHJcbiAgICAgICAgLy8gRGVsZXRlIHRoZSBzdGF0ZSBzZXR0aW5nIGJhc2VkIG9uIHRoZSBjYWNoZSBkYXRhIElEXHJcbiAgICAgICAgdGhpcy5zdGF0ZVNldHRpbmdTZXJ2aWNlLmRlbGV0ZVN0YXRlU2V0dGluZyhjYWNoZWREYXRhLmlkKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZENhbGxiYWNrKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10pIHtcclxuICAgICAgY29uc3QgbWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLUFmdGVybG9hZENhbGxiYWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10sXHJcbiAgICAgICAgZGF0YTogbWVcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpIHtcclxuICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuaXNVc2VMb2NhbERhdGEoKSAmJiBncmlkRGF0YSAmJiBncmlkRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVDb2wgPSBPYmplY3Qua2V5cyhncmlkRGF0YVswXSkuZmlsdGVyKHggPT4geC5pbmNsdWRlcyhcIkRhdGVcIikgJiYgIXguZW5kc1dpdGgoQ29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXgpKTtcclxuICAgICAgaWYgKGRhdGVDb2wgJiYgZGF0ZUNvbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgIGRhdGVDb2wuZm9yRWFjaChjb2xOYW1lID0+IHtcclxuICAgICAgICAgICAgZGF0YVtgJHtjb2xOYW1lfSR7Q29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXh9YF0gPSBuZXcgRGF0ZShkYXRhW2NvbE5hbWVdKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5DYWNoZUluZm8/LkVuYWJsZVNhdmVTdGF0ZSkge1xyXG4gICAgICB0aGlzLnNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlVHlwZSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5kYXRhKTtcclxuICAgICAgaWYgKHN0YXRlVHlwZSA9PT0gU3RhdGVUeXBlLnNhdmVkU2V0dGluZyB8fCBzdGF0ZVR5cGUgPT09IFN0YXRlVHlwZS5zYXZlZEFuZENhY2hlZERhdGFTZXR0aW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ0NhY2hlTmFtZSA9IHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5nZXRTdG9yYWdlQ2FjaGVLZXkoc3RhdGVUeXBlLCB0aGlzLmRhdGEpO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdDYWNoZVZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2V0dGluZ0NhY2hlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nQ2FjaGVWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25cclxuICBwdWJsaWMgZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRBZGRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tQWRkQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkQWRkQnV0dG9uRXZlbnROYW1lXShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbVJlc2V0QnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtOiBhbnksIHJvd0luZGV4OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkUmVzZXRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tUmVtb3ZlQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZGF0YUl0ZW0sIHJvd0luZGV4KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbmxpbmUgRWRpdFxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzKGdyaWRDb2xzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgY291bnRlckluZGV4ID0gMDtcclxuICAgIC8vIFRvIGZvcmNlIGVsZW1lbnQgdG8gcmViaW5kIGRhdGFcclxuICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgb2YoW10pLnBpcGUoZGVsYXkoMCksIHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyB8fCB7fTtcclxuICAgICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWREYXRhKSkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHt9O1xyXG4gICAgICAgICAgZ3JpZENvbHMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGMuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGMuZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2MuZmllbGRdID0gbmV3IEZvcm1Db250cm9sKGRbYy5maWVsZF0sIHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuXHJcbiAgICAgICAgICBpZiAoZFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zW1wiSWRcIl0gPSBpdGVtc1tcIklkXCJdIHx8IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBkW1wiSWRcIl0sIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkW1wiSWRcIl0gPSBjb3VudGVySW5kZXgrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkW1wiSWRcIl1dID0gZm9ybUdyb3VwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGaWVsZCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHZhciBrZXkgPSAoZGF0YVtcIklkXCJdIHx8IGRhdGFbXCJJZFwiXSA9PSAwKSA/IGRhdGFbXCJJZFwiXSA6IHJvd0luZGV4O1xyXG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XSB8fCB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKSkge1xyXG4gICAgICBkYXRhLnB1c2godGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tdPy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKSB7XHJcbiAgICBpZiAodGhpcy5oYXNJbmxpbmVFZGl0Q29sdW1uKHRoaXMuY29sdW1ucykpIHtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuY29sdW1ucy5jb25jYXQodGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCB8fCBbXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzICYmIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5saW5lRWRpdENvbHVtbihncmlkQ29scyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdyaWRDb2xzICYmIGdyaWRDb2xzLnNvbWUoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sdW1uRmllbGQ6IFpGaWVsZCwgZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50XHJcbiAgLy8gU291cmNlOiBodHRwczovL3d3dy50ZWxlcmlrLmNvbS9mb3J1bXMva2VuZG8tYW5ndWxhci1ncmlkLWJsYW5rLXNwYWNlLWluLXRoZS1lbmQtd2hlbi15b3UtcmVzaXplKHJlZHVjZSktYW55LWNvbHVtblxyXG4gIHB1YmxpYyBhZGp1c3RXaWR0aFVwb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCB0YWJsZVdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtdGFibGVcIilbYG9mZnNldFdpZHRoYF07XHJcbiAgICBjb25zdCBjb250ZW50V2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC1jb250ZW50XCIpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgaWYgKHRhYmxlV2lkdGggPCBjb250ZW50V2lkdGgpIHtcclxuICAgICAgY29uc3QgY3VycmVudExhc3RDb2xXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLWNvbnRlbnQgLmstZ3JpZC10YWJsZSB0ciB0ZDpsYXN0LW9mLXR5cGVcIilbYG9mZnNldFdpZHRoYF07XHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnNbdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDFdLndpZHRoID0gY3VycmVudExhc3RDb2xXaWR0aCArIChjb250ZW50V2lkdGggLSB0YWJsZVdpZHRoKSAtIDEwOyAvLyBhY2NvdW50IGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG9uQ2hhbmdlIEV2ZW50c1xyXG4gIHB1YmxpYyBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcpO1xyXG4gICAgICB0aGlzLnpncmlkLmZpbHRlckNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZUNoYW5nZShldmVudDogUGFnZUNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQucGFnZUNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydENoYW5nZShzb3J0OiBTb3J0RGVzY3JpcHRvcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQuc29ydENoYW5nZShzb3J0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbkNlbGxDaGVja0JveE9uQ2hhbmdlKGV2ZW50OiBhbnksIHJvd0luZGV4OiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5kZXRhaWwuY2hlY2tlZDtcclxuICAgIGNvbnN0IGdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgZ0RhdGFbcm93SW5kZXhdW2NvbHVtbi5WYWx1ZV0gPSBpc0NoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGNvbW1hbmQgaGFuZGxlclxyXG4gIHB1YmxpYyBhZGRIYW5kbGVyKHsgc2VuZGVyIH0pIHtcclxuICAgIHRoaXMuaXNOZXcgPSB0cnVlO1xyXG5cclxuICAgIC8vIGNsb3NlIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuXHJcbiAgICAvLyBsb29wIGFsbCBjb2x1bW4gdG8gZ2V0IHZhbGlkYXRpb24gYW5kIGNyZWF0ZSBmb3JtIGNvbnRyb2xcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICBpZiAoY29sLlR5cGUgPT09ICd6dGV4dGVkaXRvcicpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlc19UZXh0RWRpdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIGFkZCB0byBncmlkIHJvd1xyXG4gICAgc2VuZGVyLmFkZFJvdyh0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBmb3JtR3JvdXAsIGlzTmV3IH0pOiB2b2lkIHtcclxuICAgIC8vIEdldCB0aGUgZXhpc3RpbmcgZGF0YSBmcm9tIHRoZSBncmlkXHJcbiAgICBjb25zdCBncmlkRXhpc3RpbmdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkXHJcbiAgICBpZiAoZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIC8vIENoZWNrIGZvciBhIHVuaXF1ZSBrZXkgZmllbGRcclxuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5kYXRhWydVbmlxdWVLZXknXTtcclxuICAgICAgaWYgKHVuaXF1ZUtleSkge1xyXG4gICAgICAgIC8vIEdldCB0aGUgdW5pcXVlIGtleSB2YWx1ZSBmcm9tIHRoZSBmb3JtXHJcbiAgICAgICAgY29uc3QgZm9ybVVuaXF1ZUtleVZhbHVlID0gZm9ybUdyb3VwLnZhbHVlW3VuaXF1ZUtleV07XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIHZhbHVlXHJcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSBncmlkRXhpc3RpbmdEYXRhLnNvbWUoZGF0YSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAvLyBJZiBlZGl0aW5nIGFuIGV4aXN0aW5nIHJvdywgc2tpcCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgICFpc05ldyAmJlxyXG4gICAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBncmlkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSA9PT0gZm9ybVVuaXF1ZUtleVZhbHVlICYmXHJcbiAgICAgICAgICAgIC8vIFNraXAgY2hlY2tpbmcgYWdhaW5zdCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSAhPT0gZ3JpZEV4aXN0aW5nRGF0YVtyb3dJbmRleF1bdW5pcXVlS2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWUsIHNob3cgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIHdpdGhvdXQgc2F2aW5nXHJcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdFcnJvciBvY2N1cjogRHVwbGljYXRlZCB1bmlxdWUgZmllbGQgZW50cnkuJywgJ3RvcCcsIHRydWUsIDMwMDAsICdkYW5nZXInKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGlzIHZhbGlkIGFuZCB0aGVyZSBhcmUgbm8gZHVwbGljYXRlcywgc2F2ZSB0aGUgZGF0YVxyXG4gICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAvLyBBZGQgYSBuZXcgcm93IHRvIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhLnB1c2goZm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBVcGRhdGUgYW4gZXhpc3Rpbmcgcm93IGluIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XSA9IGZvcm1Hcm91cC52YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBncmlkIGRhdGEgYW5kIGNsb3NlIHRoZSByb3cgZWRpdG9yXHJcbiAgICAgIHRoaXMuc2V0RGF0YShncmlkRXhpc3RpbmdEYXRhKTtcclxuICAgICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCB9KSB7XHJcbiAgICAvLyBjYW5jZWwgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0SGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGRhdGFJdGVtIH0pIHtcclxuICAgIC8vIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcm93IGJlaW5nIGVkaXRlZCBpcyBub3QgYSBuZXcgcm93XHJcbiAgICB0aGlzLmlzTmV3ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gQ2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbCwgYXBwZW5kIGN1cnJlbnQgcm93IHZhbHVlXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXNfVGV4dEVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKGRhdGFJdGVtW2NvbC5WYWx1ZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGZvcm0gZ3JvdXAgb24gdGhlIHJvdyBiZWluZyBlZGl0ZWRcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSByb3dJbmRleDtcclxuICAgIHNlbmRlci5lZGl0Um93KHJvd0luZGV4LCB0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlSGFuZGxlcih7IHNlbmRlciwgZGF0YUl0ZW0gfSkge1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KGRhdGFJdGVtLCBnRGF0YSwgdGhpcy5kYXRhWydVbmlxdWVLZXknXSk7XHJcbiAgICBnRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgZ3JpZFxyXG4gICAgdGhpcy5zZXREYXRhKGdEYXRhKTtcclxuXHJcbiAgICBzZW5kZXIuY2FuY2VsQ2VsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZUVkaXRvcihncmlkLCByb3dJbmRleCA9IHRoaXMuZWRpdGVkUm93SW5kZXgpIHtcclxuICAgIGdyaWQuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtSW5kZXgoaXRlbTogYW55LCBkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2lkeF1ba2V5XSA9PT0gaXRlbVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIEZpbHRlclxyXG4gIHByaXZhdGUgc2V0dXBGaWx0ZXJGZWF0dXJlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkRmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5hZHZmaWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIGNvbnN0IGFkdmZvcm0gPSB0aGlzLmFkdmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICAgIGNvbnN0IGFkdmNvbnRyb2xzID0gYWR2Zm9ybS5jb250cm9scztcclxuICAgICAgZm9yIChjb25zdCBjIG9mIE9iamVjdC5rZXlzKGFkdmNvbnRyb2xzKSkge1xyXG4gICAgICAgIGNvbnRyb2xzW2NdID0gYWR2Y29udHJvbHNbY107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkZpbHRlclNlYXJjaCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1maWx0ZXJzZWFyY2hcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gsXHJcbiAgICAgICAgZGF0YTogeyBmb3JtY29udHJvbHM6IGNvbnRyb2xzIH0sXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMgPSBbXTtcclxuICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICAgIGlmIChjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSkgfHwgWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuYWR2ZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICAgIGtleTogZmllbGQuVmFsdWVFeHByIHx8IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgICAgICBvcHM6IHRoaXMubWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZCksXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdCgpIHtcclxuICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuZmlsdGVyR3JvdXApO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRmlsdGVyRGF0YShncm91cDogWkdyb3VwKSB7XHJcbiAgICBjb25zdCBmb3JtID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcbiAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShjb250cm9sTmFtZSwgbnVsbCwgZ3JvdXAsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goKSB7XHJcbiAgICB0aGlzLmlzU2hvd0FkdkZpbHRlciA9ICF0aGlzLmlzU2hvd0FkdkZpbHRlcjtcclxuICAgIGlmICghdGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQ6IFpGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5UeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcIm51bWVyaWNcIjpcclxuICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgY2FzZSBcImVtYWlsXCI6XHJcbiAgICAgIGNhc2UgXCJwYXNzd29yZFwiOlxyXG4gICAgICBjYXNlIFwidGVsXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XHJcbiAgICAgIGNhc2UgXCJ1cmxcIjpcclxuICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICAgIGlmICghZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb250YWluc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI9PVwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIGNvbW1vbiBzZXR0aW5nIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldCBzZXRHcmlkVGl0bGUobmV3VGl0bGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSBuZXdUaXRsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2V0R3JpZFN0YXRlKHN0YXRlOiBTdGF0ZSkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0R3JpZFRvRmlyc3RQYWdlKCkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcCA9IDA7XHJcbiAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwID0gMDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPCEtLVxyXG48ZGl2IHN0eWxlPVwibWFyZ2luOiAxMHB4XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgay1mb3JtXCI+XHJcbiAgICAgICAgICA8ZmllbGRzZXQ+XHJcbiAgICAgICAgICAgIDxsZWdlbmQ+QmluZGluZyB0eXBlczwvbGVnZW5kPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5CaW5kIHRoZSBkYXRhIHRvOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImFycmF5XCIgdmFsdWU9XCJhcnJheVwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJhcnJheVwiPkFycmF5IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJncmlkRGF0YVJlc3VsdFwiIHZhbHVlPVwiZ3JpZERhdGFSZXN1bHRcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiZ3JpZERhdGFSZXN1bHRcIj5HcmlkRGF0YVJlc3VsdCBvYmplY3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXN5bmNcIiB2YWx1ZT1cImFzeW5jXCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFzeW5jXCI+QXN5bmNocm9ub3VzIHNvdXJjZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImRhdGEuVGl0bGVcIiBjbGFzcz1cImdyaWRUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIDxzcGFuPnt7IGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxrZW5kby1wb3BvdmVyICNncmlkUG9wT3ZlciBbcG9zaXRpb25dPVwiZGF0YS5Qb3BPdmVyUG9zaXRpb24gfHwgJ2JvdHRvbSdcIiBbdGVtcGxhdGVEYXRhXT1cImdldENvbnRleHREYXRhLmJpbmQodGhpcylcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlclRpdGxlVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLlRpdGxlU3R5bGVcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5UaXRsZVwiIFtpbm5lckhUTUxdPVwiZGF0YS5UaXRsZVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyQm9keVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLkJvZHlTdHlsZVwiIGNsYXNzPVwicG9wb3ZlcmJvZHlcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5Cb2R5XCIgW2lubmVySFRNTF09XCJkYXRhLkJvZHkgfCBodG1sU2FuaXRpemVcIiBbbmdDbGFzc109XCJkYXRhLkJvZHlDbGFzc1wiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3Zlci5jYWxsKHRoaXMsICRldmVudClcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1wb3BvdmVyPlxyXG5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcCBzaG93T249XCJub25lXCIgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIGZpbHRlcj1cIi5rLWdyaWQgdGRcIiAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPGRpdiBrZW5kb1BvcG92ZXJDb250YWluZXIgW3BvcG92ZXJdPVwiZ3JpZFBvcE92ZXJcIiBmaWx0ZXI9XCJkaXYuZ3JpZENlbGwud2l0aFBvcG92ZXJJbkdyaWRcIiBzaG93T249XCJub25lXCIga2VuZG9Qb3BvdmVyQ29udGFpbmVyICNwb3BvdmVyY29udGFpbmVyPVwia2VuZG9Qb3BvdmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxrZW5kby1ncmlkIFt6Z3JpZGJpbmRpbmddPVwie2RhdGE6IGRhdGEsIGdyb3VwOiBncm91cCwgcGFyYW1zOiBwYXJhbXMsIGdyaWRTdWJqZWN0OiBncmlkU3ViamVjdCwgZ3JpZFNldHRpbmc6IGdyaWRTZXR0aW5nfVwiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIiBjbGFzcz1cImRlc2t0b3AtZ3JpZCBlMXRhZy1zdHlsZTJcIlxyXG4gICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJkYXRhLnNjcm9sbEFibGUgPT09IGZhbHNlID8gJ25vbmUnIDogJ3Njcm9sbGFibGUnXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGVuLXBhZ2VyXT1cIiFwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUudGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtza2lwXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwXCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNvcnRcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwie2FsbG93VW5zb3J0OiB0cnVlLG1vZGU6ICdtdWx0aXBsZSd9XCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJkYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogeyBmaWx0ZXI6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbG9zZSk9XCJlZGl0Q2VsbENsb3NlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGFTdGF0ZUNoYW5nZSk9XCJkYXRhU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9HcmlkU2VsZWN0QnldPVwicm93U2VsZWN0aW9uS2V5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cInJvd1NlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2FuY2VsKT1cImNhbmNlbEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzYXZlKT1cInNhdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChlZGl0KT1cImVkaXRIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoYWRkKT1cImFkZEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2x1bW5SZXNpemUpPVwiYWRqdXN0V2lkdGhVcG9uUmVzaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAoZXhjZWxFeHBvcnQpPVwib25FeGNlbEV4cG9ydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NhbGxiYWNrLmJpbmQodGhpcylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd1JlZnJlc2hCdXR0b24gfHwgZGF0YS5BbGxvd0V4cG9ydCB8fCBkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlIHx8IGRhdGEuVGl0bGUgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IGRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdC1pdGVtXCIgKm5nSWY9XCJncmlkVGl0bGUgfHwgZGF0YS5BbGxvd1JlZnJlc2hCdXR0b24gfHwgZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICA8IS0tIDxmYS1pY29uICpuZ0lmPVwiZGF0YS5JY29uXCIgY2xhc3M9XCJncmlkVGl0bGVJY29uXCIgW2ljb25dPVwiZGF0YS5JY29uXCI+PC9mYS1pY29uPiAtLT5cclxuICAgICAgICAgICAgPGtlbmRvLWxhYmVsIGNsYXNzPVwiZ3JpZFRpdGxlXCIgKm5nSWY9XCJncmlkVGl0bGVcIj57eyBncmlkVGl0bGUgfX08L2tlbmRvLWxhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHRpdGxlPVwiUmVmcmVzaFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9ucyByZWZyZXNoLWJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZWZyZXNoRGF0YSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1ncmlkLWJ1dHRvbiBrLWktcmVmcmVzaC1zbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWxlZnQtaXRlbS1zZWNvbmQtY29udGFpbmVyXCIgKm5nSWY9XCJkYXRhLkFsbG93RXhwb3J0XCIgW2NsYXNzLndpdGgtZ3JpZC10aXRsZV09XCJncmlkVGl0bGUgfHwgZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9ucyBleHBvcnQtYnV0dG9uXCIga2VuZG9HcmlkRXhjZWxDb21tYW5kICpuZ0lmPVwiZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZmlsZS1leGNlbFwiPjwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiZG93bmxvYWRcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4cG9ydC10by1leGNlbC1idXR0b24tdGV4dFwiPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdEb3dubG9hZCBhcyBFeGNlbCcpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHQtaXRlbVwiICpuZ0lmPVwiZ3JpZEJ0biB8fCBkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlIHx8IGdyaWREZWZhdWx0U3RhdGVFeGlzdCB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj48L2FwcC16d29ya2Zsb3didXR0b25zPlxyXG4gICAgICAgICAgICA8YXBwLXpidXR0b25zICpuZ0lmPVwiZ3JpZEJ0biAmJiBncmlkQnRuLlR5cGUgPT09ICd6YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXpidXR0b25zPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwic2F2ZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3RhclwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2F2ZSBTZXR0aW5ncycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwicmVzdG9yZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJzaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3Rhci1vdXRsaW5lXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdSZXN0b3JlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEFkZENvbW1hbmQgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktYWRkXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tQWRkQ29tbWFuZChncm91cClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLWFkZFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZTogJ0FkZCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwiZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktdHJhc2hcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lOiAnUmVzZXQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIiAqbmdJZj1cImRhdGEuR3JpZEZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3JtYWwtZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJmaWx0ZXItZmllbGRzXCIgW2dyb3VwXT1cImZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItYnV0dG9uc1wiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2VhcmNoXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1sYWJlbCBpb24tdGV4dC1jYXBpdGFsaXplXCI+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NlYXJjaCcpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FuY2VsRWRpdCgpXCIgKm5nSWY9XCJkYXRhLklzU2hvd0dyaWRDYW5jZWxGaWx0ZXJCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgW25nQ2xhc3NdPVwiaXNTaG93QWR2RmlsdGVyID8gJ3RvZ2dsZU9uJyA6ICd0b2dnbGVPZmYnXCIgKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzbGlkZXJzLWhcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YXBwLXpmb3JtICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBjbGFzcz1cInRvLXByZWxvYWQtdGhlLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpc1Nob3dBZHZGaWx0ZXJcIiBbQGhpZGVBbmRTaG93QW5pbWF0aW9uXT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1zZXBlcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnQWR2YW5jZWQgU2VhcmNoJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiYWR2ZmlsdGVyLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbiAqbmdJZj1cIiEhZGF0YS5TZWxlY3RPcHRpb25zXCIgW3dpZHRoXT1cIjYwXCIgc2hvd1NlbGVjdEFsbD1cInRydWVcIiBbY29sdW1uTWVudV09XCJ0cnVlXCIgW2xvY2tlZF09XCJjaGVja2JveENvbHVtblBpbm5lZFwiPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIFtzdHlsZV09XCJnZXRHcmlkQ29sdW1uU3R5bGUoKVwiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBbdGl0bGVdPVwiY29sLnRpdGxlXCIgW3dpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5SZXNpemFibGVXaWR0aF09XCJjb2wubWluUmVzaXphYmxlV2lkdGhcIiBbZmlsdGVyXT1cImNvbC5maWx0ZXJcIiBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlKGNvbC5lbmFibGVTb3J0aW5nKVwiIFtoZWFkZXJTdHlsZV09XCJnZXRHcmlkSGVhZGVyU3R5bGUoKVwiIGhlYWRlckNsYXNzPVwiZTF0YWctc3R5bGU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvb3RlclN0eWxlXT1cImdldEdyaWRGb290ZXJTdHlsZSgpXCIgZm9vdGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTlcIiBbaGlkZGVuXT1cImNvbC5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbC5mb3JtYXRcIiBbY2xhc3NdPVwiY29sLkNsYXNzXCIgW2xvY2tlZF09XCJsb2NrZWQoY29sKVwiIGVkaXRvcj1cIm51bWVyaWNcIiBbY29sdW1uTWVudV09XCIhY29sLmRpc2FibGVDb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRvcl09XCJjb2wuZWRpdG9yVHlwZVwiPlxyXG4gICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT0gJ3pkYXRlJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnenRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkYXRlLXJhbmdlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgY2xhc3M9XCJkYXRlLXJhbmdlLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFtkYXRhXT1cImRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2RhdGUtcmFuZ2UtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiY29udGFpbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIEdyaWQgRWRpdCBUZW1wbGF0ZSAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRFZGl0VGVtcGxhdGUgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kIFwiIGxldC1kYXRhSXRlbT1cImRhdGFJdGVtXCIgbGV0LWNvbHVtbj1cImNvbFwiIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIiBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IubnVtZXJpY0lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IuaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiPnt7IGNvbC5OYW1lIH19IGlzIHJlcXVpcmVkLjwvaW9uLWxhYmVsPi0tPlxyXG4gICAgICAgICAgICAgICAgICAtbFxyXG5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDFweCAwO1wiICpuZ0lmPVwiIWNvbC5jbGlja2FibGVJY29ucyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCAhPT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGUoY29sLCBkYXRhSXRlbSlcIiBbYXR0ci5kYXRhLWlkXT1cImRhdGFJdGVtLklkXCIgW2F0dHIuY29sdW1uLW5hbWVdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UG9wT3Zlcihjb2wsICRldmVudClcIiAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi0yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgKm5nSWY9XCJjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT10cnVlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsU3R5bGVDb25kaXRpb25EZWZhdWx0XCIgW3N0eWxlXT1cInNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCIhIWNvbC5uYXZpZ2F0ZVRvXCIgKGNsaWNrKT1cIm9uTmF2aWdhdGVUbygkZXZlbnQsIGNvbCwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwibGlnaHRcIiBzaXplPVwic21hbGxcIj5cclxuICAgICAgICAgICAge3sgY29sLkNsaWNrYWJsZUljb25zIH19XHJcbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKSAmJiAhaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgJiYgIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZGF0YUl0ZW0sIGNvbClcIiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGVGb3JJbmxpbmVFZGl0KGNvbCwgZGF0YUl0ZW0sIHJvd0luZGV4KVwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemlucHV0LWNvbnRhaW5lciBbZGF0YV09XCJnZXRJbmxpbmVGaWVsZChjb2wuZmllbGQpXCIgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZ2V0SW5saW5lRm9ybShkYXRhSXRlbSwgcm93SW5kZXgpXCIgW2NvbnRhaW5lckZpZWxkXT1cImNvbnRhaW5lckZpZWxkXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTZcIj5cclxuICAgICAgICAgICAgICA8L2FwcC16aW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4O1wiICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbC5jbGlja2FibGVJY29uc1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImljb24uQ2xhc3MgPyBpY29uLkNsYXNzIDogJydcIiAqbmdJZj1cIiEhaWNvbiAmJiAoISFkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAmJiAhIWljb24pXHJcbiAgICAgICAgICAgICAgPyBkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAhPT0gaWNvbi5XRlNfU3RhdHVzQ29kZVxyXG4gICAgICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBkaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudCwgaWNvbiwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e2ljb24uTmFtZSB8fCBkYXRhSXRlbVtjb2wuZmllbGRdfX0gPGZhLWljb24gW2ljb25dPVwiaWNvbi5JY29uXCIgc3R5bGU9XCJwYWRkaW5nOiA0cHggNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc2FibGVkQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSA8c3Ryb25nPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX08L3N0cm9uZz4gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ7e2RhdGFJdGVtLkRpc2NvbnRpbnVlZCA/ICdkaXNjb250aW51ZWQnIDogJ2FjdGl2ZSd9fVwiPlxyXG4gICAgICAgICAgICAgIHt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gXCJkaXNjb250aW51ZWRcIiA6IFwiYWN0aXZlXCJ9fVxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCIgKm5nSWY9XCJkYXRhLkVuYWJsZUFnZ3JlZ2F0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiIGNsYXNzPVwiZTF0YWctc3R5bGU3XCI+XHJcbiAgICAgICAgICAgICAge3tjb2wuYWdncmVnYXRlVHlwZX19XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi4yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiIHdpZHRoPVwiMTgwXCIgW2NvbHVtbk1lbnVdPVwiZmFsc2VcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIiBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFNhdmVDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IGlzTmV3ID8gJ1NhdmUnIDogJ1VwZGF0ZScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZCBbcHJpbWFyeV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnRGlzY2FyZCBjaGFuZ2VzJyA6ICdDYW5jZWwnIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZEVkaXRDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IFwiRWRpdFwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFJlbW92ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZW1vdmVDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCIgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tUmVtb3ZlQ29tbWFuZChkYXRhSXRlbSwgcm93SW5kZXgpXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIj5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtZXhjZWwgZmlsZU5hbWU9XCJFeHBvcnQueGxzeFwiIFtmZXRjaERhdGFdPVwiYWxsUmVzdWx0c1wiPjwva2VuZG8tZ3JpZC1leGNlbD5cclxuICAgICAgPC9rZW5kby1ncmlkPlxyXG4gICAgICA8YXBwLWNvbnRleHQtbWVudSBbZGF0YV09XCJkYXRhXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiICNkYXRhaXRlbWNvbnRleHRtZW51PjwvYXBwLWNvbnRleHQtbWVudT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gZm9yIERFQyBhdXRvIHNjcm9sbGluZyAtLT5cclxuICA8ZGl2IGlkPVwiZW5kLW9mLWdyaWRcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=
1156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR3JGLE9BQU8sRUFFRyxNQUFNLEVBQWMsZ0JBQWdCLEVBQzhCLFNBQVMsRUFDcEYsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUMsRUFBRTtvQkFDdEMsT0FBTyxVQUFVLENBQUM7aUJBQ25CO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxHQUFHLENBQUM7U0FDZDtJQUNILENBQUM7SUFDRCxZQUFZO0lBRVosc0NBQXNDO0lBQ3RDLElBQVcsWUFBWSxDQUFDLFFBQWdCO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFlBQVksQ0FBQyxLQUFZO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDOzsyR0E1eENVLGNBQWM7K0ZBQWQsY0FBYyw2RkFDZCxnQkFBZ0IsbUZBQ2hCLHlCQUF5QixxRkM3RHRDLHNvM0JBOFlBLHk2dkNEeFZjO1FBQ1YsNEJBQTRCO0tBQzdCOzJGQUdVLGNBQWM7a0JBVDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUdUO3dCQUNWLDRCQUE0QjtxQkFDN0I7NmZBSW1DLFVBQVU7c0JBQTdDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUM2QixnQkFBZ0I7c0JBQXZFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWxheSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRXhjZWxFeHBvcnREYXRhIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcclxuaW1wb3J0IHsgR3JpZEl0ZW0sIFNlbGVjdGFibGVTZXR0aW5ncywgU2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcclxuaW1wb3J0IHsgU29ydERlc2NyaXB0b3IsIFN0YXRlLCBwcm9jZXNzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5XCI7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10b29sdGlwJztcclxuaW1wb3J0IHsgR3JpZERhdGFSZXN1bHQsIERhdGFTdGF0ZUNoYW5nZUV2ZW50LCBQYWdlQ2hhbmdlRXZlbnQsIENlbGxDbGlja0V2ZW50LCBHcmlkQ29tcG9uZW50LCBSb3dBcmdzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWRcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRGF0YUxpc3RpbmdGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGhpZGVBbmRTaG93VmVydGljYWxBbmltYXRpb24gfSBmcm9tIFwiLi4vYW5pbWF0aW9ucy9jb21wb25lbnQtYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb25zdGFudCB9IGZyb20gXCIuLi9jb25zdGFudHMvY29uc3RhbnRcIjtcclxuaW1wb3J0IHsgTWFpblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvbWFpbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vZGlyZWN0aXZlcy9lbGVtZW50Y29udGFpbmVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBaR3JpZEJpbmRpbmdEaXJlY3RpdmUgfSBmcm9tIFwiLi96Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBaR3JpZFNlcnZpY2UgfSBmcm9tIFwiLi96Z3JpZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgV2ViQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpDb3JlU2VydmljZSwgU3RvcmFnZVNlc3Npb25TZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgWkdyaWRQb3N0QXBpUGFyYW1zLCBaR3JpZFNldHRpbmdzLCBaR3JpZEN1c3RvbUNvbHVtbiwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBTdGF0ZVR5cGUsIFN0YXRlU2V0dGluZ0luZm8sIEF1dGhTZXJ2aWNlLCBTdGF0ZVNldHRpbmdTZXJ2aWNlXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgWkdyaWQge1xyXG4gIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zO1xyXG4gIHN0YXRlOiBTdGF0ZTtcclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBwYWdpbmF0aW9uQXBpUG9zdFVybDogc3RyaW5nO1xyXG4gIGRhdGE6IFpGaWVsZDtcclxuICBncm91cDogWkdyb3VwO1xyXG4gIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwczogRm9ybUdyb3VwO1xyXG4gIGdldEdyaWREYXRhOiAoKSA9PiBhbnlbXTtcclxuICBnZXREYXRhOiAoKSA9PiB2b2lkO1xyXG4gIGNsZWFyRGF0YTogKCkgPT4gdm9pZDtcclxuICBzZXREYXRhOiAoZGF0YTogYW55KSA9PiB2b2lkO1xyXG4gIHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gdm9pZDtcclxuICAkc2V0Q29sdW1uczogKGNvbHVtbkZpZWxkc05hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgZ2V0Rm9ybUNvbnRyb2xEYXRhKCk6IGFueVtdO1xyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpncmlkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96Z3JpZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96Z3JpZC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFpncmlkQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChUb29sdGlwRGlyZWN0aXZlKSBwdWJsaWMgdG9vbHRpcERpcjogVG9vbHRpcERpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGVsZW1lbnRDb250YWluZXIhOiBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlO1xyXG4gIC8vIEBWaWV3Q2hpbGQoWkdyaWRCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuXHJcbiAgemdyaWQ6IGFueSA9IG51bGw7XHJcbiAgb2F1dGhVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgZ3JpZERhdGE6IEdyaWREYXRhUmVzdWx0O1xyXG4gIHNlbGVjdGFibGVTZXR0aW5nczogU2VsZWN0YWJsZVNldHRpbmdzO1xyXG4gIHJvd1NlbGVjdGlvbjogc3RyaW5nW10gPSBbXTtcclxuICBteVNlbGVjdGlvbiA9IG5ldyBNYXAoKTtcclxuICBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwOyAvLyBmb3Iga2VuZG8gZ3JpZCBidWlsdC1pblxyXG4gIHB1YmxpYyBwcmV2aW91c05leHQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGdyaWRCdG47XHJcbiAgcHVibGljIHBhZ2VhYmxlOiBhbnkgPSBmYWxzZTtcclxuICBwdWJsaWMgZmlsdGVyR3JvdXAgPSBuZXcgWkdyb3VwKCk7XHJcbiAgcHVibGljIGFkdmZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBpc1Nob3dBZHZGaWx0ZXIgPSBmYWxzZTtcclxuICBwdWJsaWMgZ3JpZFRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICBwcml2YXRlIGlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNoZWNrYm94Q29sdW1uUGlubmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcyA9IHtcclxuICAgIHJlZmVySWQ6IG51bGwsXHJcbiAgICBwYWdlTm86IDAsXHJcbiAgICBwYWdlU2l6ZTogMjAsXHJcbiAgICBzb3J0Q29sdW1uTmFtZTogXCJcIixcclxuICAgIHNvcnRPcmRlcjogXCJcIixcclxuICAgIHNvcnRDb2x1bW5OYW1lczogW10sXHJcbiAgICBzb3J0T3JkZXJzOiBbXSxcclxuICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICBwYXJhbWV0ZXJzOiBcIlwiLFxyXG4gICAgZmlsdGVyczogXCJcIixcclxuICAgIGNvbHVtbnM6IFwiXCIsXHJcbiAgICBncmFudFR5cGU6IDRcclxuICB9O1xyXG5cclxuICBncmlkU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZDogYW55W107XHJcbiAgZWRpdGFibGVDb2x1bW5zOiBhbnlbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwYWdlU2l6ZXM6IGJvb2xlYW4gfCBhbnlbXTtcclxuICBncmlkU3RvcmFnZUtleTogc3RyaW5nO1xyXG4gIGdyaWREZWZhdWx0U3RhdGVFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTmV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGVkaXRlZFJvd0luZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGdyaWRTZXR0aW5nOiBaR3JpZFNldHRpbmdzO1xyXG4gIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYWluU2VydmljZTogTWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBaR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0YXRlU2V0dGluZ1NlcnZpY2U6IFN0YXRlU2V0dGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuemNvcmVTZXJ2aWNlLmdldEVudmlyb25tZW50KCk7XHJcbiAgICB0aGlzLm9hdXRoVXJsID0gdGhpcy5lbnZpcm9ubWVudC5lMU9hdXRoVXJsICsgXCIvXCI7XHJcbiAgICB0aGlzLmFsbFJlc3VsdHMgPSB0aGlzLmFsbFJlc3VsdHMuYmluZCh0aGlzKTtcclxuICAgIHRoaXMucmVmcmVzaERhdGEgPSB0aGlzLnJlZnJlc2hEYXRhLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLmNsZWFyRGF0YSA9IHRoaXMuY2xlYXJEYXRhLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLnNldHVwSW5uZXJGaWVsZCgpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlckZlYXR1cmUoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nID0geyBncmlkU3RhdGU6IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0dXBHcmlkU2V0dGluZyh0aGlzLmRhdGEpIH07XHJcblxyXG4gICAgdGhpcy5zZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCk7XHJcblxyXG4gICAgc3VwZXIudHJhbnNsYXRlVG9vbEJhckl0ZW1zKCkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWRDYWxsYmFjayh0aGlzLmdyb3VwKTtcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIGNvbnN0IGlzQmFja05hdmlnYXRlZCA9IChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiKSA9PT0gJ3RydWUnKTtcclxuICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuXHJcbiAgICBpZiAoaXNCYWNrTmF2aWdhdGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcIm5hdmlnYXRlZFJlbG9hZEdyaWRcIiwgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBTdGF0ZSAocGFnaW5hdGlvbiwgc29ydGFibGUsIGZpbHRlciwgb3JkZXJpbmcpXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZGF0YVN0YXRlQ2hhbmdlKHN0YXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydGFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrZWQoY29sU2V0dGluZzogYW55KSB7XHJcbiAgICBpZiAoY29sU2V0dGluZ1sncGlubmVkTGVmdCddID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwdWJsaWMgb25FeGNlbEV4cG9ydChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbFJlcXVpcmVkRm9ybWF0ID0gW107XHJcblxyXG4gICAgLy8gQ29sbGVjdCBjb2x1bW5zIHRoYXQgaGF2ZSBhIHNwZWNpZmljIEV4Y2VsIGNlbGwgZm9ybWF0XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBpZiAoY29sLkV4Y2VsQ2VsbEZvcm1hdCkge1xyXG4gICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LnB1c2goeyBjb2xOYW1lOiBjb2wuRGlzcGxheU5hbWUgPz8gY29sLk5hbWUsIGNlbGxGb3JtYXQ6IGNvbC5FeGNlbENlbGxGb3JtYXQsIGNvbEluZGV4OiBudWxsIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sUmVxdWlyZWRGb3JtYXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLndvcmtib29rLnNoZWV0c1swXS5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgaWYgKHJvdy50eXBlID09PSAnaGVhZGVyJykge1xyXG4gICAgICAgIC8vIENoZWNrIGhlYWRlciBjZWxscyB0byBmaW5kIG1hdGNoaW5nIGNvbHVtbiBuYW1lcyBhbmQgc3RvcmUgdGhlaXIgaW5kZXhcclxuICAgICAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNlbGwudmFsdWUgPT09IGNvbC5jb2xOYW1lKSB7XHJcbiAgICAgICAgICAgICAgY29sLmNvbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHJvdy50eXBlID09PSAnZGF0YScpIHtcclxuICAgICAgICAvLyBBcHBseSB0aGUgZm9ybWF0IHRvIGNlbGxzIGluIGRhdGEgcm93cyBpZiB0aGVpciBpbmRleCBtYXRjaGVzXHJcbiAgICAgICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb2xSZXF1aXJlZEZvcm1hdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gY29sLmNvbEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgY2VsbC5mb3JtYXQgPSBjb2wuY2VsbEZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgQ29sdW1uc1xyXG4gIHB1YmxpYyBpc1NlbGVjdE9wdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBjaGVja2JveE9ubHk6IGZhbHNlLFxyXG4gICAgICAgIG1vZGU6ICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucz8udG9Mb3dlckNhc2UoKSA9PT0gXCJtdWx0aXBsZVwiKSA/IFwibXVsdGlwbGVcIiA6IFwic2luZ2xlXCJcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyAkc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwW2NvbHVtbk5hbWVdID0gdGhpcy53cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5zKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1uTGlzdDogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICByZXR1cm4gb2YoY29sdW1uTGlzdC5tYXAoYyA9PiB7XHJcbiAgICAgIGNvbnN0IGlzSGlkZGVuOiBib29sZWFuID0gYy5IaWRkZW47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgTmFtZTogYy5OYW1lLFxyXG4gICAgICAgIFZhbHVlOiBjLkNvZGUsXHJcbiAgICAgICAgVHlwZTogYy5UeXBlLFxyXG4gICAgICAgIGdyaWRDb2xWaXNpYmxlOiAhaXNIaWRkZW4sXHJcbiAgICAgICAgRW5hYmxlR3JpZFZhbHVlOiBjLkVuYWJsZUdyaWRWYWx1ZSB8fCBmYWxzZSxcclxuICAgICAgICB3aWR0aDogMTAwICsgYy5OYW1lLmxlbmd0aCAqIDQsXHJcbiAgICAgICAgZW5hYmxlRmlsdGVyaW5nOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgICAgRGl2Q2xhc3M6IFwiY29sLXhzLTEyIGNvbC1zbS02XCIsXHJcbiAgICAgICAgSXNFZGl0YWJsZUluR3JpZDogYy5FZGl0YWJsZVxyXG4gICAgICB9O1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUdyaWRDb2x1bW5zKGdyaWRTZXR0aW5nPzogWkdyaWRTZXR0aW5ncyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBjb2x1bW5GaWVsZHMkOiBPYnNlcnZhYmxlPGFueT4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgIHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICkgfHwgb2YoW10pO1xyXG5cclxuICAgIGlmICghdGhpcy5kYXRhLkNvbHVtbkZpZWxkcykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQvRW1wdHkgZ3JpZCgnICsgdGhpcy5kYXRhLk5hbWUgKyAnKSBjb2x1bW5GaWVsZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29sdW1uRmllbGRzJCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnRmFpbCB0byBnZW5lcmF0ZSBncmlkIGNvbHVtbiBmaWVsZHMuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uRmllbGRzJC5waXBlKFxyXG4gICAgICB0YXAoY29sdW1uRmllbGQgPT4ge1xyXG4gICAgICAgIGlmICghY29sdW1uRmllbGQpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGRhdGEgdG8gZ2VuZXJhdGUgY29sdW1uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICAgICAgICBjb25zdCBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMgPSBbXTtcclxuXHJcbiAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zKHtcclxuICAgICAgICAgICAgY29sdW1uRmllbGQ6IGNvbHVtbkZpZWxkLFxyXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgICAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uczogZ3JpZFNldHRpbmc/LmNvbHVtbkNvbmZpZ3VyYXRpb25zLFxyXG4gICAgICAgICAgICBnZW5lcmF0ZUhpZGRlbkNvbHVtbnM6IGdlbmVyYXRlSGlkZGVuQ29sdW1ucyxcclxuICAgICAgICAgICAgZ3JpZEF0dHJpYnV0ZXM6IHRoaXMuZGF0YVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKGdlbmVyYXRlSGlkZGVuQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQgPSBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMubWFwKGZpZWxkID0+ICh7IGZpZWxkOiBmaWVsZCwgVmlzaWJsZTogdHJ1ZSwgSXNSZXF1aXJlZDogZmFsc2UsIFZhbHVlOiBmaWVsZCB9KSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkLnB1c2goZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gc3VwZXIudHJhbnNsYXRlQ29sdW1uSGVhZGVyKHRoaXMuY29sdW1ucyk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbk5hbWUoZ3JpZENlbGxSZXBsYWNlVmFsdWU6IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGdyaWRDZWxsUmVwbGFjZVZhbHVlICYmIGdyaWRDZWxsUmVwbGFjZVZhbHVlW3ZhbHVlXSkge1xyXG4gICAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRGb250QXdlc29tZShncmlkQ2VsbFJlcGxhY2VWYWx1ZVt2YWx1ZV0sIHRoaXMuZm9udEF3ZVNvbWVTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzdHlsaW5nXHJcbiAgcHVibGljIGNlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoIWNvbmRpdGlvblJlc3VsdCkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ1ZhbHVlJ10gPT0gY29sVmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmRpdGlvblJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDZWxsU3R5bGVDb25kaXRpb24oY29sLCBjb2xWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAoY29sWydDZWxsU3R5bGVDb25kaXRpb24nXSkge1xyXG4gICAgICBjb25zdCBjb25kaXRpb25IaWdobGlnaHRjb2w6IFtdID0gY29sWydDZWxsU3R5bGVDb25kaXRpb24nXTtcclxuICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9ICcnO1xyXG5cclxuICAgICAgY29uZGl0aW9uSGlnaGxpZ2h0Y29sLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGFbJ1ZhbHVlJ10gPT0gY29sVmFsdWUpIHtcclxuICAgICAgICAgIGlmIChkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSAnYmFja2dyb3VuZC1jb2xvcjonICsgZGF0YVsnQmFja2dyb3VuZENvbG9yJ10gKyAnOyc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFbJ0NvbG9yJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ICs9ICdjb2xvcjonICsgZGF0YVsnQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnU3R5bGVFeHByZXNzaW9uJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ICs9IGRhdGFbJ1N0eWxlRXhwcmVzc2lvbiddO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE9uY2VsbCBjbGljayBoYW5kbGluZ1xyXG4gIC8vIDEuIGluQ2VsbCBFZGl0XHJcbiAgLy8gMi4gT25JdGVtQ2xpY2tcclxuICAvLyAzLiBOYXZpZ2F0ZSB0byBGb3JtIFBhZ2VcclxuICAvLyA0LiBTaG93IEZvcm0gUGFnZSBpbiB0aGUgc2FtZSBwYWdlIChERUMgYW5kIERyYXdlcilcclxuICBwdWJsaWMgY2VsbENsaWNrSGFuZGxlcihldmVudDogQ2VsbENsaWNrRXZlbnQpIHtcclxuICAgIC8vIFJpZ2h0IGNsaWNrIGhhbmRsZXJcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImNvbnRleHRtZW51XCIpIHtcclxuICAgICAgdGhpcy5kYXRhSXRlbUNvbnRleHRNZW51LnNob3dDb250ZXh0TWVudU1hbnVhbGx5KGV2ZW50LCBldmVudC5kYXRhSXRlbSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciA9IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA/IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA6IGZhbHNlO1xyXG4gICAgY29uc3QgaXNDb21tYW5kQ29sdW1uID0gZXZlbnQuY29sdW1uLmNvbnN0cnVjdG9yLm5hbWUgPT0gJ0NvbW1hbmRDb2x1bW5Db21wb25lbnQnID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnRvb2x0aXBEaXIpIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyICYmICFpc0NvbW1hbmRDb2x1bW4pIHtcclxuICAgICAgY29uc3QgaW5DZWxsRWRpdGFibGUgPSB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgPyB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgOiBmYWxzZTtcclxuICAgICAgaWYgKGluQ2VsbEVkaXRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+IGV2ZW50LnNlbmRlci5lZGl0Q2VsbChldmVudC5yb3dJbmRleCwgZXZlbnQuY29sdW1uSW5kZXgsIHRoaXMuY3JlYXRlRm9ybUdyb3VwKGV2ZW50LmRhdGFJdGVtLCBzLmZpZWxkKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNlbGxDbGljayBldmVudDogXCIsIGV2ZW50KTtcclxuICAgICAgICAvL3RoaXMuY2FjaGVTZXJ2aWNlLnNldCgnbGFzdENsaWNrZWRHcmlkUmVjb3JkJywgZXZlbnQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhLk9uSXRlbUNsaWNrKSB7XHJcbiAgICAgICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljayk7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gc3RvcmUgY2xpY2tlZCBpZCBhbmQgYWN0aW9uIGFzIGVkaXQgdG8gdGhlIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgICAgLy8gT25JdGVtQ2xpY2ssIHByb2plY3QgaGF2ZSB0byBzZXQgdGhlbXNlbGYuXHJcbiAgICAgICAgICB0aGlzLm1haW5TZXJ2aWNlLnNldE5hdmlnYXRpb25QYXJhbXMoW2V2ZW50LmRhdGFJdGVtLklkLCAnZWRpdCddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdE1vZGVsKGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRDZWxsQ2xvc2VIYW5kbGVyKGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBmb3JtR3JvdXAsIGRhdGFJdGVtIH0gPSBhcmdzO1xyXG4gICAgaWYgKCFmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhSXRlbSwgeyBbcy5maWVsZF06IGZvcm1Hcm91cC52YWx1ZVtzLmZpZWxkXSB9KSk7XHJcbiAgICAgIC8vIHRoaXMubXlTZWxlY3Rpb24ubWFwKHMgPT4gKHMuSWQgPT09IGRhdGFJdGVtLklkKSA/IE9iamVjdC5hc3NpZ24ocywgZGF0YUl0ZW0pIDogbnVsbCk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXplIG15U2VsZWN0aW9uIGlmIGl0J3MgdW5kZWZpbmVkXHJcbiAgICAgIGlmICghdGhpcy5teVNlbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMubXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24uZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS5JZCA9PT0gZGF0YUl0ZW0uSWQpIHtcclxuICAgICAgICAgIHRoaXMubXlTZWxlY3Rpb24uc2V0KGtleSwgeyAuLi52YWx1ZSwgLi4uZGF0YUl0ZW0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG8oZXZlbnQ6IGFueSwgY2xpY2tBY3Rpb246IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICAvLyBjb25zdCBuID0gY29sU2V0dGluZy5uYXZpZ2F0ZVRvLnJlcGxhY2UoJy86aWQnLCBjZWxsRGF0YSk7XHJcbiAgICBjb25zdCBuID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGNsaWNrQWN0aW9uLkNsaWNrKTtcclxuICAgIGlmIChuKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogJ3pncmlkLW9uTmF2aWdhdGVUbycsXHJcbiAgICAgICAgdGFyZ2V0OiBjbGlja0FjdGlvbi5DbGljayxcclxuICAgICAgICByb3dEYXRhOiByb3dEYXRhLFxyXG4gICAgICAgIGRhdGE6IGNlbGxEYXRhXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZWRpdE1vZGVsKGRhdGFJdGVtOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRWRpdENsaWNrVVJMKSB7XHJcbiAgICAgIC8vIEVkaXQgaW5jZWxsIGZpZWxkXHJcbiAgICAgIGNvbnN0IGNvbEZpZWxkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuQ29sdW1uRmllbGRzLCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtY2VsbENsaWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRWRpdENsaWNrVVJMLFxyXG4gICAgICAgIGRhdGE6IGRhdGFJdGVtLFxyXG4gICAgICAgIGNvbHVtbkZpZWxkcyQ6IGNvbEZpZWxkc1xyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRhdGFbJ0NvbnRhaW5lckZvcm0nXSkge1xyXG4gICAgICB0aGlzLnNob3dGb3JtUGFnZS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTF0sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIC8vc2tpcExvY2F0aW9uQ2hhbmdlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vLy8gV2hlbiBjbGlja2VkIHJvdXRlIHRvIHBhZ2VcclxuICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkwsIGRhdGFJdGVtLklkLCAnZWRpdCddLCB7XHJcbiAgICAgIC8vICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlXHJcbiAgICAgIC8vfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CdG5DbGljayhldmVudDogYW55LCBjb2xTZXR0aW5nOiBhbnksIHJvd0RhdGE6IGFueSwgY2VsbERhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5vbk5hdmlnYXRlVG8oZXZlbnQsIGNvbFNldHRpbmcsIHJvd0RhdGEsIGNlbGxEYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKGRhdGFJdGVtOiBhbnksIGZpZWxkTmFtZTogYW55KTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgW2ZpZWxkTmFtZV06IGRhdGFJdGVtW2ZpZWxkTmFtZV1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEhlbHBlciBmdW5jdGlvbnNcclxuICBwdWJsaWMgZ2V0Q2xhc3MoZGF0YUl0ZW06IGFueSwgY29sOiBhbnkpIHtcclxuICAgIGxldCBuZ0NsYXNzID0gXCJncmlkQ2VsbCBcIjtcclxuICAgIGlmIChjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJyB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYycpIHtcclxuICAgICAgbmdDbGFzcyArPSBcInJpZ2h0QWxpZ25lZCBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YUl0ZW1bY29sLmZpZWxkICsgJ19DbGFzcyddKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gZGF0YUl0ZW1bY29sLmZpZWxkICsgJ19DbGFzcyddICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5DbGFzcykge1xyXG4gICAgICBuZ0NsYXNzICs9IGNvbC5DbGFzcyArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuUG9wT3ZlckNvbnRlbnQpIHtcclxuICAgICAgbmdDbGFzcyArPSBcIiB3aXRoUG9wb3ZlckluR3JpZFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZ0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1hdChjb2w6IGFueSwgZGVmYXVsdEZvcm1hdD86IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiXCI7XHJcbiAgICBpZiAoY29sLkZvcm1hdE9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3JtYXQgPSBkZWZhdWx0Rm9ybWF0ID8gZGVmYXVsdEZvcm1hdCA6IFwiXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmb3JtYXRBcnIgPSBjb2wuRm9ybWF0T3B0aW9ucy5zcGxpdChcIi5cIilcclxuICAgICAgbGV0IGRwID0gMDtcclxuXHJcbiAgICAgIGlmIChmb3JtYXRBcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGRwID0gZm9ybWF0QXJyWzFdLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRwICE9PSAwKSB7XHJcbiAgICAgICAgZm9ybWF0ID0gXCIxLlwiICsgZHAgKyBcIi1cIiArIGRwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFsbFJlc3VsdHMoKTogT2JzZXJ2YWJsZTxFeGNlbEV4cG9ydERhdGE+IHtcclxuICAgIGNvbnN0IGdyaWRDb250cm9sID0gdGhpcy56Z3JpZCBhcyBaR3JpZDtcclxuICAgIGNvbnN0IGdyaWRDb21wb25lbnQgPSB0aGlzLnpncmlkLmdyaWQgYXMgR3JpZENvbXBvbmVudDtcclxuICAgIGNvbnN0IGRhdGEgPSBncmlkQ29tcG9uZW50LmRhdGEgYXMgR3JpZERhdGFSZXN1bHQ7XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VVUkxGb3JHZW5lcmF0ZURhdGEgPSB0aGlzLmRhdGEuRXhwb3J0RGF0YVJlc291cmNlVVJMID8gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKHRoaXMuZGF0YS5FeHBvcnREYXRhUmVzb3VyY2VVUkwpIDogZ3JpZENvbnRyb2wucGFnaW5hdGlvbkFwaVBvc3RVcmw7XHJcblxyXG4gICAgLy8gTmVlZCB0byBjbG9uZSwgaWYgbm90IHdpbGwgYWZmZWN0IHRoZSBncmlkIHBhcmFtcy5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1zKTtcclxuICAgIHBhcmFtcy5wYWdlTm8gPSAwO1xyXG4gICAgcGFyYW1zLnBhZ2VTaXplID0gZGF0YS50b3RhbDtcclxuXHJcbiAgICBjb25zdCBkYXRlVGltZVJlZ2V4ID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSg/OltUXFxzXVxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsN30pPyg/Olp8W1xcK1xcLV1cXGR7Mn06XFxkezJ9KT8pPyQvO1xyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGNvbnZlcnQgZGF0ZSBzdHJpbmdzIHRvIERhdGUgb2JqZWN0c1xyXG4gICAgY29uc3QgY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyA9IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV3SXRlbSkge1xyXG4gICAgICAgICAgaWYgKG5ld0l0ZW0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ld0l0ZW1ba2V5XTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIGFuZCBtYXRjaGVzIHRoZSBkYXRlVGltZVJlZ2V4IHBhdHRlcm5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgZGF0ZVRpbWVSZWdleC50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIG5ld0l0ZW1ba2V5XSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHJlc291cmNlVVJMRm9yR2VuZXJhdGVEYXRhLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydCBkYXRlIHN0cmluZ3MgdG8gRGF0ZSBvYmplY3RzXHJcbiAgICAgICAgZGF0YS5kYXRhU2V0ID0gY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhkYXRhLmRhdGFTZXQpO1xyXG5cclxuICAgICAgICAvLyBQcmVwYXJlIHRoZSByZXN1bHQgZm9yIEV4Y2VsIGV4cG9ydFxyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRXhjZWxFeHBvcnREYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogcHJvY2VzcyhkYXRhLmRhdGFTZXQsIHt9KS5kYXRhXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb25TZWdtZW50ID0gZXZlbnQudGFyZ2V0LnRyaW0oKS5zcGxpdCgnLicpO1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb24gPSBfZ3JpZE9wdGlvblNlZ21lbnRbMV07XHJcbiAgICBpZiAoX2dyaWRPcHRpb24pIHtcclxuICAgICAgY29uc3QgemdyaWRDb250cm9sID0gZ3JvdXBbX2dyaWRPcHRpb25dIGFzIFpHcmlkO1xyXG4gICAgICBpZiAoemdyaWRDb250cm9sKSB7XHJcbiAgICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIGZpbmQgZ3JpZCB2YWx1ZTogJyArIF9ncmlkT3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ0ludmFsaWQgcmVmcmVzaEdyaWQgZXZlbnQ6ICcsIGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoRGF0YSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRGF0YSgpIHtcclxuICAgIHRoaXMuemdyaWQuY2xlYXJEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1Rvb2x0aXAoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5Jc1Nob3dUb29sVGlwID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGlzQ29tbWFuZENvbHVtbiA9IGZhbHNlO1xyXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT0gJ2stY29tbWFuZC1jZWxsJykge1xyXG4gICAgICAgIGlzQ29tbWFuZENvbHVtbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghaXNDb21tYW5kQ29sdW1uICYmXHJcbiAgICAgIChcclxuICAgICAgICAoKGVsZW1lbnQubm9kZU5hbWUgPT09ICdURCcgfHwgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1RIJykgJiYgZWxlbWVudC5vZmZzZXRXaWR0aCA8IChlbGVtZW50LnNjcm9sbFdpZHRoKSkgfHxcclxuICAgICAgICAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1NQQU4nICYmIGVsZW1lbnQuY2xhc3NMaXN0ICYmIGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA+IDAgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2dyaWQtY2VsbC1kYXRhJykgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoIDwgKGVsZW1lbnQucGFyZW50RWxlbWVudC5zY3JvbGxXaWR0aCkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci50b2dnbGUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dTZWxlY3Rpb25LZXkgPSAoY29udGV4dDogUm93QXJncyk6IGFueSA9PiB7XHJcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgdXNpbmcgZWl0aGVyIHRoaXMuZGF0YS5VbmlxdWVLZXkgb3IgY29udGV4dC5kYXRhSXRlbS5JZC5cclxuICAgIGNvbnN0IGtleSA9ICh0aGlzLmRhdGEuVW5pcXVlS2V5ID8/IGNvbnRleHQuZGF0YUl0ZW0uSWQpOy8vICsgXCIgXCIgKyBjb250ZXh0LmluZGV4O1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVW5pcXVlS2V5ICYmIGNvbnRleHQuZGF0YUl0ZW0uSWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQSB1bmlxdWUgY29sdW1uIGZpZWxkIGlzIHJlcXVpcmVkLiBFbnN1cmUgZWl0aGVyIHRoZSBJZCBjb2x1bW4gaXMgcHJlc2VudCBvciB0aGUgVW5pcXVlS2V5IHByb3BlcnR5IGlzIHNldCBmb3IgemdyaWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBteVNlbGVjdGlvbiBpZiBpdCdzIHVuZGVmaW5lZFxyXG4gICAgaWYgKCF0aGlzLm15U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RvcmUgdGhlIGRhdGEgaXRlbSBpbiB0aGUgbXlTZWxlY3Rpb24gbWFwIHdpdGggdGhlIGdlbmVyYXRlZCBrZXkuXHJcbiAgICB0aGlzLm15U2VsZWN0aW9uLnNldChrZXksIGNvbnRleHQuZGF0YUl0ZW0pO1xyXG5cclxuICAgIC8vIFJldHVybiB0aGUgZ2VuZXJhdGVkIGtleS5cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogYW55IHtcclxuICAgIC8vIE1hcCBlYWNoIGtleSBpbiByb3dTZWxlY3Rpb24gdG8gaXRzIGNvcnJlc3BvbmRpbmcgZGF0YSBpdGVtIGluIHRoZSBteVNlbGVjdGlvbiBtYXAuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZCA9IHRoaXMucm93U2VsZWN0aW9uLm1hcChrZXkgPT4gdGhpcy5teVNlbGVjdGlvbi5nZXQoa2V5KSk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiBzZWxlY3RlZCByZWNvcmRzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGVkUmVjb3JkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgLy8gQ2hlY2sgaWYgbXlTZWxlY3Rpb24gaXMgZGVmaW5lZCBiZWZvcmUgdHJ5aW5nIHRvIGNsZWFyIGl0XHJcbiAgICBpZiAodGhpcy5teVNlbGVjdGlvbikge1xyXG4gICAgICAvLyBDbGVhciB0aGUgbWFwIHRoYXQgc3RvcmVzIHNlbGVjdGVkIGRhdGEgaXRlbXMuXHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wdGlvbmFsbHksIHlvdSBjYW4gaW5pdGlhbGl6ZSBpdCBpZiBpdCdzIHVuZGVmaW5lZFxyXG4gICAgICB0aGlzLm15U2VsZWN0aW9uID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHRoZSBhcnJheSB0aGF0IHRyYWNrcyBzZWxlY3RlZCBrZXlzLlxyXG4gICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy56Z3JpZC5nZXREYXRhQmluZGluZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigndGhpcy56Z3JpZCBpcyB1bmRlZmluZWQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1VzZUxvY2FsRGF0YSgpID8gKHRoaXMuemdyaWQuZGF0YSB8fCB0aGlzLnpncmlkLm9yaWdpbmFsRGF0YSkgOiAodGhpcy56Z3JpZC5ncmlkLmRhdGEgJiYgdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA/IHRoaXMuemdyaWQuZ3JpZC5kYXRhLmRhdGEgOiBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICBpZiAodGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5kYXRhID0gZ0RhdGE7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZUF1dG9BcHBlbmRHcmlkRGF0ZUZpbHRlckNvbCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRlQ29sRm9yRmlsdGVyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZ3JpZC5kYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogZ0RhdGEsXHJcbiAgICAgICAgICB0b3RhbDogZ0RhdGEudG90YWxDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ3pncmlkIGlzIG51bGwgZm9yIHNldERhdGEuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG4gICAgZ3JpZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGNvbC5OYW1lID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogR3JpZEl0ZW0pOiBhbnkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhpdGVtLmRhdGFbJ0lkJ10gfHwgaW5kZXgpO1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VzZUxvY2FsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvL3JldHVybiBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuZGF0YS5SZXNvdXJjZVVSTCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzZXR1cFxyXG4gIHByaXZhdGUgc2V0dXBHcmlkQ29tcG9uZW50QXR0cmlidXRlcygpIHtcclxuICAgIC8vIEdyaWQgZGVmYXVsdCBzZXR0aW5nXHJcbiAgICB0aGlzLmdyaWRUaXRsZSA9IHRoaXMuZGF0YS5UaXRsZTtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlU2l6ZXMgPSBbNSwgMTAsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMF07XHJcbiAgICB0aGlzLnByZXZpb3VzTmV4dCA9IHRoaXMuZGF0YVsnRW5hYmxlUHJldmlvdXNOZXh0QnV0dG9uJ10gfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gW01vYmlsZV0gRGlzYWJsZSBwYWdlIHNpemVzIGlmIFBhZ2VTaXplcyBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSBvciBvbiBhIG1vYmlsZSBzY3JlZW4uXHJcbiAgICBpZiAodGhpcy5kYXRhLlBhZ2VTaXplcyA9PT0gZmFsc2UgfHwgdGhpcy5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemVzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIHBhZ2luYXRpb24gc2V0dGluZ3MuXHJcbiAgICB0aGlzLnBhZ2VhYmxlID0gdGhpcy5kYXRhLnBhZ2VBYmxlICE9IHVuZGVmaW5lZCA/IHRoaXMuZGF0YS5wYWdlQWJsZSA6IHtcclxuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcclxuICAgICAgYnV0dG9uQ291bnQ6IDMsXHJcbiAgICAgIHBhZ2VTaXplczogdGhpcy5wYWdlU2l6ZXMsXHJcbiAgICAgIHByZXZpb3VzTmV4dDogdGhpcy5wcmV2aW91c05leHQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENvbmZpZ3VyZSBncmlkIHNlbGVjdGlvbiBvcHRpb25zIGlmIHNldCBTZWxlY3RPcHRpb25zIGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgRXJyb3I6IGdyaWQoJHt0aGlzLmRhdGEuTmFtZX0pLCB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyBzaG91bGQgYmUgYSBzdHJpbmcgd2l0aCB2YWx1ZSAnc2luZ2xlJyBvciAnbXVsdGlwbGUnLmApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgICAgbW9kZTogdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMudG9Mb3dlckNhc2UoKSA9PT0gJ3NpbmdsZScgPyAnc2luZ2xlJyA6ICdtdWx0aXBsZSdcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQmluZCBjb21wb25lbnQgdG8gZ3JvdXAgdXNpbmcgdGhlIHByb3ZpZGVkIFZhbHVlIHNldCBpbiBmaWVsZCBlbGVtZW50IGF0dHJpYnV0ZS5cclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgdGhpcy5ncm91cFt0aGlzLmRhdGEuVmFsdWUuc2xpY2UoNildID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBTdWJzY3JpcHRpb25Gb3JHcmlkU3ViamVjdCgpIHtcclxuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYW55IGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLlxyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnJvbSBoZXJlIHdpbGwgY2FsbCB6Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZS5cclxuICAgIC8vIFN1YnNjcmliZSB0byBnZXQgZnJvbSBkaXJlY3RpdmUgYW5kIHNldCB0byBjb21wb25lbnRcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ncmlkU3ViamVjdC5waXBlKFxyXG4gICAgICB0YXAoZ3JpZERpcmVjdGl2ZSA9PiB7XHJcbiAgICAgICAgLy8gU2V0IHRoZSB6Z3JpZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgZW1pdHRlZCBncmlkRGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuemdyaWQgPSBncmlkRGlyZWN0aXZlO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbHVtbnMgcHJvcGVydHkgd2l0aCB0aGUgZ3JpZCBjb2x1bW5zIGZyb20gZ3JpZERpcmVjdGl2ZS5cclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmNvbHVtbnM7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIGF1dG9tYXRpYyBhcHBlbmRpbmcgb2YgYSBncmlkIGRhdGUgZmlsdGVyIGNvbHVtbiBpcyBub3QgZGlzYWJsZWQuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZUF1dG9BcHBlbmRHcmlkRGF0ZUZpbHRlckNvbCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRlQ29sRm9yRmlsdGVyaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgdXAgZ3JpZCB3aXRoIGlubGluZSBlZGl0aW5nLlxyXG4gICAgICAgIHRoaXMuc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHVwIGEgcG9wb3ZlciBmZWF0dXJlIGJhc2VkIG9uIGNvbHVtbnMgYW5kIGdyaWQgZGF0YS5cclxuICAgICAgICB0aGlzLnNldHVwUG9wb3ZlckZlYXR1cmUodGhpcy5jb2x1bW5zLCB0aGlzLmdldEdyaWREYXRhKCkpO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAvLyBDaGVjayBpZiBjb2x1bW4gaGVhZGVycyBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2xhdGVkLlxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1hcmsgY29sdW1uIGhlYWRlcnMgYXMgdHJhbnNsYXRlZCBhbmQgcGVyZm9ybSB0aGUgdHJhbnNsYXRpb24uXHJcbiAgICAgICAgdGhpcy5pc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChfID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94Q29sdW1uUGlubmVkID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnNQaW5uZWQ7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVHcmlkU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBncmlkU3RhdGVMb2dpYyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5kYXRhKTtcclxuICAgIGNvbnN0IGNhY2hlTmFtZSA9IHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5nZXRTdG9yYWdlQ2FjaGVLZXkoU3RhdGVUeXBlLnNhdmVkU2V0dGluZywgdGhpcy5kYXRhKTtcclxuICAgIGNvbnN0IHByZXZpb3VzQ2FjaGVkRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0U3RhdGVDYWNoZUJ5TmFtZShjYWNoZU5hbWUpO1xyXG4gICAgY29uc3QgY29sdW1uQ29uZmlndXJhdGlvbnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zQ29uZmlnKHRoaXMuemdyaWQuZ3JpZC5jb2x1bW5zKTtcclxuICAgIGNvbnN0IHNldHRpbmdDb25maWc6IFpHcmlkU2V0dGluZ3MgPSB7IGNvbHVtbkNvbmZpZ3VyYXRpb25zIH07XHJcblxyXG4gICAgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyA9IHtcclxuICAgICAgLi4udGhpcy56Z3JpZC5ncmlkU2V0dGluZyxcclxuICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnNcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGdyaWRTdGF0ZUxvZ2ljID09PSBTdGF0ZVR5cGUuY2FjaGVkRGF0YVNldHRpbmcpIHtcclxuICAgICAgc2V0dGluZ0NvbmZpZy5ncmlkU3RhdGUgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldFN0YXRlVG9DYWNoZShjYWNoZU5hbWUsIHNldHRpbmdDb25maWcpO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlU2V0dGluZ0luZm86IFN0YXRlU2V0dGluZ0luZm8gPSB7XHJcbiAgICAgIHByb2plY3RDb2RlOiB0aGlzLmVudmlyb25tZW50LnByb2plY3RDb2Rlc1swXSxcclxuICAgICAgZmllbGRFbGVtZW50TmFtZTogdGhpcy5kYXRhLkZpZWxkRWxlbWVudE5hbWUsXHJcbiAgICAgIGNvbXBvbmVudFVuaXF1ZUtleTogdGhpcy5kYXRhLkNhY2hlSW5mby5OYW1lID8/IHRoaXMuZGF0YS5GaWVsZEVsZW1lbnROYW1lLFxyXG4gICAgICB1c2VySWQ6IHRoaXMuYXV0aFNlcnZpY2UuZTFUb2tlbi51c2VyTmFtZSxcclxuICAgICAgc3RhdGVUeXBlOiBTdGF0ZVR5cGUuc2F2ZWRTZXR0aW5nLFxyXG4gICAgICBzdGF0ZURhdGE6IEpTT04uc3RyaW5naWZ5KHNldHRpbmdDb25maWcpLFxyXG4gICAgICBzdG9yYWdlQ2FjaGVOYW1lOiBjYWNoZU5hbWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAocHJldmlvdXNDYWNoZWREYXRhICYmIHByZXZpb3VzQ2FjaGVkRGF0YS5pZCkge1xyXG4gICAgICBzdGF0ZVNldHRpbmdJbmZvLmlkID0gcHJldmlvdXNDYWNoZWREYXRhLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvbnQgbmVlZCB0byB3YWl0LCBhcyBpdCB3aWxsIGZpcnN0IHNhdmUgdG8gdGhlIGJyb3dzZXIgc3RvcmFnZS5cclxuICAgIHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5zYXZlU3RhdGVTZXR0aW5nKHN0YXRlU2V0dGluZ0luZm8pLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBTYXZlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdG9yZUdyaWRTZXR0aW5ncygpIHtcclxuICAgIC8vIEVuc3VyZSBjb2x1bW5zIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgb3JpZ2luYWwgb3JkZXJcclxuICAgIHRoaXMuY29sdW1ucy5zb3J0KChhLCBiKSA9PiBhLm9yaWdpbmFsT3JkZXJJbmRleCAtIGIub3JpZ2luYWxPcmRlckluZGV4KTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBncmlkIGNvbHVtbnMgYW5kIGxvYWQgZGF0YVxyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDYWxsIHRoZSBncmlkU2VydmljZS5nZXRTdGF0ZUNhY2hlIGFuZCBoYW5kbGUgdGhlIHJlc3VsdCB2aWEgc3Vic2NyaXB0aW9uXHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmdldFN0YXRlQ2FjaGUoU3RhdGVUeXBlLnNhdmVkU2V0dGluZywgdGhpcy5kYXRhKS5zdWJzY3JpYmUoKGNhY2hlZERhdGEpID0+IHtcclxuICAgICAgaWYgKGNhY2hlZERhdGEpIHtcclxuICAgICAgICAvLyBDYWNoZSBmb3VuZCwgcHJvY2VlZCB3aXRoIGRlbGV0aW9uXHJcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5kZWxldGVTdGF0ZUNhY2hlKFN0YXRlVHlwZS5zYXZlZFNldHRpbmcsIHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIC8vIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSByZXN0b3JlIGJ1dHRvblxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuXHJcbiAgICAgICAgLy8gRGVsZXRlIHRoZSBzdGF0ZSBzZXR0aW5nIGJhc2VkIG9uIHRoZSBjYWNoZSBkYXRhIElEXHJcbiAgICAgICAgdGhpcy5zdGF0ZVNldHRpbmdTZXJ2aWNlLmRlbGV0ZVN0YXRlU2V0dGluZyhjYWNoZWREYXRhLmlkKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZENhbGxiYWNrKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10pIHtcclxuICAgICAgY29uc3QgbWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLUFmdGVybG9hZENhbGxiYWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10sXHJcbiAgICAgICAgZGF0YTogbWVcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpIHtcclxuICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuaXNVc2VMb2NhbERhdGEoKSAmJiBncmlkRGF0YSAmJiBncmlkRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVDb2wgPSBPYmplY3Qua2V5cyhncmlkRGF0YVswXSkuZmlsdGVyKHggPT4geC5pbmNsdWRlcyhcIkRhdGVcIikgJiYgIXguZW5kc1dpdGgoQ29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXgpKTtcclxuICAgICAgaWYgKGRhdGVDb2wgJiYgZGF0ZUNvbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgIGRhdGVDb2wuZm9yRWFjaChjb2xOYW1lID0+IHtcclxuICAgICAgICAgICAgZGF0YVtgJHtjb2xOYW1lfSR7Q29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXh9YF0gPSBuZXcgRGF0ZShkYXRhW2NvbE5hbWVdKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5DYWNoZUluZm8/LkVuYWJsZVNhdmVTdGF0ZSkge1xyXG4gICAgICB0aGlzLnNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlVHlwZSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5kYXRhKTtcclxuICAgICAgaWYgKHN0YXRlVHlwZSA9PT0gU3RhdGVUeXBlLnNhdmVkU2V0dGluZyB8fCBzdGF0ZVR5cGUgPT09IFN0YXRlVHlwZS5zYXZlZEFuZENhY2hlZERhdGFTZXR0aW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ0NhY2hlTmFtZSA9IHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5nZXRTdG9yYWdlQ2FjaGVLZXkoc3RhdGVUeXBlLCB0aGlzLmRhdGEpO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdDYWNoZVZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2V0dGluZ0NhY2hlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nQ2FjaGVWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25cclxuICBwdWJsaWMgZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRBZGRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tQWRkQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkQWRkQnV0dG9uRXZlbnROYW1lXShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbVJlc2V0QnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtOiBhbnksIHJvd0luZGV4OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkUmVzZXRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tUmVtb3ZlQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZGF0YUl0ZW0sIHJvd0luZGV4KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbmxpbmUgRWRpdFxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzKGdyaWRDb2xzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgY291bnRlckluZGV4ID0gMDtcclxuICAgIC8vIFRvIGZvcmNlIGVsZW1lbnQgdG8gcmViaW5kIGRhdGFcclxuICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgb2YoW10pLnBpcGUoZGVsYXkoMCksIHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyB8fCB7fTtcclxuICAgICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWREYXRhKSkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHt9O1xyXG4gICAgICAgICAgZ3JpZENvbHMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGMuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGMuZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2MuZmllbGRdID0gbmV3IEZvcm1Db250cm9sKGRbYy5maWVsZF0sIHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuXHJcbiAgICAgICAgICBpZiAoZFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zW1wiSWRcIl0gPSBpdGVtc1tcIklkXCJdIHx8IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBkW1wiSWRcIl0sIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkW1wiSWRcIl0gPSBjb3VudGVySW5kZXgrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkW1wiSWRcIl1dID0gZm9ybUdyb3VwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGaWVsZCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHZhciBrZXkgPSAoZGF0YVtcIklkXCJdIHx8IGRhdGFbXCJJZFwiXSA9PSAwKSA/IGRhdGFbXCJJZFwiXSA6IHJvd0luZGV4O1xyXG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XSB8fCB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKSkge1xyXG4gICAgICBkYXRhLnB1c2godGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tdPy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKSB7XHJcbiAgICBpZiAodGhpcy5oYXNJbmxpbmVFZGl0Q29sdW1uKHRoaXMuY29sdW1ucykpIHtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuY29sdW1ucy5jb25jYXQodGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCB8fCBbXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzICYmIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5saW5lRWRpdENvbHVtbihncmlkQ29scyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdyaWRDb2xzICYmIGdyaWRDb2xzLnNvbWUoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sdW1uRmllbGQ6IFpGaWVsZCwgZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50XHJcbiAgLy8gU291cmNlOiBodHRwczovL3d3dy50ZWxlcmlrLmNvbS9mb3J1bXMva2VuZG8tYW5ndWxhci1ncmlkLWJsYW5rLXNwYWNlLWluLXRoZS1lbmQtd2hlbi15b3UtcmVzaXplKHJlZHVjZSktYW55LWNvbHVtblxyXG4gIHB1YmxpYyBhZGp1c3RXaWR0aFVwb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCB0YWJsZVdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtdGFibGVcIilbYG9mZnNldFdpZHRoYF07XHJcbiAgICBjb25zdCBjb250ZW50V2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC1jb250ZW50XCIpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgaWYgKHRhYmxlV2lkdGggPCBjb250ZW50V2lkdGgpIHtcclxuICAgICAgY29uc3QgY3VycmVudExhc3RDb2xXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLWNvbnRlbnQgLmstZ3JpZC10YWJsZSB0ciB0ZDpsYXN0LW9mLXR5cGVcIilbYG9mZnNldFdpZHRoYF07XHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnNbdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDFdLndpZHRoID0gY3VycmVudExhc3RDb2xXaWR0aCArIChjb250ZW50V2lkdGggLSB0YWJsZVdpZHRoKSAtIDEwOyAvLyBhY2NvdW50IGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG9uQ2hhbmdlIEV2ZW50c1xyXG4gIHB1YmxpYyBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcpO1xyXG4gICAgICB0aGlzLnpncmlkLmZpbHRlckNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZUNoYW5nZShldmVudDogUGFnZUNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQucGFnZUNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydENoYW5nZShzb3J0OiBTb3J0RGVzY3JpcHRvcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQuc29ydENoYW5nZShzb3J0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbkNlbGxDaGVja0JveE9uQ2hhbmdlKGV2ZW50OiBhbnksIHJvd0luZGV4OiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5kZXRhaWwuY2hlY2tlZDtcclxuICAgIGNvbnN0IGdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgZ0RhdGFbcm93SW5kZXhdW2NvbHVtbi5WYWx1ZV0gPSBpc0NoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGNvbW1hbmQgaGFuZGxlclxyXG4gIHB1YmxpYyBhZGRIYW5kbGVyKHsgc2VuZGVyIH0pIHtcclxuICAgIHRoaXMuaXNOZXcgPSB0cnVlO1xyXG5cclxuICAgIC8vIGNsb3NlIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuXHJcbiAgICAvLyBsb29wIGFsbCBjb2x1bW4gdG8gZ2V0IHZhbGlkYXRpb24gYW5kIGNyZWF0ZSBmb3JtIGNvbnRyb2xcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICBpZiAoY29sLlR5cGUgPT09ICd6dGV4dGVkaXRvcicpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX0V4Y2x1ZGVXaGl0ZVNwYWNlc0FuZEhUTUxUYWdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9FeGNsdWRlV2hpdGVTcGFjZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIGFkZCB0byBncmlkIHJvd1xyXG4gICAgc2VuZGVyLmFkZFJvdyh0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBmb3JtR3JvdXAsIGlzTmV3IH0pOiB2b2lkIHtcclxuICAgIC8vIEdldCB0aGUgZXhpc3RpbmcgZGF0YSBmcm9tIHRoZSBncmlkXHJcbiAgICBjb25zdCBncmlkRXhpc3RpbmdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkXHJcbiAgICBpZiAoZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIC8vIENoZWNrIGZvciBhIHVuaXF1ZSBrZXkgZmllbGRcclxuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5kYXRhWydVbmlxdWVLZXknXTtcclxuICAgICAgaWYgKHVuaXF1ZUtleSkge1xyXG4gICAgICAgIC8vIEdldCB0aGUgdW5pcXVlIGtleSB2YWx1ZSBmcm9tIHRoZSBmb3JtXHJcbiAgICAgICAgY29uc3QgZm9ybVVuaXF1ZUtleVZhbHVlID0gZm9ybUdyb3VwLnZhbHVlW3VuaXF1ZUtleV07XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIHZhbHVlXHJcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSBncmlkRXhpc3RpbmdEYXRhLnNvbWUoZGF0YSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAvLyBJZiBlZGl0aW5nIGFuIGV4aXN0aW5nIHJvdywgc2tpcCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgICFpc05ldyAmJlxyXG4gICAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBncmlkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSA9PT0gZm9ybVVuaXF1ZUtleVZhbHVlICYmXHJcbiAgICAgICAgICAgIC8vIFNraXAgY2hlY2tpbmcgYWdhaW5zdCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSAhPT0gZ3JpZEV4aXN0aW5nRGF0YVtyb3dJbmRleF1bdW5pcXVlS2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWUsIHNob3cgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIHdpdGhvdXQgc2F2aW5nXHJcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdFcnJvciBvY2N1cjogRHVwbGljYXRlZCB1bmlxdWUgZmllbGQgZW50cnkuJywgJ3RvcCcsIHRydWUsIDMwMDAsICdkYW5nZXInKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGlzIHZhbGlkIGFuZCB0aGVyZSBhcmUgbm8gZHVwbGljYXRlcywgc2F2ZSB0aGUgZGF0YVxyXG4gICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAvLyBBZGQgYSBuZXcgcm93IHRvIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhLnB1c2goZm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBVcGRhdGUgYW4gZXhpc3Rpbmcgcm93IGluIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XSA9IGZvcm1Hcm91cC52YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBncmlkIGRhdGEgYW5kIGNsb3NlIHRoZSByb3cgZWRpdG9yXHJcbiAgICAgIHRoaXMuc2V0RGF0YShncmlkRXhpc3RpbmdEYXRhKTtcclxuICAgICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCB9KSB7XHJcbiAgICAvLyBjYW5jZWwgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0SGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGRhdGFJdGVtIH0pIHtcclxuICAgIC8vIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcm93IGJlaW5nIGVkaXRlZCBpcyBub3QgYSBuZXcgcm93XHJcbiAgICB0aGlzLmlzTmV3ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gQ2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbCwgYXBwZW5kIGN1cnJlbnQgcm93IHZhbHVlXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9FeGNsdWRlV2hpdGVTcGFjZXNBbmRIVE1MVGFncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfRXhjbHVkZVdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKGRhdGFJdGVtW2NvbC5WYWx1ZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGZvcm0gZ3JvdXAgb24gdGhlIHJvdyBiZWluZyBlZGl0ZWRcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSByb3dJbmRleDtcclxuICAgIHNlbmRlci5lZGl0Um93KHJvd0luZGV4LCB0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlSGFuZGxlcih7IHNlbmRlciwgZGF0YUl0ZW0gfSkge1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KGRhdGFJdGVtLCBnRGF0YSwgdGhpcy5kYXRhWydVbmlxdWVLZXknXSk7XHJcbiAgICBnRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgZ3JpZFxyXG4gICAgdGhpcy5zZXREYXRhKGdEYXRhKTtcclxuXHJcbiAgICBzZW5kZXIuY2FuY2VsQ2VsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZUVkaXRvcihncmlkLCByb3dJbmRleCA9IHRoaXMuZWRpdGVkUm93SW5kZXgpIHtcclxuICAgIGdyaWQuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtSW5kZXgoaXRlbTogYW55LCBkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2lkeF1ba2V5XSA9PT0gaXRlbVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIEZpbHRlclxyXG4gIHByaXZhdGUgc2V0dXBGaWx0ZXJGZWF0dXJlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkRmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5hZHZmaWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIGNvbnN0IGFkdmZvcm0gPSB0aGlzLmFkdmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICAgIGNvbnN0IGFkdmNvbnRyb2xzID0gYWR2Zm9ybS5jb250cm9scztcclxuICAgICAgZm9yIChjb25zdCBjIG9mIE9iamVjdC5rZXlzKGFkdmNvbnRyb2xzKSkge1xyXG4gICAgICAgIGNvbnRyb2xzW2NdID0gYWR2Y29udHJvbHNbY107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkZpbHRlclNlYXJjaCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1maWx0ZXJzZWFyY2hcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gsXHJcbiAgICAgICAgZGF0YTogeyBmb3JtY29udHJvbHM6IGNvbnRyb2xzIH0sXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMgPSBbXTtcclxuICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICAgIGlmIChjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSkgfHwgWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuYWR2ZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICAgIGtleTogZmllbGQuVmFsdWVFeHByIHx8IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgICAgICBvcHM6IHRoaXMubWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZCksXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdCgpIHtcclxuICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuZmlsdGVyR3JvdXApO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRmlsdGVyRGF0YShncm91cDogWkdyb3VwKSB7XHJcbiAgICBjb25zdCBmb3JtID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcbiAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShjb250cm9sTmFtZSwgbnVsbCwgZ3JvdXAsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goKSB7XHJcbiAgICB0aGlzLmlzU2hvd0FkdkZpbHRlciA9ICF0aGlzLmlzU2hvd0FkdkZpbHRlcjtcclxuICAgIGlmICghdGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQ6IFpGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5UeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcIm51bWVyaWNcIjpcclxuICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgY2FzZSBcImVtYWlsXCI6XHJcbiAgICAgIGNhc2UgXCJwYXNzd29yZFwiOlxyXG4gICAgICBjYXNlIFwidGVsXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XHJcbiAgICAgIGNhc2UgXCJ1cmxcIjpcclxuICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICAgIGlmICghZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb250YWluc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI9PVwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIGNvbW1vbiBzZXR0aW5nIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldCBzZXRHcmlkVGl0bGUobmV3VGl0bGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSBuZXdUaXRsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2V0R3JpZFN0YXRlKHN0YXRlOiBTdGF0ZSkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0R3JpZFRvRmlyc3RQYWdlKCkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcCA9IDA7XHJcbiAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwID0gMDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPCEtLVxyXG48ZGl2IHN0eWxlPVwibWFyZ2luOiAxMHB4XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgay1mb3JtXCI+XHJcbiAgICAgICAgICA8ZmllbGRzZXQ+XHJcbiAgICAgICAgICAgIDxsZWdlbmQ+QmluZGluZyB0eXBlczwvbGVnZW5kPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5CaW5kIHRoZSBkYXRhIHRvOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImFycmF5XCIgdmFsdWU9XCJhcnJheVwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJhcnJheVwiPkFycmF5IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJncmlkRGF0YVJlc3VsdFwiIHZhbHVlPVwiZ3JpZERhdGFSZXN1bHRcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiZ3JpZERhdGFSZXN1bHRcIj5HcmlkRGF0YVJlc3VsdCBvYmplY3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXN5bmNcIiB2YWx1ZT1cImFzeW5jXCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFzeW5jXCI+QXN5bmNocm9ub3VzIHNvdXJjZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImRhdGEuVGl0bGVcIiBjbGFzcz1cImdyaWRUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIDxzcGFuPnt7IGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxrZW5kby1wb3BvdmVyICNncmlkUG9wT3ZlciBbcG9zaXRpb25dPVwiZGF0YS5Qb3BPdmVyUG9zaXRpb24gfHwgJ2JvdHRvbSdcIiBbdGVtcGxhdGVEYXRhXT1cImdldENvbnRleHREYXRhLmJpbmQodGhpcylcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlclRpdGxlVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLlRpdGxlU3R5bGVcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5UaXRsZVwiIFtpbm5lckhUTUxdPVwiZGF0YS5UaXRsZVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyQm9keVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLkJvZHlTdHlsZVwiIGNsYXNzPVwicG9wb3ZlcmJvZHlcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5Cb2R5XCIgW2lubmVySFRNTF09XCJkYXRhLkJvZHkgfCBodG1sU2FuaXRpemVcIiBbbmdDbGFzc109XCJkYXRhLkJvZHlDbGFzc1wiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3Zlci5jYWxsKHRoaXMsICRldmVudClcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1wb3BvdmVyPlxyXG5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcCBzaG93T249XCJub25lXCIgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIGZpbHRlcj1cIi5rLWdyaWQgdGRcIiAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPGRpdiBrZW5kb1BvcG92ZXJDb250YWluZXIgW3BvcG92ZXJdPVwiZ3JpZFBvcE92ZXJcIiBmaWx0ZXI9XCJkaXYuZ3JpZENlbGwud2l0aFBvcG92ZXJJbkdyaWRcIiBzaG93T249XCJub25lXCIga2VuZG9Qb3BvdmVyQ29udGFpbmVyICNwb3BvdmVyY29udGFpbmVyPVwia2VuZG9Qb3BvdmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxrZW5kby1ncmlkIFt6Z3JpZGJpbmRpbmddPVwie2RhdGE6IGRhdGEsIGdyb3VwOiBncm91cCwgcGFyYW1zOiBwYXJhbXMsIGdyaWRTdWJqZWN0OiBncmlkU3ViamVjdCwgZ3JpZFNldHRpbmc6IGdyaWRTZXR0aW5nfVwiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIiBjbGFzcz1cImRlc2t0b3AtZ3JpZCBlMXRhZy1zdHlsZTJcIlxyXG4gICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJkYXRhLnNjcm9sbEFibGUgPT09IGZhbHNlID8gJ25vbmUnIDogJ3Njcm9sbGFibGUnXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGVuLXBhZ2VyXT1cIiFwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUudGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtza2lwXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwXCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNvcnRcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwie2FsbG93VW5zb3J0OiB0cnVlLG1vZGU6ICdtdWx0aXBsZSd9XCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJkYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogeyBmaWx0ZXI6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbG9zZSk9XCJlZGl0Q2VsbENsb3NlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGFTdGF0ZUNoYW5nZSk9XCJkYXRhU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9HcmlkU2VsZWN0QnldPVwicm93U2VsZWN0aW9uS2V5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cInJvd1NlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2FuY2VsKT1cImNhbmNlbEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzYXZlKT1cInNhdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChlZGl0KT1cImVkaXRIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoYWRkKT1cImFkZEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2x1bW5SZXNpemUpPVwiYWRqdXN0V2lkdGhVcG9uUmVzaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAoZXhjZWxFeHBvcnQpPVwib25FeGNlbEV4cG9ydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NhbGxiYWNrLmJpbmQodGhpcylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd1JlZnJlc2hCdXR0b24gfHwgZGF0YS5BbGxvd0V4cG9ydCB8fCBkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlIHx8IGRhdGEuVGl0bGUgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IGRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdC1pdGVtXCIgKm5nSWY9XCJncmlkVGl0bGUgfHwgZGF0YS5BbGxvd1JlZnJlc2hCdXR0b24gfHwgZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICA8IS0tIDxmYS1pY29uICpuZ0lmPVwiZGF0YS5JY29uXCIgY2xhc3M9XCJncmlkVGl0bGVJY29uXCIgW2ljb25dPVwiZGF0YS5JY29uXCI+PC9mYS1pY29uPiAtLT5cclxuICAgICAgICAgICAgPGtlbmRvLWxhYmVsIGNsYXNzPVwiZ3JpZFRpdGxlXCIgKm5nSWY9XCJncmlkVGl0bGVcIj57eyBncmlkVGl0bGUgfX08L2tlbmRvLWxhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHRpdGxlPVwiUmVmcmVzaFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9ucyByZWZyZXNoLWJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZWZyZXNoRGF0YSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1ncmlkLWJ1dHRvbiBrLWktcmVmcmVzaC1zbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWxlZnQtaXRlbS1zZWNvbmQtY29udGFpbmVyXCIgKm5nSWY9XCJkYXRhLkFsbG93RXhwb3J0XCIgW2NsYXNzLndpdGgtZ3JpZC10aXRsZV09XCJncmlkVGl0bGUgfHwgZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9ucyBleHBvcnQtYnV0dG9uXCIga2VuZG9HcmlkRXhjZWxDb21tYW5kICpuZ0lmPVwiZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZmlsZS1leGNlbFwiPjwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiZG93bmxvYWRcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4cG9ydC10by1leGNlbC1idXR0b24tdGV4dFwiPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdEb3dubG9hZCBhcyBFeGNlbCcpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHQtaXRlbVwiICpuZ0lmPVwiZ3JpZEJ0biB8fCBkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlIHx8IGdyaWREZWZhdWx0U3RhdGVFeGlzdCB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj48L2FwcC16d29ya2Zsb3didXR0b25zPlxyXG4gICAgICAgICAgICA8YXBwLXpidXR0b25zICpuZ0lmPVwiZ3JpZEJ0biAmJiBncmlkQnRuLlR5cGUgPT09ICd6YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXpidXR0b25zPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwic2F2ZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3RhclwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2F2ZSBTZXR0aW5ncycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwicmVzdG9yZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJzaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3Rhci1vdXRsaW5lXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdSZXN0b3JlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEFkZENvbW1hbmQgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktYWRkXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tQWRkQ29tbWFuZChncm91cClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLWFkZFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZTogJ0FkZCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwiZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktdHJhc2hcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lOiAnUmVzZXQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIiAqbmdJZj1cImRhdGEuR3JpZEZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3JtYWwtZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJmaWx0ZXItZmllbGRzXCIgW2dyb3VwXT1cImZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItYnV0dG9uc1wiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2VhcmNoXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1sYWJlbCBpb24tdGV4dC1jYXBpdGFsaXplXCI+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NlYXJjaCcpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FuY2VsRWRpdCgpXCIgKm5nSWY9XCJkYXRhLklzU2hvd0dyaWRDYW5jZWxGaWx0ZXJCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgW25nQ2xhc3NdPVwiaXNTaG93QWR2RmlsdGVyID8gJ3RvZ2dsZU9uJyA6ICd0b2dnbGVPZmYnXCIgKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzbGlkZXJzLWhcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YXBwLXpmb3JtICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBjbGFzcz1cInRvLXByZWxvYWQtdGhlLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpc1Nob3dBZHZGaWx0ZXJcIiBbQGhpZGVBbmRTaG93QW5pbWF0aW9uXT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1zZXBlcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnQWR2YW5jZWQgU2VhcmNoJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiYWR2ZmlsdGVyLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbiAqbmdJZj1cIiEhZGF0YS5TZWxlY3RPcHRpb25zXCIgW3dpZHRoXT1cIjYwXCIgc2hvd1NlbGVjdEFsbD1cInRydWVcIiBbY29sdW1uTWVudV09XCJ0cnVlXCIgW2xvY2tlZF09XCJjaGVja2JveENvbHVtblBpbm5lZFwiPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIFtzdHlsZV09XCJnZXRHcmlkQ29sdW1uU3R5bGUoKVwiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBbdGl0bGVdPVwiY29sLnRpdGxlXCIgW3dpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5SZXNpemFibGVXaWR0aF09XCJjb2wubWluUmVzaXphYmxlV2lkdGhcIiBbZmlsdGVyXT1cImNvbC5maWx0ZXJcIiBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlKGNvbC5lbmFibGVTb3J0aW5nKVwiIFtoZWFkZXJTdHlsZV09XCJnZXRHcmlkSGVhZGVyU3R5bGUoKVwiIGhlYWRlckNsYXNzPVwiZTF0YWctc3R5bGU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvb3RlclN0eWxlXT1cImdldEdyaWRGb290ZXJTdHlsZSgpXCIgZm9vdGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTlcIiBbaGlkZGVuXT1cImNvbC5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbC5mb3JtYXRcIiBbY2xhc3NdPVwiY29sLkNsYXNzXCIgW2xvY2tlZF09XCJsb2NrZWQoY29sKVwiIGVkaXRvcj1cIm51bWVyaWNcIiBbY29sdW1uTWVudV09XCIhY29sLmRpc2FibGVDb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRvcl09XCJjb2wuZWRpdG9yVHlwZVwiPlxyXG4gICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT0gJ3pkYXRlJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnenRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkYXRlLXJhbmdlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgY2xhc3M9XCJkYXRlLXJhbmdlLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFtkYXRhXT1cImRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2RhdGUtcmFuZ2UtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiY29udGFpbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIEdyaWQgRWRpdCBUZW1wbGF0ZSAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRFZGl0VGVtcGxhdGUgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kIFwiIGxldC1kYXRhSXRlbT1cImRhdGFJdGVtXCIgbGV0LWNvbHVtbj1cImNvbFwiIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIiBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IubnVtZXJpY0lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IuaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiPnt7IGNvbC5OYW1lIH19IGlzIHJlcXVpcmVkLjwvaW9uLWxhYmVsPi0tPlxyXG4gICAgICAgICAgICAgICAgICAtbFxyXG5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDFweCAwO1wiICpuZ0lmPVwiIWNvbC5jbGlja2FibGVJY29ucyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCAhPT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGUoY29sLCBkYXRhSXRlbSlcIiBbYXR0ci5kYXRhLWlkXT1cImRhdGFJdGVtLklkXCIgW2F0dHIuY29sdW1uLW5hbWVdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UG9wT3Zlcihjb2wsICRldmVudClcIiAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi0yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgKm5nSWY9XCJjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT10cnVlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsU3R5bGVDb25kaXRpb25EZWZhdWx0XCIgW3N0eWxlXT1cInNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCIhIWNvbC5uYXZpZ2F0ZVRvXCIgKGNsaWNrKT1cIm9uTmF2aWdhdGVUbygkZXZlbnQsIGNvbCwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwibGlnaHRcIiBzaXplPVwic21hbGxcIj5cclxuICAgICAgICAgICAge3sgY29sLkNsaWNrYWJsZUljb25zIH19XHJcbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKSAmJiAhaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgJiYgIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZGF0YUl0ZW0sIGNvbClcIiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGVGb3JJbmxpbmVFZGl0KGNvbCwgZGF0YUl0ZW0sIHJvd0luZGV4KVwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemlucHV0LWNvbnRhaW5lciBbZGF0YV09XCJnZXRJbmxpbmVGaWVsZChjb2wuZmllbGQpXCIgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZ2V0SW5saW5lRm9ybShkYXRhSXRlbSwgcm93SW5kZXgpXCIgW2NvbnRhaW5lckZpZWxkXT1cImNvbnRhaW5lckZpZWxkXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTZcIj5cclxuICAgICAgICAgICAgICA8L2FwcC16aW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4O1wiICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbC5jbGlja2FibGVJY29uc1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImljb24uQ2xhc3MgPyBpY29uLkNsYXNzIDogJydcIiAqbmdJZj1cIiEhaWNvbiAmJiAoISFkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAmJiAhIWljb24pXHJcbiAgICAgICAgICAgICAgPyBkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAhPT0gaWNvbi5XRlNfU3RhdHVzQ29kZVxyXG4gICAgICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBkaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudCwgaWNvbiwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e2ljb24uTmFtZSB8fCBkYXRhSXRlbVtjb2wuZmllbGRdfX0gPGZhLWljb24gW2ljb25dPVwiaWNvbi5JY29uXCIgc3R5bGU9XCJwYWRkaW5nOiA0cHggNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc2FibGVkQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSA8c3Ryb25nPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX08L3N0cm9uZz4gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ7e2RhdGFJdGVtLkRpc2NvbnRpbnVlZCA/ICdkaXNjb250aW51ZWQnIDogJ2FjdGl2ZSd9fVwiPlxyXG4gICAgICAgICAgICAgIHt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gXCJkaXNjb250aW51ZWRcIiA6IFwiYWN0aXZlXCJ9fVxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCIgKm5nSWY9XCJkYXRhLkVuYWJsZUFnZ3JlZ2F0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiIGNsYXNzPVwiZTF0YWctc3R5bGU3XCI+XHJcbiAgICAgICAgICAgICAge3tjb2wuYWdncmVnYXRlVHlwZX19XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi4yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiIHdpZHRoPVwiMTgwXCIgW2NvbHVtbk1lbnVdPVwiZmFsc2VcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIiBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFNhdmVDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IGlzTmV3ID8gJ1NhdmUnIDogJ1VwZGF0ZScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZCBbcHJpbWFyeV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnRGlzY2FyZCBjaGFuZ2VzJyA6ICdDYW5jZWwnIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZEVkaXRDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IFwiRWRpdFwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFJlbW92ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZW1vdmVDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCIgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tUmVtb3ZlQ29tbWFuZChkYXRhSXRlbSwgcm93SW5kZXgpXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIj5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtZXhjZWwgZmlsZU5hbWU9XCJFeHBvcnQueGxzeFwiIFtmZXRjaERhdGFdPVwiYWxsUmVzdWx0c1wiPjwva2VuZG8tZ3JpZC1leGNlbD5cclxuICAgICAgPC9rZW5kby1ncmlkPlxyXG4gICAgICA8YXBwLWNvbnRleHQtbWVudSBbZGF0YV09XCJkYXRhXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiICNkYXRhaXRlbWNvbnRleHRtZW51PjwvYXBwLWNvbnRleHQtbWVudT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gZm9yIERFQyBhdXRvIHNjcm9sbGluZyAtLT5cclxuICA8ZGl2IGlkPVwiZW5kLW9mLWdyaWRcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=