@eqproject/eqp-dynamic-module 2.9.9 → 2.9.12

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.
@@ -1081,6 +1081,7 @@ export class AddFormFieldComponent {
1081
1081
  this.fieldsExtraConfig.forEach((fieldExtraConfig) => {
1082
1082
  var newfield = new FieldExtraValues();
1083
1083
  newfield.FieldConfigCode = fieldExtraConfig.FieldConfigCode;
1084
+ newfield.FieldConfigParentFieldCode = this.field.Name;
1084
1085
  if (fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano']) {
1085
1086
  newfield.FieldConfigValue = false;
1086
1087
  }
@@ -1197,4 +1198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1197
1198
  type: ViewChild,
1198
1199
  args: ["dialogQE", { static: true }]
1199
1200
  }] } });
1200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxjQUFjLEdBSWYsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsYUFBYSxFQUNkLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUVMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBRUwsb0JBQW9CLEdBQ3JCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLHdDQUF3QyxDQUFDO0FBRWhELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUlyRCxPQUFPLEVBQ0wsWUFBWSxHQUViLE1BQU0sd0NBQXdDLENBQUM7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QU0sRUFBRSxLQUFLLEVBQUU7Z0JBTU4sUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG4gIFZhbGlkYXRvckZuLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1xyXG4gIEF0dGFjaG1lbnRUeXBlLFxyXG4gIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLFxyXG4gIEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50LFxyXG4gIElBdHRhY2htZW50RFRPLFxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC1hdHRhY2htZW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtSGVscGVyIH0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXNlbGVjdFwiO1xyXG5pbXBvcnQgeyBDb25maWdDb2x1bW4sIFR5cGVDb2x1bW4gfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHtcclxuICBCYXNlRmllbGQsXHJcbiAgQ29sU3BhblNpemVzRW51bSxcclxuICBEYXRhR2V0dGVyQ2FyZGluYWxpdHlFbnVtLFxyXG4gIEZpZWxkSW52aXNpYmlsaXR5RW51bSxcclxuICBGaWVsZFR5cGVFbnVtXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBBdHRhY2htZW50RmllbGQsXHJcbiAgQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMsXHJcbiAgQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2F0dGFjaG1lbnRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEJvb2xlYW5GaWVsZCxcclxuICBCb29sUHJlc2VudGFudGlvRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9ib29sZWFuRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBEYXRlRmllbGQsXHJcbiAgRGF0ZVRpbWVUeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgSW1hZ2VGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBMaXN0UHJlc2VudGF0aW9uRW51bSxcclxuICBMaXN0VmFsdWVGaWVsZCxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMb29rdXBGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xvb2t1cEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUZXh0YXJlYUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvdGV4dGFyZWFGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIFRleHRNYXNrRW51bSxcclxuICBUZXh0RmllbGQsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvdGV4dEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEdyb3VwLCBGb3JtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMYWJlbEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbGFiZWxGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZVdpdGhNYXJrZXJzRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVdpdGhNYXJrZXJzRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkVHlwZUVudW0sIER5bkF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgRGF0YUdldHRlclR5cGVFbnVtLCBEYXRhR2V0dGVyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFF1ZXJ5RWRpdG9yTW9kZUVudW0gfSBmcm9tIFwiLi4vZGJnZXR0ZXIvZGJnZXR0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE1vZGVFbnVtLCBUaW1lVHlwZUVudW0gfSBmcm9tIFwidG13LXBpY2tlclwiO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IENvbnRlc3R1YWxpemF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9nZXR0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHsgQ2FwYWNpdG9yIH0gZnJvbSAnQGNhcGFjaXRvci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uRmllbGQsIEtleVR5cGVWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2FjdGlvbkJ1dHRvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGaWVsZEV4dHJhQ29uZmlnLCBGaWVsZEV4dHJhVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpZWxkRXh0cmFDb25maWcubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZEZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgXHJcbiAgQElucHV0KCkgZmllbGRzRXh0cmFDb25maWc6IEFycmF5PEZpZWxkRXh0cmFDb25maWc+O1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgZmllbGQ6IEJhc2VGaWVsZCB8IGFueTtcclxuICBASW5wdXQoKSBpbmRleEZpZWxkOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkc0dyb3VwczogQXJyYXk8Rm9ybUZpZWxkR3JvdXA+O1xyXG4gIC8qKiBFbGVuY28gZGVpIEZpZWxkIGNyZWF0aSBuZWxsYSBmb3JtLCB1c2F0aSBwZXIgcG9wb2xhcmUgbCdhdXRvY29tcGxldGUgZGVsbGEgcHJvcHJpZXTDoCBGb3JtdWxhLiAqL1xyXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPjtcclxuICBASW5wdXQoKSBmaWVsZFR5cGVzVG9FeGNsdWRlOiBBcnJheTxGaWVsZFR5cGVFbnVtPiA9IFtGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl1dO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuICBASW5wdXQoKSBjb250ZXN0dWFsaXphdGlvbjogQXJyYXk8Q29udGVzdHVhbGl6YXRpb24+ID0gbnVsbDtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBhbnk7XHJcblxyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlRmllbGRFdmVudDogRXZlbnRFbWl0dGVyPEJhc2VGaWVsZCB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPEJhc2VGaWVsZCB8IGFueT4oKTtcclxuXHJcbiAgcmVzaXplZEltYWdlc0hlaWdodFB4OiBudW1iZXI7XHJcbiAgZmllbGRGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAga2V5VmFsdWVPYmplY3Q6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSA9IHsga2V5OiBcIlwiLCB2YWx1ZTogXCJcIiB9O1xyXG4gIGF2YWlsYWJsZUNvbFNwYW5TaXplc0NvbXBpbGF6aW9uZTogQXJyYXk8Q29sU3BhblNpemVzRW51bT4gPSBbXTtcclxuICBhdmFpbGFibGVDb2xTcGFuU2l6ZXNSaXNwb3N0YTogQXJyYXk8Q29sU3BhblNpemVzRW51bT4gPSBbXTtcclxuICBmb3JtdWxhQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG4gIFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcclxuICBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucyA9IEF2YWlsYWJsZUZpbGVFeHRlbnNpb25zO1xyXG4gIEF2YWlsYWJsZUltYWdlRXh0ZW5zaW9ucyA9IEF2YWlsYWJsZUltYWdlRXh0ZW5zaW9ucztcclxuICBmaWVsZEludmlzaWJpbGl0eUVudW0gPSBGaWVsZEludmlzaWJpbGl0eUVudW07XHJcbiAgY29sdW1uS2V5czogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IG5ldyBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KCk7XHJcblxyXG4gIC8vI3JlZ2lvbiBUZW1wbGF0ZSBkZWkgdmFyaSBwZXp6aSBkaSBmb3JtIHBlciBsYSBjcmVhemlvbmUgZGkgdW4gY2FtcG8oaW4gYmFzZSBhbCB0aXBvIHNjZWx0bykuXHJcbiAgZmllbGRUeXBlRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0ZXh0RmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICB0ZXh0RmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImxhYmVsRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBsYWJlbEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJidXR0b25GaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGJ1dHRvbkZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+OyBcclxuICBAVmlld0NoaWxkKFwidGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRhcmVhRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGF0ZUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGF0ZUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJudW1lcmljRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBudW1lcmljRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImF0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGF0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGltYWdlRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsb29rdXBGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxvb2t1cEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkYXRhR2V0dGVyVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkYXRhR2V0dGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47ICBcclxuICBcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGdlc3RpcmUgaSBtZXRhZGF0YSBuZWkgY2FtcGkgdGkgZGlwbyBBbGxlZ2F0byBvIEltbWFnaW5lXHJcbiAgbWV0YWRhdGFDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIC8vQFZpZXdDaGlsZCgnbWV0YWRhdGFGaWVsZHNUYWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSBtZXRhZGF0YUZpZWxkc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZE1ldGFkYXRhOiBCYXNlRmllbGQ7XHJcbiAgLy9pbmRleFNlbGVjdGVkTWV0YWRhdGE6IG51bWJlcjtcclxuICAvL2RpYWxvZ01ldGFkYXRhUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgZGlhbG9nRm9ybXVsYVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIGRpYWxvZ1Zpc2libGVJZlJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIC8vQFZpZXdDaGlsZCgnZGlhbG9nTWV0YWRhdGEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dNZXRhZGF0YTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nRm9ybXVsYVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dGb3JtdWxhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgZ2VzdGlyZSBsZSBpbW1hZ2luaSBuZWkgY2FwaSBkaSB0aXBvIGVsZW5jbyBnZW5lcmljb1xyXG4gIEBWaWV3Q2hpbGQoXCJidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYnV0dG9uSW1hZ2VzS2V5VmFsdWVJbnB1dENvbHVtbjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEVudW1lcmF0b3JpIHVzYXRpIG5lbGwnaHRtbFxyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtID0gQm9vbFByZXNlbnRhbnRpb0VudW07XHJcbiAgRGF0ZVRpbWVUeXBlRW51bSA9IERhdGVUaW1lVHlwZUVudW07XHJcbiAgTGlzdFByZXNlbnRhdGlvbkVudW0gPSBMaXN0UHJlc2VudGF0aW9uRW51bTtcclxuICBUZXh0TWFza0VudW0gPSBUZXh0TWFza0VudW07XHJcbiAgQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICBhdHRhY2htZW50RmllbGRUeXBlRW51bSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtO1xyXG4gIGRhdGFHZXR0ZXJUeXBlRW51bSA9IERhdGFHZXR0ZXJUeXBlRW51bTtcclxuICBzdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHZXN0aW9uZSBkZWxsZSBsaXN0ZSBkaSBpbW1hZ2luaVxyXG4gIGNvbmZpZ0NvbHVtbkxpc3RJbWFnZXM6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGNvbmZpZ0NvbHVtbkltYWdlOiBBcnJheTxDb25maWdDb2x1bW4+ID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBAVmlld0NoaWxkKCdHZW5lcmljTGlzdEltYWdlc0ltYWdlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBHZW5lcmljTGlzdEltYWdlc0ltYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnR2VuZXJpY0xpc3RJbWFnZXNLZXlUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIEdlbmVyaWNMaXN0SW1hZ2VzS2V5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ltYWdlU2VsZWN0b3JBdHRhY2htZW50cycsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZVNlbGVjdG9yQXR0YWNobWVudHM6IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2ltYWdlQXR0YWNobWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZUF0dGFjaG1lbnQ6IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyBEQiBHZXR0ZXJcclxuICBkaWFsb2dRRVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIC8vQFZpZXdDaGlsZCgnZGlhbG9nTWV0YWRhdGEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dNZXRhZGF0YTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nUUVcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nUUU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8vIFRNVy1QSUNLRVJcclxuICBtb2RlID0gTW9kZUVudW1cclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bVxyXG5cclxuICAvLyBETSBHZXR0ZXJcclxuICBmb3JtczogQXJyYXk8Rm9ybT4gPSBuZXcgQXJyYXk8Rm9ybT4oKTtcclxuICBETU1vZHVsZTogYW55O1xyXG4gIERNRmllbGQ6IGFueTtcclxuICBETUZpZWxkczogQXJyYXk8eyBrZXk6IHN0cmluZyB9PjtcclxuICBETUdldHRlckNhcmRpbmFsaXRpZXMgPSBEYXRhR2V0dGVyQ2FyZGluYWxpdHlFbnVtO1xyXG5cclxuICBwbGF0Zm9ybTogc3RyaW5nID0gQ2FwYWNpdG9yLmdldFBsYXRmb3JtKCk7XHJcblxyXG4gIGxvYWRlZEZpZWxkRXh0cmE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGVudW1IZWxwZXI6IEVudW1IZWxwZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlciA9PSBudWxsKXsgdGhpcy5maWVsZC5EYXRhR2V0dGVyID0gbmV3IERhdGFHZXR0ZXIoKTsgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSAhPSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bXCJEYSBtb2R1bG8gZGluYW1pY29cIl0pe1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEFsbE1vZHVsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gXCJ1bmRlZmluZWRcIiAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGwpe1xyXG4gICAgICB0aGlzLmNyZWF0ZUNvbHVtbktleXModGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5QYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuZmllbGRUeXBlc1RvRXhjbHVkZS5pbmNsdWRlcyhGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZFR5cGVzVG9FeGNsdWRlLnB1c2goRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uRmllbGRUeXBlQ2hhbmdlKGZhbHNlKTtcclxuICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzID0gdGhpcy5hdmFpbGFibGVGaWVsZHNcclxuICAgICAgPyB0aGlzLmF2YWlsYWJsZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYgIT0gdGhpcy5maWVsZClcclxuICAgICAgOiBbXTtcclxuXHJcbiAgICAgIHRoaXMuY29uZmlndXJlRmllbGRzRXh0cmEoKTtcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiZm9ybT9cIix0aGlzLmZvcm0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGkgdmFsb3JpIGRhIHN1Z2dlcmlyZSBuZWxsJ2F1dG9jb21wbGV0ZSBkZWwgY2FtcG8gRm9ybXVsYS5cclxuICAgKiBWaWVuZSBzY2F0ZW5hdG8gYWwgZm9jdXMgKGluIHF1ZXN0byBjYXNvIHZpZW5lIHBhc3NhdG8gaWwgcGFyYW1ldHJvIGEgbnVsbCBwZXIgZGlmZmVyZW56aWFybG9cclxuICAgKiBkYWxsJ2V2ZW50byBkaSBjbGljayBzdWxsYSB0YXN0aWVyYSkgZSBhbCBrZXl1cCBzdWxsJ2lucHV0IChpbCBwYXJhbWV0cm8gw6ggZGl2ZXJzbyBkYSBudWxsKS5cclxuICAgKiBAcGFyYW0ga2V5Ym9hcmRFdmVudCBFdmVudG8gc2NhdGVuYXRvIGFsIGtleXVwIHN1bGxhIHRhc3RpZXJhLiBTZSBudWxsIGFsbG9yYSBpbCBtZXRvZG8gw6ggc3RhdG8gaW52b2NhdG8gZGFsIGZvY3VzIHN1bGwnaW5wdXQuXHJcbiAgICogQHN1bW1hcnkgQWdnaW9ybmEgbCdlbGVuY28gZGVpIHN1Z2dlcmltZW50aSBwZXIgbCdhdXRvY29tcGxldGUgc2UgbCd1dGVudGUgZXNlZ3VlIGlsIGZvY3VzIHN1bGwnaW5wdXRcclxuICAgKiBvcHB1cmUgYWwga2V5dXAgc3VsbGEgdGFzdGllcmEgZGkgdW4gdGFzdG8gZGl2ZXJzbyBkYWxsZSBmcmVjY2UuXHJcbiAgICovXHJcbiAgLy8gc2V0Rm9ybXVsYUF1dG9jb21wbGV0ZU9wdGlvbnMoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gIC8vICAgLy8gQ3JlbyBsJ2FycmF5IHBlciBsJ2F1dG9jb21wbGV0ZSBzb2xvIHNlIHN0byBmYWNlbmRvIGlsIGZvY3VzIHN1bGwnaW5wdXQgbyBzZSBzdG8gcHJlbWVuZG8gdW4gdGFzdG9cclxuICAvLyAgIC8vIHN1bGxhIHRhc3RpZXJhIGRpdmVyc28gZGFsbGUgZnJlY2NlIChpbiBxdWVzdCd1bHRpbW8gY2Fzbywgc2Ugbm9uIHZpZW5lIGVzZWd1aXRvIGlsIGZpbHRybyBzdWxsJ2V2ZW50byxcclxuICAvLyAgIC8vIG5vbiBzaSBwdcOyIHNlbGV6aW9uYXJlIHVuIHN1Z2dlcmltZW50byBkZWxsJ2F1dG9jb21wbGV0ZSBwZXJjaMOoIGFsIGNsaWNrIHZlcnJlYmJlIHJpY2FyaWNhdG8gbCdhcnJheSBlXHJcbiAgLy8gICAvLyBzaSBwcmVkZXJlYmJlIGxhIHNlbGV6aW9uZSBhcHBlbmEgZmF0dGEpLlxyXG4gIC8vICAgaWYgKCFrZXlib2FyZEV2ZW50IHx8ICFrZXlib2FyZEV2ZW50LmNvZGUuaW5jbHVkZXMoXCJBcnJvd1wiKSkge1xyXG4gIC8vICAgICB0aGlzLmZvcm11bGFBdXRvY29tcGxldGVPcHRpb25zID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuR2V0QXV0b2NvbXBsZXRlT3B0aW9ucyh0aGlzLmF2YWlsYWJsZUZpZWxkcywgdGhpcy5maWVsZC5Gb3JtdWxhKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcbiAgc2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucyhrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBDcmVvIGwnYXJyYXkgcGVyIGwnYXV0b2NvbXBsZXRlIHNvbG8gc2Ugc3RvIGZhY2VuZG8gaWwgZm9jdXMgc3VsbCdpbnB1dCBvIHNlIHN0byBwcmVtZW5kbyB1biB0YXN0b1xyXG4gICAgLy8gc3VsbGEgdGFzdGllcmEgZGl2ZXJzbyBkYWxsZSBmcmVjY2UgKGluIHF1ZXN0J3VsdGltbyBjYXNvLCBzZSBub24gdmllbmUgZXNlZ3VpdG8gaWwgZmlsdHJvIHN1bGwnZXZlbnRvLFxyXG4gICAgLy8gbm9uIHNpIHB1w7Igc2VsZXppb25hcmUgdW4gc3VnZ2VyaW1lbnRvIGRlbGwnYXV0b2NvbXBsZXRlIHBlcmNow6ggYWwgY2xpY2sgdmVycmViYmUgcmljYXJpY2F0byBsJ2FycmF5IGVcclxuICAgIC8vIHNpIHByZWRlcmViYmUgbGEgc2VsZXppb25lIGFwcGVuYSBmYXR0YSkuXHJcbiAgICBpZiAoIWtleWJvYXJkRXZlbnQgfHwgIWtleWJvYXJkRXZlbnQuY29kZS5pbmNsdWRlcyhcIkFycm93XCIpKSB7XHJcbiAgICAgIHRoaXMuVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucyA9XHJcbiAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuR2V0QXV0b2NvbXBsZXRlT3B0aW9ucyhcclxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzLFxyXG4gICAgICAgICAgdGhpcy5maWVsZC5WaXNpYmxlSWZcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbWl0X3NwZWNpYWxfY2hhcihldmVudCkge1xyXG4gICAgdmFyIGs7XHJcbiAgICBrID0gZXZlbnQua2V5Q29kZTsgLy8gICAgICAgICBrID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgaWYgKGsgPT0gMzQpIHtcclxuICAgICAgZXZlbnQua2V5Q29kZSA9IDA7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWEgaWwgRm9ybUdyb3VwIHBlciBsJ2FnZ2l1bnRhIGRpIHVuIG51b3ZvIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICogTWV0b2RvIHJpY2hpYW1hdG8gb2duaSB2b2x0YSBjaGUgY2FtYmlhIGlsIHRpcG8gZGVsIGNhbXBvIHNjZWx0byBvIHZpZW5lIGFnZ2l1bnRvL21vZGlmaWNhdG8gdW4gRmllbGRcclxuICAgKi9cclxuICBjcmVhdGVGaWVsZEZvcm0oKSB7XHJcbiAgICB0aGlzLmZpZWxkRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIExhYmVsOiBbXHJcbiAgICAgICAgdGhpcy5maWVsZC5MYWJlbCxcclxuICAgICAgICBbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeW2EtekEtWiBdKiRcIiksXHJcbiAgICAgICAgXSxcclxuICAgICAgXSxcclxuICAgICAgRGVzY3JpcHRpb246IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkRlc2NyaXB0aW9uLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIFJlYWRvbmx5OiBbdGhpcy5maWVsZC5SZWFkb25seV0sXHJcbiAgICAgIFJlcXVpcmVkOiBbdGhpcy5maWVsZC5SZXF1aXJlZF0sXHJcbiAgICAgIEZpZWxkVHlwZTogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRmllbGRUeXBlLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIERNTW9kdWxlOiBbbnVsbF0sICAgICAgXHJcbiAgICAgIERNRmllbGQ6IFtudWxsXSwgICAgICBcclxuICAgICAgRGF0YUdldHRlclR5cGU6IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBdLCAgICAgIFxyXG4gICAgICBDb2xTcGFuU2l6ZXM6IFt0aGlzLmZpZWxkLkNvbFNwYW5TaXplc10sXHJcbiAgICAgIEluTGlzdFZpZXc6IFt0aGlzLmZpZWxkLkluTGlzdFZpZXddLFxyXG4gICAgICBJbnZpc2liaWxpdHk6IFt0aGlzLmZpZWxkLkludmlzaWJpbGl0eV0sXHJcbiAgICAgIFZpc2libGVJZjogW3RoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIE1haW50YWluX1ZhbHVlOiBbdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZV0sXHJcbiAgICAgIFRvb2x0aXA6IFt0aGlzLmZpZWxkLlRvb2x0aXAsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgTGFiZWxzdHlsZUNTUzogW3RoaXMuZmllbGQuTGFiZWxzdHlsZUNTUywgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBGaWVsZHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEZvcm11bGE6IFt0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgRGF0YUdldHRlclZhbHVlOiBbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG5cclxuICAgICAgQW5zd2VyU3R5bGVMYWJlbHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEFuc3dlclN0eWxlRmllbGRzdHlsZUNTUzogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTUywgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBBbnN3ZXJTdHlsZVZpc2libGVJZjogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEFuc3dlclN0eWxlQ29sU3BhblNpemVzOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXNdLFxyXG4gICAgICBBbnN3ZXJTdHlsZUluTGlzdFZpZXc6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXddLFxyXG4gICAgICBBbnN3ZXJTdHlsZUludmlzaWJpbGl0eTogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuSW52aXNpYmlsaXR5XSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1GaWVsZHNHcm91cHMpIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5maWVsZC5GaWVsZEdyb3VwLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBxdWVzdGlvblBvbGwoY29udHJvbDogRm9ybUNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gYyfDqCB1biBGb3JtQ29udHJvbCBjaGUgw6ggdnVvdG8gY2hlIGRhIHByb2JsZW1pIChwcm9iYWJpbG1lbnRlIHR5cGUgRGF0YSwgY2FtcG8gRm9ybWF0bylcclxuICAgIGlmIChjb250cm9sLnZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKFxyXG4gICAgICAgICAgY29udHJvbC52YWx1ZSxcclxuICAgICAgICAgIGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBcIk1pc3NpbmcgUGFyZW50aGVzaXNcIjogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgc3RyaW5nU2FuaXRhaXplZFZhbGlkYXRvcihjb250cm9sOiBGb3JtQ29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBjJ8OoIHVuIEZvcm1Db250cm9sIGNoZSDDqCB2dW90byBjaGUgZGEgcHJvYmxlbWkgKHByb2JhYmlsbWVudGUgdHlwZSBEYXRhLCBjYW1wbyBGb3JtYXRvKVxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5zdHJpbmdDaGVja1BhcmVudGVzaXMoXHJcbiAgICAgICAgICBjb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgY29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IFwiTGEgZm9ybXVsYSBub24gw6ggdmFsaWRhXCI6IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIGdldEFsbEZvcm1WYWxpZGF0aW9uRXJyb3JzKCkge1xyXG4gIC8vICAgT2JqZWN0LmtleXModGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgLy8gICAgIGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPVxyXG4gIC8vICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuZ2V0KGtleSkuZXJyb3JzO1xyXG4gIC8vICAgICBpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcbiAgLy8gICAgICAgT2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaCgoa2V5RXJyb3IpID0+IHtcclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gIC8vICAgICAgICAgICBcIktleSBjb250cm9sOiBcIiArIGtleSArIFwiLCBrZXlFcnJvcjogXCIgKyBrZXlFcnJvciArIFwiLCBlcnIgdmFsdWU6IFwiLFxyXG4gIC8vICAgICAgICAgICBjb250cm9sRXJyb3JzW2tleUVycm9yXVxyXG4gIC8vICAgICAgICAgKTtcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gZGFpIG1hdC1lcnJvciBwZXIgcHJlbmRlcmUgZ2xpIGVycm9yaSBnZW5lcmF0aSByZWxhdGl2aSBhbCBjYW1wby5cclxuICAgKiBAcGFyYW0gY29udHJvbCDDqCBpbCBub21lIGRlbCBHcm91cENvbnRyb2wgZGkgY3VpIGxlZ2dlcmUgc2UgY2kgc29ubyBlcnJvcmlcclxuICAgKi9cclxuICBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycyhjb250cm9sOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb250cm9sID09IFwiTGFiZWxcIikgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMnLCB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxcIl0pO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPVxyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xdLmVycm9ycztcclxuICAgIGxldCBlcnJvcnMgPSBbXTtcclxuICAgIGxldCB2YWx1ZXMgPSBbXTtcclxuICAgIGlmIChjb250cm9sRXJyb3JzICE9IG51bGwpIHtcclxuICAgICAgT2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaCgoa2V5RXJyb3IpID0+IHtcclxuICAgICAgICBlcnJvcnMucHVzaChrZXlFcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdjb250cm9sOiAnLCBjb250cm9sKTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZXJyb3JzOiAnLCBlcnJvcnMpO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2YWx1ZXM6ICcsIHZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXJyb3JzLmpvaW4oXCIsIFwiKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvbkZpZWxkVHlwZUNoYW5nZVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBxdWFuZG8gY2FtYmlhIGlsIEZpZWxkVHlwZSBkZWwgQmFzZUZpZWxkIGNoZSBzaSBzdGEgYWdnaXVuZ2VuZG8vbW9kaWZpY2FuZG8uXHJcbiAgICogUmljcmVhIGwnb2dnZXR0byBmaWVsZCBwb3BvbGFuZG8gc29sbyBsZSBwcm9wcmlldMOgIGRlbCBCYXNlRmllbGQgaW5zZXJpdGUgZGFsbCd1dGVudGVcclxuICAgKiAocXVlbGxlIGNvbXVuaSBhIHR1dHRlIGxlIHRpcG9sb2dpZSBkaSBjYW1wbyksIHJpY3JlYSBsYSBmb3JtIGUsIGluIGJhc2UgYWwgRmllbGRUeXBlIHNjZWx0byxcclxuICAgKiBhZ2dpdW5nZSBhbGxhIGZvcm0gaSBGb3JtQ29udHJvbCBuZWNlc3NhcmkgZSBzZWxlemlvbmEgaWwgdGVtcGxhdGUgY29ycmV0dG8gZGEgdXNhcmUuXHJcbiAgICogQHBhcmFtIHJlc3RvcmVGaWVsZCBTZSBUUlVFIHJpcHJpc3RpbmEgaSB2YWxvcmkgYmFzZSAoZXJlZGl0YXRpIGRhbCBtb2RlbGxvIEJhc2VGaWVsZCkgZGVsIGNhbXBvIGFnZ2l1bnRvL21vZGlmaWNhdG9cclxuICAgKi9cclxuICBvbkZpZWxkVHlwZUNoYW5nZShyZXN0b3JlRmllbGQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAocmVzdG9yZUZpZWxkKSB7XHJcbiAgICAgIHRoaXMucmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNyZWF0ZUZpZWxkRm9ybSgpO1xyXG4gICAgdGhpcy5vbkNvbFNwYW5TaXplU2VsZWN0KCk7XHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgQmFzZUZpZWxkKS5Jbkxpc3RWaWV3ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBCYXNlRmllbGQpLkludmlzaWJpbGl0eSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW52aXNpYmlsaXR5ID0gRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPO1xyXG4gICAgfSAgICBcclxuICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gbnVsbDtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcblxyXG4gICAgICAvLyNyZWdpb24gQ0FNUE8gREkgVEVTVE9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWljcm9waG9uZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLk1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJUZXh0TWFza1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLlRleHRNYXNrKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhMZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluTGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWluTGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pY3JvcGhvbmVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NaWNyb3Bob25lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLnRleHRGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIENBTVBPIERJIFRFU1RPXHJcblxyXG4gICAgICAvLyNyZWdpb24gTEFCRUxcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFdGljaGV0dGEnXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuRXRpY2hldHRhID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRXRpY2hldHRhXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIExhYmVsRmllbGQpLkV0aWNoZXR0YSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5sYWJlbEZpZWxkRm9ybVRlbXBsYXRlOyAgIFxyXG4gICAgICAgIGJyZWFrOyAgICAgXHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBMQUJFTFxyXG5cclxuICAgICAgLy8jcmVnaW9uIEJVVFRPTlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0JvdHRvbmUgYXppb25lJ106XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5CdXR0b25Db2RlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuQnV0dG9uQ29kZSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkNvZGljZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuQnV0dG9uQ29kZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLkJ1dHRvbkNvZGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5CdXR0b25Db2RlID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSWNvbmFcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLkljb24pXHJcbiAgICAgICAgKTsgICAgICAgIFxyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5idXR0b25GaWVsZEZvcm1UZW1wbGF0ZTsgICBcclxuICAgICAgICBicmVhazsgICAgIFxyXG4gICAgICAvLyNlbmRyZWdpb24gQlVUVE9OICAgICAgXHJcblxyXG4gICAgICAvLyNyZWdpb24gQVJFQSBESSBURVNUTyBcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWljcm9waG9uZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLk1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUm93c1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5Sb3dzLCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhMZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaW5MZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaWNyb3Bob25lXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pY3JvcGhvbmUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMudGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEFSRUEgREkgVEVTVE8gXHJcblxyXG4gICAgICAvLyNyZWdpb24gQk9PTEVBTk9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkJvb2xlYW5vOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzVHJpc3RhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgQm9vbGVhbkZpZWxkKS5Jc1RyaXN0YXRlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUHJlc2V0YXRpb25UeXBlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBCb29sZWFuRmllbGQpLlByZXNldGF0aW9uVHlwZSxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEJPT0xFQU5PXHJcblxyXG4gICAgICAvLyNyZWdpb24gREFUQSBFL0kgT1JBXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzT25seURhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pbkRhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuTWluRGF0ZSxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heERhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuTWF4RGF0ZSxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkRhdGVGb3JtYXRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmRhdGVGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIERBVEEgRS9JIE9SQVxyXG5cclxuICAgICAgLy8jcmVnaW9uIENBTVBPIE5VTUVSSUNPXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLklzSW50ZWdlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzSW50ZWdlclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcilcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pblZhbHVlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuTWluVmFsdWUsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiKSwgLy8oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhWYWx1ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLk1heFZhbHVlLCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIiksIC8vKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRGVjaW1hbFNlcGFyYXRvclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5EZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICAgICAgICBbdGhpcy5xdWVzdGlvblBvbGwsIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIC0vJywuXy9cXFxcXjw+XStcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJEZWNpbWFsUHJlY2lzaW9uXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLkRlY2ltYWxQcmVjaXNpb24sXHJcbiAgICAgICAgICAgIFt0aGlzLnF1ZXN0aW9uUG9sbCwgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKyRcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJUaG91c2FuZHNTZXBhcmF0b3JcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuVGhvdXNhbmRzU2VwYXJhdG9yLFxyXG4gICAgICAgICAgICBbdGhpcy5xdWVzdGlvblBvbGwsIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIC0vJywuXy9cXFxcXjw+XStcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJDdXJyZW5jeVN5bWJvbFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1lYXN1cmVVbml0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLk1lYXN1cmVVbml0LFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLm51bWVyaWNGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIENBTVBPIE5VTUVSSUNPXHJcblxyXG4gICAgICAvLyNyZWdpb24gQUxMRUdBVE9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvOlxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiQWxsb3dlZEV4dGVuc2lvbnNcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuQWxsb3dlZEV4dGVuc2lvbnNcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNNdWx0aUF0dGFjaFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2gpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQUxMRUdBVE9cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBJTU1BR0lORVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudCA9PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nID09IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4LFxyXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCAhPSBudWxsID8gKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4IDogMTI4O1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkVuYWJsZURyYXdpbmdcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uID0gbmV3IEF0dGFjaG1lbnRGaWVsZCgpO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRW5hYmxlRHJhd2luZ1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gSW1wb3N0byBpIEZvcm1Db250cm9sIHZhcmlhYmlsaS5cclxuICAgICAgICB0aGlzLm9uSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmltYWdlRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgKi9cclxuICAgICAgLy8jZW5kcmVnaW9uIElNTUFHSU5FXHJcblxyXG4gICAgICAvLyNyZWdpb24gRUxFTkNPIEdFTkVSSUNPXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkluTGlzdFZpZXcgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5JbnZpc2liaWxpdHkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE87XHJcbiAgICAgICAgfSAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNNdWx0aUNob2ljaGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUHJlc2VudGF0aW9uTW9kZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlByZXNlbnRhdGlvbk1vZGUsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5saXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBFTEVOQ08gR0VORVJJQ09cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBFTEVOQ08gSU1NQUdJTklcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzTXVsdGlDaG9pY2hlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuSXNNdWx0aUNob2ljaGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4LFxyXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApOyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmltYWdlRmllbGRTZWxlY3RvckZvcm1UZW1wbGF0ZTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBFTEVOQ08gSU1NQUdJTkkgICAgIFxyXG5cclxuICAgICAgLy8jcmVnaW9uIElNTUFHSU5FIENPTiBNQVJLRVJcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmUgY29uIG1hcmtlcnNcIl06XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCxcclxuICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5tYXgoNDMyMCldXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTsgICAgICAgIFxyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZVdpdGhNYXJrZXJzRmllbGRGb3JtVGVtcGxhdGU7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gSU1NQUdJTkUgQ09OIE1BUktFUiAgICAgICAgXHJcblxyXG4gICAgICAvLyNyZWdpb24gTE9PS1VQXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Mb29rdXA6XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRW50aXR5U291cmNlTmFtZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLkVudGl0eVNvdXJjZU5hbWUsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlVzZUFzR2V0T3JEaXNjYXJkXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIExvb2t1cEZpZWxkKS5Vc2VBc0dldE9yRGlzY2FyZClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5sb29rdXBGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIExPT0tVUFxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBbXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5BbGxlZ2F0byxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkltbWFnaW5lLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSxcclxuICAgICAgXS5pbmNsdWRlcyh0aGlzLmZpZWxkLkZpZWxkVHlwZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybXVsYVwiXS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbkxpc3RWaWV3XCJdLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkludmlzaWJpbGl0eVwiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybXVsYVwiXS5lbmFibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkluTGlzdFZpZXdcIl0uZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbnZpc2liaWxpdHlcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIFtcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW0uSW1tYWdpbmUsXHJcbiAgICAgICAgRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl0sXHJcbiAgICAgIF0uaW5jbHVkZXModGhpcy5maWVsZC5GaWVsZFR5cGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRmllbGRzdHlsZUNTU1wiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5lbmFibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZpZWxkc3R5bGVDU1NcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoW0ZpZWxkVHlwZUVudW0uQm9vbGVhbm9dLmluY2x1ZGVzKHRoaXMuZmllbGQuRmllbGRUeXBlKSkge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkRhdGFHZXR0ZXJUeXBlQ2hhbmdlXHJcbiAgYXN5bmMgb25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpe1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0RhIG1vZHVsbyBkaW5hbWljbyddICYmIHRoaXMuZm9ybXMubGVuZ3RoID09IDApe1xyXG4gICAgICB0aGlzLmdldEFsbE1vZHVsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IERhdGFHZXR0ZXJUeXBlRW51bS5Gb3JtdWxhKXtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuRE1Nb2R1bGUgPSBudWxsO1xyXG4gICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRGF0YUdldHRlclR5cGVDaGFuZ2VcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRlbGxhIHByb3ByaWV0w6AgSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50IG5lbCBjYXNvXHJcbiAgICogZGkgY2FtcGkgZGkgdGlwbyBJbW1hZ2luZS4gU2UgVFJVRSBhbGxvcmEgcmltdW92ZSBpIEZvcm1Db250cm9sIHBlciBsZSBwcm9wcmlldMOgIElzTXVsdGlBdHRhY2hcclxuICAgKiBlIEFsbG93ZWRFeHRlbnNpb25zIGUgYWdnaXVuZ2UgaSBGb3JtQ29udHJvbCBwZXIgbGUgcHJvcHJpZXTDoCBJbWdOYW1lIGUgQ29udGV4dHVhbEF0dGFjaG1lbnQsXHJcbiAgICogYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgb25JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoKSB7XHJcbiAgICBcclxuICAgIC8qXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWdOYW1lID0gbnVsbDtcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uQWxsb3dlZEV4dGVuc2lvbnMgPSBbXTtcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCA9IGZhbHNlO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQgPSBudWxsO1xyXG5cclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnQpIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiSXNNdWx0aUF0dGFjaFwiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiQWxsb3dlZEV4dGVuc2lvbnNcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkltZ05hbWVcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuSW1nTmFtZSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICApXHJcbiAgICAgICk7ICAgICAgXHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkNvbnRleHR1YWxBdHRhY2htZW50XCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50LFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkltZ05hbWVcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkNvbnRleHR1YWxBdHRhY2htZW50XCIpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJJc011bHRpQXR0YWNoXCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiQWxsb3dlZEV4dGVuc2lvbnNcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5BbGxvd2VkRXh0ZW5zaW9uc1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgICovXHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbnRlcmNldHRhcmUgbCdhZ2dpdW50YSBkaSB1biBhbGxlZ2F0byBuZWkgY2FtcGkgZGkgdGlwbyBJbW1hZ2luZSBwZXIgYWdnaW9ybmFyZVxyXG4gICAqIGlsIHZhbG9yZSBkZWxsYSBwcm9wcmlldMOgIENvbnRleHR1YWxBdHRhY2htZW50IGUgbGEgdmFsaWRhemlvbmUgZGVsIHJlbGF0aXZvIEZvcm1Db250cm9sLlxyXG4gICAqIEBwYXJhbSBldmVudCBBcnJheSBjb250ZW5lbnRlIGwnZWxlbmNvIGFnZ2lvcm5hdG8gZGVnbGkgYWxsZWdhdGkgY2FyaWNhdGkgKG5lbCBub3N0cm8gY2FzbyBuZSBjb250aWVuZSBhbCBwacO5IDEpLlxyXG4gICAqL1xyXG4gIGNhdGNoQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoZXZlbnQ6IEFycmF5PElBdHRhY2htZW50RFRPPikge1xyXG4gICAgLypcclxuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50ID0gZXZlbnRbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiQ29udGV4dHVhbEF0dGFjaG1lbnRcIl0uc2V0VmFsdWUoXHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50XHJcbiAgICApO1xyXG4gICAgKi9cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbGxhIHNlbGV6aW9uZSBkaSB1bmEgY2xhc3NlIG5lbGxhIHNlbGVjdCBwZXIgbGUgY29sb25uZSBkaSBib290c3RyYXBcclxuICAgKiBkYSB1c2FyZSBuZWxsYSB2aXN1YWxpenphemlvbmUgZGVsIGNhbXBvLiBRdWVzdGEgZnVuemlvbmUgbWFuaXBvbGEgbGEgc29yZ2VudGUgZGF0aSBwZXJcclxuICAgKiBsYSBlcXAtc2VsZWN0IGluIG1vZG8gZGEgZXNjbHVkZXJlIGkgdmFsb3JpIGRlbGwnZW51bWVyYXRvcmUgY2hlIGZhbm5vIHJpZmVyaW1lbnRvIGFkXHJcbiAgICogdW5hIGxhcmdoZXp6YSBkaSBzY2hlcm1vIGdpw6Agc2VsZXppb25hdGEuIEVzZW1waW86IHBlciBnbGkgc2NoZXJtaSBwaWNjb2xpIChzbSkgbCd1dGVudGVcclxuICAgKiBzZWxlemlvbmEgbGEgY2xhc3NlIFwiY29sLXNtLTZcIiwgYWwgY2hhbmdlIGRlbCB2YWxvcmUgcXVlc3RvIG1ldG9kbyByaW11b3ZlIGRhbGxhIHNlbGVjdFxyXG4gICAqIHR1dHRpIGdsaSBhbHRyaSB2YWxvcmkgcGVyIGxhIGdyYW5kZXp6YSBkaSBzY2hlcm1vIHNlbGV6aW9uYXRhLlxyXG4gICAqL1xyXG4gIG9uQ29sU3BhblNpemVTZWxlY3QoKSB7XHJcbiAgICAvLyBSZWN1cGVybyBsJ2FycmF5IGRlZ2xpIG9nZ2V0dGkgY2hpYXZlLXZhbG9yZSBjaGUgcmFwcHJlc2V0YSBsJ2VudW1lcmF0b3JlXHJcbiAgICBsZXQgY29sU2l6ZUNsYXNzRW51bUFycmF5ID0gdGhpcy5lbnVtSGVscGVyLmdldEVudW1BcnJheShcclxuICAgICAgQ29sU3BhblNpemVzRW51bSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgICAvLyBDb3N0cnVpc2NvIGwnYXJyYXkgZGVsbGUgY2xhc3NpIHNlbGV6aW9uYXRlIGRhbGwndXRlbnRlIGluIGZvcm1hdG8gc3RyaW5nYVxyXG4gICAgbGV0IHNlbGVjdGVkRGltZW5zaW9uc0NvbXBpbGF6aW9uZTogQXJyYXk8c3RyaW5nPiA9IHRoaXMuZmllbGQuQ29sU3BhblNpemVzXHJcbiAgICAgID8gdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXMubWFwKChjb2wpID0+IENvbFNwYW5TaXplc0VudW1bY29sXSlcclxuICAgICAgOiBbXTtcclxuICAgICAgbGV0IHNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXNcclxuICAgICAgPyB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcy5tYXAoKGNvbCkgPT4gQ29sU3BhblNpemVzRW51bVtjb2xdKVxyXG4gICAgICA6IFtdOyAgICAgIFxyXG4gICAgLy8gRmlsdHJvIGkgdmFsb3JpIG90dGVudXRpIGRhbGwnZW51bWVyYXRvcmUgcGVyIGVzY2x1ZGVyZSB0dXR0aSBpIHZhbG9yaSBwZXIgbGVcclxuICAgIC8vIGdyYW5kZXp6ZSBkaSBzY2hlcm1vIGdpw6Agc2VsZXppb25hdGVhZCBlc2NsdXNpb25lIGRlaSB2YWxvcmkgc2VsZXppb25hdGkuXHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc0NvbXBpbGF6aW9uZSA9IGNvbFNpemVDbGFzc0VudW1BcnJheS5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZTogeyBrZXk6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9KSA9PlxyXG4gICAgICAgICFzZWxlY3RlZERpbWVuc2lvbnNDb21waWxhemlvbmUuZmluZChcclxuICAgICAgICAgIChjb2wpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKGNvbC5zdWJzdHJpbmcoNCwgNikpICYmIHZhbHVlLnZhbHVlICE9IGNvbFxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhID0gY29sU2l6ZUNsYXNzRW51bUFycmF5LmZpbHRlcihcclxuICAgICAgKHZhbHVlOiB7IGtleTogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH0pID0+XHJcbiAgICAgICAgIXNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhLmZpbmQoXHJcbiAgICAgICAgICAoY29sKSA9PlxyXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS5pbmNsdWRlcyhjb2wuc3Vic3RyaW5nKDQsIDYpKSAmJiB2YWx1ZS52YWx1ZSAhPSBjb2xcclxuICAgICAgICApXHJcbiAgICApOyAgICBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHRpcG8gZGkgdmlzdWFsaXp6YXppb25lIHNjZWx0YSBwZXIgaSBjYW1waSBkaSB0aXBvIGVsZW5jbyBnZW5lcmljby5cclxuICAgKiBTZSB2aWVuZSBzY2VsdGEgbGEgdmlzdWFsaXp6YXppb25lIGFkIGltbWFnaW5pIHN2dW90YSBsYSBsaXN0YSBkZWxsZSBjb3BwaWUgY2hpYXZlLXZhbG9yZSBpbnNlcml0ZVxyXG4gICAqIGluIHByZWNlZGVuemEsIGFsdHJpbWVudGkgc3Z1b3RhIGxhIGxpc3RhIGRlbGxlIGltbWFnaW5pIGNhcmljYXRlLlxyXG4gICAqL1xyXG4gIG9uUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpIHtcclxuICAgIGlmKHRoaXMuZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10pe1xyXG4gICAgICB0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgc2FsdmF0YWdnaW8gZGVnbGkgYWxsZWdhdGkgcXVhbmRvIHZpZW5lIGNvbmZpZ3VyYXRvIHVuIGNhbXBvIGRpIHRpcG8gXCJFbGVuY28gZ2VuZXJpY29cIlxyXG4gICAqIGNvbiBpbCB0aXBvIGRpIHZpc3VhbGl6emF6aW9uZSBhZCBpbW1hZ2luaS4gSW50ZXJjZXR0YSBsJ2VsZW5jbyBhZ2dpb3JuYXRvIGRlbGxlIGltbWFnaW5pIGNhcmljYXRlIGUgbG9cclxuICAgKiBtZW1vcml6emEgbmVsbCdvZ2dldHRvIGZpZWxkIGNvcnJlbnRlLlxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50cyBBcnJheSBhZ2dpb3JuYXRvIGRlZ2xpIGFsbGVnYXRpIGNhcmljYXRpLlxyXG4gICAqL1xyXG4gIGNhdGNoQnV0dG9uSW1hZ2VzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0ID0gYXR0YWNobWVudHMgYXMgQXJyYXk8RHluQXR0YWNobWVudD47XHJcblxyXG4gICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQ6IER5bkF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgICB2YXIgbXlCYXNlNjQgPSBcImRhdGE6aW1hZ2UvXCIrYXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgYXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgICBpbWcuc3JjID0gbXlCYXNlNjQ7XHJcbiAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50LkltYWdlV2lkdGhQeCA9IGltZy53aWR0aDtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50LkltYWdlSGVpZ2h0UHggPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLkVMRU5DT19JTU1BR0lOSTtcclxuICAgICAgICAgICAgICBpZiAoc2VsZi5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpeyBzZWxmLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICB9XHJcblxyXG4gIGNhdGNoQnV0dG9uSW1hZ2VDaGFuZ2UoYXR0YWNobWVudHM6IEFycmF5PElBdHRhY2htZW50RFRPPikge1xyXG5cclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiK3RoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSAgICAgIFxyXG4gICAgICBcclxuICB9ICBcclxuXHJcbiAgY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiK3RoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FX0NPTl9NQVJLRVJTO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSAgICAgIFxyXG4gICAgICBcclxuICB9ICAgIFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gYWwga2V5dXAgZGVnbGkgaW5wdXQgdGVzdHVhbGkgY2hlIHByZXZlZG9ubyBsJ2FnZ2l1bnRhIGRlbCB2YWxvcmUgaW5zZXJpdG8gaW4gdW4gYXJyYXkuXHJcbiAgICogU2UgbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8sIGluIGJhc2UgYWwgdGlwbyBkaSBjYW1wbyBjaGUgc3RhIGluc2VyZW5kby9tb2RpZmljYW5kbywgcXVlc3RvIG1ldG9kb1xyXG4gICAqIGFnZ2l1bmdlIGlsIHZhbG9yZSBpbnNlcml0byBkYWxsJ3V0ZW50ZSBuZWxsYSBsaXN0YSBkaSBzdHJpbmdoZSBjb3JyZXR0YSAoaW4gaW5wdXQgdmllbmUgcGFzc2F0byBpbCBub21lXHJcbiAgICogZGVsbGEgcHJvcHJpZXTDoCBpbiBjdWkgaW5zZXJpcmUgbGEgc3RyaW5nYSkuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgZGVsbCd1dGVudGVcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBkZWwgZmllbGQgaW4gY3VpIGluc2VyaXJlIGxhIHN0cmluZ2EgZGlnaXRhdGEuXHJcbiAgICovXHJcbiAgb25NdWx0aVNlbGVjdElucHV0S2V5dXAoZXZlbnQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmllbGRbcHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkW3Byb3BlcnR5TmFtZV0gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWVsZFtwcm9wZXJ0eU5hbWVdLnB1c2goZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdOlxyXG4gICAgICAgICAgICBicmVhazsgICAgICAgICAgXHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgICAgaWYgKCF0aGlzLmtleVZhbHVlT2JqZWN0LmtleSB8fCAhdGhpcy5rZXlWYWx1ZU9iamVjdC52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1t0aGlzLmtleVZhbHVlT2JqZWN0LmtleV0gPVxyXG4gICAgICAgICAgICB0aGlzLmtleVZhbHVlT2JqZWN0LnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5rZXlWYWx1ZU9iamVjdCA9IHsga2V5OiBcIlwiLCB2YWx1ZTogXCJcIiB9O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcGVyIG1vc3RyYXJlIGNvbWUgZWxlbmNvIGxlIG9wemlvbmkgYWdnaXVudGUgaW4gdW4gY2FtcG8gZGkgdGlwbyBcIkVsZW5jbyBnZW5lcmljb1wiLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGVsIHRpcG8geyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9IGNvbiBpIHZhbG9yaSBpbnNlcml0aSBkYWxsJ3V0ZW50ZS5cclxuICAgKi9cclxuICBnZXREaWN0aW9uYXJ5S2V5VmFsdWUoKSB7XHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5tYXAoKGspID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAga2V5OiBrLFxyXG4gICAgICAgICAgdmFsdWU6ICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW5hIG9wemlvbmUgYWdnaXVudGEgYWwgY2FtcG8gZGkgdGlwbyBcIkVsZW5jbyBnZW5lcmljb1wiXHJcbiAgICogQHBhcmFtIGtleSBOb21lIGRlbGxhIGNoaWF2ZSBkYSByaW11b3ZlcmVcclxuICAgKi9cclxuICBkZWxldGVLZXlGcm9tRGljdGlvbmFyeShrZXk6IHN0cmluZykge1xyXG4gICAgZGVsZXRlICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tleV07XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb3BlbkZvcm11bGFEaWFsb2dcclxuICBvcGVuRm9ybXVsYURpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLkZvcm11bGEsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuRm9ybXVsYSA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuRm9ybXVsYURpYWxvZ1xyXG5cclxuICAvLyNyZWdpb24gb3BlblZpc2libGVJZkRpYWxvZ1xyXG4gIG9wZW5WaXNpYmxlSWZEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLlZpc2libGVJZixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLlZpc2libGVJZiA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuVmlzaWJsZUlmRGlhbG9nXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2dcclxuICBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2dcclxuXHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgLy8gYWxlcnQoXCJlcnJvcmUhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGRpc2FibGVTYXZlRmllbGRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGRpc2FiaWxpdGFyZSBpbCBwdWxzYW50ZSBwZXIgc2FsdmFyZSBpbCBjYW1wbyBpbnNlcml0by9tb2RpZmljYXRvLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIGJvb2xlYW5vLCBzZSB0cnVlIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGRpc2FiaWxpdGF0by5cclxuICAgKi9cclxuICBkaXNhYmxlU2F2ZUZpZWxkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkRm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgIT0gXCJcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKCEodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykge1xyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICE9IFwiXCIpe1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzIHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycy5sZW5ndGggPT09IDBcclxuICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06IFxyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAhKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdCB8fFxyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKFxyXG4gICAgICAgICAgKGkpID0+IChpLkJ1dHRvbktleSA9PSBudWxsIHx8IGkuQnV0dG9uS2V5ID09PSBcInVuZGVmaW5lZFwiIHx8IGkuQnV0dG9uS2V5ID09ICcnKSB8fCAoaS5CdXR0b25WYWx1ZSA9PSBudWxsIHx8IGkuQnV0dG9uVmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHwgaS5CdXR0b25WYWx1ZSA9PSAnJylcclxuICAgICAgICApICE9IG51bGxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Mb29rdXA6XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICEodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuRmllbGROYW1lcyB8fFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLkZpZWxkTmFtZXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBkaXNhYmxlU2F2ZUZpZWxkXHJcblxyXG4gIC8vI3JlZ2lvbiBzYXZlQW5kRXhpdEFkZEZpZWxkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGlsIGNhbXBvIGluc2VyaXRvL21vZGlmaWNhdG8uXHJcbiAgICogU2Ugw6ggc3RhdG8gaW5zZXJpdG8gdW4gZmllbGQgY29uIGxhIHN0ZXNzYSBsYWJlbCB2aWVuZSBnZW5lcmF0byB1biBlcnJvcmUgKGxlIGxhYmVsIGRldm9ubyBlc3NlcmUgdW5pdm9jaGUpLlxyXG4gICAqIFVuYSB2b2x0YSBhZ2dpdW50by9hZ2dpb3JuYXRvIGlsIGNhbXBvIG5lbGwnZWxlbmNvIGRlaSBGaWVsZCBkZWxsYSBGb3JtIGNoaXVkZSBpbCBkaWFsb2cgZSByaWNhcmljYSBsYSB0YWJlbGxhXHJcbiAgICogY2hlIG1vc3RyYSBsJ2VsZW5jbyBkZWkgY2FtcGkgYWdnaXVudGkgYWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVBbmRFeGl0QWRkRmllbGQoc2F2ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG4gICAgaWYgKHNhdmUpIHtcclxuICAgICAgdGhpcy5maWVsZC5OYW1lPXRoaXMuZmllbGQuTGFiZWw7IFxyXG4gICAgICAvLyByZXRyb2NvbXBhdGliaWxpdMOgIGNvbiB2YWx1ZXBhaXJzIHBlciBFbGVuY28gR2VuZXJpY29cclxuICAgICAgaWYodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXSkge1xyXG4gICAgICAgIGlmKCgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuRm9ybXVsYSAmJiAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuRm9ybXVsYSAhPSBcIlwiKSB8fCAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICYmICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAhPSBcIlwiKSl7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl0pIHtcclxuICAgICAgICBpZigoKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5sZW5ndGggPiAwKSl7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgICAgYXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uSW1tYWdpbmUpIHtcclxuICAgICAgICBpZigoKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudCAhPSBudWxsKSl7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4ID0gKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfSAgICAgIFxyXG4gICAgICBpZih0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmUgY29uIG1hcmtlcnNcIl0pIHtcclxuICAgICAgICBpZigoKHRoaXMuZmllbGQgYXMgSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkKS5EeW5BdHRhY2htZW50ICE9IG51bGwpKXtcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuRHluQXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfSAgICBcclxuICAgICAgaWYodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkJvdHRvbmUgYXppb25lXCJdKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5mb3JtdWxhc1RlbXAgIT0gbnVsbCkpe1xyXG5cclxuICAgICAgICAgIHZhciBmb3JtdWxhcyA9ICh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5mb3JtdWxhc1RlbXA7XHJcblxyXG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZvcm11bGFzKTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbMF07XHJcbiAgICAgICAgICAgIHZhciBrdHY6IEtleVR5cGVWYWx1ZSA9IG5ldyBLZXlUeXBlVmFsdWUoKTtcclxuICAgICAgICAgICAga3R2LmtleSA9IGtleTtcclxuICAgICAgICAgICAga3R2LnRvb2x0aXAgPSBmb3JtdWxhc1trZXldLnRvb2x0aXA7XHJcbiAgICAgICAgICAgIGt0di50eXBlID0gZm9ybXVsYXNba2V5XS50eXBlO1xyXG4gICAgICAgICAgICBrdHYudmFsdWUgPSBmb3JtdWxhc1trZXldLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuZm9ybXVsYXMgPSBrdHY7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSAgICAgICAgICBcclxuXHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2FkZC1mb3JtLWZpZWxkIHNhdmUnLCB0aGlzLmZpZWxkKVxyXG4gICAgICB0aGlzLnNhdmVGaWVsZEV2ZW50LmVtaXQodGhpcy5maWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVGaWVsZEV2ZW50LmVtaXQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzYXZlQW5kRXhpdEFkZEZpZWxkXHJcblxyXG4gIC8vI3JlZ2lvbiByZXN0b3JlQmFzZUZpZWxkUHJvcGVydGllc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmlwcmlzdGluYXJlIGwnb2dnZXR0byBmaWVsZCBhbCBjYW1iaW8gZGVsIHRpcG8gc2VsZXppb25hdG8uXHJcbiAgICogTGFzY2lhIHZhbG9yaXp6YXRlIHNvbG8gbGUgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gQmFzZUZpZWxkIGNvbXVuZSBhIHR1dHRpIGkgdGlwaSBkaSBjYW1wby5cclxuICAgKi9cclxuICBwcml2YXRlIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQpIHtcclxuICAgICAgY29uc3QgdG1wQmFzZUZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpZWxkKSk7XHJcbiAgICAgIHRoaXMuZmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMuZmllbGQuTGFiZWwgPSB0bXBCYXNlRmllbGQuTGFiZWw7XHJcbiAgICAgIHRoaXMuZmllbGQuRGVzY3JpcHRpb24gPSB0bXBCYXNlRmllbGQuRGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuZmllbGQuUmVxdWlyZWQgPSB0bXBCYXNlRmllbGQuUmVxdWlyZWQ7XHJcbiAgICAgIHRoaXMuZmllbGQuRmllbGRUeXBlID0gdG1wQmFzZUZpZWxkLkZpZWxkVHlwZTtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gdG1wQmFzZUZpZWxkLkZvcm11bGE7XHJcbiAgICAgIHRoaXMuZmllbGQuQ29sU3BhblNpemVzID0gdG1wQmFzZUZpZWxkLkNvbFNwYW5TaXplcztcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gdG1wQmFzZUZpZWxkLkluTGlzdFZpZXc7XHJcbiAgICAgIHRoaXMuZmllbGQuSW52aXNpYmlsaXR5ID0gdG1wQmFzZUZpZWxkLkludmlzaWJpbGl0eTtcclxuICAgICAgdGhpcy5maWVsZC5Ub29sdGlwID0gdG1wQmFzZUZpZWxkLlRvb2x0aXA7XHJcbiAgICAgIHRoaXMuZmllbGQuUmVhZG9ubHkgPSB0bXBCYXNlRmllbGQuUmVhZG9ubHk7XHJcbiAgICAgIHRoaXMuZmllbGQuRmllbGRHcm91cCA9IHRtcEJhc2VGaWVsZC5GaWVsZEdyb3VwO1xyXG4gICAgICB0aGlzLmZpZWxkLlZpc2libGVJZiA9IHRtcEJhc2VGaWVsZC5WaXNpYmxlSWY7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiByZXN0b3JlQmFzZUZpZWxkUHJvcGVydGllc1xyXG5cclxuICBjb3VudFZhbHVlUGFpcnModmFsdWVQYWlycyk6IG51bWJlcntcclxuICAgIGlmKHZhbHVlUGFpcnMpe1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWVQYWlycykubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVDb2x1bW5zKCl7XHJcblxyXG4gICAgLy8gTGlzdGEgR2VuZXJpY2EgZGkgaW1tYWdpbmlcclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcyA9IFtdO1xyXG5cclxuICAgICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICAgIGtleTogJ2FjdGlvbicsIGRpc3BsYXk6ICcnLCB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sIGJ1dHRvbk1lbnVJY29uOiAnbW9yZV92ZXJ0Jywgc3R5bGVzOiB7IGZsZXg6ICcwIDAgNiUnIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAgeyBuYW1lOiAnRWxpbWluYScsIGljb246ICdkZWxldGUnLCBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlTGlzdEltYWdlKGVsZW1lbnQsIGluZGV4LCBjb2wpIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+IHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmluZGV4T2YoZWxlbWVudCkgPj0gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdXHJcbiAgICAgIH0pOyBcclxuXHJcbiAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgIGtleTpcIkZpbGVEYXRhQmFzZTY0XCIsXHJcbiAgICAgIGRpc3BsYXk6IFwiSW1tYWdpbmVcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZSxcclxuICAgIH0pOyAgICBcclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiQnV0dG9uS2V5XCIsXHJcbiAgICAgIGRpc3BsYXk6IFwiQ2hpYXZlKlwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuR2VuZXJpY0xpc3RJbWFnZXNLZXlUZW1wbGF0ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJCdXR0b25WYWx1ZVwiLFxyXG4gICAgICBkaXNwbGF5OiBcIlZhbG9yZSpcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZSxcclxuICAgIH0pOyAgIFxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJJbWFnZVdpZHRoUHhcIixcclxuICAgICAgZGlzcGxheTogXCJMYXJnaGV6emFcIlxyXG4gICAgfSk7ICAgICBcclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiSW1hZ2VIZWlnaHRQeFwiLFxyXG4gICAgICBkaXNwbGF5OiBcIkFsdGV6emFcIlxyXG4gICAgfSk7ICAgICAgICAgICAgXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IER5bkF0dGFjaG1lbnQsXHJcbiAgICBtb3ZlVXA6IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICBjb25zdCBlbmRpbmdJbmRleCA9IHN0YXJ0aW5nSW5kZXggKyAobW92ZVVwID8gLTEgOiAxKTtcclxuXHJcbiAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LnNwbGljZShzdGFydGluZ0luZGV4LCAxKTtcclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKXtcclxuICAgIHRoaXMucmVzaXplZEltYWdlc0hlaWdodFB4ID0gdGhpcy5maWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHg7XHJcbiAgfVxyXG5cclxuICBkZWxldGVMaXN0SW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQsIGk6IG51bWJlciwgY29sOiBudW1iZXIpe1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oJ0VsaW1pbmFyZSBxdWVzdGEgaW1tYWdpbmU/JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKGVsLm9yaWdpbmFsSW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG5cclxuICAgICB9LCBmYWxzZSwgJ1JpY2hpZXN0YSBjb25mZXJtYScpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQpe1xyXG4gICAgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIERCIEdFVFRFUlxyXG4gIG9wZW5EQkdldHRlcigpe1xyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiAhdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy51c2VEeW5hbWljTW9kdWxlTW9jayl7XHJcblxyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5DT01QT1NFUjtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcubG9hZFF1ZXJ5U3RhdHVzZXMgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5kaWFsb2dRRVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dRRSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICBwYW5lbENsYXNzOiAncXVlcnktZWRpdG9yLW1vZGFsJyxcclxuICAgICAgICB3aWR0aDogJzkwJSdcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoJy4vYXNzZXRzL21vY2t1cHMvbW9ja2VkRnJvbVF1ZXJ5RWRpdG9yX1FVRVJZX1dJVEhfUVVFU1RJT04udHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKS5QYXJhbXMpO1xyXG4gICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VRRU1vZGFsKCl7XHJcbiAgICB0aGlzLmRpYWxvZ1FFUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwic2VuZC1vdXRcIikgIT0gLTEpeyB0aGlzLm91dC5lbWl0KGV2KTsgfVxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcImNsb3NlLW1vZGFsXCIpICE9IC0xKXsgdGhpcy5jbG9zZVFFTW9kYWwoKTsgfSAgIFxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNhdmUtcXVlcnlcIikgIT0gLTEpeyBcclxuICAgICAgXHJcbiAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGV2LlBhcmFtcyk7XHJcblxyXG4gICAgIH1cclxuICB9XHJcblxyXG4gIHRyZWF0RGF0YUZyb21RdWVyeUVkaXRvcihkYXRhOiBhbnkpe1xyXG4gICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IGRhdGE7XHJcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbktleXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2x1bW5LZXlzKGRhdGEpe1xyXG4gICAgaWYgKGRhdGEgPT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGwpeyBkYXRhID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTsgfVxyXG4gICAgaWYgKGRhdGEgIT0gbnVsbCAmJiB0eXBlb2YgZGF0YSAhPSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkYXRhLnNlbGVjdGVkRmllbGRzICE9IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICB0aGlzLmNvbHVtbktleXMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG4gICAgICBkYXRhLnNlbGVjdGVkRmllbGRzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uS2V5cy5wdXNoKHtrZXk6IGtleS5EYXRhYmFzZVRhYmxlTmFtZStcIl9cIitrZXkuUHJvcGVydHlOYW1lK1wiX19cIitrZXkuQ3VycmVudFRyYW5zbGF0ZS5yZXBsYWNlKFwiIFwiLFwiX1wiKSwgdmFsdWU6IGtleS5DdXJyZW50VHJhbnNsYXRlfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTW9kdWxlcygpe1xyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwib3JnYWlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5PcmdhSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QWxsRm9ybUVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxGb3JtPikgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtcyA9IHRoaXMuZm9ybXMuc29ydCgodW5vLCBkdWUpID0+IHVuby5OYW1lLmxvY2FsZUNvbXBhcmUoZHVlLk5hbWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5ETU1vZHVsZSA9PSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCl7XHJcbiAgICAgICAgICB0aGlzLkRNTW9kdWxlID0gdGhpcy5mb3Jtcy5maW5kKHggPT4geC5Db2RlID09IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gbmV3IEFycmF5PHsga2V5OiBzdHJpbmcgfT4oKTtcclxuICAgICAgICAgIHRoaXMuRE1Nb2R1bGUuRmllbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ETUZpZWxkcy5wdXNoKHsga2V5OiBlbGVtZW50LlZhbHVlLk5hbWUgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gdGhpcy5ETUZpZWxkcy5zb3J0KCh1bm8sIGR1ZSkgPT4gdW5vLmtleS5sb2NhbGVDb21wYXJlKGR1ZS5rZXkpKTtcclxuICBcclxuICAgICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLkRNRmllbGQgPSB0aGlzLkRNRmllbGRzLmZpbmQoeCA9PiB4LmtleSA9PSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4geyB9XHJcbiAgICApOyAgICBcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRE1Nb2R1bGUoKXtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5ETU1vZHVsZVwiLHRoaXMuRE1Nb2R1bGUsdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICBpZiAodGhpcy5ETU1vZHVsZSAhPSBudWxsKXtcclxuICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuRE1GaWVsZHMucHVzaCh7IGtleTogZWxlbWVudC5WYWx1ZS5OYW1lIH0pO1xyXG4gICAgICB9KTtcclxuICBcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IHRoaXMuRE1Nb2R1bGUuQ29kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuRE1Nb2R1bGUgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNRmllbGQoKXtcclxuICAgIGlmICh0aGlzLkRNRmllbGQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSB0aGlzLkRNRmllbGQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNQ29udGVzdHVhbGl6YXRpb24oKXtcclxuICAgIGNvbnNvbGUubG9nKFwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbik7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VkQnV0dG9uRmllbGQoZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkKXtcclxuICAgIHRoaXMuZmllbGQgPSBmaWVsZDtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZUZpZWxkc0V4dHJhKCl7XHJcbiAgICBpZiAodGhpcy5maWVsZHNFeHRyYUNvbmZpZyAhPSBudWxsICYmIHRoaXMuZmllbGRzRXh0cmFDb25maWcubGVuZ3RoID4gMCAmJiB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCAmJiAodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzID09IG51bGwgfHwgdGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzLmxlbmd0aCA9PSAwKSl7XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICAgIHRoaXMuZmllbGRzRXh0cmFDb25maWcuZm9yRWFjaCgoZmllbGRFeHRyYUNvbmZpZykgPT4ge1xyXG5cclxuICAgICAgICB2YXIgbmV3ZmllbGQ6IEZpZWxkRXh0cmFWYWx1ZXMgPSBuZXcgRmllbGRFeHRyYVZhbHVlcygpO1xyXG4gICAgICAgIG5ld2ZpZWxkLkZpZWxkQ29uZmlnQ29kZSA9IGZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdDb2RlO1xyXG4gICAgICAgIGlmIChmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddKXtcclxuICAgICAgICAgIG5ld2ZpZWxkLkZpZWxkQ29uZmlnVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdUeXBlID09IEZpZWxkVHlwZUVudW1bJ0NhbXBvIGRpIHRlc3RvJ10pe1xyXG4gICAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfSAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzLnB1c2gobmV3ZmllbGQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKG5ld2ZpZWxkKTtcclxuXHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkc0V4dHJhQ29uZmlnICE9IG51bGwgJiYgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5sZW5ndGggPiAwICYmIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCB8fCB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMubGVuZ3RoID09IDApKXtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzLmZvckVhY2goKGV4dHJhZmllbGQpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMucHVzaChleHRyYWZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkZWRGaWVsZEV4dHJhID0gdHJ1ZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjwhLS0gPGRpdiBjbGFzcz1cImFkZC1mb3JtLWZpZWxkIGJpZ3dyYXBwZXJcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7IG92ZXJmbG93LXg6IGhpZGRlbjsgb3ZlcmZsb3cteTogYXV0bztcIj4gLS0+XHJcblxyXG48bWF0LWNhcmQgY2xhc3M9XCJhZGQtZm9ybS1maWVsZFwiPlxyXG4gICAgPG1hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIHt7aW5kZXhGaWVsZCAhPSBudWxsICYmIGluZGV4RmllbGQgPj0gMCA/IFwiTW9kaWZpY2FcIiA6IFwiQWdnaXVuZ2lcIn19IGNhbXBvXHJcbiAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbnRhaW5lckNvbnRlbnQgXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgUFJJTkNJUEFMRSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLW1haW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUSVBPIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiB0aXBvQ2FtcG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZFR5cGUnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRUeXBlJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBvIGNhbXBvICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJGaWVsZFR5cGVFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25GaWVsZFR5cGVDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0ZpZWxkVHlwZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VudW1EYXRhVG9FeGNsdWRlXT1cImZpZWxkVHlwZXNUb0V4Y2x1ZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIENPRElDRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kaWNlICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJMYWJlbFwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdMYWJlbCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaSBwb3Nzb25vIGluc2VyaXJlIHNvbG8gbGV0dGVyZSBhLXpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT0RJQ0UgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcml6aW9uZSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkRlc2NyaXB0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIiByZXF1aXJlZCBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRGVzY3JpcHRpb25cIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5EZXNjcmlwdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciAqbmdJZj1cIiFmaWVsZC5EZXNjcmlwdGlvbi52YWxpZCAmJiBmaWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLkRlc2NyaXB0aW9uXS50b3VjaGVkXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZXNjcmlwdGlvbicpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVzY3JpcHRpb24nXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTRVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiICpuZ0lmPVwiZm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRHcm91cCddLnRvdWNoZWQgfVwiPlNlemlvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtRmllbGRzR3JvdXBzXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ05hbWUnXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInTmFtZSdcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGaWVsZEdyb3VwJ1wiIHJlcXVpcmVkIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZEdyb3VwJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gU0VaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gT0JCTElHQVRPUklPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXF1aXJlZFwiIGZvcm1Db250cm9sTmFtZT1cIlJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBPQkJMSUdBVE9SSU8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFJFQURPTkxZIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZWFkb25seVwiIGZvcm1Db250cm9sTmFtZT1cIlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFJFQURPTkxZIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gQVJFQSBQUklOQ0lQQUxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgVEFCUyAtLT5cclxuICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIGNsYXNzPVwiZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLXRhYnNcIiBtYXQtc3RyZXRjaC10YWJzPVwiZmFsc2VcIiBtYXQtYWxpZ24tdGFicz1cInN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgQ09NUElMQVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3RpbGUgQ29tcGlsYXppb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkxhcmdoZXp6YSBjYW1wbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidDb2xTcGFuU2l6ZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gTGFiZWwgY3NzIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJMYWJlbHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbHN0eWxlQ1NTJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBQkVMIENTUyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGaWVsZCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkZpZWxkc3R5bGVDU1NcIiBmb3JtQ29udHJvbE5hbWU9XCJGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gRklFTEQgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKGZpZWxkLlZpc2libGVJZiAhPSBudWxsIHx8IGZpZWxkLlZpc2libGVJZiAhPSB1bmRlZmluZWQpICYmIGZpZWxkLlZpc2libGVJZiAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jbkxpc3RWaWV3XCIgZm9ybUNvbnRyb2xOYW1lPVwiSW5MaXN0Vmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0luTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIElOVklTSUJJTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZC5Jbkxpc3RWaWV3ICYmIChmaWVsZC5WaXNpYmxlSWYgPT0gbnVsbCB8fCBmaWVsZC5WaXNpYmxlSWYgPT0gdW5kZWZpbmVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwbyBkaSBpbnZpc2liaWxpdMOgIGRlbCBjYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiZmllbGRJbnZpc2liaWxpdHlFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkludmlzaWJpbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiIChjbGljayk9XCJvcGVuVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVmlzaWJsZUlmJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJWaXNpYmxlSWZcIiBmb3JtQ29udHJvbE5hbWU9XCJWaXNpYmxlSWZcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiVmlzaWJsZUlmQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI1Zpc2libGVJZkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSBJRiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuVmlzaWJsZUlmID09IG51bGwgfHwgZmllbGQuVmlzaWJsZUlmID09IHVuZGVmaW5lZCkgJiYgZmllbGQuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLk1haW50YWluX1ZhbHVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWFpbnRhaW5fVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYWludGFpbl9WYWx1ZSddLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW50aWVuaSBpbCB2YWxvcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUT09MVElQIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVG9vbHRpcCA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiVG9vbHRpcFwiIGZvcm1Db250cm9sTmFtZT1cIlRvb2x0aXBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Ub29sdGlwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVG9vbHRpcCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUb29sdGlwJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVG9vbHRpcCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBUT09MVElQIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIENPTVBJTEFaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgREVMTEEgUklTUFNPVEEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTdGlsZSBSaXNwb3N0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFSR0hFWlpBIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5MYXJnaGV6emEgY2FtcG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbnN3ZXJTdHlsZUNvbFNwYW5TaXplcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQUJFTCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEZJRUxEIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IEZpZWxkIGNzcyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Fuc3dlclN0eWxlRmllbGRzdHlsZUNTUyddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVklTSUJMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IG51bGwgfHwgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IHVuZGVmaW5lZCkgJiYgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIiBmb3JtQ29udHJvbE5hbWU9XCJBbnN3ZXJTdHlsZUluTGlzdFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUluTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBJTlZJU0lCSUxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yIGFsaWduLXNlbGYtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpcG8gZGkgaW52aXNpYmlsaXTDoCBkZWwgY2FtcG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cImZpZWxkSW52aXNpYmlsaXR5RW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Fuc3dlclN0eWxlSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlVmlzaWJsZUlmXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVWaXNpYmxlSWZcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWZcIiAoY2xpY2spPVwib3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snQW5zd2VyU3R5bGVWaXNpYmxlSWYnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVmlzaWJsZUlmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJWaXNpYmxlSWZBdXRvY29tcGxldGVcIiAoa2V5dXApPVwic2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlZpc2libGVJZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjVmlzaWJsZUlmQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIElGIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIERFTExBIFJJU1BTT1RBIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTUEVDSUZJQ0hFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3BlY2lmaWNoZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUeXBlRm9ybVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNQRUNJRklDSEUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTW9kYWxpdMOgIHJlY3VwZXJvIGRhdGlcIiAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtWydCb3R0b25lIGF6aW9uZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJkYXRhR2V0dGVyVHlwZUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRGF0YUdldHRlclR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCIgW2hpZGRlbl09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IGRhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIGRpIERlZmF1bHQgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0YUdldHRlclZhbHVlXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiBbaGlkZGVuXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gZGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGb3JtdWxhIChKYXZhc2NyaXB0KSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJGb3JtdWxhXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Gb3JtdWxhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZygpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtdWxhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybXVsYScpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGb3JtdWxhJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRm9ybXVsYSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTQgY29uZmlndXJhUXVlcnlFZGl0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPkNvbmZpZ3VyYSBpbiBRdWVyeSBFZGl0b3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib3BlbkRCR2V0dGVyKClcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID09IG51bGxcIj5Qcm9jZWRpPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJvcGVuREJHZXR0ZXIoKVwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPk1vZGlmaWNhPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlNlbGV6aW9uYSBjb2xvbm5hPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImNvbHVtbktleXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gZGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNFwiICpuZ0lmPVwiZm9ybXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5Nb2R1bG88L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25hIG1vZHVsbydcIiBbYXJyYXlEYXRhXT1cImZvcm1zXCIgWyhuZ01vZGVsSW5wdXQpXT1cIkRNTW9kdWxlXCIgW2lzU2VhcmNoYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInQ29kZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidETU1vZHVsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETU1vZHVsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCAmJiBETU1vZHVsZSAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5DYW1wbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmEgY2FtcG8nXCIgW2FycmF5RGF0YV09XCJETUZpZWxkc1wiIFsobmdNb2RlbElucHV0KV09XCJETUZpZWxkXCIgW2lzU2VhcmNoYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2tleSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRE1GaWVsZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETUZpZWxkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5DYXJkaW5hbGl0w6A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJETUdldHRlckNhcmRpbmFsaXRpZXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ2FyZGluYWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNvbnRlc3R1YWxpenphemlvbmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29udGVzdHVhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cInRydWVcIiAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ2hhbmdlRE1Db250ZXN0dWFsaXphdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBFWFRSQSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkV4dHJhXCIgKm5nSWY9XCJmaWVsZHNFeHRyYUNvbmZpZyAhPSBudWxsICYmIGZpZWxkc0V4dHJhQ29uZmlnLmxlbmd0aCA+IDAgJiYgbG9hZGVkRmllbGRFeHRyYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZpZWxkRXh0cmFDb25maWdcIiAqbmdGb3I9XCJsZXQgZmllbGRFeHRyYUNvbmZpZyBvZiBmaWVsZHNFeHRyYUNvbmZpZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXggI2ZpZWxkRXh0cmFDb25maWdUZW1wbGF0ZSBbZmllbGRFeHRyYUNvbmZpZ109XCJmaWVsZEV4dHJhQ29uZmlnXCIgW2Zvcm1dPVwiZm9ybVwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj4gICBcclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBFWFRSQSAtLT4gICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgVEFCUyAtLT5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlIHZhbGx1ZXMgLS0+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlIHZhbGx1ZXMgLS0+XHJcblxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMSBtZS0zXCI+IFxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidXR0b25zRm9ybWFcIj4gLS0+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gbWF0LXJhaXNlZC1idXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQoZmFsc2UpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgQW5udWxsYVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBzYXZlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTYXZlRmllbGQoKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgIFNhbHZhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSA8L2Rpdj4gLS0+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERJIFRFU1RPIC0tPlxyXG48bmctdGVtcGxhdGUgI3RleHRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIE1BU0NIRVJBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+TWFzY2hlcmE8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiVGV4dE1hc2tFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLlRleHRNYXNrXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidUZXh0TWFzaydcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIE1BU0NIRVJBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNQRUVDSCBUTyBURVhUIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIiBbaGlkZGVuXT1cImZpZWxkLlJlYWRvbmx5IHx8IHBsYXRmb3JtICE9ICd3ZWInXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5NaWNyb3Bob25lXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWljcm9waG9uZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBTcGVlY2gtVG8tVGV4dFxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU1BFRUNIIFRPIFRFWFQgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS50b3VjaGVkIH1cIj5cclxuICAgICAgICAgICAgTHVuZ2hlenphIG1pbmltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1pblwiIGZvcm1Db250cm9sTmFtZT1cIk1pbkxlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NaW5MZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1pbkxlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01pbkxlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNSU5JTUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02XCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4TGVuZ2h0J10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgIEx1bmdoZXp6YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWF4XCIgZm9ybUNvbnRyb2xOYW1lPVwiTWF4TGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1heExlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4TGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4TGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBESSBURVNUTyAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBFVElDSEVUVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbGFiZWxGaWVsZEZvcm1UZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBFVElDSEVUVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwiRXRpY2hldHRhXCIgcGxhY2Vob2xkZXI9XCJFdGljaGV0dGFcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJFdGljaGV0dGFcIiBbKG5nTW9kZWwpXT1cImZpZWxkLkV0aWNoZXR0YVwiPjwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEVUSUNIRVRUQSAtLT5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBFVElDSEVUVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQVJFQSBESSBURVNUTyAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXh0YXJlYUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gUklHSEUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gUmlnaGUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicmlnaGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwicm93c1wiIGZvcm1Db250cm9sTmFtZT1cIlJvd3NcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Sb3dzXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuUm93cylcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jvd3MnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snUm93cyddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Jvd3MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFJJR0hFIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNwZWVjaFRvVGV4dCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgW2hpZGRlbl09XCJmaWVsZC5SZWFkb25seSB8fCBwbGF0Zm9ybSAhPSAnd2ViJ1wiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuTWljcm9waG9uZVwiIGZvcm1Db250cm9sTmFtZT1cIk1pY3JvcGhvbmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgU3BlZWNoLVRvLVRleHRcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNwZWVjaFRvVGV4dCAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEx1bmdoZXp6YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJsZW5ndGhNaW5cIiBmb3JtQ29udHJvbE5hbWU9XCJNaW5MZW5naHRcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuTWluTGVuZ2h0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5MZW5naHQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNaW5MZW5naHQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEx1bmdoZXp6YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWF4XCIgZm9ybUNvbnRyb2xOYW1lPVwiTWF4TGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1heExlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4TGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4TGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBBUkVBIERJIFRFU1RPIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEJPT0xFQU5JIC0tPlxyXG48bmctdGVtcGxhdGUgI2Jvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIEEgVFJFIFNUQVRJIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzVHJpc3RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJJc1RyaXN0YXRlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIEEgdHJlIHN0YXRpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBBIFRSRSBTVEFUSSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIFBSRVNFTlRBWklPTkUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgcHJlc2VudGF6aW9uZSAqPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIkJvb2xQcmVzZW50YW50aW9FbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLlByZXNldGF0aW9uVHlwZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidQcmVzZXRhdGlvblR5cGUnXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIFBSRVNFTlRBWklPTkUgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQk9PTEVBTkkgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREFUQSAtLT5cclxuPG5nLXRlbXBsYXRlICNkYXRlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIERJIERBVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgZGF0YTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJEYXRlVGltZVR5cGVFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLklzT25seURhdGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInSXNPbmx5RGF0ZSdcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gREkgREFUQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBGT1JNQVRPIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEZvcm1hdG8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0ZUZvcm1hdFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRGF0ZUZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInSW5kaWNhcmUgaWwgZm9ybWF0byBzZWd1ZW5kbyBsYSBndWlkYSBkZWwgcGFjY2hldHRvIG1vbWVudGpzLidcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZvcm1hdG8pXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGb3JtYXRvJykgfX0gLS0+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEZPUk1BVE8gLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gREFUQSBNSU5JTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBEYXRhIG1pbmltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIGRhdGEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnRGF0YSBlIG9yYSddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1pbkRhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01pbkRhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5EQVRFVElNRVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVkgSEg6bW0nXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBvcmFyaW8nXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuVElNRVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0hIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBEQVRBIE1JTklNQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBEQVRBIE1BU1NJTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBEYXRhIG1hc3NpbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NYXhEYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNYXhEYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZIEhIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLlRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gREFUQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREFUQSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBOVU1FUklDSSAtLT5cclxuPG5nLXRlbXBsYXRlICNudW1lcmljRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgSU5URVJPIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzSW50ZWdlclwiIGZvcm1Db250cm9sTmFtZT1cIklzSW50ZWdlclwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBWYWxvcmUgaW50ZXJvXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBWQUxPUkUgSU5URVJPIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNFUEFSQVRPUkUgREVDSU1BTEkgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpZWxkLklzSW50ZWdlclwiIGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gU2VwYXJhdG9yZSBkZWNpbWFsaSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJEZWNpbWFsU2VwYXJhdG9yXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EZWNpbWFsU2VwYXJhdG9yXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVjaW1hbFNlcGFyYXRvcilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0RlY2ltYWxTZXBhcmF0b3InKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVjaW1hbFNlcGFyYXRvciddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm9uIMOoIHBvc3NpYmlsZSBpbnNlcmlyZSBkZWkgbnVtZXJpLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxTZXBhcmF0b3InXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNFUEFSQVRPUkUgREVDSU1BTEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gUFJFQ0lTSU9ORSBERUNJTUFMSSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCIhZmllbGQuSXNJbnRlZ2VyXCIgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBQcmVjaXNpb25lIGRlY2ltYWxpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkRlY2ltYWxQcmVjaXNpb25cIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRGVjaW1hbFByZWNpc2lvblwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVjaW1hbFByZWNpc2lvbilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0RlY2ltYWxQcmVjaXNpb24nKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVjaW1hbFByZWNpc2lvbiddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxQcmVjaXNpb24nXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFBSRUNJU0lPTkUgREVDSU1BTEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gU0VQQVJBVE9SRSBNSUdMSUFJQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBTZXBhcmF0b3JlIG1pZ2xpYWlhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIlRob3VzYW5kc1NlcGFyYXRvclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVGhvdXNhbmRzU2VwYXJhdG9yJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Rob3VzYW5kc1NlcGFyYXRvciddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm9uIMOoIHBvc3NpYmlsZSBpbnNlcmlyZSBkZWkgbnVtZXJpLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Rob3VzYW5kc1NlcGFyYXRvciddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0VQQVJBVE9SRSBNSUdMSUFJQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTSU1CT0xPIFZBTFVUQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgbWF0VG9vbHRpcD1cIlNpbWJvbG8gcHJpbWEgZGVsIHZhbG9yZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiZXhhbXBsZS10b29sdGlwLXVwcGVyY2FzZVwiXHJcbiAgICAgICAgPiBTaW1ib2xvIHZhbHV0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJDdXJyZW5jeVN5bWJvbFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuQ3VycmVuY3lTeW1ib2xcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5DdXJyZW5jeVN5bWJvbClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0N1cnJlbmN5U3ltYm9sJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0N1cnJlbmN5U3ltYm9sJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTSU1CT0xPIFZBTFVUQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBVTklUQSBESSBNSVNVUkEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTaW1ib2xvIGRvcG8gaWwgdmFsb3JlXCJcclxuICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJleGFtcGxlLXRvb2x0aXAtdXBwZXJjYXNlXCJcclxuICAgICAgICA+IFVuaXTDoCBkaSBtaXN1cmEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWVhc3VyZVVuaXRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1lYXN1cmVVbml0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWVhc3VyZVVuaXQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNZWFzdXJlVW5pdCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNZWFzdXJlVW5pdCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVU5JVEEgREkgTUlTVVJBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFZBTE9SRSBNSU5JTU8gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG1pbmltbyA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJNaW5WYWx1ZVwiIHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1pblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5WYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGF0dGVybj1cIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWluVmFsdWUnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluVmFsdWUnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5WYWx1ZSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVkFMT1JFIE1JTklNTyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgTUFTU0lNTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgbWFzc2ltbyA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJNYXhWYWx1ZVwiIHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1heFZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NYXhWYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGF0dGVybj1cIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4VmFsdWUnKSB9fSAgLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heFZhbHVlJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4VmFsdWUnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFZBTE9SRSBNQVNTSU1PIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTlVNRVJJQ0kgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQUxMRUdBVE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gQUxMRUdBVEkgTVVMVElQTEkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuSXNNdWx0aUF0dGFjaFwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlBdHRhY2hcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgQWxsZWdhdGkgbXVsdGlwbGlcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEFMTEVHQVRJIE1VTFRJUExJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIEVTVEVOU0lPTkkgQUNDRVRUQVRFIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5Fc3RlbnNpb25pIGFjY2V0dGF0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMuY29uY2F0KEF2YWlsYWJsZUltYWdlRXh0ZW5zaW9ucylcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuQWxsb3dlZEV4dGVuc2lvbnNcIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgIFtpc011bHRpU2VsZWN0XT1cInRydWVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0FsbG93ZWRFeHRlbnNpb25zJ1wiXHJcbiAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gRVNURU5TSU9OSSBBQ0NFVFRBVEUgLS0+XHJcblxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIG10LTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVsZW5jbyBtZXRhZGF0YVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IHRleHQtcmlnaHQgYnV0dG9uc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgc2F2ZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTWV0YWRhdGFEaWFsb2coKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+QWdnaXVuZ2kgYWxsZWdhdG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGVxcC10YWJsZSAjbWV0YWRhdGFGaWVsZHNUYWJsZSBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiIFtjb2x1bW5zXT1cIm1ldGFkYXRhQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImZpZWxkLk1ldGFkYXRhRmllbGRzXCIgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gbWV0YWRhdGEgaW5zZXJpdG8nXCIgW3NlYXJjaFRleHRdPVwiJ0NlcmNhJ1wiPlxyXG4gICAgICAgIDwvZXFwLXRhYmxlPlxyXG4gICAgPC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQUxMRUdBVE8gLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTElTVEEgREkgVkFMT1JJIC0tPlxyXG48bmctdGVtcGxhdGUgI2xpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gU0NFTFRBIE1VTFRJUExBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbaGlkZGVuXT1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIFNjZWx0YSBtdWx0aXBsYVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0NFTFRBIE1VTFRJUExBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFRJUE8gREkgUFJFU0VOVEFaSU9ORSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkaSBwcmVzZW50YXppb25lKjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJMaXN0UHJlc2VudGF0aW9uRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ1ByZXNlbnRhdGlvbk1vZGUnXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVElQTyBESSBQUkVTRU5UQVpJT05FIC0tPlxyXG5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBHRVNUSU9ORSBPUFpJT05JIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtdC0yXCI+XHJcblxyXG4gICAgICAgIDxtYXQtbGFiZWw+IGFyZWEgZGVpIHZhbG9yaSBkYSBpbnNlcmlyZSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwia2V5MXx2YWx1ZTE7a2V5Mnx2YWx1ZTJcIiBcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuVmFsdWVTdHJpbmdcIlxyXG4gICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L3RleHRhcmVhPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImNvdW50VmFsdWVQYWlycyhmaWVsZC5WYWx1ZVBhaXJzKSA+IDBcIj5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwia2V5LXZhbHVlLWxpc3Qtc2VjdGlvbi10aXRsZVwiPiA8L2g0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IExhYmVsIG9wemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImtleVZhbHVlT2JqZWN0LmtleVwiIChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgb3B6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwia2V5VmFsdWVPYmplY3QudmFsdWVcIiAoa2V5dXApPVwib25NdWx0aVNlbGVjdElucHV0S2V5dXAoJGV2ZW50LCBudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItM1wiPk9wemlvbmkgaW5zZXJpdGU6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidmFsdWUtcGFpcnMtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQga2V5VmFsdWVQYWlyIG9mIGdldERpY3Rpb25hcnlLZXlWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1yLTFcIiAoY2xpY2spPVwiZGVsZXRlS2V5RnJvbURpY3Rpb25hcnkoa2V5VmFsdWVQYWlyLmtleSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48Yj5MYWJlbDogPC9iPiB7e2tleVZhbHVlUGFpci5rZXl9fSAtIDxiPlZhbG9yZTogPC9iPiB7e2tleVZhbHVlUGFpci52YWx1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgPC9kaXY+ICAgIFxyXG4gICAgPCEtLSNlbmRyZWdpb24gR0VTVElPTkUgT1BaSU9OSSAtLT5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBMSVNUQSBESSBWQUxPUkkgLS0+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSNyZWdpb24gQk9UVE9ORSBBWklPTkUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8YWN0aW9uLWJ1dHRvbi1jcmVhdG9yIFtJbkZpZWxkXT1cInRydWVcIiBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybXVsYXNdPVwiYWN0aW9uQnV0dG9uc1wiIFthY3Rpb25CdXR0b25GaWVsZF09XCJmaWVsZFwiIChvbkNoYW5nZVNvbWV0aGluZyk9XCJjaGFuZ2VkQnV0dG9uRmllbGQoJGV2ZW50KVwiPjwvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBCT1RUT05FIEFaSU9ORSAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gTElTVEEgSU1NQUdJTkkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLXhzLTEyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBBbHRlenphIGluIFBpeGVsIGRlbGxlIGltbWFnaW5pIHNjYWxhdGUqIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2V0UmVzaXplZEltYWdlc0hlaWdodFB4KClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jlc2l6ZWRJbWFnZXNIZWlnaHRQeCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wteHMtMTIgY29sLW1pZGRsZVwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICBTY2VsdGEgbXVsdGlwbGFcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZXFwLWF0dGFjaG1lbnRzICNpbWFnZVNlbGVjdG9yQXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJmaWVsZC5BdHRhY2htZW50TGlzdFwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJmYWxzZVwiIFtzaG93SW5saW5lUHJldmlld109XCJ0cnVlXCIgW211bHRpcGxlQXR0YWNobWVudF09XCJ0cnVlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIiAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJjYXRjaEJ1dHRvbkltYWdlc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgIFthdHRhY2htZW50c0NvbHVtbnNdPVwiY29uZmlnQ29sdW1uTGlzdEltYWdlc1wiPlxyXG4gICAgPC9lcXAtYXR0YWNobWVudHM+XHJcblxyXG4gIFxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIExJU1RBIElNTUFHSU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIElNTUFHSU5FIC0tPlxyXG48bmctdGVtcGxhdGUgI2ltYWdlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5FbmFibGVEcmF3aW5nXCIgZm9ybUNvbnRyb2xOYW1lPVwiRW5hYmxlRHJhd2luZ1wiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgSW1tYWdpbmUgZGlzZWduYWJpbGU/XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8L2Rpdj4gICBcclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZUNoYW5nZSgkZXZlbnQpXCIgKG9uRGVsZXRlQXR0YWNobWVudCk9XCJkZWxldGVJbWFnZSgkZXZlbnQpXCIgI2ltYWdlQXR0YWNobWVudD5cclxuICAgICAgICA8L2VxcC1hdHRhY2htZW50cz5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5UHJvZmlsZUltYWdlPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgICAgc3JjPVwiZGF0YTp7e2ZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlfX07YmFzZTY0LHt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19XCJcclxuICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+ICAgICAgICBcclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgQ09OIE1BUktFUlMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKCRldmVudClcIiAob25EZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZUltYWdlKCRldmVudClcIiAjaW1hZ2VBdHRhY2htZW50PlxyXG4gICAgICAgIDwvZXFwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlQcm9maWxlSW1hZ2U+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICBzcmM9XCJkYXRhOnt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGV9fTtiYXNlNjQse3tmaWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX1cIlxyXG4gICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gICAgICAgIFxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBJTU1BR0lORSBDT04gTUFSS0VSUyAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTE9PS1VQIC0tPlxyXG48bmctdGVtcGxhdGUgI2xvb2t1cEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLlVzZUFzR2V0T3JEaXNjYXJkXCIgZm9ybUNvbnRyb2xOYW1lPVwiVXNlQXNHZXRPckRpc2NhcmRcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiU2UgdHJ1ZSBsYSBsb29rdXAgdmllbmUgdmlzdWFsaXp6YXRhIGluIHVuYSBtb2RhbGUgcGVyIGxvIHNjZWdsaSBzY2FydGFcIj5cclxuICAgICAgICAgICAgVXNhIHBlciBzY2VnbGkgbyBzY2FydGFcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBOb21lIGVudGl0w6AgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIG1hdFRvb2x0aXA9XCJOb21lIGRlbGwnZW50aXTDoCByZWxhemlvbmF0YVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRW50aXR5U291cmNlTmFtZVwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRW50aXR5U291cmNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkVudGl0eVNvdXJjZU5hbWUpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRW50aXR5U291cmNlTmFtZScpIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbXQtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21pIGRlaSBjYW1waSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVsZW5jbyBkaSBjYW1waSBvcmRpbmF0byBjaGUgdmVycsOgIHZpc3VhbGl6emF0byBuZWxsYSBsb29rdXAgKHByZW1lcmUgaW52aW8gcGVyIGNvbmZlcm1hcmUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsICdGaWVsZE5hbWVzJylcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5Ob21pIHNlbGV6aW9uYXRpOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHRlbnNpb24tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGV4dGVuc2lvbiBvZiBmaWVsZC5GaWVsZE5hbWVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tleHRlbnNpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0xXCIgKGNsaWNrKT1cImZpZWxkLkZpZWxkTmFtZXMuc3BsaWNlKGksMSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExPT0tVUCAtLT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFIFVOIE1FVEFEQVRBIE5FSSBDQU1QSSBESSBUSVBPIEFMTEVHQVRPIE8gSU1NQUdJTkUgLS0+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICNkaWFsb2dNZXRhZGF0YT5cclxuICAgIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQgW2ZpZWxkXT1cInNlbGVjdGVkTWV0YWRhdGFcIiBbYXZhaWxhYmxlRmllbGRzXT1cImF2YWlsYWJsZUZpZWxkc1wiXHJcbiAgICAgICAgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZE1ldGFkYXRhXCIgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZU1ldGFkYXRhKCRldmVudClcIiBbZmllbGRUeXBlc1RvRXhjbHVkZV09XCJbNiw3LDEwXVwiPlxyXG4gICAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4ge3tjb2wuZGlzcGxheX19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLURJQUxPRyBQRVIgU0VNUExJRklDQVJFIExBIFNDUklUVFVSQSBERUwgQ0FNUE8gRk9STVVMQS0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0Zvcm11bGE+XHJcbiAgICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuICAgIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8aW1nIHNyYz1cImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsIHt7cm93W2NvbC5rZXldfX1cIiBjbGFzcz1cIkdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZVwiPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gQ2hpYXZlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFFVRVJZIEVESVRPUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dRRT5cclxuICAgIDxuZy10ZW1wbGF0ZSBbYXBwRHluYW1pY0xvYWRlcl0gW2RhdGFdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KTtcIj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiAgIl19
1201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxjQUFjLEdBSWYsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsYUFBYSxFQUNkLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUVMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBRUwsb0JBQW9CLEdBQ3JCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLHdDQUF3QyxDQUFDO0FBRWhELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUlyRCxPQUFPLEVBQ0wsWUFBWSxHQUViLE1BQU0sd0NBQXdDLENBQUM7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LEtBQUssRUFBRTtnQkFDUCxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNTixRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7XHJcbiAgQXR0YWNobWVudFR5cGUsXHJcbiAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UsXHJcbiAgRXFwQXR0YWNobWVudHNDb21wb25lbnQsXHJcbiAgSUF0dGFjaG1lbnREVE8sXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzXCI7XHJcbmltcG9ydCB7IEVudW1IZWxwZXIgfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtc2VsZWN0XCI7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgVHlwZUNvbHVtbiB9IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGaWVsZCxcclxuICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gIERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW0sXHJcbiAgRmllbGRJbnZpc2liaWxpdHlFbnVtLFxyXG4gIEZpZWxkVHlwZUVudW1cclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEF0dGFjaG1lbnRGaWVsZCxcclxuICBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucyxcclxuICBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQm9vbGVhbkZpZWxkLFxyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2Jvb2xlYW5GaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIERhdGVGaWVsZCxcclxuICBEYXRlVGltZVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtLFxyXG4gIExpc3RWYWx1ZUZpZWxkLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExvb2t1cEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbG9va3VwRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRhcmVhRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgVGV4dE1hc2tFbnVtLFxyXG4gIFRleHRGaWVsZCxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybUZpZWxkR3JvdXAsIEZvcm0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExhYmVsRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9sYWJlbEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlV2l0aE1hcmtlcnNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlV2l0aE1hcmtlcnNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RmllbGRUeXBlRW51bSwgRHluQXR0YWNobWVudCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0sIERhdGFHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgUXVlcnlFZGl0b3JNb2RlRW51bSB9IGZyb20gXCIuLi9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCwgS2V5VHlwZVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZpZWxkRXh0cmFDb25maWcsIEZpZWxkRXh0cmFWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmllbGRFeHRyYUNvbmZpZy5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkRm9ybUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBcclxuICBASW5wdXQoKSBmaWVsZHNFeHRyYUNvbmZpZzogQXJyYXk8RmllbGRFeHRyYUNvbmZpZz47XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybTtcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBmaWVsZDogQmFzZUZpZWxkIHwgYW55O1xyXG4gIEBJbnB1dCgpIGluZGV4RmllbGQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBmb3JtRmllbGRzR3JvdXBzOiBBcnJheTxGb3JtRmllbGRHcm91cD47XHJcbiAgLyoqIEVsZW5jbyBkZWkgRmllbGQgY3JlYXRpIG5lbGxhIGZvcm0sIHVzYXRpIHBlciBwb3BvbGFyZSBsJ2F1dG9jb21wbGV0ZSBkZWxsYSBwcm9wcmlldMOgIEZvcm11bGEuICovXHJcbiAgQElucHV0KCkgYXZhaWxhYmxlRmllbGRzOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gIEBJbnB1dCgpIGZpZWxkVHlwZXNUb0V4Y2x1ZGU6IEFycmF5PEZpZWxkVHlwZUVudW0+ID0gW0ZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXV07XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIGNvbnRlc3R1YWxpemF0aW9uOiBBcnJheTxDb250ZXN0dWFsaXphdGlvbj4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbnM6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVGaWVsZEV2ZW50OiBFdmVudEVtaXR0ZXI8QmFzZUZpZWxkIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8QmFzZUZpZWxkIHwgYW55PigpO1xyXG5cclxuICByZXNpemVkSW1hZ2VzSGVpZ2h0UHg6IG51bWJlcjtcclxuICBmaWVsZEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBrZXlWYWx1ZU9iamVjdDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9ID0geyBrZXk6IFwiXCIsIHZhbHVlOiBcIlwiIH07XHJcbiAgYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lOiBBcnJheTxDb2xTcGFuU2l6ZXNFbnVtPiA9IFtdO1xyXG4gIGF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhOiBBcnJheTxDb2xTcGFuU2l6ZXNFbnVtPiA9IFtdO1xyXG4gIGZvcm11bGFBdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcbiAgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG4gIEF2YWlsYWJsZUZpbGVFeHRlbnNpb25zID0gQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnM7XHJcbiAgQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zID0gQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zO1xyXG4gIGZpZWxkSW52aXNpYmlsaXR5RW51bSA9IEZpZWxkSW52aXNpYmlsaXR5RW51bTtcclxuICBjb2x1bW5LZXlzOiBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gbmV3IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgLy8jcmVnaW9uIFRlbXBsYXRlIGRlaSB2YXJpIHBlenppIGRpIGZvcm0gcGVyIGxhIGNyZWF6aW9uZSBkaSB1biBjYW1wbyhpbiBiYXNlIGFsIHRpcG8gc2NlbHRvKS5cclxuICBmaWVsZFR5cGVGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcInRleHRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwibGFiZWxGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxhYmVsRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImJ1dHRvbkZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYnV0dG9uRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IFxyXG4gIEBWaWV3Q2hpbGQoXCJ0ZXh0YXJlYUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiYm9vbGVhZEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYm9vbGVhZEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkYXRlRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkYXRlRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcIm51bWVyaWNGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIG51bWVyaWNGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJpbWFnZUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJpbWFnZUZpZWxkU2VsZWN0b3JGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBpbWFnZUZpZWxkU2VsZWN0b3JGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImxvb2t1cEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbG9va3VwRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRhdGFHZXR0ZXJUZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRhdGFHZXR0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgIFxyXG4gIFxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgZ2VzdGlyZSBpIG1ldGFkYXRhIG5laSBjYW1waSB0aSBkaXBvIEFsbGVnYXRvIG8gSW1tYWdpbmVcclxuICBtZXRhZGF0YUNvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgLy9AVmlld0NoaWxkKCdtZXRhZGF0YUZpZWxkc1RhYmxlJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1ldGFkYXRhRmllbGRzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkTWV0YWRhdGE6IEJhc2VGaWVsZDtcclxuICAvL2luZGV4U2VsZWN0ZWRNZXRhZGF0YTogbnVtYmVyO1xyXG4gIC8vZGlhbG9nTWV0YWRhdGFSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBkaWFsb2dGb3JtdWxhUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgZGlhbG9nVmlzaWJsZUlmUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgLy9AVmlld0NoaWxkKCdkaWFsb2dNZXRhZGF0YScsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ01ldGFkYXRhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dGb3JtdWxhXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0Zvcm11bGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBnZXN0aXJlIGxlIGltbWFnaW5pIG5laSBjYXBpIGRpIHRpcG8gZWxlbmNvIGdlbmVyaWNvXHJcbiAgQFZpZXdDaGlsZChcImJ1dHRvbkltYWdlc0tleVZhbHVlSW5wdXRDb2x1bW5cIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gRW51bWVyYXRvcmkgdXNhdGkgbmVsbCdodG1sXHJcbiAgRmllbGRUeXBlRW51bSA9IEZpZWxkVHlwZUVudW07XHJcbiAgQm9vbFByZXNlbnRhbnRpb0VudW0gPSBCb29sUHJlc2VudGFudGlvRW51bTtcclxuICBEYXRlVGltZVR5cGVFbnVtID0gRGF0ZVRpbWVUeXBlRW51bTtcclxuICBMaXN0UHJlc2VudGF0aW9uRW51bSA9IExpc3RQcmVzZW50YXRpb25FbnVtO1xyXG4gIFRleHRNYXNrRW51bSA9IFRleHRNYXNrRW51bTtcclxuICBBdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIGF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtID0gQXR0YWNobWVudEZpZWxkVHlwZUVudW07XHJcbiAgZGF0YUdldHRlclR5cGVFbnVtID0gRGF0YUdldHRlclR5cGVFbnVtO1xyXG4gIHN1YnNjcmlwdGlvbjogYW55O1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIGRlbGxlIGxpc3RlIGRpIGltbWFnaW5pXHJcbiAgY29uZmlnQ29sdW1uTGlzdEltYWdlczogQXJyYXk8Q29uZmlnQ29sdW1uPiA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgY29uZmlnQ29sdW1uSW1hZ2U6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ0dlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIEdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgR2VuZXJpY0xpc3RJbWFnZXNLZXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdHZW5lcmljTGlzdEltYWdlc1ZhbHVlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBHZW5lcmljTGlzdEltYWdlc1ZhbHVlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGltYWdlU2VsZWN0b3JBdHRhY2htZW50czogRXFwQXR0YWNobWVudHNDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnaW1hZ2VBdHRhY2htZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIGltYWdlQXR0YWNobWVudDogRXFwQXR0YWNobWVudHNDb21wb25lbnQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vIERCIEdldHRlclxyXG4gIGRpYWxvZ1FFUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgLy9AVmlld0NoaWxkKCdkaWFsb2dNZXRhZGF0YScsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ01ldGFkYXRhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dRRVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dRRTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gVE1XLVBJQ0tFUlxyXG4gIG1vZGUgPSBNb2RlRW51bVxyXG4gIHRpbWVUeXBlID0gVGltZVR5cGVFbnVtXHJcblxyXG4gIC8vIERNIEdldHRlclxyXG4gIGZvcm1zOiBBcnJheTxGb3JtPiA9IG5ldyBBcnJheTxGb3JtPigpO1xyXG4gIERNTW9kdWxlOiBhbnk7XHJcbiAgRE1GaWVsZDogYW55O1xyXG4gIERNRmllbGRzOiBBcnJheTx7IGtleTogc3RyaW5nIH0+O1xyXG4gIERNR2V0dGVyQ2FyZGluYWxpdGllcyA9IERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW07XHJcblxyXG4gIHBsYXRmb3JtOiBzdHJpbmcgPSBDYXBhY2l0b3IuZ2V0UGxhdGZvcm0oKTtcclxuXHJcbiAgbG9hZGVkRmllbGRFeHRyYTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZW51bUhlbHBlcjogRW51bUhlbHBlcixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyID09IG51bGwpeyB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIgPSBuZXcgRGF0YUdldHRlcigpOyB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IG51bGwgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVtcIkRhIG1vZHVsbyBkaW5hbWljb1wiXSl7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBcInVuZGVmaW5lZFwiICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ29sdW1uS2V5cyh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLlBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5maWVsZFR5cGVzVG9FeGNsdWRlLmluY2x1ZGVzKEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkVHlwZXNUb0V4Y2x1ZGUucHVzaChGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25GaWVsZFR5cGVDaGFuZ2UoZmFsc2UpO1xyXG4gICAgdGhpcy5hdmFpbGFibGVGaWVsZHMgPSB0aGlzLmF2YWlsYWJsZUZpZWxkc1xyXG4gICAgICA/IHRoaXMuYXZhaWxhYmxlRmllbGRzLmZpbHRlcigoZikgPT4gZiAhPSB0aGlzLmZpZWxkKVxyXG4gICAgICA6IFtdO1xyXG5cclxuICAgICAgdGhpcy5jb25maWd1cmVGaWVsZHNFeHRyYSgpO1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJmb3JtP1wiLHRoaXMuZm9ybSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICAvLyBzZXRGb3JtdWxhQXV0b2NvbXBsZXRlT3B0aW9ucyhrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gICAvLyBDcmVvIGwnYXJyYXkgcGVyIGwnYXV0b2NvbXBsZXRlIHNvbG8gc2Ugc3RvIGZhY2VuZG8gaWwgZm9jdXMgc3VsbCdpbnB1dCBvIHNlIHN0byBwcmVtZW5kbyB1biB0YXN0b1xyXG4gIC8vICAgLy8gc3VsbGEgdGFzdGllcmEgZGl2ZXJzbyBkYWxsZSBmcmVjY2UgKGluIHF1ZXN0J3VsdGltbyBjYXNvLCBzZSBub24gdmllbmUgZXNlZ3VpdG8gaWwgZmlsdHJvIHN1bGwnZXZlbnRvLFxyXG4gIC8vICAgLy8gbm9uIHNpIHB1w7Igc2VsZXppb25hcmUgdW4gc3VnZ2VyaW1lbnRvIGRlbGwnYXV0b2NvbXBsZXRlIHBlcmNow6ggYWwgY2xpY2sgdmVycmViYmUgcmljYXJpY2F0byBsJ2FycmF5IGVcclxuICAvLyAgIC8vIHNpIHByZWRlcmViYmUgbGEgc2VsZXppb25lIGFwcGVuYSBmYXR0YSkuXHJcbiAgLy8gICBpZiAoIWtleWJvYXJkRXZlbnQgfHwgIWtleWJvYXJkRXZlbnQuY29kZS5pbmNsdWRlcyhcIkFycm93XCIpKSB7XHJcbiAgLy8gICAgIHRoaXMuZm9ybXVsYUF1dG9jb21wbGV0ZU9wdGlvbnMgPSBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKHRoaXMuYXZhaWxhYmxlRmllbGRzLCB0aGlzLmZpZWxkLkZvcm11bGEpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5WaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgICB0aGlzLmZpZWxkLlZpc2libGVJZlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnYWdnaXVudGEgZGkgdW4gbnVvdm8gY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBNZXRvZG8gcmljaGlhbWF0byBvZ25pIHZvbHRhIGNoZSBjYW1iaWEgaWwgdGlwbyBkZWwgY2FtcG8gc2NlbHRvIG8gdmllbmUgYWdnaXVudG8vbW9kaWZpY2F0byB1biBGaWVsZFxyXG4gICAqL1xyXG4gIGNyZWF0ZUZpZWxkRm9ybSgpIHtcclxuICAgIHRoaXMuZmllbGRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgTGFiZWw6IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkxhYmVsLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIF0qJFwiKSxcclxuICAgICAgICBdLFxyXG4gICAgICBdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgXSxcclxuICAgICAgUmVhZG9ubHk6IFt0aGlzLmZpZWxkLlJlYWRvbmx5XSxcclxuICAgICAgUmVxdWlyZWQ6IFt0aGlzLmZpZWxkLlJlcXVpcmVkXSxcclxuICAgICAgRmllbGRUeXBlOiBbXHJcbiAgICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgXSxcclxuICAgICAgRE1Nb2R1bGU6IFtudWxsXSwgICAgICBcclxuICAgICAgRE1GaWVsZDogW251bGxdLCAgICAgIFxyXG4gICAgICBEYXRhR2V0dGVyVHlwZTogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSxcclxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIF0sICAgICAgXHJcbiAgICAgIENvbFNwYW5TaXplczogW3RoaXMuZmllbGQuQ29sU3BhblNpemVzXSxcclxuICAgICAgSW5MaXN0VmlldzogW3RoaXMuZmllbGQuSW5MaXN0Vmlld10sXHJcbiAgICAgIEludmlzaWJpbGl0eTogW3RoaXMuZmllbGQuSW52aXNpYmlsaXR5XSxcclxuICAgICAgVmlzaWJsZUlmOiBbdGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgTWFpbnRhaW5fVmFsdWU6IFt0aGlzLmZpZWxkLk1haW50YWluX1ZhbHVlXSxcclxuICAgICAgVG9vbHRpcDogW3RoaXMuZmllbGQuVG9vbHRpcCwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBMYWJlbHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEZpZWxkc3R5bGVDU1M6IFt0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgRm9ybXVsYTogW3RoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBEYXRhR2V0dGVyVmFsdWU6IFt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcblxyXG4gICAgICBBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1M6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1MsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEFuc3dlclN0eWxlVmlzaWJsZUlmOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgQW5zd2VyU3R5bGVDb2xTcGFuU2l6ZXM6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc10sXHJcbiAgICAgIEFuc3dlclN0eWxlSW5MaXN0VmlldzogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0Vmlld10sXHJcbiAgICAgIEFuc3dlclN0eWxlSW52aXNpYmlsaXR5OiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHldLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUZpZWxkc0dyb3Vwcykge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJGaWVsZEdyb3VwXCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLmZpZWxkLkZpZWxkR3JvdXAsIFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHF1ZXN0aW9uUG9sbChjb250cm9sOiBGb3JtQ29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBjJ8OoIHVuIEZvcm1Db250cm9sIGNoZSDDqCB2dW90byBjaGUgZGEgcHJvYmxlbWkgKHByb2JhYmlsbWVudGUgdHlwZSBEYXRhLCBjYW1wbyBGb3JtYXRvKVxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5zdHJpbmdDaGVja1BhcmVudGVzaXMoXHJcbiAgICAgICAgICBjb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgY29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IFwiTWlzc2luZyBQYXJlbnRoZXNpc1wiOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdHJpbmdTYW5pdGFpemVkVmFsaWRhdG9yKGNvbnRyb2w6IEZvcm1Db250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIGMnw6ggdW4gRm9ybUNvbnRyb2wgY2hlIMOoIHZ1b3RvIGNoZSBkYSBwcm9ibGVtaSAocHJvYmFiaWxtZW50ZSB0eXBlIERhdGEsIGNhbXBvIEZvcm1hdG8pXHJcbiAgICBpZiAoY29udHJvbC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyhcclxuICAgICAgICAgIGNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgXCJMYSBmb3JtdWxhIG5vbiDDqCB2YWxpZGFcIjogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gZ2V0QWxsRm9ybVZhbGlkYXRpb25FcnJvcnMoKSB7XHJcbiAgLy8gICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAvLyAgICAgY29uc3QgY29udHJvbEVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9XHJcbiAgLy8gICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5nZXQoa2V5KS5lcnJvcnM7XHJcbiAgLy8gICAgIGlmIChjb250cm9sRXJyb3JzICE9IG51bGwpIHtcclxuICAvLyAgICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgLy8gICAgICAgICAgIFwiS2V5IGNvbnRyb2w6IFwiICsga2V5ICsgXCIsIGtleUVycm9yOiBcIiArIGtleUVycm9yICsgXCIsIGVyciB2YWx1ZTogXCIsXHJcbiAgLy8gICAgICAgICAgIGNvbnRyb2xFcnJvcnNba2V5RXJyb3JdXHJcbiAgLy8gICAgICAgICApO1xyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBkYWkgbWF0LWVycm9yIHBlciBwcmVuZGVyZSBnbGkgZXJyb3JpIGdlbmVyYXRpIHJlbGF0aXZpIGFsIGNhbXBvLlxyXG4gICAqIEBwYXJhbSBjb250cm9sIMOoIGlsIG5vbWUgZGVsIEdyb3VwQ29udHJvbCBkaSBjdWkgbGVnZ2VyZSBzZSBjaSBzb25vIGVycm9yaVxyXG4gICAqL1xyXG4gIGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKGNvbnRyb2w6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbnRyb2wgPT0gXCJMYWJlbFwiKSBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRGb3JtVmFsaWRhdGlvbkVycm9ycycsIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbFwiXSk7XHJcblxyXG4gICAgY29uc3QgY29udHJvbEVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbY29udHJvbF0uZXJyb3JzO1xyXG4gICAgbGV0IGVycm9ycyA9IFtdO1xyXG4gICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgaWYgKGNvbnRyb2xFcnJvcnMgIT0gbnVsbCkge1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xyXG4gICAgICAgIGVycm9ycy5wdXNoKGtleUVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2NvbnRyb2w6ICcsIGNvbnRyb2wpO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdlcnJvcnM6ICcsIGVycm9ycyk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZhbHVlczogJywgdmFsdWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvcnMuam9pbihcIiwgXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHF1YW5kbyBjYW1iaWEgaWwgRmllbGRUeXBlIGRlbCBCYXNlRmllbGQgY2hlIHNpIHN0YSBhZ2dpdW5nZW5kby9tb2RpZmljYW5kby5cclxuICAgKiBSaWNyZWEgbCdvZ2dldHRvIGZpZWxkIHBvcG9sYW5kbyBzb2xvIGxlIHByb3ByaWV0w6AgZGVsIEJhc2VGaWVsZCBpbnNlcml0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqIChxdWVsbGUgY29tdW5pIGEgdHV0dGUgbGUgdGlwb2xvZ2llIGRpIGNhbXBvKSwgcmljcmVhIGxhIGZvcm0gZSwgaW4gYmFzZSBhbCBGaWVsZFR5cGUgc2NlbHRvLFxyXG4gICAqIGFnZ2l1bmdlIGFsbGEgZm9ybSBpIEZvcm1Db250cm9sIG5lY2Vzc2FyaSBlIHNlbGV6aW9uYSBpbCB0ZW1wbGF0ZSBjb3JyZXR0byBkYSB1c2FyZS5cclxuICAgKiBAcGFyYW0gcmVzdG9yZUZpZWxkIFNlIFRSVUUgcmlwcmlzdGluYSBpIHZhbG9yaSBiYXNlIChlcmVkaXRhdGkgZGFsIG1vZGVsbG8gQmFzZUZpZWxkKSBkZWwgY2FtcG8gYWdnaXVudG8vbW9kaWZpY2F0b1xyXG4gICAqL1xyXG4gIG9uRmllbGRUeXBlQ2hhbmdlKHJlc3RvcmVGaWVsZDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmIChyZXN0b3JlRmllbGQpIHtcclxuICAgICAgdGhpcy5yZXN0b3JlQmFzZUZpZWxkUHJvcGVydGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3JlYXRlRmllbGRGb3JtKCk7XHJcbiAgICB0aGlzLm9uQ29sU3BhblNpemVTZWxlY3QoKTtcclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBCYXNlRmllbGQpLkluTGlzdFZpZXcgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIEJhc2VGaWVsZCkuSW52aXNpYmlsaXR5ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE87XHJcbiAgICB9ICAgIFxyXG4gICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSBudWxsO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5maWVsZC5GaWVsZFR5cGUpIHtcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBDQU1QTyBESSBURVNUT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NaWNyb3Bob25lID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuTWljcm9waG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlRleHRNYXNrXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuVGV4dE1hc2spXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heExlbmdodFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLk1heExlbmdodCwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaW5MZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWljcm9waG9uZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLk1pY3JvcGhvbmUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMudGV4dEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQ0FNUE8gREkgVEVTVE9cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBMQUJFTFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0V0aWNoZXR0YSddOlxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBMYWJlbEZpZWxkKS5FdGljaGV0dGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5FdGljaGV0dGEgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJFdGljaGV0dGFcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmxhYmVsRmllbGRGb3JtVGVtcGxhdGU7ICAgXHJcbiAgICAgICAgYnJlYWs7ICAgICBcclxuICAgICAgLy8jZW5kcmVnaW9uIExBQkVMXHJcblxyXG4gICAgICAvLyNyZWdpb24gQlVUVE9OXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnQm90dG9uZSBhemlvbmUnXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLkJ1dHRvbkNvZGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5CdXR0b25Db2RlID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiQ29kaWNlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5CdXR0b25Db2RlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuQnV0dG9uQ29kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkJ1dHRvbkNvZGUgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJY29uYVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuSWNvbilcclxuICAgICAgICApOyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmJ1dHRvbkZpZWxkRm9ybVRlbXBsYXRlOyAgIFxyXG4gICAgICAgIGJyZWFrOyAgICAgXHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBCVVRUT04gICAgICBcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBBUkVBIERJIFRFU1RPIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBcmVhIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaWNyb3Bob25lID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuTWljcm9waG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSb3dzXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLlJvd3MsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heExlbmdodFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NYXhMZW5naHQsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pbkxlbmdodFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaW5MZW5naHQsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pY3JvcGhvbmVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWljcm9waG9uZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy50ZXh0YXJlYUZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQVJFQSBESSBURVNUTyBcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBCT09MRUFOT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQm9vbGVhbm86XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNUcmlzdGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBCb29sZWFuRmllbGQpLklzVHJpc3RhdGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJQcmVzZXRhdGlvblR5cGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEJvb2xlYW5GaWVsZCkuUHJlc2V0YXRpb25UeXBlLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuYm9vbGVhZEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQk9PTEVBTk9cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBEQVRBIEUvSSBPUkFcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLklzT25seURhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5Jc09ubHlEYXRlID0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNPbmx5RGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUsIFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluRGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5NaW5EYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWF4RGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5NYXhEYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRGF0ZUZvcm1hdFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXQpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuZGF0ZUZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gREFUQSBFL0kgT1JBXHJcblxyXG4gICAgICAvLyNyZWdpb24gQ0FNUE8gTlVNRVJJQ09cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSXNJbnRlZ2VyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNJbnRlZ2VyXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluVmFsdWVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5NaW5WYWx1ZSwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXi0/WzAtOV0rKCxbMC05XSt8XFwuWzAtOV0rKT8kXCIpLCAvLyhcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heFZhbHVlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuTWF4VmFsdWUsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiKSwgLy8oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJEZWNpbWFsU2VwYXJhdG9yXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLkRlY2ltYWxTZXBhcmF0b3IsXHJcbiAgICAgICAgICAgIFt0aGlzLnF1ZXN0aW9uUG9sbCwgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlthLXpBLVogLS8nLC5fL1xcXFxePD5dK1wiKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkRlY2ltYWxQcmVjaXNpb25cIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuRGVjaW1hbFByZWNpc2lvbixcclxuICAgICAgICAgICAgW3RoaXMucXVlc3Rpb25Qb2xsLCBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0rJFwiKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlRob3VzYW5kc1NlcGFyYXRvclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5UaG91c2FuZHNTZXBhcmF0b3IsXHJcbiAgICAgICAgICAgIFt0aGlzLnF1ZXN0aW9uUG9sbCwgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlthLXpBLVogLS8nLC5fL1xcXFxePD5dK1wiKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkN1cnJlbmN5U3ltYm9sXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWVhc3VyZVVuaXRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuTWVhc3VyZVVuaXQsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMubnVtZXJpY0ZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQ0FNUE8gTlVNRVJJQ09cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBBTExFR0FUT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJBbGxvd2VkRXh0ZW5zaW9uc1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5BbGxvd2VkRXh0ZW5zaW9uc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJc011bHRpQXR0YWNoXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuSXNNdWx0aUF0dGFjaClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5hdHRhY2htZW50RmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBBTExFR0FUT1xyXG5cclxuICAgICAgLy8jcmVnaW9uIElNTUFHSU5FXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgaWYgKHR5cGVvZiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ID09IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcgPT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWF4KDQzMjApXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4ID0gKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4ICE9IG51bGwgPyAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHggOiAxMjg7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRW5hYmxlRHJhd2luZ1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZUZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24gPSBuZXcgQXR0YWNobWVudEZpZWxkKCk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJFbmFibGVEcmF3aW5nXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBJbXBvc3RvIGkgRm9ybUNvbnRyb2wgdmFyaWFiaWxpLlxyXG4gICAgICAgIHRoaXMub25JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgICAqL1xyXG4gICAgICAvLyNlbmRyZWdpb24gSU1NQUdJTkVcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBFTEVOQ08gR0VORVJJQ09cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSW5MaXN0VmlldyA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkludmlzaWJpbGl0eSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkludmlzaWJpbGl0eSA9IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTztcclxuICAgICAgICB9ICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJc011bHRpQ2hvaWNoZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJQcmVzZW50YXRpb25Nb2RlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuUHJlc2VudGF0aW9uTW9kZSxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEVMRU5DTyBHRU5FUklDT1xyXG5cclxuICAgICAgLy8jcmVnaW9uIEVMRU5DTyBJTU1BR0lOSVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNNdWx0aUNob2ljaGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5Jc011bHRpQ2hvaWNoZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWF4KDQzMjApXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7ICAgICAgICBcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEVMRU5DTyBJTU1BR0lOSSAgICAgXHJcblxyXG4gICAgICAvLyNyZWdpb24gSU1NQUdJTkUgQ09OIE1BUktFUlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZSBjb24gbWFya2Vyc1wiXTpcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4LFxyXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApOyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBJTU1BR0lORSBDT04gTUFSS0VSICAgICAgICBcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBMT09LVVBcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJFbnRpdHlTb3VyY2VOYW1lXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuRW50aXR5U291cmNlTmFtZSxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiVXNlQXNHZXRPckRpc2NhcmRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLlVzZUFzR2V0T3JEaXNjYXJkKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmxvb2t1cEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gTE9PS1VQXHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIFtcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW0uSW1tYWdpbmUsXHJcbiAgICAgICAgRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdLFxyXG4gICAgICBdLmluY2x1ZGVzKHRoaXMuZmllbGQuRmllbGRUeXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRm9ybXVsYSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJGb3JtdWxhXCJdLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkluTGlzdFZpZXdcIl0uZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiSW52aXNpYmlsaXR5XCJdLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJGb3JtdWxhXCJdLmVuYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiSW5MaXN0Vmlld1wiXS5lbmFibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkludmlzaWJpbGl0eVwiXS5lbmFibGUoKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgW1xyXG4gICAgICAgIEZpZWxkVHlwZUVudW0uQWxsZWdhdG8sXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5JbW1hZ2luZSxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0sXHJcbiAgICAgICAgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXSxcclxuICAgICAgXS5pbmNsdWRlcyh0aGlzLmZpZWxkLkZpZWxkVHlwZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJGaWVsZHN0eWxlQ1NTXCJdLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbHN0eWxlQ1NTXCJdLmVuYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRmllbGRzdHlsZUNTU1wiXS5lbmFibGUoKTtcclxuICAgIH1cclxuICAgIGlmIChbRmllbGRUeXBlRW51bS5Cb29sZWFub10uaW5jbHVkZXModGhpcy5maWVsZC5GaWVsZFR5cGUpKSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbHN0eWxlQ1NTXCJdLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbHN0eWxlQ1NTXCJdLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25GaWVsZFR5cGVDaGFuZ2VcclxuXHJcbiAgLy8jcmVnaW9uIG9uRGF0YUdldHRlclR5cGVDaGFuZ2VcclxuICBhc3luYyBvbkRhdGFHZXR0ZXJUeXBlQ2hhbmdlKCl7XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVsnRGEgbW9kdWxvIGRpbmFtaWNvJ10gJiYgdGhpcy5mb3Jtcy5sZW5ndGggPT0gMCl7XHJcbiAgICAgIHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpe1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5ETU1vZHVsZSA9IG51bGw7XHJcbiAgICB0aGlzLkRNRmllbGQgPSBudWxsO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25EYXRhR2V0dGVyVHlwZUNoYW5nZVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB2YWxvcmUgZGVsbGEgcHJvcHJpZXTDoCBJbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnQgbmVsIGNhc29cclxuICAgKiBkaSBjYW1waSBkaSB0aXBvIEltbWFnaW5lLiBTZSBUUlVFIGFsbG9yYSByaW11b3ZlIGkgRm9ybUNvbnRyb2wgcGVyIGxlIHByb3ByaWV0w6AgSXNNdWx0aUF0dGFjaFxyXG4gICAqIGUgQWxsb3dlZEV4dGVuc2lvbnMgZSBhZ2dpdW5nZSBpIEZvcm1Db250cm9sIHBlciBsZSBwcm9wcmlldMOgIEltZ05hbWUgZSBDb250ZXh0dWFsQXR0YWNobWVudCxcclxuICAgKiBhbHRyaW1lbnRpIGlsIGNvbnRyYXJpby5cclxuICAgKi9cclxuICBvbkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudENoYW5nZSgpIHtcclxuICAgIFxyXG4gICAgLypcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltZ05hbWUgPSBudWxsO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5BbGxvd2VkRXh0ZW5zaW9ucyA9IFtdO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoID0gZmFsc2U7XHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudCA9IG51bGw7XHJcblxyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudCkge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJJc011bHRpQXR0YWNoXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJBbGxvd2VkRXh0ZW5zaW9uc1wiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiSW1nTmFtZVwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWdOYW1lLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgIClcclxuICAgICAgKTsgICAgICBcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiQ29udGV4dHVhbEF0dGFjaG1lbnRcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiSW1nTmFtZVwiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiQ29udGV4dHVhbEF0dGFjaG1lbnRcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIklzTXVsdGlBdHRhY2hcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJBbGxvd2VkRXh0ZW5zaW9uc1wiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLkFsbG93ZWRFeHRlbnNpb25zXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGludGVyY2V0dGFyZSBsJ2FnZ2l1bnRhIGRpIHVuIGFsbGVnYXRvIG5laSBjYW1waSBkaSB0aXBvIEltbWFnaW5lIHBlciBhZ2dpb3JuYXJlXHJcbiAgICogaWwgdmFsb3JlIGRlbGxhIHByb3ByaWV0w6AgQ29udGV4dHVhbEF0dGFjaG1lbnQgZSBsYSB2YWxpZGF6aW9uZSBkZWwgcmVsYXRpdm8gRm9ybUNvbnRyb2wuXHJcbiAgICogQHBhcmFtIGV2ZW50IEFycmF5IGNvbnRlbmVudGUgbCdlbGVuY28gYWdnaW9ybmF0byBkZWdsaSBhbGxlZ2F0aSBjYXJpY2F0aSAobmVsIG5vc3RybyBjYXNvIG5lIGNvbnRpZW5lIGFsIHBpw7kgMSkuXHJcbiAgICovXHJcbiAgY2F0Y2hDb250ZXh0dWFsQXR0YWNobWVudENoYW5nZShldmVudDogQXJyYXk8SUF0dGFjaG1lbnREVE8+KSB7XHJcbiAgICAvKlxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQgPSBldmVudFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJDb250ZXh0dWFsQXR0YWNobWVudFwiXS5zZXRWYWx1ZShcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnRcclxuICAgICk7XHJcbiAgICAqL1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsbGEgc2VsZXppb25lIGRpIHVuYSBjbGFzc2UgbmVsbGEgc2VsZWN0IHBlciBsZSBjb2xvbm5lIGRpIGJvb3RzdHJhcFxyXG4gICAqIGRhIHVzYXJlIG5lbGxhIHZpc3VhbGl6emF6aW9uZSBkZWwgY2FtcG8uIFF1ZXN0YSBmdW56aW9uZSBtYW5pcG9sYSBsYSBzb3JnZW50ZSBkYXRpIHBlclxyXG4gICAqIGxhIGVxcC1zZWxlY3QgaW4gbW9kbyBkYSBlc2NsdWRlcmUgaSB2YWxvcmkgZGVsbCdlbnVtZXJhdG9yZSBjaGUgZmFubm8gcmlmZXJpbWVudG8gYWRcclxuICAgKiB1bmEgbGFyZ2hlenphIGRpIHNjaGVybW8gZ2nDoCBzZWxlemlvbmF0YS4gRXNlbXBpbzogcGVyIGdsaSBzY2hlcm1pIHBpY2NvbGkgKHNtKSBsJ3V0ZW50ZVxyXG4gICAqIHNlbGV6aW9uYSBsYSBjbGFzc2UgXCJjb2wtc20tNlwiLCBhbCBjaGFuZ2UgZGVsIHZhbG9yZSBxdWVzdG8gbWV0b2RvIHJpbXVvdmUgZGFsbGEgc2VsZWN0XHJcbiAgICogdHV0dGkgZ2xpIGFsdHJpIHZhbG9yaSBwZXIgbGEgZ3JhbmRlenphIGRpIHNjaGVybW8gc2VsZXppb25hdGEuXHJcbiAgICovXHJcbiAgb25Db2xTcGFuU2l6ZVNlbGVjdCgpIHtcclxuICAgIC8vIFJlY3VwZXJvIGwnYXJyYXkgZGVnbGkgb2dnZXR0aSBjaGlhdmUtdmFsb3JlIGNoZSByYXBwcmVzZXRhIGwnZW51bWVyYXRvcmVcclxuICAgIGxldCBjb2xTaXplQ2xhc3NFbnVtQXJyYXkgPSB0aGlzLmVudW1IZWxwZXIuZ2V0RW51bUFycmF5KFxyXG4gICAgICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICAgIC8vIENvc3RydWlzY28gbCdhcnJheSBkZWxsZSBjbGFzc2kgc2VsZXppb25hdGUgZGFsbCd1dGVudGUgaW4gZm9ybWF0byBzdHJpbmdhXHJcbiAgICBsZXQgc2VsZWN0ZWREaW1lbnNpb25zQ29tcGlsYXppb25lOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXNcclxuICAgICAgPyB0aGlzLmZpZWxkLkNvbFNwYW5TaXplcy5tYXAoKGNvbCkgPT4gQ29sU3BhblNpemVzRW51bVtjb2xdKVxyXG4gICAgICA6IFtdO1xyXG4gICAgICBsZXQgc2VsZWN0ZWREaW1lbnNpb25zUmlzcG9zdGE6IEFycmF5PHN0cmluZz4gPSB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc1xyXG4gICAgICA/IHRoaXMuZmllbGQuQW5zd2VyU3R5bGUuQ29sU3BhblNpemVzLm1hcCgoY29sKSA9PiBDb2xTcGFuU2l6ZXNFbnVtW2NvbF0pXHJcbiAgICAgIDogW107ICAgICAgXHJcbiAgICAvLyBGaWx0cm8gaSB2YWxvcmkgb3R0ZW51dGkgZGFsbCdlbnVtZXJhdG9yZSBwZXIgZXNjbHVkZXJlIHR1dHRpIGkgdmFsb3JpIHBlciBsZVxyXG4gICAgLy8gZ3JhbmRlenplIGRpIHNjaGVybW8gZ2nDoCBzZWxlemlvbmF0ZWFkIGVzY2x1c2lvbmUgZGVpIHZhbG9yaSBzZWxlemlvbmF0aS5cclxuICAgIHRoaXMuYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lID0gY29sU2l6ZUNsYXNzRW51bUFycmF5LmZpbHRlcihcclxuICAgICAgKHZhbHVlOiB7IGtleTogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH0pID0+XHJcbiAgICAgICAgIXNlbGVjdGVkRGltZW5zaW9uc0NvbXBpbGF6aW9uZS5maW5kKFxyXG4gICAgICAgICAgKGNvbCkgPT5cclxuICAgICAgICAgICAgdmFsdWUudmFsdWUuaW5jbHVkZXMoY29sLnN1YnN0cmluZyg0LCA2KSkgJiYgdmFsdWUudmFsdWUgIT0gY29sXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICAgIHRoaXMuYXZhaWxhYmxlQ29sU3BhblNpemVzUmlzcG9zdGEgPSBjb2xTaXplQ2xhc3NFbnVtQXJyYXkuZmlsdGVyKFxyXG4gICAgICAodmFsdWU6IHsga2V5OiBudW1iZXI7IHZhbHVlOiBzdHJpbmcgfSkgPT5cclxuICAgICAgICAhc2VsZWN0ZWREaW1lbnNpb25zUmlzcG9zdGEuZmluZChcclxuICAgICAgICAgIChjb2wpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKGNvbC5zdWJzdHJpbmcoNCwgNikpICYmIHZhbHVlLnZhbHVlICE9IGNvbFxyXG4gICAgICAgIClcclxuICAgICk7ICAgIFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgc2NlbHRhIHBlciBpIGNhbXBpIGRpIHRpcG8gZWxlbmNvIGdlbmVyaWNvLlxyXG4gICAqIFNlIHZpZW5lIHNjZWx0YSBsYSB2aXN1YWxpenphemlvbmUgYWQgaW1tYWdpbmkgc3Z1b3RhIGxhIGxpc3RhIGRlbGxlIGNvcHBpZSBjaGlhdmUtdmFsb3JlIGluc2VyaXRlXHJcbiAgICogaW4gcHJlY2VkZW56YSwgYWx0cmltZW50aSBzdnVvdGEgbGEgbGlzdGEgZGVsbGUgaW1tYWdpbmkgY2FyaWNhdGUuXHJcbiAgICovXHJcbiAgb25QcmVzZW50YXRpb25Nb2RlQ2hhbmdlKCkge1xyXG4gICAgaWYodGhpcy5maWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydSYWRpbyBidXR0b24nXSl7XHJcbiAgICAgIHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBzYWx2YXRhZ2dpbyBkZWdsaSBhbGxlZ2F0aSBxdWFuZG8gdmllbmUgY29uZmlndXJhdG8gdW4gY2FtcG8gZGkgdGlwbyBcIkVsZW5jbyBnZW5lcmljb1wiXHJcbiAgICogY29uIGlsIHRpcG8gZGkgdmlzdWFsaXp6YXppb25lIGFkIGltbWFnaW5pLiBJbnRlcmNldHRhIGwnZWxlbmNvIGFnZ2lvcm5hdG8gZGVsbGUgaW1tYWdpbmkgY2FyaWNhdGUgZSBsb1xyXG4gICAqIG1lbW9yaXp6YSBuZWxsJ29nZ2V0dG8gZmllbGQgY29ycmVudGUuXHJcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRzIEFycmF5IGFnZ2lvcm5hdG8gZGVnbGkgYWxsZWdhdGkgY2FyaWNhdGkuXHJcbiAgICovXHJcbiAgY2F0Y2hCdXR0b25JbWFnZXNDaGFuZ2UoYXR0YWNobWVudHM6IEFycmF5PElBdHRhY2htZW50RFRPPikge1xyXG5cclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QgPSBhdHRhY2htZW50cyBhcyBBcnJheTxEeW5BdHRhY2htZW50PjtcclxuXHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudDogRHluQXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID09IFwidW5kZWZpbmVkXCIpe1xyXG5cclxuICAgICAgICAgIHZhciBteUJhc2U2NCA9IFwiZGF0YTppbWFnZS9cIithdHRhY2htZW50LkZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKStcIjtiYXNlNjQsXCIgKyBhdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICAgIGltZy5zcmMgPSBteUJhc2U2NDtcclxuICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnQuSW1hZ2VXaWR0aFB4ID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgYXR0YWNobWVudC5BdHRhY2htZW50RmllbGRUeXBlID0gQXR0YWNobWVudEZpZWxkVHlwZUVudW0uRUxFTkNPX0lNTUFHSU5JO1xyXG4gICAgICAgICAgICAgIGlmIChzZWxmLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHNlbGYuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gIH1cclxuXHJcbiAgY2F0Y2hCdXR0b25JbWFnZUNoYW5nZShhdHRhY2htZW50czogQXJyYXk8SUF0dGFjaG1lbnREVE8+KSB7XHJcblxyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudCA9IGF0dGFjaG1lbnRzWzFdIGFzIER5bkF0dGFjaG1lbnQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID09IFwidW5kZWZpbmVkXCIpe1xyXG5cclxuICAgICAgICB2YXIgbXlCYXNlNjQgPSBcImRhdGE6aW1hZ2UvXCIrdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKStcIjtiYXNlNjQsXCIgKyB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQ7XHJcbiAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICBpbWcuc3JjID0gbXlCYXNlNjQ7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgc2VsZi5maWVsZC5EeW5BdHRhY2htZW50LkltYWdlV2lkdGhQeCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5BdHRhY2htZW50RmllbGRUeXBlID0gQXR0YWNobWVudEZpZWxkVHlwZUVudW0uSU1NQUdJTkU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9ICAgICAgXHJcbiAgICAgIFxyXG4gIH0gIFxyXG5cclxuICBjYXRjaEJ1dHRvbkltYWdlV2l0aE1hcmtlcnNDaGFuZ2UoYXR0YWNobWVudHM6IEFycmF5PElBdHRhY2htZW50RFRPPikge1xyXG5cclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuRHluQXR0YWNobWVudCA9IGF0dGFjaG1lbnRzWzFdIGFzIER5bkF0dGFjaG1lbnQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID09IFwidW5kZWZpbmVkXCIpe1xyXG5cclxuICAgICAgICB2YXIgbXlCYXNlNjQgPSBcImRhdGE6aW1hZ2UvXCIrdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKStcIjtiYXNlNjQsXCIgKyB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQ7XHJcbiAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICBpbWcuc3JjID0gbXlCYXNlNjQ7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgc2VsZi5maWVsZC5EeW5BdHRhY2htZW50LkltYWdlV2lkdGhQeCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5BdHRhY2htZW50RmllbGRUeXBlID0gQXR0YWNobWVudEZpZWxkVHlwZUVudW0uSU1NQUdJTkVfQ09OX01BUktFUlM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9ICAgICAgXHJcbiAgICAgIFxyXG4gIH0gICAgXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBhbCBrZXl1cCBkZWdsaSBpbnB1dCB0ZXN0dWFsaSBjaGUgcHJldmVkb25vIGwnYWdnaXVudGEgZGVsIHZhbG9yZSBpbnNlcml0byBpbiB1biBhcnJheS5cclxuICAgKiBTZSBsJ3V0ZW50ZSBwcmVtZSBpbCB0YXN0byBpbnZpbywgaW4gYmFzZSBhbCB0aXBvIGRpIGNhbXBvIGNoZSBzdGEgaW5zZXJlbmRvL21vZGlmaWNhbmRvLCBxdWVzdG8gbWV0b2RvXHJcbiAgICogYWdnaXVuZ2UgaWwgdmFsb3JlIGluc2VyaXRvIGRhbGwndXRlbnRlIG5lbGxhIGxpc3RhIGRpIHN0cmluZ2hlIGNvcnJldHRhIChpbiBpbnB1dCB2aWVuZSBwYXNzYXRvIGlsIG5vbWVcclxuICAgKiBkZWxsYSBwcm9wcmlldMOgIGluIGN1aSBpbnNlcmlyZSBsYSBzdHJpbmdhKS5cclxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGNoZSByYXBwcmVzZW50YSBpbCBrZXl1cCBkZWxsJ3V0ZW50ZVxyXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgTm9tZSBkZWxsYSBwcm9wcmlldMOgIGRlbCBmaWVsZCBpbiBjdWkgaW5zZXJpcmUgbGEgc3RyaW5nYSBkaWdpdGF0YS5cclxuICAgKi9cclxuICBvbk11bHRpU2VsZWN0SW5wdXRLZXl1cChldmVudCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChldmVudC5jb2RlID09PSBcIkVudGVyXCIgfHwgZXZlbnQuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5maWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uTG9va3VwOlxyXG4gICAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5BbGxlZ2F0bzpcclxuICAgICAgICAgIGlmICghdGhpcy5maWVsZFtwcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGRbcHJvcGVydHlOYW1lXSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpZWxkW3Byb3BlcnR5TmFtZV0ucHVzaChldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmUgY29uIG1hcmtlcnNcIl06XHJcbiAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICBcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgICBpZiAoIXRoaXMua2V5VmFsdWVPYmplY3Qua2V5IHx8ICF0aGlzLmtleVZhbHVlT2JqZWN0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpIHtcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW3RoaXMua2V5VmFsdWVPYmplY3Qua2V5XSA9XHJcbiAgICAgICAgICAgIHRoaXMua2V5VmFsdWVPYmplY3QudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmtleVZhbHVlT2JqZWN0ID0geyBrZXk6IFwiXCIsIHZhbHVlOiBcIlwiIH07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBwZXIgbW9zdHJhcmUgY29tZSBlbGVuY28gbGUgb3B6aW9uaSBhZ2dpdW50ZSBpbiB1biBjYW1wbyBkaSB0aXBvIFwiRWxlbmNvIGdlbmVyaWNvXCIuXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gYXJyYXkgZGkgb2dnZXR0aSBkZWwgdGlwbyB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0gY29uIGkgdmFsb3JpIGluc2VyaXRpIGRhbGwndXRlbnRlLlxyXG4gICAqL1xyXG4gIGdldERpY3Rpb25hcnlLZXlWYWx1ZSgpIHtcclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLm1hcCgoaykgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBrZXk6IGssXHJcbiAgICAgICAgICB2YWx1ZTogKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba10sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSB1bmEgb3B6aW9uZSBhZ2dpdW50YSBhbCBjYW1wbyBkaSB0aXBvIFwiRWxlbmNvIGdlbmVyaWNvXCJcclxuICAgKiBAcGFyYW0ga2V5IE5vbWUgZGVsbGEgY2hpYXZlIGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUtleUZyb21EaWN0aW9uYXJ5KGtleTogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba2V5XTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuRm9ybXVsYURpYWxvZ1xyXG4gIG9wZW5Gb3JtdWxhRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dGb3JtdWxhUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0Zvcm11bGEsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWVsZHM6IHRoaXMuYXZhaWxhYmxlRmllbGRzLFxyXG4gICAgICAgIGZvcm11bGE6IHRoaXMuZmllbGQuRm9ybXVsYSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dGb3JtdWxhUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKSA9PSBcIlwiID8gbnVsbCA6IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5Gb3JtdWxhRGlhbG9nXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuVmlzaWJsZUlmRGlhbG9nXHJcbiAgb3BlblZpc2libGVJZkRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nVmlzaWJsZUlmUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0Zvcm11bGEsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWVsZHM6IHRoaXMuYXZhaWxhYmxlRmllbGRzLFxyXG4gICAgICAgIGZvcm11bGE6IHRoaXMuZmllbGQuVmlzaWJsZUlmLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmID0gcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKSA9PSBcIlwiID8gbnVsbCA6IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5WaXNpYmxlSWZEaWFsb2dcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5BbnN3ZXJTdHlsZVZpc2libGVJZkRpYWxvZ1xyXG4gIG9wZW5BbnN3ZXJTdHlsZVZpc2libGVJZkRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nVmlzaWJsZUlmUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0Zvcm11bGEsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWVsZHM6IHRoaXMuYXZhaWxhYmxlRmllbGRzLFxyXG4gICAgICAgIGZvcm11bGE6IHRoaXMuZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmID0gcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKSA9PSBcIlwiID8gbnVsbCA6IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5BbnN3ZXJTdHlsZVZpc2libGVJZkRpYWxvZ1xyXG5cclxuICBzdHJpbmdTYW5pdGl6ZXIodmFsdWUpIHtcclxuICAgIGlmICghVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKHZhbHVlKSkge1xyXG4gICAgICAvLyBhbGVydChcImVycm9yZSFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gZGlzYWJsZVNhdmVGaWVsZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZGlzYWJpbGl0YXJlIGlsIHB1bHNhbnRlIHBlciBzYWx2YXJlIGlsIGNhbXBvIGluc2VyaXRvL21vZGlmaWNhdG8uXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gYm9vbGVhbm8sIHNlIHRydWUgaWwgc2FsdmF0YWdnaW8gdmllbmUgZGlzYWJpbGl0YXRvLlxyXG4gICAqL1xyXG4gIGRpc2FibGVTYXZlRmllbGQoKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGRGb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuRm9ybXVsYSAhPSBcIlwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAhPSBudWxsICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gXCJcIil7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAhKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgfHxcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXTogXHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0IHx8XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZpbmQoXHJcbiAgICAgICAgICAoaSkgPT4gKGkuQnV0dG9uS2V5ID09IG51bGwgfHwgaS5CdXR0b25LZXkgPT09IFwidW5kZWZpbmVkXCIgfHwgaS5CdXR0b25LZXkgPT0gJycpIHx8IChpLkJ1dHRvblZhbHVlID09IG51bGwgfHwgaS5CdXR0b25WYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpLkJ1dHRvblZhbHVlID09ICcnKVxyXG4gICAgICAgICkgIT0gbnVsbFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgISh0aGlzLmZpZWxkIGFzIExvb2t1cEZpZWxkKS5GaWVsZE5hbWVzIHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuRmllbGROYW1lcy5sZW5ndGggPT09IDBcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGRpc2FibGVTYXZlRmllbGRcclxuXHJcbiAgLy8jcmVnaW9uIHNhdmVBbmRFeGl0QWRkRmllbGRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaWwgY2FtcG8gaW5zZXJpdG8vbW9kaWZpY2F0by5cclxuICAgKiBTZSDDqCBzdGF0byBpbnNlcml0byB1biBmaWVsZCBjb24gbGEgc3Rlc3NhIGxhYmVsIHZpZW5lIGdlbmVyYXRvIHVuIGVycm9yZSAobGUgbGFiZWwgZGV2b25vIGVzc2VyZSB1bml2b2NoZSkuXHJcbiAgICogVW5hIHZvbHRhIGFnZ2l1bnRvL2FnZ2lvcm5hdG8gaWwgY2FtcG8gbmVsbCdlbGVuY28gZGVpIEZpZWxkIGRlbGxhIEZvcm0gY2hpdWRlIGlsIGRpYWxvZyBlIHJpY2FyaWNhIGxhIHRhYmVsbGFcclxuICAgKiBjaGUgbW9zdHJhIGwnZWxlbmNvIGRlaSBjYW1waSBhZ2dpdW50aSBhbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZUFuZEV4aXRBZGRGaWVsZChzYXZlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNldFJlc2l6ZWRJbWFnZXNIZWlnaHRQeCgpO1xyXG4gICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzKXsgdGhpcy5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMucmVsb2FkRGF0YSgpOyB9XHJcbiAgICBpZiAoc2F2ZSkge1xyXG4gICAgICB0aGlzLmZpZWxkLk5hbWU9dGhpcy5maWVsZC5MYWJlbDsgXHJcbiAgICAgIC8vIHJldHJvY29tcGF0aWJpbGl0w6AgY29uIHZhbHVlcGFpcnMgcGVyIEVsZW5jbyBHZW5lcmljb1xyXG4gICAgICBpZih0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICYmICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICE9IFwiXCIpIHx8ICgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgJiYgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICE9IFwiXCIpKXtcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXSkge1xyXG4gICAgICAgIGlmKCgodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCA+IDApKXtcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgICAgICBhdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4ID0gKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHg7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5JbW1hZ2luZSkge1xyXG4gICAgICAgIGlmKCgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ICE9IG51bGwpKXtcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgICAgXHJcbiAgICAgIGlmKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZSBjb24gbWFya2Vyc1wiXSkge1xyXG4gICAgICAgIGlmKCgodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQgIT0gbnVsbCkpe1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkKS5EeW5BdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4ID0gKHRoaXMuZmllbGQgYXMgSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgIFxyXG4gICAgICBpZih0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiQm90dG9uZSBhemlvbmVcIl0pIHtcclxuICAgICAgICBpZigoKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLmZvcm11bGFzVGVtcCAhPSBudWxsKSl7XHJcblxyXG4gICAgICAgICAgdmFyIGZvcm11bGFzID0gKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLmZvcm11bGFzVGVtcDtcclxuXHJcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZm9ybXVsYXMpO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgdmFyIGt0djogS2V5VHlwZVZhbHVlID0gbmV3IEtleVR5cGVWYWx1ZSgpO1xyXG4gICAgICAgICAgICBrdHYua2V5ID0ga2V5O1xyXG4gICAgICAgICAgICBrdHYudG9vbHRpcCA9IGZvcm11bGFzW2tleV0udG9vbHRpcDtcclxuICAgICAgICAgICAga3R2LnR5cGUgPSBmb3JtdWxhc1trZXldLnR5cGU7XHJcbiAgICAgICAgICAgIGt0di52YWx1ZSA9IGZvcm11bGFzW2tleV0udmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5mb3JtdWxhcyA9IGt0djtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tZmllbGQgc2F2ZScsIHRoaXMuZmllbGQpXHJcbiAgICAgIHRoaXMuc2F2ZUZpZWxkRXZlbnQuZW1pdCh0aGlzLmZpZWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUZpZWxkRXZlbnQuZW1pdChudWxsKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHNhdmVBbmRFeGl0QWRkRmllbGRcclxuXHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaXByaXN0aW5hcmUgbCdvZ2dldHRvIGZpZWxkIGFsIGNhbWJpbyBkZWwgdGlwbyBzZWxlemlvbmF0by5cclxuICAgKiBMYXNjaWEgdmFsb3JpenphdGUgc29sbyBsZSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byBCYXNlRmllbGQgY29tdW5lIGEgdHV0dGkgaSB0aXBpIGRpIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZCkge1xyXG4gICAgICBjb25zdCB0bXBCYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQpKTtcclxuICAgICAgdGhpcy5maWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5maWVsZC5MYWJlbCA9IHRtcEJhc2VGaWVsZC5MYWJlbDtcclxuICAgICAgdGhpcy5maWVsZC5EZXNjcmlwdGlvbiA9IHRtcEJhc2VGaWVsZC5EZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5maWVsZC5SZXF1aXJlZCA9IHRtcEJhc2VGaWVsZC5SZXF1aXJlZDtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUgPSB0bXBCYXNlRmllbGQuRmllbGRUeXBlO1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSB0bXBCYXNlRmllbGQuRm9ybXVsYTtcclxuICAgICAgdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXMgPSB0bXBCYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0bXBCYXNlRmllbGQuSW5MaXN0VmlldztcclxuICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSB0bXBCYXNlRmllbGQuSW52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLmZpZWxkLlRvb2x0aXAgPSB0bXBCYXNlRmllbGQuVG9vbHRpcDtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IHRtcEJhc2VGaWVsZC5SZWFkb25seTtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZEdyb3VwID0gdG1wQmFzZUZpZWxkLkZpZWxkR3JvdXA7XHJcbiAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmID0gdG1wQmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcblxyXG4gIGNvdW50VmFsdWVQYWlycyh2YWx1ZVBhaXJzKTogbnVtYmVye1xyXG4gICAgaWYodmFsdWVQYWlycyl7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZVBhaXJzKS5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZUNvbHVtbnMoKXtcclxuXHJcbiAgICAvLyBMaXN0YSBHZW5lcmljYSBkaSBpbW1hZ2luaVxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzID0gW107XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgICAga2V5OiAnYWN0aW9uJywgZGlzcGxheTogJycsIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbiwgYnV0dG9uTWVudUljb246ICdtb3JlX3ZlcnQnLCBzdHlsZXM6IHsgZmxleDogJzAgMCA2JScgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IG5hbWU6ICdFbGltaW5hJywgaWNvbjogJ2RlbGV0ZScsIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kZWxldGVMaXN0SW1hZ2UoZWxlbWVudCwgaW5kZXgsIGNvbCkgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd191cHdhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT4gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA+PSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgfSk7IFxyXG5cclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiRmlsZURhdGFCYXNlNjRcIixcclxuICAgICAgZGlzcGxheTogXCJJbW1hZ2luZVwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlLFxyXG4gICAgfSk7ICAgIFxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJCdXR0b25LZXlcIixcclxuICAgICAgZGlzcGxheTogXCJDaGlhdmUqXCIsXHJcbiAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5HZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgIGtleTpcIkJ1dHRvblZhbHVlXCIsXHJcbiAgICAgIGRpc3BsYXk6IFwiVmFsb3JlKlwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlLFxyXG4gICAgfSk7ICAgXHJcbiAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgIGtleTpcIkltYWdlV2lkdGhQeFwiLFxyXG4gICAgICBkaXNwbGF5OiBcIkxhcmdoZXp6YVwiXHJcbiAgICB9KTsgICAgIFxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJJbWFnZUhlaWdodFB4XCIsXHJcbiAgICAgIGRpc3BsYXk6IFwiQWx0ZXp6YVwiXHJcbiAgICB9KTsgICAgICAgICAgICBcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogRHluQXR0YWNobWVudCxcclxuICAgIG1vdmVVcDogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KTtcclxuICAgIGNvbnN0IGVuZGluZ0luZGV4ID0gc3RhcnRpbmdJbmRleCArIChtb3ZlVXAgPyAtMSA6IDEpO1xyXG5cclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5zcGxpY2UoZW5kaW5nSW5kZXgsIDAsIGVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0KSB7XHJcbiAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlc2l6ZWRJbWFnZXNIZWlnaHRQeCgpe1xyXG4gICAgdGhpcy5yZXNpemVkSW1hZ2VzSGVpZ2h0UHggPSB0aGlzLmZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUxpc3RJbWFnZShlbDogRHluQXR0YWNobWVudCwgaTogbnVtYmVyLCBjb2w6IG51bWJlcil7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuQ29uZmlybSgnRWxpbWluYXJlIHF1ZXN0YSBpbW1hZ2luZT8nLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5zcGxpY2UoZWwub3JpZ2luYWxJbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzKXsgdGhpcy5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMucmVsb2FkRGF0YSgpOyB9XHJcblxyXG4gICAgIH0sIGZhbHNlLCAnUmljaGllc3RhIGNvbmZlcm1hJyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVJbWFnZShlbDogRHluQXR0YWNobWVudCl7XHJcbiAgICB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gREIgR0VUVEVSXHJcbiAgb3BlbkRCR2V0dGVyKCl7XHJcbiAgICBpZiAodGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudCAhPSBudWxsICYmICF0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLnVzZUR5bmFtaWNNb2R1bGVNb2NrKXtcclxuXHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLm1vZGUgPSBRdWVyeUVkaXRvck1vZGVFbnVtLkNPTVBPU0VSO1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5sb2FkUXVlcnlTdGF0dXNlcyA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWU7XHJcblxyXG4gICAgICB0aGlzLmRpYWxvZ1FFUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1FFLCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdxdWVyeS1lZGl0b3ItbW9kYWwnLFxyXG4gICAgICAgIHdpZHRoOiAnOTAlJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldCgnLi9hc3NldHMvbW9ja3Vwcy9tb2NrZWRGcm9tUXVlcnlFZGl0b3JfUVVFUllfV0lUSF9RVUVTVElPTi50eHQnLCB7cmVzcG9uc2VUeXBlOiAndGV4dCd9KVxyXG4gICAgICAuc3Vic2NyaWJlKG1vY2tlZEZyb21RdWVyeUVkaXRvciA9PiB7XHJcbiAgICAgICAgdGhpcy50cmVhdERhdGFGcm9tUXVlcnlFZGl0b3IoSlNPTi5wYXJzZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IpLlBhcmFtcyk7XHJcbiAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVFFTW9kYWwoKXtcclxuICAgIHRoaXMuZGlhbG9nUUVSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KXtcclxuICAgIGlmIChldi5CZWhhdmlvdXJzLmluZGV4T2YoXCJzZW5kLW91dFwiKSAhPSAtMSl7IHRoaXMub3V0LmVtaXQoZXYpOyB9XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwiY2xvc2UtbW9kYWxcIikgIT0gLTEpeyB0aGlzLmNsb3NlUUVNb2RhbCgpOyB9ICAgXHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwic2F2ZS1xdWVyeVwiKSAhPSAtMSl7IFxyXG4gICAgICBcclxuICAgICAgdGhpcy50cmVhdERhdGFGcm9tUXVlcnlFZGl0b3IoZXYuUGFyYW1zKTtcclxuXHJcbiAgICAgfVxyXG4gIH1cclxuXHJcbiAgdHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGRhdGE6IGFueSl7XHJcbiAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gZGF0YTtcclxuICAgIHRoaXMuY3JlYXRlQ29sdW1uS2V5cyhkYXRhKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbHVtbktleXMoZGF0YSl7XHJcbiAgICBpZiAoZGF0YSA9PSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCl7IGRhdGEgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlOyB9XHJcbiAgICBpZiAoZGF0YSAhPSBudWxsICYmIHR5cGVvZiBkYXRhICE9IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRhdGEuc2VsZWN0ZWRGaWVsZHMgIT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgIHRoaXMuY29sdW1uS2V5cyA9IG5ldyBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KCk7XHJcbiAgICAgIGRhdGEuc2VsZWN0ZWRGaWVsZHMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5LZXlzLnB1c2goe2tleToga2V5LkRhdGFiYXNlVGFibGVOYW1lK1wiX1wiK2tleS5Qcm9wZXJ0eU5hbWUrXCJfX1wiK2tleS5DdXJyZW50VHJhbnNsYXRlLnJlcGxhY2UoXCIgXCIsXCJfXCIpLCB2YWx1ZToga2V5LkN1cnJlbnRUcmFuc2xhdGV9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBbGxNb2R1bGVzKCl7XHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJvcmdhaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLk9yZ2FJRCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRBbGxGb3JtRW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEFycmF5PEZvcm0+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtcyA9IHJlcztcclxuICAgICAgICB0aGlzLmZvcm1zID0gdGhpcy5mb3Jtcy5zb3J0KCh1bm8sIGR1ZSkgPT4gdW5vLk5hbWUubG9jYWxlQ29tcGFyZShkdWUuTmFtZSkpO1xyXG5cclxuICAgICAgICB0aGlzLkRNRmllbGQgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLkRNTW9kdWxlID09IG51bGwgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuRE1Nb2R1bGUgPSB0aGlzLmZvcm1zLmZpbmQoeCA9PiB4LkNvZGUgPT0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcyA9IEpTT04ucGFyc2UodGhpcy5ETU1vZHVsZS5Kc29uRmllbGRzKTtcclxuICAgICAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLkRNRmllbGRzLnB1c2goeyBrZXk6IGVsZW1lbnQuVmFsdWUuTmFtZSB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuRE1GaWVsZHMgPSB0aGlzLkRNRmllbGRzLnNvcnQoKHVubywgZHVlKSA9PiB1bm8ua2V5LmxvY2FsZUNvbXBhcmUoZHVlLmtleSkpO1xyXG4gIFxyXG4gICAgICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHRoaXMuRE1GaWVsZCA9IHRoaXMuRE1GaWVsZHMuZmluZCh4ID0+IHgua2V5ID09IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UpO1xyXG4gICAgICAgICAgfSAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7IH1cclxuICAgICk7ICAgIFxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VETU1vZHVsZSgpe1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLkRNTW9kdWxlXCIsdGhpcy5ETU1vZHVsZSx0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlKTtcclxuICAgIGlmICh0aGlzLkRNTW9kdWxlICE9IG51bGwpe1xyXG4gICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcyA9IEpTT04ucGFyc2UodGhpcy5ETU1vZHVsZS5Kc29uRmllbGRzKTtcclxuICAgICAgdGhpcy5ETUZpZWxkcyA9IG5ldyBBcnJheTx7IGtleTogc3RyaW5nIH0+KCk7XHJcbiAgICAgIHRoaXMuRE1Nb2R1bGUuRmllbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5ETUZpZWxkcy5wdXNoKHsga2V5OiBlbGVtZW50LlZhbHVlLk5hbWUgfSk7XHJcbiAgICAgIH0pO1xyXG4gIFxyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gdGhpcy5ETU1vZHVsZS5Db2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ETU1vZHVsZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkRNRmllbGQgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRE1GaWVsZCgpe1xyXG4gICAgaWYgKHRoaXMuRE1GaWVsZCAhPSBudWxsKXtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IHRoaXMuRE1GaWVsZC5rZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRE1Db250ZXN0dWFsaXphdGlvbigpe1xyXG4gICAgY29uc29sZS5sb2coXCJvbkNoYW5nZURNQ29udGVzdHVhbGl6YXRpb24oKVwiLCB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbnRlc3R1YWxpemF0aW9uKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZWRCdXR0b25GaWVsZChmaWVsZDogQWN0aW9uQnV0dG9uRmllbGQpe1xyXG4gICAgdGhpcy5maWVsZCA9IGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgY29uZmlndXJlRmllbGRzRXh0cmEoKXtcclxuICAgIGlmICh0aGlzLmZpZWxkc0V4dHJhQ29uZmlnICE9IG51bGwgJiYgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5sZW5ndGggPiAwICYmIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9PSBudWxsICYmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCB8fCB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMubGVuZ3RoID09IDApKXtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5mb3JFYWNoKChmaWVsZEV4dHJhQ29uZmlnKSA9PiB7XHJcblxyXG4gICAgICAgIHZhciBuZXdmaWVsZDogRmllbGRFeHRyYVZhbHVlcyA9IG5ldyBGaWVsZEV4dHJhVmFsdWVzKCk7XHJcbiAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdDb2RlID0gZmllbGRFeHRyYUNvbmZpZy5GaWVsZENvbmZpZ0NvZGU7XHJcbiAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPSB0aGlzLmZpZWxkLk5hbWU7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddKXtcclxuICAgICAgICAgIG5ld2ZpZWxkLkZpZWxkQ29uZmlnVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdUeXBlID09IEZpZWxkVHlwZUVudW1bJ0NhbXBvIGRpIHRlc3RvJ10pe1xyXG4gICAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfSAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzLnB1c2gobmV3ZmllbGQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKG5ld2ZpZWxkKTtcclxuXHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkc0V4dHJhQ29uZmlnICE9IG51bGwgJiYgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5sZW5ndGggPiAwICYmIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCB8fCB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMubGVuZ3RoID09IDApKXtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzLmZvckVhY2goKGV4dHJhZmllbGQpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMucHVzaChleHRyYWZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkZWRGaWVsZEV4dHJhID0gdHJ1ZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjwhLS0gPGRpdiBjbGFzcz1cImFkZC1mb3JtLWZpZWxkIGJpZ3dyYXBwZXJcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7IG92ZXJmbG93LXg6IGhpZGRlbjsgb3ZlcmZsb3cteTogYXV0bztcIj4gLS0+XHJcblxyXG48bWF0LWNhcmQgY2xhc3M9XCJhZGQtZm9ybS1maWVsZFwiPlxyXG4gICAgPG1hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIHt7aW5kZXhGaWVsZCAhPSBudWxsICYmIGluZGV4RmllbGQgPj0gMCA/IFwiTW9kaWZpY2FcIiA6IFwiQWdnaXVuZ2lcIn19IGNhbXBvXHJcbiAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbnRhaW5lckNvbnRlbnQgXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgUFJJTkNJUEFMRSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLW1haW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUSVBPIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiB0aXBvQ2FtcG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZFR5cGUnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRUeXBlJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBvIGNhbXBvICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJGaWVsZFR5cGVFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25GaWVsZFR5cGVDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0ZpZWxkVHlwZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VudW1EYXRhVG9FeGNsdWRlXT1cImZpZWxkVHlwZXNUb0V4Y2x1ZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIENPRElDRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kaWNlICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJMYWJlbFwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdMYWJlbCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaSBwb3Nzb25vIGluc2VyaXJlIHNvbG8gbGV0dGVyZSBhLXpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT0RJQ0UgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcml6aW9uZSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkRlc2NyaXB0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIiByZXF1aXJlZCBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRGVzY3JpcHRpb25cIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5EZXNjcmlwdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciAqbmdJZj1cIiFmaWVsZC5EZXNjcmlwdGlvbi52YWxpZCAmJiBmaWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLkRlc2NyaXB0aW9uXS50b3VjaGVkXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZXNjcmlwdGlvbicpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVzY3JpcHRpb24nXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTRVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiICpuZ0lmPVwiZm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRHcm91cCddLnRvdWNoZWQgfVwiPlNlemlvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtRmllbGRzR3JvdXBzXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ05hbWUnXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInTmFtZSdcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGaWVsZEdyb3VwJ1wiIHJlcXVpcmVkIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZEdyb3VwJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gU0VaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gT0JCTElHQVRPUklPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXF1aXJlZFwiIGZvcm1Db250cm9sTmFtZT1cIlJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBPQkJMSUdBVE9SSU8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFJFQURPTkxZIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZWFkb25seVwiIGZvcm1Db250cm9sTmFtZT1cIlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFJFQURPTkxZIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gQVJFQSBQUklOQ0lQQUxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgVEFCUyAtLT5cclxuICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIGNsYXNzPVwiZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLXRhYnNcIiBtYXQtc3RyZXRjaC10YWJzPVwiZmFsc2VcIiBtYXQtYWxpZ24tdGFicz1cInN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgQ09NUElMQVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3RpbGUgQ29tcGlsYXppb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkxhcmdoZXp6YSBjYW1wbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidDb2xTcGFuU2l6ZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gTGFiZWwgY3NzIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJMYWJlbHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbHN0eWxlQ1NTJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBQkVMIENTUyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGaWVsZCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkZpZWxkc3R5bGVDU1NcIiBmb3JtQ29udHJvbE5hbWU9XCJGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gRklFTEQgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKGZpZWxkLlZpc2libGVJZiAhPSBudWxsIHx8IGZpZWxkLlZpc2libGVJZiAhPSB1bmRlZmluZWQpICYmIGZpZWxkLlZpc2libGVJZiAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jbkxpc3RWaWV3XCIgZm9ybUNvbnRyb2xOYW1lPVwiSW5MaXN0Vmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0luTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIElOVklTSUJJTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZC5Jbkxpc3RWaWV3ICYmIChmaWVsZC5WaXNpYmxlSWYgPT0gbnVsbCB8fCBmaWVsZC5WaXNpYmxlSWYgPT0gdW5kZWZpbmVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwbyBkaSBpbnZpc2liaWxpdMOgIGRlbCBjYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiZmllbGRJbnZpc2liaWxpdHlFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkludmlzaWJpbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiIChjbGljayk9XCJvcGVuVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVmlzaWJsZUlmJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJWaXNpYmxlSWZcIiBmb3JtQ29udHJvbE5hbWU9XCJWaXNpYmxlSWZcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiVmlzaWJsZUlmQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI1Zpc2libGVJZkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSBJRiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuVmlzaWJsZUlmID09IG51bGwgfHwgZmllbGQuVmlzaWJsZUlmID09IHVuZGVmaW5lZCkgJiYgZmllbGQuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLk1haW50YWluX1ZhbHVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWFpbnRhaW5fVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYWludGFpbl9WYWx1ZSddLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW50aWVuaSBpbCB2YWxvcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUT09MVElQIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVG9vbHRpcCA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiVG9vbHRpcFwiIGZvcm1Db250cm9sTmFtZT1cIlRvb2x0aXBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Ub29sdGlwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVG9vbHRpcCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUb29sdGlwJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVG9vbHRpcCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBUT09MVElQIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIENPTVBJTEFaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgREVMTEEgUklTUFNPVEEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTdGlsZSBSaXNwb3N0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFSR0hFWlpBIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5MYXJnaGV6emEgY2FtcG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbnN3ZXJTdHlsZUNvbFNwYW5TaXplcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQUJFTCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEZJRUxEIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IEZpZWxkIGNzcyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Fuc3dlclN0eWxlRmllbGRzdHlsZUNTUyddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVklTSUJMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IG51bGwgfHwgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IHVuZGVmaW5lZCkgJiYgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIiBmb3JtQ29udHJvbE5hbWU9XCJBbnN3ZXJTdHlsZUluTGlzdFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUluTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBJTlZJU0lCSUxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yIGFsaWduLXNlbGYtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpcG8gZGkgaW52aXNpYmlsaXTDoCBkZWwgY2FtcG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cImZpZWxkSW52aXNpYmlsaXR5RW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Fuc3dlclN0eWxlSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlVmlzaWJsZUlmXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVWaXNpYmxlSWZcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWZcIiAoY2xpY2spPVwib3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snQW5zd2VyU3R5bGVWaXNpYmxlSWYnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVmlzaWJsZUlmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJWaXNpYmxlSWZBdXRvY29tcGxldGVcIiAoa2V5dXApPVwic2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlZpc2libGVJZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjVmlzaWJsZUlmQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIElGIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIERFTExBIFJJU1BTT1RBIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTUEVDSUZJQ0hFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3BlY2lmaWNoZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUeXBlRm9ybVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNQRUNJRklDSEUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTW9kYWxpdMOgIHJlY3VwZXJvIGRhdGlcIiAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtWydCb3R0b25lIGF6aW9uZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJkYXRhR2V0dGVyVHlwZUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRGF0YUdldHRlclR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCIgW2hpZGRlbl09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IGRhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIGRpIERlZmF1bHQgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0YUdldHRlclZhbHVlXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiBbaGlkZGVuXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gZGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGb3JtdWxhIChKYXZhc2NyaXB0KSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJGb3JtdWxhXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Gb3JtdWxhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZygpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtdWxhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybXVsYScpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGb3JtdWxhJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRm9ybXVsYSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTQgY29uZmlndXJhUXVlcnlFZGl0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPkNvbmZpZ3VyYSBpbiBRdWVyeSBFZGl0b3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib3BlbkRCR2V0dGVyKClcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID09IG51bGxcIj5Qcm9jZWRpPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJvcGVuREJHZXR0ZXIoKVwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPk1vZGlmaWNhPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlNlbGV6aW9uYSBjb2xvbm5hPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImNvbHVtbktleXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gZGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNFwiICpuZ0lmPVwiZm9ybXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5Nb2R1bG88L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25hIG1vZHVsbydcIiBbYXJyYXlEYXRhXT1cImZvcm1zXCIgWyhuZ01vZGVsSW5wdXQpXT1cIkRNTW9kdWxlXCIgW2lzU2VhcmNoYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInQ29kZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidETU1vZHVsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETU1vZHVsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCAmJiBETU1vZHVsZSAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5DYW1wbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmEgY2FtcG8nXCIgW2FycmF5RGF0YV09XCJETUZpZWxkc1wiIFsobmdNb2RlbElucHV0KV09XCJETUZpZWxkXCIgW2lzU2VhcmNoYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2tleSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRE1GaWVsZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETUZpZWxkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5DYXJkaW5hbGl0w6A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJETUdldHRlckNhcmRpbmFsaXRpZXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ2FyZGluYWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNvbnRlc3R1YWxpenphemlvbmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29udGVzdHVhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cInRydWVcIiAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ2hhbmdlRE1Db250ZXN0dWFsaXphdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBFWFRSQSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkV4dHJhXCIgKm5nSWY9XCJmaWVsZHNFeHRyYUNvbmZpZyAhPSBudWxsICYmIGZpZWxkc0V4dHJhQ29uZmlnLmxlbmd0aCA+IDAgJiYgbG9hZGVkRmllbGRFeHRyYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZpZWxkRXh0cmFDb25maWdcIiAqbmdGb3I9XCJsZXQgZmllbGRFeHRyYUNvbmZpZyBvZiBmaWVsZHNFeHRyYUNvbmZpZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXggI2ZpZWxkRXh0cmFDb25maWdUZW1wbGF0ZSBbZmllbGRFeHRyYUNvbmZpZ109XCJmaWVsZEV4dHJhQ29uZmlnXCIgW2Zvcm1dPVwiZm9ybVwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj4gICBcclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBFWFRSQSAtLT4gICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgVEFCUyAtLT5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlIHZhbGx1ZXMgLS0+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlIHZhbGx1ZXMgLS0+XHJcblxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMSBtZS0zXCI+IFxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidXR0b25zRm9ybWFcIj4gLS0+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gbWF0LXJhaXNlZC1idXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQoZmFsc2UpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgQW5udWxsYVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBzYXZlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTYXZlRmllbGQoKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgIFNhbHZhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSA8L2Rpdj4gLS0+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERJIFRFU1RPIC0tPlxyXG48bmctdGVtcGxhdGUgI3RleHRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIE1BU0NIRVJBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+TWFzY2hlcmE8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiVGV4dE1hc2tFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLlRleHRNYXNrXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidUZXh0TWFzaydcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIE1BU0NIRVJBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNQRUVDSCBUTyBURVhUIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIiBbaGlkZGVuXT1cImZpZWxkLlJlYWRvbmx5IHx8IHBsYXRmb3JtICE9ICd3ZWInXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5NaWNyb3Bob25lXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWljcm9waG9uZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBTcGVlY2gtVG8tVGV4dFxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU1BFRUNIIFRPIFRFWFQgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS50b3VjaGVkIH1cIj5cclxuICAgICAgICAgICAgTHVuZ2hlenphIG1pbmltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1pblwiIGZvcm1Db250cm9sTmFtZT1cIk1pbkxlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NaW5MZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1pbkxlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01pbkxlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNSU5JTUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02XCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4TGVuZ2h0J10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgIEx1bmdoZXp6YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWF4XCIgZm9ybUNvbnRyb2xOYW1lPVwiTWF4TGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1heExlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4TGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4TGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBESSBURVNUTyAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBFVElDSEVUVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbGFiZWxGaWVsZEZvcm1UZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBFVElDSEVUVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwiRXRpY2hldHRhXCIgcGxhY2Vob2xkZXI9XCJFdGljaGV0dGFcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJFdGljaGV0dGFcIiBbKG5nTW9kZWwpXT1cImZpZWxkLkV0aWNoZXR0YVwiPjwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEVUSUNIRVRUQSAtLT5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBFVElDSEVUVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQVJFQSBESSBURVNUTyAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXh0YXJlYUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gUklHSEUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gUmlnaGUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicmlnaGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwicm93c1wiIGZvcm1Db250cm9sTmFtZT1cIlJvd3NcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Sb3dzXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuUm93cylcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jvd3MnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snUm93cyddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Jvd3MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFJJR0hFIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNwZWVjaFRvVGV4dCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgW2hpZGRlbl09XCJmaWVsZC5SZWFkb25seSB8fCBwbGF0Zm9ybSAhPSAnd2ViJ1wiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuTWljcm9waG9uZVwiIGZvcm1Db250cm9sTmFtZT1cIk1pY3JvcGhvbmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgU3BlZWNoLVRvLVRleHRcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNwZWVjaFRvVGV4dCAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEx1bmdoZXp6YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJsZW5ndGhNaW5cIiBmb3JtQ29udHJvbE5hbWU9XCJNaW5MZW5naHRcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuTWluTGVuZ2h0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5MZW5naHQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNaW5MZW5naHQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEx1bmdoZXp6YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWF4XCIgZm9ybUNvbnRyb2xOYW1lPVwiTWF4TGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1heExlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4TGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4TGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBBUkVBIERJIFRFU1RPIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEJPT0xFQU5JIC0tPlxyXG48bmctdGVtcGxhdGUgI2Jvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIEEgVFJFIFNUQVRJIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzVHJpc3RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJJc1RyaXN0YXRlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIEEgdHJlIHN0YXRpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBBIFRSRSBTVEFUSSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIFBSRVNFTlRBWklPTkUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgcHJlc2VudGF6aW9uZSAqPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIkJvb2xQcmVzZW50YW50aW9FbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLlByZXNldGF0aW9uVHlwZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidQcmVzZXRhdGlvblR5cGUnXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIFBSRVNFTlRBWklPTkUgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQk9PTEVBTkkgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREFUQSAtLT5cclxuPG5nLXRlbXBsYXRlICNkYXRlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIERJIERBVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgZGF0YTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJEYXRlVGltZVR5cGVFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLklzT25seURhdGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInSXNPbmx5RGF0ZSdcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gREkgREFUQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBGT1JNQVRPIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEZvcm1hdG8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0ZUZvcm1hdFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRGF0ZUZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInSW5kaWNhcmUgaWwgZm9ybWF0byBzZWd1ZW5kbyBsYSBndWlkYSBkZWwgcGFjY2hldHRvIG1vbWVudGpzLidcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZvcm1hdG8pXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGb3JtYXRvJykgfX0gLS0+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEZPUk1BVE8gLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gREFUQSBNSU5JTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBEYXRhIG1pbmltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIGRhdGEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnRGF0YSBlIG9yYSddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1pbkRhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01pbkRhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5EQVRFVElNRVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVkgSEg6bW0nXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBvcmFyaW8nXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuVElNRVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0hIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBEQVRBIE1JTklNQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBEQVRBIE1BU1NJTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBEYXRhIG1hc3NpbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NYXhEYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNYXhEYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZIEhIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLlRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gREFUQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREFUQSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBOVU1FUklDSSAtLT5cclxuPG5nLXRlbXBsYXRlICNudW1lcmljRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgSU5URVJPIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzSW50ZWdlclwiIGZvcm1Db250cm9sTmFtZT1cIklzSW50ZWdlclwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBWYWxvcmUgaW50ZXJvXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBWQUxPUkUgSU5URVJPIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNFUEFSQVRPUkUgREVDSU1BTEkgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpZWxkLklzSW50ZWdlclwiIGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gU2VwYXJhdG9yZSBkZWNpbWFsaSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJEZWNpbWFsU2VwYXJhdG9yXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EZWNpbWFsU2VwYXJhdG9yXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVjaW1hbFNlcGFyYXRvcilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0RlY2ltYWxTZXBhcmF0b3InKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVjaW1hbFNlcGFyYXRvciddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm9uIMOoIHBvc3NpYmlsZSBpbnNlcmlyZSBkZWkgbnVtZXJpLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxTZXBhcmF0b3InXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNFUEFSQVRPUkUgREVDSU1BTEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gUFJFQ0lTSU9ORSBERUNJTUFMSSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCIhZmllbGQuSXNJbnRlZ2VyXCIgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBQcmVjaXNpb25lIGRlY2ltYWxpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkRlY2ltYWxQcmVjaXNpb25cIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRGVjaW1hbFByZWNpc2lvblwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVjaW1hbFByZWNpc2lvbilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0RlY2ltYWxQcmVjaXNpb24nKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVjaW1hbFByZWNpc2lvbiddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxQcmVjaXNpb24nXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFBSRUNJU0lPTkUgREVDSU1BTEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gU0VQQVJBVE9SRSBNSUdMSUFJQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBTZXBhcmF0b3JlIG1pZ2xpYWlhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIlRob3VzYW5kc1NlcGFyYXRvclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVGhvdXNhbmRzU2VwYXJhdG9yJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Rob3VzYW5kc1NlcGFyYXRvciddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm9uIMOoIHBvc3NpYmlsZSBpbnNlcmlyZSBkZWkgbnVtZXJpLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Rob3VzYW5kc1NlcGFyYXRvciddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0VQQVJBVE9SRSBNSUdMSUFJQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTSU1CT0xPIFZBTFVUQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgbWF0VG9vbHRpcD1cIlNpbWJvbG8gcHJpbWEgZGVsIHZhbG9yZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiZXhhbXBsZS10b29sdGlwLXVwcGVyY2FzZVwiXHJcbiAgICAgICAgPiBTaW1ib2xvIHZhbHV0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJDdXJyZW5jeVN5bWJvbFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuQ3VycmVuY3lTeW1ib2xcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5DdXJyZW5jeVN5bWJvbClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0N1cnJlbmN5U3ltYm9sJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0N1cnJlbmN5U3ltYm9sJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTSU1CT0xPIFZBTFVUQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBVTklUQSBESSBNSVNVUkEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTaW1ib2xvIGRvcG8gaWwgdmFsb3JlXCJcclxuICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJleGFtcGxlLXRvb2x0aXAtdXBwZXJjYXNlXCJcclxuICAgICAgICA+IFVuaXTDoCBkaSBtaXN1cmEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWVhc3VyZVVuaXRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1lYXN1cmVVbml0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWVhc3VyZVVuaXQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNZWFzdXJlVW5pdCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNZWFzdXJlVW5pdCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVU5JVEEgREkgTUlTVVJBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFZBTE9SRSBNSU5JTU8gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG1pbmltbyA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJNaW5WYWx1ZVwiIHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1pblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5WYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGF0dGVybj1cIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWluVmFsdWUnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluVmFsdWUnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5WYWx1ZSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVkFMT1JFIE1JTklNTyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgTUFTU0lNTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgbWFzc2ltbyA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJNYXhWYWx1ZVwiIHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1heFZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NYXhWYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGF0dGVybj1cIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4VmFsdWUnKSB9fSAgLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heFZhbHVlJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4VmFsdWUnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFZBTE9SRSBNQVNTSU1PIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTlVNRVJJQ0kgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQUxMRUdBVE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gQUxMRUdBVEkgTVVMVElQTEkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuSXNNdWx0aUF0dGFjaFwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlBdHRhY2hcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgQWxsZWdhdGkgbXVsdGlwbGlcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEFMTEVHQVRJIE1VTFRJUExJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIEVTVEVOU0lPTkkgQUNDRVRUQVRFIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5Fc3RlbnNpb25pIGFjY2V0dGF0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMuY29uY2F0KEF2YWlsYWJsZUltYWdlRXh0ZW5zaW9ucylcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuQWxsb3dlZEV4dGVuc2lvbnNcIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgIFtpc011bHRpU2VsZWN0XT1cInRydWVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0FsbG93ZWRFeHRlbnNpb25zJ1wiXHJcbiAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gRVNURU5TSU9OSSBBQ0NFVFRBVEUgLS0+XHJcblxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIG10LTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVsZW5jbyBtZXRhZGF0YVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IHRleHQtcmlnaHQgYnV0dG9uc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgc2F2ZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTWV0YWRhdGFEaWFsb2coKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+QWdnaXVuZ2kgYWxsZWdhdG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGVxcC10YWJsZSAjbWV0YWRhdGFGaWVsZHNUYWJsZSBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiIFtjb2x1bW5zXT1cIm1ldGFkYXRhQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImZpZWxkLk1ldGFkYXRhRmllbGRzXCIgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gbWV0YWRhdGEgaW5zZXJpdG8nXCIgW3NlYXJjaFRleHRdPVwiJ0NlcmNhJ1wiPlxyXG4gICAgICAgIDwvZXFwLXRhYmxlPlxyXG4gICAgPC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQUxMRUdBVE8gLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTElTVEEgREkgVkFMT1JJIC0tPlxyXG48bmctdGVtcGxhdGUgI2xpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gU0NFTFRBIE1VTFRJUExBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbaGlkZGVuXT1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIFNjZWx0YSBtdWx0aXBsYVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0NFTFRBIE1VTFRJUExBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFRJUE8gREkgUFJFU0VOVEFaSU9ORSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkaSBwcmVzZW50YXppb25lKjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJMaXN0UHJlc2VudGF0aW9uRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ1ByZXNlbnRhdGlvbk1vZGUnXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVElQTyBESSBQUkVTRU5UQVpJT05FIC0tPlxyXG5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBHRVNUSU9ORSBPUFpJT05JIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtdC0yXCI+XHJcblxyXG4gICAgICAgIDxtYXQtbGFiZWw+IGFyZWEgZGVpIHZhbG9yaSBkYSBpbnNlcmlyZSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwia2V5MXx2YWx1ZTE7a2V5Mnx2YWx1ZTJcIiBcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuVmFsdWVTdHJpbmdcIlxyXG4gICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L3RleHRhcmVhPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImNvdW50VmFsdWVQYWlycyhmaWVsZC5WYWx1ZVBhaXJzKSA+IDBcIj5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwia2V5LXZhbHVlLWxpc3Qtc2VjdGlvbi10aXRsZVwiPiA8L2g0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IExhYmVsIG9wemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImtleVZhbHVlT2JqZWN0LmtleVwiIChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgb3B6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwia2V5VmFsdWVPYmplY3QudmFsdWVcIiAoa2V5dXApPVwib25NdWx0aVNlbGVjdElucHV0S2V5dXAoJGV2ZW50LCBudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItM1wiPk9wemlvbmkgaW5zZXJpdGU6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidmFsdWUtcGFpcnMtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQga2V5VmFsdWVQYWlyIG9mIGdldERpY3Rpb25hcnlLZXlWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1yLTFcIiAoY2xpY2spPVwiZGVsZXRlS2V5RnJvbURpY3Rpb25hcnkoa2V5VmFsdWVQYWlyLmtleSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48Yj5MYWJlbDogPC9iPiB7e2tleVZhbHVlUGFpci5rZXl9fSAtIDxiPlZhbG9yZTogPC9iPiB7e2tleVZhbHVlUGFpci52YWx1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgPC9kaXY+ICAgIFxyXG4gICAgPCEtLSNlbmRyZWdpb24gR0VTVElPTkUgT1BaSU9OSSAtLT5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBMSVNUQSBESSBWQUxPUkkgLS0+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSNyZWdpb24gQk9UVE9ORSBBWklPTkUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8YWN0aW9uLWJ1dHRvbi1jcmVhdG9yIFtJbkZpZWxkXT1cInRydWVcIiBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybXVsYXNdPVwiYWN0aW9uQnV0dG9uc1wiIFthY3Rpb25CdXR0b25GaWVsZF09XCJmaWVsZFwiIChvbkNoYW5nZVNvbWV0aGluZyk9XCJjaGFuZ2VkQnV0dG9uRmllbGQoJGV2ZW50KVwiPjwvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBCT1RUT05FIEFaSU9ORSAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gTElTVEEgSU1NQUdJTkkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLXhzLTEyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBBbHRlenphIGluIFBpeGVsIGRlbGxlIGltbWFnaW5pIHNjYWxhdGUqIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2V0UmVzaXplZEltYWdlc0hlaWdodFB4KClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jlc2l6ZWRJbWFnZXNIZWlnaHRQeCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wteHMtMTIgY29sLW1pZGRsZVwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICBTY2VsdGEgbXVsdGlwbGFcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZXFwLWF0dGFjaG1lbnRzICNpbWFnZVNlbGVjdG9yQXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJmaWVsZC5BdHRhY2htZW50TGlzdFwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJmYWxzZVwiIFtzaG93SW5saW5lUHJldmlld109XCJ0cnVlXCIgW211bHRpcGxlQXR0YWNobWVudF09XCJ0cnVlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIiAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJjYXRjaEJ1dHRvbkltYWdlc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgIFthdHRhY2htZW50c0NvbHVtbnNdPVwiY29uZmlnQ29sdW1uTGlzdEltYWdlc1wiPlxyXG4gICAgPC9lcXAtYXR0YWNobWVudHM+XHJcblxyXG4gIFxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIExJU1RBIElNTUFHSU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIElNTUFHSU5FIC0tPlxyXG48bmctdGVtcGxhdGUgI2ltYWdlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5FbmFibGVEcmF3aW5nXCIgZm9ybUNvbnRyb2xOYW1lPVwiRW5hYmxlRHJhd2luZ1wiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgSW1tYWdpbmUgZGlzZWduYWJpbGU/XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8L2Rpdj4gICBcclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZUNoYW5nZSgkZXZlbnQpXCIgKG9uRGVsZXRlQXR0YWNobWVudCk9XCJkZWxldGVJbWFnZSgkZXZlbnQpXCIgI2ltYWdlQXR0YWNobWVudD5cclxuICAgICAgICA8L2VxcC1hdHRhY2htZW50cz5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5UHJvZmlsZUltYWdlPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgICAgc3JjPVwiZGF0YTp7e2ZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlfX07YmFzZTY0LHt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19XCJcclxuICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+ICAgICAgICBcclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgQ09OIE1BUktFUlMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKCRldmVudClcIiAob25EZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZUltYWdlKCRldmVudClcIiAjaW1hZ2VBdHRhY2htZW50PlxyXG4gICAgICAgIDwvZXFwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlQcm9maWxlSW1hZ2U+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICBzcmM9XCJkYXRhOnt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGV9fTtiYXNlNjQse3tmaWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX1cIlxyXG4gICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gICAgICAgIFxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBJTU1BR0lORSBDT04gTUFSS0VSUyAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTE9PS1VQIC0tPlxyXG48bmctdGVtcGxhdGUgI2xvb2t1cEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLlVzZUFzR2V0T3JEaXNjYXJkXCIgZm9ybUNvbnRyb2xOYW1lPVwiVXNlQXNHZXRPckRpc2NhcmRcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiU2UgdHJ1ZSBsYSBsb29rdXAgdmllbmUgdmlzdWFsaXp6YXRhIGluIHVuYSBtb2RhbGUgcGVyIGxvIHNjZWdsaSBzY2FydGFcIj5cclxuICAgICAgICAgICAgVXNhIHBlciBzY2VnbGkgbyBzY2FydGFcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBOb21lIGVudGl0w6AgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIG1hdFRvb2x0aXA9XCJOb21lIGRlbGwnZW50aXTDoCByZWxhemlvbmF0YVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRW50aXR5U291cmNlTmFtZVwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRW50aXR5U291cmNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkVudGl0eVNvdXJjZU5hbWUpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRW50aXR5U291cmNlTmFtZScpIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbXQtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21pIGRlaSBjYW1waSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVsZW5jbyBkaSBjYW1waSBvcmRpbmF0byBjaGUgdmVycsOgIHZpc3VhbGl6emF0byBuZWxsYSBsb29rdXAgKHByZW1lcmUgaW52aW8gcGVyIGNvbmZlcm1hcmUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsICdGaWVsZE5hbWVzJylcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5Ob21pIHNlbGV6aW9uYXRpOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHRlbnNpb24tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGV4dGVuc2lvbiBvZiBmaWVsZC5GaWVsZE5hbWVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tleHRlbnNpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0xXCIgKGNsaWNrKT1cImZpZWxkLkZpZWxkTmFtZXMuc3BsaWNlKGksMSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExPT0tVUCAtLT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFIFVOIE1FVEFEQVRBIE5FSSBDQU1QSSBESSBUSVBPIEFMTEVHQVRPIE8gSU1NQUdJTkUgLS0+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICNkaWFsb2dNZXRhZGF0YT5cclxuICAgIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQgW2ZpZWxkXT1cInNlbGVjdGVkTWV0YWRhdGFcIiBbYXZhaWxhYmxlRmllbGRzXT1cImF2YWlsYWJsZUZpZWxkc1wiXHJcbiAgICAgICAgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZE1ldGFkYXRhXCIgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZU1ldGFkYXRhKCRldmVudClcIiBbZmllbGRUeXBlc1RvRXhjbHVkZV09XCJbNiw3LDEwXVwiPlxyXG4gICAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4ge3tjb2wuZGlzcGxheX19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLURJQUxPRyBQRVIgU0VNUExJRklDQVJFIExBIFNDUklUVFVSQSBERUwgQ0FNUE8gRk9STVVMQS0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0Zvcm11bGE+XHJcbiAgICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuICAgIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8aW1nIHNyYz1cImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsIHt7cm93W2NvbC5rZXldfX1cIiBjbGFzcz1cIkdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZVwiPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gQ2hpYXZlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFFVRVJZIEVESVRPUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dRRT5cclxuICAgIDxuZy10ZW1wbGF0ZSBbYXBwRHluYW1pY0xvYWRlcl0gW2RhdGFdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KTtcIj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiAgIl19