@tsi-developpement/tsi-shared-ui 1.0.14 → 1.0.15

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.
@@ -1080,11 +1080,14 @@ export class TsiGenericGridComponent {
1080
1080
  return false;
1081
1081
  }
1082
1082
  _extractOnlyVisibleSearchFields() {
1083
- if (this.presentationSettings
1084
- && this.presentationSettings.presentationSettingDetails.length > 0
1085
- && this.tempSearchFields) {
1086
- this.searchFields = this.tempSearchFields.filter(sf => this.presentationSettings?.presentationSettingDetails
1087
- .some(p => p.blockName == sf.field && (p.isBlockVisible == true || p.isBlockVisible == undefined)));
1083
+ if (this.presentationSettings &&
1084
+ this.presentationSettings.presentationSettingDetails.length > 0 &&
1085
+ this.tempSearchFields) {
1086
+ this.searchFields = this.tempSearchFields.filter(sf => {
1087
+ const config = this.presentationSettings?.presentationSettingDetails
1088
+ .find(p => p.blockName === sf.field);
1089
+ return !config || config.isBlockVisible === true || config.isBlockVisible === undefined;
1090
+ });
1088
1091
  }
1089
1092
  }
1090
1093
  _extractSearchBoxFilters() {
@@ -1439,9 +1442,11 @@ export class TsiGenericGridComponent {
1439
1442
  value: evt,
1440
1443
  labelValue: '',
1441
1444
  type: InputTypes.COMBOBOX,
1442
- operator: 6,
1445
+ operator: FilterOperatorType.EQUAL,
1443
1446
  styleClass: "hidden"
1444
1447
  });
1448
+ console.log("search fields =>", this.searchFields);
1449
+ this.tempSearchFields = this.searchFields ?? this.tempSearchFields;
1445
1450
  }
1446
1451
  onDragOver(event) {
1447
1452
  event.preventDefault();
@@ -1674,4 +1679,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1674
1679
  }], statusFilterChanged: [{
1675
1680
  type: Output
1676
1681
  }] } });
1677
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRixPQUFPLEVBQWlCLFNBQVMsRUFBdUIsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZUFBZSxFQUF1RCxNQUFNLGFBQWEsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkwsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbEUsT0FBTyxFQUFpRCxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxLQUFL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YztzQkFBdEIsS0FBSztnQkFHTyxZQUFZO3NCQUF4QixLQUFLO2dCQUtPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBYUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQU9JLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWV0YWRhdGEsIFByaW1lTkdDb25maWcsIFNvcnRNZXRhLCBUYWJsZVN0YXRlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUYWJsZSwgVGFibGVIZWFkZXJDaGVja2JveCwgVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZVNlbGVjdEFsbENoYW5nZUV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFbnRpdHlJbmZvIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvJztcclxuaW1wb3J0IHsgRGlzcGxheVR5cGVDb2xvcnMsIERpc3BsYXlUeXBlcywgRmlsdGVyT3BlcmF0b3JUeXBlLCBHcmlkU2VsZWN0aW9uTW9kZSwgR3JpZFNvcnRNb2RlLCBJbnB1dFR5cGVzLCBNb2RhbFNpemVFbnVtLCBOdW1lcmljRGlzcGxheVR5cGVzLCBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IERlZmF1bHRTb2NpZXRlRGV2aXNlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL3RzaS1jb25zdHMnO1xyXG5pbXBvcnQgeyBJRmlsdGVyZWRSZXF1ZXN0LCBJU29ydEJ5UHJvcHJldHksIElQYWdlZFJlcXVlc3QsIElHcmlkQ29uZmlndXJhdGlvbiwgSVBhZ2UsIEdyaWRDb2x1bW4sIEJ1dHRvbkNsaWNrUmVzdWx0LCBJU29ydE1ldGEsIElQYWdlZFJlc3BvbnNlLCBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNlYXJjaEZpZWxkLCBQcmVzZW50YXRpb25TZXR0aW5nLCBFdmVudFNjaGVtYSwgRmljaGllcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IHJ0bE1vZGVLZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2xvY2Fscy5jb25zdCc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IENydWRCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jhc2UvY3J1ZC1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdG1sVGVtcGxhdGVHZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2VuZXJhdG9yL2h0bWwtdGVtcGxhdGUtZ2VuZXJhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQvbGF5b3V0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3MvYXBwLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vZXJyb3ItcmVzcG9uc2UtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsdGVySGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWhlbHBlcnMvZmlsdGVyLWhlbHBlcic7XHJcbmltcG9ydCB7IHByaW1lbmdMb2NhbGVBciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL3ByaW1lbmctdHJhbnNsYXRlLWNvbmZpZyc7XHJcbmltcG9ydCB7IEV4cG9ydEV4Y2VsSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWhlbHBlcnMvZXhwb3J0LWV4Y2VsLmhlbHBlcic7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBTdGF0dXNDb2xvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdGF0dXMvc3RhdHVzLWNvbG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWNoaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZmljaGllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdHVzTWV0YWRhdGFSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zdGF0dXMvY29sb3Itc3RhdHVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLUdlbmVyaWMtR3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0JywgW1xyXG4gICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7XHJcbiAgICAgICAgaGVpZ2h0OiAnKicsXHJcbiAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJ1xyXG4gICAgICB9KSksXHJcbiAgICAgIHN0YXRlKCdvdXQnLCBzdHlsZSh7XHJcbiAgICAgICAgaGVpZ2h0OiAnMHB4JyxcclxuICAgICAgICBvcGFjaXR5OiAwLFxyXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwcHgpJ1xyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2luIDw9PiBvdXQnLCBhbmltYXRlKCc2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKScpKVxyXG4gICAgXSlcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIG1vZGFsU2l6ZTogYW55O1xyXG4gIEBJbnB1dCgpIGVudGl0eUluZm86IEVudGl0eUluZm8gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgZmlsdGVyTWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbjtcclxuICBpc0FyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGFzeW5jIGV5ZUNsaWNrZWQodGV4dDogYW55KSB7XHJcblxyXG4gICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uRXh0cmFMYXJnZTtcclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiB0ZXh0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6IG1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IGF3YWl0IG9wZW5Uc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQodGhpcy5faW5qZWN0b3IsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VNb2RhbCh2YWw/OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWwgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJ1bmNhdGVTdHJpbmcodmFsdWU6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDUwKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IGxpbWl0ID8gdmFsdWUuc3Vic3RyKDAsIGxpbWl0KSArICcuLi4nIDogdmFsdWU7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgQFZpZXdDaGlsZChcImR0XCIsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgZHQ6IFRhYmxlIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZUhlYWRlckNoZWNrYm94XCIpIHRhYmxlSGVhZGVyQ2hlY2tib3g6IFRhYmxlSGVhZGVyQ2hlY2tib3ggfCB1bmRlZmluZWRcclxuICBmaXJzdDogbnVtYmVyID0gMDtcclxuICByb3dzID0gMTtcclxuICBkaXNwbGF5VHlwZXMgPSBEaXNwbGF5VHlwZXM7XHJcbiAga2V5d29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHN1bW1hcmllczogRGljdGlvbmFyeTxzdHJpbmcsIG51bWJlcj4gPSB7fTtcclxuICBpc1J0bE1vZGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICBpc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgbWVzc2FnZVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgcHJpdmF0ZSBkcmFnRW50ZXJDb3VudCA9IDA7XHJcbiAgLy8gcHJpdmF0ZSBfc2VhcmNoQm94RmlsdGVyczogQXJyYXk8RmlsdGVyQnlQcm9wcmV0eT4gPSBbXTtcclxuICAvLyBwcml2YXRlIF9ncmlkSGVhZGVyRmlsdGVyczogQXJyYXk8RmlsdGVyQnlQcm9wcmV0eT4gPSBbXTtcclxuICBwcml2YXRlIF9zZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9zZWFyY2hCb3hGaWx0ZXJzOiBBcnJheTxJRmlsdGVyZWRSZXF1ZXN0PiA9IFtdO1xyXG4gIHByaXZhdGUgX2dyaWRIZWFkZXJGaWx0ZXJzOiBBcnJheTxJRmlsdGVyZWRSZXF1ZXN0PiA9IFtdO1xyXG4gIHByaXZhdGUgX3NvcnQ6IEFycmF5PElTb3J0QnlQcm9wcmV0eT4gPSBbXTtcclxuICBzb3J0TWV0YXM6IFNvcnRNZXRhW10gPSBbXTtcclxuICBzZWxlY3RlZEZ1bGxJdGVtcz86IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3Rpb246IGFueTtcclxuICBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICAvL2pzb25TdHJpbmdMYXlvdXQ6IHN0cmluZyA9ICd7XCJmaXJzdFwiOjAsXCJyb3dzXCI6MTAsXCJtdWx0aVNvcnRNZXRhXCI6W10sXCJjb2x1bW5XaWR0aHNcIjpcIlwiLFwidGFibGVXaWR0aFwiOlwiMTE4OHB4XCIsXCJjb2x1bW5PcmRlclwiOltcIlwiXX0nO1xyXG4gIGxhdGVzdEZpbHRlcnM/OiBJRmlsdGVyZWRSZXF1ZXN0W107XHJcblxyXG4gIC8vIHByaXZhdGUgX3BhZ2UgOiBJUGFnZTxhbnk+ID0ge1xyXG4gIC8vICAgaXRlbXM6IFtdLFxyXG4gIC8vICAgdG90YWxDb3VudDogMCxcclxuICAvLyAgIHN1bW1hcmllczogW10sXHJcbiAgLy8gICB0b3RhbFBhZ2VzOiAwLFxyXG4gIC8vICAgcGFnZU51bWJlcjogMSxcclxuICAvLyAgIHBhZ2VTaXplOiAxMCxcclxuICAvLyAgIGxvYWRpbmc6IGZhbHNlXHJcbiAgLy8gfTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGZvcm1OYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBhZ2VkUmVxdWVzdD86IElQYWdlZFJlcXVlc3Q7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbj86IElHcmlkQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSAvKnNldCovIHBhZ2U6IElQYWdlPGFueT4gPSB7XHJcbiAgICBpdGVtczogW10sXHJcbiAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gICAgbG9hZGluZzogZmFsc2VcclxuICB9O1xyXG4gIC8vIChuZXdQYWdlOiBJUGFnZTxhbnk+KXtcclxuICAvLyAgIGlmKG5ld1BhZ2Upe1xyXG4gIC8vICAgICB0aGlzLl9wYWdlID0gbmV3UGFnZTtcclxuICAvLyAgICAgdGhpcy5fZXh0cmFjdFN1bW1hcmllcygpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICAvLyBnZXQgcGFnZSgpe1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX3BhZ2U7XHJcbiAgLy8gfVxyXG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3VpZCc7XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBwcml2YXRlIF90ZW1wQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuICB0ZW1wU2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4gPSBbXTtcclxuICBwcml2YXRlIF9jb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgY29sdW1ucyh2YWx1ZTogQXJyYXk8R3JpZENvbHVtbj4gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnNQcm9jZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxHcmlkQ29sdW1uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBncmlkRGF0YT86IEFycmF5PGFueT47XHJcblxyXG4gIEBJbnB1dCgpIGlzVGFibGVMb2FkaW5nPzogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgcGFyZW50OiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBzaG93QWN0aW9uQ29sdW1uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0hlYWRlckZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93RmlsdGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0dyaWREYXRhUGFnZWRJbkFwaTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBTaG93RmlsdGVyQ29sdW1uczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNydWRTZXJ2aWNlPzogQ3J1ZEJhc2VTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueT47XHJcbiAgQElucHV0KCkgc2V0IHNlYXJjaEZpZWxkcyh2YWx1ZTogQXJyYXk8U2VhcmNoRmllbGQ+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgLy9yZXNldFxyXG4gICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBbXTtcclxuXHJcbiAgICAgIC8vaW5pdCB1c2luZyB2YWx1ZVxyXG4gICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBGaWx0ZXJIZWxwZXIuaW5pdFNlYXJjaEZpZWxkcyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuaW5pdFNlYXJjaE9uSW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2VhcmNoRmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaEZpZWxkcztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBHcmlkU29ydE1vZGUgfCBhbnkgPSBHcmlkU29ydE1vZGUuTXVsdGlwbGU7XHJcbiAgQElucHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZT86IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgcHJlc2VudGF0aW9uU2V0dGluZ3M/OiBQcmVzZW50YXRpb25TZXR0aW5nXHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdEtleU9ubHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlIHwgYW55ID0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbk1vZGUodmFsdWU6IEdyaWRTZWxlY3Rpb25Nb2RlIHwgYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGE/LmlzQWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5jb25maWc/LmRhdGE/LnNlbGVjdGlvbk1vZGUpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IHRoaXMuY29uZmlnPy5kYXRhPy5zZWxlY3Rpb25Nb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGlvbk1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBzZXQgc2VhcmNoT25Jbml0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWVcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNlYXJjaE9uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdFNlYXJjaE9uSW5pdCgpXHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoT25Jbml0XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzaG93R2xvYmFsU2VhcmNoOiBib29sZWFuID0gdHJ1ZVxyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEZpZWxkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcm90ZWN0ZWQgX3Nob3dDYWxlbmRlclZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXQgc2hvd0NhbGVuZGVyVmlldyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0NhbGVuZGVyVmlldyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX3Nob3dDYWxlbmRlclZpZXcgPT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuc2VhcmNoRmllbGRzPy5maW5kKHggPT4geC5maWVsZCA9PT0gdGhpcy5jYWxlbmRlclNjaGVtYT8uc3RhcnQpXHJcbiAgICAgIGxldCBlbmQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LmVuZClcclxuICAgICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICAgIHN0YXJ0LmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgZW5kLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgY2FsZW5kZXJTY2hlbWE6IEV2ZW50U2NoZW1hIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Nob3dDYXJkVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBzaG93Q2FyZFZpZXcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dDYXJkVmlldyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9zaG93S2FuYmFuVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBzaG93S2FuYmFuVmlldyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0thbmJhblZpZXcgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGJ1c2luZXNzQ2xhc3M/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG5cclxuICBASW5wdXQoKSBjaGVja2VkQnlGaWVsZDogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdEFsbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2VsZWN0QWxsID0gdmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc3ludGhldGljRXZlbnQgPSBuZXcgRXZlbnQoJ3NlbGVjdEFsbENoYW5nZScpO1xyXG4gICAgY29uc3QgZXZlbnQ6IFRhYmxlU2VsZWN0QWxsQ2hhbmdlRXZlbnQgPSB7XHJcbiAgICAgIGNoZWNrZWQ6IHZhbHVlLFxyXG4gICAgICBvcmlnaW5hbEV2ZW50OiBzeW50aGV0aWNFdmVudCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vblNlbGVjdEFsbENoYW5nZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSB0YXJnZXRCdXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZ2V0IHNlbGVjdEFsbCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbDsgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgZWRpdFJvdzogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlUm93OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBsb2FkOiBFdmVudEVtaXR0ZXI8eyByZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0LCBpc0ZvckNhbGVuZGFyOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlcXVlc3Q6IElQYWdlZFJlcXVlc3QsIGlzRm9yQ2FsZW5kYXI6IGJvb2xlYW4gfT4oKTtcclxuICBAT3V0cHV0KCkgYnV0dG9uQ29sdW1uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+KCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlcnNIdG1sVGVtcGxhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIEBPdXRwdXQoKSBjYWxlbmRhckV2ZW50Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHN0YXR1c0ZpbHRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgLy8gbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gIC8vICAgaWYoY2hhbmdlc1sncGFnZSddKXtcclxuICAvLyAgICAgdGhpcy5fZXh0cmFjdFN1bW1hcmllcygpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICBwcm90ZWN0ZWQgZmlsdGVyVG9vbHRpcCA9IFwic2hvd19maWx0ZXJcIjtcclxuICBwcm90ZWN0ZWQgcmVxdWlyZWRMb2NhbGl6YXRpb25LZXkgPSBcInNoYXJlZF9zZWFyY2hfZmllbGRfcmVxdWlyZWRcIjtcclxuXHJcbiAgZmlsdGVyTW9kZUljb24gPSBcInBpIHBpLWZpbHRlclwiO1xyXG4gIGZpbHRlck1vZGVUb29sdGlwID0gXCJtZW51X21vZGVcIjtcclxuICBjaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZTogc3RyaW5nID0gXCJtZW51XCI7XHJcblxyXG4gIGl0ZW1zPzogYW55W107XHJcbiAgX3NlYXJjaE9uSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHNlbGVjdGVkQ29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgaW1wb3J0YW50Q29sdW1ucyA9IFsnY29uc3VsdCcsICdlZGl0JywgJ2RlbGV0ZScsICd1cGxvYWQnLCAnZG93bmxvYWQnLCAnaW5mbycsICdub3RlcycsICdkdXBsaWNhdGUnXTtcclxuICBpc0ZpcnN0TG9hZE9mUGFnZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgdGl0bGVDYWNoZSA9IG5ldyBNYXA8YW55LCBzdHJpbmdbXT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zdGF0dXNDb2xvclNlcnZpY2U6IFN0YXR1c0NvbG9yU2VydmljZSxcclxuICAgIHB1YmxpYyBfZmljaGllclNlcnZpY2U6IEZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZTogSHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcml2YXRlIGxheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJpbWVuZ0NvbmZpZzogUHJpbWVOR0NvbmZpZyxcclxuICAgIHByaXZhdGUgYXBwU2V0dGluZ3NTZXJ2aWNlOiBBcHBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIF9yZWY/OiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsdGVyTW9kZVRvb2x0aXBGcm9tTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5mb3JtTmFtZX0tZmlsdGVyTW9kZWApXHJcbiAgICBpZiAoZmlsdGVyTW9kZVRvb2x0aXBGcm9tTG9jYWxTdG9yYWdlICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgIT0gbnVsbFxyXG4gICAgICAmJiBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgIT0gXCJcIikge1xyXG4gICAgICB0aGlzLmZpbHRlck1vZGVUb29sdGlwID0gZmlsdGVyTW9kZVRvb2x0aXBGcm9tTG9jYWxTdG9yYWdlXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSB0cnVlXHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyLXNsYXNoXCI7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9IFwiaGlkZV9maWx0ZXJcIjtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPT09IFwibWVudV9tb2RlXCIpIHtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVJY29uID0gXCJwaSBwaS1jaGVja1wiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBcInJvd19tb2RlXCI7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwibWVudVwiXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwicm93XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktZWxsaXBzaXMtdlwiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBcIm1lbnVfbW9kZVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyXCI7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9IFwic2hvd19maWx0ZXJcIjtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBsZXQgbGFuZ3VlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0ocnRsTW9kZUtleXMucnRsTW9kZUVuYWJsZWQpO1xyXG5cclxuICAgIGlmIChsYW5ndWUgJiYgSlNPTi5wYXJzZShsYW5ndWUpKSB7XHJcbiAgICAgIHRoaXMuaXNBciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc0FyID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLnRyYW5zbGF0ZWRIZWFkZXIgPSB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShjb2x1bW4uaGVhZGVyISEpKVxyXG5cclxuICAgIHRoaXMuX3RlbXBDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cclxuICAgIHRoaXMudGVtcFNlYXJjaEZpZWxkcyA9IHRoaXMuX3NlYXJjaEZpZWxkcyA/PyBbXTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+XHJcbiAgICAgICF0aGlzLmltcG9ydGFudENvbHVtbnMuaW5jbHVkZXMoY29sdW1uLmZpZWxkKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucyB8fCB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1uc1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29sdW1uLm9yZGVyID0gaW5kZXg7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmlzUnRsTW9kZUVuYWJsZWQoKVxyXG4gICAgdGhpcy5fcnRsTW9kZVN1YnNjcmliZSgpXHJcbiAgICB0aGlzLnByb2Nlc3NTdGlja3lDb2x1bW5zKClcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2VudGl0eUluZm8nXT8uY3VycmVudFZhbHVlICYmIHRoaXMuZW50aXR5SW5mbykge1xyXG5cclxuLy8gICAgaWYgKGNoYW5nZXNbJ2VudGl0eUluZm8nXSAmJiB0aGlzLmVudGl0eUluZm8pIHtcclxuICAgICAgdGhpcy5hcHBseUVudGl0eUluZm8odGhpcy5lbnRpdHlJbmZvKTtcclxuICAgICAgdGhpcy5sb2FkU3RhdHVzQ29sb3JzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ3RhcmdldEJ1c2luZXNzQ2xhc3MnXSAmJiB0aGlzLnRhcmdldEJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5sb2FkU3RhdHVzQ29sb3JzRGV0YWlsc0J5QnVzaW5lc3NDbGFzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdHVzTWV0YWRhdGE/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG4gIHN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeT86IFN0YXR1c01ldGFkYXRhUmVzcG9uc2U7XHJcblxyXG4gIGdldFN0YXR1c09wdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNNZXRhZGF0YT8ub3B0aW9ucy5maW5kKG8gPT4gby5zdGF0dXNWYWx1ZSA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzT3B0aW9uRm9yU3RhdHVzSGlzdG9yeShzdGF0dXNWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3Rvcnk/Lm9wdGlvbnMuZmluZChvID0+IG8udHJhbnNsYXRlZExhYmVsID09PSBzdGF0dXNWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU3RhdHVzQ29sb3JzRGV0YWlsc0J5QnVzaW5lc3NDbGFzcygpIHtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXRCdXNpbmVzc0NsYXNzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnRhcmdldEJ1c2luZXNzQ2xhc3MgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zdGF0dXNDb2xvclNlcnZpY2UuZ2V0U3RhdHVzQ29sb3JEZXRhaWxzQnlCdXNpbmVzc0NsYXNzTmFtZSh0aGlzLnRhcmdldEJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IFN0YXR1c01ldGFkYXRhUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3RvcnkgPSByZXNwb25zZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdGF0dXMgY29sb3JzJywgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRTdGF0dXNDb2xvcnMoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5idXNpbmVzc0NsYXNzITtcclxuICAgIGNvbnN0IHN0YXR1c0VudW1OYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5zdGF0dXNFbnVtTmFtZSE7XHJcblxyXG4gICAgaWYgKCFjbGFzc05hbWUgfHwgIXN0YXR1c0VudW1OYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTWlzc2luZyBjbGFzc05hbWUgb3Igc3RhdHVzRW51bU5hbWUgZm9yIGVudGl0eUluZm8uJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuX3N0YXR1c0NvbG9yU2VydmljZS5nZXRTdGF0dXNDb2xvckRldGFpbHMoY2xhc3NOYW1lLCBzdGF0dXNFbnVtTmFtZSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogU3RhdHVzTWV0YWRhdGFSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c01ldGFkYXRhID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgc3RhdHVzIGNvbG9ycycsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdGF0dXMgY29sb3JzOicsIGVycik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsIHBlcmNlbnQ6IG51bWJlciA9IDUwKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJyc7XHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcbiAgICBcclxuICAgIGxldCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgbGV0IGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICBsZXQgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuXHJcbiAgICByID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHIgKyAoMjU1IC0gcikgKiBwZXJjZW50IC8gMTAwKSk7XHJcbiAgICBnID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKGcgKyAoMjU1IC0gZykgKiBwZXJjZW50IC8gMTAwKSk7XHJcbiAgICBiID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKGIgKyAoMjU1IC0gYikgKiBwZXJjZW50IC8gMTAwKSk7XHJcblxyXG4gICAgY29uc3QgbmV3SGV4ID1cclxuICAgICAgJyMnICtcclxuICAgICAgW3IsIGcsIGJdXHJcbiAgICAgICAgLm1hcCh4ID0+IHgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpXHJcbiAgICAgICAgLmpvaW4oJycpO1xyXG5cclxuICAgIHJldHVybiBuZXdIZXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RW50aXR5SW5mbyhlbnRpdHlJbmZvOiBFbnRpdHlJbmZvKSB7XHJcbiAgICBpZiAoIWVudGl0eUluZm8/LnN0YXR1c0NvbHVtbk5hbWUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzdGF0dXNDb2x1bW5OYW1lID0gZW50aXR5SW5mby5zdGF0dXNDb2x1bW5OYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgY29uc3Qgc3RhdHVzQ29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoXHJcbiAgICAgIGMgPT4gYy5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBzdGF0dXNDb2x1bW5OYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghc3RhdHVzQ29sdW1uKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgU3RhdHVzIGNvbHVtbiBcIiR7ZW50aXR5SW5mby5zdGF0dXNDb2x1bW5OYW1lfVwiIG5vdCBmb3VuZC5gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXR1c0NvbHVtbi5pc1N0YXR1c0NvbHVtbiA9IHRydWU7XHJcbiAgICBcclxuICAgIGNvbnN0IGJ1dHRvbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5pc0J1dHRvbik7XHJcbiAgICBjb25zdCBvdGhlckNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuaXNCdXR0b24gJiYgYyAhPT0gc3RhdHVzQ29sdW1uKTtcclxuXHJcbiAgICBjb25zdCBtYXhCdXR0b25PcmRlciA9XHJcbiAgICAgIGJ1dHRvbkNvbHVtbnMucmVkdWNlKChtLCBjKSA9PiBNYXRoLm1heChtLCBjLm9yZGVyID8/IDApLCAwKSB8fCAwO1xyXG5cclxuICAgIHN0YXR1c0NvbHVtbi5vcmRlciA9IG1heEJ1dHRvbk9yZGVyICsgMTtcclxuXHJcbiAgICBjb25zdCByZW9yZGVyZWQgPSBbXHJcbiAgICAgIC4uLmJ1dHRvbkNvbHVtbnMuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKSksXHJcbiAgICAgIHN0YXR1c0NvbHVtbixcclxuICAgICAgLi4ub3RoZXJDb2x1bW5zLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMCkpLFxyXG4gICAgXTtcclxuXHJcbiAgICByZW9yZGVyZWQuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4gKGNvbC5vcmRlciA9IGluZGV4KSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbLi4ucmVvcmRlcmVkXTtcclxuICB9XHJcblxyXG5cclxuICBnZXRTdGF0ZSgpIHtcclxuICAgIGxldCBzdGF0ZTogVGFibGVTdGF0ZSA9IHt9O1xyXG5cclxuICAgIGlmICghdGhpcy5kdCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kdC5yZXNpemFibGVDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuZHQuc2F2ZUNvbHVtbldpZHRocyhzdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kdC5zYXZlQ29sdW1uT3JkZXIoc3RhdGUpO1xyXG5cclxuICAgIHJldHVybiBzdGF0ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmVTdGF0ZShjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGxldCBzdGF0ZTogVGFibGVTdGF0ZSA9IEpTT04ucGFyc2UoY29uZmlndXJhdGlvbilcclxuICAgIGlmICh0aGlzLmR0KSB7XHJcblxyXG4gICAgICB0aGlzLmR0LmNvbHVtbldpZHRoc1N0YXRlID0gc3RhdGUuY29sdW1uV2lkdGhzO1xyXG4gICAgICB0aGlzLmR0LnRhYmxlV2lkdGhTdGF0ZSA9IHN0YXRlLnRhYmxlV2lkdGg7XHJcblxyXG4gICAgICBsZXQgY29sdW1uT3JkZXIgPSBzdGF0ZS5jb2x1bW5PcmRlcjtcclxuXHJcbiAgICAgIGlmIChjb2x1bW5PcmRlcikge1xyXG4gICAgICAgIGxldCByZW9yZGVyZWRDb2x1bW5zID0gdGhpcy5nZXRSZW9yZGVyZWRDb2x1bW5zKGNvbHVtbk9yZGVyKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHJlb3JkZXJlZENvbHVtbnM7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gcmVvcmRlcmVkQ29sdW1ucztcclxuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZENvbHVtbnNDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnNvcnRDb2x1bW5zKClcclxuICB9XHJcblxyXG4gIHNvcnRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleEEgPSB0aGlzLmltcG9ydGFudENvbHVtbnMuaW5kZXhPZihhLmZpZWxkKTtcclxuICAgICAgY29uc3QgaW5kZXhCID0gdGhpcy5pbXBvcnRhbnRDb2x1bW5zLmluZGV4T2YoYi5maWVsZCk7XHJcblxyXG4gICAgICBpZiAoaW5kZXhBID09PSAtMSAmJiBpbmRleEIgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGluZGV4QSA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW5kZXhCID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLm9yZGVyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIhIC0gYi5vcmRlciEpLFxyXG4gICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5vcmRlciA9PT0gdW5kZWZpbmVkKSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRSZW9yZGVyZWRDb2x1bW5zKGNvbHVtbk9yZGVyOiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIGxldCByZW9yZGVyZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGNvbHVtbk9yZGVyLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgIGxldCBjb2wgPSB0aGlzLmZpbmRDb2x1bW5CeUtleShrZXkpO1xyXG4gICAgICBpZiAoY29sKSB7XHJcbiAgICAgICAgcmVvcmRlcmVkQ29sdW1ucy5wdXNoKGNvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZW9yZGVyZWRDb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgZmluZENvbHVtbkJ5S2V5KGtleTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fdGVtcENvbHVtbnMpIHtcclxuICAgICAgZm9yIChsZXQgY29sIG9mIHRoaXMuX3RlbXBDb2x1bW5zKSB7XHJcbiAgICAgICAgaWYgKGNvbC5oZWFkZXIgPT09IGtleSB8fCBjb2wuZmllbGQgPT09IGtleSkgcmV0dXJuIGNvbDtcclxuICAgICAgICBlbHNlIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWxlY3RlZENvbHVtbnMoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBsZXQgc3RhdGU6IFRhYmxlU3RhdGUgPSBKU09OLnBhcnNlKGNvbmZpZ3VyYXRpb24pXHJcbiAgICBpZiAodGhpcy5kdCkge1xyXG5cclxuICAgICAgdGhpcy5kdC5jb2x1bW5XaWR0aHNTdGF0ZSA9IHN0YXRlLmNvbHVtbldpZHRocztcclxuICAgICAgdGhpcy5kdC50YWJsZVdpZHRoU3RhdGUgPSBzdGF0ZS50YWJsZVdpZHRoO1xyXG5cclxuICAgICAgbGV0IGNvbHVtbk9yZGVyID0gc3RhdGUuY29sdW1uT3JkZXI7XHJcblxyXG4gICAgICBpZiAoY29sdW1uT3JkZXIpIHtcclxuICAgICAgICBsZXQgcmVvcmRlcmVkQ29sdW1ucyA9IHRoaXMuZ2V0UmVvcmRlcmVkQ29sdW1ucyhjb2x1bW5PcmRlcik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSByZW9yZGVyZWRDb2x1bW5zO1xyXG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSB0aGlzLl90ZW1wQ29sdW1ucztcclxuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbm90SW5TcGVjaWZpZWRDb2x1bW4oY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuaW1wb3J0YW50Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NTdGlja3lDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5fY29sdW1ucy5mb3JFYWNoKChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgaWYgKGNvbC5pc0Zyb3plbikge1xyXG4gICAgICAgIGNvbC5uZ1N0eWxlID0gdGhpcy5nZXRUaGVTdHlsZShjb2wpXHJcbiAgICAgICAgY29sLmhlYWRlckNvbHVtblN0eWxlID0geyAuLi5jb2wubmdTdHlsZSwgekluZGV4OiAxMDAwIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldENoZWNrYm94U3R5bGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc1J0bE1vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICByaWdodDogYDBweGAsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcclxuICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgXCJtaW4td2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbGVmdDogYDBweGAsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcclxuICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgXCJtaW4td2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRoZVN0eWxlKGNvbHVtbjogR3JpZENvbHVtbik6IGFueSB7XHJcblxyXG4gICAgaWYgKCFjb2x1bW4uaXNGcm96ZW4pIHtcclxuICAgICAgcmV0dXJuIHt9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi5pc0Zyb3plbiA9PSB0cnVlKSB7XHJcbiAgICAgIGxldCBlbGVtZW50UG9zaXRpb24gPSAwO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09IHRoaXMubXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZSkge1xyXG4gICAgICAgIGVsZW1lbnRQb3NpdGlvbiA9IDMwICsgZWxlbWVudFBvc2l0aW9uICsgKGNvbHVtbi5vcmRlciA/PyAwKSAqIDYwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVsZW1lbnRQb3NpdGlvbiA9IGVsZW1lbnRQb3NpdGlvbiArICgoY29sdW1uLm9yZGVyID8/IDApICogMS44NSkgKiAyMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1J0bE1vZGUpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcmlnaHQ6IGAke2VsZW1lbnRQb3NpdGlvbn1weGAsXHJcbiAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXHJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgICBcIm1pbi13aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGxlZnQ6IGAke2VsZW1lbnRQb3NpdGlvbn1weGAsXHJcbiAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXHJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgICBcIm1pbi13aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNSdGxNb2RlRW5hYmxlZCgpIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRTZXJ2aWNlLmlzUnRsTW9kZUVuYWJsZWQoKSkge1xyXG4gICAgICB0aGlzLmlzUnRsTW9kZSA9IHRydWVcclxuICAgICAgdGhpcy51cGRhdGVQcmltZU5HVGFibGVGaWx0ZXJzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUHJpbWVOR1RhYmxlRmlsdGVycygpIHtcclxuICAgIHRoaXMuX3ByaW1lbmdDb25maWcuc2V0VHJhbnNsYXRpb24ocHJpbWVuZ0xvY2FsZUFyKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcnRsTW9kZVN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuX2xheW91dFNlcnZpY2UuZW5hYmxlUnRsTW9kZVN1YmplY3QkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzUnRsTW9kZSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZXMoc2VhcmNoRmllbGRWYWx1ZXM6IEFycmF5PFNlYXJjaEZpZWxkPikge1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQuZW1pdChzZWFyY2hGaWVsZFZhbHVlcylcclxuICB9XHJcblxyXG4gIGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09ICh0aGlzLnBhZ2UudG90YWxDb3VudCAtIHRoaXMucGFnZS5wYWdlU2l6ZSkgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IDAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZWRpdChpdGVtOiBhbnkpIHtcclxuICAgIHRoaXMuZWRpdFJvdy5lbWl0KGl0ZW1bdGhpcy5rZXldKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZShpdGVtOiBhbnkpIHtcclxuICAgIHRoaXMuZGVsZXRlUm93LmVtaXQoaXRlbVt0aGlzLmtleV0pO1xyXG4gIH1cclxuXHJcbiAgbGF6eUxvYWQoZXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMucGFnZWRSZXF1ZXN0ID09IG51bGwgJiYgdGhpcy5wYWdlZFJlcXVlc3QgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0ge307XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdC5za2lwQ291bnQgPSBldmVudC5maXJzdCA9PSAxID8gMCA6IGV2ZW50LmZpcnN0O1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QubWF4UmVzdWx0Q291bnQgPSBldmVudC5yb3dzO1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUgJiYgdGhpcy5pc0ZpcnN0TG9hZE9mUGFnZSkge1xyXG4gICAgICB0aGlzLmlzRmlyc3RMb2FkT2ZQYWdlID0gZmFsc2VcclxuICAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmZvcm1OYW1lKTtcclxuICAgICAgaWYgKHN0b3JlZFZhbHVlKSB7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnBhcnNlKHN0b3JlZFZhbHVlKTtcclxuICAgICAgICBjb25zdCBjb2x1bW5PcmRlcjogc3RyaW5nW10gPSBzZXNzaW9uRGF0YS5jb2x1bW5PcmRlcjtcclxuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aHM6IHN0cmluZ1tdID0gc2Vzc2lvbkRhdGEuY29sdW1uV2lkdGhzLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTZWxlY3RlZENvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gICAgICAgIGNvbHVtbk9yZGVyLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aHNbaW5kZXhdO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ29sdW1uSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5maWVsZCA9PT0gZmllbGQpO1xyXG4gICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1uSW5kZXggIT09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1tleGlzdGluZ0NvbHVtbkluZGV4XS53aWR0aCA9IGNvbHVtbldpZHRoO1xyXG4gICAgICAgICAgICB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zLnB1c2godGhpcy5zZWxlY3RlZENvbHVtbnNbZXhpc3RpbmdDb2x1bW5JbmRleF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHVwZGF0ZWRTZWxlY3RlZENvbHVtbnM7XHJcblxyXG4gICAgICAgIGlmICgoc2Vzc2lvbkRhdGEubXVsdGlTb3J0TWV0YSAmJiBzZXNzaW9uRGF0YS5tdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHx8IChzZXNzaW9uRGF0YS5maWx0ZXJzKSkge1xyXG4gICAgICAgICAgaWYgKHNlc3Npb25EYXRhLm11bHRpU29ydE1ldGEgJiYgc2Vzc2lvbkRhdGEubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25EYXRhLm11bHRpU29ydE1ldGEuZm9yRWFjaCgobWV0YTogeyBmaWVsZDogYW55OyBvcmRlcjogYW55OyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHNvcnRNZXRhOiBTb3J0TWV0YSA9IHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBtZXRhLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3JkZXI6IG1ldGEub3JkZXJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZXZlbnQuc29ydEZpZWxkID0gbWV0YS5maWVsZDtcclxuICAgICAgICAgICAgICBldmVudC5zb3J0T3JkZXIgPSBtZXRhLm9yZGVyO1xyXG4gICAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGE/LnB1c2goc29ydE1ldGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzZXNzaW9uRGF0YS5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YSB9ID0ge307XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNlc3Npb25EYXRhLmZpbHRlcnMpLmZvckVhY2goKFtmaWVsZE5hbWUsIGZpbHRlck1ldGFkYXRhXSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlck1ldGFkYXRhVmFsdWUgPSBmaWx0ZXJNZXRhZGF0YSBhcyBbRmlsdGVyTWV0YWRhdGFdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyTWV0YWRhdGFWYWx1ZVswXSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZmlsdGVyc1tmaWVsZE5hbWVdID0gZmlsdGVyTWV0YWRhdGFWYWx1ZVswXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gQXNzaWduIHRoZSBmaWx0ZXJzIHRvIHRoZSBldmVudFxyXG4gICAgICAgICAgICBldmVudC5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICAgICAgLy8gZXZlbnQuZmlsdGVycyA9IE9iamVjdC5lbnRyaWVzKHNlc3Npb25EYXRhLmZpbHRlcnMpLnJlZHVjZSgoZmlsdGVyczogeyBbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGEgfSwgW2ZpZWxkTmFtZSwgZmlsdGVyTWV0YWRhdGEgXSApID0+IHtcclxuICAgICAgICAgICAgLy8gICB2YXIgZmlsdGVyTWV0YWRhdGFWYWx1ZSA9IGZpbHRlck1ldGFkYXRhIGFzIEZpbHRlck1ldGFkYXRhO1xyXG4gICAgICAgICAgICAvLyAgIGlmIChmaWx0ZXJNZXRhZGF0YVZhbHVlLnZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAvLyAgICAgZmlsdGVyc1tmaWVsZE5hbWVdID0gZmlsdGVyTWV0YWRhdGEgYXMgRmlsdGVyTWV0YWRhdGE7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnYWxsIGZpbHRlcnMnLCBmaWx0ZXJzKVxyXG4gICAgICAgICAgICAvLyAgIHJldHVybiBmaWx0ZXJzO1xyXG4gICAgICAgICAgICAvLyB9LCB7fSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2VhcmNoRmllbGRzID1bXTtcclxuICAgICAgICAgICAgLy8gY29uc3QgZmlsdGVyc0FycmF5OiBbc3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfCBudWxsOyBtYXRjaE1vZGU6IHN0cmluZyxvcGVyYXRvciA6IHN0cmluZyB9W11dW10gPSBPYmplY3QuZW50cmllcyhkYXRhLmZpbHRlcnMpO1xyXG5cclxuICAgICAgICAgICAgLy8gZmlsdGVyc0FycmF5LmZvckVhY2goKFtmaWVsZE5hbWUsIGZpZWxkVmFsdWVdKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyAgIGZpZWxkVmFsdWUuZm9yRWFjaChmaWx0ZXIgPT5cclxuICAgICAgICAgICAgLy8gICAgIHtcclxuXHJcbiAgICAgICAgICAgIC8vICAgICBpZihmaWx0ZXIudmFsdWUpe1xyXG4gICAgICAgICAgICAvLyAgICAgICBsZXQgc2VhcmNoRmllbGQgOiBTZWFyY2hGaWVsZCA9e1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIGZpZWxkIDpmaWVsZE5hbWUsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgbGFiZWxWYWx1ZSA6IGZpbHRlci52YWx1ZSxcclxuICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZTpmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgdHlwZSA6IHRoaXMuaW5mZXJJbnB1dFR5cGUoZmllbGROYW1lKSxcclxuICAgICAgICAgICAgLy8gICAgICAgICBvcGVyYXRvciA6IHRoaXMuZ2V0T3BlcmF0b3JOdW1iZXIoZmlsdGVyLm1hdGNoTW9kZSlcclxuICAgICAgICAgICAgLy8gICAgICAgfTtcclxuICAgICAgICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJ3NlYXJjaEZpZWxkJyxzZWFyY2hGaWVsZCk7XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmICh0aGlzLnNlYXJjaEZpZWxkcykge1xyXG5cclxuICAgICAgICAgICAgLy8gICAgICAgdGhpcy5zZWFyY2hGaWVsZHMucHVzaChzZWFyY2hGaWVsZCk7XHJcbiAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTm8gc2Vzc2lvbiBkYXRhIGZvdW5kIGluIGxvY2FsU3RvcmFnZVwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPSB0aGlzLl9leHRyYWN0RmlsdGVycyhldmVudC5maWx0ZXJzKTtcclxuICAgIHRoaXMuX2V4dHJhY3RTb3J0Q3JpdGVyaWFzKGV2ZW50KTtcclxuICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBmaWVsZHMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICh0aGlzLmNvbHVtbnMgIT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICBmaWVsZHMucHVzaChjb2wuZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgYnV0dG9uQ2xpY2tlZChpdGVtOiBhbnksIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RLZXlPbmx5KSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHsgZmllbGQ6IGZpZWxkLCBrZXk6IGl0ZW1bdGhpcy5rZXldLCBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHkgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Db2x1bW5DbGlja2VkLmVtaXQoeyBmaWVsZDogZmllbGQsIGtleTogaXRlbSwgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5d29yZFZhbHVlQ2hhbmdlZChrZXl3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMua2V5d29yZCA9IGtleXdvcmRcclxuICB9XHJcblxyXG4gIGlzQWxsUmVxdWlyZWRTZWFyY2hGaWVsZHNIYXZlVmFsdWVzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGludmFsaWRTZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkc1xyXG4gICAgICA/LmZpbHRlcih4ID0+IHgucmVxdWlyZWQgPT0gdHJ1ZSAmJiAoeC52YWx1ZSA9PSB1bmRlZmluZWQgfHwgeC52YWx1ZSA9PSAnJyB8fCB4LnZhbHVlID09IG51bGwpKVxyXG5cclxuICAgIGlmIChpbnZhbGlkU2VhcmNoRmllbGRzID09IHVuZGVmaW5lZCB8fCBpbnZhbGlkU2VhcmNoRmllbGRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdXHJcbiAgICBpbnZhbGlkU2VhcmNoRmllbGRzLmZvckVhY2goc2VhcmNoRmllbGQgPT4ge1xyXG4gICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKHNlYXJjaEZpZWxkLmxhYmVsVmFsdWUpfSAke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKHRoaXMucmVxdWlyZWRMb2NhbGl6YXRpb25LZXkpfWApXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlc0Zyb21BcnJheVN0cmluZyhtZXNzYWdlcyk7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGluaXRTZWFyY2hPbkluaXQoKSB7XHJcbiAgICBsZXQgaW52YWxpZFNlYXJjaEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICAgID8uZmlsdGVyKHggPT4geC5yZXF1aXJlZCA9PSB0cnVlICYmICh4LnZhbHVlID09IHVuZGVmaW5lZCB8fCB4LnZhbHVlID09ICcnIHx8IHgudmFsdWUgPT0gbnVsbCkpID8/IFtdXHJcblxyXG4gICAgaWYgKHRoaXMuX3NlYXJjaE9uSW5pdCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hPbkluaXQgPSBpbnZhbGlkU2VhcmNoRmllbGRzLmxlbmd0aCA9PSAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjY29tYm9Cb3hMYWJlbENoYW5nZWQoZXZlbnQ/OiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcclxuICAgIHRoaXMuX2V4dHJhY3RTZWFyY2hCb3hGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLl9nZW5lcmF0ZUZpbHRlcnNIdG1sVGVtcGxhdGUoKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaChldnQ6IGFueSA9IG51bGwpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwic2VhcmNoPj4+XCIsIHRoaXMuc2VhcmNoRmllbGRzKVxyXG4gICAgLy9zZXQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxyXG5cclxuICAgIHRoaXMuX2V4dHJhY3RPbmx5VmlzaWJsZVNlYXJjaEZpZWxkcygpO1xyXG5cclxuICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCAmJiB0aGlzLmlzQWxsUmVxdWlyZWRTZWFyY2hGaWVsZHNIYXZlVmFsdWVzKCkpIHtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3Quc3VtbWFyaWVzID0gdGhpcy5fZXh0cmFjdEhhdmVTdW1tYXJ5UHJvcGVydGllcygpO1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5zb3J0aW5nID0gdGhpcy5fc29ydDtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3Qua2V5d29yZCA9IHRoaXMua2V5d29yZDtcclxuXHJcbiAgICAgIC8vYWRkIHNlYXJjaCBib3ggZmlsdGVyc1xyXG4gICAgICB0aGlzLl9leHRyYWN0U2VhcmNoQm94RmlsdGVycygpO1xyXG5cclxuICAgICAgLy9nZW5lcmF0ZSBmaWx0ZXJzIGh0bWwgdGVtcGxhdGVcclxuICAgICAgdGhpcy5fZ2VuZXJhdGVGaWx0ZXJzSHRtbFRlbXBsYXRlKCk7XHJcbiAgICAgIC8vY2xvbmVcclxuXHJcbiAgICAgIGxldCBuZXdSZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0ID0gdGhpcy5fY2xvbmVQYWdlZFJlcXVlc3QodGhpcy5wYWdlZFJlcXVlc3QpO1xyXG5cclxuICAgICAgLy9jb25jYXQgZmlsdGVyc1xyXG4gICAgICBuZXdSZXF1ZXN0LmZpbHRlcnMgPSBbLi4udGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMsIC4uLnRoaXMuX3NlYXJjaEJveEZpbHRlcnNdO1xyXG5cclxuICAgICAgLy9leGNsdWRlIHVzZWxlc3MgZmlsdGVyc1xyXG4gICAgICBuZXdSZXF1ZXN0ID0gdGhpcy5fZXhjbHVkZVVzZWxlc3NGaWx0ZXJzKG5ld1JlcXVlc3QpO1xyXG5cclxuICAgICAgLy8gdGVzdCBpZiBmaWx0ZXJzIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICAgIGlmICgodGhpcy5sYXRlc3RGaWx0ZXJzID8gSlNPTi5zdHJpbmdpZnkodGhpcy5sYXRlc3RGaWx0ZXJzKSA6IG51bGwpXHJcbiAgICAgICAgIT09IChuZXdSZXF1ZXN0LmZpbHRlcnMgPyBKU09OLnN0cmluZ2lmeShuZXdSZXF1ZXN0LmZpbHRlcnMpIDogbnVsbCkpIHtcclxuICAgICAgICBuZXdSZXF1ZXN0LnNraXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmR0KSB7XHJcbiAgICAgICAgICB0aGlzLmR0LmZpcnN0ID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNhdmUgbGF0ZXN0IGZpbHRlcnNcclxuICAgICAgdGhpcy5sYXRlc3RGaWx0ZXJzID0gbmV3UmVxdWVzdC5maWx0ZXJzO1xyXG5cclxuICAgICAgdGhpcy5sb2FkLmVtaXQoeyByZXF1ZXN0OiBuZXdSZXF1ZXN0LCBpc0ZvckNhbGVuZGFyOiB0aGlzLl9zaG93Q2FsZW5kZXJWaWV3IH0pO1xyXG5cclxuICAgICAgdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZpcnN0RWxlbWVudEluZGV4KCk6IG51bWJlciB7XHJcbiAgICBpZiAoIXRoaXMuZHQpIHJldHVybiAwO1xyXG5cclxuICAgIGlmICh0aGlzLnBhZ2UuaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmR0LmZpcnN0ID09PSAwID8gMSA6ICh0aGlzLmR0Py5maXJzdCA/PyAwKTtcclxuICB9XHJcblxyXG4gIGdldFN1bW1hcnkoZmllbGQ6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICBsZXQgc3VtbWFyeVJvdyA9IHRoaXMucGFnZS5zdW1tYXJpZXNcclxuICAgICAgLmZpbmQocyA9PiBzLnByb3ByZXR5LnRvVXBwZXJDYXNlKCkgPT0gZmllbGQudG9VcHBlckNhc2UoKSk7XHJcbiAgICBpZiAoc3VtbWFyeVJvdykge1xyXG4gICAgICByZXR1cm4gc3VtbWFyeVJvdy5zdW1tYXJ5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKSB7XHJcbiAgICBsZXQgc2VsZWN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PSBHcmlkU2VsZWN0aW9uTW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RLZXlPbmx5KSB7XHJcbiAgICAgICAgICBsZXQga2V5czogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZm9yRWFjaCgodjogYW55KSA9PiB7IGtleXMucHVzaCh2W3RoaXMua2V5XSkgfSk7XHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBrZXlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzZWxlY3Rpb24gPSBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09IEdyaWRTZWxlY3Rpb25Nb2RlLlNpbmdsZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RLZXlPbmx5KSB7XHJcbiAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24gPyBbdGhpcy5zZWxlY3Rpb25bdGhpcy5rZXldXSA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uID8gW3RoaXMuc2VsZWN0aW9uXSA6IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9IEdyaWRTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0aW9uKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZz8uZGF0YT8uaXNBZHZhbmNlZFNlYXJjaCAmJiBzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChzZWxlY3Rpb24pXHJcbiAgICAgIHRoaXMuX3JlZj8uY2xvc2Uoc2VsZWN0aW9uWzBdKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0QWxsQ2hhbmdlKGV2ZW50OiBUYWJsZVNlbGVjdEFsbENoYW5nZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdEFsbCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgIGlmICh0aGlzLl9zZWxlY3RBbGwpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkQnlGaWVsZCAmJiB0aGlzLmNoZWNrZWRCeUZpZWxkLnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5wYWdlLml0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtW3RoaXMuY2hlY2tlZEJ5RmllbGRdID09PSB0cnVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMucGFnZS5pdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIG9uU2VsZWN0ZWRDb2x1bW5zQ2hhbmdlKCkge1xyXG4gIC8vICAgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAvLyAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmZvcm1OYW1lKTtcclxuXHJcbiAgLy8gICAgIGlmIChzdG9yZWRWYWx1ZSkge1xyXG4gIC8vICAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gSlNPTi5wYXJzZShzdG9yZWRWYWx1ZSk7XHJcbiAgLy8gICAgICAgbGV0IGNvbHVtbk9yZGVyOiBzdHJpbmdbXSA9IFtdO1xyXG4gIC8vICAgICAgIGxldCBjb2x1bW5XaWR0aHM6IHN0cmluZ1tdID0gW107XHJcbiAgLy8gICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoaXRlbS5maWVsZCA9PT0gJ3VwbG9hZCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goaXRlbSk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGVsc2UgaWYgKGl0ZW0uZmllbGQgPT09ICdkb3dubG9hZCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goaXRlbSk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGVsc2UgaWYgKGl0ZW0uZmllbGQgPT09ICdjb25zdWx0Jykge1xyXG4gIC8vICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaChpdGVtKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgZWxzZSBpZiAoaXRlbS5maWVsZCA9PT0gJ2RlbGV0ZScpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goaXRlbSk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGVsc2UgaWYgKGl0ZW0uZmllbGQgPT09ICdlZGl0Jykge1xyXG4gIC8vICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaChpdGVtKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvcnQoKGEsIGIpID0+IHtcclxuICAvLyAgICAgICAgIGlmIChhLm9yZGVyICE9PSB1bmRlZmluZWQgJiYgYi5vcmRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgLy8gICAgICAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5vcmRlcjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIHJldHVybiAwO1xyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goc2VsZWN0ZWRDb2x1bW4gPT4ge1xyXG4gIC8vICAgICAgICAgY29sdW1uT3JkZXIucHVzaChzZWxlY3RlZENvbHVtbi5maWVsZCk7XHJcbiAgLy8gICAgICAgICBjb25zdCBzZWxlY3RlZFdpZHRoID0gc2VsZWN0ZWRDb2x1bW4ubWluV2lkdGg7XHJcbiAgLy8gICAgICAgICBpZiAoc2VsZWN0ZWRXaWR0aCkge1xyXG4gIC8vICAgICAgICAgICBjb2x1bW5XaWR0aHMucHVzaChzZWxlY3RlZFdpZHRoLnRvU3RyaW5nKCkpO1xyXG4gIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgLy9jb2x1bW5XaWR0aHMucHVzaCgnOTAnKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAvLyAgICAgICBzZXNzaW9uRGF0YS5jb2x1bW5PcmRlciA9IGNvbHVtbk9yZGVyO1xyXG4gIC8vICAgICAgIHNlc3Npb25EYXRhLmNvbHVtbldpZHRocyA9IGNvbHVtbldpZHRocy5qb2luKCcsJyk7XHJcblxyXG4gIC8vICAgICAgIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5mb3JtTmFtZSwgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkRhdGEpKTtcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAvL2NvbnN0IHJlc3VsdCA9IHRoaXMuZ2VuZXJhdGVUYWJsZUNvbmZpZ0pTT04oKTtcclxuICAvLyAgICAgICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZm9ybU5hbWUsIHJlc3VsdCk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGdlbmVyYXRlVGFibGVDb25maWdKU09OKCk6IHN0cmluZyB7XHJcbiAgLy8gICBjb25zdCB0YWJsZUNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5qc29uU3RyaW5nTGF5b3V0KTtcclxuICAvLyAgIHRhYmxlQ29uZmlnLmNvbHVtbk9yZGVyID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQpO1xyXG4gIC8vICAgLy90YWJsZUNvbmZpZy5jb2x1bW5XaWR0aHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoKCkgPT4gJzkwJykuam9pbignLCcpO1xyXG4gIC8vICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRhYmxlQ29uZmlnKTtcclxuICAvLyB9XHJcblxyXG5cclxuXHJcbiAgb25TdGF0ZVJlc3RvcmUodGFibGVTdGF0ZTogVGFibGVTdGF0ZSkge1xyXG4gICAgaWYgKHRhYmxlU3RhdGUuc2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGFibGVTdGF0ZS5zZWxlY3Rpb25cclxuICAgICAgdGhpcy5vblNlbGVjdGVkSXRlbXNDaGFuZ2VkKClcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5mb3JtTmFtZSkge1xyXG4gICAgLy8gICBjb25zdCBzdG9yZWRWYWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZm9ybU5hbWUpO1xyXG4gICAgLy8gICBpZiAoc3RvcmVkVmFsdWUpIHtcclxuICAgIC8vICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbHVtbk9yZGVyOiBzdHJpbmdbXSA9IHNlc3Npb25EYXRhLmNvbHVtbk9yZGVyO1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbHVtbldpZHRoczogc3RyaW5nW10gPSBzZXNzaW9uRGF0YS5jb2x1bW5XaWR0aHMuc3BsaXQoJywnKTtcclxuXHJcbiAgICAvLyAgICAgLy8gVXBkYXRlIHNlbGVjdGVkQ29sdW1ucyBiYXNlZCBvbiBjb2x1bW5PcmRlciBhbmQgY29sdW1uV2lkdGhzXHJcbiAgICAvLyAgICAgY29uc3QgdXBkYXRlZFNlbGVjdGVkQ29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgICAvLyAgICAgY29sdW1uT3JkZXIuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XHJcbiAgICAvLyAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvbHVtbldpZHRoc1tpbmRleF07XHJcbiAgICAvLyAgICAgICAvLyBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGNvbHVtbiBpbiBzZWxlY3RlZENvbHVtbnNcclxuICAgIC8vICAgICAgIGNvbnN0IGV4aXN0aW5nQ29sdW1uSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5maWVsZCA9PT0gZmllbGQpO1xyXG4gICAgLy8gICAgICAgaWYgKGV4aXN0aW5nQ29sdW1uSW5kZXggIT09IC0xKSB7XHJcbiAgICAvLyAgICAgICAgIC8vIElmIHRoZSBjb2x1bW4gZXhpc3RzIGluIHNlbGVjdGVkQ29sdW1ucywgdXBkYXRlIGl0cyB3aWR0aFxyXG4gICAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1tleGlzdGluZ0NvbHVtbkluZGV4XS53aWR0aCA9IGNvbHVtbldpZHRoO1xyXG4gICAgLy8gICAgICAgICB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zLnB1c2godGhpcy5zZWxlY3RlZENvbHVtbnNbZXhpc3RpbmdDb2x1bW5JbmRleF0pO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH0pO1xyXG5cclxuICAgIC8vICAgICAvLyBVcGRhdGUgc2VsZWN0ZWRDb2x1bW5zIHdpdGggdGhlIHJlc3RvcmVkIGRhdGFcclxuICAgIC8vICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHVwZGF0ZWRTZWxlY3RlZENvbHVtbnM7XHJcblxyXG5cclxuICAgIC8vICAgICAgIGlmKHN0b3JlZFZhbHVlKXtcclxuXHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JlZFZhbHVlKTtcclxuICAgIC8vICAgICAgICAgaWYgKChkYXRhLm11bHRpU29ydE1ldGEgJiYgZGF0YS5tdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHx8IChkYXRhLmZpbHRlcnMgJiYgZGF0YS5tdWx0aVNvcnRNZXRhLmZpbHRlcnMgPiAwKSkge1xyXG4gICAgLy8gICAgICAgICAgIGlmIChkYXRhLm11bHRpU29ydE1ldGEgJiYgZGF0YS5tdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgICAgIGRhdGEubXVsdGlTb3J0TWV0YS5mb3JFYWNoKChtZXRhOiB7IGZpZWxkOiBhbnk7IG9yZGVyOiBhbnk7IH0pID0+IHsgXHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICBsZXQgc29ydCA9IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YS5maWVsZCxcclxuICAgIC8vICAgICAgICAgICAgICAgICBvcmRlcjogbWV0YS5vcmRlciA9PSAxID8gJ0FTQycgOiAnREVTQydcclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gW3NvcnRdO1xyXG4gICAgLy8gICAgICAgICAgICAgfSk7ICBcclxuICAgIC8vICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgaWYgKGRhdGEuZmlsdGVycykge1xyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPVtdO1xyXG4gICAgLy8gICAgICAgICAgICAgY29uc3QgZmlsdGVyc0FycmF5OiBbc3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfCBudWxsOyBtYXRjaE1vZGU6IHN0cmluZyxvcGVyYXRvciA6IHN0cmluZyB9W11dW10gPSBPYmplY3QuZW50cmllcyhkYXRhLmZpbHRlcnMpO1xyXG5cclxuICAgIC8vICAgICAgICAgICAgIGZpbHRlcnNBcnJheS5mb3JFYWNoKChbZmllbGROYW1lLCBmaWVsZFZhbHVlXSkgPT4ge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgZmllbGRWYWx1ZS5mb3JFYWNoKGZpbHRlciA9PlxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYoZmlsdGVyLnZhbHVlKXtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBzZWFyY2hGaWVsZCA6IFNlYXJjaEZpZWxkID17XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGZpZWxkIDpmaWVsZE5hbWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgOiBmaWx0ZXIudmFsdWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHZhbHVlOmZpbHRlci52YWx1ZSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZSA6IHRoaXMuaW5mZXJJbnB1dFR5cGUoZmllbGROYW1lKSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgOiB0aGlzLmdldE9wZXJhdG9yTnVtYmVyKGZpbHRlci5tYXRjaE1vZGUpXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NlYXJjaEZpZWxkJyxzZWFyY2hGaWVsZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hGaWVsZHMpIHtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZpZWxkcy5wdXNoKHNlYXJjaEZpZWxkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICB9XHJcblxyXG4gICAgLy8gICB9IGVsc2Uge1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiTm8gc2Vzc2lvbiBkYXRhIGZvdW5kIGluIGxvY2FsU3RvcmFnZVwiKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgb25DbGVhckZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmR0Py5jbGVhcigpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5mb3JtTmFtZX0tZmlsdGVyTW9kZWApXHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRvck51bWJlcihvcGVyYXRvcjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGVbb3BlcmF0b3IudG9VcHBlckNhc2UoKSBhcyBrZXlvZiB0eXBlb2YgRmlsdGVyT3BlcmF0b3JUeXBlXSA/PyAtMTtcclxuICB9XHJcbiAgaW5mZXJJbnB1dFR5cGUodmFsdWU6IGFueSk6IElucHV0VHlwZXMge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIElucHV0VHlwZXMuSU5URUdFUjtcclxuICAgICAgfSBlbHNlIGlmICgvXlxcZCtcXC5cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gSW5wdXRUeXBlcy5ERUNJTUFMX0lOUFVUO1xyXG4gICAgICB9IGVsc2UgaWYgKC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBJbnB1dFR5cGVzLkRBVEU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIElucHV0VHlwZXMuVEVYVF9CT1g7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBJbnB1dFR5cGVzLlRFWFRfQk9YO1xyXG4gICAgfVxyXG4gIH1cclxuICBsb2FkSW5pdGlhbFN0YXRlKCkge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZVsnZ2V0J10oJ3RhYmxlLXN0YXRlJyk7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9leHRyYWN0RmlsdGVycyhldmVudDogRmlsdGVyTWV0YWRhdGFbXSB8IGFueSk6IElGaWx0ZXJlZFJlcXVlc3RbXSB7XHJcbiAgICBsZXQgZmlsdGVyczogSUZpbHRlcmVkUmVxdWVzdFtdID0gW107XHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbFxyXG4gICAgICAmJlxyXG4gICAgICBldmVudCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgIGxldCBjdXJyZW5jeTogc3RyaW5nIHwgdW5kZWZpbmVkID0gY29sLmN1cnJlbmN5T3RoZXJDb2RlO1xyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PSB0aGlzLmRpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVkpIHtcclxuICAgICAgICAgIGN1cnJlbmN5ID0gdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2UuYXBwU2V0dGluZ3MuZGV2aXNlU29jaWV0ZS5jb2RlRGV2aXNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnQgIT0gbnVsbFxyXG4gICAgICAgICAgJiZcclxuICAgICAgICAgIGV2ZW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgbGV0IGZpbHRlciA9IGV2ZW50W2NvbC5maWVsZF07XHJcbiAgICAgICAgICBpZiAodGhpcy5fbm90TnVsbE9yVW5kZWZpbmVkKGZpbHRlcikpIHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ub3ROdWxsT3JVbmRlZmluZWQoaXRlbS52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGl0ZW0udmFsdWUsICd5eXl5LU1NLWRkJyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogRmlsdGVySGVscGVyLlRvT3BlcmF0b3JUeXBlKGl0ZW0ubWF0Y2hNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICwgZmlsdGVyVmFsdWU6IGl0ZW0udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAsIHByb3ByZXR5TmFtZTogY29sLmZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgLCBoZWFkZXI6IGNvbC5oZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICAsIHR5cGU6IEZpbHRlckhlbHBlci5Ub0lucHV0VHlwZShjb2wudHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAsIGN1cnJlbmN5OiBjdXJyZW5jeVxyXG4gICAgICAgICAgICAgICAgICAgICwgbnVtT2ZEZWNpbWFsOiBjb2wubnVtT2ZEZWNpbWFsXHJcbiAgICAgICAgICAgICAgICAgICAgLCBpc0ZyYWN0aW9uOiBjb2wuaXNGcmFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICwgY29tYm9ib3hMYWJlbDogY29sLmNvbWJvTGFiZWxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLnZhbHVlLCAneXl5eS1NTS1kZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IEZpbHRlckhlbHBlci5Ub09wZXJhdG9yVHlwZShmaWx0ZXIubWF0Y2hNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAsIGZpbHRlclZhbHVlOiBmaWx0ZXIudmFsdWVcclxuICAgICAgICAgICAgICAgICAgLCBwcm9wcmV0eU5hbWU6IGNvbC5maWVsZFxyXG4gICAgICAgICAgICAgICAgICAsIGhlYWRlcjogY29sLmhlYWRlclxyXG4gICAgICAgICAgICAgICAgICAsIHR5cGU6IEZpbHRlckhlbHBlci5Ub0lucHV0VHlwZShjb2wudHlwZSlcclxuICAgICAgICAgICAgICAgICAgLCBjdXJyZW5jeTogY3VycmVuY3lcclxuICAgICAgICAgICAgICAgICAgLCBudW1PZkRlY2ltYWw6IGNvbC5udW1PZkRlY2ltYWxcclxuICAgICAgICAgICAgICAgICAgLCBpc0ZyYWN0aW9uOiBjb2wuaXNGcmFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAsIGNvbWJvYm94TGFiZWw6IGNvbC5jb21ib0xhYmVsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0U29ydENyaXRlcmlhcyhsYXp5TG9hZEV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpOiB2b2lkIHtcclxuICAgIGxldCBzb3J0TWV0YSA9IHRoaXMuX3RvU29ydE1ldGEobGF6eUxvYWRFdmVudCk7XHJcbiAgICBpZiAoc29ydE1ldGEpIHtcclxuICAgICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5TaW5nbGUpIHtcclxuICAgICAgICB0aGlzLl9leHRyYWN0U2luZ2xlU29ydENyaXRlcmlhKHNvcnRNZXRhKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuX2V4dHJhY3RNdWx0aXBsZVNvcnRDcml0ZXJpYXMoc29ydE1ldGEpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RTaW5nbGVTb3J0Q3JpdGVyaWEoc29yTWV0YTogU29ydE1ldGEpIHtcclxuICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuU2luZ2xlKSB7XHJcbiAgICAgIGlmIChzb3JNZXRhLmZpZWxkKSB7XHJcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBzb3J0IGVsZW1lbnRcclxuICAgICAgICBsZXQgc29ydDogSVNvcnRCeVByb3ByZXR5ID0ge1xyXG4gICAgICAgICAgcHJvcGVydHk6IHNvck1ldGEuZmllbGQsXHJcbiAgICAgICAgICBvcmRlcjogc29yTWV0YS5vcmRlciA9PSAxID8gJ0FTQycgOiAnREVTQydcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc29ydCA9IFtzb3J0XVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHByb2Nlc3MgXFwnU2luZ2xlU29ydFxcJyB3aGVuIFtzb3J0TW9kZV0gaXMgXFwnbXVsdGlwbGVcXCcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RNdWx0aXBsZVNvcnRDcml0ZXJpYXMoc29ydE1ldGFzOiBTb3J0TWV0YVtdKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gR3JpZFNvcnRNb2RlLk11bHRpcGxlKSB7XHJcbiAgICAgIGlmIChzb3J0TWV0YXMgJiYgQXJyYXkuaXNBcnJheShzb3J0TWV0YXMpKSB7XHJcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBzb3J0IGVsZW1lbnRcclxuICAgICAgICB0aGlzLl9zb3J0ID0gW107XHJcbiAgICAgICAgdGhpcy5zb3J0TWV0YXMgPSBzb3J0TWV0YXM7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnbWV0YSAnLCBzb3J0TWV0YXMpXHJcbiAgICAgICAgc29ydE1ldGFzLmZvckVhY2goc20gPT4ge1xyXG4gICAgICAgICAgaWYgKHNtLmZpZWxkKSB7XHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc29ydCBlbGVtZW50XHJcbiAgICAgICAgICAgIGxldCBzb3J0OiBJU29ydEJ5UHJvcHJldHkgPSB7XHJcbiAgICAgICAgICAgICAgcHJvcGVydHk6IHNtLmZpZWxkLFxyXG4gICAgICAgICAgICAgIG9yZGVyOiBzbS5vcmRlciA9PSAxID8gJ0FTQycgOiAnREVTQydcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9hZGQgdGhlIG5ldyBlbGVtZW50IHRvIF9zb3J0XHJcbiAgICAgICAgICAgIHRoaXMuX3NvcnQucHVzaChzb3J0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBwcm9jZXNzIFxcJ011bHRpcGxlU29ydFxcJyB3aGVuIFtzb3J0TW9kZV0gaXMgXFwnc2luZ2xlXFwnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9ub3ROdWxsT3JVbmRlZmluZWQob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChvYmogIT0gbnVsbFxyXG4gICAgICAmJiBvYmogIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdE9ubHlWaXNpYmxlU2VhcmNoRmllbGRzKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblNldHRpbmdzXHJcbiAgICAgICYmIHRoaXMucHJlc2VudGF0aW9uU2V0dGluZ3MucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID4gMFxyXG4gICAgICAmJiB0aGlzLnRlbXBTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPSB0aGlzLnRlbXBTZWFyY2hGaWVsZHMuZmlsdGVyKHNmID0+IHRoaXMucHJlc2VudGF0aW9uU2V0dGluZ3M/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzXHJcbiAgICAgICAgLnNvbWUocCA9PiBwLmJsb2NrTmFtZSA9PSBzZi5maWVsZCAmJiAocC5pc0Jsb2NrVmlzaWJsZSA9PSB0cnVlIHx8IHAuaXNCbG9ja1Zpc2libGUgPT0gdW5kZWZpbmVkKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFNlYXJjaEJveEZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZWFyY2hCb3hGaWx0ZXJzID0gW107XHJcbiAgICBpZiAodGhpcy5zZWFyY2hGaWVsZHMpIHtcclxuXHJcbiAgICAgIHRoaXMuX2V4dHJhY3RPbmx5VmlzaWJsZVNlYXJjaEZpZWxkcygpO1xyXG5cclxuICAgICAgdGhpcy5zZWFyY2hGaWVsZHMuZm9yRWFjaCgoc2Y6IFNlYXJjaEZpZWxkKSA9PiB7XHJcbiAgICAgICAgLy9pZiAoc2YudmFsdWUgIT0gdW5kZWZpbmVkICYmIHNmLnZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoc2Yub3BlcmF0b3IgIT0gbnVsbCAmJiBzZi5vcGVyYXRvciAhPSB1bmRlZmluZWQgJiYgc2YudmFsdWUgIT0gdW5kZWZpbmVkICYmIHNmLnZhbHVlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyQnlQcm9wZXJ0eTogSUZpbHRlcmVkUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgb3BlcmF0b3I6IHNmLm9wZXJhdG9yXHJcbiAgICAgICAgICAgICwgZmlsdGVyVmFsdWU6IHNmLnZhbHVlXHJcbiAgICAgICAgICAgICwgcHJvcHJldHlOYW1lOiBzZi5maWVsZFxyXG4gICAgICAgICAgICAsIGhlYWRlcjogc2YubGFiZWxWYWx1ZVxyXG4gICAgICAgICAgICAsIHR5cGU6IHNmLnR5cGVcclxuICAgICAgICAgICAgLCBjb21ib2JveExhYmVsOiBzZi5jb21ib2JveExhYmVsXHJcbiAgICAgICAgICAgICwgY3VycmVuY3k6IHNmLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICwgaXNGcmFjdGlvbjogc2YuaXNGcmFjdGlvblxyXG4gICAgICAgICAgICAsIG51bU9mRGVjaW1hbDogc2YubnVtT2ZEZWNpbWFsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoQm94RmlsdGVycy5wdXNoKGZpbHRlckJ5UHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzZi5vcGVyYXRvciA9PSB1bmRlZmluZWQgfHwgc2Yub3BlcmF0b3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aGUgc2VhcmNoIGZpZWxkIHdpdGggW2ZpZWxkIDogJHtzZi5maWVsZH1dIGhhdmUgbm8gb3BlcmF0b3JzYClcclxuICAgICAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvbmVQYWdlZFJlcXVlc3QocmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgbGV0IGNsb25lOiBJUGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogcmVxdWVzdC5tYXhSZXN1bHRDb3VudCxcclxuICAgICAgc2tpcENvdW50OiByZXF1ZXN0LnNraXBDb3VudCxcclxuICAgICAgc29ydGluZzogcmVxdWVzdC5zb3J0aW5nLFxyXG4gICAgICBrZXl3b3JkOiByZXF1ZXN0LmtleXdvcmQsXHJcbiAgICAgIGZpbHRlcnM6IHJlcXVlc3QuZmlsdGVycyxcclxuICAgICAgZ2V0QWxsRGF0YTogcmVxdWVzdC5nZXRBbGxEYXRhLFxyXG4gICAgICBzdW1tYXJpZXM6IHJlcXVlc3Quc3VtbWFyaWVzXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdEhhdmVTdW1tYXJ5UHJvcGVydGllcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgIGxldCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBsZXQgaGF2ZVN1bW1hcnlDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMuaGF2ZVN1bW1hcnkgPT09IHRydWUpO1xyXG4gICAgaWYgKGhhdmVTdW1tYXJ5Q29sdW1ucyAmJiBoYXZlU3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwcm9wZXJ0aWVzID0gaGF2ZVN1bW1hcnlDb2x1bW5zLm1hcChjID0+IGMuZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFN1bW1hcmllcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBhZ2Uuc3VtbWFyaWVzKSB7XHJcbiAgICAgIHRoaXMucGFnZS5zdW1tYXJpZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICB0aGlzLnN1bW1hcmllc1tzLnByb3ByZXR5XSA9IHMuc3VtbWFyeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0TXVsdGlTb3J0TWV0YUl0ZW1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc29ydCA9IFtdO1xyXG4gICAgaWYgKHRoaXMuc29ydE1ldGFzKSB7XHJcbiAgICAgIHRoaXMuc29ydE1ldGFzLmZvckVhY2goKHM6IFNvcnRNZXRhKSA9PiB7XHJcbiAgICAgICAgbGV0IHNvcnQ6IElTb3J0QnlQcm9wcmV0eSA9IHtcclxuICAgICAgICAgIHByb3BlcnR5OiBzLmZpZWxkLFxyXG4gICAgICAgICAgb3JkZXI6IHMub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc29ydEl0ZW0gPSB0aGlzLl9zb3J0LmZpbmQocyA9PiBzLnByb3BlcnR5ID09IHNvcnQucHJvcGVydHkpO1xyXG5cclxuICAgICAgICBpZiAoc29ydEl0ZW0pIHtcclxuICAgICAgICAgIGlmIChzb3J0SXRlbS5vcmRlciAhPSBzb3J0Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgIHNvcnRJdGVtLm9yZGVyID0gc29ydC5vcmRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zb3J0LnB1c2goc29ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RvU29ydE1ldGEodGFibGVMYXp5TG9hZEV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5TaW5nbGUpIHtcclxuICAgICAgaWYgKHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0RmllbGQgJiYgdGFibGVMYXp5TG9hZEV2ZW50LnNvcnRPcmRlcikge1xyXG4gICAgICAgIGxldCBzb3J0TWV0YTogSVNvcnRNZXRhID0ge1xyXG4gICAgICAgICAgZmllbGQ6IHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0RmllbGQsXHJcbiAgICAgICAgICBvcmRlcjogdGFibGVMYXp5TG9hZEV2ZW50LnNvcnRPcmRlclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc29ydE1ldGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICBpZiAodGFibGVMYXp5TG9hZEV2ZW50Lm11bHRpU29ydE1ldGEpIHtcclxuICAgICAgICByZXR1cm4gdGFibGVMYXp5TG9hZEV2ZW50Lm11bHRpU29ydE1ldGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFtzb3J0TW9kZV0gaGF2ZSBiZWVuIHNldCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVGaWx0ZXJzSHRtbFRlbXBsYXRlKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSA9IFwiXCJcclxuICAgIC8vZXhjbHVkZSB1c2VsZXNzIEdyaWQgZmlsdGVyIFxyXG4gICAgdGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPSB0aGlzLl9leGNsdWRlVXNlbGVzc0dyaWRGaWx0ZXIodGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMpXHJcblxyXG4gICAgLy9hZGQgc2VhcmNoIEJveCBmaWx0ZXJzIGh0bWxcclxuICAgIGlmICh0aGlzLl9zZWFyY2hCb3hGaWx0ZXJzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSA9IHRoaXMuX2h0bWxUZW1wbGF0ZUdlbmVyYXRvclNlcnZpY2VcclxuICAgICAgICAuZ2VuZXJhdGVHcmlkRmlsdGVyc1RlbXBsYXRlKHRoaXMuX3NlYXJjaEJveEZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPT0+IFwiLCB0aGlzLl9ncmlkSGVhZGVyRmlsdGVycylcclxuXHJcbiAgICAvL2FkZCBncmlkIGhlYWRlciBmaWx0ZXJzIGh0bWxcclxuICAgIGlmICh0aGlzLl9ncmlkSGVhZGVyRmlsdGVycykge1xyXG4gICAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUgKz0gdGhpcy5faHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZVxyXG4gICAgICAgIC5nZW5lcmF0ZUdyaWRGaWx0ZXJzVGVtcGxhdGUodGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGVDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4Y2x1ZGVVc2VsZXNzR3JpZEZpbHRlcihmaWx0ZXJzOiBJRmlsdGVyZWRSZXF1ZXN0W10pIHtcclxuICAgIHJldHVybiBmaWx0ZXJzLmZpbHRlcih4ID0+XHJcbiAgICAgIHguZmlsdGVyVmFsdWUgIT09IG51bGwgJiYgeC5maWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHguZmlsdGVyVmFsdWUgIT09IFwiXCIgJiYgeC5vcGVyYXRvciAhPT0gdW5kZWZpbmVkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhjbHVkZVVzZWxlc3NGaWx0ZXJzKHBhZ2VkUmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgaWYgKHBhZ2VkUmVxdWVzdCAmJiBwYWdlZFJlcXVlc3QuZmlsdGVycykge1xyXG4gICAgICBwYWdlZFJlcXVlc3QuZmlsdGVycyA9IHBhZ2VkUmVxdWVzdC5maWx0ZXJzLmZpbHRlcihmID0+IGYuZmlsdGVyVmFsdWUgIT0gdW5kZWZpbmVkICYmIGYuZmlsdGVyVmFsdWUgIT0gbnVsbClcclxuICAgIH1cclxuICAgIHJldHVybiBwYWdlZFJlcXVlc3Q7XHJcbiAgfVxyXG5cclxuICBleHBvcnRFeGNlbCgpIHtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ISEuZ2V0QWxsRGF0YSA9IHRydWVcclxuICAgIGlmICh0aGlzLmNydWRTZXJ2aWNlICE9IG51bGwgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5pc0dyaWREYXRhUGFnZWRJbkFwaSkge1xyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEFsbFBhZ2VkKHRoaXMucGFnZWRSZXF1ZXN0ISEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBJUGFnZWRSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEl0ZW1zID0gRXhwb3J0RXhjZWxIZWxwZXIucHJlcHJvY2Vzc0RhdGVGb3JFeGNlbCh2YWx1ZS5pdGVtcyk7XHJcbiAgICAgICAgICAgIHZhbHVlLml0ZW1zID0gZm9ybWF0dGVkSXRlbXM7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YUZyb21BcGlUb0V4Y2VsU2hlZXQodmFsdWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZmlsdGVyZWREYXRhID0gdGhpcy5wYWdlLml0ZW1zLmZpbHRlcigoY29sOiBhbnkpID0+ICFjb2wuaXNCdXR0b24pO1xyXG4gICAgICBmaWx0ZXJlZERhdGEgPSBFeHBvcnRFeGNlbEhlbHBlci5wcmVwcm9jZXNzRGF0ZUZvckV4Y2VsKGZpbHRlcmVkRGF0YSk7XHJcbiAgICAgIHRoaXMucGFnZS5pdGVtcyA9IGZpbHRlcmVkRGF0YVxyXG4gICAgICB0aGlzLmV4cG9ydERhdGFGcm9tQXBpVG9FeGNlbFNoZWV0KHRoaXMucGFnZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydERhdGFGcm9tQXBpVG9FeGNlbFNoZWV0KHZhbHVlOiBhbnkpIHtcclxuICAgIGltcG9ydChcInhsc3hcIikudGhlbih4bHN4ID0+IHtcclxuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB4bHN4LnV0aWxzLmJvb2tfbmV3KCk7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCEuZmlsdGVycz8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICBjb25zdCBtYXBwZWRGaWx0ZXJzID0gdGhpcy5wYWdlZFJlcXVlc3QhLmZpbHRlcnM/Lm1hcChmaWx0ZXIgPT4gKHtcclxuICAgICAgICAgIHByb3BlcnR5OiBmaWx0ZXIucHJvcHJldHlOYW1lLFxyXG4gICAgICAgICAgb3BlcmF0b3JOYW1lOiB0aGlzLmdldEZpbHRlck9wZXJhdG9yTmFtZShmaWx0ZXIub3BlcmF0b3IpLFxyXG4gICAgICAgICAgdmFsdWU6IGZpbHRlci5maWx0ZXJWYWx1ZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0geGxzeC51dGlscy5qc29uX3RvX3NoZWV0KDxhbnlbXT5tYXBwZWRGaWx0ZXJzKVxyXG4gICAgICAgIHhsc3gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIGZpbHRlcnMsICdGaWx0ZXJzJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBzZWxlY3RlZENvbHVtbnNGaWVsZHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoeCA9PiAheC5pc0J1dHRvbikubWFwKGNvbHVtbiA9PiBjb2x1bW4udHJhbnNsYXRlZEhlYWRlciEhKVxyXG4gICAgICBzZWxlY3RlZENvbHVtbnNGaWVsZHMgPSBzZWxlY3RlZENvbHVtbnNGaWVsZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gJycpXHJcbiAgICAgIGNvbnN0IHdvcmtzaGVldERhdGEgPSB2YWx1ZS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvd0RhdGE6IHsgW2hlYWRlcjogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgcm93RGF0YVtjb2wudHJhbnNsYXRlZEhlYWRlciEhXSA9IGl0ZW1bY29sLmZpZWxkXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcm93RGF0YTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkV29ya3NoZWV0RGF0YSA9IHRoaXMucmVtb3ZlTm9uRXhpc3RpbmdDb2x1bW5zKHdvcmtzaGVldERhdGEsIHNlbGVjdGVkQ29sdW1uc0ZpZWxkcylcclxuICAgICAgY29uc3Qgd29ya3NoZWV0ID0geGxzeC51dGlscy5qc29uX3RvX3NoZWV0KGZpbHRlcmVkV29ya3NoZWV0RGF0YSk7XHJcbiAgICAgIHhsc3gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIHdvcmtzaGVldCwgJ0RhdGEnKTtcclxuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHsgYm9va1R5cGU6ICd4bHN4JywgdHlwZTogJ2FycmF5JyB9KTtcclxuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIFwiZXhjZWxcIik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XHJcbiAgICBsZXQgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcclxuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICB0eXBlOiBFWENFTF9UWVBFXHJcbiAgICB9KTtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyAnX2V4cG9ydF8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBFWENFTF9FWFRFTlNJT04pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyT3BlcmF0b3JOYW1lKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvclR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZS5FUVVBTDogcmV0dXJuICdFUVVBTCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlLkxFU1NPUkVRVUFMOiByZXR1cm4gJ0xFU1MgT1IgRVFVQUwnO1xyXG4gICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZS5HUkVBVEVST1JFUVVBTDogcmV0dXJuICdHUkVBVEVSIE9SIEVRVUFMJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuTEVTUzogcmV0dXJuICdMRVNTJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuR1JFQVRFUjogcmV0dXJuICdHUkVBVEVSJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuTk9URVFVQUw6IHJldHVybiAnTk9UIEVRVUFMJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuQ09OVEFJTlM6IHJldHVybiAnQ09OVEFJTlMnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ1VOS05PV05fT1BFUkFUT1InO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTm9uRXhpc3RpbmdDb2x1bW5zKHdvcmtzaGVldERhdGE6IGFueVtdLCBzZWxlY3RlZENvbHVtbnNGaWVsZHM6IHN0cmluZ1tdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHdvcmtzaGVldERhdGEubWFwKHJvdyA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1JvdzogYW55ID0ge307XHJcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHNlbGVjdGVkQ29sdW1uc0ZpZWxkcykge1xyXG4gICAgICAgIGlmIChyb3cuaGFzT3duUHJvcGVydHkoY29sKSkge1xyXG4gICAgICAgICAgbmV3Um93W2NvbF0gPSByb3dbY29sXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld1JvdztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSGVhZGVyRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJzaG93X2ZpbHRlclwiO1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYClcclxuICAgIH1cclxuICAgIGVsc2UgeyAvL3RoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IGZhbHNlXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlci1zbGFzaFwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcImhpZGVfZmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVIZWFkZXJGaWx0ZXJzTW9kZSgpIHtcclxuICAgIGlmICh0aGlzLmR0KSB7XHJcbiAgICAgIHRoaXMuZHQuY2xlYXIoKVxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYCwgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcClcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPT09IFwibWVudV9tb2RlXCIpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZUhlYWRlckZpbHRlcnNNb2RlID0gXCJtZW51XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktY2hlY2tcIjtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVUb29sdGlwID0gXCJyb3dfbW9kZVwiO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5kdC5maWx0ZXJzW2NvbC5maWVsZF0gPSBbeyB2YWx1ZTogbnVsbCwgbWF0Y2hNb2RlOiB1bmRlZmluZWQgfV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHQuX2ZpbHRlcigpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwicm93XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktZWxsaXBzaXMtdlwiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBcIm1lbnVfbW9kZVwiO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5kdC5maWx0ZXJzW2NvbC5maWVsZF0gPSB7IHZhbHVlOiBudWxsLCBtYXRjaE1vZGU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmR0Ll9maWx0ZXIoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJDbGFzc0NvbG9yKGNvbHVtblR5cGU6IERpc3BsYXlUeXBlcyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29sb3JmdWwgPSB0aGlzLmxheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc0NvbG9yZnVsTW9kZUVuYWJsZWQ7XHJcbiAgICBpZiAoY29sb3JmdWwgPT09IHRydWUpIHtcclxuICAgICAgbGV0IGNvbG9yRm9ySW50ZWdlckRpc3BsYXkgPSBEaXNwbGF5VHlwZUNvbG9yc1tjb2x1bW5UeXBlXSB8fCAnd2hpdGUtZ3JpZCc7XHJcbiAgICAgIHJldHVybiBjb2xvckZvckludGVnZXJEaXNwbGF5O1xyXG4gICAgfSBlbHNlIHJldHVybiAnd2hpdGUtZ3JpZCdcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcmZ1bCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc0NvbG9yZnVsTW9kZUVuYWJsZWQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGluaXRpYWxDb2x1bW5zUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRldmlzZVNvY2lldGVOdW1PZkRlY2ltYWw6IG51bWJlciA9IHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLmFwcFNldHRpbmdzLmRldmlzZVNvY2lldGUubm9tYnJlRGVjaW1hbGVzID8/IERlZmF1bHRTb2NpZXRlRGV2aXNlLm5vbWJyZURlY2ltYWxlcztcclxuXHJcbiAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAvLyBzZXQgaXNOdW1lcmljXHJcbiAgICAgIGNvbC5pc051bWVyaWMgPSBjb2wudHlwZSAhPSB1bmRlZmluZWQgJiYgY29sLnR5cGUgIT0gbnVsbCAmJiAoTnVtZXJpY0Rpc3BsYXlUeXBlcy5pbmRleE9mKGNvbC50eXBlKSA+PSAwKTtcclxuXHJcbiAgICAgIC8vIHNldCBmaWx0ZXJJbnB1dFR5cGVcclxuICAgICAgc3dpdGNoIChjb2wudHlwZSkge1xyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRBVEVfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuREFURVRJTUVfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk6XHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZOlxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTpcclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZOlxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdudW1lcmljJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICd0ZXh0JztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNldCBudW1PZkRlY2ltYWxcclxuICAgICAgaWYgKGNvbC5udW1PZkRlY2ltYWwpIHJldHVybjtcclxuXHJcbiAgICAgIGlmICghY29sLnR5cGUpIHtcclxuICAgICAgICBjb2wubnVtT2ZEZWNpbWFsID0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY29sLmlzTnVtZXJpYykge1xyXG4gICAgICAgIGNvbC5udW1PZkRlY2ltYWwgPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC50eXBlID09PSBEaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZKSB7XHJcbiAgICAgICAgY29sLm51bU9mRGVjaW1hbCA9IGRldmlzZVNvY2lldGVOdW1PZkRlY2ltYWw7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC50eXBlID09PSBEaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZKSB7XHJcbiAgICAgICAgY29sLm51bU9mRGVjaW1hbCA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soaXRlbTogYW55KSB7XHJcbiAgICBpZiAoaXRlbS5tb2RlID09PSBcIlNFQVJDSFwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5jYWxlbmRhckV2ZW50Q2xpY2suZW1pdChpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZURhdGVSYW5nZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBsZXQgc3RhcnQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LnN0YXJ0KVxyXG4gICAgbGV0IGVuZCA9IHRoaXMuc2VhcmNoRmllbGRzPy5maW5kKHggPT4geC5maWVsZCA9PT0gdGhpcy5jYWxlbmRlclNjaGVtYT8uZW5kKVxyXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICBzdGFydC52YWx1ZSA9IGV2ZW50LnN0YXJ0O1xyXG4gICAgICBlbmQudmFsdWUgPSBldmVudC5lbmQ7XHJcbiAgICAgIHN0YXJ0LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgZW5kLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGxTZWFyY2hIYW5kbGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5tYXhSZXN1bHRDb3VudCA9IGV2ZW50Lm1heFJlc3VsdENvdW50O1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5za2lwQ291bnQgPSBldmVudC5za2lwQ291bnQ7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICAgIHRoaXMucGFnZSQubmV4dCh7IC4uLnRoaXMucGFnZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEhlYWRlclRpdGxlcyh0aXRsZXM6IHN0cmluZ1tdLCBpdGVtOiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIXRpdGxlcyB8fCAhaXRlbSlcclxuICAgICAgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IGl0ZW0udWlkO1xyXG4gICAgaWYgKHRoaXMudGl0bGVDYWNoZS5oYXMoa2V5KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy50aXRsZUNhY2hlLmdldChrZXkpIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcyA9IHRpdGxlcy5tYXAodCA9PiBpdGVtW3RdKS5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgdGhpcy50aXRsZUNhY2hlLnNldChrZXksIHJlcyk7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgb25TdGF0dXNGaWx0ZXJDaGFuZ2VkKGV2dDogYW55KSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGV2dDtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHM/LmZpbHRlcihzZiA9PiBzZi5maWVsZCAhPT0gdGhpcy5lbnRpdHlJbmZvPy5zdGF0dXNDb2x1bW5OYW1lKTtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzPy5wdXNoKHtcclxuICAgICAgZmllbGQ6IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzQ29sdW1uTmFtZSA/PyBcIlwiLFxyXG4gICAgICB2YWx1ZTogZXZ0LFxyXG4gICAgICBsYWJlbFZhbHVlOiAnJyxcclxuICAgICAgdHlwZTogSW5wdXRUeXBlcy5DT01CT0JPWCxcclxuICAgICAgb3BlcmF0b3I6IDYsXHJcbiAgICAgIHN0eWxlQ2xhc3M6IFwiaGlkZGVuXCJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNldE1lc3NhZ2VQb3NpdGlvbihldmVudCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQsIGl0ZW06IGFueSkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIFxyXG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XHJcbiAgXHJcbiAgICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gIFxyXG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZSwgZmlsZUV4dGVuc2lvbixpdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGU6IEZpbGUsIGZpbGVFeHRlbnNpb246IGFueSxpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IFByb2dyZXNzRXZlbnQ8RmlsZVJlYWRlcj4pID0+IHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBlLnRhcmdldD8ucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xyXG4gICAgICBpZiAoIWFycmF5QnVmZmVyKSByZXR1cm47XHJcbiAgXHJcbiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoYXJyYXlCdWZmZXIpO1xyXG4gIFxyXG4gICAgICBjb25zdCBmaWNoaWVyVG9TZW5kID0gbmV3IEZpY2hpZXIoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5kYXRlRmljaGllciA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tID0gZmlsZS5uYW1lO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm9iamV0ID0gJyc7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tRmljaGllckNvbXBsZXQgPSBmaWxlLm5hbWU7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgZmljaGllclRvU2VuZC5jb250ZW51ID0gYmFzZTY0Q29udGVudDtcclxuICAgICAgZmljaGllclRvU2VuZC50YWJsZUxpZWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQucGtleSA9IGl0ZW0udWlkPy50b1N0cmluZygpO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb25cclxuICAgICAgdGhpcy5fZmljaGllclNlcnZpY2UuY3JlYXRlKGZpY2hpZXJUb1NlbmQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcImZpY2hpZXJfam9pbnRcIik7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIFxyXG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG4gIH1cclxuIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICB9XHJcbiAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxufVxyXG4gXHJcbm9uRHJhZ0VudGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIHRoaXMuZHJhZ0VudGVyQ291bnQrKztcclxuXHJcbiAgdGhpcy5pc0RyYWdPdmVyID0gdHJ1ZTtcclxuICB0aGlzLnNldE1lc3NhZ2VQb3NpdGlvbihldmVudCk7XHJcbn1cclxuXHJcbiAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRHJhZ092ZXIpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlUG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCArIDUwLFxyXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgKyAzMFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbm9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIHRoaXMuZHJhZ0VudGVyQ291bnQtLTtcclxuXHJcbiAgaWYgKHRoaXMuZHJhZ0VudGVyQ291bnQgPD0gMCkge1xyXG4gICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmRyYWdFbnRlckNvdW50ID0gMDtcclxuICB9XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBzZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gIHRoaXMubWVzc2FnZVBvc2l0aW9uID0ge1xyXG4gICAgeDogZXZlbnQuY2xpZW50WCArIDUwLFxyXG4gICAgeTogZXZlbnQuY2xpZW50WSArIDMwLFxyXG4gIH07XHJcbn1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuXHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiBbQHNsaWRlSW5PdXRdPVwic2hvd1NlYXJjaEZpZWxkID8gJ2luJyA6ICdvdXQnXCIgKm5nSWY9XCJzaG93R2xvYmFsU2VhcmNoXCI+XHJcbiAgICA8IS0tIFNlYXJjaEJveC8vIElmIGV4aXN0IC0tPlxyXG4gICAgPHRzaS1zZWFyY2gtYm94IFxyXG4gICAgICBbaXNSdGxNb2RlXT1cImlzUnRsTW9kZVwiIFxyXG4gICAgICBbKHNlYXJjaEZpZWxkcyldPVwic2VhcmNoRmllbGRzXCIgXHJcbiAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICBbZW50aXR5SW5mb109XCJlbnRpdHlJbmZvXCJcclxuICAgICAgW3N0YXR1c01ldGFkYXRhXT1cInN0YXR1c01ldGFkYXRhXCJcclxuICAgICAgKHNlYXJjaEZpZWxkc0NoYW5nZSk9XCJzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZXMoJGV2ZW50KVwiIFxyXG4gICAgICAoa2V5d29yZFZhbHVlQ2hhbmdlZCk9XCJrZXl3b3JkVmFsdWVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAoc2VhcmNoRmllbGRzQXBwbGllZCk9XCJzZWFyY2goJGV2ZW50KVwiXHJcbiAgICAgIChzdGF0dXNGaWx0ZXJDaGFuZ2VkKT1cIm9uU3RhdHVzRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgKGNvbWJvQm94TGFiZWxDaGFuZ2VkKT1cImNjb21ib0JveExhYmVsQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICA8L3RzaS1zZWFyY2gtYm94PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiX3Nob3dDYWxlbmRlclZpZXcgPT09IGZhbHNlICYmIF9zaG93Q2FyZFZpZXcgPT09IGZhbHNlICYmIF9zaG93S2FuYmFuVmlldyA9PT0gZmFsc2VcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgXHJcbiAgICA8cC10YWJsZSAjZHQgW2xhenldPVwiaXNHcmlkRGF0YVBhZ2VkSW5BcGlcIiBbbGF6eUxvYWRPbkluaXRdPVwic2VhcmNoT25Jbml0XCIgKG9uTGF6eUxvYWQpPVwibGF6eUxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIGRhdGFLZXk9XCJ7eyBrZXkgfX1cIiBbdG90YWxSZWNvcmRzXT1cInBhZ2UudG90YWxDb3VudFwiIFtsb2FkaW5nXT1cInBhZ2UubG9hZGluZ1wiIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIiBjb2x1bW5SZXNpemVNb2RlPVwiZXhwYW5kXCIgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCIgW3ZhbHVlXT1cInBhZ2UuaXRlbXNcIlxyXG4gICAgICBbcGFnaW5hdG9yXT1cInRydWVcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCIgc2Nyb2xsSGVpZ2h0PVwiNjAwcHhcIiBbKHJvd3MpXT1cInBhZ2UucGFnZVNpemVcIlxyXG4gICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImZpZWxkcygpXCIgW3RhYmxlU3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzUwcmVtJyB9XCJcclxuICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cInt7ICdTaG93aW5nJyB8IGxvY2FsaXplIH19IHt7Z2V0Rmlyc3RFbGVtZW50SW5kZXgoKX19IHt7XHJcbiAgICAgICAgJ3RvJyB8IGxvY2FsaXplXHJcbiAgICAgIH19IHtsYXN0fSB7eyAnb2YnIHwgbG9jYWxpemUgfX0gXHJcbiAgICAgIHt0b3RhbFJlY29yZHN9IHt7ICdlbnRyaWVzJyB8IGxvY2FsaXplIH19XCIgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMSwgMTAsIDI1LCA1MF1cIiBbc29ydE1vZGVdPVwic29ydE1vZGVcIlxyXG4gICAgICBbbXVsdGlTb3J0TWV0YV09XCJzb3J0TWV0YXNcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtZ3JpZGxpbmVzXCIgW3NlbGVjdEFsbF09XCJzZWxlY3RBbGxcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGlvblwiIChvblJvd1Vuc2VsZWN0KT1cIm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKVwiXHJcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiIChvblJvd1NlbGVjdCk9XCJvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKClcIj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPlxyXG4gICAgICAgICAgICB7eyBoZWFkZXIgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0ZpbHRlckJ1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImdyaWRfdG9nZ2xlX2hlYWRlcl9maWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1CdXR0b24gW2ljb25dPVwiZmlsdGVySWNvblwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFt0b29sdGlwVGV4dF09XCJmaWx0ZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgaG92ZXI6c2hhZG93LTYgcC1idXR0b24tcHJpbWFyeSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUhlYWRlckZpbHRlcnMoKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hlYWRlckZpbHRlcnNcIiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJncmlkX3RvZ2dsZV9oZWFkZXJfZmlsdGVyX21vZGVcIj5cclxuICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBbaWNvbl09XCJmaWx0ZXJNb2RlSWNvblwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiZmlsdGVyTW9kZVRvb2x0aXBcIiBbc3R5bGVDbGFzc109XCInbWwtMSBwLWJ1dHRvbi1wcmltYXJ5IHAtYnV0dG9uLWljb24tb25seSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUhlYWRlckZpbHRlcnNNb2RlKClcIj48L1RzaS1CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJncmlkX2NsZWFyX2ZpbHRlcl9idXR0b25cIj5cclxuICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBbdG9vbHRpcFRleHRdPVwiJ2ljb24tY2xlYXItZmlsdGVyJ1wiXHJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwibWwtMSBwLWVsZW1lbnQgaG92ZXI6c2hhZG93LTYgcC1idXR0b24tcHJpbWFyeSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJGaWx0ZXJzKClcIiBbaWNvblNyY109XCInYXNzZXRzL2xheW91dC9pbWFnZXMvaWNvbi9pY29uLWNsZWFyLWZpbHRlci5zdmcnXCI+XHJcbiAgICAgICAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RXhwb3J0QnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiZ3JpZF9leHBvcnRfYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInAtYnV0dG9uLWljb24gcGkgcGktZmlsZS1leGNlbFwiIChvbkNsaWNrKT1cImV4cG9ydEV4Y2VsKClcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1zdWNjZXNzIGhvdmVyOnNoYWRvdy02IG1sLTIgcC0xIHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiB0b29sdGlwVGV4dD1cIlhMU1wiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBjbGFzcz1cIm1sLTFcIiBbb3B0aW9uc109XCJjb2x1bW5zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbHVtbnNcIiBvcHRpb25MYWJlbD1cInRyYW5zbGF0ZWRIZWFkZXJcIlxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXNMYWJlbD1cInswfSB7eyAnY29sdW1uc19zZWxlY3RlZCcgfCBsb2NhbGl6ZSB9fVwiIFtzdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAnMTgwcHgnIH1cIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2Nob29zZV9jb2x1bW5zJyB8IGxvY2FsaXplIH19XCIgKG9uQ2hhbmdlKT1cIm9uU2VsZWN0ZWRDb2x1bW5zQ2hhbmdlKClcIj5cclxuICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSA8ZGl2PiAtLT5cclxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cInNob3dHbG9iYWxTZWFyY2hcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS1zZWFyY2hcIiAoY2xpY2spPVwic2VhcmNoKClcIj48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gZ2V0Q2hlY2tib3hTdHlsZSgpIDoge31cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnei1pbmRleC1jaGVja2JveCdcIiAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogLjNyZW0gIWltcG9ydGFudDsgd2lkdGg6IDNyZW07XCI+XHJcbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAjdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8IS0tIDx0aCBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPiAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIFtzdHlsZV09XCJjb2wuc3R5bGVcIiBwVG9vbHRpcD1cInt7IGNvbC50b29sVGlwVGV4dCB8IGxvY2FsaXplIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cIighY29sLmlzQnV0dG9uKSA/IGNvbC5maWVsZCA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIFtwUmVzaXphYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLmlzQnV0dG9uIHx8IGNvbC50eXBlID09PSBkaXNwbGF5VHlwZXMuSU1BR0VfRElTUExBWVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJjb2wuaXNCdXR0b25cIiBbcFJlb3JkZXJhYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLmlzQnV0dG9uXCIgcFJlb3JkZXJhYmxlQ29sdW1uXHJcbiAgICAgICAgICAgICAgcFJlc2l6YWJsZUNvbHVtbiBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wuaGVhZGVyQ29sdW1uU3R5bGUgOiB7fVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNvbHVtbl09XCJjb2wuaXNCdXR0b25cIiBcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICAgICAgICBnZXRIZWFkZXJDbGFzc0NvbG9yKGNvbC50eXBlKSxcclxuICAgICAgICAgICAgICAgIHBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnLFxyXG4gICAgICAgICAgICAgICAgKGNvbC5pc0J1dHRvbiApID8gJ3ctMXJlbScgOiAnJyxcclxuICAgICAgICAgICAgICAgIChjb2wuaXNCdXR0b24gfHwgY29sLnR5cGUgPT09IGRpc3BsYXlUeXBlcy5JTUFHRV9ESVNQTEFZKSA/ICdub24tcmVzaXphYmxlLWNvbHVtbicgOiAnJ1xyXG4gICAgICAgICAgICAgICAgXVwiXHJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gY29sLmhlYWRlckNvbHVtblN0eWxlIDoge31cIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInAtMCBtLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNvbCBwLTAgbS0wXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3ctMXJlbSc6IGNvbC5pc0J1dHRvbn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RJblNwZWNpZmllZENvbHVtbihjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjb2wtZml4ZWQgcC0wIG0tMFwiIHN0eWxlPVwid2lkdGg6IDFyZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIGNsYXNzPVwidy0xcmVtIG0tMCBwLTBcIiAqbmdJZj1cIm5vdEluU3BlY2lmaWVkQ29sdW1uKGNvbC5maWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZD1cInt7IGNvbC5maWVsZCB9fVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8dHIgKm5nSWY9XCJzaG93SGVhZGVyRmlsdGVyc1wiPlxyXG4gICAgICAgICAgPCEtLSA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPiAtLT5cclxuICAgICAgICAgIDx0aCBbbmdDbGFzc109XCJwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnJ1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbVwiPjwvdGg+XHJcbiAgICAgICAgICA8dGggc3R5bGU9XCJvdmVyZmxvdzogaW5oZXJpdFwiIHNjb3BlPVwiY29sXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBbdHlwZV09XCJjb2wuZmlsdGVySW5wdXRUeXBlXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFtkaXNwbGF5XT1cImNoYW5nZUhlYWRlckZpbHRlcnNNb2RlXCJcclxuICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29sLm51bU9mRGVjaW1hbFwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCJjb2wubnVtT2ZEZWNpbWFsXCIgW3Nob3dCdXR0b25zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBbbWF0Y2hNb2RlXT1cImZpbHRlck1hdGNoTW9kZS5FUVVBTFNcIj5cclxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuXHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XHJcblxyXG4gICAgICAgIDwhLS0gQ0FTRSA6IG11bHRpcGxlIHNlbGVjdGlvbiAtLT5cclxuICAgICAgICA8dHIgW25nU3R5bGVdPVwiaXRlbS5jb2xvciAmJiBpdGVtLmNvbG9yICE9PSAnJyA/IHsnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0uY29sb3J9IDoge31cIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlID09IG11bHRpcGxlR3JpZFNlbGVjdGlvbk1vZGU7XHJcbiAgICAgICAgICAgIGVsc2Ugbm90TXVsdGlwbGVTZWxlY3Rpb25Nb2RlQmxvY2tcIiAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCIgKGRyb3ApPVwib25Ecm9wKCRldmVudCxpdGVtKVwiIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8dGQgW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gZ2V0Q2hlY2tib3hTdHlsZSgpIDoge31cIiBzdHlsZT1cInBhZGRpbmc6IC4zcmVtICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8IS0tIDx0ZCBjbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0KGl0ZW0pXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCIgKGNsaWNrKT1cImRlbGV0ZShpdGVtKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD4gLS0+XHJcbiAgICAgICAgICA8dGQgW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gY29sLm5nU3R5bGUgOiB7fVwiIFtuZ0NsYXNzXT1cInBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IG1pbi1jb250ZW50OyBtYXJnaW4tbGVmdDogLS41cmVtO1wiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0IC0tPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgIGVsc2UgY3VycmVuY3lPdGhlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktT3RoZXItSW5wdXQgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY3VycmVuY3lPdGhlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX09USEVSX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGF0ZVBpY2tlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheSBbY3VycmVuY3ldPVwiY29sLmN1cnJlbmN5Q29kZVwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRBVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkYXRlVGltZVBpY2tlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1EYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGVUaW1lUGlja2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5EQVRFVElNRV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBjaGVja0JveE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1EYXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIiBbc2hvd1RpbWVdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktQ2hlY2tCb3ggLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tCb3hPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGRlY2ltYWxPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUNoZWNrYm94LURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrYm94LURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1EZWNpbWFsLUlucHV0IC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlY2ltYWxPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaW50ZWdlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1EaXNwbGF5IFtmb3JtYXREZWNpbWFsXT1cImNvbC5mb3JtYXREZWNpbWFsXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW50ZWdlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSByYXRlT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUludGVnZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLVJhdGUtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF0ZU91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLlJBVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkaXNwbGF5TmVzdGVkUHJvcE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5IFtpc0ZyYWN0aW9uXT1cImNvbC5pc0ZyYWN0aW9uXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVJhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gZGlzcGxheS1uZXN0ZWQtcHJvcCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5TmVzdGVkUHJvcE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLk5FU1RFRF9QUk9QX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGlzcGxheVN0YXR1c0NvbG9yQmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1EaXNwbGF5LU5lc3RlZC1Qcm9wIFtzb3VyY2VVcmxdPVwiY29sLmRpc3BsYXlOZXN0ZWRQcm9wZXJ0eVNvdXJjZVVybFwiIFtpZF09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzcGxheVZhbHVlXT1cImNvbC5kaXNwbGF5TmVzdGVkUHJvcGVydHlsYWJlbEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1EaXNwbGF5LU5lc3RlZC1Qcm9wPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5U3RhdHVzQ29sb3JCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzU3RhdHVzQ29sb3I7IGVsc2UgZGlzcGxheVN0YXR1c1ZhbHVlQ29sdW1uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSByb3VuZGVkIHRleHQtd2hpdGUgdGV4dC1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtW2NvbC5maWVsZF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNWYWx1ZUNvbHVtbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2x1bW5WYWx1ZTsgZWxzZSBkaXNwbGF5U3RhdHVzQ29sdW1uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPHAtdGFnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0YXR1c0NvbG9yKGl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLXRhZz4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ICYmIGdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3RvcnkoaXRlbVtjb2wuZmllbGRdKSBhcyBvcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwib3B0LmNvbG9ySGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIm9wdC5jb2xvckhleCA/ICd3aGl0ZScgOiAnYmxhY2snXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtYmxhY2sgYmctd2hpdGUnOiAhb3B0LmNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtd2hpdGUnOiBvcHQuY29sb3JIZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeSAmJiAhZ2V0U3RhdHVzT3B0aW9uRm9yU3RhdHVzSGlzdG9yeShpdGVtW2NvbC5maWVsZF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBkaXNwbGF5LXN0YXR1cy1jb2x1bW4gLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c0NvbHVtbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2x1bW47IGVsc2UgZGlzcGxheUJ1dHRvbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxwLXRhZyBcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdGF0dXNDb2xvcihpdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvcC10YWc+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YSAmJiBnZXRTdGF0dXNPcHRpb24oaXRlbVtjb2wuZmllbGRdKSBhcyBvcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LmNvbG9ySGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhICYmICFnZXRTdGF0dXNPcHRpb24oaXRlbVtjb2wuZmllbGRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMSBweS0xIGZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gZGlzcGxheS1uZXN0ZWQtcHJvcCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5QnV0dG9uQmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc0J1dHRvbjsgZWxzZSBkaXNwbGF5VGV4dEV5ZUJsb2NrXCIgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxUc2ktQnV0dG9uICBbc3R5bGVDbGFzc109XCJjb2wuc3R5bGVDbGFzc1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBjb2wuYnV0dG9uSWNvbiB9fVwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFt0b29sdGlwVGV4dF09XCJjb2wudG9vbFRpcFRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImNvbC5idXR0b25MYWJlbCA/IGNvbC5idXR0b25MYWJlbCA6IGl0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoaXRlbSwgY29sLmZpZWxkKVwiID48L1RzaS1CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gZGlzcGxheS10ZXh0LWV5ZSAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5VGV4dEV5ZUJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLlRFWFRfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkZWZhdWx0VGV4dE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLVRleHQtQm94IC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZXh0T3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNEcmFnT3ZlclwiIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVzc2FnZVBvc2l0aW9uLnggKyAncHgnLCB0b3A6IG1lc3NhZ2VQb3NpdGlvbi55ICsgJ3B4JyB9XCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctbWVzc2FnZSBjdXJzb3ItZm9sbG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgXCJKb2ludHVyZVwiIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgPCEtLSBDQVNFIDogc2luZ2xlIG9yIG5vbmUgc2VsZWN0aW9uIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TXVsdGlwbGVTZWxlY3Rpb25Nb2RlQmxvY2s+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8dHIgW25nU3R5bGVdPVwiaXRlbS5jb2xvciAmJiBpdGVtLmNvbG9yICE9PSAnJyA/IHsnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0uY29sb3J9IDoge31cIlxyXG4gICAgICAgICAgICAgIFtwU2VsZWN0YWJsZVJvd109XCJpdGVtXCIgW3BTZWxlY3RhYmxlUm93SW5kZXhdPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8IS0tIDx0ZCBjbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0KGl0ZW0pXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCIgKGNsaWNrKT1cImRlbGV0ZShpdGVtKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD4gLS0+XHJcbiAgICAgICAgICAgICAgPHRkIFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGNvbC5uZ1N0eWxlIDoge31cIiBzdHlsZT1cImhlaWdodDogbWluLWNvbnRlbnQ7XCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICduby16LWluZGV4JzogcGFnZS5sb2FkaW5nLFxyXG4gICAgICAgICAgICAgICAgICAndy0xcmVtJzogY29sLmlzQnV0dG9uXHJcbiAgICAgICAgICAgICAgICB9XCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFtuZ0NsYXNzXT1cInBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY3VycmVuY3lPdGhlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY3VycmVuY3lPdGhlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGF0ZVBpY2tlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5IFtjdXJyZW5jeV09XCJjb2wuY3VycmVuY3lDb2RlXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRBVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGF0ZVRpbWVQaWNrZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGVUaW1lUGlja2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5EQVRFVElNRV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBjaGVja0JveE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1EYXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIiBbc2hvd1RpbWVdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DaGVja0JveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tCb3hPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRlY2ltYWxPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tib3gtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrYm94LURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1EZWNpbWFsLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWNpbWFsT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGludGVnZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1EaXNwbGF5IFtmb3JtYXREZWNpbWFsXT1cImNvbC5mb3JtYXREZWNpbWFsXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW251bU9mRGVjaW1hbF09XCJjb2wubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktSW50ZWdlciAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW50ZWdlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSByYXRlT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUludGVnZXItRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUludGVnZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLVJhdGUtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JhdGVPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLlJBVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGlzcGxheU5lc3RlZFByb3BPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5IFtpc0ZyYWN0aW9uXT1cImNvbC5pc0ZyYWN0aW9uXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXktbmVzdGVkLXByb3AgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlOZXN0ZWRQcm9wT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ORVNURURfUFJPUF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBkaXNwbGF5U3RhdHVzQ29sb3JCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktRGlzcGxheS1OZXN0ZWQtUHJvcCBbc291cmNlVXJsXT1cImNvbC5kaXNwbGF5TmVzdGVkUHJvcGVydHlTb3VyY2VVcmxcIiBbaWRdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5VmFsdWVdPVwiY29sLmRpc3BsYXlOZXN0ZWRQcm9wZXJ0eWxhYmVsRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1EaXNwbGF5LU5lc3RlZC1Qcm9wPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5U3RhdHVzQ29sb3JCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc1N0YXR1c0NvbG9yOyBlbHNlIGRpc3BsYXlTdGF0dXNWYWx1ZUNvbHVtbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIHJvdW5kZWQgdGV4dC13aGl0ZSB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1bY29sLmZpZWxkXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c1ZhbHVlQ29sdW1uQmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc1N0YXR1c0NvbHVtblZhbHVlOyBlbHNlIGRpc3BsYXlTdGF0dXNDb2x1bW5CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS08cC10YWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3RhdHVzQ29sb3IoaXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3AtdGFnPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3RvcnkgJiYgZ2V0U3RhdHVzT3B0aW9uRm9yU3RhdHVzSGlzdG9yeShpdGVtW2NvbC5maWVsZF0pIGFzIG9wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJvcHQuY29sb3JIZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LmNvbG9ySGV4ID8gJ3doaXRlJyA6ICdibGFjaydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC1ibGFjayBiZy13aGl0ZSc6ICFvcHQuY29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC13aGl0ZSc6IG9wdC5jb2xvckhleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC50cmFuc2xhdGVkTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ICYmICFnZXRTdGF0dXNPcHRpb25Gb3JTdGF0dXNIaXN0b3J5KGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gZGlzcGxheS1zdGF0dXMtcHJvcCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c0NvbHVtbkJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzU3RhdHVzQ29sdW1uOyBlbHNlIGRpc3BsYXlCdXR0b25CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLTxwLXRhZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3RhdHVzQ29sb3IoaXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wLXRhZz4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGEgJiYgZ2V0U3RhdHVzT3B0aW9uKGl0ZW1bY29sLmZpZWxkXSkgYXMgb3B0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEgcHktMSByb3VuZGVkIHN0YXR1cy1iYWRnZSBmb250LWJvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImxpZ2h0ZW5Db2xvcihvcHQuY29sb3JIZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LmNvbG9ySGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC50cmFuc2xhdGVkTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGEgJiYgICFnZXRTdGF0dXNPcHRpb24oaXRlbVtjb2wuZmllbGRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0xIHB5LTEgcm91bmRlZCBzdGF0dXMtYmFkZ2UgZm9udC1ib2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXktbmVzdGVkLXByb3AgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlCdXR0b25CbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc0J1dHRvbjsgZWxzZSBkaXNwbGF5SW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGNvbC5uZ1N0eWxlIDoge31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicGFnZS5sb2FkaW5nID8gJ25vLXotaW5kZXgnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBbc3R5bGVDbGFzc109XCJjb2wuc3R5bGVDbGFzc1wiIHR5cGU9XCJidXR0b25cIiBpY29uPVwie3sgY29sLmJ1dHRvbkljb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBbdG9vbHRpcFRleHRdPVwiY29sLnRvb2xUaXBUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoaXRlbSwgY29sLmZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImNvbC5idXR0b25MYWJlbCA/IGNvbC5idXR0b25MYWJlbCA6IGl0ZW1bY29sLmZpZWxkXVwiPjwvVHNpLUJ1dHRvbj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5LWltYWdlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5SW1hZ2U+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuSU1BR0VfRElTUExBWTsgZWxzZSBkaXNwbGF5VGV4dEV5ZUJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtM3JlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRzaS1pbWFnZS1kaXNwbGF5IFtoZWFkZXJUaXRsZXNdPVwiZ2V0SGVhZGVyVGl0bGVzKGNvbC5oZWFkZXJUaXRsZXMsIGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzUm91bmRlZF09XCJjb2wuaXNSb3VuZGVkXCIgW3NyY109XCJpdGVtW2NvbC5maWVsZF1cIiBbYWx0XT1cImNvbC5oZWFkZXIgfHwgJ2ltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIicxMDAlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90c2ktaW1hZ2UtZGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gZGlzcGxheS10ZXh0LWV5ZSAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVRleHRFeWVCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLlRFWFRfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGVmYXVsdFRleHRPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwaSBwaS1leWVcIiAoY2xpY2spPVwiZXllQ2xpY2tlZChpdGVtW2NvbC5maWVsZF0pXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgdHJ1bmNhdGVTdHJpbmcoaXRlbVtjb2wuZmllbGRdLCA1MCkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHRPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZVwiPjwvdGQ+XHJcbiAgICAgICAgICA8dGQgY2xhc3M9XCJwci0wXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBzZWxlY3RlZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5zaG93U3VtbWFyeVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheSBbaW5wdXREYXRhXT1cImdldFN1bW1hcnkoY29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIElOVEVHRVJfRElTUExBWSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUludGVnZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBSQVRFX0RJU1BMQVkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5IFtpc0ZyYWN0aW9uXT1cImNvbC5pc0ZyYWN0aW9uID8/IGZhbHNlXCIgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVJhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBERUNJTUFMX0RJU1BMQVkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1EaXNwbGF5IFtmb3JtYXREZWNpbWFsXT1cImNvbC5mb3JtYXREZWNpbWFsXCIgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgW2N1cnJlbmN5XT1cImNvbC5jdXJyZW5jeU90aGVyQ29kZVwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzdW1tYXJ5XCI+XHJcbiAgICAgICAge3sgcGFnZS50b3RhbENvdW50IH19IHt7IFwicmVjb3Jkc19sYWJlbFwiIHwgbG9jYWxpemUgfX1cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbG9yZnVsXCI+XHJcbiAgICAgICAgICA8c3Bhbj5WaWV3IEdyaWQ8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj58IFNlYXJjaE9uSW5pdCA6IHt7IHNlYXJjaE9uSW5pdCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPnwgUGFnaW5hdGlvbiBJbiBBcGkgOiB7eyBpc0dyaWREYXRhUGFnZWRJbkFwaSB9fTwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdGFibGU+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiX3Nob3dDYWxlbmRlclZpZXcgPT09IHRydWVcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPHRzaS1jYWxlbmRlciBbc2NoZW1hXT1cImNhbGVuZGVyU2NoZW1hXCIgW2V2ZW50c0RhdGFdPVwicGFnZS5pdGVtc1wiIFtjcnVkU2VydmljZV09XCJjcnVkU2VydmljZVwiXHJcbiAgICAgIChkYXRlUmFuZ2VDaGFuZ2UpPVwiaGFuZGxlRGF0ZVJhbmdlQ2hhbmdlKCRldmVudClcIiAoZXZlbnRDbGljayk9XCJoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soJGV2ZW50KVwiPjwvdHNpLWNhbGVuZGVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiX3Nob3dDYXJkVmlldyA9PT0gdHJ1ZVwiIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICA8VHNpLWNhcmQtbGlzdCBbY2FyZEJ1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiIFtpZF09XCJpZFwiIChidXR0b25DbGlja2VkKT1cImJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgW3BhZ2UkXT1cInBhZ2UkXCIgW3BhZ2VdPVwicGFnZVwiIChjYWxsU2VhcmNoKT1cImNhbGxTZWFyY2hIYW5kbGVyKCRldmVudClcIj5cclxuICAgIDwvVHNpLWNhcmQtbGlzdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIl9zaG93S2FuYmFuVmlldyA9PT0gdHJ1ZVwiIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICA8VHNpLWthbmJhbiBbY2FyZEJ1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiIFtpZF09XCJpZFwiIChidXR0b25DbGlja2VkKT1cImJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgW3BhZ2UkXT1cInBhZ2UkXCIgW3BhZ2VdPVwicGFnZVwiIChjYWxsU2VhcmNoKT1cImNhbGxTZWFyY2hIYW5kbGVyKCRldmVudClcIiBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIj5cclxuICAgIDwvVHNpLWthbmJhbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
1682
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRixPQUFPLEVBQWlCLFNBQVMsRUFBdUIsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZUFBZSxFQUF1RCxNQUFNLGFBQWEsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkwsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbEUsT0FBTyxFQUFpRCxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxLQUFL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RyxhQUFhO3NCQUFyQixLQUFLO2dCQUdPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBYUcsYUFBYTtzQkFBckIsS0FBSztnQkFDTyxZQUFZO3NCQUF4QixLQUFLO2dCQVlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBV0csY0FBYztzQkFBdEIsS0FBSztnQkFHTyxZQUFZO3NCQUF4QixLQUFLO2dCQUtPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBYUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQU9JLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWV0YWRhdGEsIFByaW1lTkdDb25maWcsIFNvcnRNZXRhLCBUYWJsZVN0YXRlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUYWJsZSwgVGFibGVIZWFkZXJDaGVja2JveCwgVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZVNlbGVjdEFsbENoYW5nZUV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFbnRpdHlJbmZvIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvJztcclxuaW1wb3J0IHsgRGlzcGxheVR5cGVDb2xvcnMsIERpc3BsYXlUeXBlcywgRmlsdGVyT3BlcmF0b3JUeXBlLCBHcmlkU2VsZWN0aW9uTW9kZSwgR3JpZFNvcnRNb2RlLCBJbnB1dFR5cGVzLCBNb2RhbFNpemVFbnVtLCBOdW1lcmljRGlzcGxheVR5cGVzLCBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IERlZmF1bHRTb2NpZXRlRGV2aXNlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL3RzaS1jb25zdHMnO1xyXG5pbXBvcnQgeyBJRmlsdGVyZWRSZXF1ZXN0LCBJU29ydEJ5UHJvcHJldHksIElQYWdlZFJlcXVlc3QsIElHcmlkQ29uZmlndXJhdGlvbiwgSVBhZ2UsIEdyaWRDb2x1bW4sIEJ1dHRvbkNsaWNrUmVzdWx0LCBJU29ydE1ldGEsIElQYWdlZFJlc3BvbnNlLCBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNlYXJjaEZpZWxkLCBQcmVzZW50YXRpb25TZXR0aW5nLCBFdmVudFNjaGVtYSwgRmljaGllciB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9hcHAubGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBydGxNb2RlS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9sb2NhbHMuY29uc3QnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYXNlL2NydWQtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dlbmVyYXRvci9odG1sLXRlbXBsYXRlLWdlbmVyYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYXlvdXRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGF5b3V0L2xheW91dC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzL2FwcC1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL2Vycm9yLXJlc3BvbnNlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlckhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL2ZpbHRlci1oZWxwZXInO1xyXG5pbXBvcnQgeyBwcmltZW5nTG9jYWxlQXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9wcmltZW5nLXRyYW5zbGF0ZS1jb25maWcnO1xyXG5pbXBvcnQgeyBFeHBvcnRFeGNlbEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL2V4cG9ydC1leGNlbC5oZWxwZXInO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgb3BlblRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9tb2RhbC1vcGVuLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgU3RhdHVzQ29sb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RhdHVzL3N0YXR1cy1jb2xvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXR1c01ldGFkYXRhUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3RhdHVzL2NvbG9yLXN0YXR1cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RzaS1HZW5lcmljLUdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignc2xpZGVJbk91dCcsIFtcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoe1xyXG4gICAgICAgIGhlaWdodDogJyonLFxyXG4gICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKSdcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZSgnb3V0Jywgc3R5bGUoe1xyXG4gICAgICAgIGhlaWdodDogJzBweCcsXHJcbiAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMHB4KSdcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdpbiA8PT4gb3V0JywgYW5pbWF0ZSgnNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknKSlcclxuICAgIF0pXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSBjdWRDb21wb25lbnQ6IGFueTtcclxuICBASW5wdXQoKSBtb2RhbFNpemU6IGFueTtcclxuICBASW5wdXQoKSBlbnRpdHlJbmZvOiBFbnRpdHlJbmZvIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGZpbHRlck1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgaXNBcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBhc3luYyBleWVDbGlja2VkKHRleHQ6IGFueSkge1xyXG5cclxuICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkV4dHJhTGFyZ2U7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YTogdGV4dCxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsPzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRydW5jYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIgPSA1MCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiBsaW1pdCA/IHZhbHVlLnN1YnN0cigwLCBsaW1pdCkgKyAnLi4uJyA6IHZhbHVlO1xyXG4gIH1cclxuICAvLyNyZWdpb24gbG9jYWwgdmFyc1xyXG4gIEBWaWV3Q2hpbGQoXCJkdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGR0OiBUYWJsZSB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKFwidGFibGVIZWFkZXJDaGVja2JveFwiKSB0YWJsZUhlYWRlckNoZWNrYm94OiBUYWJsZUhlYWRlckNoZWNrYm94IHwgdW5kZWZpbmVkXHJcbiAgZmlyc3Q6IG51bWJlciA9IDA7XHJcbiAgcm93cyA9IDE7XHJcbiAgZGlzcGxheVR5cGVzID0gRGlzcGxheVR5cGVzO1xyXG4gIGtleXdvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBzdW1tYXJpZXM6IERpY3Rpb25hcnk8c3RyaW5nLCBudW1iZXI+ID0ge307XHJcbiAgaXNSdGxNb2RlOiBib29sZWFuID0gZmFsc2VcclxuICBpc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgbWVzc2FnZVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgcHJpdmF0ZSBkcmFnRW50ZXJDb3VudCA9IDA7XHJcbiAgLy8gcHJpdmF0ZSBfc2VhcmNoQm94RmlsdGVyczogQXJyYXk8RmlsdGVyQnlQcm9wcmV0eT4gPSBbXTtcclxuICAvLyBwcml2YXRlIF9ncmlkSGVhZGVyRmlsdGVyczogQXJyYXk8RmlsdGVyQnlQcm9wcmV0eT4gPSBbXTtcclxuICBwcml2YXRlIF9zZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9zZWFyY2hCb3hGaWx0ZXJzOiBBcnJheTxJRmlsdGVyZWRSZXF1ZXN0PiA9IFtdO1xyXG4gIHByaXZhdGUgX2dyaWRIZWFkZXJGaWx0ZXJzOiBBcnJheTxJRmlsdGVyZWRSZXF1ZXN0PiA9IFtdO1xyXG4gIHByaXZhdGUgX3NvcnQ6IEFycmF5PElTb3J0QnlQcm9wcmV0eT4gPSBbXTtcclxuICBzb3J0TWV0YXM6IFNvcnRNZXRhW10gPSBbXTtcclxuICBzZWxlY3RlZEZ1bGxJdGVtcz86IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3Rpb246IGFueTtcclxuICBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICAvL2pzb25TdHJpbmdMYXlvdXQ6IHN0cmluZyA9ICd7XCJmaXJzdFwiOjAsXCJyb3dzXCI6MTAsXCJtdWx0aVNvcnRNZXRhXCI6W10sXCJjb2x1bW5XaWR0aHNcIjpcIlwiLFwidGFibGVXaWR0aFwiOlwiMTE4OHB4XCIsXCJjb2x1bW5PcmRlclwiOltcIlwiXX0nO1xyXG4gIGxhdGVzdEZpbHRlcnM/OiBJRmlsdGVyZWRSZXF1ZXN0W107XHJcblxyXG4gIC8vIHByaXZhdGUgX3BhZ2UgOiBJUGFnZTxhbnk+ID0ge1xyXG4gIC8vICAgaXRlbXM6IFtdLFxyXG4gIC8vICAgdG90YWxDb3VudDogMCxcclxuICAvLyAgIHN1bW1hcmllczogW10sXHJcbiAgLy8gICB0b3RhbFBhZ2VzOiAwLFxyXG4gIC8vICAgcGFnZU51bWJlcjogMSxcclxuICAvLyAgIHBhZ2VTaXplOiAxMCxcclxuICAvLyAgIGxvYWRpbmc6IGZhbHNlXHJcbiAgLy8gfTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGZvcm1OYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBhZ2VkUmVxdWVzdD86IElQYWdlZFJlcXVlc3Q7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbj86IElHcmlkQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSAvKnNldCovIHBhZ2U6IElQYWdlPGFueT4gPSB7XHJcbiAgICBpdGVtczogW10sXHJcbiAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gICAgbG9hZGluZzogZmFsc2VcclxuICB9O1xyXG4gIC8vIChuZXdQYWdlOiBJUGFnZTxhbnk+KXtcclxuICAvLyAgIGlmKG5ld1BhZ2Upe1xyXG4gIC8vICAgICB0aGlzLl9wYWdlID0gbmV3UGFnZTtcclxuICAvLyAgICAgdGhpcy5fZXh0cmFjdFN1bW1hcmllcygpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICAvLyBnZXQgcGFnZSgpe1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX3BhZ2U7XHJcbiAgLy8gfVxyXG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3VpZCc7XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBwcml2YXRlIF90ZW1wQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuICB0ZW1wU2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4gPSBbXTtcclxuICBwcml2YXRlIF9jb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgY29sdW1ucyh2YWx1ZTogQXJyYXk8R3JpZENvbHVtbj4gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnNQcm9jZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxHcmlkQ29sdW1uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBncmlkRGF0YT86IEFycmF5PGFueT47XHJcblxyXG4gIEBJbnB1dCgpIGlzVGFibGVMb2FkaW5nPzogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgcGFyZW50OiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBzaG93QWN0aW9uQ29sdW1uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0hlYWRlckZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93RmlsdGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0dyaWREYXRhUGFnZWRJbkFwaTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBTaG93RmlsdGVyQ29sdW1uczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNydWRTZXJ2aWNlPzogQ3J1ZEJhc2VTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueT47XHJcbiAgQElucHV0KCkgc2V0IHNlYXJjaEZpZWxkcyh2YWx1ZTogQXJyYXk8U2VhcmNoRmllbGQ+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgLy9yZXNldFxyXG4gICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBbXTtcclxuXHJcbiAgICAgIC8vaW5pdCB1c2luZyB2YWx1ZVxyXG4gICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBGaWx0ZXJIZWxwZXIuaW5pdFNlYXJjaEZpZWxkcyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuaW5pdFNlYXJjaE9uSW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2VhcmNoRmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaEZpZWxkcztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBHcmlkU29ydE1vZGUgfCBhbnkgPSBHcmlkU29ydE1vZGUuTXVsdGlwbGU7XHJcbiAgQElucHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZT86IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgcHJlc2VudGF0aW9uU2V0dGluZ3M/OiBQcmVzZW50YXRpb25TZXR0aW5nXHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdEtleU9ubHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlIHwgYW55ID0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbk1vZGUodmFsdWU6IEdyaWRTZWxlY3Rpb25Nb2RlIHwgYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGE/LmlzQWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5jb25maWc/LmRhdGE/LnNlbGVjdGlvbk1vZGUpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IHRoaXMuY29uZmlnPy5kYXRhPy5zZWxlY3Rpb25Nb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGlvbk1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBzZXQgc2VhcmNoT25Jbml0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWVcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNlYXJjaE9uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdFNlYXJjaE9uSW5pdCgpXHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoT25Jbml0XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzaG93R2xvYmFsU2VhcmNoOiBib29sZWFuID0gdHJ1ZVxyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEZpZWxkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcm90ZWN0ZWQgX3Nob3dDYWxlbmRlclZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXQgc2hvd0NhbGVuZGVyVmlldyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0NhbGVuZGVyVmlldyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX3Nob3dDYWxlbmRlclZpZXcgPT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuc2VhcmNoRmllbGRzPy5maW5kKHggPT4geC5maWVsZCA9PT0gdGhpcy5jYWxlbmRlclNjaGVtYT8uc3RhcnQpXHJcbiAgICAgIGxldCBlbmQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LmVuZClcclxuICAgICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICAgIHN0YXJ0LmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgZW5kLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgY2FsZW5kZXJTY2hlbWE6IEV2ZW50U2NoZW1hIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Nob3dDYXJkVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBzaG93Q2FyZFZpZXcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dDYXJkVmlldyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9zaG93S2FuYmFuVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBzaG93S2FuYmFuVmlldyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0thbmJhblZpZXcgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGJ1c2luZXNzQ2xhc3M/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG5cclxuICBASW5wdXQoKSBjaGVja2VkQnlGaWVsZDogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdEFsbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2VsZWN0QWxsID0gdmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc3ludGhldGljRXZlbnQgPSBuZXcgRXZlbnQoJ3NlbGVjdEFsbENoYW5nZScpO1xyXG4gICAgY29uc3QgZXZlbnQ6IFRhYmxlU2VsZWN0QWxsQ2hhbmdlRXZlbnQgPSB7XHJcbiAgICAgIGNoZWNrZWQ6IHZhbHVlLFxyXG4gICAgICBvcmlnaW5hbEV2ZW50OiBzeW50aGV0aWNFdmVudCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vblNlbGVjdEFsbENoYW5nZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSB0YXJnZXRCdXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZ2V0IHNlbGVjdEFsbCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbDsgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgZWRpdFJvdzogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlUm93OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBsb2FkOiBFdmVudEVtaXR0ZXI8eyByZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0LCBpc0ZvckNhbGVuZGFyOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlcXVlc3Q6IElQYWdlZFJlcXVlc3QsIGlzRm9yQ2FsZW5kYXI6IGJvb2xlYW4gfT4oKTtcclxuICBAT3V0cHV0KCkgYnV0dG9uQ29sdW1uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+KCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlcnNIdG1sVGVtcGxhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIEBPdXRwdXQoKSBjYWxlbmRhckV2ZW50Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHN0YXR1c0ZpbHRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgLy8gbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gIC8vICAgaWYoY2hhbmdlc1sncGFnZSddKXtcclxuICAvLyAgICAgdGhpcy5fZXh0cmFjdFN1bW1hcmllcygpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICBwcm90ZWN0ZWQgZmlsdGVyVG9vbHRpcCA9IFwic2hvd19maWx0ZXJcIjtcclxuICBwcm90ZWN0ZWQgcmVxdWlyZWRMb2NhbGl6YXRpb25LZXkgPSBcInNoYXJlZF9zZWFyY2hfZmllbGRfcmVxdWlyZWRcIjtcclxuXHJcbiAgZmlsdGVyTW9kZUljb24gPSBcInBpIHBpLWZpbHRlclwiO1xyXG4gIGZpbHRlck1vZGVUb29sdGlwID0gXCJtZW51X21vZGVcIjtcclxuICBjaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZTogc3RyaW5nID0gXCJtZW51XCI7XHJcblxyXG4gIGl0ZW1zPzogYW55W107XHJcbiAgX3NlYXJjaE9uSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHNlbGVjdGVkQ29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgaW1wb3J0YW50Q29sdW1ucyA9IFsnY29uc3VsdCcsICdlZGl0JywgJ2RlbGV0ZScsICd1cGxvYWQnLCAnZG93bmxvYWQnLCAnaW5mbycsICdub3RlcycsICdkdXBsaWNhdGUnXTtcclxuICBpc0ZpcnN0TG9hZE9mUGFnZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgdGl0bGVDYWNoZSA9IG5ldyBNYXA8YW55LCBzdHJpbmdbXT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zdGF0dXNDb2xvclNlcnZpY2U6IFN0YXR1c0NvbG9yU2VydmljZSxcclxuICAgIHB1YmxpYyBfZmljaGllclNlcnZpY2U6IEZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZTogSHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcml2YXRlIGxheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJpbWVuZ0NvbmZpZzogUHJpbWVOR0NvbmZpZyxcclxuICAgIHByaXZhdGUgYXBwU2V0dGluZ3NTZXJ2aWNlOiBBcHBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIF9yZWY/OiBEeW5hbWljRGlhbG9nUmVmLFxyXG5cclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGxldCBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYClcclxuICAgIGlmIChmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgIT0gdW5kZWZpbmVkICYmIGZpbHRlck1vZGVUb29sdGlwRnJvbUxvY2FsU3RvcmFnZSAhPSBudWxsXHJcbiAgICAgICYmIGZpbHRlck1vZGVUb29sdGlwRnJvbUxvY2FsU3RvcmFnZSAhPSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2VcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IHRydWVcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXItc2xhc2hcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJoaWRlX2ZpbHRlclwiO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJNb2RlVG9vbHRpcCA9PT0gXCJtZW51X21vZGVcIikge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZUljb24gPSBcInBpIHBpLWNoZWNrXCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcCA9IFwicm93X21vZGVcIjtcclxuICAgICAgICB0aGlzLmNoYW5nZUhlYWRlckZpbHRlcnNNb2RlID0gXCJtZW51XCJcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNoYW5nZUhlYWRlckZpbHRlcnNNb2RlID0gXCJyb3dcIjtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVJY29uID0gXCJwaSBwaS1lbGxpcHNpcy12XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcCA9IFwibWVudV9tb2RlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gZmFsc2VcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJzaG93X2ZpbHRlclwiO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGxldCBsYW5ndWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShydGxNb2RlS2V5cy5ydGxNb2RlRW5hYmxlZCk7XHJcblxyXG4gICAgaWYgKGxhbmd1ZSAmJiBKU09OLnBhcnNlKGxhbmd1ZSkpIHtcclxuICAgICAgdGhpcy5pc0FyID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4udHJhbnNsYXRlZEhlYWRlciA9IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGNvbHVtbi5oZWFkZXIhISkpXHJcblxyXG4gICAgdGhpcy5fdGVtcENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgdGhpcy50ZW1wU2VhcmNoRmllbGRzID0gdGhpcy5fc2VhcmNoRmllbGRzID8/IFtdO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT5cclxuICAgICAgIXRoaXMuaW1wb3J0YW50Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uZmllbGQpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2x1bW5zIHx8IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb2x1bW4ub3JkZXIgPSBpbmRleDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaXNSdGxNb2RlRW5hYmxlZCgpXHJcbiAgICB0aGlzLl9ydGxNb2RlU3Vic2NyaWJlKClcclxuICAgIHRoaXMucHJvY2Vzc1N0aWNreUNvbHVtbnMoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydlbnRpdHlJbmZvJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmVudGl0eUluZm8pIHtcclxuXHJcbiAgICAgIC8vICAgIGlmIChjaGFuZ2VzWydlbnRpdHlJbmZvJ10gJiYgdGhpcy5lbnRpdHlJbmZvKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlFbnRpdHlJbmZvKHRoaXMuZW50aXR5SW5mbyk7XHJcbiAgICAgIHRoaXMubG9hZFN0YXR1c0NvbG9ycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd0YXJnZXRCdXNpbmVzc0NsYXNzJ10gJiYgdGhpcy50YXJnZXRCdXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMubG9hZFN0YXR1c0NvbG9yc0RldGFpbHNCeUJ1c2luZXNzQ2xhc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXR1c01ldGFkYXRhPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuICBzdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3Rvcnk/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBnZXRTdGF0dXNPcHRpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzTWV0YWRhdGE/Lm9wdGlvbnMuZmluZChvID0+IG8uc3RhdHVzVmFsdWUgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3Rvcnkoc3RhdHVzVmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5Py5vcHRpb25zLmZpbmQobyA9PiBvLnRyYW5zbGF0ZWRMYWJlbCA9PT0gc3RhdHVzVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFN0YXR1c0NvbG9yc0RldGFpbHNCeUJ1c2luZXNzQ2xhc3MoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMudGFyZ2V0QnVzaW5lc3NDbGFzcyAhPSB1bmRlZmluZWQgJiYgdGhpcy50YXJnZXRCdXNpbmVzc0NsYXNzICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5fc3RhdHVzQ29sb3JTZXJ2aWNlLmdldFN0YXR1c0NvbG9yRGV0YWlsc0J5QnVzaW5lc3NDbGFzc05hbWUodGhpcy50YXJnZXRCdXNpbmVzc0NsYXNzKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgc3RhdHVzIGNvbG9ycycsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkU3RhdHVzQ29sb3JzKCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuYnVzaW5lc3NDbGFzcyE7XHJcbiAgICBjb25zdCBzdGF0dXNFbnVtTmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzRW51bU5hbWUhO1xyXG5cclxuICAgIGlmICghY2xhc3NOYW1lIHx8ICFzdGF0dXNFbnVtTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgY2xhc3NOYW1lIG9yIHN0YXR1c0VudW1OYW1lIGZvciBlbnRpdHlJbmZvLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuX3N0YXR1c0NvbG9yU2VydmljZS5nZXRTdGF0dXNDb2xvckRldGFpbHMoY2xhc3NOYW1lLCBzdGF0dXNFbnVtTmFtZSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogU3RhdHVzTWV0YWRhdGFSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c01ldGFkYXRhID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgc3RhdHVzIGNvbG9ycycsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdGF0dXMgY29sb3JzOicsIGVycik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsIHBlcmNlbnQ6IG51bWJlciA9IDUwKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJyc7XHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcblxyXG4gICAgbGV0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBsZXQgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGxldCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIHIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IociArICgyNTUgLSByKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGcgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoZyArICgyNTUgLSBnKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoYiArICgyNTUgLSBiKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuXHJcbiAgICBjb25zdCBuZXdIZXggPVxyXG4gICAgICAnIycgK1xyXG4gICAgICBbciwgZywgYl1cclxuICAgICAgICAubWFwKHggPT4geC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSlcclxuICAgICAgICAuam9pbignJyk7XHJcblxyXG4gICAgcmV0dXJuIG5ld0hleDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlFbnRpdHlJbmZvKGVudGl0eUluZm86IEVudGl0eUluZm8pIHtcclxuICAgIGlmICghZW50aXR5SW5mbz8uc3RhdHVzQ29sdW1uTmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHN0YXR1c0NvbHVtbk5hbWUgPSBlbnRpdHlJbmZvLnN0YXR1c0NvbHVtbk5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICBjb25zdCBzdGF0dXNDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChcclxuICAgICAgYyA9PiBjLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IHN0YXR1c0NvbHVtbk5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFzdGF0dXNDb2x1bW4pIHtcclxuICAgICAgY29uc29sZS53YXJuKGBTdGF0dXMgY29sdW1uIFwiJHtlbnRpdHlJbmZvLnN0YXR1c0NvbHVtbk5hbWV9XCIgbm90IGZvdW5kLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdHVzQ29sdW1uLmlzU3RhdHVzQ29sdW1uID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBidXR0b25Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMuaXNCdXR0b24pO1xyXG4gICAgY29uc3Qgb3RoZXJDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+ICFjLmlzQnV0dG9uICYmIGMgIT09IHN0YXR1c0NvbHVtbik7XHJcblxyXG4gICAgY29uc3QgbWF4QnV0dG9uT3JkZXIgPVxyXG4gICAgICBidXR0b25Db2x1bW5zLnJlZHVjZSgobSwgYykgPT4gTWF0aC5tYXgobSwgYy5vcmRlciA/PyAwKSwgMCkgfHwgMDtcclxuXHJcbiAgICBzdGF0dXNDb2x1bW4ub3JkZXIgPSBtYXhCdXR0b25PcmRlciArIDE7XHJcblxyXG4gICAgY29uc3QgcmVvcmRlcmVkID0gW1xyXG4gICAgICAuLi5idXR0b25Db2x1bW5zLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMCkpLFxyXG4gICAgICBzdGF0dXNDb2x1bW4sXHJcbiAgICAgIC4uLm90aGVyQ29sdW1ucy5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApKSxcclxuICAgIF07XHJcblxyXG4gICAgcmVvcmRlcmVkLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IChjb2wub3JkZXIgPSBpbmRleCkpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gWy4uLnJlb3JkZXJlZF07XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0U3RhdGUoKSB7XHJcbiAgICBsZXQgc3RhdGU6IFRhYmxlU3RhdGUgPSB7fTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZHQpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZHQucmVzaXphYmxlQ29sdW1ucykge1xyXG4gICAgICB0aGlzLmR0LnNhdmVDb2x1bW5XaWR0aHMoc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZHQuc2F2ZUNvbHVtbk9yZGVyKHN0YXRlKTtcclxuXHJcbiAgICByZXR1cm4gc3RhdGVcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlU3RhdGUoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBsZXQgc3RhdGU6IFRhYmxlU3RhdGUgPSBKU09OLnBhcnNlKGNvbmZpZ3VyYXRpb24pXHJcbiAgICBpZiAodGhpcy5kdCkge1xyXG5cclxuICAgICAgdGhpcy5kdC5jb2x1bW5XaWR0aHNTdGF0ZSA9IHN0YXRlLmNvbHVtbldpZHRocztcclxuICAgICAgdGhpcy5kdC50YWJsZVdpZHRoU3RhdGUgPSBzdGF0ZS50YWJsZVdpZHRoO1xyXG5cclxuICAgICAgbGV0IGNvbHVtbk9yZGVyID0gc3RhdGUuY29sdW1uT3JkZXI7XHJcblxyXG4gICAgICBpZiAoY29sdW1uT3JkZXIpIHtcclxuICAgICAgICBsZXQgcmVvcmRlcmVkQ29sdW1ucyA9IHRoaXMuZ2V0UmVvcmRlcmVkQ29sdW1ucyhjb2x1bW5PcmRlcik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSByZW9yZGVyZWRDb2x1bW5zO1xyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHJlb3JkZXJlZENvbHVtbnM7XHJcbiAgICAgICAgdGhpcy5zb3J0Q29sdW1ucygpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRDb2x1bW5zQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5zb3J0Q29sdW1ucygpXHJcbiAgfVxyXG5cclxuICBzb3J0Q29sdW1ucygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXhBID0gdGhpcy5pbXBvcnRhbnRDb2x1bW5zLmluZGV4T2YoYS5maWVsZCk7XHJcbiAgICAgIGNvbnN0IGluZGV4QiA9IHRoaXMuaW1wb3J0YW50Q29sdW1ucy5pbmRleE9mKGIuZmllbGQpO1xyXG5cclxuICAgICAgaWYgKGluZGV4QSA9PT0gLTEgJiYgaW5kZXhCID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbmRleEEgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGluZGV4QiA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1uc1xyXG4gICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5vcmRlciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyISAtIGIub3JkZXIhKSxcclxuICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wub3JkZXIgPT09IHVuZGVmaW5lZCksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVvcmRlcmVkQ29sdW1ucyhjb2x1bW5PcmRlcjogc3RyaW5nW10pOiBhbnlbXSB7XHJcbiAgICBsZXQgcmVvcmRlcmVkQ29sdW1uczogYW55W10gPSBbXTtcclxuXHJcbiAgICBjb2x1bW5PcmRlci5tYXAoKGtleSkgPT4ge1xyXG4gICAgICBsZXQgY29sID0gdGhpcy5maW5kQ29sdW1uQnlLZXkoa2V5KTtcclxuICAgICAgaWYgKGNvbCkge1xyXG4gICAgICAgIHJlb3JkZXJlZENvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVvcmRlcmVkQ29sdW1ucztcclxuICB9XHJcblxyXG4gIGZpbmRDb2x1bW5CeUtleShrZXk6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX3RlbXBDb2x1bW5zKSB7XHJcbiAgICAgIGZvciAobGV0IGNvbCBvZiB0aGlzLl90ZW1wQ29sdW1ucykge1xyXG4gICAgICAgIGlmIChjb2wuaGVhZGVyID09PSBrZXkgfHwgY29sLmZpZWxkID09PSBrZXkpIHJldHVybiBjb2w7XHJcbiAgICAgICAgZWxzZSBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHJlc2V0U2VsZWN0ZWRDb2x1bW5zKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgbGV0IHN0YXRlOiBUYWJsZVN0YXRlID0gSlNPTi5wYXJzZShjb25maWd1cmF0aW9uKVxyXG4gICAgaWYgKHRoaXMuZHQpIHtcclxuXHJcbiAgICAgIHRoaXMuZHQuY29sdW1uV2lkdGhzU3RhdGUgPSBzdGF0ZS5jb2x1bW5XaWR0aHM7XHJcbiAgICAgIHRoaXMuZHQudGFibGVXaWR0aFN0YXRlID0gc3RhdGUudGFibGVXaWR0aDtcclxuXHJcbiAgICAgIGxldCBjb2x1bW5PcmRlciA9IHN0YXRlLmNvbHVtbk9yZGVyO1xyXG5cclxuICAgICAgaWYgKGNvbHVtbk9yZGVyKSB7XHJcbiAgICAgICAgbGV0IHJlb3JkZXJlZENvbHVtbnMgPSB0aGlzLmdldFJlb3JkZXJlZENvbHVtbnMoY29sdW1uT3JkZXIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcmVvcmRlcmVkQ29sdW1ucztcclxuICAgICAgICB0aGlzLl9jb2x1bW5zID0gdGhpcy5fdGVtcENvbHVtbnM7XHJcbiAgICAgICAgdGhpcy5zb3J0Q29sdW1ucygpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5vdEluU3BlY2lmaWVkQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmltcG9ydGFudENvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzU3RpY2t5Q29sdW1ucygpIHtcclxuICAgIHRoaXMuX2NvbHVtbnMuZm9yRWFjaCgoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChjb2wuaXNGcm96ZW4pIHtcclxuICAgICAgICBjb2wubmdTdHlsZSA9IHRoaXMuZ2V0VGhlU3R5bGUoY29sKVxyXG4gICAgICAgIGNvbC5oZWFkZXJDb2x1bW5TdHlsZSA9IHsgLi4uY29sLm5nU3R5bGUsIHpJbmRleDogMTAwMCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2JveFN0eWxlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNSdGxNb2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcmlnaHQ6IGAwcHhgLFxyXG4gICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgXCJ3aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIFwibWluLXdpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxlZnQ6IGAwcHhgLFxyXG4gICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgXCJ3aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIFwibWluLXdpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUaGVTdHlsZShjb2x1bW46IEdyaWRDb2x1bW4pOiBhbnkge1xyXG5cclxuICAgIGlmICghY29sdW1uLmlzRnJvemVuKSB7XHJcbiAgICAgIHJldHVybiB7fVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4uaXNGcm96ZW4gPT0gdHJ1ZSkge1xyXG4gICAgICBsZXQgZWxlbWVudFBvc2l0aW9uID0gMDtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PSB0aGlzLm11bHRpcGxlR3JpZFNlbGVjdGlvbk1vZGUpIHtcclxuICAgICAgICBlbGVtZW50UG9zaXRpb24gPSAzMCArIGVsZW1lbnRQb3NpdGlvbiArIChjb2x1bW4ub3JkZXIgPz8gMCkgKiA2MDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBlbGVtZW50UG9zaXRpb24gPSBlbGVtZW50UG9zaXRpb24gKyAoKGNvbHVtbi5vcmRlciA/PyAwKSAqIDEuODUpICogMjA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNSdGxNb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHJpZ2h0OiBgJHtlbGVtZW50UG9zaXRpb259cHhgLFxyXG4gICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxyXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxyXG4gICAgICAgICAgXCJ3aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgICAgXCJtaW4td2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBsZWZ0OiBgJHtlbGVtZW50UG9zaXRpb259cHhgLFxyXG4gICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxyXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxyXG4gICAgICAgICAgXCJ3aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgICAgXCJtaW4td2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUnRsTW9kZUVuYWJsZWQoKSB7XHJcbiAgICBpZiAodGhpcy5fbGF5b3V0U2VydmljZS5pc1J0bE1vZGVFbmFibGVkKCkpIHtcclxuICAgICAgdGhpcy5pc1J0bE1vZGUgPSB0cnVlXHJcbiAgICAgIHRoaXMudXBkYXRlUHJpbWVOR1RhYmxlRmlsdGVycygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVByaW1lTkdUYWJsZUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLl9wcmltZW5nQ29uZmlnLnNldFRyYW5zbGF0aW9uKHByaW1lbmdMb2NhbGVBcilcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3J0bE1vZGVTdWJzY3JpYmUoKSB7XHJcbiAgICB0aGlzLl9sYXlvdXRTZXJ2aWNlLmVuYWJsZVJ0bE1vZGVTdWJqZWN0JC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1J0bE1vZGUgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VzKHNlYXJjaEZpZWxkVmFsdWVzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkLmVtaXQoc2VhcmNoRmllbGRWYWx1ZXMpXHJcbiAgfVxyXG5cclxuICBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZSA/IHRoaXMucGFnZS5wYWdlTnVtYmVyID09PSAodGhpcy5wYWdlLnRvdGFsQ291bnQgLSB0aGlzLnBhZ2UucGFnZVNpemUpIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZSA/IHRoaXMucGFnZS5wYWdlTnVtYmVyID09PSAwIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIGVkaXQoaXRlbTogYW55KSB7XHJcbiAgICB0aGlzLmVkaXRSb3cuZW1pdChpdGVtW3RoaXMua2V5XSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUoaXRlbTogYW55KSB7XHJcbiAgICB0aGlzLmRlbGV0ZVJvdy5lbWl0KGl0ZW1bdGhpcy5rZXldKTtcclxuICB9XHJcblxyXG4gIGxhenlMb2FkKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCA9PSBudWxsICYmIHRoaXMucGFnZWRSZXF1ZXN0ID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdCA9IHt9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3Quc2tpcENvdW50ID0gZXZlbnQuZmlyc3QgPT0gMSA/IDAgOiBldmVudC5maXJzdDtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0Lm1heFJlc3VsdENvdW50ID0gZXZlbnQucm93cztcclxuICAgIGlmICh0aGlzLmZvcm1OYW1lICYmIHRoaXMuaXNGaXJzdExvYWRPZlBhZ2UpIHtcclxuICAgICAgdGhpcy5pc0ZpcnN0TG9hZE9mUGFnZSA9IGZhbHNlXHJcbiAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5mb3JtTmFtZSk7XHJcbiAgICAgIGlmIChzdG9yZWRWYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gSlNPTi5wYXJzZShzdG9yZWRWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IHN0cmluZ1tdID0gc2Vzc2lvbkRhdGEuY29sdW1uT3JkZXI7XHJcbiAgICAgICAgY29uc3QgY29sdW1uV2lkdGhzOiBzdHJpbmdbXSA9IHNlc3Npb25EYXRhLmNvbHVtbldpZHRocy5zcGxpdCgnLCcpO1xyXG5cclxuICAgICAgICBjb25zdCB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICAgICAgICBjb2x1bW5PcmRlci5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gY29sdW1uV2lkdGhzW2luZGV4XTtcclxuXHJcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0NvbHVtbkluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGZpZWxkKTtcclxuICAgICAgICAgIGlmIChleGlzdGluZ0NvbHVtbkluZGV4ICE9PSAtMSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNbZXhpc3RpbmdDb2x1bW5JbmRleF0ud2lkdGggPSBjb2x1bW5XaWR0aDtcclxuICAgICAgICAgICAgdXBkYXRlZFNlbGVjdGVkQ29sdW1ucy5wdXNoKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2V4aXN0aW5nQ29sdW1uSW5kZXhdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zO1xyXG5cclxuICAgICAgICBpZiAoKHNlc3Npb25EYXRhLm11bHRpU29ydE1ldGEgJiYgc2Vzc2lvbkRhdGEubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB8fCAoc2Vzc2lvbkRhdGEuZmlsdGVycykpIHtcclxuICAgICAgICAgIGlmIChzZXNzaW9uRGF0YS5tdWx0aVNvcnRNZXRhICYmIHNlc3Npb25EYXRhLm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzZXNzaW9uRGF0YS5tdWx0aVNvcnRNZXRhLmZvckVhY2goKG1ldGE6IHsgZmllbGQ6IGFueTsgb3JkZXI6IGFueTsgfSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBzb3J0TWV0YTogU29ydE1ldGEgPSB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogbWV0YS5maWVsZCxcclxuICAgICAgICAgICAgICAgIG9yZGVyOiBtZXRhLm9yZGVyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGV2ZW50LnNvcnRGaWVsZCA9IG1ldGEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgZXZlbnQuc29ydE9yZGVyID0gbWV0YS5vcmRlcjtcclxuICAgICAgICAgICAgICBldmVudC5tdWx0aVNvcnRNZXRhPy5wdXNoKHNvcnRNZXRhKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoc2Vzc2lvbkRhdGEuZmlsdGVycykge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyczogeyBbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGEgfSA9IHt9O1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhzZXNzaW9uRGF0YS5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGROYW1lLCBmaWx0ZXJNZXRhZGF0YV0pID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJNZXRhZGF0YVZhbHVlID0gZmlsdGVyTWV0YWRhdGEgYXMgW0ZpbHRlck1ldGFkYXRhXTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlck1ldGFkYXRhVmFsdWVbMF0gIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGZpbHRlcnNbZmllbGROYW1lXSA9IGZpbHRlck1ldGFkYXRhVmFsdWVbMF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFzc2lnbiB0aGUgZmlsdGVycyB0byB0aGUgZXZlbnRcclxuICAgICAgICAgICAgZXZlbnQuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgICAgIC8vIGV2ZW50LmZpbHRlcnMgPSBPYmplY3QuZW50cmllcyhzZXNzaW9uRGF0YS5maWx0ZXJzKS5yZWR1Y2UoKGZpbHRlcnM6IHsgW3M6IHN0cmluZ106IEZpbHRlck1ldGFkYXRhIH0sIFtmaWVsZE5hbWUsIGZpbHRlck1ldGFkYXRhIF0gKSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgdmFyIGZpbHRlck1ldGFkYXRhVmFsdWUgPSBmaWx0ZXJNZXRhZGF0YSBhcyBGaWx0ZXJNZXRhZGF0YTtcclxuICAgICAgICAgICAgLy8gICBpZiAoZmlsdGVyTWV0YWRhdGFWYWx1ZS52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgLy8gICAgIGZpbHRlcnNbZmllbGROYW1lXSA9IGZpbHRlck1ldGFkYXRhIGFzIEZpbHRlck1ldGFkYXRhO1xyXG4gICAgICAgICAgICAvLyAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2FsbCBmaWx0ZXJzJywgZmlsdGVycylcclxuICAgICAgICAgICAgLy8gICByZXR1cm4gZmlsdGVycztcclxuICAgICAgICAgICAgLy8gfSwge30pO1xyXG4gICAgICAgICAgICAvLyB0aGlzLnNlYXJjaEZpZWxkcyA9W107XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbHRlcnNBcnJheTogW3N0cmluZywgeyB2YWx1ZTogc3RyaW5nIHwgbnVsbDsgbWF0Y2hNb2RlOiBzdHJpbmcsb3BlcmF0b3IgOiBzdHJpbmcgfVtdXVtdID0gT2JqZWN0LmVudHJpZXMoZGF0YS5maWx0ZXJzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZpbHRlcnNBcnJheS5mb3JFYWNoKChbZmllbGROYW1lLCBmaWVsZFZhbHVlXSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy8gICBmaWVsZFZhbHVlLmZvckVhY2goZmlsdGVyID0+XHJcbiAgICAgICAgICAgIC8vICAgICB7XHJcblxyXG4gICAgICAgICAgICAvLyAgICAgaWYoZmlsdGVyLnZhbHVlKXtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IHNlYXJjaEZpZWxkIDogU2VhcmNoRmllbGQgPXtcclxuICAgICAgICAgICAgLy8gICAgICAgICBmaWVsZCA6ZmllbGROYW1lLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIGxhYmVsVmFsdWUgOiBmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgdmFsdWU6ZmlsdGVyLnZhbHVlLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIHR5cGUgOiB0aGlzLmluZmVySW5wdXRUeXBlKGZpZWxkTmFtZSksXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgb3BlcmF0b3IgOiB0aGlzLmdldE9wZXJhdG9yTnVtYmVyKGZpbHRlci5tYXRjaE1vZGUpXHJcbiAgICAgICAgICAgIC8vICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdzZWFyY2hGaWVsZCcsc2VhcmNoRmllbGQpO1xyXG4gICAgICAgICAgICAvLyAgICAgICBpZiAodGhpcy5zZWFyY2hGaWVsZHMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vICAgICAgIHRoaXMuc2VhcmNoRmllbGRzLnB1c2goc2VhcmNoRmllbGQpO1xyXG4gICAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk5vIHNlc3Npb24gZGF0YSBmb3VuZCBpbiBsb2NhbFN0b3JhZ2VcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2dyaWRIZWFkZXJGaWx0ZXJzID0gdGhpcy5fZXh0cmFjdEZpbHRlcnMoZXZlbnQuZmlsdGVycyk7XHJcbiAgICB0aGlzLl9leHRyYWN0U29ydENyaXRlcmlhcyhldmVudCk7XHJcbiAgICB0aGlzLnNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgZmllbGRzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBmaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zICE9IG51bGwgJiYgdGhpcy5jb2x1bW5zICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgZmllbGRzLnB1c2goY29sLmZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRzO1xyXG4gIH1cclxuXHJcblxyXG4gIGJ1dHRvbkNsaWNrZWQoaXRlbTogYW55LCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7IGZpZWxkOiBmaWVsZCwga2V5OiBpdGVtW3RoaXMua2V5XSwgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5IH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHsgZmllbGQ6IGZpZWxkLCBrZXk6IGl0ZW0sIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGtleXdvcmRWYWx1ZUNoYW5nZWQoa2V5d29yZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkXHJcbiAgfVxyXG5cclxuICBpc0FsbFJlcXVpcmVkU2VhcmNoRmllbGRzSGF2ZVZhbHVlcygpOiBib29sZWFuIHtcclxuICAgIGxldCBpbnZhbGlkU2VhcmNoRmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHNcclxuICAgICAgPy5maWx0ZXIoeCA9PiB4LnJlcXVpcmVkID09IHRydWUgJiYgKHgudmFsdWUgPT0gdW5kZWZpbmVkIHx8IHgudmFsdWUgPT0gJycgfHwgeC52YWx1ZSA9PSBudWxsKSlcclxuXHJcbiAgICBpZiAoaW52YWxpZFNlYXJjaEZpZWxkcyA9PSB1bmRlZmluZWQgfHwgaW52YWxpZFNlYXJjaEZpZWxkcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXVxyXG4gICAgaW52YWxpZFNlYXJjaEZpZWxkcy5mb3JFYWNoKHNlYXJjaEZpZWxkID0+IHtcclxuICAgICAgbWVzc2FnZXMucHVzaChgJHt0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShzZWFyY2hGaWVsZC5sYWJlbFZhbHVlKX0gJHt0aGlzLmxvY2FsaXplLnRyYW5zZm9ybSh0aGlzLnJlcXVpcmVkTG9jYWxpemF0aW9uS2V5KX1gKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZXNGcm9tQXJyYXlTdHJpbmcobWVzc2FnZXMpO1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBpbml0U2VhcmNoT25Jbml0KCkge1xyXG4gICAgbGV0IGludmFsaWRTZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkc1xyXG4gICAgICA/LmZpbHRlcih4ID0+IHgucmVxdWlyZWQgPT0gdHJ1ZSAmJiAoeC52YWx1ZSA9PSB1bmRlZmluZWQgfHwgeC52YWx1ZSA9PSAnJyB8fCB4LnZhbHVlID09IG51bGwpKSA/PyBbXVxyXG5cclxuICAgIGlmICh0aGlzLl9zZWFyY2hPbkluaXQpIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gaW52YWxpZFNlYXJjaEZpZWxkcy5sZW5ndGggPT0gMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2NvbWJvQm94TGFiZWxDaGFuZ2VkKGV2ZW50PzogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XHJcbiAgICB0aGlzLl9leHRyYWN0U2VhcmNoQm94RmlsdGVycygpO1xyXG4gICAgdGhpcy5fZ2VuZXJhdGVGaWx0ZXJzSHRtbFRlbXBsYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2goZXZ0OiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcInNlYXJjaD4+PlwiLCB0aGlzLnNlYXJjaEZpZWxkcylcclxuICAgIC8vc2V0IGdsb2JhbCBmaWx0ZXIgdmFsdWVcclxuXHJcbiAgICB0aGlzLl9leHRyYWN0T25seVZpc2libGVTZWFyY2hGaWVsZHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdlZFJlcXVlc3QgJiYgdGhpcy5pc0FsbFJlcXVpcmVkU2VhcmNoRmllbGRzSGF2ZVZhbHVlcygpKSB7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0LnN1bW1hcmllcyA9IHRoaXMuX2V4dHJhY3RIYXZlU3VtbWFyeVByb3BlcnRpZXMoKTtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3Quc29ydGluZyA9IHRoaXMuX3NvcnQ7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0LmtleXdvcmQgPSB0aGlzLmtleXdvcmQ7XHJcblxyXG4gICAgICAvL2FkZCBzZWFyY2ggYm94IGZpbHRlcnNcclxuICAgICAgdGhpcy5fZXh0cmFjdFNlYXJjaEJveEZpbHRlcnMoKTtcclxuXHJcbiAgICAgIC8vZ2VuZXJhdGUgZmlsdGVycyBodG1sIHRlbXBsYXRlXHJcbiAgICAgIHRoaXMuX2dlbmVyYXRlRmlsdGVyc0h0bWxUZW1wbGF0ZSgpO1xyXG4gICAgICAvL2Nsb25lXHJcblxyXG4gICAgICBsZXQgbmV3UmVxdWVzdDogSVBhZ2VkUmVxdWVzdCA9IHRoaXMuX2Nsb25lUGFnZWRSZXF1ZXN0KHRoaXMucGFnZWRSZXF1ZXN0KTtcclxuXHJcbiAgICAgIC8vY29uY2F0IGZpbHRlcnNcclxuICAgICAgbmV3UmVxdWVzdC5maWx0ZXJzID0gWy4uLnRoaXMuX2dyaWRIZWFkZXJGaWx0ZXJzLCAuLi50aGlzLl9zZWFyY2hCb3hGaWx0ZXJzXTtcclxuXHJcbiAgICAgIC8vZXhjbHVkZSB1c2VsZXNzIGZpbHRlcnNcclxuICAgICAgbmV3UmVxdWVzdCA9IHRoaXMuX2V4Y2x1ZGVVc2VsZXNzRmlsdGVycyhuZXdSZXF1ZXN0KTtcclxuXHJcbiAgICAgIC8vIHRlc3QgaWYgZmlsdGVycyB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgICBpZiAoKHRoaXMubGF0ZXN0RmlsdGVycyA/IEpTT04uc3RyaW5naWZ5KHRoaXMubGF0ZXN0RmlsdGVycykgOiBudWxsKVxyXG4gICAgICAgICE9PSAobmV3UmVxdWVzdC5maWx0ZXJzID8gSlNPTi5zdHJpbmdpZnkobmV3UmVxdWVzdC5maWx0ZXJzKSA6IG51bGwpKSB7XHJcbiAgICAgICAgbmV3UmVxdWVzdC5za2lwQ291bnQgPSAwO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kdCkge1xyXG4gICAgICAgICAgdGhpcy5kdC5maXJzdCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzYXZlIGxhdGVzdCBmaWx0ZXJzXHJcbiAgICAgIHRoaXMubGF0ZXN0RmlsdGVycyA9IG5ld1JlcXVlc3QuZmlsdGVycztcclxuXHJcbiAgICAgIHRoaXMubG9hZC5lbWl0KHsgcmVxdWVzdDogbmV3UmVxdWVzdCwgaXNGb3JDYWxlbmRhcjogdGhpcy5fc2hvd0NhbGVuZGVyVmlldyB9KTtcclxuXHJcbiAgICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGaXJzdEVsZW1lbnRJbmRleCgpOiBudW1iZXIge1xyXG4gICAgaWYgKCF0aGlzLmR0KSByZXR1cm4gMDtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdlLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5kdC5maXJzdCA9PT0gMCA/IDEgOiAodGhpcy5kdD8uZmlyc3QgPz8gMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdW1tYXJ5KGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHN1bW1hcnlSb3cgPSB0aGlzLnBhZ2Uuc3VtbWFyaWVzXHJcbiAgICAgIC5maW5kKHMgPT4gcy5wcm9wcmV0eS50b1VwcGVyQ2FzZSgpID09IGZpZWxkLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgaWYgKHN1bW1hcnlSb3cpIHtcclxuICAgICAgcmV0dXJuIHN1bW1hcnlSb3cuc3VtbWFyeTtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKCkge1xyXG4gICAgbGV0IHNlbGVjdGlvbjogYW55W10gPSBbXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICAgICAgbGV0IGtleXM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmZvckVhY2goKHY6IGFueSkgPT4geyBrZXlzLnB1c2godlt0aGlzLmtleV0pIH0pO1xyXG4gICAgICAgICAgc2VsZWN0aW9uID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0aW9uID0gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PSBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uID8gW3RoaXMuc2VsZWN0aW9uW3RoaXMua2V5XV0gOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbiA/IFt0aGlzLnNlbGVjdGlvbl0gOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPSBHcmlkU2VsZWN0aW9uTW9kZS5Ob25lKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHNlbGVjdGlvbilcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGE/LmlzQWR2YW5jZWRTZWFyY2ggJiYgc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0aW9uKVxyXG4gICAgICB0aGlzLl9yZWY/LmNsb3NlKHNlbGVjdGlvblswXSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbENoYW5nZShldmVudDogVGFibGVTZWxlY3RBbGxDaGFuZ2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PSBHcmlkU2VsZWN0aW9uTW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RBbGwgPSBldmVudC5jaGVja2VkO1xyXG4gICAgICBpZiAodGhpcy5fc2VsZWN0QWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tlZEJ5RmllbGQgJiYgdGhpcy5jaGVja2VkQnlGaWVsZC50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMucGFnZS5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gaXRlbVt0aGlzLmNoZWNrZWRCeUZpZWxkXSA9PT0gdHJ1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLnBhZ2UuaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vblNlbGVjdGVkSXRlbXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBvblNlbGVjdGVkQ29sdW1uc0NoYW5nZSgpIHtcclxuICAvLyAgIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgLy8gICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5mb3JtTmFtZSk7XHJcblxyXG4gIC8vICAgICBpZiAoc3RvcmVkVmFsdWUpIHtcclxuICAvLyAgICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xyXG4gIC8vICAgICAgIGxldCBjb2x1bW5PcmRlcjogc3RyaW5nW10gPSBbXTtcclxuICAvLyAgICAgICBsZXQgY29sdW1uV2lkdGhzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIC8vICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gIC8vICAgICAgICAgaWYgKGl0ZW0uZmllbGQgPT09ICd1cGxvYWQnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBlbHNlIGlmIChpdGVtLmZpZWxkID09PSAnZG93bmxvYWQnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBlbHNlIGlmIChpdGVtLmZpZWxkID09PSAnY29uc3VsdCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goaXRlbSk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGVsc2UgaWYgKGl0ZW0uZmllbGQgPT09ICdkZWxldGUnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBlbHNlIGlmIChpdGVtLmZpZWxkID09PSAnZWRpdCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goaXRlbSk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoYS5vcmRlciAhPT0gdW5kZWZpbmVkICYmIGIub3JkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gIC8vICAgICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICByZXR1cm4gMDtcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKHNlbGVjdGVkQ29sdW1uID0+IHtcclxuICAvLyAgICAgICAgIGNvbHVtbk9yZGVyLnB1c2goc2VsZWN0ZWRDb2x1bW4uZmllbGQpO1xyXG4gIC8vICAgICAgICAgY29uc3Qgc2VsZWN0ZWRXaWR0aCA9IHNlbGVjdGVkQ29sdW1uLm1pbldpZHRoO1xyXG4gIC8vICAgICAgICAgaWYgKHNlbGVjdGVkV2lkdGgpIHtcclxuICAvLyAgICAgICAgICAgY29sdW1uV2lkdGhzLnB1c2goc2VsZWN0ZWRXaWR0aC50b1N0cmluZygpKTtcclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIC8vY29sdW1uV2lkdGhzLnB1c2goJzkwJyk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgLy8gICAgICAgc2Vzc2lvbkRhdGEuY29sdW1uT3JkZXIgPSBjb2x1bW5PcmRlcjtcclxuICAvLyAgICAgICBzZXNzaW9uRGF0YS5jb2x1bW5XaWR0aHMgPSBjb2x1bW5XaWR0aHMuam9pbignLCcpO1xyXG5cclxuICAvLyAgICAgICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZm9ybU5hbWUsIEpTT04uc3RyaW5naWZ5KHNlc3Npb25EYXRhKSk7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgLy9jb25zdCByZXN1bHQgPSB0aGlzLmdlbmVyYXRlVGFibGVDb25maWdKU09OKCk7XHJcbiAgLy8gICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmZvcm1OYW1lLCByZXN1bHQpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZW5lcmF0ZVRhYmxlQ29uZmlnSlNPTigpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3QgdGFibGVDb25maWcgPSBKU09OLnBhcnNlKHRoaXMuanNvblN0cmluZ0xheW91dCk7XHJcbiAgLy8gICB0YWJsZUNvbmZpZy5jb2x1bW5PcmRlciA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkKTtcclxuICAvLyAgIC8vdGFibGVDb25maWcuY29sdW1uV2lkdGhzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKCgpID0+ICc5MCcpLmpvaW4oJywnKTtcclxuICAvLyAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0YWJsZUNvbmZpZyk7XHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG4gIG9uU3RhdGVSZXN0b3JlKHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpIHtcclxuICAgIGlmICh0YWJsZVN0YXRlLnNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbiA9IHRhYmxlU3RhdGUuc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMub25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgIC8vICAgY29uc3Qgc3RvcmVkVmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmZvcm1OYW1lKTtcclxuICAgIC8vICAgaWYgKHN0b3JlZFZhbHVlKSB7XHJcbiAgICAvLyAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnBhcnNlKHN0b3JlZFZhbHVlKTtcclxuICAgIC8vICAgICBjb25zdCBjb2x1bW5PcmRlcjogc3RyaW5nW10gPSBzZXNzaW9uRGF0YS5jb2x1bW5PcmRlcjtcclxuICAgIC8vICAgICBjb25zdCBjb2x1bW5XaWR0aHM6IHN0cmluZ1tdID0gc2Vzc2lvbkRhdGEuY29sdW1uV2lkdGhzLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgLy8gICAgIC8vIFVwZGF0ZSBzZWxlY3RlZENvbHVtbnMgYmFzZWQgb24gY29sdW1uT3JkZXIgYW5kIGNvbHVtbldpZHRoc1xyXG4gICAgLy8gICAgIGNvbnN0IHVwZGF0ZWRTZWxlY3RlZENvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gICAgLy8gICAgIGNvbHVtbk9yZGVyLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG4gICAgLy8gICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aHNbaW5kZXhdO1xyXG4gICAgLy8gICAgICAgLy8gRmluZCB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW4gaW4gc2VsZWN0ZWRDb2x1bW5zXHJcbiAgICAvLyAgICAgICBjb25zdCBleGlzdGluZ0NvbHVtbkluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGZpZWxkKTtcclxuICAgIC8vICAgICAgIGlmIChleGlzdGluZ0NvbHVtbkluZGV4ICE9PSAtMSkge1xyXG4gICAgLy8gICAgICAgICAvLyBJZiB0aGUgY29sdW1uIGV4aXN0cyBpbiBzZWxlY3RlZENvbHVtbnMsIHVwZGF0ZSBpdHMgd2lkdGhcclxuICAgIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNbZXhpc3RpbmdDb2x1bW5JbmRleF0ud2lkdGggPSBjb2x1bW5XaWR0aDtcclxuICAgIC8vICAgICAgICAgdXBkYXRlZFNlbGVjdGVkQ29sdW1ucy5wdXNoKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2V4aXN0aW5nQ29sdW1uSW5kZXhdKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgLy8gVXBkYXRlIHNlbGVjdGVkQ29sdW1ucyB3aXRoIHRoZSByZXN0b3JlZCBkYXRhXHJcbiAgICAvLyAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zO1xyXG5cclxuXHJcbiAgICAvLyAgICAgICBpZihzdG9yZWRWYWx1ZSl7XHJcblxyXG4gICAgLy8gICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzdG9yZWRWYWx1ZSk7XHJcbiAgICAvLyAgICAgICAgIGlmICgoZGF0YS5tdWx0aVNvcnRNZXRhICYmIGRhdGEubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB8fCAoZGF0YS5maWx0ZXJzICYmIGRhdGEubXVsdGlTb3J0TWV0YS5maWx0ZXJzID4gMCkpIHtcclxuICAgIC8vICAgICAgICAgICBpZiAoZGF0YS5tdWx0aVNvcnRNZXRhICYmIGRhdGEubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBkYXRhLm11bHRpU29ydE1ldGEuZm9yRWFjaCgobWV0YTogeyBmaWVsZDogYW55OyBvcmRlcjogYW55OyB9KSA9PiB7IFxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IHNvcnQgPSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGEuZmllbGQsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgb3JkZXI6IG1ldGEub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IFtzb3J0XTtcclxuICAgIC8vICAgICAgICAgICAgIH0pOyAgXHJcbiAgICAvLyAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIGlmIChkYXRhLmZpbHRlcnMpIHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuc2VhcmNoRmllbGRzID1bXTtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnNBcnJheTogW3N0cmluZywgeyB2YWx1ZTogc3RyaW5nIHwgbnVsbDsgbWF0Y2hNb2RlOiBzdHJpbmcsb3BlcmF0b3IgOiBzdHJpbmcgfVtdXVtdID0gT2JqZWN0LmVudHJpZXMoZGF0YS5maWx0ZXJzKTtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICBmaWx0ZXJzQXJyYXkuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmllbGRWYWx1ZV0pID0+IHtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgIGZpZWxkVmFsdWUuZm9yRWFjaChmaWx0ZXIgPT5cclxuICAgIC8vICAgICAgICAgICAgICAgICB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmKGZpbHRlci52YWx1ZSl7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoRmllbGQgOiBTZWFyY2hGaWVsZCA9e1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBmaWVsZCA6ZmllbGROYW1lLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlIDogZmlsdGVyLnZhbHVlLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB2YWx1ZTpmaWx0ZXIudmFsdWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiB0aGlzLmluZmVySW5wdXRUeXBlKGZpZWxkTmFtZSksXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIDogdGhpcy5nZXRPcGVyYXRvck51bWJlcihmaWx0ZXIubWF0Y2hNb2RlKVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWFyY2hGaWVsZCcsc2VhcmNoRmllbGQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRmllbGRzKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGaWVsZHMucHVzaChzZWFyY2hGaWVsZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICB0aGlzLnNlYXJjaCgpO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgfVxyXG5cclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIk5vIHNlc3Npb24gZGF0YSBmb3VuZCBpbiBsb2NhbFN0b3JhZ2VcIik7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uQ2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kdD8uY2xlYXIoKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMuZm9ybU5hbWV9LWZpbHRlck1vZGVgKVxyXG4gIH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JOdW1iZXIob3BlcmF0b3I6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlW29wZXJhdG9yLnRvVXBwZXJDYXNlKCkgYXMga2V5b2YgdHlwZW9mIEZpbHRlck9wZXJhdG9yVHlwZV0gPz8gLTE7XHJcbiAgfVxyXG4gIGluZmVySW5wdXRUeXBlKHZhbHVlOiBhbnkpOiBJbnB1dFR5cGVzIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBJbnB1dFR5cGVzLklOVEVHRVI7XHJcbiAgICAgIH0gZWxzZSBpZiAoL15cXGQrXFwuXFxkKyQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIElucHV0VHlwZXMuREVDSU1BTF9JTlBVVDtcclxuICAgICAgfSBlbHNlIGlmICgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gSW5wdXRUeXBlcy5EQVRFO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBJbnB1dFR5cGVzLlRFWFRfQk9YO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gSW5wdXRUeXBlcy5URVhUX0JPWDtcclxuICAgIH1cclxuICB9XHJcbiAgbG9hZEluaXRpYWxTdGF0ZSgpIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2VbJ2dldCddKCd0YWJsZS1zdGF0ZScpO1xyXG4gIH1cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdEZpbHRlcnMoZXZlbnQ6IEZpbHRlck1ldGFkYXRhW10gfCBhbnkpOiBJRmlsdGVyZWRSZXF1ZXN0W10ge1xyXG4gICAgbGV0IGZpbHRlcnM6IElGaWx0ZXJlZFJlcXVlc3RbXSA9IFtdO1xyXG4gICAgaWYgKGV2ZW50ICE9IG51bGxcclxuICAgICAgJiZcclxuICAgICAgZXZlbnQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICBsZXQgY3VycmVuY3k6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNvbC5jdXJyZW5jeU90aGVyQ29kZTtcclxuICAgICAgICBpZiAoY29sLnR5cGUgPT0gdGhpcy5kaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZKSB7XHJcbiAgICAgICAgICBjdXJyZW5jeSA9IHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLmFwcFNldHRpbmdzLmRldmlzZVNvY2lldGUuY29kZURldmlzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50ICE9IG51bGxcclxuICAgICAgICAgICYmXHJcbiAgICAgICAgICBldmVudCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXIgPSBldmVudFtjb2wuZmllbGRdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX25vdE51bGxPclVuZGVmaW5lZChmaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbm90TnVsbE9yVW5kZWZpbmVkKGl0ZW0udmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShpdGVtLnZhbHVlLCAneXl5eS1NTS1kZCcpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IEZpbHRlckhlbHBlci5Ub09wZXJhdG9yVHlwZShpdGVtLm1hdGNoTW9kZSlcclxuICAgICAgICAgICAgICAgICAgICAsIGZpbHRlclZhbHVlOiBpdGVtLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgLCBwcm9wcmV0eU5hbWU6IGNvbC5maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICwgaGVhZGVyOiBjb2wuaGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgLCB0eXBlOiBGaWx0ZXJIZWxwZXIuVG9JbnB1dFR5cGUoY29sLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLCBjdXJyZW5jeTogY3VycmVuY3lcclxuICAgICAgICAgICAgICAgICAgICAsIG51bU9mRGVjaW1hbDogY29sLm51bU9mRGVjaW1hbFxyXG4gICAgICAgICAgICAgICAgICAgICwgaXNGcmFjdGlvbjogY29sLmlzRnJhY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAsIGNvbWJvYm94TGFiZWw6IGNvbC5jb21ib0xhYmVsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci52YWx1ZSwgJ3l5eXktTU0tZGQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBGaWx0ZXJIZWxwZXIuVG9PcGVyYXRvclR5cGUoZmlsdGVyLm1hdGNoTW9kZSlcclxuICAgICAgICAgICAgICAgICAgLCBmaWx0ZXJWYWx1ZTogZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICwgcHJvcHJldHlOYW1lOiBjb2wuZmllbGRcclxuICAgICAgICAgICAgICAgICAgLCBoZWFkZXI6IGNvbC5oZWFkZXJcclxuICAgICAgICAgICAgICAgICAgLCB0eXBlOiBGaWx0ZXJIZWxwZXIuVG9JbnB1dFR5cGUoY29sLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICwgY3VycmVuY3k6IGN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICAgICwgbnVtT2ZEZWNpbWFsOiBjb2wubnVtT2ZEZWNpbWFsXHJcbiAgICAgICAgICAgICAgICAgICwgaXNGcmFjdGlvbjogY29sLmlzRnJhY3Rpb25cclxuICAgICAgICAgICAgICAgICAgLCBjb21ib2JveExhYmVsOiBjb2wuY29tYm9MYWJlbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFNvcnRDcml0ZXJpYXMobGF6eUxvYWRFdmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgc29ydE1ldGEgPSB0aGlzLl90b1NvcnRNZXRhKGxhenlMb2FkRXZlbnQpO1xyXG4gICAgaWYgKHNvcnRNZXRhKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuU2luZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFjdFNpbmdsZVNvcnRDcml0ZXJpYShzb3J0TWV0YSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuTXVsdGlwbGUpIHtcclxuICAgICAgICB0aGlzLl9leHRyYWN0TXVsdGlwbGVTb3J0Q3JpdGVyaWFzKHNvcnRNZXRhKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0U2luZ2xlU29ydENyaXRlcmlhKHNvck1ldGE6IFNvcnRNZXRhKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gR3JpZFNvcnRNb2RlLlNpbmdsZSkge1xyXG4gICAgICBpZiAoc29yTWV0YS5maWVsZCkge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgc29ydCBlbGVtZW50XHJcbiAgICAgICAgbGV0IHNvcnQ6IElTb3J0QnlQcm9wcmV0eSA9IHtcclxuICAgICAgICAgIHByb3BlcnR5OiBzb3JNZXRhLmZpZWxkLFxyXG4gICAgICAgICAgb3JkZXI6IHNvck1ldGEub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NvcnQgPSBbc29ydF1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBwcm9jZXNzIFxcJ1NpbmdsZVNvcnRcXCcgd2hlbiBbc29ydE1vZGVdIGlzIFxcJ211bHRpcGxlXFwnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0TXVsdGlwbGVTb3J0Q3JpdGVyaWFzKHNvcnRNZXRhczogU29ydE1ldGFbXSkge1xyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICBpZiAoc29ydE1ldGFzICYmIEFycmF5LmlzQXJyYXkoc29ydE1ldGFzKSkge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgc29ydCBlbGVtZW50XHJcbiAgICAgICAgdGhpcy5fc29ydCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc29ydE1ldGFzID0gc29ydE1ldGFzO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ21ldGEgJywgc29ydE1ldGFzKVxyXG4gICAgICAgIHNvcnRNZXRhcy5mb3JFYWNoKHNtID0+IHtcclxuICAgICAgICAgIGlmIChzbS5maWVsZCkge1xyXG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IHNvcnQgZWxlbWVudFxyXG4gICAgICAgICAgICBsZXQgc29ydDogSVNvcnRCeVByb3ByZXR5ID0ge1xyXG4gICAgICAgICAgICAgIHByb3BlcnR5OiBzbS5maWVsZCxcclxuICAgICAgICAgICAgICBvcmRlcjogc20ub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vYWRkIHRoZSBuZXcgZWxlbWVudCB0byBfc29ydFxyXG4gICAgICAgICAgICB0aGlzLl9zb3J0LnB1c2goc29ydCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgcHJvY2VzcyBcXCdNdWx0aXBsZVNvcnRcXCcgd2hlbiBbc29ydE1vZGVdIGlzIFxcJ3NpbmdsZVxcJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbm90TnVsbE9yVW5kZWZpbmVkKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqICE9IG51bGxcclxuICAgICAgJiYgb2JqICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RPbmx5VmlzaWJsZVNlYXJjaEZpZWxkcygpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25TZXR0aW5ncyAmJlxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblNldHRpbmdzLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy50ZW1wU2VhcmNoRmllbGRzXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPSB0aGlzLnRlbXBTZWFyY2hGaWVsZHMuZmlsdGVyKHNmID0+IHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnByZXNlbnRhdGlvblNldHRpbmdzPy5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsc1xyXG4gICAgICAgICAgLmZpbmQocCA9PiBwLmJsb2NrTmFtZSA9PT0gc2YuZmllbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gIWNvbmZpZyB8fCBjb25maWcuaXNCbG9ja1Zpc2libGUgPT09IHRydWUgfHwgY29uZmlnLmlzQmxvY2tWaXNpYmxlID09PSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFNlYXJjaEJveEZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZWFyY2hCb3hGaWx0ZXJzID0gW107XHJcbiAgICBpZiAodGhpcy5zZWFyY2hGaWVsZHMpIHtcclxuXHJcbiAgICAgIHRoaXMuX2V4dHJhY3RPbmx5VmlzaWJsZVNlYXJjaEZpZWxkcygpO1xyXG5cclxuICAgICAgdGhpcy5zZWFyY2hGaWVsZHMuZm9yRWFjaCgoc2Y6IFNlYXJjaEZpZWxkKSA9PiB7XHJcbiAgICAgICAgLy9pZiAoc2YudmFsdWUgIT0gdW5kZWZpbmVkICYmIHNmLnZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoc2Yub3BlcmF0b3IgIT0gbnVsbCAmJiBzZi5vcGVyYXRvciAhPSB1bmRlZmluZWQgJiYgc2YudmFsdWUgIT0gdW5kZWZpbmVkICYmIHNmLnZhbHVlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyQnlQcm9wZXJ0eTogSUZpbHRlcmVkUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgb3BlcmF0b3I6IHNmLm9wZXJhdG9yXHJcbiAgICAgICAgICAgICwgZmlsdGVyVmFsdWU6IHNmLnZhbHVlXHJcbiAgICAgICAgICAgICwgcHJvcHJldHlOYW1lOiBzZi5maWVsZFxyXG4gICAgICAgICAgICAsIGhlYWRlcjogc2YubGFiZWxWYWx1ZVxyXG4gICAgICAgICAgICAsIHR5cGU6IHNmLnR5cGVcclxuICAgICAgICAgICAgLCBjb21ib2JveExhYmVsOiBzZi5jb21ib2JveExhYmVsXHJcbiAgICAgICAgICAgICwgY3VycmVuY3k6IHNmLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICwgaXNGcmFjdGlvbjogc2YuaXNGcmFjdGlvblxyXG4gICAgICAgICAgICAsIG51bU9mRGVjaW1hbDogc2YubnVtT2ZEZWNpbWFsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoQm94RmlsdGVycy5wdXNoKGZpbHRlckJ5UHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzZi5vcGVyYXRvciA9PSB1bmRlZmluZWQgfHwgc2Yub3BlcmF0b3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aGUgc2VhcmNoIGZpZWxkIHdpdGggW2ZpZWxkIDogJHtzZi5maWVsZH1dIGhhdmUgbm8gb3BlcmF0b3JzYClcclxuICAgICAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvbmVQYWdlZFJlcXVlc3QocmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgbGV0IGNsb25lOiBJUGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogcmVxdWVzdC5tYXhSZXN1bHRDb3VudCxcclxuICAgICAgc2tpcENvdW50OiByZXF1ZXN0LnNraXBDb3VudCxcclxuICAgICAgc29ydGluZzogcmVxdWVzdC5zb3J0aW5nLFxyXG4gICAgICBrZXl3b3JkOiByZXF1ZXN0LmtleXdvcmQsXHJcbiAgICAgIGZpbHRlcnM6IHJlcXVlc3QuZmlsdGVycyxcclxuICAgICAgZ2V0QWxsRGF0YTogcmVxdWVzdC5nZXRBbGxEYXRhLFxyXG4gICAgICBzdW1tYXJpZXM6IHJlcXVlc3Quc3VtbWFyaWVzXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdEhhdmVTdW1tYXJ5UHJvcGVydGllcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgIGxldCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBsZXQgaGF2ZVN1bW1hcnlDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMuaGF2ZVN1bW1hcnkgPT09IHRydWUpO1xyXG4gICAgaWYgKGhhdmVTdW1tYXJ5Q29sdW1ucyAmJiBoYXZlU3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwcm9wZXJ0aWVzID0gaGF2ZVN1bW1hcnlDb2x1bW5zLm1hcChjID0+IGMuZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFN1bW1hcmllcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBhZ2Uuc3VtbWFyaWVzKSB7XHJcbiAgICAgIHRoaXMucGFnZS5zdW1tYXJpZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICB0aGlzLnN1bW1hcmllc1tzLnByb3ByZXR5XSA9IHMuc3VtbWFyeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0TXVsdGlTb3J0TWV0YUl0ZW1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc29ydCA9IFtdO1xyXG4gICAgaWYgKHRoaXMuc29ydE1ldGFzKSB7XHJcbiAgICAgIHRoaXMuc29ydE1ldGFzLmZvckVhY2goKHM6IFNvcnRNZXRhKSA9PiB7XHJcbiAgICAgICAgbGV0IHNvcnQ6IElTb3J0QnlQcm9wcmV0eSA9IHtcclxuICAgICAgICAgIHByb3BlcnR5OiBzLmZpZWxkLFxyXG4gICAgICAgICAgb3JkZXI6IHMub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc29ydEl0ZW0gPSB0aGlzLl9zb3J0LmZpbmQocyA9PiBzLnByb3BlcnR5ID09IHNvcnQucHJvcGVydHkpO1xyXG5cclxuICAgICAgICBpZiAoc29ydEl0ZW0pIHtcclxuICAgICAgICAgIGlmIChzb3J0SXRlbS5vcmRlciAhPSBzb3J0Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgIHNvcnRJdGVtLm9yZGVyID0gc29ydC5vcmRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zb3J0LnB1c2goc29ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RvU29ydE1ldGEodGFibGVMYXp5TG9hZEV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5TaW5nbGUpIHtcclxuICAgICAgaWYgKHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0RmllbGQgJiYgdGFibGVMYXp5TG9hZEV2ZW50LnNvcnRPcmRlcikge1xyXG4gICAgICAgIGxldCBzb3J0TWV0YTogSVNvcnRNZXRhID0ge1xyXG4gICAgICAgICAgZmllbGQ6IHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0RmllbGQsXHJcbiAgICAgICAgICBvcmRlcjogdGFibGVMYXp5TG9hZEV2ZW50LnNvcnRPcmRlclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc29ydE1ldGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICBpZiAodGFibGVMYXp5TG9hZEV2ZW50Lm11bHRpU29ydE1ldGEpIHtcclxuICAgICAgICByZXR1cm4gdGFibGVMYXp5TG9hZEV2ZW50Lm11bHRpU29ydE1ldGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFtzb3J0TW9kZV0gaGF2ZSBiZWVuIHNldCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVGaWx0ZXJzSHRtbFRlbXBsYXRlKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSA9IFwiXCJcclxuICAgIC8vZXhjbHVkZSB1c2VsZXNzIEdyaWQgZmlsdGVyIFxyXG4gICAgdGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPSB0aGlzLl9leGNsdWRlVXNlbGVzc0dyaWRGaWx0ZXIodGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMpXHJcblxyXG4gICAgLy9hZGQgc2VhcmNoIEJveCBmaWx0ZXJzIGh0bWxcclxuICAgIGlmICh0aGlzLl9zZWFyY2hCb3hGaWx0ZXJzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSA9IHRoaXMuX2h0bWxUZW1wbGF0ZUdlbmVyYXRvclNlcnZpY2VcclxuICAgICAgICAuZ2VuZXJhdGVHcmlkRmlsdGVyc1RlbXBsYXRlKHRoaXMuX3NlYXJjaEJveEZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPT0+IFwiLCB0aGlzLl9ncmlkSGVhZGVyRmlsdGVycylcclxuXHJcbiAgICAvL2FkZCBncmlkIGhlYWRlciBmaWx0ZXJzIGh0bWxcclxuICAgIGlmICh0aGlzLl9ncmlkSGVhZGVyRmlsdGVycykge1xyXG4gICAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUgKz0gdGhpcy5faHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZVxyXG4gICAgICAgIC5nZW5lcmF0ZUdyaWRGaWx0ZXJzVGVtcGxhdGUodGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGVDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4Y2x1ZGVVc2VsZXNzR3JpZEZpbHRlcihmaWx0ZXJzOiBJRmlsdGVyZWRSZXF1ZXN0W10pIHtcclxuICAgIHJldHVybiBmaWx0ZXJzLmZpbHRlcih4ID0+XHJcbiAgICAgIHguZmlsdGVyVmFsdWUgIT09IG51bGwgJiYgeC5maWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHguZmlsdGVyVmFsdWUgIT09IFwiXCIgJiYgeC5vcGVyYXRvciAhPT0gdW5kZWZpbmVkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhjbHVkZVVzZWxlc3NGaWx0ZXJzKHBhZ2VkUmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgaWYgKHBhZ2VkUmVxdWVzdCAmJiBwYWdlZFJlcXVlc3QuZmlsdGVycykge1xyXG4gICAgICBwYWdlZFJlcXVlc3QuZmlsdGVycyA9IHBhZ2VkUmVxdWVzdC5maWx0ZXJzLmZpbHRlcihmID0+IGYuZmlsdGVyVmFsdWUgIT0gdW5kZWZpbmVkICYmIGYuZmlsdGVyVmFsdWUgIT0gbnVsbClcclxuICAgIH1cclxuICAgIHJldHVybiBwYWdlZFJlcXVlc3Q7XHJcbiAgfVxyXG5cclxuICBleHBvcnRFeGNlbCgpIHtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ISEuZ2V0QWxsRGF0YSA9IHRydWVcclxuICAgIGlmICh0aGlzLmNydWRTZXJ2aWNlICE9IG51bGwgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5pc0dyaWREYXRhUGFnZWRJbkFwaSkge1xyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEFsbFBhZ2VkKHRoaXMucGFnZWRSZXF1ZXN0ISEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBJUGFnZWRSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEl0ZW1zID0gRXhwb3J0RXhjZWxIZWxwZXIucHJlcHJvY2Vzc0RhdGVGb3JFeGNlbCh2YWx1ZS5pdGVtcyk7XHJcbiAgICAgICAgICAgIHZhbHVlLml0ZW1zID0gZm9ybWF0dGVkSXRlbXM7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YUZyb21BcGlUb0V4Y2VsU2hlZXQodmFsdWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZmlsdGVyZWREYXRhID0gdGhpcy5wYWdlLml0ZW1zLmZpbHRlcigoY29sOiBhbnkpID0+ICFjb2wuaXNCdXR0b24pO1xyXG4gICAgICBmaWx0ZXJlZERhdGEgPSBFeHBvcnRFeGNlbEhlbHBlci5wcmVwcm9jZXNzRGF0ZUZvckV4Y2VsKGZpbHRlcmVkRGF0YSk7XHJcbiAgICAgIHRoaXMucGFnZS5pdGVtcyA9IGZpbHRlcmVkRGF0YVxyXG4gICAgICB0aGlzLmV4cG9ydERhdGFGcm9tQXBpVG9FeGNlbFNoZWV0KHRoaXMucGFnZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydERhdGFGcm9tQXBpVG9FeGNlbFNoZWV0KHZhbHVlOiBhbnkpIHtcclxuICAgIGltcG9ydChcInhsc3hcIikudGhlbih4bHN4ID0+IHtcclxuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB4bHN4LnV0aWxzLmJvb2tfbmV3KCk7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCEuZmlsdGVycz8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICBjb25zdCBtYXBwZWRGaWx0ZXJzID0gdGhpcy5wYWdlZFJlcXVlc3QhLmZpbHRlcnM/Lm1hcChmaWx0ZXIgPT4gKHtcclxuICAgICAgICAgIHByb3BlcnR5OiBmaWx0ZXIucHJvcHJldHlOYW1lLFxyXG4gICAgICAgICAgb3BlcmF0b3JOYW1lOiB0aGlzLmdldEZpbHRlck9wZXJhdG9yTmFtZShmaWx0ZXIub3BlcmF0b3IpLFxyXG4gICAgICAgICAgdmFsdWU6IGZpbHRlci5maWx0ZXJWYWx1ZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0geGxzeC51dGlscy5qc29uX3RvX3NoZWV0KDxhbnlbXT5tYXBwZWRGaWx0ZXJzKVxyXG4gICAgICAgIHhsc3gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIGZpbHRlcnMsICdGaWx0ZXJzJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBzZWxlY3RlZENvbHVtbnNGaWVsZHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoeCA9PiAheC5pc0J1dHRvbikubWFwKGNvbHVtbiA9PiBjb2x1bW4udHJhbnNsYXRlZEhlYWRlciEhKVxyXG4gICAgICBzZWxlY3RlZENvbHVtbnNGaWVsZHMgPSBzZWxlY3RlZENvbHVtbnNGaWVsZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gJycpXHJcbiAgICAgIGNvbnN0IHdvcmtzaGVldERhdGEgPSB2YWx1ZS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvd0RhdGE6IHsgW2hlYWRlcjogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgcm93RGF0YVtjb2wudHJhbnNsYXRlZEhlYWRlciEhXSA9IGl0ZW1bY29sLmZpZWxkXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcm93RGF0YTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkV29ya3NoZWV0RGF0YSA9IHRoaXMucmVtb3ZlTm9uRXhpc3RpbmdDb2x1bW5zKHdvcmtzaGVldERhdGEsIHNlbGVjdGVkQ29sdW1uc0ZpZWxkcylcclxuICAgICAgY29uc3Qgd29ya3NoZWV0ID0geGxzeC51dGlscy5qc29uX3RvX3NoZWV0KGZpbHRlcmVkV29ya3NoZWV0RGF0YSk7XHJcbiAgICAgIHhsc3gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIHdvcmtzaGVldCwgJ0RhdGEnKTtcclxuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHsgYm9va1R5cGU6ICd4bHN4JywgdHlwZTogJ2FycmF5JyB9KTtcclxuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIFwiZXhjZWxcIik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XHJcbiAgICBsZXQgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcclxuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICB0eXBlOiBFWENFTF9UWVBFXHJcbiAgICB9KTtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyAnX2V4cG9ydF8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBFWENFTF9FWFRFTlNJT04pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyT3BlcmF0b3JOYW1lKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvclR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZS5FUVVBTDogcmV0dXJuICdFUVVBTCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlLkxFU1NPUkVRVUFMOiByZXR1cm4gJ0xFU1MgT1IgRVFVQUwnO1xyXG4gICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZS5HUkVBVEVST1JFUVVBTDogcmV0dXJuICdHUkVBVEVSIE9SIEVRVUFMJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuTEVTUzogcmV0dXJuICdMRVNTJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuR1JFQVRFUjogcmV0dXJuICdHUkVBVEVSJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuTk9URVFVQUw6IHJldHVybiAnTk9UIEVRVUFMJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuQ09OVEFJTlM6IHJldHVybiAnQ09OVEFJTlMnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ1VOS05PV05fT1BFUkFUT1InO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTm9uRXhpc3RpbmdDb2x1bW5zKHdvcmtzaGVldERhdGE6IGFueVtdLCBzZWxlY3RlZENvbHVtbnNGaWVsZHM6IHN0cmluZ1tdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHdvcmtzaGVldERhdGEubWFwKHJvdyA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1JvdzogYW55ID0ge307XHJcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHNlbGVjdGVkQ29sdW1uc0ZpZWxkcykge1xyXG4gICAgICAgIGlmIChyb3cuaGFzT3duUHJvcGVydHkoY29sKSkge1xyXG4gICAgICAgICAgbmV3Um93W2NvbF0gPSByb3dbY29sXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld1JvdztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSGVhZGVyRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJzaG93X2ZpbHRlclwiO1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYClcclxuICAgIH1cclxuICAgIGVsc2UgeyAvL3RoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IGZhbHNlXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlci1zbGFzaFwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcImhpZGVfZmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVIZWFkZXJGaWx0ZXJzTW9kZSgpIHtcclxuICAgIGlmICh0aGlzLmR0KSB7XHJcbiAgICAgIHRoaXMuZHQuY2xlYXIoKVxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYCwgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcClcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPT09IFwibWVudV9tb2RlXCIpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZUhlYWRlckZpbHRlcnNNb2RlID0gXCJtZW51XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktY2hlY2tcIjtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVUb29sdGlwID0gXCJyb3dfbW9kZVwiO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5kdC5maWx0ZXJzW2NvbC5maWVsZF0gPSBbeyB2YWx1ZTogbnVsbCwgbWF0Y2hNb2RlOiB1bmRlZmluZWQgfV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHQuX2ZpbHRlcigpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwicm93XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktZWxsaXBzaXMtdlwiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBcIm1lbnVfbW9kZVwiO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5kdC5maWx0ZXJzW2NvbC5maWVsZF0gPSB7IHZhbHVlOiBudWxsLCBtYXRjaE1vZGU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmR0Ll9maWx0ZXIoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJDbGFzc0NvbG9yKGNvbHVtblR5cGU6IERpc3BsYXlUeXBlcyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29sb3JmdWwgPSB0aGlzLmxheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc0NvbG9yZnVsTW9kZUVuYWJsZWQ7XHJcbiAgICBpZiAoY29sb3JmdWwgPT09IHRydWUpIHtcclxuICAgICAgbGV0IGNvbG9yRm9ySW50ZWdlckRpc3BsYXkgPSBEaXNwbGF5VHlwZUNvbG9yc1tjb2x1bW5UeXBlXSB8fCAnd2hpdGUtZ3JpZCc7XHJcbiAgICAgIHJldHVybiBjb2xvckZvckludGVnZXJEaXNwbGF5O1xyXG4gICAgfSBlbHNlIHJldHVybiAnd2hpdGUtZ3JpZCdcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcmZ1bCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc0NvbG9yZnVsTW9kZUVuYWJsZWQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGluaXRpYWxDb2x1bW5zUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRldmlzZVNvY2lldGVOdW1PZkRlY2ltYWw6IG51bWJlciA9IHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLmFwcFNldHRpbmdzLmRldmlzZVNvY2lldGUubm9tYnJlRGVjaW1hbGVzID8/IERlZmF1bHRTb2NpZXRlRGV2aXNlLm5vbWJyZURlY2ltYWxlcztcclxuXHJcbiAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAvLyBzZXQgaXNOdW1lcmljXHJcbiAgICAgIGNvbC5pc051bWVyaWMgPSBjb2wudHlwZSAhPSB1bmRlZmluZWQgJiYgY29sLnR5cGUgIT0gbnVsbCAmJiAoTnVtZXJpY0Rpc3BsYXlUeXBlcy5pbmRleE9mKGNvbC50eXBlKSA+PSAwKTtcclxuXHJcbiAgICAgIC8vIHNldCBmaWx0ZXJJbnB1dFR5cGVcclxuICAgICAgc3dpdGNoIChjb2wudHlwZSkge1xyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRBVEVfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuREFURVRJTUVfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk6XHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZOlxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTpcclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZOlxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdudW1lcmljJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICd0ZXh0JztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNldCBudW1PZkRlY2ltYWxcclxuICAgICAgaWYgKGNvbC5udW1PZkRlY2ltYWwpIHJldHVybjtcclxuXHJcbiAgICAgIGlmICghY29sLnR5cGUpIHtcclxuICAgICAgICBjb2wubnVtT2ZEZWNpbWFsID0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY29sLmlzTnVtZXJpYykge1xyXG4gICAgICAgIGNvbC5udW1PZkRlY2ltYWwgPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC50eXBlID09PSBEaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZKSB7XHJcbiAgICAgICAgY29sLm51bU9mRGVjaW1hbCA9IGRldmlzZVNvY2lldGVOdW1PZkRlY2ltYWw7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC50eXBlID09PSBEaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZKSB7XHJcbiAgICAgICAgY29sLm51bU9mRGVjaW1hbCA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soaXRlbTogYW55KSB7XHJcbiAgICBpZiAoaXRlbS5tb2RlID09PSBcIlNFQVJDSFwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5jYWxlbmRhckV2ZW50Q2xpY2suZW1pdChpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZURhdGVSYW5nZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBsZXQgc3RhcnQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LnN0YXJ0KVxyXG4gICAgbGV0IGVuZCA9IHRoaXMuc2VhcmNoRmllbGRzPy5maW5kKHggPT4geC5maWVsZCA9PT0gdGhpcy5jYWxlbmRlclNjaGVtYT8uZW5kKVxyXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICBzdGFydC52YWx1ZSA9IGV2ZW50LnN0YXJ0O1xyXG4gICAgICBlbmQudmFsdWUgPSBldmVudC5lbmQ7XHJcbiAgICAgIHN0YXJ0LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgZW5kLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGxTZWFyY2hIYW5kbGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5tYXhSZXN1bHRDb3VudCA9IGV2ZW50Lm1heFJlc3VsdENvdW50O1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5za2lwQ291bnQgPSBldmVudC5za2lwQ291bnQ7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICAgIHRoaXMucGFnZSQubmV4dCh7IC4uLnRoaXMucGFnZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEhlYWRlclRpdGxlcyh0aXRsZXM6IHN0cmluZ1tdLCBpdGVtOiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIXRpdGxlcyB8fCAhaXRlbSlcclxuICAgICAgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IGl0ZW0udWlkO1xyXG4gICAgaWYgKHRoaXMudGl0bGVDYWNoZS5oYXMoa2V5KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy50aXRsZUNhY2hlLmdldChrZXkpIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcyA9IHRpdGxlcy5tYXAodCA9PiBpdGVtW3RdKS5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgdGhpcy50aXRsZUNhY2hlLnNldChrZXksIHJlcyk7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgb25TdGF0dXNGaWx0ZXJDaGFuZ2VkKGV2dDogYW55KSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGV2dDtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHM/LmZpbHRlcihzZiA9PiBzZi5maWVsZCAhPT0gdGhpcy5lbnRpdHlJbmZvPy5zdGF0dXNDb2x1bW5OYW1lKTtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzPy5wdXNoKHtcclxuICAgICAgZmllbGQ6IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzQ29sdW1uTmFtZSA/PyBcIlwiLFxyXG4gICAgICB2YWx1ZTogZXZ0LFxyXG4gICAgICBsYWJlbFZhbHVlOiAnJyxcclxuICAgICAgdHlwZTogSW5wdXRUeXBlcy5DT01CT0JPWCxcclxuICAgICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yVHlwZS5FUVVBTCxcclxuICAgICAgc3R5bGVDbGFzczogXCJoaWRkZW5cIlxyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhcInNlYXJjaCBmaWVsZHMgPT5cIiwgdGhpcy5zZWFyY2hGaWVsZHMpXHJcbiAgICB0aGlzLnRlbXBTZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkcyA/PyB0aGlzLnRlbXBTZWFyY2hGaWVsZHNcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50LCBpdGVtOiBhbnkpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuXHJcbiAgICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGUsIGZpbGVFeHRlbnNpb24sIGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGU6IEZpbGUsIGZpbGVFeHRlbnNpb246IGFueSwgaXRlbTogYW55KSB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBQcm9ncmVzc0V2ZW50PEZpbGVSZWFkZXI+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgYmFzZTY0Q29udGVudCA9IHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChhcnJheUJ1ZmZlcik7XHJcblxyXG4gICAgICBjb25zdCBmaWNoaWVyVG9TZW5kID0gbmV3IEZpY2hpZXIoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5kYXRlRmljaGllciA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tID0gZmlsZS5uYW1lO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm9iamV0ID0gJyc7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQubm9tRmljaGllckNvbXBsZXQgPSBmaWxlLm5hbWU7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgZmljaGllclRvU2VuZC5jb250ZW51ID0gYmFzZTY0Q29udGVudDtcclxuICAgICAgZmljaGllclRvU2VuZC50YWJsZUxpZWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQucGtleSA9IGl0ZW0udWlkPy50b1N0cmluZygpO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb25cclxuICAgICAgdGhpcy5fZmljaGllclNlcnZpY2UuY3JlYXRlKGZpY2hpZXJUb1NlbmQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcImZpY2hpZXJfam9pbnRcIik7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICB9XHJcbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5kcmFnRW50ZXJDb3VudCsrO1xyXG5cclxuICAgIHRoaXMuaXNEcmFnT3ZlciA9IHRydWU7XHJcbiAgICB0aGlzLnNldE1lc3NhZ2VQb3NpdGlvbihldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEcmFnT3Zlcikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiBldmVudC5jbGllbnRYICsgNTAsXHJcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WSArIDMwXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5kcmFnRW50ZXJDb3VudC0tO1xyXG5cclxuICAgIGlmICh0aGlzLmRyYWdFbnRlckNvdW50IDw9IDApIHtcclxuICAgICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZHJhZ0VudGVyQ291bnQgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlUG9zaXRpb24gPSB7XHJcbiAgICAgIHg6IGV2ZW50LmNsaWVudFggKyA1MCxcclxuICAgICAgeTogZXZlbnQuY2xpZW50WSArIDMwLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkXCI+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW0BzbGlkZUluT3V0XT1cInNob3dTZWFyY2hGaWVsZCA/ICdpbicgOiAnb3V0J1wiICpuZ0lmPVwic2hvd0dsb2JhbFNlYXJjaFwiPlxyXG4gICAgPCEtLSBTZWFyY2hCb3gvLyBJZiBleGlzdCAtLT5cclxuICAgIDx0c2ktc2VhcmNoLWJveCBcclxuICAgICAgW2lzUnRsTW9kZV09XCJpc1J0bE1vZGVcIiBcclxuICAgICAgWyhzZWFyY2hGaWVsZHMpXT1cInNlYXJjaEZpZWxkc1wiIFxyXG4gICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCJcclxuICAgICAgW2VudGl0eUluZm9dPVwiZW50aXR5SW5mb1wiXHJcbiAgICAgIFtzdGF0dXNNZXRhZGF0YV09XCJzdGF0dXNNZXRhZGF0YVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNDaGFuZ2UpPVwic2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VzKCRldmVudClcIiBcclxuICAgICAgKGtleXdvcmRWYWx1ZUNoYW5nZWQpPVwia2V5d29yZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgKHNlYXJjaEZpZWxkc0FwcGxpZWQpPVwic2VhcmNoKCRldmVudClcIlxyXG4gICAgICAoc3RhdHVzRmlsdGVyQ2hhbmdlZCk9XCJvblN0YXR1c0ZpbHRlckNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgIChjb21ib0JveExhYmVsQ2hhbmdlZCk9XCJjY29tYm9Cb3hMYWJlbENoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgPC90c2ktc2VhcmNoLWJveD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIl9zaG93Q2FsZW5kZXJWaWV3ID09PSBmYWxzZSAmJiBfc2hvd0NhcmRWaWV3ID09PSBmYWxzZSAmJiBfc2hvd0thbmJhblZpZXcgPT09IGZhbHNlXCIgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgIFxyXG4gICAgPHAtdGFibGUgI2R0IFtsYXp5XT1cImlzR3JpZERhdGFQYWdlZEluQXBpXCIgW2xhenlMb2FkT25Jbml0XT1cInNlYXJjaE9uSW5pdFwiIChvbkxhenlMb2FkKT1cImxhenlMb2FkKCRldmVudClcIlxyXG4gICAgICBkYXRhS2V5PVwie3sga2V5IH19XCIgW3RvdGFsUmVjb3Jkc109XCJwYWdlLnRvdGFsQ291bnRcIiBbbG9hZGluZ109XCJwYWdlLmxvYWRpbmdcIiBbcmVvcmRlcmFibGVDb2x1bW5zXT1cInRydWVcIlxyXG4gICAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCIgY29sdW1uUmVzaXplTW9kZT1cImV4cGFuZFwiIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiIFt2YWx1ZV09XCJwYWdlLml0ZW1zXCJcclxuICAgICAgW3BhZ2luYXRvcl09XCJ0cnVlXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiIHNjcm9sbEhlaWdodD1cIjYwMHB4XCIgWyhyb3dzKV09XCJwYWdlLnBhZ2VTaXplXCJcclxuICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgW2dsb2JhbEZpbHRlckZpZWxkc109XCJmaWVsZHMoKVwiIFt0YWJsZVN0eWxlXT1cInsgJ21pbi13aWR0aCc6ICc1MHJlbScgfVwiXHJcbiAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7eyAnU2hvd2luZycgfCBsb2NhbGl6ZSB9fSB7e2dldEZpcnN0RWxlbWVudEluZGV4KCl9fSB7e1xyXG4gICAgICAgICd0bycgfCBsb2NhbGl6ZVxyXG4gICAgICB9fSB7bGFzdH0ge3sgJ29mJyB8IGxvY2FsaXplIH19IFxyXG4gICAgICB7dG90YWxSZWNvcmRzfSB7eyAnZW50cmllcycgfCBsb2NhbGl6ZSB9fVwiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEsIDEwLCAyNSwgNTBdXCIgW3NvcnRNb2RlXT1cInNvcnRNb2RlXCJcclxuICAgICAgW211bHRpU29ydE1ldGFdPVwic29ydE1ldGFzXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLWdyaWRsaW5lc1wiIFtzZWxlY3RBbGxdPVwic2VsZWN0QWxsXCJcclxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiIFsoc2VsZWN0aW9uKV09XCJzZWxlY3Rpb25cIiAob25Sb3dVbnNlbGVjdCk9XCJvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKClcIlxyXG4gICAgICAoc2VsZWN0QWxsQ2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIiAob25Sb3dTZWxlY3QpPVwib25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpXCI+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTJcIj5cclxuICAgICAgICAgICAge3sgaGVhZGVyIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTEgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWx0ZXJCdXR0b25cIiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJncmlkX3RvZ2dsZV9oZWFkZXJfZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgIDxUc2ktQnV0dG9uIFtpY29uXT1cImZpbHRlckljb25cIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBbdG9vbHRpcFRleHRdPVwiZmlsdGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IGhvdmVyOnNoYWRvdy02IHAtYnV0dG9uLXByaW1hcnkgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVIZWFkZXJGaWx0ZXJzKClcIj48L1RzaS1CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dIZWFkZXJGaWx0ZXJzXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiZ3JpZF90b2dnbGVfaGVhZGVyX2ZpbHRlcl9tb2RlXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1CdXR0b24gW2ljb25dPVwiZmlsdGVyTW9kZUljb25cIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cImZpbHRlck1vZGVUb29sdGlwXCIgW3N0eWxlQ2xhc3NdPVwiJ21sLTEgcC1idXR0b24tcHJpbWFyeSBwLWJ1dHRvbi1pY29uLW9ubHknXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVIZWFkZXJGaWx0ZXJzTW9kZSgpXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiZ3JpZF9jbGVhcl9maWx0ZXJfYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1CdXR0b24gW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgW3Rvb2x0aXBUZXh0XT1cIidpY29uLWNsZWFyLWZpbHRlcidcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cIm1sLTEgcC1lbGVtZW50IGhvdmVyOnNoYWRvdy02IHAtYnV0dG9uLXByaW1hcnkgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsZWFyRmlsdGVycygpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9sYXlvdXQvaW1hZ2VzL2ljb24vaWNvbi1jbGVhci1maWx0ZXIuc3ZnJ1wiPlxyXG4gICAgICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0V4cG9ydEJ1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImdyaWRfZXhwb3J0X2J1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxUc2ktQnV0dG9uIGljb249XCJwLWJ1dHRvbi1pY29uIHBpIHBpLWZpbGUtZXhjZWxcIiAob25DbGljayk9XCJleHBvcnRFeGNlbCgpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgcC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBtbC0yIHAtMSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgdG9vbHRpcFRleHQ9XCJYTFNcIj48L1RzaS1CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgY2xhc3M9XCJtbC0xXCIgW29wdGlvbnNdPVwiY29sdW1uc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2x1bW5zXCIgb3B0aW9uTGFiZWw9XCJ0cmFuc2xhdGVkSGVhZGVyXCJcclxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zTGFiZWw9XCJ7MH0ge3sgJ2NvbHVtbnNfc2VsZWN0ZWQnIHwgbG9jYWxpemUgfX1cIiBbc3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzE4MHB4JyB9XCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdjaG9vc2VfY29sdW1ucycgfCBsb2NhbGl6ZSB9fVwiIChvbkNoYW5nZSk9XCJvblNlbGVjdGVkQ29sdW1uc0NoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdj4gLS0+XHJcbiAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJzaG93R2xvYmFsU2VhcmNoXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gcFJpcHBsZSBpY29uPVwicGkgcGktc2VhcmNoXCIgKGNsaWNrKT1cInNlYXJjaCgpXCI+PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRoIFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGdldENoZWNrYm94U3R5bGUoKSA6IHt9XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwicGFnZS5sb2FkaW5nID8gJ25vLXotaW5kZXgnIDogJ3otaW5kZXgtY2hlY2tib3gnXCIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09IG11bHRpcGxlR3JpZFNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IC4zcmVtICFpbXBvcnRhbnQ7IHdpZHRoOiAzcmVtO1wiPlxyXG4gICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggI3RhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPCEtLSA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgc3R5bGU9XCJ3aWR0aDozcmVtXCI+PC90aD4gLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBbc3R5bGVdPVwiY29sLnN0eWxlXCIgcFRvb2x0aXA9XCJ7eyBjb2wudG9vbFRpcFRleHQgfCBsb2NhbGl6ZSB9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCIoIWNvbC5pc0J1dHRvbikgPyBjb2wuZmllbGQgOiBudWxsXCJcclxuICAgICAgICAgICAgICBbcFJlc2l6YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5pc0J1dHRvbiB8fCBjb2wudHlwZSA9PT0gZGlzcGxheVR5cGVzLklNQUdFX0RJU1BMQVlcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwiY29sLmlzQnV0dG9uXCIgW3BSZW9yZGVyYWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5pc0J1dHRvblwiIHBSZW9yZGVyYWJsZUNvbHVtblxyXG4gICAgICAgICAgICAgIHBSZXNpemFibGVDb2x1bW4gW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gY29sLmhlYWRlckNvbHVtblN0eWxlIDoge31cIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jb2x1bW5dPVwiY29sLmlzQnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgICAgICAgZ2V0SGVhZGVyQ2xhc3NDb2xvcihjb2wudHlwZSksXHJcbiAgICAgICAgICAgICAgICBwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnJyxcclxuICAgICAgICAgICAgICAgIChjb2wuaXNCdXR0b24gKSA/ICd3LTFyZW0nIDogJycsXHJcbiAgICAgICAgICAgICAgICAoY29sLmlzQnV0dG9uIHx8IGNvbC50eXBlID09PSBkaXNwbGF5VHlwZXMuSU1BR0VfRElTUExBWSkgPyAnbm9uLXJlc2l6YWJsZS1jb2x1bW4nIDogJydcclxuICAgICAgICAgICAgICAgIF1cIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGNvbC5oZWFkZXJDb2x1bW5TdHlsZSA6IHt9XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJwLTAgbS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjb2wgcC0wIG0tMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd3LTFyZW0nOiBjb2wuaXNCdXR0b259XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90SW5TcGVjaWZpZWRDb2x1bW4oY29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY29sLWZpeGVkIHAtMCBtLTBcIiBzdHlsZT1cIndpZHRoOiAxcmVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBjbGFzcz1cInctMXJlbSBtLTAgcC0wXCIgKm5nSWY9XCJub3RJblNwZWNpZmllZENvbHVtbihjb2wuZmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9XCJ7eyBjb2wuZmllbGQgfX1cIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgPHRyICpuZ0lmPVwic2hvd0hlYWRlckZpbHRlcnNcIj5cclxuICAgICAgICAgIDwhLS0gPHRoIHNjb3BlPVwiY29sXCIgc3R5bGU9XCJ3aWR0aDozcmVtXCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgc3R5bGU9XCJ3aWR0aDozcmVtXCI+PC90aD4gLS0+XHJcbiAgICAgICAgICA8dGggW25nQ2xhc3NdPVwicGFnZS5sb2FkaW5nID8gJ25vLXotaW5kZXgnIDogJydcIiAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW1cIj48L3RoPlxyXG4gICAgICAgICAgPHRoIHN0eWxlPVwib3ZlcmZsb3c6IGluaGVyaXRcIiBzY29wZT1cImNvbFwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwiY29sLmZpbHRlcklucHV0VHlwZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBbZGlzcGxheV09XCJjaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZVwiXHJcbiAgICAgICAgICAgICAgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbC5udW1PZkRlY2ltYWxcIiBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiY29sLm51bU9mRGVjaW1hbFwiIFtzaG93QnV0dG9uc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW21hdGNoTW9kZV09XCJmaWx0ZXJNYXRjaE1vZGUuRVFVQUxTXCI+XHJcbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtaXRlbSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIiBsZXQtaW5kZXg9XCJyb3dJbmRleFwiPlxyXG5cclxuICAgICAgICA8IS0tIENBU0UgOiBtdWx0aXBsZSBzZWxlY3Rpb24gLS0+XHJcbiAgICAgICAgPHRyIFtuZ1N0eWxlXT1cIml0ZW0uY29sb3IgJiYgaXRlbS5jb2xvciAhPT0gJycgPyB7J2JhY2tncm91bmQtY29sb3InOiBpdGVtLmNvbG9yfSA6IHt9XCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlO1xyXG4gICAgICAgICAgICBlbHNlIG5vdE11bHRpcGxlU2VsZWN0aW9uTW9kZUJsb2NrXCIgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQsaXRlbSlcIiAoZHJhZ2VudGVyKT1cIm9uRHJhZ0VudGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPHRkIFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGdldENoZWNrYm94U3R5bGUoKSA6IHt9XCIgc3R5bGU9XCJwYWRkaW5nOiAuM3JlbSAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPCEtLSA8dGQgY2xhc3M9XCJwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdChpdGVtKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiIChjbGljayk9XCJkZWxldGUoaXRlbSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+IC0tPlxyXG4gICAgICAgICAgPHRkIFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGNvbC5uZ1N0eWxlIDoge31cIiBbbmdDbGFzc109XCJwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnJ1wiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiBtaW4tY29udGVudDsgbWFyZ2luLWxlZnQ6IC0uNXJlbTtcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dCAtLT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGN1cnJlbmN5T3RoZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2N1cnJlbmN5T3RoZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGRhdGVQaWNrZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgW2N1cnJlbmN5XT1cImNvbC5jdXJyZW5jeUNvZGVcIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5EQVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGF0ZVRpbWVQaWNrZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLURhdGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktRGF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlVGltZVBpY2tlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREFURVRJTUVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgY2hlY2tCb3hPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCIgW3Nob3dUaW1lXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1EYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLUNoZWNrQm94IC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrQm94T3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkZWNpbWFsT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DaGVja2JveC1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1DaGVja2JveC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktRGVjaW1hbC1JbnB1dCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWNpbWFsT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGludGVnZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSBbZm9ybWF0RGVjaW1hbF09XCJjb2wuZm9ybWF0RGVjaW1hbFwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgW251bU9mRGVjaW1hbF09XCJjb2wubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1EZWNpbWFsLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1JbnRlZ2VyIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ludGVnZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgcmF0ZU91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlci1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1SYXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JhdGVPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGlzcGxheU5lc3RlZFByb3BPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVJhdGUtRGlzcGxheSBbaXNGcmFjdGlvbl09XCJjb2wuaXNGcmFjdGlvblwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGRpc3BsYXktbmVzdGVkLXByb3AgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheU5lc3RlZFByb3BPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ORVNURURfUFJPUF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGRpc3BsYXlTdGF0dXNDb2xvckJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktRGlzcGxheS1OZXN0ZWQtUHJvcCBbc291cmNlVXJsXT1cImNvbC5kaXNwbGF5TmVzdGVkUHJvcGVydHlTb3VyY2VVcmxcIiBbaWRdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlWYWx1ZV09XCJjb2wuZGlzcGxheU5lc3RlZFByb3BlcnR5bGFiZWxGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktRGlzcGxheS1OZXN0ZWQtUHJvcD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c0NvbG9yQmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc1N0YXR1c0NvbG9yOyBlbHNlIGRpc3BsYXlTdGF0dXNWYWx1ZUNvbHVtbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgcm91bmRlZCB0ZXh0LXdoaXRlIHRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbVtjb2wuZmllbGRdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5U3RhdHVzVmFsdWVDb2x1bW5CbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzU3RhdHVzQ29sdW1uVmFsdWU7IGVsc2UgZGlzcGxheVN0YXR1c0NvbHVtbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxwLXRhZyBcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdGF0dXNDb2xvcihpdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvcC10YWc+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeSAmJiBnZXRTdGF0dXNPcHRpb25Gb3JTdGF0dXNIaXN0b3J5KGl0ZW1bY29sLmZpZWxkXSkgYXMgb3B0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIm9wdC5jb2xvckhleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJvcHQuY29sb3JIZXggPyAnd2hpdGUnIDogJ2JsYWNrJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LWJsYWNrIGJnLXdoaXRlJzogIW9wdC5jb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LXdoaXRlJzogb3B0LmNvbG9ySGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0LnRyYW5zbGF0ZWRMYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3RvcnkgJiYgIWdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3RvcnkoaXRlbVtjb2wuZmllbGRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gZGlzcGxheS1zdGF0dXMtY29sdW1uIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNDb2x1bW5CbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzU3RhdHVzQ29sdW1uOyBlbHNlIGRpc3BsYXlCdXR0b25CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS08cC10YWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3RhdHVzQ29sb3IoaXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3AtdGFnPi0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGEgJiYgZ2V0U3RhdHVzT3B0aW9uKGl0ZW1bY29sLmZpZWxkXSkgYXMgb3B0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0xIHB5LTEgZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImxpZ2h0ZW5Db2xvcihvcHQuY29sb3JIZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIm9wdC5jb2xvckhleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0LnRyYW5zbGF0ZWRMYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YSAmJiAhZ2V0U3RhdHVzT3B0aW9uKGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGRpc3BsYXktbmVzdGVkLXByb3AgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheUJ1dHRvbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNCdXR0b247IGVsc2UgZGlzcGxheVRleHRFeWVCbG9ja1wiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiAgW3N0eWxlQ2xhc3NdPVwiY29sLnN0eWxlQ2xhc3NcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgY29sLmJ1dHRvbkljb24gfX1cIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBbdG9vbHRpcFRleHRdPVwiY29sLnRvb2xUaXBUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjb2wuYnV0dG9uTGFiZWwgPyBjb2wuYnV0dG9uTGFiZWwgOiBpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkKGl0ZW0sIGNvbC5maWVsZClcIiA+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGRpc3BsYXktdGV4dC1leWUgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVRleHRFeWVCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5URVhUX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGVmYXVsdFRleHRPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGV4dE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImlzRHJhZ092ZXJcIiBbbmdTdHlsZV09XCJ7IGxlZnQ6IG1lc3NhZ2VQb3NpdGlvbi54ICsgJ3B4JywgdG9wOiBtZXNzYWdlUG9zaXRpb24ueSArICdweCcgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnLW1lc3NhZ2UgY3Vyc29yLWZvbGxvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IFwiSm9pbnR1cmVcIiB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIDwhLS0gQ0FTRSA6IHNpbmdsZSBvciBub25lIHNlbGVjdGlvbiAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdE11bHRpcGxlU2VsZWN0aW9uTW9kZUJsb2NrPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHRyIFtuZ1N0eWxlXT1cIml0ZW0uY29sb3IgJiYgaXRlbS5jb2xvciAhPT0gJycgPyB7J2JhY2tncm91bmQtY29sb3InOiBpdGVtLmNvbG9yfSA6IHt9XCJcclxuICAgICAgICAgICAgICBbcFNlbGVjdGFibGVSb3ddPVwiaXRlbVwiIFtwU2VsZWN0YWJsZVJvd0luZGV4XT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPCEtLSA8dGQgY2xhc3M9XCJwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdChpdGVtKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiIChjbGljayk9XCJkZWxldGUoaXRlbSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+IC0tPlxyXG4gICAgICAgICAgICAgIDx0ZCBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wubmdTdHlsZSA6IHt9XCIgc3R5bGU9XCJoZWlnaHQ6IG1pbi1jb250ZW50O1wiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAnbm8tei1pbmRleCc6IHBhZ2UubG9hZGluZyxcclxuICAgICAgICAgICAgICAgICAgJ3ctMXJlbSc6IGNvbC5pc0J1dHRvblxyXG4gICAgICAgICAgICAgICAgfVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBbbmdDbGFzc109XCJwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnJ1wiIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dCAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGN1cnJlbmN5T3RoZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktT3RoZXItSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2N1cnJlbmN5T3RoZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX09USEVSX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGVQaWNrZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheSBbY3VycmVuY3ldPVwiY29sLmN1cnJlbmN5Q29kZVwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5EQVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGVUaW1lUGlja2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURhdGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlVGltZVBpY2tlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREFURVRJTUVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgY2hlY2tCb3hPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCIgW3Nob3dUaW1lXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1EYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktQ2hlY2tCb3ggLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrQm94T3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBkZWNpbWFsT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrYm94LURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1DaGVja2JveC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktRGVjaW1hbC1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVjaW1hbE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBpbnRlZ2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSBbZm9ybWF0RGVjaW1hbF09XCJjb2wuZm9ybWF0RGVjaW1hbFwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtudW1PZkRlY2ltYWxdPVwiY29sLm51bU9mRGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ludGVnZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmF0ZU91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1SYXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXRlT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRpc3BsYXlOZXN0ZWRQcm9wT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLVJhdGUtRGlzcGxheSBbaXNGcmFjdGlvbl09XCJjb2wuaXNGcmFjdGlvblwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktUmF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5LW5lc3RlZC1wcm9wIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5TmVzdGVkUHJvcE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuTkVTVEVEX1BST1BfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGlzcGxheVN0YXR1c0NvbG9yQmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURpc3BsYXktTmVzdGVkLVByb3AgW3NvdXJjZVVybF09XCJjb2wuZGlzcGxheU5lc3RlZFByb3BlcnR5U291cmNlVXJsXCIgW2lkXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVZhbHVlXT1cImNvbC5kaXNwbGF5TmVzdGVkUHJvcGVydHlsYWJlbEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGlzcGxheS1OZXN0ZWQtUHJvcD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c0NvbG9yQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2xvcjsgZWxzZSBkaXNwbGF5U3RhdHVzVmFsdWVDb2x1bW5CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSByb3VuZGVkIHRleHQtd2hpdGUgdGV4dC1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtW2NvbC5maWVsZF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNWYWx1ZUNvbHVtbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2x1bW5WYWx1ZTsgZWxzZSBkaXNwbGF5U3RhdHVzQ29sdW1uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPHAtdGFnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0YXR1c0NvbG9yKGl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLXRhZz4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ICYmIGdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3RvcnkoaXRlbVtjb2wuZmllbGRdKSBhcyBvcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwib3B0LmNvbG9ySGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIm9wdC5jb2xvckhleCA/ICd3aGl0ZScgOiAnYmxhY2snXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtYmxhY2sgYmctd2hpdGUnOiAhb3B0LmNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtd2hpdGUnOiBvcHQuY29sb3JIZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeSAmJiAhZ2V0U3RhdHVzT3B0aW9uRm9yU3RhdHVzSGlzdG9yeShpdGVtW2NvbC5maWVsZF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXktc3RhdHVzLXByb3AgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNDb2x1bW5CbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc1N0YXR1c0NvbHVtbjsgZWxzZSBkaXNwbGF5QnV0dG9uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS08cC10YWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0YXR1c0NvbG9yKGl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcC10YWc+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhICYmIGdldFN0YXR1c09wdGlvbihpdGVtW2NvbC5maWVsZF0pIGFzIG9wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0xIHB5LTEgcm91bmRlZCBzdGF0dXMtYmFkZ2UgZm9udC1ib2xkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJsaWdodGVuQ29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIm9wdC5jb2xvckhleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhICYmICAhZ2V0U3RhdHVzT3B0aW9uKGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMSBweS0xIHJvdW5kZWQgc3RhdHVzLWJhZGdlIGZvbnQtYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5LW5lc3RlZC1wcm9wIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5QnV0dG9uQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNCdXR0b247IGVsc2UgZGlzcGxheUltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wubmdTdHlsZSA6IHt9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPFRzaS1CdXR0b24gW3N0eWxlQ2xhc3NdPVwiY29sLnN0eWxlQ2xhc3NcIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInt7IGNvbC5idXR0b25JY29uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgW3Rvb2x0aXBUZXh0XT1cImNvbC50b29sVGlwVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkKGl0ZW0sIGNvbC5maWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjb2wuYnV0dG9uTGFiZWwgPyBjb2wuYnV0dG9uTGFiZWwgOiBpdGVtW2NvbC5maWVsZF1cIj48L1RzaS1CdXR0b24+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gZGlzcGxheS1pbWFnZSAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheUltYWdlPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklNQUdFX0RJU1BMQVk7IGVsc2UgZGlzcGxheVRleHRFeWVCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTNyZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0c2ktaW1hZ2UtZGlzcGxheSBbaGVhZGVyVGl0bGVzXT1cImdldEhlYWRlclRpdGxlcyhjb2wuaGVhZGVyVGl0bGVzLCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1JvdW5kZWRdPVwiY29sLmlzUm91bmRlZFwiIFtzcmNdPVwiaXRlbVtjb2wuZmllbGRdXCIgW2FsdF09XCJjb2wuaGVhZGVyIHx8ICdpbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInMTAwJSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHNpLWltYWdlLWRpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXktdGV4dC1leWUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlUZXh0RXllQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5URVhUX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRlZmF1bHRUZXh0T3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcGkgcGktZXllXCIgKGNsaWNrKT1cImV5ZUNsaWNrZWQoaXRlbVtjb2wuZmllbGRdKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHRydW5jYXRlU3RyaW5nKGl0ZW1bY29sLmZpZWxkXSwgNTApIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktVGV4dC1Cb3ggLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZXh0T3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09IG11bHRpcGxlR3JpZFNlbGVjdGlvbk1vZGVcIj48L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicHItMFwiICpuZ0Zvcj1cImxldCBjb2wgb2Ygc2VsZWN0ZWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuc2hvd1N1bW1hcnlcIj5cclxuICAgICAgICAgICAgICA8IS0tIENVUlJFTkNZX1NPQ0lFVEVfRElTUExBWSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBJTlRFR0VSX0RJU1BMQVkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlci1EaXNwbGF5IFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUkFURV9ESVNQTEFZIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVJhdGUtRGlzcGxheSBbaXNGcmFjdGlvbl09XCJjb2wuaXNGcmFjdGlvbiA/PyBmYWxzZVwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gREVDSU1BTF9ESVNQTEFZIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSBbZm9ybWF0RGVjaW1hbF09XCJjb2wuZm9ybWF0RGVjaW1hbFwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgW251bU9mRGVjaW1hbF09XCJjb2wubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1EZWNpbWFsLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfRElTUExBWVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5IFtjdXJyZW5jeV09XCJjb2wuY3VycmVuY3lPdGhlckNvZGVcIiBbaW5wdXREYXRhXT1cImdldFN1bW1hcnkoY29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIFxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic3VtbWFyeVwiPlxyXG4gICAgICAgIHt7IHBhZ2UudG90YWxDb3VudCB9fSB7eyBcInJlY29yZHNfbGFiZWxcIiB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2xvcmZ1bFwiPlxyXG4gICAgICAgICAgPHNwYW4+VmlldyBHcmlkPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+fCBTZWFyY2hPbkluaXQgOiB7eyBzZWFyY2hPbkluaXQgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj58IFBhZ2luYXRpb24gSW4gQXBpIDoge3sgaXNHcmlkRGF0YVBhZ2VkSW5BcGkgfX08L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRhYmxlPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIl9zaG93Q2FsZW5kZXJWaWV3ID09PSB0cnVlXCIgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgIDx0c2ktY2FsZW5kZXIgW3NjaGVtYV09XCJjYWxlbmRlclNjaGVtYVwiIFtldmVudHNEYXRhXT1cInBhZ2UuaXRlbXNcIiBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIlxyXG4gICAgICAoZGF0ZVJhbmdlQ2hhbmdlKT1cImhhbmRsZURhdGVSYW5nZUNoYW5nZSgkZXZlbnQpXCIgKGV2ZW50Q2xpY2spPVwiaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKCRldmVudClcIj48L3RzaS1jYWxlbmRlcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIl9zaG93Q2FyZFZpZXcgPT09IHRydWVcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPFRzaS1jYXJkLWxpc3QgW2NhcmRCdXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIiBbaWRdPVwiaWRcIiAoYnV0dG9uQ2xpY2tlZCk9XCJidXR0b25Db2x1bW5DbGlja2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIFtwYWdlJF09XCJwYWdlJFwiIFtwYWdlXT1cInBhZ2VcIiAoY2FsbFNlYXJjaCk9XCJjYWxsU2VhcmNoSGFuZGxlcigkZXZlbnQpXCI+XHJcbiAgICA8L1RzaS1jYXJkLWxpc3Q+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJfc2hvd0thbmJhblZpZXcgPT09IHRydWVcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPFRzaS1rYW5iYW4gW2NhcmRCdXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIiBbaWRdPVwiaWRcIiAoYnV0dG9uQ2xpY2tlZCk9XCJidXR0b25Db2x1bW5DbGlja2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIFtwYWdlJF09XCJwYWdlJFwiIFtwYWdlXT1cInBhZ2VcIiAoY2FsbFNlYXJjaCk9XCJjYWxsU2VhcmNoSGFuZGxlcigkZXZlbnQpXCIgW2NydWRTZXJ2aWNlXT1cImNydWRTZXJ2aWNlXCI+XHJcbiAgICA8L1RzaS1rYW5iYW4+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==