@unifylib/ui-lib 1.1.59 → 1.1.61

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.
@@ -35,7 +35,7 @@ export class BaseTableComponent extends BaseUtils {
35
35
  this.types = ["pdf", "csv", "xlsx"];
36
36
  this.collection = { count: 60, data: [] };
37
37
  this.config = {
38
- itemsPerPage: 15,
38
+ itemsPerPage: 10,
39
39
  currentPage: 1,
40
40
  totalItems: this.collection.count
41
41
  };
@@ -57,7 +57,7 @@ export class BaseTableComponent extends BaseUtils {
57
57
  this.totalElements = 0;
58
58
  this.pagesCount = 0;
59
59
  this.pageIndex = 1;
60
- this.pageSize = 15;
60
+ this.pageSize = 10;
61
61
  this.mobileDisplayedItems = 0;
62
62
  this.selectedStatusFilter = [];
63
63
  this.advancedAppliedFilter = [];
@@ -163,7 +163,7 @@ export class BaseTableComponent extends BaseUtils {
163
163
  return this.columns.find(c => c.property === property);
164
164
  }
165
165
  getSortDirection(property) {
166
- if (this.reportRequest?.filterRequest?.sortKey === property) {
166
+ if (this.reportRequest?.filterRequest?.sortKey) {
167
167
  return this.reportRequest.filterRequest.sortDirection === 'ASC' ? 'asc' : 'desc';
168
168
  }
169
169
  return '';
@@ -641,4 +641,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
641
641
  }], clickRoutePage: [{
642
642
  type: Output
643
643
  }] } });
644
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsYUFBYSxFQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsV0FBVyxFQUNYLE9BQU8sRUFDUCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FB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QkFHUCxjQUFjO3NCQURiLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sb0JBQW9CO3NCQURuQixLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixlQUFlO3NCQURkLEtBQUs7Z0JBR04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxNQUFNO2dCQUtQLFVBQVU7c0JBRFQsTUFBTTtnQkFHUCxlQUFlO3NCQURkLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLGNBQWM7c0JBRGIsTUFBTTtnQkFJUCxpQkFBaUI7c0JBRGhCLE1BQU07Z0JBUVAsVUFBVTtzQkFEVCxNQUFNO2dCQVFQLGNBQWM7c0JBRGIsS0FBSztnQkFTTixjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBlZmZlY3QsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7TWF0VGFibGVEYXRhU291cmNlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGVcIjtcclxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7TWF0U29ydE1vZHVsZSwgU29ydH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NvcnRcIjtcclxuaW1wb3J0IHtcclxuICBDdXJyZW5jeVBpcGUsXHJcbiAgRGF0ZVBpcGUsXHJcbiAgRGVjaW1hbFBpcGUsXHJcbiAgTmdDbGFzcyxcclxuICBOZ0Zvck9mLFxyXG4gIE5nSWYsXHJcbiAgTmdTdHlsZSxcclxuICBOZ1N3aXRjaCxcclxuICBOZ1N3aXRjaENhc2UsXHJcbiAgTmdTd2l0Y2hEZWZhdWx0XHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge01hdEljb259IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7TWF0QnV0dG9uLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25CdXR0b259IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcclxuaW1wb3J0IHtOZ3hQYWdpbmF0aW9uTW9kdWxlfSBmcm9tIFwibmd4LXBhZ2luYXRpb25cIjtcclxuaW1wb3J0IHtCdXR0b25BY3Rpb25zQ29tcG9uZW50fSBmcm9tIFwiLi4vYnV0dG9uLWFjdGlvbnMvYnV0dG9uLWFjdGlvbnMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7U2hhcmVEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3RyaWdnZXItZm9ybS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QmFzZVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvYmFzZS11dGlsc1wiO1xyXG5pbXBvcnQge0JhY2tlbmRTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYmFja2VuZC1zZXJ2aWNlXCI7XHJcbmltcG9ydCB7RmlsdGVyfSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9maWx0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHtGaWx0ZXJSZXF1ZXN0fSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9maWx0ZXItcmVxdWVzdFwiO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkFjdGlvblNldHRpbmdzLFxyXG4gIEVNUFRZX1BBR0VfSU5GTyxcclxuICBGaWVsZEluZm8sXHJcbiAgRlJPTlRfRU5EX0NPTFVNTl9UWVBFUyxcclxuICBQYWdlSW5mbyxcclxuICBUQUJMRV9SRUNPUkRfQUNUSU9OLFxyXG4gIFRhYmxlQ29sdW1uXHJcbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWxcIjtcclxuaW1wb3J0IHtSZXBvcnRSZXF1ZXN0fSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9yZXBvcnQtcmVxdWVzdC5tb2RlbFwiO1xyXG5pbXBvcnQge1RhYmxlUGFnZVVzZXJBY3Rpb259IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3RhYmxlLXBhZ2UtdXNlci1hY3Rpb24uaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7V29ya2Zsb3d9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3dvcmtmbG93L3dvcmtmbG93Lm1vZGVsXCI7XHJcbmltcG9ydCB7UmVzcG9uc2VFbnZlbG9wfSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9yZXNwb25zZS1lbnZlbG9wLm1vZGVsXCI7XHJcbmltcG9ydCB7Um91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7TWF0TGFiZWx9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7VGl0bGVCYXJDb21wb25lbnR9IGZyb20gXCIuLi90aXRsZS1iYXIvdGl0bGUtYmFyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1BhZ2luYXRvckNvbXBvbmVudH0gZnJvbSBcIi4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TWF0Q2hlY2tib3h9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xyXG5pbXBvcnQge0ZpbHRlckJ1aWxkZXJDb21wb25lbnR9IGZyb20gXCIuLi9hZHZhbmNlZC1maWx0ZXIvZmlsdGVyLWJ1aWxkZXIvZmlsdGVyLWJ1aWxkZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7RmllbGRGaWx0ZXJ9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2ZpZWxkLWZpbHRlci5tb2RlbFwiO1xyXG5pbXBvcnQge01hdE1lbnUsIE1hdE1lbnVJdGVtLCBNYXRNZW51VHJpZ2dlcn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWJhc2UtdGFibGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2UtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jhc2UtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBOZ1N0eWxlLFxyXG4gICAgTmdDbGFzcyxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBNYXRTb3J0TW9kdWxlLFxyXG4gICAgTmdJZixcclxuICAgIE5nU3dpdGNoLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgRGF0ZVBpcGUsXHJcbiAgICBDdXJyZW5jeVBpcGUsXHJcbiAgICBOZ3hQYWdpbmF0aW9uTW9kdWxlLFxyXG4gICAgTmdTd2l0Y2hDYXNlLFxyXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxyXG4gICAgTWF0SWNvbkJ1dHRvbixcclxuICAgIE5nRm9yT2YsXHJcbiAgICBNYXRCdXR0b24sXHJcbiAgICBCdXR0b25BY3Rpb25zQ29tcG9uZW50LFxyXG4gICAgTWF0TGFiZWwsXHJcbiAgICBUaXRsZUJhckNvbXBvbmVudCxcclxuICAgIFBhZ2luYXRvckNvbXBvbmVudCxcclxuICAgIERlY2ltYWxQaXBlLFxyXG4gICAgTWF0Q2hlY2tib3gsXHJcbiAgICBGaWx0ZXJCdWlsZGVyQ29tcG9uZW50LFxyXG4gICAgTWF0TWVudVRyaWdnZXIsXHJcbiAgICBNYXRNZW51LFxyXG4gICAgTWF0TWVudUl0ZW0sXHJcblxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VUYWJsZUNvbXBvbmVudCBleHRlbmRzIEJhc2VVdGlscyBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIHR5cGVzOiBzdHJpbmdbXSA9IFtcInBkZlwiLCBcImNzdlwiLCBcInhsc3hcIl1cclxuICBjb2xsZWN0aW9uID0ge2NvdW50OiA2MCwgZGF0YTogW119O1xyXG4gIGNvbmZpZyA9IHtcclxuICAgIGl0ZW1zUGVyUGFnZTogMTUsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHRvdGFsSXRlbXM6IHRoaXMuY29sbGVjdGlvbi5jb3VudFxyXG4gIH07XHJcbiAgcHVibGljIG1heFNpemU6IG51bWJlciA9IDc7XHJcbiAgcHVibGljIGRpcmVjdGlvbkxpbmtzOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgYXV0b0hpZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcmVzcG9uc2l2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGxhYmVsczogYW55ID0ge1xyXG4gICAgcHJldmlvdXNMYWJlbDogJzwnLFxyXG4gICAgbmV4dExhYmVsOiAnPicsXHJcbiAgICBzY3JlZW5SZWFkZXJQYWdpbmF0aW9uTGFiZWw6ICdQYWdpbmF0aW9uJyxcclxuICAgIHNjcmVlblJlYWRlclBhZ2VMYWJlbDogJ3BhZ2UnLFxyXG4gICAgc2NyZWVuUmVhZGVyQ3VycmVudExhYmVsOiBgWW91J3JlIG9uIHBhZ2VgXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KClcclxuICBmaWx0ZXJGaWVsZHM6IEZpZWxkSW5mb1tdO1xyXG4gIEBJbnB1dCgpIG5vRGF0YUZvdW5kU3ZnUGF0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5vRGF0YUZvdW5kVGl0bGUgPSAnbm9EYXRhRm91bmRUaXRsZSc7XHJcbiAgQElucHV0KCkgbm9EYXRhRm91bmRTdWJ0aXRsZSA9ICdub0RhdGFGb3VuZFN1YnRpdGxlJztcclxuICBASW5wdXQoKSBub1Jlc3VsdFN2Z1BhdGg6IHN0cmluZztcclxuICBASW5wdXQoKSBub1Jlc3VsdFRpdGxlID0gJ25vUmVzdWx0VGl0bGUnO1xyXG4gIEBJbnB1dCgpIG5vUmVzdWx0U3VidGl0bGUgPSAnbm9SZXN1bHRTdWJ0aXRsZSc7XHJcbiAgdG90YWxFbGVtZW50cyA9IDA7XHJcbiAgcGFnZXNDb3VudCA9IDA7XHJcbiAgcGFnZUluZGV4ID0gMTtcclxuICBwYWdlU2l6ZSA9IDE1O1xyXG4gIG1vYmlsZURpc3BsYXllZEl0ZW1zID0gMDtcclxuICBwcml2YXRlIHNlbGVjdGVkU3RhdHVzRmlsdGVyOiBGaWx0ZXJbXSA9IFtdO1xyXG4gIGFkdmFuY2VkQXBwbGllZEZpbHRlcjogYW55W10gPSBbXTtcclxuICBwZW5kaW5nRmlsdGVyczogYW55W10gPSBbXTtcclxuICBzZWFyY2hTdHI6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgZmlsdGVyUmVxdWVzdDogRmlsdGVyUmVxdWVzdCA9IG5ldyBGaWx0ZXJSZXF1ZXN0KCk7XHJcbiAgcHJpdmF0ZSB0aW1lcjogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgb3ZlcnJpZGUgcGFnZUluZm86IFBhZ2VJbmZvID0gRU1QVFlfUEFHRV9JTkZPO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVuYWJsZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIG1vYmlsZVBhZ2VTaXplOiBudW1iZXIgPSAyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIG1vYmlsZUxvYWRNb3JlSW5jcmVtZW50OiBudW1iZXIgPSAyO1xyXG5cclxuICBASW5wdXQoKSBkYXRhPzogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcbiAgQElucHV0KClcclxuICBsaXN0QWN0aW9uOiBCdXR0b25BY3Rpb25TZXR0aW5nc1tdID0gW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZXh0cmFBY3Rpb25zOiBCdXR0b25BY3Rpb25TZXR0aW5nc1tdID0gW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYnV0dG9uc0Rpc3BsYXlNb2RlOiAnZHJvcGRvd24nIHwgJ2xpc3QnID0gJ2Ryb3Bkb3duJztcclxuXHJcbiAgQElucHV0KClcclxuICBjb2x1bW5zOiBUYWJsZUNvbHVtbjxhbnk+W107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgLy9AdHMtaWdub3JlXHJcbiAgcGF0aFBhcmFtOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZXh0cmFCdXR0b246ICBCdXR0b25BY3Rpb25TZXR0aW5nc1tdID0gW107XHJcblxyXG4gIEBPdXRwdXQoKSBidXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25BY3Rpb25TZXR0aW5ncz4oKTtcclxuXHJcbiAgQElucHV0KCkgLy9AdHMtaWdub3JlXHJcbiAgZW5mb3JjZVJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBpc1BlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICB0cmlnZ2VyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCA9IG5ldyBSZXBvcnRSZXF1ZXN0KHt9KTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXBhcmF0ZUVuZHBvaW50RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgbWFuYWdlYWJsZVBhZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICB0b3RhbFBhZ2VzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KClcclxuICBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHVzZXJBY3Rpb246IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4oKTtcclxuICBAT3V0cHV0KClcclxuICBoeXBlckxpbmtBY3Rpb246IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgZXh0cmFBY3Rpb246IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWRDb2x1bW46IEV2ZW50RW1pdHRlcjxTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgbGlzdEFjdGlvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx7IGFjdGlvbjogQnV0dG9uQWN0aW9uU2V0dGluZ3MsIHJvdzogYW55ICwgaXNQZW5kaW5nOiBib29sZWFufT4gPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGFjdGlvbjogQnV0dG9uQWN0aW9uU2V0dGluZ3MsXHJcbiAgICByb3c6IGFueSxcclxuICAgIGlzUGVuZGluZzogYm9vbGVhblxyXG4gIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNob3dEaWFsb2c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHVzZWRXb3JrZmxvdyE6IFdvcmtmbG93O1xyXG5cclxuICBtb2RlOmFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBjdXN0b21pemVkRGF0YT86IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xyXG4gIHNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICBub0RhdGFGb3VuZCA9IGZhbHNlO1xyXG4gIHRvdGFsUmVxdWlyZWRDb3VudEl0ZW0gPSAwO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgY2xpY2tSb3V0ZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGJhY2tlbmRTZXJ2aWNlOiBCYWNrZW5kU2VydmljZSxcclxuICAgICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBzaGFyZURhdGFTZXJ2aWNlOiBTaGFyZURhdGFTZXJ2aWNlLFxyXG4gICAgICBASW5qZWN0KCdzZWN1cml0eU1hbmFnZXInKSBwcml2YXRlIHNlY3VyaXR5TWFuYWdlcjogYW55LFxyXG4gICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5maWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3QoKTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVNb2JpbGVQYWdlU2l6ZSgpO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2VJbmZvLmxhenlMb2FkRGF0YSAhPT0gdHJ1ZSB8fCB0aGlzLmVuZm9yY2VSZWZyZXNoID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5iYWNrZW5kU2VydmljZS5pc0VtcHR5SXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPD0gMDtcclxuICAgIGlmICh0aGlzLmN1c3RvbWl6ZWREYXRhKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuY3VzdG9taXplZERhdGE7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLm1hbmFnZWFibGVQYWdlcykge1xyXG4gICAgICB0aGlzLnBhZ2VzQ291bnQgPSB0aGlzLnRvdGFsUGFnZXNDb3VudDtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplTW9iaWxlUGFnZVNpemUoKTtcclxuICAgIHRoaXMubW9iaWxlRGlzcGxheWVkSXRlbXMgPSB0aGlzLnBhZ2VTaXplO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA3Njg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVNb2JpbGVQYWdlU2l6ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzTW9iaWxlKCkgJiYgdGhpcy5wYWdlU2l6ZSA+IHRoaXMubW9iaWxlUGFnZVNpemUpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMubW9iaWxlUGFnZVNpemU7XHJcbiAgICAgIGlmICh0aGlzLnJlcG9ydFJlcXVlc3Q/LmZpbHRlclJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMubW9iaWxlUGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShldmVudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50O1xyXG4gICAgdGhpcy5nZXROZXh0KHRoaXMucGFnZUluZGV4IC0gMSk7XHJcbiAgICBpZiAodGhpcy5tYW5hZ2VhYmxlUGFnZXMpIHtcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5wYWdlSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGV4dHJhY3RGaWVsZE5hbWUoZWxlbWVudDogYW55LCBwcm9wZXJ0eTogc3RyaW5nKSB7XHJcbiAgICBpZiAocHJvcGVydHk/LmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgcmV0dXJuIHByb3BlcnR5LnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIGVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50W3Byb3BlcnR5XSkgJiYgYy5hcnJheVN1YlByb3BlcnR5ICkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZWxlbWVudFtwcm9wZXJ0eV0ubWFwKGYgPT4gZltjLmFycmF5U3ViUHJvcGVydHldKTtcclxuICAgICAgICByZXR1cm4gIGZpZWxkVmFsdWVzLmpvaW4oJywgJyk7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFtwcm9wZXJ0eV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB2aXNpYmxlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuYnVpbGRHcm91cHMoKVxyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5wcm9wZXJ0eSk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlzaWJsZUNvbHVtbnNBcnJheSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiBUYWJsZUNvbHVtbjxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIGdldFNvcnREaXJlY3Rpb24ocHJvcGVydHk6IHN0cmluZyk6ICdhc2MnIHwgJ2Rlc2MnIHwgJycge1xyXG4gICAgaWYgKHRoaXMucmVwb3J0UmVxdWVzdD8uZmlsdGVyUmVxdWVzdD8uc29ydEtleSA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnNvcnREaXJlY3Rpb24gPT09ICdBU0MnID8gJ2FzYycgOiAnZGVzYyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTb3J0Q2xpY2socHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgQ09MVU1OID0gdGhpcy5nZXRDb2x1bW4ocHJvcGVydHkpO1xyXG4gICAgaWYgKCFDT0xVTU4gfHwgIUNPTFVNTi5lbmFibGVTb3J0aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBDVVJSRU5UX0RJUkVDVElPTiA9IHRoaXMuZ2V0U29ydERpcmVjdGlvbihwcm9wZXJ0eSk7XHJcbiAgICBsZXQgTkVXX0RJUkVDVElPTjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcclxuXHJcbiAgICBpZiAoQ1VSUkVOVF9ESVJFQ1RJT04gPT09ICdhc2MnKSB7XHJcbiAgICAgIE5FV19ESVJFQ1RJT04gPSAnZGVzYyc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vblNvcnRBY3Rpb24oe1xyXG4gICAgICBhY3RpdmU6IHByb3BlcnR5LFxyXG4gICAgICBkaXJlY3Rpb246IE5FV19ESVJFQ1RJT05cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc29ydFN0YXRlOiBhbnkgPSB7fTtcclxuXHJcbiAgZ2V0TmV4dChwYWdlSW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZUluZGV4ID0gcGFnZUluZGV4O1xyXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gIH1cclxuICBvblBhZ2VTaXplQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZVNpemUgPSBldmVudDtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gMTsgLy8gcmVzZXQgdG8gZmlyc3QgcGFnZSBvbiBwYWdlIHNpemUgY2hhbmdlXHJcbiAgICB0aGlzLm1vYmlsZURpc3BsYXllZEl0ZW1zID0gMDtcclxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMuZ2V0TmV4dCgwKTtcclxuICB9XHJcblxyXG4gIG9uTG9hZE1vcmUoaXRlbXNUb0xvYWQ6IG51bWJlcikge1xyXG4gICAgY29uc3QgY3VycmVudERpc3BsYXllZCA9IHRoaXMubW9iaWxlRGlzcGxheWVkSXRlbXMgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoIHx8IHRoaXMucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTWF0aC5taW4oY3VycmVudERpc3BsYXllZCArIGl0ZW1zVG9Mb2FkLCB0aGlzLnRvdGFsRWxlbWVudHMpO1xyXG4gICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IHRoaXMucGFnZVNpemU7XHJcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlSW5kZXggPSAwO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSAxO1xyXG4gICAgdGhpcy5sb2FkRGF0YSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGEoc2tpcE1vYmlsZVJlc2V0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcclxuXHJcbiAgICBpZiAoIXNraXBNb2JpbGVSZXNldCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVNb2JpbGVQYWdlU2l6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCh0aGlzLnBhZ2VTaXplIHx8IHRoaXMucGFnZUluZm8ucGFnZVNpemUpO1xyXG4gICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zZWFyY2hTdHIgPSB0aGlzLnNlYXJjaFN0cjtcclxuICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QuZmlsdGVycyA9IFtcclxuICAgICAgICAuLi4odGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgfHwgW10pLFxyXG4gICAgICAgIC4uLih0aGlzLmZpbHRlcnMgfHwgW10pLmZpbHRlcihmID0+XHJcbiAgICAgICAgICAhKHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyIHx8IFtdKS5zb21lKGEgPT4gYS5maWVsZCA9PT0gZi5maWVsZE5hbWUpXHJcbiAgICAgICAgKVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcclxuICAgIGlmICh0aGlzLnNlcGFyYXRlRW5kcG9pbnREYXRhIHx8ICF0aGlzLnBhZ2VJbmZvLmFwaVVyaSB8fCB0aGlzLnBhZ2VJbmZvLmFwaVVyaS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnNlcGFyYXRlRW5kcG9pbnREYXRhO1xyXG4gICAgfSBlbHNlIGlmKHRoaXMucmVwb3J0UmVxdWVzdCA9PSB1bmRlZmluZWQpe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYoIXRoaXMubWFuYWdlYWJsZVBhZ2VzKSAge1xyXG4gICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5jb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoYyA9PiBGUk9OVF9FTkRfQ09MVU1OX1RZUEVTLmluZGV4T2YoYy50eXBlKSA8IDAgKS5tYXAoYyA9PiBjLnByb3BlcnR5KSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBlbmRpbmdQYWdlID0gdGhpcy5pc1BlbmRpbmc7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zZWFyY2hTdHIgPSB0aGlzLnNlYXJjaFN0cjtcclxuICAgICAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LmZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgIC4uLih0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciB8fCBbXSksXHJcbiAgICAgICAgICAgIC4uLih0aGlzLmZpbHRlcnMgfHwgW10pLmZpbHRlcihmID0+XHJcbiAgICAgICAgICAgICAgISh0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciB8fCBbXSkuc29tZShhID0+IGEuZmllbGQgPT09IGYuZmllbGROYW1lKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLmdldEl0ZW1zQnlGaWx0ZXIodGhpcy5yZXBvcnRSZXF1ZXN0Py5maWx0ZXJSZXF1ZXN0LCB0aGlzLnBhZ2VJbmZvLmFwaVVyaSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRW52ZWxvcGUgPSBuZXcgUmVzcG9uc2VFbnZlbG9wKHJlc3ApO1xyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZUVudmVsb3BlLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVxdWlyZWRDb3VudEl0ZW0gPSB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IHJlc3BvbnNlRW52ZWxvcGUuYm9keS5sZW5ndGggPCAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSByZXNwb25zZUVudmVsb3BlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLmlzRW1wdHlJdGVtcyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA8PSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEVsZW1lbnRzID0gcmVzcG9uc2VFbnZlbG9wZS50b3RhbFNpemUgfHwgMDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNDb3VudCA9IE1hdGguY2VpbCh0aGlzLnRvdGFsRWxlbWVudHMgLyB0aGlzLnBhZ2VTaXplKSB8fCAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSAodGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZUluZGV4IHx8IDApICsgMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnRvdGFsSXRlbXMgPSByZXNwb25zZUVudmVsb3BlLnRvdGFsU2l6ZSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VJbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vYmlsZURpc3BsYXllZEl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAsIDMwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXNEZXNjcmlwdGlvbihlbGVtZW50OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmRTZXJ2aWNlLmdldFN0YXR1c0Rlc2NyaXB0aW9uKGVsZW1lbnQsIHRoaXMudXNlZFdvcmtmbG93KTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRlVHlwZShlbGVtZW50OiBhbnkpIHtcclxuICAgIHJldHVybiBlbGVtZW50LnN0YXRlVHlwZVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJjdXN0b21pemVkRGF0YVwiXSAmJiAhY2hhbmdlc1tcImN1c3RvbWl6ZWREYXRhXCJdLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGNoYW5nZXNbXCJjdXN0b21pemVkRGF0YVwiXS5jdXJyZW50VmFsdWU/LmRhdGEgfHwgW107ICAvLyBVcGRhdGUgZGF0YSBzb3VyY2Ugd2l0aCBuZXcgZGF0YVxyXG4gICAgICB0aGlzLnBhZ2VzQ291bnQ9dGhpcy50b3RhbFBhZ2VzQ291bnQ7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4PXRoaXMuY3VycmVudFBhZ2VJbmRleDtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiZW5mb3JjZVJlZnJlc2hcIl0gJiYgIWNoYW5nZXNbXCJlbmZvcmNlUmVmcmVzaFwiXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbXCJpc1BlbmRpbmdcIl0gJiYgIWNoYW5nZXNbXCJpc1BlbmRpbmdcIl0uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Q3JvcHBlZFRleHQoZWxlbWVudFZhbHVlOiBhbnksIHN1YldpZHRoOiBudW1iZXIgPSAyMCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUubGVuZ3RoID4gc3ViV2lkdGggPyBlbGVtZW50VmFsdWUuc3Vic3RyaW5nKDAsIHN1YldpZHRoKSArIFwiLi4uXCIgOiBlbGVtZW50VmFsdWU7XHJcbiAgfVxyXG5cclxuICBlbWl0RXZlbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dEaWFsb2cuZW1pdChlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3RGb3JtYXQoY29sdW1uOiBUYWJsZUNvbHVtbjxhbnk+KSB7XHJcbiAgICByZXR1cm4gY29sdW1uPy5mb3JtYXQgfHwgJ2QvTS95eXl5LCBoOm1tIGEnO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uTGlzdENsaWNrZWQobGlzdEFjdGlvbjogQnV0dG9uQWN0aW9uU2V0dGluZ3MsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5saXN0QWN0aW9uQ2xpY2tlZC5lbWl0KHthY3Rpb246bGlzdEFjdGlvbiwgcm93OiBlbGVtZW50LCBpc1BlbmRpbmc6IHRoaXMuaXNQZW5kaW5nfSk7XHJcbiAgfVxyXG5cclxuICBoeXBlckxpbmtDbGlja2VkKGFjdGlvbk5hbWU6IHN0cmluZywgZWxlbWVudDogYW55KSB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSBUQUJMRV9SRUNPUkRfQUNUSU9OO1xyXG4gICAgYWN0aW9uLmFjdGlvbktleSA9IGFjdGlvbk5hbWU7XHJcbiAgICBhY3Rpb24uaXRlbSA9IGVsZW1lbnQ7XHJcbiAgICBhY3Rpb24ucGFnZUluZm8gPSB0aGlzLnBhZ2VJbmZvO1xyXG4gICAgdGhpcy5oeXBlckxpbmtBY3Rpb24uZW1pdChhY3Rpb24pXHJcbiAgfVxyXG5cclxuXHJcbiAgZW1pdFJvdXRlUGFnZShlbGVtZW50OiBhbnkpe1xyXG4gICAgdGhpcy5jbGlja1JvdXRlUGFnZS5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RJdGVtKHJvdzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5wYWdlSW5mby5zZWxmUm91dGluZykge1xyXG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5pc1BlbmRpbmcgPyAncGVuZGluZycgOiAndmlldyc7XHJcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMucGFnZUluZm8ubGlzdFJvdXRlUGF0aCB8fCB0aGlzLnJvdXRlci51cmx9L3ZpZXdgO1xyXG5cclxuICAgICAgY29uc3QgZW5jcnlwdGVkSWQgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmVuY3J5cHQoU3RyaW5nKHJvdy5pZCkpO1xyXG4gICAgICBjb25zdCBlbmNyeXB0ZWRNb2RlID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KG1vZGUpO1xyXG5cclxuICAgICAgY29uc3QgZW5jcnlwdGVkUm93ID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KEpTT04uc3RyaW5naWZ5KHJvdykpO1xyXG5cclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogeyB0b2tlbjogZW5jcnlwdGVkSWQsIG1vZGU6IGVuY3J5cHRlZE1vZGUgfSxcclxuICAgICAgICBzdGF0ZTogeyByYXc6IGVuY3J5cHRlZFJvdyB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3QgYWN0aW9uID0gU0VMRUNUX1JFQ09SRF9BQ1RJT047XHJcbiAgICAvLyBhY3Rpb24uaWQgPSByb3c/LmlkO1xyXG4gICAgLy8gYWN0aW9uLml0ZW0gPSByb3c7XHJcbiAgICAvLyB0aGlzLnVzZXJBY3Rpb24uZW1pdChhY3Rpb24pXHJcbiAgfVxyXG5cclxuICBvcGVuTmV3VGFiKHJvdykge1xyXG4gICAgaWYgKCF0aGlzLnBhZ2VJbmZvLmVtYmVkZWRUYWJsZU9ubHkpIHtcclxuICAgICAgY29uc3QgbW9kZSA9IHRoaXMuaXNQZW5kaW5nID8gJ3BlbmRpbmcnIDogJ3ZpZXcnO1xyXG4gICAgICB3aW5kb3cub3BlbihgJHt0aGlzLnBhZ2VJbmZvLmxpc3RSb3V0ZVBhdGh9LyR7bW9kZX1gICsgJy8nICsgcm93Py5pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblZpZXdNb2RlQ2hhbmdlZFJlY2VpdmVkKGlzUGVuZGluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zd2l0Y2hWaWV3TW9kZShpc1BlbmRpbmcpO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoVmlld01vZGUoaXNQZW5kaW5nOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzUGVuZGluZyA9IGlzUGVuZGluZztcclxuICAgIHRoaXMubG9hZERhdGEoKTtcclxuICB9XHJcblxyXG4gIG9uQWRkTmV3QWN0aW9uKCRldmVudDogYW55KSB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnBhZ2VJbmZvLmxpc3RSb3V0ZVBhdGggfHwgdGhpcy5yb3V0ZXIudXJsfS92aWV3YDtcclxuICAgIGNvbnN0IGVuY3J5cHRlZElkID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KFwiLTFcIik7XHJcbiAgICBjb25zdCBlbmNyeXB0ZWRNb2RlID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KFwicGVuZGluZ1wiKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt1cmx9YF0sXHJcbiAgICAgIHsgcXVlcnlQYXJhbXM6IHsgdG9rZW46IGVuY3J5cHRlZElkICwgbW9kZSA6IGVuY3J5cHRlZE1vZGUgfSB9KTtcclxuXHJcbiAgICAvLyBjb25zdCBhY3Rpb24gPSBTRUxFQ1RfUkVDT1JEX0FDVElPTjtcclxuICAgIC8vIGFjdGlvbi5pZCA9IHJvdz8uaWQ7XHJcbiAgICAvLyBhY3Rpb24uaXRlbSA9IHJvdztcclxuICAgIC8vIHRoaXMudXNlckFjdGlvbi5lbWl0KGFjdGlvbilcclxuICB9XHJcblxyXG4gIHNob3dBZGROZXcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlSW5mby5oYXNBZGRCdXR0b24gO1xyXG4gIH1cclxuXHJcbiAgb25FeHRyYUJ1dHRpb25BY3Rpb24oJGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZXh0cmFBY3Rpb24uZW1pdCgkZXZlbnQpO1xyXG5cclxuICB9XHJcblxyXG4gIGhhc0dyb3VwcygpIHtcclxuICAgIGxldCBiID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChwID0+IHAuZ3JvdXApO1xyXG4gICAgcmV0dXJuIGIgPj0gMDtcclxuICB9XHJcbiAgZ3JvdXBOYW1lczogYW55ID0gW11cclxuICBncm91cFNwYW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBidWlsZEdyb3Vwcygpe1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIHRoaXMuZ3JvdXBOYW1lcyA9IFtdO1xyXG4gICAgdGhpcy5ncm91cFNwYW5zLmNsZWFyKCk7XHJcbiAgICBpZih0aGlzLmhhc0dyb3VwcygpID09PSBmYWxzZSl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSA9PT0gdHJ1ZSlcclxuICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZ3JvdXAgPT09IFwiLVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmFtZXMucHVzaChjb3VudC50b1N0cmluZygpKTtcclxuICAgICAgICAgIHRoaXMuaW5zZXJ0SW5NYXAoY291bnQpO1xyXG4gICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmdyb3VwTmFtZXMuaW5jbHVkZXMoY29sdW1uLmdyb3VwKSkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cE5hbWVzLnB1c2goY29sdW1uLmdyb3VwKTtcclxuICAgICAgICAgIHRoaXMuaW5zZXJ0SW5NYXAoY29sdW1uLmdyb3VwKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbnNlcnRJbk1hcChjb2x1bW4uZ3JvdXApO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGluc2VydEluTWFwKGtleSl7XHJcbiAgICBpZih0aGlzLmdyb3VwU3BhbnMuaGFzKGtleSkpe1xyXG4gICAgICB0aGlzLmdyb3VwU3BhbnMuc2V0KGtleS50b1N0cmluZygpLCB0aGlzLmdyb3VwU3BhbnMuZ2V0KGtleSkgKyAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTcGFucy5zZXQoa2V5LnRvU3RyaW5nKCksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNIdW1hbk1hZGUoc3RyKXtcclxuICAgIHJldHVybiBpc05hTihzdHIpO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uQnV0dG9uQ2xpY2tlZChhY3Rpb25LZXk6IHN0cmluZywgaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoYWN0aW9uS2V5ID09PSAnbmF2aWdhdGUnKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGVBY3Rpb24oaXRlbSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXRUYWJsZUFjdGlvbihhY3Rpb25LZXksIGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0ZUFjdGlvbihpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1vZGUgPSB0aGlzLmlzUGVuZGluZyA/ICdwZW5kaW5nJyA6ICd2aWV3JztcclxuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5wYWdlSW5mby5saXN0Um91dGVQYXRoIHx8IHRoaXMucm91dGVyLnVybDtcclxuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VQYXRofS92aWV3YDtcclxuXHJcbiAgICBjb25zdCBlbmNyeXB0ZWRJZCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChpdGVtLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgY29uc3QgZW5jcnlwdGVkTW9kZSA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChtb2RlKTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyB0b2tlbjogZW5jcnlwdGVkSWQsIG1vZGU6IGVuY3J5cHRlZE1vZGUgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRUYWJsZUFjdGlvbihhY3Rpb25LZXk6IHN0cmluZywgaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSBUQUJMRV9SRUNPUkRfQUNUSU9OO1xyXG4gICAgYWN0aW9uLmFjdGlvbktleSA9IGFjdGlvbktleTtcclxuICAgIGFjdGlvbi5pdGVtID0gaXRlbTtcclxuICAgIGFjdGlvbi5wYWdlSW5mbyA9IHRoaXMucGFnZUluZm87XHJcbiAgICB0aGlzLnVzZXJBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdFJlcG9ydChyZXBvcnRUeXBlOiBhbnkpIHtcclxuICAgIGNvbnN0IG15RmlsdGVycyA9IHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0O1xyXG4gICAgY29uc3QgcmVwb3J0UmVxdWVzdCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KHRoaXMuY29sdW1ucywgdGhpcy5wYWdlSW5mby5sYWJlbHNTZWN0aW9uICsgJy5saXN0X3RpdGxlJyxcclxuICAgICAgbXlGaWx0ZXJzLCByZXBvcnRUeXBlLCB0aGlzLnBhZ2VJbmZvLCB0aGlzLnNlYXJjaFN0ciwgJ0xBTkRTQ0FQRScpO1xyXG4gICAgdGhpcy5iYWNrZW5kU2VydmljZS5kb3dubG9hZFJlcG9ydChyZXBvcnRSZXF1ZXN0LCB0aGlzLnBhZ2VJbmZvLmFwaVVyaSk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ3Bhc3MnOiByZXR1cm4gJ2NoZWNrX2NpcmNsZSc7XHJcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOiByZXR1cm4gJ3dhcm5pbmcnO1xyXG4gICAgICBjYXNlICdlcnJvcic6IHJldHVybiAnZXJyb3InO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ2hlbHAnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aW9uQ2hlY2tlZENsaWNrZWQocHJvcGVydHk6IHN0cmluZywgZWxlbWVudCkge1xyXG4gICAgZWxlbWVudFtwcm9wZXJ0eV09ICFlbGVtZW50W3Byb3BlcnR5XTtcclxuICAgIHRoaXMuYWN0aW9uQnV0dG9uQ2xpY2tlZChwcm9wZXJ0eSwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNEYXJrSGlnaGxpZ2h0KHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBncm91cEJ5UHJvcCA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlQcm9wZXJ0eTtcclxuICAgIGNvbnN0IGdyb3VwQnlWYWx1ZXMgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5VmFsdWU7XHJcblxyXG4gICAgaWYgKCFncm91cEJ5UHJvcCB8fCAhZ3JvdXBCeVZhbHVlcyB8fCAhcm93W2dyb3VwQnlQcm9wXSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2VsbFZhbHVlID0gcm93W2dyb3VwQnlQcm9wXS50b1N0cmluZygpO1xyXG5cclxuICAgIHJldHVybiBncm91cEJ5VmFsdWVzLnNvbWUodmFsID0+XHJcbiAgICAgIGNlbGxWYWx1ZS5pbmNsdWRlcyh2YWwpICYmIGNlbGxWYWx1ZS5sZW5ndGggPiB2YWwubGVuZ3RoXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkUmVuZGVyQXNIeXBlckxpbmsoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBncm91cEJ5UHJvcCA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlQcm9wZXJ0eTtcclxuICAgIGNvbnN0IGdyb3VwQnlWYWx1ZXMgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5VmFsdWU7XHJcblxyXG4gICAgaWYgKCFncm91cEJ5UHJvcCB8fCAhZ3JvdXBCeVZhbHVlcyB8fCAhZWxlbWVudFtncm91cEJ5UHJvcF0pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtncm91cEJ5UHJvcF0udG9TdHJpbmcoKTtcclxuXHJcbiAgICByZXR1cm4gIWdyb3VwQnlWYWx1ZXMuc29tZSh2ID0+IHZhbHVlLmluY2x1ZGVzKHYpICYmIHZhbHVlLmxlbmd0aCA+PSB2Lmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Tb3J0QWN0aW9uKCRldmVudDogU29ydCkge1xyXG4gICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLnByb3BlcnR5ID09PSAkZXZlbnQuYWN0aXZlKTtcclxuXHJcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zb3J0S2V5ID1cclxuICAgICAgJGV2ZW50LmFjdGl2ZSAmJiAkZXZlbnQuZGlyZWN0aW9uXHJcbiAgICAgICAgPyAoY29sPy5zb3J0S2V5ID8/ICRldmVudC5hY3RpdmUpXHJcbiAgICAgICAgOiAnaWQnO1xyXG5cclxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnNvcnREaXJlY3Rpb24gPSAkZXZlbnQuZGlyZWN0aW9uID09PSAnYXNjJyA/ICdBU0MnIDogJ0RFU0MnO1xyXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbi5lbWl0KCRldmVudCk7XHJcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICB9XHJcblxyXG4gIHNob3VsZFNob3dCdXR0b24oZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBncm91cEJ5UHJvcCA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlQcm9wZXJ0eTtcclxuICAgIGNvbnN0IGdyb3VwQnlWYWx1ZXMgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5VmFsdWU7XHJcblxyXG4gICAgaWYgKCFncm91cEJ5UHJvcCB8fCAhZ3JvdXBCeVZhbHVlcyB8fCAhZWxlbWVudFtncm91cEJ5UHJvcF0pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmFsdWUgPSBlbGVtZW50W2dyb3VwQnlQcm9wXS50b1N0cmluZygpO1xyXG5cclxuICAgIHJldHVybiAhZ3JvdXBCeVZhbHVlcy5zb21lKHYgPT4gdmFsdWUuaW5jbHVkZXModikgJiYgdmFsdWUubGVuZ3RoID49IHYubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHN0b3JlUGVuZGluZ0ZpbHRlcnMoJGV2ZW50OiB7IGZpbHRlcnM6IEZpZWxkRmlsdGVyW10sIHNlYXJjaFN0cjogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSAkZXZlbnQuZmlsdGVycyB8fCBbXTtcclxuICAgICAgdGhpcy5zZWFyY2hTdHIgPSAkZXZlbnQuc2VhcmNoU3RyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldFBhZ2luYXRpb25Gb3JGaWx0ZXJDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0KSB7XHJcbiAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3QodGhpcy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VJbmZvLnBhZ2VTaXplKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XHJcbiAgICBpZiAodGhpcy5tYW5hZ2VhYmxlUGFnZXMpIHtcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5wYWdlSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlQZW5kaW5nRmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyID0gdGhpcy5wZW5kaW5nRmlsdGVycyB8fCBbXTtcclxuICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uRm9yRmlsdGVyQ2hhbmdlKCk7XHJcbiAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWx0ZXJFbXB0eSgkZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICgkZXZlbnQpIHtcclxuICAgICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IFtdO1xyXG4gICAgICB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciA9IFtdO1xyXG4gICAgICB0aGlzLnNlYXJjaFN0ciA9ICcnO1xyXG4gICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbkZvckZpbHRlckNoYW5nZSgpO1xyXG4gICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldERhdGEoJGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyID0gW107XHJcbiAgICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSBbXTtcclxuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb25Gb3JGaWx0ZXJDaGFuZ2UoKTtcclxuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgICAvLyB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc0ZpbHRlcnNBcHBsaWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciAmJiB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlci5sZW5ndGggPiAwKSB8fFxyXG4gICAgICAgICAgICh0aGlzLmZpbHRlcnMgJiYgdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDApIHx8XHJcbiAgICAgICAgICAgKHRoaXMucGVuZGluZ0ZpbHRlcnMgJiYgdGhpcy5wZW5kaW5nRmlsdGVycy5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIGdldERpc3BsYXlTdmdQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNGaWx0ZXJzQXBwbGllZCgpICYmIHRoaXMubm9SZXN1bHRTdmdQYXRoID8gdGhpcy5ub1Jlc3VsdFN2Z1BhdGggOiB0aGlzLm5vRGF0YUZvdW5kU3ZnUGF0aDtcclxuICB9XHJcblxyXG4gIGdldERpc3BsYXlUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzRmlsdGVyc0FwcGxpZWQoKSAmJiB0aGlzLm5vUmVzdWx0U3ZnUGF0aCA/IHRoaXMubm9SZXN1bHRUaXRsZSA6IHRoaXMubm9EYXRhRm91bmRUaXRsZTtcclxuICB9XHJcblxyXG4gIGdldERpc3BsYXlTdWJ0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzRmlsdGVyc0FwcGxpZWQoKSAmJiB0aGlzLm5vUmVzdWx0U3ZnUGF0aCA/IHRoaXMubm9SZXN1bHRTdWJ0aXRsZSA6IHRoaXMubm9EYXRhRm91bmRTdWJ0aXRsZTtcclxuICB9XHJcblxyXG4gIGJ1dHRvbkNsaWNrZWRFdmVudCgkZXZlbnQ6IEJ1dHRvbkFjdGlvblNldHRpbmdzKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0TW9iaWxlQ2FyZElkQ29sdW1uKCk6IFRhYmxlQ29sdW1uPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy52aXNpYmxlICYmIGMubW9iaWxlQ2FyZElkID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIGdldE1vYmlsZUNhcmRTdGF0dXNDb2x1bW4oKTogVGFibGVDb2x1bW48YW55PiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLnZpc2libGUgJiYgYy5tb2JpbGVDYXJkU3RhdHVzID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIGdldE1vYmlsZUNhcmRDb2x1bW5zKCk6IFRhYmxlQ29sdW1uPGFueT5bXSB7XHJcbiAgICBjb25zdCBpZENvbCA9IHRoaXMuZ2V0TW9iaWxlQ2FyZElkQ29sdW1uKCk7XHJcbiAgICBjb25zdCBzdGF0dXNDb2wgPSB0aGlzLmdldE1vYmlsZUNhcmRTdGF0dXNDb2x1bW4oKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+XHJcbiAgICAgIGMudmlzaWJsZSAmJlxyXG4gICAgICBjLnByb3BlcnR5ICE9PSAnYWN0aW9ucycgJiZcclxuICAgICAgYyAhPT0gaWRDb2wgJiZcclxuICAgICAgYyAhPT0gc3RhdHVzQ29sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbGFiZWxLZXlCeVZhbHVlKGNvbHVtbjogVGFibGVDb2x1bW48YW55PiB8IHVuZGVmaW5lZCwgcm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFjb2x1bW4gfHwgIWNvbHVtbi5wcm9wZXJ0eSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIHN1cGVyLmxhYmVsS2V5QnlWYWx1ZShjb2x1bW4sIHJvdyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtbiBiYXNlVGFibGVcIj5cclxuICA8ZGl2IGNsYXNzPVwiZmxleC1yb3cgZmxleC0xMDBcIiA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW4gYWxpZ24tc3RhcnQgZmxleC0xMDBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxyXG4gICAgICA8YXBwLXRpdGxlLWJhclxyXG4gICAgICAgIFtwYWdlVGl0bGVdPVwicGFnZUluZm8uaGlkZVRpdGxlID8gJycgOiBwYWdlSW5mby5sYWJlbHNTZWN0aW9uKycubGlzdF90aXRsZSdcIlxyXG4gICAgICAgIFtzdWJUaXRsZV09XCIocGFnZUluZm8uaGlkZVRpdGxlIHx8IHBhZ2VJbmZvLmhpZGVTdWJ0aXRsZSkgPyAnJyA6IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24rJy5zdWJ0aXRsZSdcIlxyXG4gICAgICAgIFt0aXRsZU1vZGVdPVwiJydcIlxyXG4gICAgICAgIFtwYWdlSW5mb109XCJwYWdlSW5mb1wiXHJcbiAgICAgICAgW25ld0FjdGlvbl09XCJzaG93QWRkTmV3KClcIlxyXG4gICAgICAgIFtzaG93RXh0cmFjdEJ1dHRvbl09XCIhcGFnZUluZm8uaGlkZUV4dHJhY3RCdXR0b25cIlxyXG4gICAgICAgIFtkcmFmdFN1cHBvcnRlZF09XCJwYWdlSW5mby5kcmFmdFN1cHBvcnRlZFwiXHJcbiAgICAgICAgW2lzUGVuZGluZ109XCJpc1BlbmRpbmdcIlxyXG4gICAgICAgIFtvblZpZXdNb2RlQ2hhbmdlXT1cInN3aXRjaFZpZXdNb2RlLmJpbmQodGhpcylcIlxyXG4gICAgICAgIFtidXR0b25zXT1cImV4dHJhQWN0aW9uc1wiXHJcbiAgICAgICAgW2J1dHRvbnNEaXNwbGF5TW9kZV09XCJidXR0b25zRGlzcGxheU1vZGVcIlxyXG4gICAgICAgIChuZXdBY3Rpb25DbGlja2VkKT1cIm9uQWRkTmV3QWN0aW9uKCRldmVudClcIlxyXG4gICAgICAgIChleHRyYWN0UmVwb3J0KT1cImV4dHJhY3RSZXBvcnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHZpZXdNb2RlQ2hhbmdlZCk9XCJvblZpZXdNb2RlQ2hhbmdlZFJlY2VpdmVkKCRldmVudClcIlxyXG4gICAgICAgIChidXR0b25DbGlja2VkKT1cImJ1dHRvbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICBbdG90YWxFbGVtZW50c109XCJwYWdlSW5mby5oaWRlVGl0bGUgPyB1bmRlZmluZWQgOiB0b3RhbEVsZW1lbnRzXCI+XHJcbiAgICAgIDwvYXBwLXRpdGxlLWJhcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvd1wiICpuZ0lmPVwiIXBhZ2VJbmZvLmhpZGVBZHZhbmNlZEZpbHRlclwiPlxyXG4gICAgPGFwcC1maWx0ZXItYnVpbGRlclxyXG4gICAgICAqbmdJZj1cIiFwYWdlSW5mby5oaWRlQWR2YW5jZWRGaWx0ZXJcIlxyXG4gICAgICBbcGFnZUluZm9dPVwicGFnZUluZm9cIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW2ZpbHRlckZpZWxkc109XCJmaWx0ZXJGaWVsZHNcIlxyXG4gICAgICBbcGVuZGluZ0ZpbHRlcnNdPVwicGVuZGluZ0ZpbHRlcnNcIlxyXG4gICAgICBbc2hvd0V4cG9ydEJ1dHRvbl09XCIhcGFnZUluZm8uaGlkZUV4dHJhY3RCdXR0b25cIlxyXG4gICAgICAoZmlsdGVySW5mb3JtYXRpb24pPVwic3RvcmVQZW5kaW5nRmlsdGVycygkZXZlbnQpXCJcclxuICAgICAgKGlzRW1wdHkpPVwiaGFuZGxlRmlsdGVyRW1wdHkoJGV2ZW50KVwiXHJcbiAgICAgIChhcHBseUZpbHRlcik9XCJhcHBseVBlbmRpbmdGaWx0ZXJzKClcIlxyXG4gICAgICAoc29ydEJ5Q2xpY2tlZCk9XCJoYW5kbGVTb3J0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgIChleHBvcnRDbGlja2VkKT1cImV4dHJhY3RSZXBvcnQoJGV2ZW50KVwiPlxyXG4gICAgPC9hcHAtZmlsdGVyLWJ1aWxkZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiICpuZ0lmPVwiIXBhZ2VJbmZvLmhpZGVFeHRyYWN0QnV0dG9uXCI+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCIhcGFnZUluZm8uaGlkZUV4dHJhY3RCdXR0b25cIlxyXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJleHBvcnRNZW51XCJcclxuICAgICAgICBjbGFzcz1cImJ0bi1leHBvcnRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi10ZXh0XCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+ZmlsZV9leHBvcnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJ2V4cG9ydCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhcnJvdy1pY29uXCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPG1hdC1tZW51ICNleHBvcnRNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXh0cmFjdFJlcG9ydCgncGRmJylcIj5QREY8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4dHJhY3RSZXBvcnQoJ3hsc3gnKVwiPkV4Y2VsPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHRyYWN0UmVwb3J0KCdjc3YnKVwiPkNTVjwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1tZW51PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtcm93IGZsZXgtMTAwIGJhc2VUYWJsZV9fZGV0YWlsc0NvbHVtblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMTAwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvdyBmbGV4LTEwMCBtYWluVGFibGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCIgW2F0dHIuZGF0YS1zb3J0XT1cInNvcnRTdGF0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW5Qcm9wIG9mIHZpc2libGVDb2x1bW5zQXJyYXk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtaGVhZGVyLWNlbGxcIlxyXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5zb3J0YWJsZV09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmVuYWJsZVNvcnRpbmdcIlxyXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5maXJzdC1jZWxsXT1cImkgPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5sYXN0LWNlbGxdPVwiaSA9PT0gdmlzaWJsZUNvbHVtbnNBcnJheS5sZW5ndGggLSAxXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9ucy1jZWxsXT1cImkgPT09IHZpc2libGVDb2x1bW5zQXJyYXkubGVuZ3RoIC0gMSAmJiBjb2x1bW5Qcm9wID09PSAnYWN0aW9ucydcIlxyXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5oYXMtd2lkdGhdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCA/IHsnd2lkdGgnOiBnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoICsgJyUnLCAnZmxleC1iYXNpcyc6IGdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggKyAnJSd9IDoge31cIlxyXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmVuYWJsZVNvcnRpbmcgJiYgaGFuZGxlU29ydENsaWNrKGNvbHVtblByb3ApXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlci1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLWhlYWRlci1sYWJlbFwiPnt7IGxhYmVsS2V5KGdldENvbHVtbihjb2x1bW5Qcm9wKSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImdldFNvcnREaXJlY3Rpb24oY29sdW1uUHJvcCkgPT09ICdhc2MnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWljb24gc29ydC1hc2NcIj5hcnJvd19kcm9wX3VwPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZ2V0U29ydERpcmVjdGlvbihjb2x1bW5Qcm9wKSA9PT0gJ2Rlc2MnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWljb24gc29ydC1kZXNjXCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhU291cmNlLmRhdGE7IGxldCByb3dJbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlLXJvdy0nICsgKHJvdz8uaWQgfHwgcm93Py5rZXkgfHwgJycpXCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAndGFibGUtcm93LS1oaWdobGlnaHQnOiBzZWxlY3RlZFJvd0luZGV4ID09IHJvdy5pZCB8fCAocGFnZUluZm8uZ3JvdXBCeVByb3BlcnR5ICYmIHBhZ2VJbmZvLmdyb3VwQnlWYWx1ZT8uaW5jbHVkZXMocm93W3BhZ2VJbmZvLmdyb3VwQnlQcm9wZXJ0eV0pKSxcclxuICAgICAgICAgICAgICAgICAgICd0YWJsZS1yb3ctLWRhcmstaGlnaGxpZ2h0JzogaXNEYXJrSGlnaGxpZ2h0KHJvdylcclxuICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAoYXV4Y2xpY2spPVwib3Blbk5ld1RhYihyb3cpXCJcclxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblNlbGVjdEl0ZW0ocm93KVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtblByb3Agb2YgdmlzaWJsZUNvbHVtbnNBcnJheTsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpcnN0LWNlbGxdPVwiaSA9PT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MubGFzdC1jZWxsXT1cImkgPT09IHZpc2libGVDb2x1bW5zQXJyYXkubGVuZ3RoIC0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9ucy1jZWxsXT1cImkgPT09IHZpc2libGVDb2x1bW5zQXJyYXkubGVuZ3RoIC0gMSAmJiBjb2x1bW5Qcm9wID09PSAnYWN0aW9ucydcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy13aWR0aF09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggPyB7J3dpZHRoJzogZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCArICclJywgJ2ZsZXgtYmFzaXMnOiBnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoICsgJyUnfSA6IHt9XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3dvcmtmbG93U3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIndmU3RhdHVzIHt7IGdldFN0YXR1c0Rlc2NyaXB0aW9uKHJvdyl9fVwiIFthdHRyLmlkXT1cIid0YWJsZS1idG4td2YtJytjb2x1bW5Qcm9wKyctJysocm93LmlkIHx8IHJvdy5rZXkgfHwgJycpXCI+e3sgZ2V0U3RhdHVzRGVzY3JpcHRpb24ocm93KSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidoeXBlci10ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgKGNsaWNrKT1cImh5cGVyTGlua0NsaWNrZWQoY29sdW1uUHJvcCwgcm93KVwiIFtuZ0NsYXNzXT1cInsnaHlwZXItbGluayc6IHNob3VsZFJlbmRlckFzSHlwZXJMaW5rKHJvdyl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG91bGRTaG93QnV0dG9uKHJvdylcIiBtYXQtYnV0dG9uIGNsYXNzPVwicHJpbWFyeVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbkJ1dHRvbkNsaWNrZWQoY29sdW1uUHJvcCwgcm93KVwiIFthdHRyLmlkXT1cIid0YWJsZS1idG4tYWN0aW9uLScrY29sdW1uUHJvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxLZXkoZ2V0Q29sdW1uKGNvbHVtblByb3ApKSArICdfdGl0bGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICdtYWluVGFibGVfX3RkX19pY29uLWdyZWVuJzogcm93W2NvbHVtblByb3BdID09PSAncGFzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnbWFpblRhYmxlX190ZF9faWNvbi1vcmFuZ2UnOiByb3dbY29sdW1uUHJvcF0gPT09ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICAgICdtYWluVGFibGVfX3RkX19pY29uLXJlZCc6IHJvd1tjb2x1bW5Qcm9wXSA9PT0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldEljb24ocm93W2NvbHVtblByb3BdKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJwcmltYXJ5XCIgW2NoZWNrZWRdPVwicm93W2NvbHVtblByb3BdXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTthY3Rpb25DaGVja2VkQ2xpY2tlZChjb2x1bW5Qcm9wLHJvdylcIj48L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3RhdGVUeXBlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInN0YXRlVHlwZSB7eyByb3dbY29sdW1uUHJvcF19fVwiIFthdHRyLmlkXT1cIid0YWJsZS1idG4tc3RhdGUtJytjb2x1bW5Qcm9wXCI+e3sgbGFiZWxLZXlCeVZhbHVlKGdldENvbHVtbihjb2x1bW5Qcm9wKSwgcm93KSB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIHwgZGF0ZTonZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3JvcHBlZFRleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Q3JvcHBlZFRleHQocm93W2NvbHVtblByb3BdLCByb3dbZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aF0pIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Rvd25sb2FkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2ljb24tYmx1ZVwiPnN5c3RlbV91cGRhdGVfYWx0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb25PZmYnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwicm93W2NvbHVtblByb3BdID09PSBudWxsXCIgY2xhc3M9XCJtYWluVGFibGVfX3RkX19pY29uLWRhcmtvcmFuZ2VcIj5mbGFnPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IGZhbHNlXCIgY2xhc3M9XCJtYWluVGFibGVfX3RkX19pY29uLXJlZFwiPmZsYWc8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInJvd1tjb2x1bW5Qcm9wXSA9PT0gdHJ1ZVwiIGNsYXNzPVwibWFpblRhYmxlX190ZF9faWNvbi1ncmVlblwiPmZsYWc8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGF0dXMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IG51bGwgfHwgcm93W2NvbHVtblByb3BdID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIGdldENvbHVtbihjb2x1bW5Qcm9wKT8ubGFiZWwgKyAnSW5BY3RpdmUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2NvbHVtblByb3BdID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBwYWdlSW5mby5sYWJlbHNTZWN0aW9uICsgJy4nICsgZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5sYWJlbCArICdBY3RpdmUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbmZvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ZW1pdEV2ZW50KHJvdylcIiBbYXR0ci5pZF09XCIndGFibGUtYnRuLWluZm8tJytyb3cuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5pbmZvPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbmV0QW1vdW50J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluVGFibGVfX3RkX19jdXJyZW5jeVwiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7XCI+e3sgcm93W2dldENvbHVtbihjb2x1bW5Qcm9wKT8uY3VycmVuY3ldIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluVGFibGVfX3RkX19wcm9wZXJ0eVwiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7IG1hcmdpbi1sZWZ0OjZweDsgbWFyZ2luLXJpZ2h0OjZweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IGN1cnJlbmN5OicnOicnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsb2NhbERhdGVUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IGRhdGUgOiBleHRyYWN0Rm9ybWF0KGdldENvbHVtbihjb2x1bW5Qcm9wKSkgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYmlnZGVjaW1hbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+PHN1cCBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2N1cnJlbmN5XCI+e3tyb3dbZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5jdXJyZW5jeV19fTwvc3VwPjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIHwgbnVtYmVyIDogKGdldENvbHVtbihjb2x1bW5Qcm9wKT8uZGlnaXRJbmZvIHx8ICcxLjMtNScpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpc3RBY3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1idXR0b24tYWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvbnNBY3Rpb25dPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy52aWV3VHlwZSA9PT0gJ2J1dHRvbnNBY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtsaXN0QWN0aW9uXT1cImxpc3RBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbnNdPVwibGlzdEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZEJ1dHRvbik9XCJhY3Rpb25MaXN0Q2xpY2tlZCgkZXZlbnQscm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWJ1dHRvbi1hY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy50cmFuc2xhdGU7IGVsc2Ugbm9UcmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJlbWl0Um91dGVQYWdlKHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArIFwiLlwiICsgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1RyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJlbWl0Um91dGVQYWdlKHJvdylcIiBbaW5uZXJIdG1sXT0nZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApJz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1vYmlsZSBDYXJkIFZpZXcgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZHMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFTb3VyY2UuZGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJtb2JpbGUtY2FyZFwiXHJcbiAgICAgICAgICAgICBbYXR0ci5pZF09XCInbW9iaWxlLWNhcmQtJyArIChyb3c/LmlkIHx8IHJvdz8ua2V5IHx8ICcnKVwiXHJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICdtb2JpbGUtY2FyZC0taGlnaGxpZ2h0Jzogc2VsZWN0ZWRSb3dJbmRleCA9PSByb3cuaWQgfHwgKHBhZ2VJbmZvLmdyb3VwQnlQcm9wZXJ0eSAmJiBwYWdlSW5mby5ncm91cEJ5VmFsdWU/LmluY2x1ZGVzKHJvd1twYWdlSW5mby5ncm91cEJ5UHJvcGVydHldKSksXHJcbiAgICAgICAgICAgICAgICdtb2JpbGUtY2FyZC0tZGFyay1oaWdobGlnaHQnOiBpc0RhcmtIaWdobGlnaHQocm93KVxyXG4gICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAoYXV4Y2xpY2spPVwib3Blbk5ld1RhYihyb3cpXCJcclxuICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uU2VsZWN0SXRlbShyb3cpXCI+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDwhLS0gTW9iaWxlIENhcmQgSGVhZGVyOiBJRC9OYW1lIGFuZCBTdGF0dXMgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX2hlYWRlci1pZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLWNhcmRfX2lkLXRleHRcIj57eyBleHRyYWN0RmllbGROYW1lKHJvdywgZ2V0TW9iaWxlQ2FyZElkQ29sdW1uKCk/LnByb3BlcnR5IHx8ICdpZCcpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19oZWFkZXItc3RhdHVzXCIgKm5nSWY9XCJnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKClcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzdGF0ZVR5cGUge3sgcm93W2dldE1vYmlsZUNhcmRTdGF0dXNDb2x1bW4oKT8ucHJvcGVydHldfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIidtb2JpbGUtYnRuLXN0YXRlLScrZ2V0TW9iaWxlQ2FyZFN0YXR1c0NvbHVtbigpPy5wcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGFiZWxLZXlCeVZhbHVlKGdldE1vYmlsZUNhcmRTdGF0dXNDb2x1bW4oKSwgcm93KSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19kaXZpZGVyXCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBNb2JpbGUgQ2FyZCBCb2R5OiBPdGhlciBjb2x1bW5zIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBnZXRNb2JpbGVDYXJkQ29sdW1ucygpXCIgY2xhc3M9XCJtb2JpbGUtY2FyZF9fcm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19yb3ctbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxhYmVsS2V5KGNvbHVtbikgfCB0cmFuc2xhdGUgfX0gOjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX3Jvdy12YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXRlVHlwZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzdGF0ZVR5cGUge3sgcm93W2NvbHVtbi5wcm9wZXJ0eV19fVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ21vYmlsZS1idG4tc3RhdGUtJytjb2x1bW4ucHJvcGVydHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsS2V5QnlWYWx1ZShjb2x1bW4sIHJvdykgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgZGF0ZTonZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbmV0QW1vdW50J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLWNhcmRfX2Ftb3VudC1jdXJyZW5jeVwiPnt7IHJvd1tjb2x1bW4uY3VycmVuY3ldIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLWNhcmRfX2Ftb3VudC12YWx1ZVwiPnt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgY3VycmVuY3k6Jyc6JycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xvY2FsRGF0ZVRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSkgfCBkYXRlIDogZXh0cmFjdEZvcm1hdChjb2x1bW4pIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2JpZ2RlY2ltYWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPjxzdXAgY2xhc3M9XCJtYWluVGFibGVfX3RkX19jdXJyZW5jeVwiPnt7cm93W2NvbHVtbi5jdXJyZW5jeV19fTwvc3VwPjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSkgfCBudW1iZXIgOiAoY29sdW1uLmRpZ2l0SW5mbyB8fCAnMS4zLTUnKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnRyYW5zbGF0ZTsgZWxzZSBub1RyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArIFwiLlwiICsgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1RyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPSdleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uLnByb3BlcnR5KSc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBNb2JpbGUgQ2FyZCBBY3Rpb25zIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19hY3Rpb25zXCIgKm5nSWY9XCJsaXN0QWN0aW9uICYmIGxpc3RBY3Rpb24ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8YXBwLWJ1dHRvbi1hY3Rpb25zXHJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxyXG4gICAgICAgICAgICAgIFtidXR0b25zQWN0aW9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFtsaXN0QWN0aW9uXT1cImxpc3RBY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFthY3Rpb25zXT1cImxpc3RBY3Rpb25cIlxyXG4gICAgICAgICAgICAgIChjbGlja2VkQnV0dG9uKT1cImFjdGlvbkxpc3RDbGlja2VkKCRldmVudCxyb3cpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWJ1dHRvbi1hY3Rpb25zPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YUZvdW5kXCIgY2xhc3M9XCJkYXRhTm90Rm91bmQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiZ2V0RGlzcGxheVN2Z1BhdGgoKVwiIFtzcmNdPVwiZ2V0RGlzcGxheVN2Z1BhdGgoKVwiIGNsYXNzPVwiZGF0YU5vdEZvdW5kX19pY29uXCIgYWx0PVwiTm8gZGF0YSBmb3VuZFwiIC8+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRhTm90Rm91bmRfX3RpdGxlXCI+e3sgZ2V0RGlzcGxheVRpdGxlKCkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGFOb3RGb3VuZF9fc3VidGl0bGVcIj57eyBnZXREaXNwbGF5U3VidGl0bGUoKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8ZGl2ICAqbmdJZj1cIihkYXRhU291cmNlLmRhdGE/Lmxlbmd0aCA+IDAgfHwgY3VzdG9taXplZERhdGEpICYmICFwYWdlSW5mby5oaWRlUGFnaW5hdGlvblwiIGNsYXNzPVwibWFpbi1wYWdpbmF0aW9uIGZsZXgtcm93XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZVBhZ2luYXRpb25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtbiBmbGV4LTEwMFwiPlxyXG4gICAgICAgICAgICA8YXBwLXBhZ2luYXRvclxyXG4gICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJwYWdlSW5kZXhcIlxyXG4gICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsRWxlbWVudHNcIlxyXG4gICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDI1LCA1MF1cIlxyXG4gICAgICAgICAgICAgIFttb2JpbGVMb2FkTW9yZUluY3JlbWVudF09XCJtb2JpbGVMb2FkTW9yZUluY3JlbWVudFwiXHJcbiAgICAgICAgICAgICAgW2Rpc3BsYXllZEl0ZW1zXT1cIm1vYmlsZURpc3BsYXllZEl0ZW1zIHx8IGRhdGFTb3VyY2UuZGF0YS5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAobG9hZE1vcmUpPVwib25Mb2FkTW9yZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLXBhZ2luYXRvcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
644
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsYUFBYSxFQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsV0FBVyxFQUNYLE9BQU8sRUFDUCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FB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c0JBRGIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBR04sZUFBZTtzQkFEZCxLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixVQUFVO3NCQURULE1BQU07Z0JBS1AsVUFBVTtzQkFEVCxNQUFNO2dCQUdQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNO2dCQUlQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFRUCxVQUFVO3NCQURULE1BQU07Z0JBUVAsY0FBYztzQkFEYixLQUFLO2dCQVNOLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGVmZmVjdCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2V9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZVwiO1xyXG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuaW1wb3J0IHtNYXRTb3J0TW9kdWxlLCBTb3J0fSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xyXG5pbXBvcnQge1xyXG4gIEN1cnJlbmN5UGlwZSxcclxuICBEYXRlUGlwZSxcclxuICBEZWNpbWFsUGlwZSxcclxuICBOZ0NsYXNzLFxyXG4gIE5nRm9yT2YsXHJcbiAgTmdJZixcclxuICBOZ1N0eWxlLFxyXG4gIE5nU3dpdGNoLFxyXG4gIE5nU3dpdGNoQ2FzZSxcclxuICBOZ1N3aXRjaERlZmF1bHRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7TWF0SWNvbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcclxuaW1wb3J0IHtNYXRCdXR0b24sIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbkJ1dHRvbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xyXG5pbXBvcnQge05neFBhZ2luYXRpb25Nb2R1bGV9IGZyb20gXCJuZ3gtcGFnaW5hdGlvblwiO1xyXG5pbXBvcnQge0J1dHRvbkFjdGlvbnNDb21wb25lbnR9IGZyb20gXCIuLi9idXR0b24tYWN0aW9ucy9idXR0b24tYWN0aW9ucy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtTaGFyZURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdHJpZ2dlci1mb3JtLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtCYXNlVXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9iYXNlLXV0aWxzXCI7XHJcbmltcG9ydCB7QmFja2VuZFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9iYWNrZW5kLXNlcnZpY2VcIjtcclxuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2ZpbHRlci5tb2RlbFwiO1xyXG5pbXBvcnQge0ZpbHRlclJlcXVlc3R9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2ZpbHRlci1yZXF1ZXN0XCI7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uQWN0aW9uU2V0dGluZ3MsXHJcbiAgRU1QVFlfUEFHRV9JTkZPLFxyXG4gIEZpZWxkSW5mbyxcclxuICBGUk9OVF9FTkRfQ09MVU1OX1RZUEVTLFxyXG4gIFBhZ2VJbmZvLFxyXG4gIFRBQkxFX1JFQ09SRF9BQ1RJT04sXHJcbiAgVGFibGVDb2x1bW5cclxufSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbFwiO1xyXG5pbXBvcnQge1JlcG9ydFJlcXVlc3R9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3JlcG9ydC1yZXF1ZXN0Lm1vZGVsXCI7XHJcbmltcG9ydCB7VGFibGVQYWdlVXNlckFjdGlvbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvdGFibGUtcGFnZS11c2VyLWFjdGlvbi5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtXb3JrZmxvd30gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvd29ya2Zsb3cvd29ya2Zsb3cubW9kZWxcIjtcclxuaW1wb3J0IHtSZXNwb25zZUVudmVsb3B9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3Jlc3BvbnNlLWVudmVsb3AubW9kZWxcIjtcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtNYXRMYWJlbH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHtUaXRsZUJhckNvbXBvbmVudH0gZnJvbSBcIi4uL3RpdGxlLWJhci90aXRsZS1iYXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7UGFnaW5hdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vcGFnaW5hdG9yL3BhZ2luYXRvci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtNYXRDaGVja2JveH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94XCI7XHJcbmltcG9ydCB7RmlsdGVyQnVpbGRlckNvbXBvbmVudH0gZnJvbSBcIi4uL2FkdmFuY2VkLWZpbHRlci9maWx0ZXItYnVpbGRlci9maWx0ZXItYnVpbGRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtGaWVsZEZpbHRlcn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvZmllbGQtZmlsdGVyLm1vZGVsXCI7XHJcbmltcG9ydCB7TWF0TWVudSwgTWF0TWVudUl0ZW0sIE1hdE1lbnVUcmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmFzZS10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmFzZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYmFzZS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nU3R5bGUsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgTWF0SWNvbixcclxuICAgIE1hdFNvcnRNb2R1bGUsXHJcbiAgICBOZ0lmLFxyXG4gICAgTmdTd2l0Y2gsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBEYXRlUGlwZSxcclxuICAgIEN1cnJlbmN5UGlwZSxcclxuICAgIE5neFBhZ2luYXRpb25Nb2R1bGUsXHJcbiAgICBOZ1N3aXRjaENhc2UsXHJcbiAgICBOZ1N3aXRjaERlZmF1bHQsXHJcbiAgICBNYXRJY29uQnV0dG9uLFxyXG4gICAgTmdGb3JPZixcclxuICAgIE1hdEJ1dHRvbixcclxuICAgIEJ1dHRvbkFjdGlvbnNDb21wb25lbnQsXHJcbiAgICBNYXRMYWJlbCxcclxuICAgIFRpdGxlQmFyQ29tcG9uZW50LFxyXG4gICAgUGFnaW5hdG9yQ29tcG9uZW50LFxyXG4gICAgRGVjaW1hbFBpcGUsXHJcbiAgICBNYXRDaGVja2JveCxcclxuICAgIEZpbHRlckJ1aWxkZXJDb21wb25lbnQsXHJcbiAgICBNYXRNZW51VHJpZ2dlcixcclxuICAgIE1hdE1lbnUsXHJcbiAgICBNYXRNZW51SXRlbSxcclxuXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgQmFzZVV0aWxzIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgdHlwZXM6IHN0cmluZ1tdID0gW1wicGRmXCIsIFwiY3N2XCIsIFwieGxzeFwiXVxyXG4gIGNvbGxlY3Rpb24gPSB7Y291bnQ6IDYwLCBkYXRhOiBbXX07XHJcbiAgY29uZmlnID0ge1xyXG4gICAgaXRlbXNQZXJQYWdlOiAxMCxcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgdG90YWxJdGVtczogdGhpcy5jb2xsZWN0aW9uLmNvdW50XHJcbiAgfTtcclxuICBwdWJsaWMgbWF4U2l6ZTogbnVtYmVyID0gNztcclxuICBwdWJsaWMgZGlyZWN0aW9uTGlua3M6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBhdXRvSGlkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXNwb25zaXZlOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgbGFiZWxzOiBhbnkgPSB7XHJcbiAgICBwcmV2aW91c0xhYmVsOiAnPCcsXHJcbiAgICBuZXh0TGFiZWw6ICc+JyxcclxuICAgIHNjcmVlblJlYWRlclBhZ2luYXRpb25MYWJlbDogJ1BhZ2luYXRpb24nLFxyXG4gICAgc2NyZWVuUmVhZGVyUGFnZUxhYmVsOiAncGFnZScsXHJcbiAgICBzY3JlZW5SZWFkZXJDdXJyZW50TGFiZWw6IGBZb3UncmUgb24gcGFnZWBcclxuICB9O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGZpbHRlckZpZWxkczogRmllbGRJbmZvW107XHJcbiAgQElucHV0KCkgbm9EYXRhRm91bmRTdmdQYXRoOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbm9EYXRhRm91bmRUaXRsZSA9ICdub0RhdGFGb3VuZFRpdGxlJztcclxuICBASW5wdXQoKSBub0RhdGFGb3VuZFN1YnRpdGxlID0gJ25vRGF0YUZvdW5kU3VidGl0bGUnO1xyXG4gIEBJbnB1dCgpIG5vUmVzdWx0U3ZnUGF0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5vUmVzdWx0VGl0bGUgPSAnbm9SZXN1bHRUaXRsZSc7XHJcbiAgQElucHV0KCkgbm9SZXN1bHRTdWJ0aXRsZSA9ICdub1Jlc3VsdFN1YnRpdGxlJztcclxuICB0b3RhbEVsZW1lbnRzID0gMDtcclxuICBwYWdlc0NvdW50ID0gMDtcclxuICBwYWdlSW5kZXggPSAxO1xyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgbW9iaWxlRGlzcGxheWVkSXRlbXMgPSAwO1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRTdGF0dXNGaWx0ZXI6IEZpbHRlcltdID0gW107XHJcbiAgYWR2YW5jZWRBcHBsaWVkRmlsdGVyOiBhbnlbXSA9IFtdO1xyXG4gIHBlbmRpbmdGaWx0ZXJzOiBhbnlbXSA9IFtdO1xyXG4gIHNlYXJjaFN0cjogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBmaWx0ZXJSZXF1ZXN0OiBGaWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3QoKTtcclxuICBwcml2YXRlIHRpbWVyOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBvdmVycmlkZSBwYWdlSW5mbzogUGFnZUluZm8gPSBFTVBUWV9QQUdFX0lORk87XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZW5hYmxlUGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbW9iaWxlUGFnZVNpemU6IG51bWJlciA9IDI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbW9iaWxlTG9hZE1vcmVJbmNyZW1lbnQ6IG51bWJlciA9IDI7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE/OiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuICBASW5wdXQoKVxyXG4gIGxpc3RBY3Rpb246IEJ1dHRvbkFjdGlvblNldHRpbmdzW10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBleHRyYUFjdGlvbnM6IEJ1dHRvbkFjdGlvblNldHRpbmdzW10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBidXR0b25zRGlzcGxheU1vZGU6ICdkcm9wZG93bicgfCAnbGlzdCcgPSAnZHJvcGRvd24nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXTtcclxuXHJcbiAgQElucHV0KClcclxuICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSAvL0B0cy1pZ25vcmVcclxuICBwYXRoUGFyYW06IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBleHRyYUJ1dHRvbjogIEJ1dHRvbkFjdGlvblNldHRpbmdzW10gPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkFjdGlvblNldHRpbmdzPigpO1xyXG5cclxuICBASW5wdXQoKSAvL0B0cy1pZ25vcmVcclxuICBlbmZvcmNlUmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGlzUGVuZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRyaWdnZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICByZXBvcnRSZXF1ZXN0OiBSZXBvcnRSZXF1ZXN0ID0gbmV3IFJlcG9ydFJlcXVlc3Qoe30pO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNlcGFyYXRlRW5kcG9pbnREYXRhOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBtYW5hZ2VhYmxlUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHRvdGFsUGFnZXNDb3VudDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKVxyXG4gIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgdXNlckFjdGlvbjogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIGh5cGVyTGlua0FjdGlvbjogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBleHRyYUFjdGlvbjogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZENvbHVtbjogRXZlbnRFbWl0dGVyPFNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBsaXN0QWN0aW9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHsgYWN0aW9uOiBCdXR0b25BY3Rpb25TZXR0aW5ncywgcm93OiBhbnkgLCBpc1BlbmRpbmc6IGJvb2xlYW59PiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgYWN0aW9uOiBCdXR0b25BY3Rpb25TZXR0aW5ncyxcclxuICAgIHJvdzogYW55LFxyXG4gICAgaXNQZW5kaW5nOiBib29sZWFuXHJcbiAgfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2hvd0RpYWxvZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgdXNlZFdvcmtmbG93ITogV29ya2Zsb3c7XHJcblxyXG4gIG1vZGU6YW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGN1c3RvbWl6ZWREYXRhPzogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcbiAgc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gIG5vRGF0YUZvdW5kID0gZmFsc2U7XHJcbiAgdG90YWxSZXF1aXJlZENvdW50SXRlbSA9IDA7XHJcblxyXG5cclxuICBAT3V0cHV0KClcclxuICBjbGlja1JvdXRlUGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgYmFja2VuZFNlcnZpY2U6IEJhY2tlbmRTZXJ2aWNlLFxyXG4gICAgICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgcHVibGljIHNoYXJlRGF0YVNlcnZpY2U6IFNoYXJlRGF0YVNlcnZpY2UsXHJcbiAgICAgIEBJbmplY3QoJ3NlY3VyaXR5TWFuYWdlcicpIHByaXZhdGUgc2VjdXJpdHlNYW5hZ2VyOiBhbnksXHJcbiAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICB0aGlzLmZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCgpO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZU1vYmlsZVBhZ2VTaXplKCk7XHJcblxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucGFnZUluZm8ubGF6eUxvYWREYXRhICE9PSB0cnVlIHx8IHRoaXMuZW5mb3JjZVJlZnJlc2ggPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLmlzRW1wdHlJdGVtcyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA8PSAwO1xyXG4gICAgaWYgKHRoaXMuY3VzdG9taXplZERhdGEpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gdGhpcy5jdXN0b21pemVkRGF0YTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMubWFuYWdlYWJsZVBhZ2VzKSB7XHJcbiAgICAgIHRoaXMucGFnZXNDb3VudCA9IHRoaXMudG90YWxQYWdlc0NvdW50O1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMuY3VycmVudFBhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVNb2JpbGVQYWdlU2l6ZSgpO1xyXG4gICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IHRoaXMucGFnZVNpemU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2ODtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU1vYmlsZVBhZ2VTaXplKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNNb2JpbGUoKSAmJiB0aGlzLnBhZ2VTaXplID4gdGhpcy5tb2JpbGVQYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5tb2JpbGVQYWdlU2l6ZTtcclxuICAgICAgaWYgKHRoaXMucmVwb3J0UmVxdWVzdD8uZmlsdGVyUmVxdWVzdCkge1xyXG4gICAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gdGhpcy5tb2JpbGVQYWdlU2l6ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQ7XHJcbiAgICB0aGlzLmdldE5leHQodGhpcy5wYWdlSW5kZXggLSAxKTtcclxuICAgIGlmICh0aGlzLm1hbmFnZWFibGVQYWdlcykge1xyXG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2VJbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZXh0cmFjdEZpZWxkTmFtZShlbGVtZW50OiBhbnksIHByb3BlcnR5OiBzdHJpbmcpIHtcclxuICAgIGlmIChwcm9wZXJ0eT8uaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICByZXR1cm4gcHJvcGVydHkuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgZWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRbcHJvcGVydHldKSAmJiBjLmFycmF5U3ViUHJvcGVydHkgKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBlbGVtZW50W3Byb3BlcnR5XS5tYXAoZiA9PiBmW2MuYXJyYXlTdWJQcm9wZXJ0eV0pO1xyXG4gICAgICAgIHJldHVybiAgZmllbGRWYWx1ZXMuam9pbignLCAnKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50W3Byb3BlcnR5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHZpc2libGVDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5idWlsZEdyb3VwcygpXHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUpLm1hcChjb2x1bW4gPT4gY29sdW1uLnByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIGdldCB2aXNpYmxlQ29sdW1uc0FycmF5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW4ocHJvcGVydHk6IHN0cmluZyk6IFRhYmxlQ29sdW1uPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U29ydERpcmVjdGlvbihwcm9wZXJ0eTogc3RyaW5nKTogJ2FzYycgfCAnZGVzYycgfCAnJyB7XHJcbiAgICBpZiAodGhpcy5yZXBvcnRSZXF1ZXN0Py5maWx0ZXJSZXF1ZXN0Py5zb3J0S2V5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zb3J0RGlyZWN0aW9uID09PSAnQVNDJyA/ICdhc2MnIDogJ2Rlc2MnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU29ydENsaWNrKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IENPTFVNTiA9IHRoaXMuZ2V0Q29sdW1uKHByb3BlcnR5KTtcclxuICAgIGlmICghQ09MVU1OIHx8ICFDT0xVTU4uZW5hYmxlU29ydGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgQ1VSUkVOVF9ESVJFQ1RJT04gPSB0aGlzLmdldFNvcnREaXJlY3Rpb24ocHJvcGVydHkpO1xyXG4gICAgbGV0IE5FV19ESVJFQ1RJT046ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcblxyXG4gICAgaWYgKENVUlJFTlRfRElSRUNUSU9OID09PSAnYXNjJykge1xyXG4gICAgICBORVdfRElSRUNUSU9OID0gJ2Rlc2MnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25Tb3J0QWN0aW9uKHtcclxuICAgICAgYWN0aXZlOiBwcm9wZXJ0eSxcclxuICAgICAgZGlyZWN0aW9uOiBORVdfRElSRUNUSU9OXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnRTdGF0ZTogYW55ID0ge307XHJcblxyXG4gIGdldE5leHQocGFnZUluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcclxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMubG9hZERhdGEoKTtcclxuICB9XHJcbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQ7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDE7IC8vIHJlc2V0IHRvIGZpcnN0IHBhZ2Ugb24gcGFnZSBzaXplIGNoYW5nZVxyXG4gICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IDA7XHJcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICB0aGlzLmdldE5leHQoMCk7XHJcbiAgfVxyXG5cclxuICBvbkxvYWRNb3JlKGl0ZW1zVG9Mb2FkOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5ZWQgPSB0aGlzLm1vYmlsZURpc3BsYXllZEl0ZW1zIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCB8fCB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IE1hdGgubWluKGN1cnJlbnREaXNwbGF5ZWQgKyBpdGVtc1RvTG9hZCwgdGhpcy50b3RhbEVsZW1lbnRzKTtcclxuICAgIHRoaXMubW9iaWxlRGlzcGxheWVkSXRlbXMgPSB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZUluZGV4ID0gMDtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gMTtcclxuICAgIHRoaXMubG9hZERhdGEodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhKHNraXBNb2JpbGVSZXNldDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XHJcblxyXG4gICAgaWYgKCFza2lwTW9iaWxlUmVzZXQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplTW9iaWxlUGFnZVNpemUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0KSB7XHJcbiAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3QodGhpcy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VJbmZvLnBhZ2VTaXplKTtcclxuICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3Quc2VhcmNoU3RyID0gdGhpcy5zZWFyY2hTdHI7XHJcbiAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LmZpbHRlcnMgPSBbXHJcbiAgICAgICAgLi4uKHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyIHx8IFtdKSxcclxuICAgICAgICAuLi4odGhpcy5maWx0ZXJzIHx8IFtdKS5maWx0ZXIoZiA9PlxyXG4gICAgICAgICAgISh0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciB8fCBbXSkuc29tZShhID0+IGEuZmllbGQgPT09IGYuZmllbGROYW1lKVxyXG4gICAgICAgIClcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICBpZiAodGhpcy5zZXBhcmF0ZUVuZHBvaW50RGF0YSB8fCAhdGhpcy5wYWdlSW5mby5hcGlVcmkgfHwgdGhpcy5wYWdlSW5mby5hcGlVcmkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zZXBhcmF0ZUVuZHBvaW50RGF0YTtcclxuICAgIH0gZWxzZSBpZih0aGlzLnJlcG9ydFJlcXVlc3QgPT0gdW5kZWZpbmVkKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmKCF0aGlzLm1hbmFnZWFibGVQYWdlcykgIHtcclxuICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QuY29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKGMgPT4gRlJPTlRfRU5EX0NPTFVNTl9UWVBFUy5pbmRleE9mKGMudHlwZSkgPCAwICkubWFwKGMgPT4gYy5wcm9wZXJ0eSkgfHwgW107XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wZW5kaW5nUGFnZSA9IHRoaXMuaXNQZW5kaW5nO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3Quc2VhcmNoU3RyID0gdGhpcy5zZWFyY2hTdHI7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5maWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAuLi4odGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgfHwgW10pLFxyXG4gICAgICAgICAgICAuLi4odGhpcy5maWx0ZXJzIHx8IFtdKS5maWx0ZXIoZiA9PlxyXG4gICAgICAgICAgICAgICEodGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgfHwgW10pLnNvbWUoYSA9PiBhLmZpZWxkID09PSBmLmZpZWxkTmFtZSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5nZXRJdGVtc0J5RmlsdGVyKHRoaXMucmVwb3J0UmVxdWVzdD8uZmlsdGVyUmVxdWVzdCwgdGhpcy5wYWdlSW5mby5hcGlVcmkpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUVudmVsb3BlID0gbmV3IFJlc3BvbnNlRW52ZWxvcChyZXNwKTtcclxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2VFbnZlbG9wZS52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlcXVpcmVkQ291bnRJdGVtID0gdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemVcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSByZXNwb25zZUVudmVsb3BlLmJvZHkubGVuZ3RoIDwgMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gcmVzcG9uc2VFbnZlbG9wZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5pc0VtcHR5SXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPD0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxFbGVtZW50cyA9IHJlc3BvbnNlRW52ZWxvcGUudG90YWxTaXplIHx8IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzQ291bnQgPSBNYXRoLmNlaWwodGhpcy50b3RhbEVsZW1lbnRzIC8gdGhpcy5wYWdlU2l6ZSkgfHwgMTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gKHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCB8fCAwKSArIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy50b3RhbEl0ZW1zID0gcmVzcG9uc2VFbnZlbG9wZS50b3RhbFNpemUgfHwgMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlSW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzRGVzY3JpcHRpb24oZWxlbWVudDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kU2VydmljZS5nZXRTdGF0dXNEZXNjcmlwdGlvbihlbGVtZW50LCB0aGlzLnVzZWRXb3JrZmxvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZVR5cGUoZWxlbWVudDogYW55KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5zdGF0ZVR5cGVcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzW1wiY3VzdG9taXplZERhdGFcIl0gJiYgIWNoYW5nZXNbXCJjdXN0b21pemVkRGF0YVwiXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBjaGFuZ2VzW1wiY3VzdG9taXplZERhdGFcIl0uY3VycmVudFZhbHVlPy5kYXRhIHx8IFtdOyAgLy8gVXBkYXRlIGRhdGEgc291cmNlIHdpdGggbmV3IGRhdGFcclxuICAgICAgdGhpcy5wYWdlc0NvdW50PXRoaXMudG90YWxQYWdlc0NvdW50O1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleD10aGlzLmN1cnJlbnRQYWdlSW5kZXg7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1tcImVuZm9yY2VSZWZyZXNoXCJdICYmICFjaGFuZ2VzW1wiZW5mb3JjZVJlZnJlc2hcIl0uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiaXNQZW5kaW5nXCJdICYmICFjaGFuZ2VzW1wiaXNQZW5kaW5nXCJdLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldENyb3BwZWRUZXh0KGVsZW1lbnRWYWx1ZTogYW55LCBzdWJXaWR0aDogbnVtYmVyID0gMjApIHtcclxuICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLmxlbmd0aCA+IHN1YldpZHRoID8gZWxlbWVudFZhbHVlLnN1YnN0cmluZygwLCBzdWJXaWR0aCkgKyBcIi4uLlwiIDogZWxlbWVudFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZW1pdEV2ZW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93RGlhbG9nLmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0Rm9ybWF0KGNvbHVtbjogVGFibGVDb2x1bW48YW55Pikge1xyXG4gICAgcmV0dXJuIGNvbHVtbj8uZm9ybWF0IHx8ICdkL00veXl5eSwgaDptbSBhJztcclxuICB9XHJcblxyXG4gIGFjdGlvbkxpc3RDbGlja2VkKGxpc3RBY3Rpb246IEJ1dHRvbkFjdGlvblNldHRpbmdzLCBlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMubGlzdEFjdGlvbkNsaWNrZWQuZW1pdCh7YWN0aW9uOmxpc3RBY3Rpb24sIHJvdzogZWxlbWVudCwgaXNQZW5kaW5nOiB0aGlzLmlzUGVuZGluZ30pO1xyXG4gIH1cclxuXHJcbiAgaHlwZXJMaW5rQ2xpY2tlZChhY3Rpb25OYW1lOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgYWN0aW9uID0gVEFCTEVfUkVDT1JEX0FDVElPTjtcclxuICAgIGFjdGlvbi5hY3Rpb25LZXkgPSBhY3Rpb25OYW1lO1xyXG4gICAgYWN0aW9uLml0ZW0gPSBlbGVtZW50O1xyXG4gICAgYWN0aW9uLnBhZ2VJbmZvID0gdGhpcy5wYWdlSW5mbztcclxuICAgIHRoaXMuaHlwZXJMaW5rQWN0aW9uLmVtaXQoYWN0aW9uKVxyXG4gIH1cclxuXHJcblxyXG4gIGVtaXRSb3V0ZVBhZ2UoZWxlbWVudDogYW55KXtcclxuICAgIHRoaXMuY2xpY2tSb3V0ZVBhZ2UuZW1pdChlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0SXRlbShyb3c6IGFueSkge1xyXG4gICAgaWYgKHRoaXMucGFnZUluZm8uc2VsZlJvdXRpbmcpIHtcclxuICAgICAgY29uc3QgbW9kZSA9IHRoaXMuaXNQZW5kaW5nID8gJ3BlbmRpbmcnIDogJ3ZpZXcnO1xyXG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnBhZ2VJbmZvLmxpc3RSb3V0ZVBhdGggfHwgdGhpcy5yb3V0ZXIudXJsfS92aWV3YDtcclxuXHJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZElkID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KFN0cmluZyhyb3cuaWQpKTtcclxuICAgICAgY29uc3QgZW5jcnlwdGVkTW9kZSA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChtb2RlKTtcclxuXHJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFJvdyA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChKU09OLnN0cmluZ2lmeShyb3cpKTtcclxuXHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdLCB7XHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgdG9rZW46IGVuY3J5cHRlZElkLCBtb2RlOiBlbmNyeXB0ZWRNb2RlIH0sXHJcbiAgICAgICAgc3RhdGU6IHsgcmF3OiBlbmNyeXB0ZWRSb3cgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnN0IGFjdGlvbiA9IFNFTEVDVF9SRUNPUkRfQUNUSU9OO1xyXG4gICAgLy8gYWN0aW9uLmlkID0gcm93Py5pZDtcclxuICAgIC8vIGFjdGlvbi5pdGVtID0gcm93O1xyXG4gICAgLy8gdGhpcy51c2VyQWN0aW9uLmVtaXQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgb3Blbk5ld1RhYihyb3cpIHtcclxuICAgIGlmICghdGhpcy5wYWdlSW5mby5lbWJlZGVkVGFibGVPbmx5KSB7XHJcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmlzUGVuZGluZyA/ICdwZW5kaW5nJyA6ICd2aWV3JztcclxuICAgICAgd2luZG93Lm9wZW4oYCR7dGhpcy5wYWdlSW5mby5saXN0Um91dGVQYXRofS8ke21vZGV9YCArICcvJyArIHJvdz8uaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25WaWV3TW9kZUNoYW5nZWRSZWNlaXZlZChpc1BlbmRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc3dpdGNoVmlld01vZGUoaXNQZW5kaW5nKTtcclxuICB9XHJcblxyXG4gIHN3aXRjaFZpZXdNb2RlKGlzUGVuZGluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1BlbmRpbmcgPSBpc1BlbmRpbmc7XHJcbiAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBvbkFkZE5ld0FjdGlvbigkZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5wYWdlSW5mby5saXN0Um91dGVQYXRoIHx8IHRoaXMucm91dGVyLnVybH0vdmlld2A7XHJcbiAgICBjb25zdCBlbmNyeXB0ZWRJZCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChcIi0xXCIpO1xyXG4gICAgY29uc3QgZW5jcnlwdGVkTW9kZSA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChcInBlbmRpbmdcIik7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dXJsfWBdLFxyXG4gICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHRva2VuOiBlbmNyeXB0ZWRJZCAsIG1vZGUgOiBlbmNyeXB0ZWRNb2RlIH0gfSk7XHJcblxyXG4gICAgLy8gY29uc3QgYWN0aW9uID0gU0VMRUNUX1JFQ09SRF9BQ1RJT047XHJcbiAgICAvLyBhY3Rpb24uaWQgPSByb3c/LmlkO1xyXG4gICAgLy8gYWN0aW9uLml0ZW0gPSByb3c7XHJcbiAgICAvLyB0aGlzLnVzZXJBY3Rpb24uZW1pdChhY3Rpb24pXHJcbiAgfVxyXG5cclxuICBzaG93QWRkTmV3KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZUluZm8uaGFzQWRkQnV0dG9uIDtcclxuICB9XHJcblxyXG4gIG9uRXh0cmFCdXR0aW9uQWN0aW9uKCRldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV4dHJhQWN0aW9uLmVtaXQoJGV2ZW50KTtcclxuXHJcbiAgfVxyXG5cclxuICBoYXNHcm91cHMoKSB7XHJcbiAgICBsZXQgYiA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgocCA9PiBwLmdyb3VwKTtcclxuICAgIHJldHVybiBiID49IDA7XHJcbiAgfVxyXG4gIGdyb3VwTmFtZXM6IGFueSA9IFtdXHJcbiAgZ3JvdXBTcGFuczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgYnVpbGRHcm91cHMoKXtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICB0aGlzLmdyb3VwTmFtZXMgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBTcGFucy5jbGVhcigpO1xyXG4gICAgaWYodGhpcy5oYXNHcm91cHMoKSA9PT0gZmFsc2Upe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUgPT09IHRydWUpXHJcbiAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBpZiAoY29sdW1uLmdyb3VwID09PSBcIi1cIikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cE5hbWVzLnB1c2goY291bnQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICB0aGlzLmluc2VydEluTWFwKGNvdW50KTtcclxuICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5ncm91cE5hbWVzLmluY2x1ZGVzKGNvbHVtbi5ncm91cCkpIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBOYW1lcy5wdXNoKGNvbHVtbi5ncm91cCk7XHJcbiAgICAgICAgICB0aGlzLmluc2VydEluTWFwKGNvbHVtbi5ncm91cCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5zZXJ0SW5NYXAoY29sdW1uLmdyb3VwKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRJbk1hcChrZXkpe1xyXG4gICAgaWYodGhpcy5ncm91cFNwYW5zLmhhcyhrZXkpKXtcclxuICAgICAgdGhpcy5ncm91cFNwYW5zLnNldChrZXkudG9TdHJpbmcoKSwgdGhpcy5ncm91cFNwYW5zLmdldChrZXkpICsgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3VwU3BhbnMuc2V0KGtleS50b1N0cmluZygpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSHVtYW5NYWRlKHN0cil7XHJcbiAgICByZXR1cm4gaXNOYU4oc3RyKTtcclxuICB9XHJcblxyXG4gIGFjdGlvbkJ1dHRvbkNsaWNrZWQoYWN0aW9uS2V5OiBzdHJpbmcsIGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGFjdGlvbktleSA9PT0gJ25hdmlnYXRlJykge1xyXG4gICAgICB0aGlzLmhhbmRsZU5hdmlnYXRlQWN0aW9uKGl0ZW0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbWl0VGFibGVBY3Rpb24oYWN0aW9uS2V5LCBpdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTmF2aWdhdGVBY3Rpb24oaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RlID0gdGhpcy5pc1BlbmRpbmcgPyAncGVuZGluZycgOiAndmlldyc7XHJcbiAgICBjb25zdCBiYXNlUGF0aCA9IHRoaXMucGFnZUluZm8ubGlzdFJvdXRlUGF0aCB8fCB0aGlzLnJvdXRlci51cmw7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtiYXNlUGF0aH0vdmlld2A7XHJcblxyXG4gICAgY29uc3QgZW5jcnlwdGVkSWQgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmVuY3J5cHQoaXRlbS5pZC50b1N0cmluZygpKTtcclxuICAgIGNvbnN0IGVuY3J5cHRlZE1vZGUgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmVuY3J5cHQobW9kZSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHsgdG9rZW46IGVuY3J5cHRlZElkLCBtb2RlOiBlbmNyeXB0ZWRNb2RlIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0VGFibGVBY3Rpb24oYWN0aW9uS2V5OiBzdHJpbmcsIGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgYWN0aW9uID0gVEFCTEVfUkVDT1JEX0FDVElPTjtcclxuICAgIGFjdGlvbi5hY3Rpb25LZXkgPSBhY3Rpb25LZXk7XHJcbiAgICBhY3Rpb24uaXRlbSA9IGl0ZW07XHJcbiAgICBhY3Rpb24ucGFnZUluZm8gPSB0aGlzLnBhZ2VJbmZvO1xyXG4gICAgdGhpcy51c2VyQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3RSZXBvcnQocmVwb3J0VHlwZTogYW55KSB7XHJcbiAgICBjb25zdCBteUZpbHRlcnMgPSB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdDtcclxuICAgIGNvbnN0IHJlcG9ydFJlcXVlc3QgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmJ1aWxkUmVwb3J0UmVxdWVzdCh0aGlzLmNvbHVtbnMsIHRoaXMucGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcubGlzdF90aXRsZScsXHJcbiAgICAgIG15RmlsdGVycywgcmVwb3J0VHlwZSwgdGhpcy5wYWdlSW5mbywgdGhpcy5zZWFyY2hTdHIsICdMQU5EU0NBUEUnKTtcclxuICAgIHRoaXMuYmFja2VuZFNlcnZpY2UuZG93bmxvYWRSZXBvcnQocmVwb3J0UmVxdWVzdCwgdGhpcy5wYWdlSW5mby5hcGlVcmkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbihzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlICdwYXNzJzogcmV0dXJuICdjaGVja19jaXJjbGUnO1xyXG4gICAgICBjYXNlICd3YXJuaW5nJzogcmV0dXJuICd3YXJuaW5nJztcclxuICAgICAgY2FzZSAnZXJyb3InOiByZXR1cm4gJ2Vycm9yJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdoZWxwJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbkNoZWNrZWRDbGlja2VkKHByb3BlcnR5OiBzdHJpbmcsIGVsZW1lbnQpIHtcclxuICAgIGVsZW1lbnRbcHJvcGVydHldPSAhZWxlbWVudFtwcm9wZXJ0eV07XHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbkNsaWNrZWQocHJvcGVydHksIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGlzRGFya0hpZ2hsaWdodChyb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZ3JvdXBCeVByb3AgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5UHJvcGVydHk7XHJcbiAgICBjb25zdCBncm91cEJ5VmFsdWVzID0gdGhpcy5wYWdlSW5mbz8uZ3JvdXBCeVZhbHVlO1xyXG5cclxuICAgIGlmICghZ3JvdXBCeVByb3AgfHwgIWdyb3VwQnlWYWx1ZXMgfHwgIXJvd1tncm91cEJ5UHJvcF0pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNlbGxWYWx1ZSA9IHJvd1tncm91cEJ5UHJvcF0udG9TdHJpbmcoKTtcclxuXHJcbiAgICByZXR1cm4gZ3JvdXBCeVZhbHVlcy5zb21lKHZhbCA9PlxyXG4gICAgICBjZWxsVmFsdWUuaW5jbHVkZXModmFsKSAmJiBjZWxsVmFsdWUubGVuZ3RoID4gdmFsLmxlbmd0aFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNob3VsZFJlbmRlckFzSHlwZXJMaW5rKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZ3JvdXBCeVByb3AgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5UHJvcGVydHk7XHJcbiAgICBjb25zdCBncm91cEJ5VmFsdWVzID0gdGhpcy5wYWdlSW5mbz8uZ3JvdXBCeVZhbHVlO1xyXG5cclxuICAgIGlmICghZ3JvdXBCeVByb3AgfHwgIWdyb3VwQnlWYWx1ZXMgfHwgIWVsZW1lbnRbZ3JvdXBCeVByb3BdKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWx1ZSA9IGVsZW1lbnRbZ3JvdXBCeVByb3BdLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuICFncm91cEJ5VmFsdWVzLnNvbWUodiA9PiB2YWx1ZS5pbmNsdWRlcyh2KSAmJiB2YWx1ZS5sZW5ndGggPj0gdi5sZW5ndGgpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uU29ydEFjdGlvbigkZXZlbnQ6IFNvcnQpIHtcclxuICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5wcm9wZXJ0eSA9PT0gJGV2ZW50LmFjdGl2ZSk7XHJcblxyXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3Quc29ydEtleSA9XHJcbiAgICAgICRldmVudC5hY3RpdmUgJiYgJGV2ZW50LmRpcmVjdGlvblxyXG4gICAgICAgID8gKGNvbD8uc29ydEtleSA/PyAkZXZlbnQuYWN0aXZlKVxyXG4gICAgICAgIDogJ2lkJztcclxuXHJcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zb3J0RGlyZWN0aW9uID0gJGV2ZW50LmRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnQVNDJyA6ICdERVNDJztcclxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4uZW1pdCgkZXZlbnQpO1xyXG4gICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93QnV0dG9uKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZ3JvdXBCeVByb3AgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5UHJvcGVydHk7XHJcbiAgICBjb25zdCBncm91cEJ5VmFsdWVzID0gdGhpcy5wYWdlSW5mbz8uZ3JvdXBCeVZhbHVlO1xyXG5cclxuICAgIGlmICghZ3JvdXBCeVByb3AgfHwgIWdyb3VwQnlWYWx1ZXMgfHwgIWVsZW1lbnRbZ3JvdXBCeVByb3BdKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtncm91cEJ5UHJvcF0udG9TdHJpbmcoKTtcclxuXHJcbiAgICByZXR1cm4gIWdyb3VwQnlWYWx1ZXMuc29tZSh2ID0+IHZhbHVlLmluY2x1ZGVzKHYpICYmIHZhbHVlLmxlbmd0aCA+PSB2Lmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBzdG9yZVBlbmRpbmdGaWx0ZXJzKCRldmVudDogeyBmaWx0ZXJzOiBGaWVsZEZpbHRlcltdLCBzZWFyY2hTdHI6IHN0cmluZyB9KTogdm9pZCB7XHJcbiAgICB0aGlzLnBlbmRpbmdGaWx0ZXJzID0gJGV2ZW50LmZpbHRlcnMgfHwgW107XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyID0gJGV2ZW50LnNlYXJjaFN0cjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRQYWdpbmF0aW9uRm9yRmlsdGVyQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdCA9IG5ldyBGaWx0ZXJSZXF1ZXN0KHRoaXMucGFnZVNpemUgfHwgdGhpcy5wYWdlSW5mby5wYWdlU2l6ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlSW5kZXggPSAwO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSAxO1xyXG4gICAgaWYgKHRoaXMubWFuYWdlYWJsZVBhZ2VzKSB7XHJcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHRoaXMucGFnZUluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5UGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciA9IHRoaXMucGVuZGluZ0ZpbHRlcnMgfHwgW107XHJcbiAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbkZvckZpbHRlckNoYW5nZSgpO1xyXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRmlsdGVyRW1wdHkoJGV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSBbXTtcclxuICAgICAgdGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgPSBbXTtcclxuICAgICAgdGhpcy5zZWFyY2hTdHIgPSAnJztcclxuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb25Gb3JGaWx0ZXJDaGFuZ2UoKTtcclxuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXREYXRhKCRldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciA9IFtdO1xyXG4gICAgICB0aGlzLnBlbmRpbmdGaWx0ZXJzID0gW107XHJcbiAgICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uRm9yRmlsdGVyQ2hhbmdlKCk7XHJcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgICAgLy8gdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNGaWx0ZXJzQXBwbGllZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgJiYgdGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIubGVuZ3RoID4gMCkgfHxcclxuICAgICAgICAgICAodGhpcy5maWx0ZXJzICYmIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwKSB8fFxyXG4gICAgICAgICAgICh0aGlzLnBlbmRpbmdGaWx0ZXJzICYmIHRoaXMucGVuZGluZ0ZpbHRlcnMubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICBnZXREaXNwbGF5U3ZnUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzRmlsdGVyc0FwcGxpZWQoKSAmJiB0aGlzLm5vUmVzdWx0U3ZnUGF0aCA/IHRoaXMubm9SZXN1bHRTdmdQYXRoIDogdGhpcy5ub0RhdGFGb3VuZFN2Z1BhdGg7XHJcbiAgfVxyXG5cclxuICBnZXREaXNwbGF5VGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmhhc0ZpbHRlcnNBcHBsaWVkKCkgJiYgdGhpcy5ub1Jlc3VsdFN2Z1BhdGggPyB0aGlzLm5vUmVzdWx0VGl0bGUgOiB0aGlzLm5vRGF0YUZvdW5kVGl0bGU7XHJcbiAgfVxyXG5cclxuICBnZXREaXNwbGF5U3VidGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmhhc0ZpbHRlcnNBcHBsaWVkKCkgJiYgdGhpcy5ub1Jlc3VsdFN2Z1BhdGggPyB0aGlzLm5vUmVzdWx0U3VidGl0bGUgOiB0aGlzLm5vRGF0YUZvdW5kU3VidGl0bGU7XHJcbiAgfVxyXG5cclxuICBidXR0b25DbGlja2VkRXZlbnQoJGV2ZW50OiBCdXR0b25BY3Rpb25TZXR0aW5ncykge1xyXG5cclxuICB9XHJcblxyXG4gIGdldE1vYmlsZUNhcmRJZENvbHVtbigpOiBUYWJsZUNvbHVtbjxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZChjID0+IGMudmlzaWJsZSAmJiBjLm1vYmlsZUNhcmRJZCA9PT0gdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCk6IFRhYmxlQ29sdW1uPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy52aXNpYmxlICYmIGMubW9iaWxlQ2FyZFN0YXR1cyA9PT0gdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRNb2JpbGVDYXJkQ29sdW1ucygpOiBUYWJsZUNvbHVtbjxhbnk+W10ge1xyXG4gICAgY29uc3QgaWRDb2wgPSB0aGlzLmdldE1vYmlsZUNhcmRJZENvbHVtbigpO1xyXG4gICAgY29uc3Qgc3RhdHVzQ29sID0gdGhpcy5nZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PlxyXG4gICAgICBjLnZpc2libGUgJiZcclxuICAgICAgYy5wcm9wZXJ0eSAhPT0gJ2FjdGlvbnMnICYmXHJcbiAgICAgIGMgIT09IGlkQ29sICYmXHJcbiAgICAgIGMgIT09IHN0YXR1c0NvbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGxhYmVsS2V5QnlWYWx1ZShjb2x1bW46IFRhYmxlQ29sdW1uPGFueT4gfCB1bmRlZmluZWQsIHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghY29sdW1uIHx8ICFjb2x1bW4ucHJvcGVydHkpIHJldHVybiAnJztcclxuICAgIHJldHVybiBzdXBlci5sYWJlbEtleUJ5VmFsdWUoY29sdW1uLCByb3cpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW4gYmFzZVRhYmxlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtcm93IGZsZXgtMTAwXCIgPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtY29sdW1uIGFsaWduLXN0YXJ0IGZsZXgtMTAwXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgPGFwcC10aXRsZS1iYXJcclxuICAgICAgICBbcGFnZVRpdGxlXT1cInBhZ2VJbmZvLmhpZGVUaXRsZSA/ICcnIDogcGFnZUluZm8ubGFiZWxzU2VjdGlvbisnLmxpc3RfdGl0bGUnXCJcclxuICAgICAgICBbc3ViVGl0bGVdPVwiKHBhZ2VJbmZvLmhpZGVUaXRsZSB8fCBwYWdlSW5mby5oaWRlU3VidGl0bGUpID8gJycgOiBwYWdlSW5mby5sYWJlbHNTZWN0aW9uKycuc3VidGl0bGUnXCJcclxuICAgICAgICBbdGl0bGVNb2RlXT1cIicnXCJcclxuICAgICAgICBbcGFnZUluZm9dPVwicGFnZUluZm9cIlxyXG4gICAgICAgIFtuZXdBY3Rpb25dPVwic2hvd0FkZE5ldygpXCJcclxuICAgICAgICBbc2hvd0V4dHJhY3RCdXR0b25dPVwiIXBhZ2VJbmZvLmhpZGVFeHRyYWN0QnV0dG9uXCJcclxuICAgICAgICBbZHJhZnRTdXBwb3J0ZWRdPVwicGFnZUluZm8uZHJhZnRTdXBwb3J0ZWRcIlxyXG4gICAgICAgIFtpc1BlbmRpbmddPVwiaXNQZW5kaW5nXCJcclxuICAgICAgICBbb25WaWV3TW9kZUNoYW5nZV09XCJzd2l0Y2hWaWV3TW9kZS5iaW5kKHRoaXMpXCJcclxuICAgICAgICBbYnV0dG9uc109XCJleHRyYUFjdGlvbnNcIlxyXG4gICAgICAgIFtidXR0b25zRGlzcGxheU1vZGVdPVwiYnV0dG9uc0Rpc3BsYXlNb2RlXCJcclxuICAgICAgICAobmV3QWN0aW9uQ2xpY2tlZCk9XCJvbkFkZE5ld0FjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAoZXh0cmFjdFJlcG9ydCk9XCJleHRyYWN0UmVwb3J0KCRldmVudClcIlxyXG4gICAgICAgICh2aWV3TW9kZUNoYW5nZWQpPVwib25WaWV3TW9kZUNoYW5nZWRSZWNlaXZlZCgkZXZlbnQpXCJcclxuICAgICAgICAoYnV0dG9uQ2xpY2tlZCk9XCJidXR0b25DbGlja2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgW3RvdGFsRWxlbWVudHNdPVwicGFnZUluZm8uaGlkZVRpdGxlID8gdW5kZWZpbmVkIDogdG90YWxFbGVtZW50c1wiPlxyXG4gICAgICA8L2FwcC10aXRsZS1iYXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZpbHRlci1yb3dcIiAqbmdJZj1cIiFwYWdlSW5mby5oaWRlQWR2YW5jZWRGaWx0ZXJcIj5cclxuICAgIDxhcHAtZmlsdGVyLWJ1aWxkZXJcclxuICAgICAgKm5nSWY9XCIhcGFnZUluZm8uaGlkZUFkdmFuY2VkRmlsdGVyXCJcclxuICAgICAgW3BhZ2VJbmZvXT1cInBhZ2VJbmZvXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtmaWx0ZXJGaWVsZHNdPVwiZmlsdGVyRmllbGRzXCJcclxuICAgICAgW3BlbmRpbmdGaWx0ZXJzXT1cInBlbmRpbmdGaWx0ZXJzXCJcclxuICAgICAgW3Nob3dFeHBvcnRCdXR0b25dPVwiIXBhZ2VJbmZvLmhpZGVFeHRyYWN0QnV0dG9uXCJcclxuICAgICAgKGZpbHRlckluZm9ybWF0aW9uKT1cInN0b3JlUGVuZGluZ0ZpbHRlcnMoJGV2ZW50KVwiXHJcbiAgICAgIChpc0VtcHR5KT1cImhhbmRsZUZpbHRlckVtcHR5KCRldmVudClcIlxyXG4gICAgICAoYXBwbHlGaWx0ZXIpPVwiYXBwbHlQZW5kaW5nRmlsdGVycygpXCJcclxuICAgICAgKHNvcnRCeUNsaWNrZWQpPVwiaGFuZGxlU29ydENsaWNrKCRldmVudClcIlxyXG4gICAgICAoZXhwb3J0Q2xpY2tlZCk9XCJleHRyYWN0UmVwb3J0KCRldmVudClcIj5cclxuICAgIDwvYXBwLWZpbHRlci1idWlsZGVyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIiAqbmdJZj1cIiFwYWdlSW5mby5oaWRlRXh0cmFjdEJ1dHRvblwiPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiIXBhZ2VJbmZvLmhpZGVFeHRyYWN0QnV0dG9uXCJcclxuICAgICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZXhwb3J0TWVudVwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4tZXhwb3J0XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tdGV4dFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmZpbGVfZXhwb3J0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPnt7ICdleHBvcnQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYXJyb3ctaWNvblwiPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxtYXQtbWVudSAjZXhwb3J0TWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4dHJhY3RSZXBvcnQoJ3BkZicpXCI+UERGPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHRyYWN0UmVwb3J0KCd4bHN4JylcIj5FeGNlbDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXh0cmFjdFJlcG9ydCgnY3N2JylcIj5DU1Y8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtbWVudT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4LXJvdyBmbGV4LTEwMCBiYXNlVGFibGVfX2RldGFpbHNDb2x1bW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEwMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3cgZmxleC0xMDAgbWFpblRhYmxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiIFthdHRyLmRhdGEtc29ydF09XCJzb3J0U3RhdGVcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uUHJvcCBvZiB2aXNpYmxlQ29sdW1uc0FycmF5OyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWhlYWRlci1jZWxsXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3MuZmlyc3QtY2VsbF09XCJpID09PSAwXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3MubGFzdC1jZWxsXT1cImkgPT09IHZpc2libGVDb2x1bW5zQXJyYXkubGVuZ3RoIC0gMVwiXHJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbnMtY2VsbF09XCJpID09PSB2aXNpYmxlQ29sdW1uc0FycmF5Lmxlbmd0aCAtIDEgJiYgY29sdW1uUHJvcCA9PT0gJ2FjdGlvbnMnXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLXdpZHRoXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggPyB7J3dpZHRoJzogZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCArICclJywgJ2ZsZXgtYmFzaXMnOiBnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoICsgJyUnfSA6IHt9XCJcclxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nICYmIGhhbmRsZVNvcnRDbGljayhjb2x1bW5Qcm9wKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS1oZWFkZXItbGFiZWxcIj57eyBsYWJlbEtleShnZXRDb2x1bW4oY29sdW1uUHJvcCkpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8uZW5hYmxlU29ydGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJnZXRTb3J0RGlyZWN0aW9uKGNvbHVtblByb3ApID09PSAnYXNjJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydC1pY29uIHNvcnQtYXNjXCI+YXJyb3dfZHJvcF91cDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImdldFNvcnREaXJlY3Rpb24oY29sdW1uUHJvcCkgPT09ICdkZXNjJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydC1pY29uIHNvcnQtZGVzY1wiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVNvdXJjZS5kYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1yb3dcIlxyXG4gICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIid0YWJsZS1yb3ctJyArIChyb3c/LmlkIHx8IHJvdz8ua2V5IHx8ICcnKVwiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgJ3RhYmxlLXJvdy0taGlnaGxpZ2h0Jzogc2VsZWN0ZWRSb3dJbmRleCA9PSByb3cuaWQgfHwgKHBhZ2VJbmZvLmdyb3VwQnlQcm9wZXJ0eSAmJiBwYWdlSW5mby5ncm91cEJ5VmFsdWU/LmluY2x1ZGVzKHJvd1twYWdlSW5mby5ncm91cEJ5UHJvcGVydHldKSksXHJcbiAgICAgICAgICAgICAgICAgICAndGFibGUtcm93LS1kYXJrLWhpZ2hsaWdodCc6IGlzRGFya0hpZ2hsaWdodChyb3cpXHJcbiAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgKGF1eGNsaWNrKT1cIm9wZW5OZXdUYWIocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25TZWxlY3RJdGVtKHJvdylcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW5Qcm9wIG9mIHZpc2libGVDb2x1bW5zQXJyYXk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maXJzdC1jZWxsXT1cImkgPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmxhc3QtY2VsbF09XCJpID09PSB2aXNpYmxlQ29sdW1uc0FycmF5Lmxlbmd0aCAtIDFcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbnMtY2VsbF09XCJpID09PSB2aXNpYmxlQ29sdW1uc0FycmF5Lmxlbmd0aCAtIDEgJiYgY29sdW1uUHJvcCA9PT0gJ2FjdGlvbnMnXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oYXMtd2lkdGhdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoID8geyd3aWR0aCc6IGdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggKyAnJScsICdmbGV4LWJhc2lzJzogZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCArICclJ30gOiB7fVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid3b3JrZmxvd1N0YXR1cydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJ3ZlN0YXR1cyB7eyBnZXRTdGF0dXNEZXNjcmlwdGlvbihyb3cpfX1cIiBbYXR0ci5pZF09XCIndGFibGUtYnRuLXdmLScrY29sdW1uUHJvcCsnLScrKHJvdy5pZCB8fCByb3cua2V5IHx8ICcnKVwiPnt7IGdldFN0YXR1c0Rlc2NyaXB0aW9uKHJvdykgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHlwZXItdGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIChjbGljayk9XCJoeXBlckxpbmtDbGlja2VkKGNvbHVtblByb3AsIHJvdylcIiBbbmdDbGFzc109XCJ7J2h5cGVyLWxpbmsnOiBzaG91bGRSZW5kZXJBc0h5cGVyTGluayhyb3cpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvdWxkU2hvd0J1dHRvbihyb3cpXCIgbWF0LWJ1dHRvbiBjbGFzcz1cInByaW1hcnlcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb25CdXR0b25DbGlja2VkKGNvbHVtblByb3AsIHJvdylcIiBbYXR0ci5pZF09XCIndGFibGUtYnRuLWFjdGlvbi0nK2NvbHVtblByb3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsS2V5KGdldENvbHVtbihjb2x1bW5Qcm9wKSkgKyAnX3RpdGxlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAnbWFpblRhYmxlX190ZF9faWNvbi1ncmVlbic6IHJvd1tjb2x1bW5Qcm9wXSA9PT0gJ3Bhc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ21haW5UYWJsZV9fdGRfX2ljb24tb3JhbmdlJzogcm93W2NvbHVtblByb3BdID09PSAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnbWFpblRhYmxlX190ZF9faWNvbi1yZWQnOiByb3dbY29sdW1uUHJvcF0gPT09ICdlcnJvcidcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRJY29uKHJvd1tjb2x1bW5Qcm9wXSkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwicHJpbWFyeVwiIFtjaGVja2VkXT1cInJvd1tjb2x1bW5Qcm9wXVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7YWN0aW9uQ2hlY2tlZENsaWNrZWQoY29sdW1uUHJvcCxyb3cpXCI+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXRlVHlwZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzdGF0ZVR5cGUge3sgcm93W2NvbHVtblByb3BdfX1cIiBbYXR0ci5pZF09XCIndGFibGUtYnRuLXN0YXRlLScrY29sdW1uUHJvcFwiPnt7IGxhYmVsS2V5QnlWYWx1ZShnZXRDb2x1bW4oY29sdW1uUHJvcCksIHJvdykgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IGRhdGU6J2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Nyb3BwZWRUZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldENyb3BwZWRUZXh0KHJvd1tjb2x1bW5Qcm9wXSwgcm93W2dldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGhdKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkb3dubG9hZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYWluVGFibGVfX3RkX19pY29uLWJsdWVcIj5zeXN0ZW1fdXBkYXRlX2FsdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ29uT2ZmJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInJvd1tjb2x1bW5Qcm9wXSA9PT0gbnVsbFwiIGNsYXNzPVwibWFpblRhYmxlX190ZF9faWNvbi1kYXJrb3JhbmdlXCI+ZmxhZzwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwicm93W2NvbHVtblByb3BdID09PSBmYWxzZVwiIGNsYXNzPVwibWFpblRhYmxlX190ZF9faWNvbi1yZWRcIj5mbGFnPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IHRydWVcIiBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2ljb24tZ3JlZW5cIj5mbGFnPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2NvbHVtblByb3BdID09PSBudWxsIHx8IHJvd1tjb2x1bW5Qcm9wXSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLicgKyBnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmxhYmVsICsgJ0luQWN0aXZlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1tjb2x1bW5Qcm9wXSA9PT0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIGdldENvbHVtbihjb2x1bW5Qcm9wKT8ubGFiZWwgKyAnQWN0aXZlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5mbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2VtaXRFdmVudChyb3cpXCIgW2F0dHIuaWRdPVwiJ3RhYmxlLWJ0bi1pbmZvLScrcm93LmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+aW5mbzwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25ldEFtb3VudCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpblRhYmxlX190ZF9fY3VycmVuY3lcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO1wiPnt7IHJvd1tnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmN1cnJlbmN5XSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpblRhYmxlX190ZF9fcHJvcGVydHlcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXJnaW4tbGVmdDo2cHg7IG1hcmdpbi1yaWdodDo2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfCBjdXJyZW5jeTonJzonJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbG9jYWxEYXRlVGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfCBkYXRlIDogZXh0cmFjdEZvcm1hdChnZXRDb2x1bW4oY29sdW1uUHJvcCkpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2JpZ2RlY2ltYWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPjxzdXAgY2xhc3M9XCJtYWluVGFibGVfX3RkX19jdXJyZW5jeVwiPnt7cm93W2dldENvbHVtbihjb2x1bW5Qcm9wKT8uY3VycmVuY3ldfX08L3N1cD48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IG51bWJlciA6IChnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmRpZ2l0SW5mbyB8fCAnMS4zLTUnKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsaXN0QWN0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtYnV0dG9uLWFjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25zQWN0aW9uXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8udmlld1R5cGUgPT09ICdidXR0b25zQWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbGlzdEFjdGlvbl09XCJsaXN0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25zXT1cImxpc3RBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWRCdXR0b24pPVwiYWN0aW9uTGlzdENsaWNrZWQoJGV2ZW50LHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1idXR0b24tYWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8udHJhbnNsYXRlOyBlbHNlIG5vVHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiZW1pdFJvdXRlUGFnZShyb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyBcIi5cIiArIGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9UcmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiZW1pdFJvdXRlUGFnZShyb3cpXCIgW2lubmVySHRtbF09J2V4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBNb2JpbGUgQ2FyZCBWaWV3IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhU291cmNlLmRhdGE7IGxldCByb3dJbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgICAgIGNsYXNzPVwibW9iaWxlLWNhcmRcIlxyXG4gICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ21vYmlsZS1jYXJkLScgKyAocm93Py5pZCB8fCByb3c/LmtleSB8fCAnJylcIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAnbW9iaWxlLWNhcmQtLWhpZ2hsaWdodCc6IHNlbGVjdGVkUm93SW5kZXggPT0gcm93LmlkIHx8IChwYWdlSW5mby5ncm91cEJ5UHJvcGVydHkgJiYgcGFnZUluZm8uZ3JvdXBCeVZhbHVlPy5pbmNsdWRlcyhyb3dbcGFnZUluZm8uZ3JvdXBCeVByb3BlcnR5XSkpLFxyXG4gICAgICAgICAgICAgICAnbW9iaWxlLWNhcmQtLWRhcmstaGlnaGxpZ2h0JzogaXNEYXJrSGlnaGxpZ2h0KHJvdylcclxuICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgKGF1eGNsaWNrKT1cIm9wZW5OZXdUYWIocm93KVwiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblNlbGVjdEl0ZW0ocm93KVwiPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8IS0tIE1vYmlsZSBDYXJkIEhlYWRlcjogSUQvTmFtZSBhbmQgU3RhdHVzIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19oZWFkZXItaWRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1vYmlsZS1jYXJkX19pZC10ZXh0XCI+e3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGdldE1vYmlsZUNhcmRJZENvbHVtbigpPy5wcm9wZXJ0eSB8fCAnaWQnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9faGVhZGVyLXN0YXR1c1wiICpuZ0lmPVwiZ2V0TW9iaWxlQ2FyZFN0YXR1c0NvbHVtbigpXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3RhdGVUeXBlIHt7IHJvd1tnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCk/LnByb3BlcnR5XX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInbW9iaWxlLWJ0bi1zdGF0ZS0nK2dldE1vYmlsZUNhcmRTdGF0dXNDb2x1bW4oKT8ucHJvcGVydHlcIj5cclxuICAgICAgICAgICAgICAgIHt7IGxhYmVsS2V5QnlWYWx1ZShnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCksIHJvdykgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRGl2aWRlciAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9fZGl2aWRlclwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gTW9iaWxlIENhcmQgQm9keTogT3RoZXIgY29sdW1ucyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9fYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ2V0TW9iaWxlQ2FyZENvbHVtbnMoKVwiIGNsYXNzPVwibW9iaWxlLWNhcmRfX3Jvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9fcm93LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBsYWJlbEtleShjb2x1bW4pIHwgdHJhbnNsYXRlIH19IDo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19yb3ctdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGF0ZVR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3RhdGVUeXBlIHt7IHJvd1tjb2x1bW4ucHJvcGVydHldfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIidtb2JpbGUtYnRuLXN0YXRlLScrY29sdW1uLnByb3BlcnR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBsYWJlbEtleUJ5VmFsdWUoY29sdW1uLCByb3cpIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uLnByb3BlcnR5KSB8IGRhdGU6J2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25ldEFtb3VudCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1vYmlsZS1jYXJkX19hbW91bnQtY3VycmVuY3lcIj57eyByb3dbY29sdW1uLmN1cnJlbmN5XSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1vYmlsZS1jYXJkX19hbW91bnQtdmFsdWVcIj57eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uLnByb3BlcnR5KSB8IGN1cnJlbmN5OicnOicnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsb2NhbERhdGVUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgZGF0ZSA6IGV4dHJhY3RGb3JtYXQoY29sdW1uKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiaWdkZWNpbWFsJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD48c3VwIGNsYXNzPVwibWFpblRhYmxlX190ZF9fY3VycmVuY3lcIj57e3Jvd1tjb2x1bW4uY3VycmVuY3ldfX08L3N1cD48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgbnVtYmVyIDogKGNvbHVtbi5kaWdpdEluZm8gfHwgJzEuMy01JykgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50cmFuc2xhdGU7IGVsc2Ugbm9UcmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyBcIi5cIiArIGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9UcmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT0nZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSknPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gTW9iaWxlIENhcmQgQWN0aW9ucyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9fYWN0aW9uc1wiICpuZ0lmPVwibGlzdEFjdGlvbiAmJiBsaXN0QWN0aW9uLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGFwcC1idXR0b24tYWN0aW9uc1xyXG4gICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcclxuICAgICAgICAgICAgICBbYnV0dG9uc0FjdGlvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbbGlzdEFjdGlvbl09XCJsaXN0QWN0aW9uXCJcclxuICAgICAgICAgICAgICBbYWN0aW9uc109XCJsaXN0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAoY2xpY2tlZEJ1dHRvbik9XCJhY3Rpb25MaXN0Q2xpY2tlZCgkZXZlbnQscm93KVwiPlxyXG4gICAgICAgICAgICA8L2FwcC1idXR0b24tYWN0aW9ucz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJub0RhdGFGb3VuZFwiIGNsYXNzPVwiZGF0YU5vdEZvdW5kIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImdldERpc3BsYXlTdmdQYXRoKClcIiBbc3JjXT1cImdldERpc3BsYXlTdmdQYXRoKClcIiBjbGFzcz1cImRhdGFOb3RGb3VuZF9faWNvblwiIGFsdD1cIk5vIGRhdGEgZm91bmRcIiAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0YU5vdEZvdW5kX190aXRsZVwiPnt7IGdldERpc3BsYXlUaXRsZSgpIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRhTm90Rm91bmRfX3N1YnRpdGxlXCI+e3sgZ2V0RGlzcGxheVN1YnRpdGxlKCkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPGRpdiAgKm5nSWY9XCIoZGF0YVNvdXJjZS5kYXRhPy5sZW5ndGggPiAwIHx8IGN1c3RvbWl6ZWREYXRhKSAmJiAhcGFnZUluZm8uaGlkZVBhZ2luYXRpb25cIiBjbGFzcz1cIm1haW4tcGFnaW5hdGlvbiBmbGV4LXJvd1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbmFibGVQYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW4gZmxleC0xMDBcIj5cclxuICAgICAgICAgICAgPGFwcC1wYWdpbmF0b3JcclxuICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwicGFnZUluZGV4XCJcclxuICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEVsZW1lbnRzXCJcclxuICAgICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCJcclxuICAgICAgICAgICAgICBbbW9iaWxlTG9hZE1vcmVJbmNyZW1lbnRdPVwibW9iaWxlTG9hZE1vcmVJbmNyZW1lbnRcIlxyXG4gICAgICAgICAgICAgIFtkaXNwbGF5ZWRJdGVtc109XCJtb2JpbGVEaXNwbGF5ZWRJdGVtcyB8fCBkYXRhU291cmNlLmRhdGEubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uTG9hZE1vcmUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2FwcC1wYWdpbmF0b3I+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -176,12 +176,9 @@ export class BackendService {
176
176
  }
177
177
  }
178
178
  }
179
- else {
180
- this.topPanelMessage$.next(new SnackMessage(resp.message.toString(), true, 'info'));
181
- }
182
179
  }
183
180
  else {
184
- this.topPanelMessage$.next(new SnackMessage(resp.message.toString(), false, 'error'));
181
+ this.topPanelMessage$.next(new SnackMessage('report.download.failed', false, 'error'));
185
182
  }
186
183
  });
187
184
  }
@@ -241,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
241
238
  type: Inject,
242
239
  args: ['secretsManager']
243
240
  }] }] });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvc2VydmljZXMvYmFja2VuZC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBZ0MsV0FBVyxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVGLE9BQU8sRUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBS3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQVFqRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7OztBQUU1RyxNQUFNLG1CQUFtQixHQUEyQjtJQUNoRCxDQUFDLEVBQUUsS0FBSztJQUNSLENBQUMsRUFBRSxTQUFTO0lBQ1osQ0FBQyxFQUFFLFlBQVk7SUFDZixDQUFDLEVBQUUsV0FBVztJQUNkLENBQUMsRUFBRSxTQUFTO0lBQ1osQ0FBQyxFQUFFLFNBQVM7Q0FDZixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFlBQVksRUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFJcEUsTUFBTSxPQUFPLGNBQWM7SUFRdkIsWUFBb0IsSUFBZ0IsRUFDaEIsUUFBa0IsRUFDbEIsZ0JBQWtDLEVBQ2xDLEtBQXFCLEVBQ3JCLE1BQWlCLEVBQ0MsTUFBVyxFQUNILGNBQW1CO1FBTjdDLFNBQUks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QkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQWNnQixNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtjYXRjaEVycm9yLCBkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7U25hY2tNZXNzYWdlfSBmcm9tIFwiLi4vYmFzZS1tb2RlbC9zbmFjay1tZXNzYWdlLm1vZGVsXCI7XHJcbmltcG9ydCB7UGFnZUluZm99IGZyb20gXCIuLi9iYXNlLW1vZGVsL3BhZ2UtaW5mb1wiO1xyXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7Q29sdW1uRGVmfSBmcm9tIFwiLi4vYmFzZS1tb2RlbC9jb2x1bW4tZGVmLm1vZGVsXCI7XHJcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gXCIuLi9iYXNlLW1vZGVsL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtHZXRJdGVtc0xpc3R9IGZyb20gXCIuLi9iYXNlLW1vZGVsL2dldC1pdGVtcy1saXN0XCI7XHJcbmltcG9ydCB7RmllbGRBY3Rpb259IGZyb20gXCIuLi9iYXNlLW1vZGVsL2ZpZWxkLWFjdGlvblwiO1xyXG5pbXBvcnQge1dvcmtmbG93fSBmcm9tIFwiLi4vYmFzZS1tb2RlbC93b3JrZmxvdy93b3JrZmxvdy5tb2RlbFwiO1xyXG5pbXBvcnQge1JlcG9ydFJlcXVlc3R9IGZyb20gXCIuLi9iYXNlLW1vZGVsL3JlcG9ydC1yZXF1ZXN0Lm1vZGVsXCI7XHJcbmltcG9ydCB7RmlsdGVyUmVxdWVzdH0gZnJvbSBcIi4uL2Jhc2UtbW9kZWwvZmlsdGVyLXJlcXVlc3RcIjtcclxuaW1wb3J0IHtSZXNwb25zZUVudmVsb3B9IGZyb20gXCIuLi9iYXNlLW1vZGVsL3Jlc3BvbnNlLWVudmVsb3AubW9kZWxcIjtcclxuaW1wb3J0IHtGb3JtR3JvdXB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtUb3BQYW5lbH0gZnJvbSBcIi4vdG9wLXBhbmVsXCI7XHJcbmltcG9ydCB7RG9BY3Rpb25SZXF1ZXN0fSBmcm9tIFwiLi4vYmFzZS1tb2RlbC9kby1hY3Rpb24tcmVxdWVzdFwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge0FjdGlvbkNvbmZpcm1hdGlvbkNvbXBvbmVudH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvYWN0aW9uLWNvbmZpcm1hdGlvbi9hY3Rpb24tY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5cclxuY29uc3QgV09SS0ZMT1dfU1RBVEVTX01BUDogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcclxuICAgIDE6ICdOZXcnLFxyXG4gICAgMjogJ1BlbmRpbmcnLFxyXG4gICAgMzogJ1Rlcm1pbmF0ZWQnLFxyXG4gICAgNDogJ0NvbXBsZXRlZCcsXHJcbiAgICA1OiAnVXBkYXRlZCcsXHJcbiAgICA2OiAnRGVmYXVsdCdcclxufTtcclxuXHJcbmNvbnN0IEVYQ0xVREVEX1JFUE9SVF9DT0xVTU5TID0gWydsaXN0QWN0aW9uJywnYnV0dG9uJywgJ2NoZWNrYm94J107XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFja2VuZFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHRvcFBhbmVsTWVzc2FnZSQgPSBuZXcgU3ViamVjdDxTbmFja01lc3NhZ2U+KCk7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBwdWJsaWMgcGFyZW50Rm9ybTogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGNoaWxkRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGZpZWxkQWN0aW9uJCA9IG5ldyBTdWJqZWN0PEZpZWxkQWN0aW9uPigpO1xyXG4gICAgcHVibGljIGlzRW1wdHlJdGVtczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB0b3BQYW5lbDogVG9wUGFuZWwsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KCdjb25maWcnKSBwcml2YXRlIGNvbmZpZzogYW55LFxyXG4gICAgICAgICAgICAgICAgQEluamVjdCgnc2VjcmV0c01hbmFnZXInKSBwcml2YXRlIHNlY3JldHNNYW5hZ2VyOiBhbnkpIHtcclxuXHJcbiAgICAgICAgdGhpcy50b3BQYW5lbE1lc3NhZ2UkLnN1YnNjcmliZShtc2cgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvcFBhbmVsLnRvcFBhbmVsTWVzc2FnZSQubmV4dChtc2cpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGRlZmF1bHRzKHZhbHVlOiBhbnkgfCB1bmRlZmluZWQpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVmYXVsdHMoKTogYW55IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzRGVzY3JpcHRpb24oZWxlbWVudDogYW55LCB3b3JrZmxvdzogV29ya2Zsb3cpIHtcclxuICAgICAgICBpZiAoZWxlbWVudD8uc3RlcElkKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB3b3JrZmxvdz8ud29ya2Zsb3dTdGVwcz8uZmluZEluZGV4KHMgPT4gcy5zdGVwSWQgPT09IGVsZW1lbnQuc3RlcElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0RGVmYXVsdExhbmcoKSA9PT0gJ2FyJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3c/LndvcmtmbG93U3RlcHNbaW5kZXhdLnN0ZXBOYW1lQXIgfHwgd29ya2Zsb3c/LndvcmtmbG93U3RlcHNbaW5kZXhdLnN0ZXBOYW1lOlxyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtmbG93Py53b3JrZmxvd1N0ZXBzW2luZGV4XS5zdGVwTmFtZTtcclxuICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh3b3JrZmxvdz8ud29ya2Zsb3dTdGVwc1tpbmRleF0uc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdJTlZFTlRPUlkuaW5wcm9jZXNzU3RhdHVzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXNJZCA9PT0gNCAmJiBlbGVtZW50LnN0YXR1c0Rlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zdGF0dXNEZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnN0YXR1c0lkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoV09SS0ZMT1dfU1RBVEVTX01BUFtlbGVtZW50LnN0YXR1c0lkXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ1bmtub3duXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbi8vc3NzXHJcbiAgICBnZXRJdGVtc0J5RmlsdGVyKHJlcG9ydFJlcXVlc3Q6IGFueSwgYXBpVXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QXBpQmFzZVBhdGgoKX0vYXBpL3YxJHthcGlVcmx9L2xpc3RgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHJlcG9ydFJlcXVlc3QsIHsgaGVhZGVyczogdGhpcy5idWlsZFNlY3VyZWRIZWFkZXIoKX0pLnBpcGUoXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IG9mKGVyci5tZXNzYWdlIHx8IGVycikpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtQXVkaXRMb2cocmVwb3J0UmVxdWVzdDogYW55LCBhcGlVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRBcGlCYXNlUGF0aCgpfS9hcGkvdjEke2FwaVVybH0vYXVkaXQtbG9nYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCByZXBvcnRSZXF1ZXN0LCB7IGhlYWRlcnM6IHRoaXMuYnVpbGRTZWN1cmVkSGVhZGVyKCl9KS5waXBlKFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiBvZihlcnIubWVzc2FnZSB8fCBlcnIpKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRTZWN1cmVkSGVhZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLmNvbmZpZy5nZXRBdXRoVG9rZW4oKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xyXG4gICAgfVxyXG5cclxuICBwdWJsaWMgYnVpbGRGb3JtU2VjdXJlZEhlYWRlcigpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICBBdXRob3JpemF0aW9uOiB0aGlzLmNvbmZpZy5nZXRBdXRoVG9rZW4oKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIGxhYmVsS2V5KGNvbHVtbjogYW55LCBwYWdlSW5mbzogUGFnZUluZm8pIHtcclxuICAgIGNvbnN0IGNvbmZpZ3VyZWRLZXkgPSBjb2x1bW4ubGFiZWwgPyBjb2x1bW4ubGFiZWwgOiBjb2x1bW4ucHJvcGVydHk7XHJcblxyXG4gICAgaWYgKGNvbmZpZ3VyZWRLZXkgJiYgY29uZmlndXJlZEtleS50cmltKCkgIT09ICcnICYmIGNvbmZpZ3VyZWRLZXkuc3RhcnRzV2l0aChwYWdlSW5mby5sYWJlbHNTZWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4gY29uZmlndXJlZEtleTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYCR7cGFnZUluZm8ubGFiZWxzU2VjdGlvbn0uJHtjb25maWd1cmVkS2V5fWA7XHJcbiAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkUmVwb3J0Q29sdW1uKGNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXSwgcGFnZUluZm86IFBhZ2VJbmZvKTogQ29sdW1uRGVmW10ge1xyXG4gICAgICAgIGxldCBjb2x1bW5EZWY6IENvbHVtbkRlZltdID0gW107XHJcblxyXG4gICAgICAgICAgY29sdW1ucy5maWx0ZXIoeCA9PiAhRVhDTFVERURfUkVQT1JUX0NPTFVNTlMuaW5jbHVkZXMoeC50eXBlKSkuZm9yRWFjaCgoYywgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHRyYW5zTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmxhYmVsS2V5KGMscGFnZUluZm8pKTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zR3JvdXAgPSBwYWdlSW5mby5zdXBwb3J0R3JvdXBpbmdJbkV4cG9ydCA/XHJcbiAgICAgICAgICAgICAgYy5ncm91cC50cmltKCkgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjLmdyb3VwKSA6ICcgJyA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjLnR5cGUgPT09ICd3b3JrZmxvd1N0YXR1cycpIHtcclxuICAgICAgICAgICAgICB0cmFuc0xhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3dvcmtmbG93U3RhdHVzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKChjLnJlcG9ydFZpc2libGUgPT09IHRydWUpIHx8IChjLnZpc2libGUgPT09IHRydWUgJiYgYy5yZXBvcnRWaXNpYmxlICE9PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICBjb2x1bW5EZWYucHVzaChuZXcgQ29sdW1uRGVmKGMsIGluZGV4LCB0cmFuc0xhYmVsLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0RGVmYXVsdExhbmcoKSx0cmFuc0dyb3VwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY29sdW1uRGVmO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmFzZTY0VG9BcnJheUJ1ZmZlcihiYXNlNjQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7IC8vIENvbW1lbnQgdGhpcyBpZiBub3QgdXNpbmcgYmFzZTY0XHJcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnlTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gYnl0ZXMubWFwKChieXRlLCBpKSA9PiBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRSZXBvcnRSZXF1ZXN0KGNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXSwgdGl0bGU6IHN0cmluZyB8IHN0cmluZ1tdLCBmaWx0ZXJSZXF1ZXN0OiBGaWx0ZXJSZXF1ZXN0LCByZXBvcnRUeXBlOiBhbnksIHBhZ2VJbmZvOiBQYWdlSW5mbywgc2VhcmNoU3RyOiBzdHJpbmcgLG9yaWVudGF0aW9uPSdQT1JUUkFJVCcpOiBSZXBvcnRSZXF1ZXN0IHtcclxuICAgICAgICBjb25zdCBjb2x1bW5EZWYgPSB0aGlzLmJ1aWxkUmVwb3J0Q29sdW1uKGNvbHVtbnMsIHBhZ2VJbmZvKTtcclxuICAgICAgICBjb25zdCByZXBvcnRSZXF1ZXN0ID0gbmV3IFJlcG9ydFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICBkYXRhc2V0OiBbXSwgZmlsdGVyOiBcIlwiLFxyXG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5EZWYsXHJcbiAgICAgICAgICAgIC8vIHNlc3Npb25JZDogdGhpcy50b3BQYW5lbC51c2VyU2Vzc2lvbigpLnNlc3Npb25JZCxcclxuICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLmNvbmZpZy5nZXRBdXRoVG9rZW4oKSxcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRpdGxlKSxcclxuICAgICAgICAgICAgcHJlZkxhbmc6IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXREZWZhdWx0TGFuZygpLFxyXG4gICAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgICBzZWFyY2hTdHI6IHNlYXJjaFN0cixcclxuICAgICAgICAgICAgZmlsdGVyUmVxdWVzdDogZmlsdGVyUmVxdWVzdCxcclxuICAgICAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9ufSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcG9ydFJlcXVlc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TG9va3VwSXRlbXNCeU11bHRpRmlsdGVyKGxpc3RJdGVtczogR2V0SXRlbXNMaXN0LCBmaWx0ZXJSZXF1ZXN0PzogRmlsdGVyUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIGxpc3RJdGVtcy5wYWdlU2l6ZSA9IDEwMDtcclxuICAgICAgZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IDEwMDtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnc2VhcmNoU3RyJywgbGlzdEl0ZW1zLnNlYXJjaFN0cik7XHJcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuZ2V0QXBpQmFzZVBhdGgoKX0vYXBpL3YxLyR7bGlzdEl0ZW1zLmFwaVVyaX1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGZpbHRlclJlcXVlc3QsIHsgaGVhZGVyczogdGhpcy5idWlsZFNlY3VyZWRIZWFkZXIoKSwgcGFyYW1zOiBwYXJhbXN9KS5waXBlKFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiBvZihlcnIubWVzc2FnZSB8fCBlcnIpKSk7XHJcbiAgICB9XHJcbiAgICBnZXRMb29rdXBJdGVtc0J5RmlsdGVyKGxpc3RJdGVtczogR2V0SXRlbXNMaXN0LCBjYXNjYWRlZElkPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBsaXN0SXRlbXMucGFnZVNpemUgPSA1MDA7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3NlYXJjaFN0cicsIGxpc3RJdGVtcy5zZWFyY2hTdHIpO1xyXG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLmdldEFwaUJhc2VQYXRoKCl9L2FwaS92MS8ke2xpc3RJdGVtcy5hcGlVcml9YDtcclxuICAgICAgICBpZiAoY2FzY2FkZWRJZCkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyBgLyR7Y2FzY2FkZWRJZH1gXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBsaXN0SXRlbXMseyBoZWFkZXJzOiB0aGlzLmJ1aWxkU2VjdXJlZEhlYWRlcigpfSkucGlwZShcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4gb2YoZXJyLm1lc3NhZ2UgfHwgZXJyKSkpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgZG93bmxvYWRSZXBvcnQocmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCwgcGFnZUFwaVBhdGggOiBzdHJpbmcsIHJlYWR5UGF0aD8gOiBib29sZWFuICkge1xyXG4gICAgICBjb25zdCBzID0gcmVhZHlQYXRoID09PSB0cnVlID8gYC9hcGkvdjEke3BhZ2VBcGlQYXRofWAgOiBgL2FwaS92MSR7cGFnZUFwaVBhdGh9L2V4dHJhY3RBbmREb3dubG9hZExpc3RSZXBvcnRgO1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UmVzcG9uc2VFbnZlbG9wPih0aGlzLmdldEFwaUJhc2VQYXRoKCkgKyBzLCByZXBvcnRSZXF1ZXN0LCB7aGVhZGVyczogdGhpcy5idWlsZFNlY3VyZWRIZWFkZXIoKX0pLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHJlc3A6UmVzcG9uc2VFbnZlbG9wKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcC52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwLmJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9wUGFuZWxNZXNzYWdlJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU25hY2tNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBvcnQuZG93bmxvYWQuc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogcmVwb3J0UmVxdWVzdC50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogcmVwb3J0UmVxdWVzdC5yZXBvcnRUeXBlPy50b1VwcGVyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHJlcG9ydFJlcXVlc3QudGl0bGUgKyBcIi5cIiArIHJlcG9ydFJlcXVlc3QucmVwb3J0VHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0aGlzLmJhc2U2NFRvQXJyYXlCdWZmZXIocmVzcC5ib2R5KV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tc1NhdmVCbG9iKGJsb2IsIGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCcm93c2VycyB0aGF0IHN1cHBvcnQgSFRNTDUgZG93bmxvYWQgYXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcFBhbmVsTWVzc2FnZSQubmV4dChuZXcgU25hY2tNZXNzYWdlKHJlc3AubWVzc2FnZS50b1N0cmluZygpLCB0cnVlLCAnaW5mbycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9wUGFuZWxNZXNzYWdlJC5uZXh0KG5ldyBTbmFja01lc3NhZ2UocmVzcC5tZXNzYWdlLnRvU3RyaW5nKCksIGZhbHNlLCAnZXJyb3InKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEFwaUJhc2VQYXRoKCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRCYXNlQXBpKCk7XHJcbiAgICB9XHJcblxyXG4gIGRvQWN0aW9uV2l0aEF0dGFjaG1lbnRzKHJlcXVlc3Q6IERvQWN0aW9uUmVxdWVzdCwgcGFyYW0yOiBhbnlbXSwgcGFnZUluZm86IFBhZ2VJbmZvKSB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEFwaUJhc2VQYXRoKCl9L2FwaS92MSR7cGFnZUluZm8uYXBpVXJpfS9kb0FjdGlvbldpdGhBdHRhY2htZW50c2A7XHJcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm1EYXRhLnNldCgnZG9BY3Rpb25SZXF1ZXN0JywgbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHJlcXVlc3QpXSwge1xyXG4gICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgfSkpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHRoaXMuYnVpbGRGb3JtU2VjdXJlZEhlYWRlcigpIH0pLnBpcGUoXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBvZihlcnJvci5lcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICB9XHJcbiAgZG9BY3Rpb25XaXRoQXR0YWNobWVudChyZXF1ZXN0OiBEb0FjdGlvblJlcXVlc3QsIGZpbGU6IEZpbGUsIHBhZ2VJbmZvOiBQYWdlSW5mbykge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRBcGlCYXNlUGF0aCgpfS9hcGkvdjEke3BhZ2VJbmZvLmFwaVVyaX0vZG9BY3Rpb25XaXRoQXR0YWNobWVudHNgO1xyXG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcblxyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlcycsIGZpbGUpO1xyXG4gICAgZm9ybURhdGEuc2V0KCdkb0FjdGlvblJlcXVlc3QnLCBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocmVxdWVzdCldLCB7XHJcbiAgICAgIHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odXJsLCBmb3JtRGF0YSwge1xyXG4gICAgICBoZWFkZXJzOiB0aGlzLmJ1aWxkRm9ybVNlY3VyZWRIZWFkZXIoKVxyXG4gICAgfSkucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBlcnJvciBpbnRvIGEgZmFrZSBzdWNjZXNzLWxpa2UgcmVzcG9uc2VcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IuZXJyb3IpOyAvLyBUaGlzIHdpbGwgbm93IGJlIHBhc3NlZCB0byBgbmV4dGAgaW4gc3Vic2NyaWJlKClcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBlbmNyeXB0KG1lc3NhZ2U6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VjcmV0c01hbmFnZXIuZW5jcnlwdFNlY3JldChtZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIGRlY3J5cHQoc2VjcmV0OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnNlY3JldHNNYW5hZ2VyLmRlY3J5cHRTZWNyZXQoc2VjcmV0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb25maXJtYXRpb24oKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWN0aW9uQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHthY2NlcHRBY3Rpb25MYWJlbDogJ2FjY2VwdCcscmVqZWN0QWN0aW9uTGFiZWw6J3JldHVybicsIHdhcm5pbmdNc2c6ICdjb25maXJtYXRpb25fbWVzc2FnZSd9LFxyXG4gICAgICB3aWR0aDogJzYwMHB4JyxcclxuICAgICAgaGVpZ2h0OiAnYXV0bydcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICAgIGludGVyZmFjZSBOYXZpZ2F0b3Ige1xyXG4gICAgICAgIG1zU2F2ZUJsb2I6IChibG9iT3JCYXNlNjQ6IEJsb2IgfCBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpID0+IHZvaWRcclxuICAgIH1cclxufVxyXG4iXX0=
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvc2VydmljZXMvYmFja2VuZC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBZ0MsV0FBVyxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVGLE9BQU8sRUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBS3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQVFqRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7OztBQUU1RyxNQUFNLG1CQUFtQixHQUEyQjtJQUNoRCxDQUFDLEVBQUUsS0FBSztJQUNSLENBQUMsRUFBRSxTQUFTO0lBQ1osQ0FBQyxFQUFFLFlBQVk7SUFDZixDQUFDLEVBQUUsV0FBVztJQUNkLENBQUMsRUFBRSxTQUFTO0lBQ1osQ0FBQyxFQUFFLFNBQVM7Q0FDZixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFlBQVksRUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFJcEUsTUFBTSxPQUFPLGNBQWM7SUFRdkIsWUFBb0IsSUFBZ0IsRUFDaEIsUUFBa0IsRUFDbEIsZ0JBQWtDLEVBQ2xDLEtBQXFCLEVBQ3JCLE1BQWlCLEVBQ0MsTUFBVyxFQUNILGNBQW1CO1FBTjdDLFNBQUks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LFFBQVEsRUFBRTtZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1NBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQ0wsb0JBQW9CLEVBQUUsRUFDdEIsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLHdEQUF3RDtZQUN4RCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxtREFBbUQ7UUFDN0UsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxPQUFPLENBQUMsTUFBVztRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxlQUFlO1FBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQzlELElBQUksRUFBRSxFQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFDO1lBQ2xHLEtBQUssRUFBRSxPQUFPO1lBQ2QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDOytHQTNQVSxjQUFjLDJKQWFILFFBQVEsYUFDUixnQkFBZ0I7bUhBZDNCLGNBQWMsY0FGWCxNQUFNOzs0RkFFVCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBY2dCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2NhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtTbmFja01lc3NhZ2V9IGZyb20gXCIuLi9iYXNlLW1vZGVsL3NuYWNrLW1lc3NhZ2UubW9kZWxcIjtcclxuaW1wb3J0IHtQYWdlSW5mb30gZnJvbSBcIi4uL2Jhc2UtbW9kZWwvcGFnZS1pbmZvXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuaW1wb3J0IHtDb2x1bW5EZWZ9IGZyb20gXCIuLi9iYXNlLW1vZGVsL2NvbHVtbi1kZWYubW9kZWxcIjtcclxuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSBcIi4uL2Jhc2UtbW9kZWwvdGFibGUtY29sdW1uLmludGVyZmFjZVwiO1xyXG5pbXBvcnQge0dldEl0ZW1zTGlzdH0gZnJvbSBcIi4uL2Jhc2UtbW9kZWwvZ2V0LWl0ZW1zLWxpc3RcIjtcclxuaW1wb3J0IHtGaWVsZEFjdGlvbn0gZnJvbSBcIi4uL2Jhc2UtbW9kZWwvZmllbGQtYWN0aW9uXCI7XHJcbmltcG9ydCB7V29ya2Zsb3d9IGZyb20gXCIuLi9iYXNlLW1vZGVsL3dvcmtmbG93L3dvcmtmbG93Lm1vZGVsXCI7XHJcbmltcG9ydCB7UmVwb3J0UmVxdWVzdH0gZnJvbSBcIi4uL2Jhc2UtbW9kZWwvcmVwb3J0LXJlcXVlc3QubW9kZWxcIjtcclxuaW1wb3J0IHtGaWx0ZXJSZXF1ZXN0fSBmcm9tIFwiLi4vYmFzZS1tb2RlbC9maWx0ZXItcmVxdWVzdFwiO1xyXG5pbXBvcnQge1Jlc3BvbnNlRW52ZWxvcH0gZnJvbSBcIi4uL2Jhc2UtbW9kZWwvcmVzcG9uc2UtZW52ZWxvcC5tb2RlbFwiO1xyXG5pbXBvcnQge0Zvcm1Hcm91cH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1RvcFBhbmVsfSBmcm9tIFwiLi90b3AtcGFuZWxcIjtcclxuaW1wb3J0IHtEb0FjdGlvblJlcXVlc3R9IGZyb20gXCIuLi9iYXNlLW1vZGVsL2RvLWFjdGlvbi1yZXF1ZXN0XCI7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7QWN0aW9uQ29uZmlybWF0aW9uQ29tcG9uZW50fSBmcm9tIFwiLi4vY29tcG9uZW50cy9hY3Rpb24tY29uZmlybWF0aW9uL2FjdGlvbi1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcblxyXG5jb25zdCBXT1JLRkxPV19TVEFURVNfTUFQOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xyXG4gICAgMTogJ05ldycsXHJcbiAgICAyOiAnUGVuZGluZycsXHJcbiAgICAzOiAnVGVybWluYXRlZCcsXHJcbiAgICA0OiAnQ29tcGxldGVkJyxcclxuICAgIDU6ICdVcGRhdGVkJyxcclxuICAgIDY6ICdEZWZhdWx0J1xyXG59O1xyXG5cclxuY29uc3QgRVhDTFVERURfUkVQT1JUX0NPTFVNTlMgPSBbJ2xpc3RBY3Rpb24nLCdidXR0b24nLCAnY2hlY2tib3gnXTtcclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYWNrZW5kU2VydmljZSB7XHJcbiAgICBwdWJsaWMgdG9wUGFuZWxNZXNzYWdlJCA9IG5ldyBTdWJqZWN0PFNuYWNrTWVzc2FnZT4oKTtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHB1YmxpYyBwYXJlbnRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBwdWJsaWMgY2hpbGRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBwdWJsaWMgZmllbGRBY3Rpb24kID0gbmV3IFN1YmplY3Q8RmllbGRBY3Rpb24+KCk7XHJcbiAgICBwdWJsaWMgaXNFbXB0eUl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHRvcFBhbmVsOiBUb3BQYW5lbCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoJ2NvbmZpZycpIHByaXZhdGUgY29uZmlnOiBhbnksXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KCdzZWNyZXRzTWFuYWdlcicpIHByaXZhdGUgc2VjcmV0c01hbmFnZXI6IGFueSkge1xyXG5cclxuICAgICAgICB0aGlzLnRvcFBhbmVsTWVzc2FnZSQuc3Vic2NyaWJlKG1zZyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wUGFuZWwudG9wUGFuZWxNZXNzYWdlJC5uZXh0KG1zZyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzZXQgZGVmYXVsdHModmFsdWU6IGFueSB8IHVuZGVmaW5lZCkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZWZhdWx0cygpOiBhbnkgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0dXNEZXNjcmlwdGlvbihlbGVtZW50OiBhbnksIHdvcmtmbG93OiBXb3JrZmxvdykge1xyXG4gICAgICAgIGlmIChlbGVtZW50Py5zdGVwSWQpIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHdvcmtmbG93Py53b3JrZmxvd1N0ZXBzPy5maW5kSW5kZXgocyA9PiBzLnN0ZXBJZCA9PT0gZWxlbWVudC5zdGVwSWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXREZWZhdWx0TGFuZygpID09PSAnYXInID9cclxuICAgICAgICAgICAgICAgICAgICB3b3JrZmxvdz8ud29ya2Zsb3dTdGVwc1tpbmRleF0uc3RlcE5hbWVBciB8fCB3b3JrZmxvdz8ud29ya2Zsb3dTdGVwc1tpbmRleF0uc3RlcE5hbWU6XHJcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3c/LndvcmtmbG93U3RlcHNbaW5kZXhdLnN0ZXBOYW1lO1xyXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHdvcmtmbG93Py53b3JrZmxvd1N0ZXBzW2luZGV4XS5zdGVwTmFtZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0lOVkVOVE9SWS5pbnByb2Nlc3NTdGF0dXMnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnN0YXR1c0lkID09PSA0ICYmIGVsZW1lbnQuc3RhdHVzRGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnN0YXR1c0Rlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3RhdHVzSWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChXT1JLRkxPV19TVEFURVNfTUFQW2VsZW1lbnQuc3RhdHVzSWRdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcInVua25vd25cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuLy9zc3NcclxuICAgIGdldEl0ZW1zQnlGaWx0ZXIocmVwb3J0UmVxdWVzdDogYW55LCBhcGlVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRBcGlCYXNlUGF0aCgpfS9hcGkvdjEke2FwaVVybH0vbGlzdGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgcmVwb3J0UmVxdWVzdCwgeyBoZWFkZXJzOiB0aGlzLmJ1aWxkU2VjdXJlZEhlYWRlcigpfSkucGlwZShcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4gb2YoZXJyLm1lc3NhZ2UgfHwgZXJyKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1BdWRpdExvZyhyZXBvcnRSZXF1ZXN0OiBhbnksIGFwaVVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEFwaUJhc2VQYXRoKCl9L2FwaS92MSR7YXBpVXJsfS9hdWRpdC1sb2dgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHJlcG9ydFJlcXVlc3QsIHsgaGVhZGVyczogdGhpcy5idWlsZFNlY3VyZWRIZWFkZXIoKX0pLnBpcGUoXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IG9mKGVyci5tZXNzYWdlIHx8IGVycikpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZFNlY3VyZWRIZWFkZXIoKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHRoaXMuY29uZmlnLmdldEF1dGhUb2tlbigpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgICB9XHJcblxyXG4gIHB1YmxpYyBidWlsZEZvcm1TZWN1cmVkSGVhZGVyKCkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IHRoaXMuY29uZmlnLmdldEF1dGhUb2tlbigpXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgbGFiZWxLZXkoY29sdW1uOiBhbnksIHBhZ2VJbmZvOiBQYWdlSW5mbykge1xyXG4gICAgY29uc3QgY29uZmlndXJlZEtleSA9IGNvbHVtbi5sYWJlbCA/IGNvbHVtbi5sYWJlbCA6IGNvbHVtbi5wcm9wZXJ0eTtcclxuXHJcbiAgICBpZiAoY29uZmlndXJlZEtleSAmJiBjb25maWd1cmVkS2V5LnRyaW0oKSAhPT0gJycgJiYgY29uZmlndXJlZEtleS5zdGFydHNXaXRoKHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24pKSB7XHJcbiAgICAgIHJldHVybiBjb25maWd1cmVkS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgJHtwYWdlSW5mby5sYWJlbHNTZWN0aW9ufS4ke2NvbmZpZ3VyZWRLZXl9YDtcclxuICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRSZXBvcnRDb2x1bW4oY29sdW1uczogVGFibGVDb2x1bW48YW55PltdLCBwYWdlSW5mbzogUGFnZUluZm8pOiBDb2x1bW5EZWZbXSB7XHJcbiAgICAgICAgbGV0IGNvbHVtbkRlZjogQ29sdW1uRGVmW10gPSBbXTtcclxuXHJcbiAgICAgICAgICBjb2x1bW5zLmZpbHRlcih4ID0+ICFFWENMVURFRF9SRVBPUlRfQ09MVU1OUy5pbmNsdWRlcyh4LnR5cGUpKS5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubGFiZWxLZXkoYyxwYWdlSW5mbykpO1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNHcm91cCA9IHBhZ2VJbmZvLnN1cHBvcnRHcm91cGluZ0luRXhwb3J0ID9cclxuICAgICAgICAgICAgICBjLmdyb3VwLnRyaW0oKSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGMuZ3JvdXApIDogJyAnIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKGMudHlwZSA9PT0gJ3dvcmtmbG93U3RhdHVzJykge1xyXG4gICAgICAgICAgICAgIHRyYW5zTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnd29ya2Zsb3dTdGF0dXMnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKGMucmVwb3J0VmlzaWJsZSA9PT0gdHJ1ZSkgfHwgKGMudmlzaWJsZSA9PT0gdHJ1ZSAmJiBjLnJlcG9ydFZpc2libGUgIT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbkRlZi5wdXNoKG5ldyBDb2x1bW5EZWYoYywgaW5kZXgsIHRyYW5zTGFiZWwsIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXREZWZhdWx0TGFuZygpLHRyYW5zR3JvdXApKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb2x1bW5EZWY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBiYXNlNjRUb0FycmF5QnVmZmVyKGJhc2U2NDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYmluYXJ5U3RyaW5nID0gd2luZG93LmF0b2IoYmFzZTY0KTsgLy8gQ29tbWVudCB0aGlzIGlmIG5vdCB1c2luZyBiYXNlNjRcclxuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpO1xyXG4gICAgICAgIHJldHVybiBieXRlcy5tYXAoKGJ5dGUsIGkpID0+IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFJlcG9ydFJlcXVlc3QoY29sdW1uczogVGFibGVDb2x1bW48YW55PltdLCB0aXRsZTogc3RyaW5nIHwgc3RyaW5nW10sIGZpbHRlclJlcXVlc3Q6IEZpbHRlclJlcXVlc3QsIHJlcG9ydFR5cGU6IGFueSwgcGFnZUluZm86IFBhZ2VJbmZvLCBzZWFyY2hTdHI6IHN0cmluZyAsb3JpZW50YXRpb249J1BPUlRSQUlUJyk6IFJlcG9ydFJlcXVlc3Qge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZiA9IHRoaXMuYnVpbGRSZXBvcnRDb2x1bW4oY29sdW1ucywgcGFnZUluZm8pO1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydFJlcXVlc3QgPSBuZXcgUmVwb3J0UmVxdWVzdCh7XHJcbiAgICAgICAgICAgIGRhdGFzZXQ6IFtdLCBmaWx0ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbkRlZixcclxuICAgICAgICAgICAgLy8gc2Vzc2lvbklkOiB0aGlzLnRvcFBhbmVsLnVzZXJTZXNzaW9uKCkuc2Vzc2lvbklkLFxyXG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuY29uZmlnLmdldEF1dGhUb2tlbigpLFxyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGl0bGUpLFxyXG4gICAgICAgICAgICBwcmVmTGFuZzogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldERlZmF1bHRMYW5nKCksXHJcbiAgICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgIHNlYXJjaFN0cjogc2VhcmNoU3RyLFxyXG4gICAgICAgICAgICBmaWx0ZXJSZXF1ZXN0OiBmaWx0ZXJSZXF1ZXN0LFxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb259KTtcclxuICAgICAgICByZXR1cm4gcmVwb3J0UmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb29rdXBJdGVtc0J5TXVsdGlGaWx0ZXIobGlzdEl0ZW1zOiBHZXRJdGVtc0xpc3QsIGZpbHRlclJlcXVlc3Q/OiBGaWx0ZXJSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgbGlzdEl0ZW1zLnBhZ2VTaXplID0gMTAwO1xyXG4gICAgICBmaWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gMTAwO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdzZWFyY2hTdHInLCBsaXN0SXRlbXMuc2VhcmNoU3RyKTtcclxuICAgICAgICBsZXQgdXJsID0gYCR7dGhpcy5nZXRBcGlCYXNlUGF0aCgpfS9hcGkvdjEvJHtsaXN0SXRlbXMuYXBpVXJpfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgZmlsdGVyUmVxdWVzdCwgeyBoZWFkZXJzOiB0aGlzLmJ1aWxkU2VjdXJlZEhlYWRlcigpLCBwYXJhbXM6IHBhcmFtc30pLnBpcGUoXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IG9mKGVyci5tZXNzYWdlIHx8IGVycikpKTtcclxuICAgIH1cclxuICAgIGdldExvb2t1cEl0ZW1zQnlGaWx0ZXIobGlzdEl0ZW1zOiBHZXRJdGVtc0xpc3QsIGNhc2NhZGVkSWQ/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGxpc3RJdGVtcy5wYWdlU2l6ZSA9IDUwMDtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnc2VhcmNoU3RyJywgbGlzdEl0ZW1zLnNlYXJjaFN0cik7XHJcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuZ2V0QXBpQmFzZVBhdGgoKX0vYXBpL3YxLyR7bGlzdEl0ZW1zLmFwaVVyaX1gO1xyXG4gICAgICAgIGlmIChjYXNjYWRlZElkKSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCArIGAvJHtjYXNjYWRlZElkfWBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGxpc3RJdGVtcyx7IGhlYWRlcnM6IHRoaXMuYnVpbGRTZWN1cmVkSGVhZGVyKCl9KS5waXBlKFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiBvZihlcnIubWVzc2FnZSB8fCBlcnIpKSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBkb3dubG9hZFJlcG9ydChyZXBvcnRSZXF1ZXN0OiBSZXBvcnRSZXF1ZXN0LCBwYWdlQXBpUGF0aCA6IHN0cmluZywgcmVhZHlQYXRoPyA6IGJvb2xlYW4gKSB7XHJcbiAgICAgIGNvbnN0IHMgPSByZWFkeVBhdGggPT09IHRydWUgPyBgL2FwaS92MSR7cGFnZUFwaVBhdGh9YCA6IGAvYXBpL3YxJHtwYWdlQXBpUGF0aH0vZXh0cmFjdEFuZERvd25sb2FkTGlzdFJlcG9ydGA7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxSZXNwb25zZUVudmVsb3A+KHRoaXMuZ2V0QXBpQmFzZVBhdGgoKSArIHMsIHJlcG9ydFJlcXVlc3QsIHtoZWFkZXJzOiB0aGlzLmJ1aWxkU2VjdXJlZEhlYWRlcigpfSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAocmVzcDpSZXNwb25zZUVudmVsb3ApID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3AuYm9keSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BQYW5lbE1lc3NhZ2UkLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTbmFja01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcG9ydC5kb3dubG9hZC5zdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiByZXBvcnRSZXF1ZXN0LnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiByZXBvcnRSZXF1ZXN0LnJlcG9ydFR5cGU/LnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gcmVwb3J0UmVxdWVzdC50aXRsZSArIFwiLlwiICsgcmVwb3J0UmVxdWVzdC5yZXBvcnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3RoaXMuYmFzZTY0VG9BcnJheUJ1ZmZlcihyZXNwLmJvZHkpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1zU2F2ZUJsb2IoYmxvYiwgZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCBIVE1MNSBkb3dubG9hZCBhdHRyaWJ1dGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudG9wUGFuZWxNZXNzYWdlJC5uZXh0KG5ldyBTbmFja01lc3NhZ2UoJ3JlcG9ydC5kb3dubG9hZC5mYWlsZWQnLCBmYWxzZSwgJ2Vycm9yJykpOyAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEFwaUJhc2VQYXRoKCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRCYXNlQXBpKCk7XHJcbiAgICB9XHJcblxyXG4gIGRvQWN0aW9uV2l0aEF0dGFjaG1lbnRzKHJlcXVlc3Q6IERvQWN0aW9uUmVxdWVzdCwgcGFyYW0yOiBhbnlbXSwgcGFnZUluZm86IFBhZ2VJbmZvKSB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEFwaUJhc2VQYXRoKCl9L2FwaS92MSR7cGFnZUluZm8uYXBpVXJpfS9kb0FjdGlvbldpdGhBdHRhY2htZW50c2A7XHJcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm1EYXRhLnNldCgnZG9BY3Rpb25SZXF1ZXN0JywgbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHJlcXVlc3QpXSwge1xyXG4gICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgfSkpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHRoaXMuYnVpbGRGb3JtU2VjdXJlZEhlYWRlcigpIH0pLnBpcGUoXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBvZihlcnJvci5lcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICB9XHJcbiAgZG9BY3Rpb25XaXRoQXR0YWNobWVudChyZXF1ZXN0OiBEb0FjdGlvblJlcXVlc3QsIGZpbGU6IEZpbGUsIHBhZ2VJbmZvOiBQYWdlSW5mbykge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRBcGlCYXNlUGF0aCgpfS9hcGkvdjEke3BhZ2VJbmZvLmFwaVVyaX0vZG9BY3Rpb25XaXRoQXR0YWNobWVudHNgO1xyXG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcblxyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlcycsIGZpbGUpO1xyXG4gICAgZm9ybURhdGEuc2V0KCdkb0FjdGlvblJlcXVlc3QnLCBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocmVxdWVzdCldLCB7XHJcbiAgICAgIHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odXJsLCBmb3JtRGF0YSwge1xyXG4gICAgICBoZWFkZXJzOiB0aGlzLmJ1aWxkRm9ybVNlY3VyZWRIZWFkZXIoKVxyXG4gICAgfSkucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBlcnJvciBpbnRvIGEgZmFrZSBzdWNjZXNzLWxpa2UgcmVzcG9uc2VcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IuZXJyb3IpOyAvLyBUaGlzIHdpbGwgbm93IGJlIHBhc3NlZCB0byBgbmV4dGAgaW4gc3Vic2NyaWJlKClcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBlbmNyeXB0KG1lc3NhZ2U6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VjcmV0c01hbmFnZXIuZW5jcnlwdFNlY3JldChtZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIGRlY3J5cHQoc2VjcmV0OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnNlY3JldHNNYW5hZ2VyLmRlY3J5cHRTZWNyZXQoc2VjcmV0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb25maXJtYXRpb24oKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWN0aW9uQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHthY2NlcHRBY3Rpb25MYWJlbDogJ2FjY2VwdCcscmVqZWN0QWN0aW9uTGFiZWw6J3JldHVybicsIHdhcm5pbmdNc2c6ICdjb25maXJtYXRpb25fbWVzc2FnZSd9LFxyXG4gICAgICB3aWR0aDogJzYwMHB4JyxcclxuICAgICAgaGVpZ2h0OiAnYXV0bydcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICAgIGludGVyZmFjZSBOYXZpZ2F0b3Ige1xyXG4gICAgICAgIG1zU2F2ZUJsb2I6IChibG9iT3JCYXNlNjQ6IEJsb2IgfCBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpID0+IHZvaWRcclxuICAgIH1cclxufVxyXG4iXX0=