@huntsman-cancer-institute/navigation 15.0.3 → 16.0.1

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.
Files changed (46) hide show
  1. package/components/badge.component.d.ts +1 -1
  2. package/components/brand-nav.component.d.ts +1 -1
  3. package/components/div-nav.component.d.ts +1 -1
  4. package/components/li-dd-nav.component.d.ts +1 -1
  5. package/components/li-exp-nav.component.d.ts +1 -1
  6. package/components/li-nav.component.d.ts +1 -1
  7. package/components/nav.component.d.ts +1 -1
  8. package/components/search-list/search-list-controller.component.d.ts +1 -1
  9. package/components/search-list/search-list.component.d.ts +1 -1
  10. package/components/search-tree/search-tree-controller.component.d.ts +1 -1
  11. package/components/search-tree/search-tree.component.d.ts +2 -2
  12. package/components/template.component.d.ts +1 -1
  13. package/components/ul-nav.component.d.ts +1 -1
  14. package/directives/top-margin.directive.d.ts +1 -1
  15. package/{esm2020 → esm2022}/components/badge.component.mjs +6 -6
  16. package/{esm2020 → esm2022}/components/brand-nav.component.mjs +6 -6
  17. package/{esm2020 → esm2022}/components/div-nav.component.mjs +6 -6
  18. package/{esm2020 → esm2022}/components/li-dd-nav.component.mjs +6 -6
  19. package/{esm2020 → esm2022}/components/li-exp-nav.component.mjs +6 -6
  20. package/{esm2020 → esm2022}/components/li-nav.component.mjs +6 -6
  21. package/{esm2020 → esm2022}/components/nav.component.mjs +5 -5
  22. package/{esm2020 → esm2022}/components/search-list/search-list-controller.component.mjs +7 -7
  23. package/{esm2020 → esm2022}/components/search-list/search-list.component.mjs +7 -7
  24. package/{esm2020 → esm2022}/components/search-tree/search-tree-controller.component.mjs +6 -6
  25. package/{esm2020 → esm2022}/components/search-tree/search-tree.component.mjs +8 -8
  26. package/{esm2020 → esm2022}/components/template.component.mjs +6 -6
  27. package/{esm2020 → esm2022}/components/ul-nav.component.mjs +6 -6
  28. package/{esm2020 → esm2022}/directives/top-margin.directive.mjs +4 -4
  29. package/{esm2020 → esm2022}/impl/app-footer.component.mjs +8 -8
  30. package/{esm2020 → esm2022}/impl/app-header.component.mjs +8 -8
  31. package/{esm2020 → esm2022}/impl/sidebar.component.mjs +8 -8
  32. package/{esm2020 → esm2022}/navigation.module.mjs +67 -67
  33. package/{esm2020 → esm2022}/services/navigation-global.service.mjs +4 -4
  34. package/{esm2020 → esm2022}/services/navigation.service.mjs +4 -4
  35. package/{fesm2020 → fesm2022}/huntsman-cancer-institute-navigation.mjs +163 -163
  36. package/{fesm2020 → fesm2022}/huntsman-cancer-institute-navigation.mjs.map +1 -1
  37. package/impl/app-footer.component.d.ts +1 -1
  38. package/impl/app-header.component.d.ts +1 -1
  39. package/impl/sidebar.component.d.ts +1 -1
  40. package/navigation.module.d.ts +1 -1
  41. package/package.json +17 -21
  42. package/fesm2015/huntsman-cancer-institute-navigation.mjs +0 -6366
  43. package/fesm2015/huntsman-cancer-institute-navigation.mjs.map +0 -1
  44. /package/{esm2020 → esm2022}/components/search-list/row-group.mjs +0 -0
  45. /package/{esm2020 → esm2022}/huntsman-cancer-institute-navigation.mjs +0 -0
  46. /package/{esm2020 → esm2022}/index.mjs +0 -0
@@ -614,9 +614,8 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
614
614
  }
615
615
  }
616
616
  }
617
- };
618
- SearchListControllerComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SearchListControllerComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationGlobalService }, { token: i2.NavigationService, optional: true }, { token: i3.HttpClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
619
- SearchListControllerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SearchListControllerComponent, selector: "hci-search-list-controller", inputs: { showTitle: "showTitle", fields: "fields", basicSearch: "basicSearch", advancedSearch: "advancedSearch", filterByAllowedFields: "filterByAllowedFields", quickSearchFields: "quickSearchFields", advancedSearchFields: "advancedSearchFields", sortByAllowedFields: "sortByAllowedFields", sorts: "sorts", showQuickSearchOptions: "showQuickSearchOptions", showAdvancedSearchOptions: "showAdvancedSearchOptions", searchTypeArray: "searchTypeArray", searchType: "searchType", searchTypeSelected: "searchTypeSelected", basicSearchHeader: "basicSearchHeader" }, outputs: { searchListChange: "searchListChange" }, host: { listeners: { "document:click": "documentClick($event,$event.target)" } }, exportAs: ["searchListControllerComponent"], usesInheritance: true, ngImport: i0, template: `
617
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchListControllerComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationGlobalService }, { token: i2.NavigationService, optional: true }, { token: i3.HttpClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
618
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SearchListControllerComponent, selector: "hci-search-list-controller", inputs: { showTitle: "showTitle", fields: "fields", basicSearch: "basicSearch", advancedSearch: "advancedSearch", filterByAllowedFields: "filterByAllowedFields", quickSearchFields: "quickSearchFields", advancedSearchFields: "advancedSearchFields", sortByAllowedFields: "sortByAllowedFields", sorts: "sorts", showQuickSearchOptions: "showQuickSearchOptions", showAdvancedSearchOptions: "showAdvancedSearchOptions", searchTypeArray: "searchTypeArray", searchType: "searchType", searchTypeSelected: "searchTypeSelected", basicSearchHeader: "basicSearchHeader" }, outputs: { searchListChange: "searchListChange" }, host: { listeners: { "document:click": "documentClick($event,$event.target)" } }, exportAs: ["searchListControllerComponent"], usesInheritance: true, ngImport: i0, template: `
620
619
  <div id="search-title" class="d-flex flex-column">
621
620
  <div *ngIf="showTitle" class="d-flex pl-2">
622
621
  <div *ngIf="showBackButton" class="mr-auto ml-1 backButton">
@@ -952,7 +951,8 @@ SearchListControllerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "1
952
951
  </mat-button-toggle-group>
953
952
  </div>
954
953
  </div>
955
- `, isInline: true, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6DA9C7,#3D7A99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:lightgray}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-chevron-double-left{color:#fff}.svg-inline--fa fa-chevron-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i6.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i6.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i6.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "component", type: i6.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }] });
954
+ `, isInline: true, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6da9c7,#3d7a99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:#d3d3d3}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-chevron-double-left{color:#fff}.svg-inline--fa fa-chevron-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i6.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i6.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i6.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i6.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i6.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }] }); }
955
+ };
956
956
  SearchListControllerComponent = __decorate([
957
957
  ComponentType("SearchListControllerComponent"),
958
958
  __metadata("design:paramtypes", [ElementRef,
@@ -964,7 +964,7 @@ SearchListControllerComponent = __decorate([
964
964
  ChangeDetectorRef])
965
965
  ], SearchListControllerComponent);
966
966
  export { SearchListControllerComponent };
967
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SearchListControllerComponent, decorators: [{
967
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchListControllerComponent, decorators: [{
968
968
  type: Component,
969
969
  args: [{ selector: "hci-search-list-controller", exportAs: "searchListControllerComponent", template: `
970
970
  <div id="search-title" class="d-flex flex-column">
@@ -1302,7 +1302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1302
1302
  </mat-button-toggle-group>
1303
1303
  </div>
1304
1304
  </div>
1305
- `, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6DA9C7,#3D7A99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:lightgray}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-chevron-double-left{color:#fff}.svg-inline--fa fa-chevron-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}\n"] }]
1305
+ `, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6da9c7,#3d7a99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:#d3d3d3}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-chevron-double-left{color:#fff}.svg-inline--fa fa-chevron-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}\n"] }]
1306
1306
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i1.NavigationGlobalService }, { type: i2.NavigationService, decorators: [{
1307
1307
  type: Optional
1308
1308
  }] }, { type: i3.HttpClient }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { showTitle: [{
@@ -1341,4 +1341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1341
1341
  type: HostListener,
1342
1342
  args: ["document:click", ["$event", "$event.target"]]
1343
1343
  }] } });
1344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRS9ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFaEQ7Ozs7R0FJRztBQW1kSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUEwRDdELFlBQ0UsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsUUFBa0MsRUFDbEMsdUJBQWdELEVBQ3BDLGlCQUFvQyxFQUN4QyxJQUFnQixFQUN4QixpQkFBb0M7UUFFcEMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFF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QXNCO3NCQUE5QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBc21CUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7SGNpRmlsdGVyRHRvLCBIY2lTb3J0RHRvfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaGNpLW5nLWdyaWQtZHRvXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQge05hdkNvbXBvbmVudH0gZnJvbSBcIi4uL25hdi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25HbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi1nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzZWFyY2ggbGlzdCBjb250cm9sbGVyIHJlbmRlcnMgYXMgYSBoZWFkZXIgdG8gb25lIG9yIG1vcmUgc2VhcmNoIGxpc3RzLiAgT25seSBvbmUgc2VhcmNoIGxpc3QgY2FuIGJlIHNob3duIGF0IGEgdGltZS5cclxuICogVGhlIGNvbnRyb2xsZXIgZmVhdHVyZXMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIGZpbHRlcmluZyBhbmQgc29ydGluZy4gIFdpdGhvdXQgdGhlIGNvbnRyb2xsZXIsIHRoZSBzZWFyY2ggbGlzdCBjYW4gZXhpc3QsXHJcbiAqIGJ1dCBpdCBjYW4gb25seSBoYW5kbGUgcGFnaW5nIGludGVybmFsbHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50VHlwZShcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIpXHJcbkBDb21wb25lbnQoXHJcbiAge1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLXNlYXJjaC1saXN0LWNvbnRyb2xsZXJcIixcclxuICAgIGV4cG9ydEFzOiBcInNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgYFxyXG4gICAgICAgIHNlbGVjdCB7XHJcbiAgICAgICAgICBwYWRkaW5nOiAuMjVlbTtcclxuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBlbTtcclxuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xyXG4gICAgICAgICAgYm9yZGVyOiAwO1xyXG4gICAgICAgICAgY29sb3I6ICM4QTk0OTk7XHJcbiAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsb3NlYWJsZSB7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDAuMXB4IHNvbGlkICM1QjYyNjY7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IC41cmVtICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBjb2xvcjogIzhBOTQ5OTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1vcHRpb25zIHtcclxuICAgICAgICAgIC8qd2lkdGg6IDY1dnc7Ki9cclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLWJ1dHRvbiB7XHJcbiAgICAgICAgICB3aWR0aDogMzAlO1xyXG4gICAgICAgICAgaGVpZ2h0OiAycmVtO1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCM2REE5QzcsICMzRDdBOTkpO1xyXG4gICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmdsb2JhbC1zZWFyY2gge1xyXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xyXG4gICAgICAgICAgYm9yZGVyOiAwLjA0ZW0gc29saWQgIzcyN2I4MDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC50YWItdGl0bGUtY2xhc3Mge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIGhlaWdodDogNTBweDtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JheTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC50YWItcGFuZSB7XHJcbiAgICAgICAgICB3aWR0aDogbWluLWNvbnRlbnQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtY29udGVudC1ib2R5IHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYmFzaWMtc2VhcmNoIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWQtc2VhcmNoIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLW9wdGlvbnMuZXhwYW5kZWQge1xyXG4gICAgICAgICAgaGVpZ2h0OiBmaXQtY29udGVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5jbGFzc2lmaWNhdGlvbi1oZWFkZXIge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5idXR0b24ge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5hbGlnbkJ0biB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFkdmFuY2VkU2VhcmNoLWFsaWduQnRuIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZGl2aWRlciB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFkdmFuY2VkU2VhcmNoLXNjcm9sbCB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJhY2tCdXR0b24gLmZhLWNoZXZyb24tZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN2Zy1pbmxpbmUtLWZhIGZhLWNoZXZyb24tZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtaXRlbSB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtaWNvbiB7XHJcbiAgICAgICAgICB3aWR0aDogMS41cmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtdGV4dDpob3ZlciB7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaGNpLXdoaXRlIHtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJzZWFyY2gtdGl0bGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaXRsZVwiIGNsYXNzPVwiZC1mbGV4IHBsLTJcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCIgY2xhc3M9XCJtci1hdXRvIG1sLTEgYmFja0J1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImJhY2tCdXR0b25DbGlja2VkKClcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaGNpLXdoaXRlIGZhcyBmYS1jaGV2cm9uLWRvdWJsZS1sZWZ0XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge3t0aXRsZX19XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvIG1yLTJcIiAoY2xpY2spPVwidG9nZ2xlU2hvd09wdGlvbnMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvZ1wiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtb3B0aW9uc1wiIFtjbGFzcy5leHBhbmRlZF09XCJzaG93T3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUb2dnbGVPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci1jb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYXJkLWhlYWRlci1idXR0b24gYnRuIGNsb3NlYWJsZVwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXNcIiBjYXJkLWhlYWRlci10ZXh0PjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkaXNhYmxlTG9jYWxGaWx0ZXJpbmc7IGVsc2UgZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuYXYgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBbKGFjdGl2ZUlkKV09XCJhY3RpdmVUYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIxXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+QkFTSUMgU0VBUkNIPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhpcy5iYXNpY1NlYXJjaEhlYWRlcn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgYm91bmRGaWx0ZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdpbnB1dCcgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYVwiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJpLWJ0bi1jYW5jZWwgcmktYnRuLWNhbmNlbC1kaXJ0eVwiIChjbGljayk9XCJzZXR1cEZpbHRlcnMoZmFsc2UpXCI+Q0xFQVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5TRUFSQ0hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjJcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWR2YW5jZWRTZWFyY2hGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPkFEVkFOQ0VEIFNFQVJDSDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkU2VhcmNoLXNjcm9sbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFyYW0gb2YgdGhpcy5hZHZhbmNlZFNlYXJjaDsgaW5kZXggYXMgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1jbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFyYW0uaGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFkdmFuY2VkLXNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHRoaXMucGFyYW0uZmllbGRzOyBpbmRleCBhcyBrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdjaGVja2JveCcgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3hlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdkcm9wZG93bicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLmZpZWxkLnZhbHVlVVJMO2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHRoaXMuZmllbGQudmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB0aGlzLmZpZWxkLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiPnt7dmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwibXlQaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIm15UGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImZhXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjbXlQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImFkdmFuY2VkLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmktYnRuLWNhbmNlbCByaS1idG4tY2FuY2VsLWRpcnR5XCIgKGNsaWNrKT1cInNldHVwRmlsdGVycyhmYWxzZSlcIj5DTEVBUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJpLWJ0bi1zYXZlXCIgW25nQ2xhc3NdPVwieydyaS1idG4tc2F2ZS1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkIFwiIChjbGljayk9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCI+U0VBUkNIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25hdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuYXYgbmdiTmF2ICNuYXYxPVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwiYWN0aXZlVGFiMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjFcIiAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+RklMVEVSPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGJvdW5kRmlsdGVyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2Ryb3Bkb3duJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkc1tpXSAmJiBmaWVsZHNbaV0udmFsdWVzICYmIGZpZWxkc1tpXS52YWx1ZXNbMF0uZGlzcGxheTtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwibW0vZGQveXl5eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiZmFcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyaS1idG4tY2FuY2VsIHJpLWJ0bi1jYW5jZWwtZGlydHlcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKHRydWUpXCI+UkVTRVRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIj5GSUxURVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjJcIiAqbmdJZj1cInNvcnRCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPlNPUlRJTkc8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzb3J0RmllbGQgb2Ygc29ydEJ5QWxsb3dlZEZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBzb3J0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU29ydChzb3J0RmllbGQpICYmIGlzU29ydEFzYyhzb3J0RmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOmlzRmlyc3RTb3J0KHNvcnRGaWVsZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEgZmEtYXJyb3ctY2lyY2xlLXVwIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU29ydChzb3J0RmllbGQpICYmICFpc1NvcnRBc2Moc29ydEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzppc0ZpcnN0U29ydChzb3J0RmllbGQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhIGZhLWFycm93LWNpcmNsZS1kb3duIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtdGV4dFwiIChjbGljayk9XCJzZXRTb3J0KCRldmVudCwgc29ydEZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShzb3J0RmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGggc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXYxXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTEgZ2xvYmFsLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtYm94XCIgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzaG93UXVpY2tTZWFyY2hPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlYXJjaFR5cGVcIiAoY2hhbmdlKT1cInNlbGVjdFNlYXJjaFR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaWRlbnRpZmllclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDBweDsgYm9yZGVyLWNvbG9yOiBibGFjazsgXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VhcmNoVHlwZSBvZiBzZWFyY2hUeXBlQXJyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoVHlwZX19XHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGwtMSBwci0xIHNlYXJjaC1idXR0b25cIiAoY2xpY2spPVwic2VhcmNoQnV0dG9uQ2xpY2tlZCgpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB4LWF1dG9cIiAqbmdJZj1cImhhc1ZhbGlkRmlsdGVycygpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjbGVhckZpbHRlcihmaWx0ZXIpXCIgY2xhc3M9XCJkLWZsZXggcGlsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2ZpbHRlci5maWVsZH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlIGZhLXhzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hMaXN0cy5sZW5ndGggPiAxXCIgY2xhc3M9XCJkLWZsZXggeC1oaWRkZW4gbGlzdC10b2dnbGVcIj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFtuZ01vZGVsXT1cInNlbGVjdGVkU2VhcmNoTGlzdFwiIChuZ01vZGVsQ2hhbmdlKT1cInNldFNlbGVjdGVkU2VhcmNoTGlzdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0Zvcj1cImxldCBzZWFyY2hMaXN0IG9mIHNlYXJjaExpc3RzXCIgbWF0LXJhaXNlZC1idXR0b24tdG9nZ2xlIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlYXJjaExpc3R9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQgZXh0ZW5kcyBOYXZDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmllbGRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaDogYW55ID0ge307XHJcbiAgQElucHV0KCkgYWR2YW5jZWRTZWFyY2g6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGZpbHRlckJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBxdWlja1NlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBhZHZhbmNlZFNlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzb3J0QnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNvcnRzOiBIY2lTb3J0RHRvW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93UXVpY2tTZWFyY2hPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0FkdmFuY2VkU2VhcmNoT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVTZWxlY3RlZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaEhlYWRlcjogc3RyaW5nID0gXCJcIjtcclxuICBAT3V0cHV0KCkgc2VhcmNoTGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgYWN0aXZlVGFiID0gMTtcclxuXHJcbiAgYWN0aXZlVGFiMSA9IDE7XHJcblxyXG4gIGJvdW5kRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICB1cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcblxyXG4gIGZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBhZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBzb3J0c1N1YmplY3Q6IFN1YmplY3Q8SGNpU29ydER0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpU29ydER0b1tdPihbXSk7XHJcblxyXG4gIGdsb2JhbFNlYXJjaDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QmFja0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlYXJjaExpc3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIGJhY2tCdXR0b25TdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhZHZhbmNlZFNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHBlcmZvcm1lZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRCYXNpY1NlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBkaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBmYWxzZTtcclxuXHJcbiAgYWxsb3dTZWFyY2hTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgc2VhcmNoQWxsb3dlZFN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhbGxvd1RvZ2dsZVN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICB0b2dnbGVTaG93U3ViamVjdCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBjb2dXaGVlbENsaWNrZWRTdWJqZWN0JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcbiAgYWxsb3dUb2dnbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dUb2dnbGVPcHRpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBuYXZpZ2F0aW9uR2xvYmFsU2VydmljZTogTmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvR2xvYmFsU2VhcmNoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvLyBTZW5kIGEgbWVzc2FnZSB3aXRoIHNlYXJjaC10ZXh0XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJJbiBTZWFyY2hMaXN0Q29udHJvbGxlciBlbnRlciB3YXMgZGV0ZWN0ZWRcIik7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nU3ViamVjdC5uZXh0KHNlYXJjaFN0cmluZyk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnV0dG9uQ2xpY2tlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nID09PSBmYWxzZSkge1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2ggIT09IHNlYXJjaFN0cmluZykge1xyXG4gICAgICAgIGlmICghc2VhcmNoU3RyaW5nIHx8IHNlYXJjaFN0cmluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQgPSAoZmlsdGVyRmllbGQpID8gZmlsdGVyRmllbGQgKyBcIiBvciBcIiArIGZpZWxkIDogZmllbGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW25ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHNlYXJjaFN0cmluZywgdW5kZWZpbmVkLCBcIkxcIiwgdHJ1ZSldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQnV0dG9uQ2xpY2tlZCgpIHtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsb3dTZWFyY2hTdWJqZWN0JC5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gXCJhbGxvd1NlYXJjaFwiKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd1NlYXJjaCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJwcmV2ZW50U2VhcmNoXCIpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dTZWFyY2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaEFsbG93ZWRTdWJqZWN0JC5uZXh0KHRoaXMuYWxsb3dTZWFyY2gpO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbG93U2VhcmNoKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nU3ViamVjdC5uZXh0KHRoaXMuZ2xvYmFsU2VhcmNoKTtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRmllbGQ6IHN0cmluZztcclxuICAgICAgICAgIGlmICh0aGlzLnF1aWNrU2VhcmNoRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nbG9iYWxTZWFyY2gsIHVuZGVmaW5lZCwgXCJMXCIsIHRydWUpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRTZWFyY2hTdWJqZWN0Lm5leHQoXCJzZWFyY2hQZXJmb3JtZWRcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRTZWFyY2hMaXN0KHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCA9IHNlbGVjdGVkU2VhcmNoTGlzdDtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICAgIHRoaXMuc2VhcmNoTGlzdENoYW5nZS5lbWl0KHNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTZWFyY2hUeXBlKCkge1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcInNlbGVjdFNlYXJjaFR5cGVcIik7XHJcbiAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICB9XHJcblxyXG4gIGFkZFNlYXJjaExpc3QodGl0bGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudC5hZGRTZWFyY2hMaXN0OiBcIiArIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGl0bGUgJiYgdGhpcy5zZWFyY2hMaXN0cy5pbmRleE9mKHRpdGxlKSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hMaXN0cy5wdXNoKHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hMaXN0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3QgPSB0aXRsZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY29uZmlnIHdpdGggb3B0aW9ucyBhbmQgcmUtZmV0Y2hlcyBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidXBkYXRlQ29uZmlnXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZywgY29uZmlnKTtcclxuXHJcbiAgICAgIGlmIChjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucXVpY2tTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLnF1aWNrU2VhcmNoRmllbGRzID0gY29uZmlnLnF1aWNrU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRmllbGRzID0gY29uZmlnLmFkdmFuY2VkU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc29ydEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5zb3J0QnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucyA9IGNvbmZpZy5zaG93UXVpY2tTZWFyY2hPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlQXJyYXkgPSBjb25maWcuc2VhcmNoVHlwZUFycmF5O1xyXG4gICAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVBcnJheVt0aGlzLnNlYXJjaFR5cGVBcnJheS5maW5kSW5kZXgoeCA9PiB4ID09IGNvbmZpZy5zZWFyY2hUeXBlKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlQXJyYXlbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IGNvbmZpZy5zZWxlY3RlZFNlYXJjaFN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaExpc3RDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UgPSBjb25maWcuc2VhcmNoTGlzdENoYW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dUaXRsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VGl0bGUgPSBjb25maWcuc2hvd1RpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd0JhY2tCdXR0b24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSBjb25maWcuc2hvd0JhY2tCdXR0b247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5iYXNpY1NlYXJjaEhlYWRlciA9IGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWVsZHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZmllbGRzID0gY29uZmlnLmZpZWxkcztcclxuICAgICAgICBpZiAodGhpcy5maWVsZHMpIHtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZVVSTCAmJiAhZmllbGQudmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSB2YWx1ZSBVUkwgZm9yIHRoZSBmaWVsZCBhbmQgd2lsbCBwb3B1bGF0ZSB0aGUgdmFsdWVzIG5vd1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVVSTChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaCA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaDtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqO1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udmFsdWVVUkwgJiYgIXRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tVVJMKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvcnRCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8odGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzWzBdKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldHVwRmlsdGVycygpO1xyXG4gICAgc3VwZXIudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBvYmplY3RzIGFmdGVyIG1ha2luZyBhIGh0dHAgY2FsbCB0byB0aGUgdmFsdWVVUkwgb2YgdGhlIGZpZWxkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gZmllbGRcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XHJcbiAgICovXHJcbiAgZ2V0VmFsdWVzRnJvbVVSTChmaWVsZDogYW55KSB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICB1cmwgPSBmaWVsZC52YWx1ZVVSTDtcclxuICAgIHRoaXMuaHR0cC5nZXQodXJsKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInZhbHVlcyBjb21pbmcgYmFjayBmcm9tXCIgKyBmaWVsZC52YWx1ZVVSTCk7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzOiBhbnlbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1Zyh2YWx1ZXMpO1xyXG4gICAgICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmaWVsZC52YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgICAgIC8vU29ydCB0aGUgdmFsdWVzIG9mIHRoZSBkcm9wIGRvd24gbGlzdHMgYmVmaW5yZVxyXG4gICAgICAgICAgICB2YWx1ZXMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhLmRpc3BsYXkgPCBiLmRpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHZhbHVlcyBmb3IgVVJMXCIgKyB0aGlzLmdldEZpZWxkRGlzcGxheShmaWVsZCkpO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBkaXNwbGF5IHByb3BlcnR5IG9mIHRoZSBmaWVsZCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSwgdHJ5IGNvbnZlcnRpbmcgY2FtZWwgY2FzZSB0byB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG5cclxuXHJcbiAgZ2V0RmllbGREaXNwbGF5KGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vdGhpcy5iYXNpY1NlYXJjaC5maWVsZHNcclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkLmRpc3BsYXk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vYWR2YW5jZWRTZWFyY2ggZmllbGQgZGlzcGxheVxyXG4gICAgbGV0IGk7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgajtcclxuICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5kaXNwbGF5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXNwbGF5OiBzdHJpbmcgPSBmaWVsZE5hbWUucmVwbGFjZSgvKFtBLVpdKS9nLCBcIiAkMVwiKTtcclxuICAgIHJldHVybiBkaXNwbGF5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZGlzcGxheS5zbGljZSgxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdHlwZSBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgaWYgaXQgZXhpc3RzLiBEZWZhdWx0cyB0byBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0RmllbGRUeXBlKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vdGhpcy5iYXNpY1NlYXJjaC5maWVsZHNcclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJpbnB1dFwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGZpbHRlcnMgYmFzZWQgdXBvbiBhdmFpbGFibGUgZmllbGRzIGZvciBmaWx0ZXJpbmcuXHJcbiAgICovXHJcbiAgc2V0dXBGaWx0ZXJzKGFwcGx5OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuYm91bmRGaWx0ZXJzID0gW107XHJcbiAgICB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgZmlsdGVyRmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgdGhpcy5ib3VuZEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGZpbHRlckZpZWxkLCBcInN0cmluZ1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJMXCIsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBmaWx0ZXJGaWVsZCBvZiB0aGlzLmFkdmFuY2VkU2VhcmNoRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGZpbHRlckZpZWxkLCBcInN0cmluZ1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJMXCIsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXBwbHkpIHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgdGhpcy5hcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGZpbHRlciBpcyB2YWxpZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGhhc1ZhbGlkRmlsdGVycygpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyLnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgZmlsdGVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXHJcbiAgICogQHBhcmFtIHtIY2lGaWx0ZXJEdG99IGZpbHRlclxyXG4gICAqL1xyXG4gIHNldEZpbHRlcih2YWx1ZTogc3RyaW5nLCBmaWx0ZXI6IEhjaUZpbHRlckR0byk6IHZvaWQge1xyXG4gICAgZmlsdGVyLnZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZmwgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgICAgIGlmIChmbC52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHZhbGlkIGZpbHRlcnMgdG8gdmFsaWQgYW5kIGNhbGwgZGF0YS5cclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZXZlbnQ/OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgZXZlbnQudHlwZSAmJiBldmVudC50eXBlICE9PSBcImNsaWNrXCIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnZhbHVlICYmIGZpbHRlci52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLmJvdW5kRmlsdGVycyk7XHJcbiAgICAvL1NldHRpbmcgYSBmbGFnIG9uIGJ1dHRvbkNsaWNrIGV2ZW50LlxyXG4gICAgaWYgKGV2ZW50ICYmIChldmVudC5rZXlDb2RlID09PSAxMyB8fCBldmVudC50eXBlID09PSBcImNsaWNrXCIpKSB7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkQmFzaWNTZWFyY2hTdWJqZWN0Lm5leHQoXCJiYXNpY1NlYXJjaENsaWNrZWRcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB2YWxpZCBhZHZhbmNlZCBzZWFyY2ggZmlsdGVycyB0byB2YWxpZCBhbmQgY2FsbCBkYXRhLlxyXG4gICAqL1xyXG5cclxuICBhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycyhldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzID0gW107XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgZXZlbnQudHlwZSAmJiBldmVudC50eXBlICE9PSBcImNsaWNrXCIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzKSB7XHJcbiAgICAgIGZpbHRlci52YWxpZCA9IChmaWx0ZXIudmFsdWUgJiYgZmlsdGVyLnZhbHVlLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXIuZmllbGQsIFwic3RyaW5nXCIsIGZpbHRlci52YWx1ZSwgdW5kZWZpbmVkLCBcIkxcIiwgZmFsc2UpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMpO1xyXG5cclxuICAgIGlmIChldmVudCAmJiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZEFkdmFuY2VkU2VhcmNoU3ViamVjdC5uZXh0KFwiYWR2YW5jZWRTZWFyY2hDbGlja2VkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgZmlsdGVyIGZpZWxkcyBhbmQgbWFrZSBpbnZhbGlkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIY2lGaWx0ZXJEdG99IGZpbHRlclxyXG4gICAqL1xyXG4gIGNsZWFyRmlsdGVyKGZpbHRlcjogSGNpRmlsdGVyRHRvKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmRGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmJvdW5kRmlsdGVyc1tpXS5maWVsZCA9PT0gZmlsdGVyLmZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5ib3VuZEZpbHRlcnNbaV0uc2V0VmFsdWUodW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLmJvdW5kRmlsdGVyc1tpXS5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy5ib3VuZEZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVE9ETzogSWYgc29ydCBpbiBncm91cCwgcmVzZXQgZ3JvdXAgZGF0YSwgbm90IG92ZXJhbGwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXHJcbiAgICovXHJcbiAgc2V0U29ydChldmVudDogTW91c2VFdmVudCwgZmllbGQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ydHMgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gZmllbGQpIHtcclxuICAgICAgLy8gUmVndWxhciBiZWhhdmlvclxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNvcnRzICYmIHRoaXMuc29ydHMubGVuZ3RoID09PSAxICYmICFldmVudC5jdHJsS2V5ICYmIHRoaXMuc29ydHNbMF0uZmllbGQgIT09IGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuc29ydHMgPSBbXTtcclxuICAgIH0gZWxzZSBpZiAoIWV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8oZmllbGQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBleGlzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgaWYgKHNvcnQuZmllbGQgPT09IGZpZWxkKSB7XHJcbiAgICAgICAgICBzb3J0LmFzYyA9ICFzb3J0LmFzYztcclxuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKGZpZWxkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc29ydHNTdWJqZWN0Lm5leHQodGhpcy5zb3J0cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyB1c2VkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzU29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICBpZiAoc29ydC5maWVsZCA9PT0gc29ydEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyBhc2NlbmRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNTb3J0QXNjKHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgIGlmIChzb3J0LmZpZWxkID09PSBzb3J0RmllbGQpIHtcclxuICAgICAgICByZXR1cm4gc29ydC5hc2M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBmaWVsZCBpcyB0aGUgZmlyc3Qgc29ydCBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc0ZpcnN0U29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zb3J0cyB8fCB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gc29ydEZpZWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBvcHRpb25zIHBvcG91dC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICB0b2dnbGVTaG93T3B0aW9ucyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb2dXaGVlbENsaWNrZWRTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFsbG93VG9nZ2xlU3ViamVjdCQuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IFwiYWxsb3dUb2dnbGVcIikge1xyXG4gICAgICAgIHRoaXMuYWxsb3dUb2dnbGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1RvZ2dsZU9wdGlvbnMgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWwgPT09IFwicHJldmVudFRvZ2dsZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93VG9nZ2xlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dUb2dnbGVPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd09wdGlvbnMgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtb3B0aW9uc1wiKS5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICYmICghKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJidXR0b24uY2FyZC1oZWFkZXItYnV0dG9uLmJ0bi5jbG9zZWFibGVcIikuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB0aXRsZTogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlYXJjaC10aXRsZVwiKTtcclxuXHJcbiAgICBsZXQgb3B0aW9uczogSFRNTEVsZW1lbnQgPSB0aXRsZS5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1vcHRpb25zXCIpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3B0aW9ucywgXCJsZWZ0XCIsICh0aXRsZS5vZmZzZXRMZWZ0ICsgdGl0bGUub2Zmc2V0V2lkdGgpICsgXCJweFwiKTtcclxuICAgIGlmICghb3B0aW9ucy5jbG9zZXN0KFwiLmRyb3Bkb3duLW1lbnVcIikpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcHRpb25zLCBcInRvcFwiLCB0aXRsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBcInB4XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2hvd09wdGlvbnMgPSAhdGhpcy5zaG93T3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgbWF0Y2ggYSBIY2lGaWx0ZXJEdG8gYnkgY29tcGFyaW5nIGEgcHJvdmlkZWQgZmllbGQtbmFtZVxyXG4gICAqL1xyXG4gIGdldEZpbHRlckZvckZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycy5maW5kKHggPT4geC5maWVsZCA9PT0gZmllbGROYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbmVyIGZvciBiYWNrIGJ1dHRvblxyXG4gICAqL1xyXG5cclxuICBiYWNrQnV0dG9uQ2xpY2tlZCgpIHtcclxuICAgIHRoaXMuYmFja0J1dHRvblN1YmplY3QubmV4dCh0aGlzLmJhY2tCdXR0b25TdWJqZWN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3IgZG9jdW1lbnQgY2xpY2tzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIiwgXCIkZXZlbnQudGFyZ2V0XCJdKVxyXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLmFsbG93VG9nZ2xlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLmluY2x1ZGVzKFwiY2xvc2VhYmxlXCIpKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNob3dPcHRpb25zICYmICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlYXJjaC10aXRsZVwiKS5jb250YWlucyh0YXJnZXQpXHJcbiAgICAgICAgICAmJiAhdGFyZ2V0LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLmluY2x1ZGVzKFwibWF0XCIpKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudG9nZ2xlU2hvd1N1YmplY3QkLm5leHQodGhpcy5zaG93T3B0aW9ucyk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
1344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRS9ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFaEQ7Ozs7R0FJRztBQW1kSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUEwRDdELFlBQ0UsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsUUFBa0MsRUFDbEMsdUJBQWdELEVBQ3BDLGlCQUFvQyxFQUN4QyxJQUFnQixFQUN4QixpQkFBb0M7UUFFcEMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFF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QXNCO3NCQUE5QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBc21CUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7SGNpRmlsdGVyRHRvLCBIY2lTb3J0RHRvfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaGNpLW5nLWdyaWQtZHRvXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQge05hdkNvbXBvbmVudH0gZnJvbSBcIi4uL25hdi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25HbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi1nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzZWFyY2ggbGlzdCBjb250cm9sbGVyIHJlbmRlcnMgYXMgYSBoZWFkZXIgdG8gb25lIG9yIG1vcmUgc2VhcmNoIGxpc3RzLiAgT25seSBvbmUgc2VhcmNoIGxpc3QgY2FuIGJlIHNob3duIGF0IGEgdGltZS5cclxuICogVGhlIGNvbnRyb2xsZXIgZmVhdHVyZXMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIGZpbHRlcmluZyBhbmQgc29ydGluZy4gIFdpdGhvdXQgdGhlIGNvbnRyb2xsZXIsIHRoZSBzZWFyY2ggbGlzdCBjYW4gZXhpc3QsXHJcbiAqIGJ1dCBpdCBjYW4gb25seSBoYW5kbGUgcGFnaW5nIGludGVybmFsbHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50VHlwZShcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIpXHJcbkBDb21wb25lbnQoXHJcbiAge1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLXNlYXJjaC1saXN0LWNvbnRyb2xsZXJcIixcclxuICAgIGV4cG9ydEFzOiBcInNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgYFxyXG4gICAgICAgIHNlbGVjdCB7XHJcbiAgICAgICAgICBwYWRkaW5nOiAuMjVlbTtcclxuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBlbTtcclxuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xyXG4gICAgICAgICAgYm9yZGVyOiAwO1xyXG4gICAgICAgICAgY29sb3I6ICM4QTk0OTk7XHJcbiAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsb3NlYWJsZSB7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDAuMXB4IHNvbGlkICM1QjYyNjY7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IC41cmVtICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBjb2xvcjogIzhBOTQ5OTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1vcHRpb25zIHtcclxuICAgICAgICAgIC8qd2lkdGg6IDY1dnc7Ki9cclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLWJ1dHRvbiB7XHJcbiAgICAgICAgICB3aWR0aDogMzAlO1xyXG4gICAgICAgICAgaGVpZ2h0OiAycmVtO1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCM2REE5QzcsICMzRDdBOTkpO1xyXG4gICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmdsb2JhbC1zZWFyY2gge1xyXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xyXG4gICAgICAgICAgYm9yZGVyOiAwLjA0ZW0gc29saWQgIzcyN2I4MDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC50YWItdGl0bGUtY2xhc3Mge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIGhlaWdodDogNTBweDtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JheTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC50YWItcGFuZSB7XHJcbiAgICAgICAgICB3aWR0aDogbWluLWNvbnRlbnQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtY29udGVudC1ib2R5IHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYmFzaWMtc2VhcmNoIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWQtc2VhcmNoIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLW9wdGlvbnMuZXhwYW5kZWQge1xyXG4gICAgICAgICAgaGVpZ2h0OiBmaXQtY29udGVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5jbGFzc2lmaWNhdGlvbi1oZWFkZXIge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5idXR0b24ge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5hbGlnbkJ0biB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFkdmFuY2VkU2VhcmNoLWFsaWduQnRuIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZGl2aWRlciB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFkdmFuY2VkU2VhcmNoLXNjcm9sbCB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJhY2tCdXR0b24gLmZhLWNoZXZyb24tZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN2Zy1pbmxpbmUtLWZhIGZhLWNoZXZyb24tZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtaXRlbSB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtaWNvbiB7XHJcbiAgICAgICAgICB3aWR0aDogMS41cmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtdGV4dDpob3ZlciB7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaGNpLXdoaXRlIHtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJzZWFyY2gtdGl0bGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaXRsZVwiIGNsYXNzPVwiZC1mbGV4IHBsLTJcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCIgY2xhc3M9XCJtci1hdXRvIG1sLTEgYmFja0J1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImJhY2tCdXR0b25DbGlja2VkKClcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaGNpLXdoaXRlIGZhcyBmYS1jaGV2cm9uLWRvdWJsZS1sZWZ0XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge3t0aXRsZX19XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvIG1yLTJcIiAoY2xpY2spPVwidG9nZ2xlU2hvd09wdGlvbnMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvZ1wiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtb3B0aW9uc1wiIFtjbGFzcy5leHBhbmRlZF09XCJzaG93T3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUb2dnbGVPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci1jb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYXJkLWhlYWRlci1idXR0b24gYnRuIGNsb3NlYWJsZVwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXNcIiBjYXJkLWhlYWRlci10ZXh0PjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkaXNhYmxlTG9jYWxGaWx0ZXJpbmc7IGVsc2UgZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuYXYgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBbKGFjdGl2ZUlkKV09XCJhY3RpdmVUYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIxXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+QkFTSUMgU0VBUkNIPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhpcy5iYXNpY1NlYXJjaEhlYWRlcn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgYm91bmRGaWx0ZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdpbnB1dCcgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYVwiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJpLWJ0bi1jYW5jZWwgcmktYnRuLWNhbmNlbC1kaXJ0eVwiIChjbGljayk9XCJzZXR1cEZpbHRlcnMoZmFsc2UpXCI+Q0xFQVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5TRUFSQ0hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjJcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWR2YW5jZWRTZWFyY2hGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPkFEVkFOQ0VEIFNFQVJDSDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkU2VhcmNoLXNjcm9sbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFyYW0gb2YgdGhpcy5hZHZhbmNlZFNlYXJjaDsgaW5kZXggYXMgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1jbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFyYW0uaGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFkdmFuY2VkLXNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHRoaXMucGFyYW0uZmllbGRzOyBpbmRleCBhcyBrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdjaGVja2JveCcgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3hlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdkcm9wZG93bicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLmZpZWxkLnZhbHVlVVJMO2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHRoaXMuZmllbGQudmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB0aGlzLmZpZWxkLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiPnt7dmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwibXlQaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIm15UGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImZhXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjbXlQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImFkdmFuY2VkLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmktYnRuLWNhbmNlbCByaS1idG4tY2FuY2VsLWRpcnR5XCIgKGNsaWNrKT1cInNldHVwRmlsdGVycyhmYWxzZSlcIj5DTEVBUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJpLWJ0bi1zYXZlXCIgW25nQ2xhc3NdPVwieydyaS1idG4tc2F2ZS1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkIFwiIChjbGljayk9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCI+U0VBUkNIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25hdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuYXYgbmdiTmF2ICNuYXYxPVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwiYWN0aXZlVGFiMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjFcIiAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+RklMVEVSPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGJvdW5kRmlsdGVyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2Ryb3Bkb3duJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkc1tpXSAmJiBmaWVsZHNbaV0udmFsdWVzICYmIGZpZWxkc1tpXS52YWx1ZXNbMF0uZGlzcGxheTtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwibW0vZGQveXl5eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiZmFcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyaS1idG4tY2FuY2VsIHJpLWJ0bi1jYW5jZWwtZGlydHlcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKHRydWUpXCI+UkVTRVRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIj5GSUxURVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjJcIiAqbmdJZj1cInNvcnRCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPlNPUlRJTkc8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzb3J0RmllbGQgb2Ygc29ydEJ5QWxsb3dlZEZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBzb3J0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU29ydChzb3J0RmllbGQpICYmIGlzU29ydEFzYyhzb3J0RmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOmlzRmlyc3RTb3J0KHNvcnRGaWVsZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEgZmEtYXJyb3ctY2lyY2xlLXVwIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU29ydChzb3J0RmllbGQpICYmICFpc1NvcnRBc2Moc29ydEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzppc0ZpcnN0U29ydChzb3J0RmllbGQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhIGZhLWFycm93LWNpcmNsZS1kb3duIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtdGV4dFwiIChjbGljayk9XCJzZXRTb3J0KCRldmVudCwgc29ydEZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShzb3J0RmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGggc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXYxXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTEgZ2xvYmFsLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtYm94XCIgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzaG93UXVpY2tTZWFyY2hPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlYXJjaFR5cGVcIiAoY2hhbmdlKT1cInNlbGVjdFNlYXJjaFR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaWRlbnRpZmllclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDBweDsgYm9yZGVyLWNvbG9yOiBibGFjazsgXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VhcmNoVHlwZSBvZiBzZWFyY2hUeXBlQXJyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoVHlwZX19XHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGwtMSBwci0xIHNlYXJjaC1idXR0b25cIiAoY2xpY2spPVwic2VhcmNoQnV0dG9uQ2xpY2tlZCgpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB4LWF1dG9cIiAqbmdJZj1cImhhc1ZhbGlkRmlsdGVycygpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjbGVhckZpbHRlcihmaWx0ZXIpXCIgY2xhc3M9XCJkLWZsZXggcGlsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2ZpbHRlci5maWVsZH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlIGZhLXhzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hMaXN0cy5sZW5ndGggPiAxXCIgY2xhc3M9XCJkLWZsZXggeC1oaWRkZW4gbGlzdC10b2dnbGVcIj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFtuZ01vZGVsXT1cInNlbGVjdGVkU2VhcmNoTGlzdFwiIChuZ01vZGVsQ2hhbmdlKT1cInNldFNlbGVjdGVkU2VhcmNoTGlzdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0Zvcj1cImxldCBzZWFyY2hMaXN0IG9mIHNlYXJjaExpc3RzXCIgbWF0LXJhaXNlZC1idXR0b24tdG9nZ2xlIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlYXJjaExpc3R9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQgZXh0ZW5kcyBOYXZDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmllbGRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaDogYW55ID0ge307XHJcbiAgQElucHV0KCkgYWR2YW5jZWRTZWFyY2g6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGZpbHRlckJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBxdWlja1NlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBhZHZhbmNlZFNlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzb3J0QnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNvcnRzOiBIY2lTb3J0RHRvW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93UXVpY2tTZWFyY2hPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0FkdmFuY2VkU2VhcmNoT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVTZWxlY3RlZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaEhlYWRlcjogc3RyaW5nID0gXCJcIjtcclxuICBAT3V0cHV0KCkgc2VhcmNoTGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgYWN0aXZlVGFiID0gMTtcclxuXHJcbiAgYWN0aXZlVGFiMSA9IDE7XHJcblxyXG4gIGJvdW5kRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICB1cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcblxyXG4gIGZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBhZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBzb3J0c1N1YmplY3Q6IFN1YmplY3Q8SGNpU29ydER0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpU29ydER0b1tdPihbXSk7XHJcblxyXG4gIGdsb2JhbFNlYXJjaDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QmFja0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlYXJjaExpc3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIGJhY2tCdXR0b25TdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhZHZhbmNlZFNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHBlcmZvcm1lZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRCYXNpY1NlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBkaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBmYWxzZTtcclxuXHJcbiAgYWxsb3dTZWFyY2hTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgc2VhcmNoQWxsb3dlZFN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhbGxvd1RvZ2dsZVN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICB0b2dnbGVTaG93U3ViamVjdCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBjb2dXaGVlbENsaWNrZWRTdWJqZWN0JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcbiAgYWxsb3dUb2dnbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dUb2dnbGVPcHRpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBuYXZpZ2F0aW9uR2xvYmFsU2VydmljZTogTmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvR2xvYmFsU2VhcmNoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvLyBTZW5kIGEgbWVzc2FnZSB3aXRoIHNlYXJjaC10ZXh0XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJJbiBTZWFyY2hMaXN0Q29udHJvbGxlciBlbnRlciB3YXMgZGV0ZWN0ZWRcIik7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nU3ViamVjdC5uZXh0KHNlYXJjaFN0cmluZyk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnV0dG9uQ2xpY2tlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nID09PSBmYWxzZSkge1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2ggIT09IHNlYXJjaFN0cmluZykge1xyXG4gICAgICAgIGlmICghc2VhcmNoU3RyaW5nIHx8IHNlYXJjaFN0cmluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQgPSAoZmlsdGVyRmllbGQpID8gZmlsdGVyRmllbGQgKyBcIiBvciBcIiArIGZpZWxkIDogZmllbGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW25ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHNlYXJjaFN0cmluZywgdW5kZWZpbmVkLCBcIkxcIiwgdHJ1ZSldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQnV0dG9uQ2xpY2tlZCgpIHtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsb3dTZWFyY2hTdWJqZWN0JC5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gXCJhbGxvd1NlYXJjaFwiKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd1NlYXJjaCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJwcmV2ZW50U2VhcmNoXCIpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dTZWFyY2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaEFsbG93ZWRTdWJqZWN0JC5uZXh0KHRoaXMuYWxsb3dTZWFyY2gpO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbG93U2VhcmNoKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nU3ViamVjdC5uZXh0KHRoaXMuZ2xvYmFsU2VhcmNoKTtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRmllbGQ6IHN0cmluZztcclxuICAgICAgICAgIGlmICh0aGlzLnF1aWNrU2VhcmNoRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nbG9iYWxTZWFyY2gsIHVuZGVmaW5lZCwgXCJMXCIsIHRydWUpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRTZWFyY2hTdWJqZWN0Lm5leHQoXCJzZWFyY2hQZXJmb3JtZWRcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRTZWFyY2hMaXN0KHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCA9IHNlbGVjdGVkU2VhcmNoTGlzdDtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICAgIHRoaXMuc2VhcmNoTGlzdENoYW5nZS5lbWl0KHNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTZWFyY2hUeXBlKCkge1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcInNlbGVjdFNlYXJjaFR5cGVcIik7XHJcbiAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICB9XHJcblxyXG4gIGFkZFNlYXJjaExpc3QodGl0bGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudC5hZGRTZWFyY2hMaXN0OiBcIiArIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGl0bGUgJiYgdGhpcy5zZWFyY2hMaXN0cy5pbmRleE9mKHRpdGxlKSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hMaXN0cy5wdXNoKHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hMaXN0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3QgPSB0aXRsZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY29uZmlnIHdpdGggb3B0aW9ucyBhbmQgcmUtZmV0Y2hlcyBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidXBkYXRlQ29uZmlnXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZywgY29uZmlnKTtcclxuXHJcbiAgICAgIGlmIChjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucXVpY2tTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLnF1aWNrU2VhcmNoRmllbGRzID0gY29uZmlnLnF1aWNrU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRmllbGRzID0gY29uZmlnLmFkdmFuY2VkU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc29ydEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5zb3J0QnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucyA9IGNvbmZpZy5zaG93UXVpY2tTZWFyY2hPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlQXJyYXkgPSBjb25maWcuc2VhcmNoVHlwZUFycmF5O1xyXG4gICAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVBcnJheVt0aGlzLnNlYXJjaFR5cGVBcnJheS5maW5kSW5kZXgoeCA9PiB4ID09IGNvbmZpZy5zZWFyY2hUeXBlKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlQXJyYXlbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IGNvbmZpZy5zZWxlY3RlZFNlYXJjaFN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaExpc3RDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UgPSBjb25maWcuc2VhcmNoTGlzdENoYW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dUaXRsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VGl0bGUgPSBjb25maWcuc2hvd1RpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd0JhY2tCdXR0b24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSBjb25maWcuc2hvd0JhY2tCdXR0b247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5iYXNpY1NlYXJjaEhlYWRlciA9IGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWVsZHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZmllbGRzID0gY29uZmlnLmZpZWxkcztcclxuICAgICAgICBpZiAodGhpcy5maWVsZHMpIHtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZVVSTCAmJiAhZmllbGQudmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSB2YWx1ZSBVUkwgZm9yIHRoZSBmaWVsZCBhbmQgd2lsbCBwb3B1bGF0ZSB0aGUgdmFsdWVzIG5vd1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVVSTChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaCA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaDtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqO1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udmFsdWVVUkwgJiYgIXRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tVVJMKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvcnRCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8odGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzWzBdKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldHVwRmlsdGVycygpO1xyXG4gICAgc3VwZXIudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBvYmplY3RzIGFmdGVyIG1ha2luZyBhIGh0dHAgY2FsbCB0byB0aGUgdmFsdWVVUkwgb2YgdGhlIGZpZWxkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gZmllbGRcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XHJcbiAgICovXHJcbiAgZ2V0VmFsdWVzRnJvbVVSTChmaWVsZDogYW55KSB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICB1cmwgPSBmaWVsZC52YWx1ZVVSTDtcclxuICAgIHRoaXMuaHR0cC5nZXQodXJsKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInZhbHVlcyBjb21pbmcgYmFjayBmcm9tXCIgKyBmaWVsZC52YWx1ZVVSTCk7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzOiBhbnlbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1Zyh2YWx1ZXMpO1xyXG4gICAgICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmaWVsZC52YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgICAgIC8vU29ydCB0aGUgdmFsdWVzIG9mIHRoZSBkcm9wIGRvd24gbGlzdHMgYmVmaW5yZVxyXG4gICAgICAgICAgICB2YWx1ZXMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhLmRpc3BsYXkgPCBiLmRpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHZhbHVlcyBmb3IgVVJMXCIgKyB0aGlzLmdldEZpZWxkRGlzcGxheShmaWVsZCkpO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBkaXNwbGF5IHByb3BlcnR5IG9mIHRoZSBmaWVsZCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSwgdHJ5IGNvbnZlcnRpbmcgY2FtZWwgY2FzZSB0byB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG5cclxuXHJcbiAgZ2V0RmllbGREaXNwbGF5KGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vdGhpcy5iYXNpY1NlYXJjaC5maWVsZHNcclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkLmRpc3BsYXk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vYWR2YW5jZWRTZWFyY2ggZmllbGQgZGlzcGxheVxyXG4gICAgbGV0IGk7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgajtcclxuICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5kaXNwbGF5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXNwbGF5OiBzdHJpbmcgPSBmaWVsZE5hbWUucmVwbGFjZSgvKFtBLVpdKS9nLCBcIiAkMVwiKTtcclxuICAgIHJldHVybiBkaXNwbGF5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZGlzcGxheS5zbGljZSgxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdHlwZSBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgaWYgaXQgZXhpc3RzLiBEZWZhdWx0cyB0byBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0RmllbGRUeXBlKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vdGhpcy5iYXNpY1NlYXJjaC5maWVsZHNcclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJpbnB1dFwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGZpbHRlcnMgYmFzZWQgdXBvbiBhdmFpbGFibGUgZmllbGRzIGZvciBmaWx0ZXJpbmcuXHJcbiAgICovXHJcbiAgc2V0dXBGaWx0ZXJzKGFwcGx5OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuYm91bmRGaWx0ZXJzID0gW107XHJcbiAgICB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgZmlsdGVyRmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgdGhpcy5ib3VuZEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGZpbHRlckZpZWxkLCBcInN0cmluZ1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJMXCIsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBmaWx0ZXJGaWVsZCBvZiB0aGlzLmFkdmFuY2VkU2VhcmNoRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGZpbHRlckZpZWxkLCBcInN0cmluZ1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJMXCIsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXBwbHkpIHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgdGhpcy5hcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGZpbHRlciBpcyB2YWxpZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGhhc1ZhbGlkRmlsdGVycygpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyLnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgZmlsdGVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXHJcbiAgICogQHBhcmFtIHtIY2lGaWx0ZXJEdG99IGZpbHRlclxyXG4gICAqL1xyXG4gIHNldEZpbHRlcih2YWx1ZTogc3RyaW5nLCBmaWx0ZXI6IEhjaUZpbHRlckR0byk6IHZvaWQge1xyXG4gICAgZmlsdGVyLnZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZmwgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgICAgIGlmIChmbC52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHZhbGlkIGZpbHRlcnMgdG8gdmFsaWQgYW5kIGNhbGwgZGF0YS5cclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZXZlbnQ/OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgZXZlbnQudHlwZSAmJiBldmVudC50eXBlICE9PSBcImNsaWNrXCIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnZhbHVlICYmIGZpbHRlci52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLmJvdW5kRmlsdGVycyk7XHJcbiAgICAvL1NldHRpbmcgYSBmbGFnIG9uIGJ1dHRvbkNsaWNrIGV2ZW50LlxyXG4gICAgaWYgKGV2ZW50ICYmIChldmVudC5rZXlDb2RlID09PSAxMyB8fCBldmVudC50eXBlID09PSBcImNsaWNrXCIpKSB7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkQmFzaWNTZWFyY2hTdWJqZWN0Lm5leHQoXCJiYXNpY1NlYXJjaENsaWNrZWRcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB2YWxpZCBhZHZhbmNlZCBzZWFyY2ggZmlsdGVycyB0byB2YWxpZCBhbmQgY2FsbCBkYXRhLlxyXG4gICAqL1xyXG5cclxuICBhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycyhldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzID0gW107XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgZXZlbnQudHlwZSAmJiBldmVudC50eXBlICE9PSBcImNsaWNrXCIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzKSB7XHJcbiAgICAgIGZpbHRlci52YWxpZCA9IChmaWx0ZXIudmFsdWUgJiYgZmlsdGVyLnZhbHVlLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXIuZmllbGQsIFwic3RyaW5nXCIsIGZpbHRlci52YWx1ZSwgdW5kZWZpbmVkLCBcIkxcIiwgZmFsc2UpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMpO1xyXG5cclxuICAgIGlmIChldmVudCAmJiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZEFkdmFuY2VkU2VhcmNoU3ViamVjdC5uZXh0KFwiYWR2YW5jZWRTZWFyY2hDbGlja2VkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgZmlsdGVyIGZpZWxkcyBhbmQgbWFrZSBpbnZhbGlkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIY2lGaWx0ZXJEdG99IGZpbHRlclxyXG4gICAqL1xyXG4gIGNsZWFyRmlsdGVyKGZpbHRlcjogSGNpRmlsdGVyRHRvKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmRGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmJvdW5kRmlsdGVyc1tpXS5maWVsZCA9PT0gZmlsdGVyLmZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5ib3VuZEZpbHRlcnNbaV0uc2V0VmFsdWUodW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLmJvdW5kRmlsdGVyc1tpXS5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy5ib3VuZEZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVE9ETzogSWYgc29ydCBpbiBncm91cCwgcmVzZXQgZ3JvdXAgZGF0YSwgbm90IG92ZXJhbGwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXHJcbiAgICovXHJcbiAgc2V0U29ydChldmVudDogTW91c2VFdmVudCwgZmllbGQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ydHMgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gZmllbGQpIHtcclxuICAgICAgLy8gUmVndWxhciBiZWhhdmlvclxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNvcnRzICYmIHRoaXMuc29ydHMubGVuZ3RoID09PSAxICYmICFldmVudC5jdHJsS2V5ICYmIHRoaXMuc29ydHNbMF0uZmllbGQgIT09IGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuc29ydHMgPSBbXTtcclxuICAgIH0gZWxzZSBpZiAoIWV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8oZmllbGQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBleGlzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgaWYgKHNvcnQuZmllbGQgPT09IGZpZWxkKSB7XHJcbiAgICAgICAgICBzb3J0LmFzYyA9ICFzb3J0LmFzYztcclxuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKGZpZWxkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc29ydHNTdWJqZWN0Lm5leHQodGhpcy5zb3J0cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyB1c2VkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzU29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICBpZiAoc29ydC5maWVsZCA9PT0gc29ydEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyBhc2NlbmRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNTb3J0QXNjKHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgIGlmIChzb3J0LmZpZWxkID09PSBzb3J0RmllbGQpIHtcclxuICAgICAgICByZXR1cm4gc29ydC5hc2M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBmaWVsZCBpcyB0aGUgZmlyc3Qgc29ydCBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc0ZpcnN0U29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zb3J0cyB8fCB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gc29ydEZpZWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBvcHRpb25zIHBvcG91dC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICB0b2dnbGVTaG93T3B0aW9ucyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb2dXaGVlbENsaWNrZWRTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFsbG93VG9nZ2xlU3ViamVjdCQuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IFwiYWxsb3dUb2dnbGVcIikge1xyXG4gICAgICAgIHRoaXMuYWxsb3dUb2dnbGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1RvZ2dsZU9wdGlvbnMgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWwgPT09IFwicHJldmVudFRvZ2dsZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93VG9nZ2xlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dUb2dnbGVPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd09wdGlvbnMgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtb3B0aW9uc1wiKS5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICYmICghKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJidXR0b24uY2FyZC1oZWFkZXItYnV0dG9uLmJ0bi5jbG9zZWFibGVcIikuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB0aXRsZTogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlYXJjaC10aXRsZVwiKTtcclxuXHJcbiAgICBsZXQgb3B0aW9uczogSFRNTEVsZW1lbnQgPSB0aXRsZS5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1vcHRpb25zXCIpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3B0aW9ucywgXCJsZWZ0XCIsICh0aXRsZS5vZmZzZXRMZWZ0ICsgdGl0bGUub2Zmc2V0V2lkdGgpICsgXCJweFwiKTtcclxuICAgIGlmICghb3B0aW9ucy5jbG9zZXN0KFwiLmRyb3Bkb3duLW1lbnVcIikpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcHRpb25zLCBcInRvcFwiLCB0aXRsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBcInB4XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2hvd09wdGlvbnMgPSAhdGhpcy5zaG93T3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgbWF0Y2ggYSBIY2lGaWx0ZXJEdG8gYnkgY29tcGFyaW5nIGEgcHJvdmlkZWQgZmllbGQtbmFtZVxyXG4gICAqL1xyXG4gIGdldEZpbHRlckZvckZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycy5maW5kKHggPT4geC5maWVsZCA9PT0gZmllbGROYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbmVyIGZvciBiYWNrIGJ1dHRvblxyXG4gICAqL1xyXG5cclxuICBiYWNrQnV0dG9uQ2xpY2tlZCgpIHtcclxuICAgIHRoaXMuYmFja0J1dHRvblN1YmplY3QubmV4dCh0aGlzLmJhY2tCdXR0b25TdWJqZWN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3IgZG9jdW1lbnQgY2xpY2tzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIiwgXCIkZXZlbnQudGFyZ2V0XCJdKVxyXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLmFsbG93VG9nZ2xlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLmluY2x1ZGVzKFwiY2xvc2VhYmxlXCIpKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNob3dPcHRpb25zICYmICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlYXJjaC10aXRsZVwiKS5jb250YWlucyh0YXJnZXQpXHJcbiAgICAgICAgICAmJiAhdGFyZ2V0LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLmluY2x1ZGVzKFwibWF0XCIpKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudG9nZ2xlU2hvd1N1YmplY3QkLm5leHQodGhpcy5zaG93T3B0aW9ucyk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==