@norwegian/core-components 6.54.1 → 6.54.2
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.
- package/esm2022/lib/components/airport-select-new/airport-select-dropdown/airport-select-dropdown.component.mjs +3 -9
- package/esm2022/lib/components/airport-select-new/airport-select-new.component.mjs +3 -6
- package/esm2022/lib/components/alert/alert.component.mjs +2 -2
- package/esm2022/lib/components/autocomplete-new/autocomplete-new.component.mjs +2 -2
- package/esm2022/lib/components/checkbox-new/checkbox-new.component.mjs +2 -2
- package/esm2022/lib/components/datepicker-combo-new/datepicker-combo-new.component.mjs +2 -2
- package/esm2022/lib/components/datepicker-new/calendar-new/calendar-new.component.mjs +2 -2
- package/esm2022/lib/components/filter-new/filter-new.component.mjs +3 -5
- package/esm2022/lib/components/micro-button/micro-button.component.mjs +2 -2
- package/esm2022/lib/components/page-header/wallet/wallet.component.mjs +2 -2
- package/esm2022/lib/components/passenger-select-new/passenger-select-new.component.mjs +2 -2
- package/esm2022/lib/components/radio-new/radio-new.component.mjs +2 -2
- package/esm2022/lib/components/slide-toggle-new/slide-toggle-new.component.mjs +2 -2
- package/esm2022/lib/components/spinner/spinner.component.mjs +2 -2
- package/fesm2022/norwegian-core-components.mjs +28 -39
- package/fesm2022/norwegian-core-components.mjs.map +1 -1
- package/lib/components/airport-select-new/airport-select-dropdown/airport-select-dropdown.component.d.ts +0 -1
- package/lib/components/airport-select-new/airport-select-new.component.d.ts +0 -1
- package/lib/components/filter-new/filter-new.component.d.ts +1 -7
- package/package.json +1 -1
|
@@ -83,9 +83,6 @@ export class AirportSelectDropdownComponent extends NasComponentBase {
|
|
|
83
83
|
return `nas-airport-select-dropdown-input-${this.componentId}`;
|
|
84
84
|
}
|
|
85
85
|
get geolocationIcon() {
|
|
86
|
-
if (this.focusOnGeolocation && this.geolocationState !== GeolocationState.denied) {
|
|
87
|
-
return 'geolocation--light';
|
|
88
|
-
}
|
|
89
86
|
if (this.geolocationState === GeolocationState.denied) {
|
|
90
87
|
return 'geolocation--disabled';
|
|
91
88
|
}
|
|
@@ -545,15 +542,12 @@ export class AirportSelectDropdownComponent extends NasComponentBase {
|
|
|
545
542
|
this.focusedAirportIndex = -1;
|
|
546
543
|
this.updateSelected(airport);
|
|
547
544
|
}
|
|
548
|
-
setRemoveIcon() {
|
|
549
|
-
return this.selectedModel ? 'remove--secondary' : 'remove';
|
|
550
|
-
}
|
|
551
545
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: AirportSelectDropdownComponent, deps: [{ token: DOCUMENT }, { token: i1.AirportSelectService }, { token: i2.AirportSelectDropdownService }, { token: i3.GeolocationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
552
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: AirportSelectDropdownComponent, selector: "nas-airport-select-dropdown", inputs: { displayLatestSearches: "displayLatestSearches", displayClosestAirports: "displayClosestAirports", latestSearches: "latestSearches", resultsLabels: "resultsLabels", airportSelectLabel: "airportSelectLabel", airportSelectPlaceholder: "airportSelectPlaceholder", airportSelectIconModifier: "airportSelectIconModifier", keepSelection: "keepSelection", nasFormControlName: "nasFormControlName", nasFormGroup: "nasFormGroup", enableGeolocation: "enableGeolocation", ariaLabelClear: "ariaLabelClear", ariaLabelBackdrop: "ariaLabelBackdrop", isValid: "isValid", invalidText: "invalidText", closestAirports: "closestAirports", airport: "airport", open: "open", airports: "airports" }, outputs: { selected: "selected", openChange: "openChange", focusOnNext: "focusOnNext", focusOnPrevious: "focusOnPrevious", positionChange: "positionChange", clearedSelection: "clearedSelection" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"labelId\"\n [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled'])\">\n <span [nasClass]=\"getClass('label')\">\n <ng-container *ngIf=\"airportSelectLabel; else emptyLabel\">{{airportSelectLabel}}</ng-container>\n <ng-template #emptyLabel> </ng-template>\n </span>\n <input #airportSelect\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\"\n [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"airportSelectPlaceholder\"\n (focus)=\"setOpen()\"\n (mousedown)=\"setOpen()\"\n (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\"\n [(ngModel)]=\"selectedModel\"/>\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"labelId\"\n [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled'])\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\"\n *ngIf=\"airportSelectLabel\">{{airportSelectLabel}}</span>\n <input #airportSelect\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-autocomplete=\"none\"\n [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\"\n [formControlName]=\"nasFormControlName\"\n [placeholder]=\"airportSelectPlaceholder\"\n (mousedown)=\"setOpen()\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [nasClass]=\"getClass('results-wrapper')\"\n [id]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results\n role=\"listbox\"\n *ngIf=\"open\"\n [attr.aria-labelledby]=\"labelId\"\n [nasClass]=\"getClass('results')\">\n <ng-container *ngIf=\"exists(enableGeolocation) && geolocationState !== null && geolocationState !== 0 && isValid\">\n <li role=\"option\">\n <nas-button link\n secondary\n [disabled]=\"geolocationState === 2\"\n [cssStyle]=\"{'height': '66px', 'text-decoration': 'underline', 'display': 'flex', 'justify-content': 'space-between'}\"\n [cssClass]=\"getClass('item', ['geolocation', focusOnGeolocation && geolocationState !== 2 && 'focus', geolocationState === 2 && 'disabled'])\"\n [tabindex]=\"-1\"\n (clickChange)=\"updateCurrentPosition()\"\n (mouseenter)=\"onGeolocationHover(true)\"\n (mouseleave)=\"onGeolocationHover(false)\">\n <span *ngIf=\"geolocationState === 1; else geolocationDenied\"\n [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocation}}</span>\n <ng-template #geolocationDenied>\n <span [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocationDenied}}</span>\n </ng-template>\n <nas-icon [nasClass]=\"getClass('geolocation', 'icon')\"\n [type]=\"geolocationIcon\"></nas-icon>\n </nas-button>\n </li>\n </ng-container>\n <li role=\"separator\"\n [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"latestSearches?.length > 0\n && exists(displayLatestSearches)\n && resultsLabels?.latestSearches\n && isValid\">\n <span>{{resultsLabels?.latestSearches}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayLatestSearches) && isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of latestSearches\"\n [id]=\"getLatestSearchesAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedLatestSearchesAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedLatestSearchesAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedLatestSearchesAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\"\n *ngIf=\"exists(displayClosestAirports)\n && geolocationState !== null\n && geolocationState === 0\n && closestAirports?.length > 0\n && resultsLabels?.closestAirports\n && isValid\"\n [nasClass]=\"getClass('list-section-label')\">\n <span>{{resultsLabels?.closestAirports}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayClosestAirports) && geolocationState === 0 && isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of closestAirports\"\n [id]=\"getClosestAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedClosestAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedClosestAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedClosestAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\"\n [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"displayAllAirportsLabel && resultsLabels?.allAirports && isValid\">\n <span>{{resultsLabels?.allAirports}}</span>\n </li>\n <ng-container *ngIf=\"isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of filteredAirports\"\n [id]=\"getAllAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li *ngIf=\"!isValid\"\n role=\"listitem\">\n <span [nasClass]=\"getClass('name', 'invalid')\">{{invalidText}}</span>\n </li>\n </ul>\n</div>\n<button type=\"button\"\n tabindex=\"0\"\n *ngIf=\"open\"\n [attr.aria-label]=\"ariaLabelBackdrop\"\n [nasClass]=\"getClass('backdrop')\"\n (click)=\"blur()\"></button>", styles: [""], dependencies: [{ 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.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.ButtonComponent, selector: "nas-button", inputs: ["primary", "secondary", "link", "approve", "light", "large", "block", "flex", "compact", "right", "spaceless", "transparent", "href", "trackingvalue", "canContinueOnDisabled", "disabled", "type", "cssClass", "ariaLabel", "cssStyle", "tabindex", "overrideBaseCssClass", "useRouterLink", "id", "target"], outputs: ["clickChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
546
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: AirportSelectDropdownComponent, selector: "nas-airport-select-dropdown", inputs: { displayLatestSearches: "displayLatestSearches", displayClosestAirports: "displayClosestAirports", latestSearches: "latestSearches", resultsLabels: "resultsLabels", airportSelectLabel: "airportSelectLabel", airportSelectPlaceholder: "airportSelectPlaceholder", airportSelectIconModifier: "airportSelectIconModifier", keepSelection: "keepSelection", nasFormControlName: "nasFormControlName", nasFormGroup: "nasFormGroup", enableGeolocation: "enableGeolocation", ariaLabelClear: "ariaLabelClear", ariaLabelBackdrop: "ariaLabelBackdrop", isValid: "isValid", invalidText: "invalidText", closestAirports: "closestAirports", airport: "airport", open: "open", airports: "airports" }, outputs: { selected: "selected", openChange: "openChange", focusOnNext: "focusOnNext", focusOnPrevious: "focusOnPrevious", positionChange: "positionChange", clearedSelection: "clearedSelection" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"labelId\"\n [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled'])\">\n <span [nasClass]=\"getClass('label')\">\n <ng-container *ngIf=\"airportSelectLabel; else emptyLabel\">{{airportSelectLabel}}</ng-container>\n <ng-template #emptyLabel> </ng-template>\n </span>\n <input #airportSelect\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\"\n [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"airportSelectPlaceholder\"\n (focus)=\"setOpen()\"\n (mousedown)=\"setOpen()\"\n (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\"\n [(ngModel)]=\"selectedModel\"/>\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"labelId\"\n [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled'])\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\"\n *ngIf=\"airportSelectLabel\">{{airportSelectLabel}}</span>\n <input #airportSelect\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-autocomplete=\"none\"\n [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\"\n [formControlName]=\"nasFormControlName\"\n [placeholder]=\"airportSelectPlaceholder\"\n (mousedown)=\"setOpen()\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [nasClass]=\"getClass('results-wrapper')\"\n [id]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results\n role=\"listbox\"\n *ngIf=\"open\"\n [attr.aria-labelledby]=\"labelId\"\n [nasClass]=\"getClass('results')\">\n <ng-container *ngIf=\"exists(enableGeolocation) && geolocationState !== null && geolocationState !== 0 && isValid\">\n <li role=\"option\">\n <nas-button link\n secondary\n [disabled]=\"geolocationState === 2\"\n [cssStyle]=\"{'height': '66px', 'text-decoration': 'underline', 'display': 'flex', 'justify-content': 'space-between'}\"\n [cssClass]=\"getClass('item', ['geolocation', focusOnGeolocation && geolocationState !== 2 && 'focus', geolocationState === 2 && 'disabled'])\"\n [tabindex]=\"-1\"\n (clickChange)=\"updateCurrentPosition()\"\n (mouseenter)=\"onGeolocationHover(true)\"\n (mouseleave)=\"onGeolocationHover(false)\">\n <span *ngIf=\"geolocationState === 1; else geolocationDenied\"\n [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocation}}</span>\n <ng-template #geolocationDenied>\n <span [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocationDenied}}</span>\n </ng-template>\n <nas-icon [nasClass]=\"getClass('geolocation', 'icon')\"\n [type]=\"geolocationIcon\"></nas-icon>\n </nas-button>\n </li>\n </ng-container>\n <li role=\"separator\"\n [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"latestSearches?.length > 0\n && exists(displayLatestSearches)\n && resultsLabels?.latestSearches\n && isValid\">\n <span>{{resultsLabels?.latestSearches}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayLatestSearches) && isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of latestSearches\"\n [id]=\"getLatestSearchesAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedLatestSearchesAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedLatestSearchesAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedLatestSearchesAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\"\n *ngIf=\"exists(displayClosestAirports)\n && geolocationState !== null\n && geolocationState === 0\n && closestAirports?.length > 0\n && resultsLabels?.closestAirports\n && isValid\"\n [nasClass]=\"getClass('list-section-label')\">\n <span>{{resultsLabels?.closestAirports}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayClosestAirports) && geolocationState === 0 && isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of closestAirports\"\n [id]=\"getClosestAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedClosestAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedClosestAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedClosestAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\"\n [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"displayAllAirportsLabel && resultsLabels?.allAirports && isValid\">\n <span>{{resultsLabels?.allAirports}}</span>\n </li>\n <ng-container *ngIf=\"isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of filteredAirports\"\n [id]=\"getAllAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li *ngIf=\"!isValid\"\n role=\"listitem\">\n <span [nasClass]=\"getClass('name', 'invalid')\">{{invalidText}}</span>\n </li>\n </ul>\n</div>\n<button type=\"button\"\n tabindex=\"0\"\n *ngIf=\"open\"\n [attr.aria-label]=\"ariaLabelBackdrop\"\n [nasClass]=\"getClass('backdrop')\"\n (click)=\"blur()\"></button>", styles: [""], dependencies: [{ 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.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.ButtonComponent, selector: "nas-button", inputs: ["primary", "secondary", "link", "approve", "light", "large", "block", "flex", "compact", "right", "spaceless", "transparent", "href", "trackingvalue", "canContinueOnDisabled", "disabled", "type", "cssClass", "ariaLabel", "cssStyle", "tabindex", "overrideBaseCssClass", "useRouterLink", "id", "target"], outputs: ["clickChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
553
547
|
}
|
|
554
548
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: AirportSelectDropdownComponent, decorators: [{
|
|
555
549
|
type: Component,
|
|
556
|
-
args: [{ selector: 'nas-airport-select-dropdown', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"labelId\"\n [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled'])\">\n <span [nasClass]=\"getClass('label')\">\n <ng-container *ngIf=\"airportSelectLabel; else emptyLabel\">{{airportSelectLabel}}</ng-container>\n <ng-template #emptyLabel> </ng-template>\n </span>\n <input #airportSelect\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\"\n [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"airportSelectPlaceholder\"\n (focus)=\"setOpen()\"\n (mousedown)=\"setOpen()\"\n (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\"\n [(ngModel)]=\"selectedModel\"/>\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"
|
|
550
|
+
args: [{ selector: 'nas-airport-select-dropdown', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"labelId\"\n [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled'])\">\n <span [nasClass]=\"getClass('label')\">\n <ng-container *ngIf=\"airportSelectLabel; else emptyLabel\">{{airportSelectLabel}}</ng-container>\n <ng-template #emptyLabel> </ng-template>\n </span>\n <input #airportSelect\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\"\n [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"airportSelectPlaceholder\"\n (focus)=\"setOpen()\"\n (mousedown)=\"setOpen()\"\n (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\"\n [(ngModel)]=\"selectedModel\"/>\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"labelId\"\n [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled'])\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\"\n *ngIf=\"airportSelectLabel\">{{airportSelectLabel}}</span>\n <input #airportSelect\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-autocomplete=\"none\"\n [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\"\n [formControlName]=\"nasFormControlName\"\n [placeholder]=\"airportSelectPlaceholder\"\n (mousedown)=\"setOpen()\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [nasClass]=\"getClass('results-wrapper')\"\n [id]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results\n role=\"listbox\"\n *ngIf=\"open\"\n [attr.aria-labelledby]=\"labelId\"\n [nasClass]=\"getClass('results')\">\n <ng-container *ngIf=\"exists(enableGeolocation) && geolocationState !== null && geolocationState !== 0 && isValid\">\n <li role=\"option\">\n <nas-button link\n secondary\n [disabled]=\"geolocationState === 2\"\n [cssStyle]=\"{'height': '66px', 'text-decoration': 'underline', 'display': 'flex', 'justify-content': 'space-between'}\"\n [cssClass]=\"getClass('item', ['geolocation', focusOnGeolocation && geolocationState !== 2 && 'focus', geolocationState === 2 && 'disabled'])\"\n [tabindex]=\"-1\"\n (clickChange)=\"updateCurrentPosition()\"\n (mouseenter)=\"onGeolocationHover(true)\"\n (mouseleave)=\"onGeolocationHover(false)\">\n <span *ngIf=\"geolocationState === 1; else geolocationDenied\"\n [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocation}}</span>\n <ng-template #geolocationDenied>\n <span [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocationDenied}}</span>\n </ng-template>\n <nas-icon [nasClass]=\"getClass('geolocation', 'icon')\"\n [type]=\"geolocationIcon\"></nas-icon>\n </nas-button>\n </li>\n </ng-container>\n <li role=\"separator\"\n [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"latestSearches?.length > 0\n && exists(displayLatestSearches)\n && resultsLabels?.latestSearches\n && isValid\">\n <span>{{resultsLabels?.latestSearches}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayLatestSearches) && isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of latestSearches\"\n [id]=\"getLatestSearchesAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedLatestSearchesAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedLatestSearchesAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedLatestSearchesAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\"\n *ngIf=\"exists(displayClosestAirports)\n && geolocationState !== null\n && geolocationState === 0\n && closestAirports?.length > 0\n && resultsLabels?.closestAirports\n && isValid\"\n [nasClass]=\"getClass('list-section-label')\">\n <span>{{resultsLabels?.closestAirports}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayClosestAirports) && geolocationState === 0 && isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of closestAirports\"\n [id]=\"getClosestAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedClosestAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedClosestAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedClosestAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\"\n [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"displayAllAirportsLabel && resultsLabels?.allAirports && isValid\">\n <span>{{resultsLabels?.allAirports}}</span>\n </li>\n <ng-container *ngIf=\"isValid\">\n <li role=\"option\"\n *ngFor=\"let airport of filteredAirports\"\n [id]=\"getAllAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li *ngIf=\"!isValid\"\n role=\"listitem\">\n <span [nasClass]=\"getClass('name', 'invalid')\">{{invalidText}}</span>\n </li>\n </ul>\n</div>\n<button type=\"button\"\n tabindex=\"0\"\n *ngIf=\"open\"\n [attr.aria-label]=\"ariaLabelBackdrop\"\n [nasClass]=\"getClass('backdrop')\"\n (click)=\"blur()\"></button>" }]
|
|
557
551
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
558
552
|
type: Inject,
|
|
559
553
|
args: [DOCUMENT]
|
|
@@ -614,4 +608,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
|
|
|
614
608
|
}], clearedSelection: [{
|
|
615
609
|
type: Output
|
|
616
610
|
}] } });
|
|
617
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9haXJwb3J0LXNlbGVjdC1uZXcvYWlycG9ydC1zZWxlY3QtZHJvcGRvd24vYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9haXJwb3J0LXNlbGVjdC1uZXcvYWlycG9ydC1zZWxlY3QtZHJvcGRvd24vYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFNekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7Ozs7QUFFN0YsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBUWYsTUFBTSxPQUFPLDhCQUErQixTQUFRLGdCQUFnQjtJQW1DbEUsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxRQUE2QjtRQUMvQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsb0JB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RyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTm9yd2VnaWFuIEFpciBTaHV0dGxlLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBaXJwb3J0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvYWlycG9ydC5tb2RlbCc7XG5pbXBvcnQgeyBSZXN1bHRzTGFiZWxzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcmVzdWx0cy1sYWJlbHMubW9kZWwnO1xuaW1wb3J0IHsgQWlycG9ydFNlbGVjdERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWlycG9ydFNlbGVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9haXJwb3J0LXNlbGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2dlb2xvY2F0aW9uL2dlb2xvY2F0aW9uLXN0YXRlLmVudW0nO1xuXG5sZXQgbmV4dElkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBaXJwb3J0U2VsZWN0RHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBOYXNDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBhaXJwb3J0VmFsdWU6IEFpcnBvcnRNb2RlbDtcbiAgYWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgZm9jdXNlZEFpcnBvcnRJbmRleCA9IC0xO1xuICBmb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlOiBzdHJpbmc7XG4gIGZvY3VzZWRBaXJwb3J0Q29kZTogc3RyaW5nO1xuICBmb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZTogc3RyaW5nO1xuICBmaWx0ZXJlZEFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+ID0gdGhpcy5haXJwb3J0cztcbiAgZGlzcGxheUFsbEFpcnBvcnRzTGFiZWwgPSB0cnVlO1xuICBvcGVuVmFsdWU6IGJvb2xlYW47XG4gIGZvY3VzT25HZW9sb2NhdGlvbjogYm9vbGVhbjtcbiAgZ2VvbG9jYXRpb25TdGF0ZTogR2VvbG9jYXRpb25TdGF0ZSA9IG51bGw7XG5cbiAgQFZpZXdDaGlsZCgnYWlycG9ydFNlbGVjdCcpIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcmVzdWx0czogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBkaXNwbGF5TGF0ZXN0U2VhcmNoZXM/OiBib29sZWFuO1xuICBASW5wdXQoKSBkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzPzogYm9vbGVhbjtcbiAgQElucHV0KCkgbGF0ZXN0U2VhcmNoZXM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIEBJbnB1dCgpIHJlc3VsdHNMYWJlbHM6IFJlc3VsdHNMYWJlbHNNb2RlbDtcbiAgQElucHV0KCkgYWlycG9ydFNlbGVjdExhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFpcnBvcnRTZWxlY3RQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBhaXJwb3J0U2VsZWN0SWNvbk1vZGlmaWVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGtlZXBTZWxlY3Rpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBuYXNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZW5hYmxlR2VvbG9jYXRpb24/OiBib29sZWFuO1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuICBASW5wdXQoKSBhcmlhTGFiZWxCYWNrZHJvcDogc3RyaW5nO1xuICBASW5wdXQoKSBpc1ZhbGlkID0gdHJ1ZTtcbiAgQElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgY2xvc2VzdEFpcnBvcnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBjbG9zZXN0QWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICBpZiAoIWFpcnBvcnRzIHx8ICFhaXJwb3J0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlID0gYWlycG9ydHM7XG4gICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlID0gR2VvbG9jYXRpb25TdGF0ZS5ncmFudGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGFpcnBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydFZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCkge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWlycG9ydFZhbHVlID0gYWlycG9ydDtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBhaXJwb3J0Lm5hbWU7XG4gICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5zZWxlY3RTZXJ2aWNlLmZpbHRlcih0aGlzLmFpcnBvcnRzLCB0aGlzLnNlbGVjdGVkTW9kZWwpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlblZhbHVlO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMub3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmlucHV0U2VsZWN0aW9uVGltZW91dCk7XG4gICAgdGhpcy5vcGVuVmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dFNlbGVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgYWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydHNWYWx1ZTtcbiAgfVxuICBzZXQgYWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICB0aGlzLmFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcbiAgICB0aGlzLmZpbHRlcmVkQWlycG9ydHMgPSB0aGlzLnNlbGVjdFNlcnZpY2UuZmlsdGVyKHRoaXMuYWlycG9ydHMsIHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gIH1cblxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGZvY3VzT25QcmV2aW91cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuICBAT3V0cHV0KCkgY2xlYXJlZFNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXQgc2VsZWN0ZWRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE1vZGVsVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9kZWwobW9kZWw6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlbFZhbHVlID0gbW9kZWw7XG5cbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwIHx8ICF0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gbW9kZWwpIHtcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc3VsdHNJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLXJlc3VsdHMtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXQgbGFiZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLWxhYmVsLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1pbnB1dC0ke3RoaXMuY29tcG9uZW50SWR9YDtcbiAgfVxuXG4gIGdldCBnZW9sb2NhdGlvbkljb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5mb2N1c09uR2VvbG9jYXRpb24gJiYgdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZCkge1xuICAgICAgcmV0dXJuICdnZW9sb2NhdGlvbi0tbGlnaHQnO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZW9sb2NhdGlvblN0YXRlID09PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZCkge1xuICAgICAgcmV0dXJuICdnZW9sb2NhdGlvbi0tZGlzYWJsZWQnO1xuICAgIH1cblxuICAgIHJldHVybiAnZ2VvbG9jYXRpb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRNb2RlbDogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkTW9kZWxWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIGlucHV0U2VsZWN0aW9uVGltZW91dDogYW55O1xuICBwcml2YXRlIGNsb3Nlc3RBaXJwb3J0c1ZhbHVlOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuICBwcml2YXRlIGNvbXBvbmVudElkOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgc2VsZWN0U2VydmljZTogQWlycG9ydFNlbGVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhaXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlOiBBaXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2VvbG9jYXRpb25TZXJ2aWNlOiBHZW9sb2NhdGlvblNlcnZpY2UpIHtcbiAgICBzdXBlcignbmFzLWFpcnBvcnQtc2VsZWN0LW5ldycpO1xuICAgIHRoaXMuY29tcG9uZW50SWQgPSBuZXh0SWQrKztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hcmlhTGFiZWxDbGVhcikge1xuICAgICAgdGhpcy53YXJuTWlzc2luZ0FjY2Vzc2liaWx0eUlucHV0KCdhcmlhTGFiZWxDbGVhcicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsQmFja2Ryb3ApIHtcbiAgICAgIHRoaXMud2Fybk1pc3NpbmdBY2Nlc3NpYmlsdHlJbnB1dCgnYXJpYUxhYmVsQmFja2Ryb3AnKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSB0aGlzLmFpcnBvcnQgPyB0aGlzLmFpcnBvcnQubmFtZSA6ICcnO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUNsb3Nlc3RBaXJwb3J0cykpIHtcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldFN0YXRlKCkuc3Vic2NyaWJlKChzdGF0ZTogR2VvbG9jYXRpb25TdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgPSBzdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IEdlb2xvY2F0aW9uU3RhdGUuZ3JhbnRlZCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZGVsKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQWlycG9ydHMgPSB0aGlzLnNlbGVjdFNlcnZpY2UuZmlsdGVyKHRoaXMuYWlycG9ydHMsIHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwbGF5TGF0ZXN0U2VhcmNoZXMgPSBmYWxzZTtcbiAgICB0aGlzLmRpc3BsYXlDbG9zZXN0QWlycG9ydHMgPSBmYWxzZTtcbiAgICB0aGlzLmRpc3BsYXlBbGxBaXJwb3J0c0xhYmVsID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyZWRBaXJwb3J0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHMuZmluZCh4ID0+IHgubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZGVsKTtcblxuICAgIGlmIChhaXJwb3J0KSB7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB9XG4gIH1cblxuICBnZXRBbGxBaXJwb3J0c0FpcnBvcnRJZChhaXJwb3J0Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1haXJwb3J0LSR7dGhpcy5jb21wb25lbnRJZH0tYWxsLWFpcnBvcnRzLSR7YWlycG9ydENvZGV9YDtcbiAgfVxuXG4gIGdldENsb3Nlc3RBaXJwb3J0c0FpcnBvcnRJZChhaXJwb3J0Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1haXJwb3J0LSR7dGhpcy5jb21wb25lbnRJZH0tY2xvc2VzdC1haXJwb3J0cy0ke2FpcnBvcnRDb2RlfWA7XG4gIH1cblxuICBnZXRMYXRlc3RTZWFyY2hlc0FpcnBvcnRJZChhaXJwb3J0Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1haXJwb3J0LSR7dGhpcy5jb21wb25lbnRJZH0tbGF0ZXN0LXNlYXJjaGVzLSR7YWlycG9ydENvZGV9YDtcbiAgfVxuXG4gIHVwZGF0ZUN1cnJlbnRQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5nZW9sb2NhdGlvblN0YXRlID09PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZFxuICAgICAgfHwgdGhpcy5nZW9sb2NhdGlvblN0YXRlID09PSBHZW9sb2NhdGlvblN0YXRlLnVua25vd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdlb2xvY2F0aW9uU2VydmljZS5nZXRDdXJyZW50UG9zaXRpb24oKS5zdWJzY3JpYmUoKHg6IEdlb2xvY2F0aW9uUG9zaXRpb24pID0+IHtcbiAgICAgIHRoaXMucG9zaXRpb25DaGFuZ2UuZW1pdCh4KTtcbiAgICB9LCAoZXJyb3I6IEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvcikgPT4ge1xuICAgICAgaWYgKGVycm9yLlBFUk1JU1NJT05fREVOSUVEKSB7XG4gICAgICAgIHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSA9IEdlb2xvY2F0aW9uU3RhdGUuZGVuaWVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0T3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uR2VvbG9jYXRpb25Ib3Zlcihob3ZlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChob3ZlciAmJiB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IEdlb2xvY2F0aW9uU3RhdGUuZGVuaWVkKSB7XG4gICAgICB0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYmx1cigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSB0aGlzLmxhc3RTZWxlY3RlZE1vZGVsO1xuICAgIH1cblxuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kZWwgPT09IHRoaXMubGFzdFNlbGVjdGVkTW9kZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJlZEFpcnBvcnRzKSB7XG4gICAgICAgIGxldCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzLmZpbmQoeCA9PiB4Lm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gICAgICAgIGlmICghYWlycG9ydCkge1xuICAgICAgICAgIGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZChhaXJwb3J0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZCh7XG4gICAgICAgIGFpcnBvcnROYW1lOiAnJyxcbiAgICAgICAgY29kZTogJycsXG4gICAgICAgIGNvdW50cnlOYW1lOiAnJyxcbiAgICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgbm9ybWFsaXplZEFpcnBvcnROYW1lOiAnJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKCk6IHZvaWQge1xuICAgIGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwIHx8ICF0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kZWwpIHtcbiAgICAgICAgdGhpcy5yZXNldEZpbHRlcigpO1xuICAgICAgICBpc0VtcHR5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRBaXJwb3J0cyA9IHRoaXMuc2VsZWN0U2VydmljZS5maWx0ZXIodGhpcy5haXJwb3J0cywgdGhpcy5zZWxlY3RlZE1vZGVsKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF0uY29kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG4gICAgICAgIGlzRW1wdHkgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5zZWxlY3RTZXJ2aWNlLmZpbHRlcih0aGlzLmFpcnBvcnRzLCBjb250cm9sLnZhbHVlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF0uY29kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlMYXRlc3RTZWFyY2hlcyA9IGlzRW1wdHk7XG4gICAgdGhpcy5kaXNwbGF5Q2xvc2VzdEFpcnBvcnRzID0gaXNFbXB0eTtcbiAgICB0aGlzLmRpc3BsYXlBbGxBaXJwb3J0c0xhYmVsID0gaXNFbXB0eTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLmtlZXBTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkTW9kZWwgPSB0aGlzLmFpcnBvcnQubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSAnJztcblxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoe1xuICAgICAgbmFtZTogJycsXG4gICAgICBjb3VudHJ5TmFtZTogJycsXG4gICAgICBjb2RlOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICAgIGFpcnBvcnROYW1lOiAnJyxcbiAgICAgIG5vcm1hbGl6ZWRBaXJwb3J0TmFtZTogJydcbiAgICB9KTtcblxuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSAnJztcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5haXJwb3J0cztcblxuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5TGF0ZXN0U2VhcmNoZXMgPSB0cnVlO1xuICAgIHRoaXMuZGlzcGxheUNsb3Nlc3RBaXJwb3J0cyA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5QWxsQWlycG9ydHNMYWJlbCA9IHRydWU7XG4gICAgdGhpcy5jbGVhcmVkU2VsZWN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIGZvY3VzRG93bigpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNMYXRlc3RTZWFyY2hlcyA9IHRoaXMuYWlycG9ydFNlbGVjdERyb3Bkb3duU2VydmljZVxuICAgICAgLmhhc0xhdGVzdFNlYXJjaGVzKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSwgdGhpcy5sYXRlc3RTZWFyY2hlcyk7XG5cbiAgICBjb25zdCBoYXNDbG9zZXN0QWlycG9ydHMgPSB0aGlzLmFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2VcbiAgICAgIC5oYXNDbG9zZXN0QWlycG9ydHModGhpcy5leGlzdHModGhpcy5kaXNwbGF5Q2xvc2VzdEFpcnBvcnRzKSwgdGhpcy5jbG9zZXN0QWlycG9ydHMpO1xuXG4gICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBHZW9sb2NhdGlvblN0YXRlLmdyYW50ZWQgJiZcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gR2VvbG9jYXRpb25TdGF0ZS5kZW5pZWQgJiZcbiAgICAgICF0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiAmJlxuICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID09PSAtMSAmJlxuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhc0xhdGVzdFNlYXJjaGVzICYmIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPCB0aGlzLmxhdGVzdFNlYXJjaGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMuZm9jdXNEb3duTGF0ZXN0U2VhcmNoZXMoKTtcbiAgICB9IGVsc2UgaWYgKGhhc0Nsb3Nlc3RBaXJwb3J0c1xuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlLmlzSW5kZXhJbkNsb3Nlc3RBaXJwb3J0cyh0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4LCB0aGlzLmNsb3Nlc3RBaXJwb3J0cykpIHtcbiAgICAgIHRoaXMuZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNEb3duQWlycG9ydHMoaGFzQ2xvc2VzdEFpcnBvcnRzLCBoYXNMYXRlc3RTZWFyY2hlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvU2Nyb2xsKDY2KTtcbiAgfVxuXG4gIGZvY3VzVXAoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzTGF0ZXN0U2VhcmNoZXMgPSB0aGlzLmFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2VcbiAgICAgIC5oYXNMYXRlc3RTZWFyY2hlcyh0aGlzLmV4aXN0cyh0aGlzLmRpc3BsYXlMYXRlc3RTZWFyY2hlcyksIHRoaXMubGF0ZXN0U2VhcmNoZXMpO1xuXG4gICAgY29uc3QgaGFzQ2xvc2VzdEFpcnBvcnRzID0gdGhpcy5haXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlXG4gICAgICAuaGFzQ2xvc2VzdEFpcnBvcnRzKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUNsb3Nlc3RBaXJwb3J0cyksIHRoaXMuY2xvc2VzdEFpcnBvcnRzKTtcblxuICAgIGNvbnN0IGhhc0dlb2xvY2F0aW9uID0gdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBudWxsICYmXG4gICAgICB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IEdlb2xvY2F0aW9uU3RhdGUuZ3JhbnRlZCAmJlxuICAgICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZCAmJlxuICAgICAgIXRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uO1xuXG4gICAgaWYgKHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA+IDApIHtcbiAgICAgIHRoaXMuZm9jdXNVcEFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0cywgaGFzTGF0ZXN0U2VhcmNoZXMpO1xuICAgIH0gZWxzZSBpZiAoaGFzQ2xvc2VzdEFpcnBvcnRzICYmIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA8PSAwICYmIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmZvY3VzVXBDbG9zZXN0QWlycG9ydHMoaGFzTGF0ZXN0U2VhcmNoZXMpO1xuICAgIH0gZWxzZSBpZiAoaGFzTGF0ZXN0U2VhcmNoZXMgJiYgaGFzQ2xvc2VzdEFpcnBvcnRzICYmIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXggPD0gMFxuICAgICAgfHwgaGFzTGF0ZXN0U2VhcmNoZXMgJiYgIWhhc0Nsb3Nlc3RBaXJwb3J0cyAmJiB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPD0gMCkge1xuICAgICAgdGhpcy5mb2N1c1VwTGF0ZXN0U2VhcmNoZXMoKTtcbiAgICB9IGVsc2UgaWYgKGhhc0dlb2xvY2F0aW9uICYmIGhhc0xhdGVzdFNlYXJjaGVzICYmIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPD0gMFxuICAgICAgfHwgaGFzR2VvbG9jYXRpb24gJiYgIWhhc0xhdGVzdFNlYXJjaGVzICYmIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA8PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiA9IHRydWU7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH1cblxuICAgIHRoaXMuYXV0b1Njcm9sbCg2Nik7XG4gIH1cblxuICBzZXRTZWxlY3RlZChhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGFpcnBvcnQpO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMua2VlcFNlbGVjdGlvbiAmJiAhdGhpcy5haXJwb3J0Lm5hbWUpIHtcbiAgICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkQWlycG9ydHMpIHtcbiAgICAgICAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzLmZpbmQoeCA9PiB4LmNvZGUgPT09IHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlKSB8fCB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF07XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gYWlycG9ydC5uYW1lIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRQb3NpdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV4dC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uUHJldmlvdXMuZW1pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHQuZW1pdChldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnRG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRNb2RlbCA9IHRoaXMuYWlycG9ydC5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZmlsdGVyZWRBaXJwb3J0cyA9IHRoaXMuYWlycG9ydHM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IGFpcnBvcnQubmFtZTtcbiAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uICYmIGFpcnBvcnQubmFtZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkTW9kZWwgPSBhaXJwb3J0Lm5hbWU7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duTGF0ZXN0U2VhcmNoZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGxldCBpbmRleCA9IHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXg7XG5cbiAgICBpbmRleCA9IGluZGV4ICsgMTtcblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmxhdGVzdFNlYXJjaGVzW2luZGV4XTtcblxuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZChhaXJwb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk6IHZvaWQge1xuICAgIGxldCBpbmRleCA9IHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXg7XG5cbiAgICBpbmRleCA9IGluZGV4ICsgMTtcblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmNsb3Nlc3RBaXJwb3J0c1tpbmRleF07XG5cbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlIHx8ICcnO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzRG93bkFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0czogYm9vbGVhbiwgaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGluZGV4ID0gaW5kZXggKyAxO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRBaXJwb3J0cyAmJiBpbmRleCA+IHRoaXMuZmlsdGVyZWRBaXJwb3J0cy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcblxuICAgICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gR2VvbG9jYXRpb25TdGF0ZS5ncmFudGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSAnJztcbiAgICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChoYXNMYXRlc3RTZWFyY2hlcykge1xuICAgICAgICB0aGlzLmZvY3VzRG93bkxhdGVzdFNlYXJjaGVzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2xvc2VzdEFpcnBvcnRzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSBpbmRleDtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkQWlycG9ydHMpIHtcbiAgICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbaW5kZXhdO1xuXG4gICAgICBpZiAoYWlycG9ydCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gYWlycG9ydC5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSAnJztcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNVcEFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0czogYm9vbGVhbiwgaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGlmIChpbmRleCAtIDEgPCAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcbiAgICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICB0aGlzLmJsdXIoKTtcblxuICAgICAgaWYgKCFoYXNDbG9zZXN0QWlycG9ydHMpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICB9XG4gICAgICBpZiAoIWhhc0xhdGVzdFNlYXJjaGVzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXggPSBpbmRleCAtIDE7XG5cbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZEFpcnBvcnRzKSB7XG4gICAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzW2luZGV4XTtcblxuICAgICAgaWYgKGFpcnBvcnQpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IGFpcnBvcnQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9TY3JvbGwoZXh0cmFPZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXN1bHRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnJlc3VsdHMubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hcy1haXJwb3J0LXNlbGVjdC1uZXdfX2xpc3QtaXRlbS0tZm9jdXMnKTtcblxuICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgcmVzdWx0cy5zY3JvbGxUbygwLCAwKTtcbiAgICAgIHJlc3VsdHMuc2Nyb2xsVG8oMCwgZm9jdXNlZEl0ZW0ub2Zmc2V0VG9wICsgZXh0cmFPZmZzZXQgLSByZXN1bHRzLmNsaWVudEhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1VwTGF0ZXN0U2VhcmNoZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGxldCBsYXRlc3RTZWFyY2hlc0luZGV4ID0gdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleDtcblxuICAgIGlmIChsYXRlc3RTZWFyY2hlc0luZGV4IDwgMCkge1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xvc2VzdEFpcnBvcnRJbmRleCA9IHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXg7XG4gICAgY29uc3QgYWlycG9ydHNJbmRleCA9IHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleDtcblxuICAgIGlmIChjbG9zZXN0QWlycG9ydEluZGV4IDwgMCAmJiBhaXJwb3J0c0luZGV4IDwgMCkge1xuICAgICAgbGF0ZXN0U2VhcmNoZXNJbmRleCA9IGxhdGVzdFNlYXJjaGVzSW5kZXggLSAxO1xuXG4gICAgICBpZiAobGF0ZXN0U2VhcmNoZXNJbmRleCA8IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWlycG9ydCA9IHRoaXMubGF0ZXN0U2VhcmNoZXNbbGF0ZXN0U2VhcmNoZXNJbmRleF07XG5cbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gbGF0ZXN0U2VhcmNoZXNJbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzVXBDbG9zZXN0QWlycG9ydHMoaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgY2xvc2VzdEFpcnBvcnRJbmRleCA9IHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXg7XG5cbiAgICBpZiAoIWhhc0xhdGVzdFNlYXJjaGVzICYmIGNsb3Nlc3RBaXJwb3J0SW5kZXggPD0gMCkge1xuICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNsb3Nlc3RBaXJwb3J0SW5kZXggLSAxIDwgMCkge1xuICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA8IDApIHtcbiAgICAgIGNsb3Nlc3RBaXJwb3J0SW5kZXggPSBjbG9zZXN0QWlycG9ydEluZGV4IC0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5jbG9zZXN0QWlycG9ydHNbY2xvc2VzdEFpcnBvcnRJbmRleF07XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IGNsb3Nlc3RBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID0gLTE7XG5cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0UmVtb3ZlSWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTW9kZWwgPyAncmVtb3ZlLS1zZWNvbmRhcnknIDogJ3JlbW92ZSc7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhbmFzRm9ybUNvbnRyb2xOYW1lOyBlbHNlIHJlYWN0aXZlRm9ybVwiPlxuICA8bGFiZWwgW2lkXT1cImxhYmVsSWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWlycG9ydFNlbGVjdExhYmVsXCJcbiAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dyYXBwZXInLCBbb3BlbiAmJiAnYWN0aXZlJywgc2VsZWN0ZWRNb2RlbCAmJiAnZmlsbGVkJ10pXCI+XG4gICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdsYWJlbCcpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWlycG9ydFNlbGVjdExhYmVsOyBlbHNlIGVtcHR5TGFiZWxcIj57e2FpcnBvcnRTZWxlY3RMYWJlbH19PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2VtcHR5TGFiZWw+Jm5ic3A7PC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gICAgPGlucHV0ICNhaXJwb3J0U2VsZWN0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibm9uZVwiXG4gICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInJlc3VsdHNJZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgIFthdHRyLmFyaWEtb3duc109XCJyZXN1bHRzSWRcIlxuICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdpbnB1dCcpXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJhaXJwb3J0U2VsZWN0UGxhY2Vob2xkZXJcIlxuICAgICAgKGZvY3VzKT1cInNldE9wZW4oKVwiXG4gICAgICAobW91c2Vkb3duKT1cInNldE9wZW4oKVwiXG4gICAgICAoaW5wdXQpPVwiZmlsdGVyKClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1vZGVsXCIvPlxuICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaWNvbicpXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICpuZ0lmPVwic2VsZWN0ZWRNb2RlbDsgZWxzZSBpc0VtcHR5XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxDbGVhclwiXG4gICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgPG5hcy1pY29uIFt0eXBlXT1cInNldFJlbW92ZUljb24oKVwiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjaXNFbXB0eT5cbiAgICAgICAgPG5hcy1pY29uIFt0eXBlXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtpY29uXT1cImFpcnBvcnRTZWxlY3RJY29uTW9kaWZpZXJcIj48L25hcy1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gIDwvbGFiZWw+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjcmVhY3RpdmVGb3JtPlxuICA8bGFiZWwgW2lkXT1cImxhYmVsSWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWlycG9ydFNlbGVjdExhYmVsXCJcbiAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dyYXBwZXInLCBbb3BlbiAmJiAnYWN0aXZlJywgc2VsZWN0ZWRNb2RlbCAmJiAnZmlsbGVkJ10pXCJcbiAgICBbZm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiPlxuICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGFiZWwnKVwiXG4gICAgICAqbmdJZj1cImFpcnBvcnRTZWxlY3RMYWJlbFwiPnt7YWlycG9ydFNlbGVjdExhYmVsfX08L3NwYW4+XG4gICAgPGlucHV0ICNhaXJwb3J0U2VsZWN0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibm9uZVwiXG4gICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInJlc3VsdHNJZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgIFthdHRyLmFyaWEtb3duc109XCJyZXN1bHRzSWRcIlxuICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdpbnB1dCcpXCJcbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFzRm9ybUNvbnRyb2xOYW1lXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJhaXJwb3J0U2VsZWN0UGxhY2Vob2xkZXJcIlxuICAgICAgKG1vdXNlZG93bik9XCJzZXRPcGVuKClcIlxuICAgICAgKGZvY3VzKT1cInNldE9wZW4oKVwiXG4gICAgICAoaW5wdXQpPVwiZmlsdGVyKClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiAvPlxuICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaWNvbicpXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICpuZ0lmPVwic2VsZWN0ZWRNb2RlbDsgZWxzZSBpc0VtcHR5XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxDbGVhclwiXG4gICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgPG5hcy1pY29uIFt0eXBlXT1cInNldFJlbW92ZUljb24oKVwiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjaXNFbXB0eT5cbiAgICAgICAgPG5hcy1pY29uIFt0eXBlXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtpY29uXT1cImFpcnBvcnRTZWxlY3RJY29uTW9kaWZpZXJcIj48L25hcy1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gIDwvbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Jlc3VsdHMtd3JhcHBlcicpXCJcbiAgW2lkXT1cInJlc3VsdHNJZFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbiA/ICd0cnVlJyA6ICdmYWxzZSdcIj5cbiAgPHVsICNyZXN1bHRzXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICpuZ0lmPVwib3BlblwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygncmVzdWx0cycpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4aXN0cyhlbmFibGVHZW9sb2NhdGlvbikgJiYgZ2VvbG9jYXRpb25TdGF0ZSAhPT0gbnVsbCAmJiBnZW9sb2NhdGlvblN0YXRlICE9PSAwICYmIGlzVmFsaWRcIj5cbiAgICAgIDxsaSByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgIDxuYXMtYnV0dG9uIGxpbmtcbiAgICAgICAgICBzZWNvbmRhcnlcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2VvbG9jYXRpb25TdGF0ZSA9PT0gMlwiXG4gICAgICAgICAgW2Nzc1N0eWxlXT1cInsnaGVpZ2h0JzogJzY2cHgnLCAndGV4dC1kZWNvcmF0aW9uJzogJ3VuZGVybGluZScsICdkaXNwbGF5JzogJ2ZsZXgnLCAnanVzdGlmeS1jb250ZW50JzogJ3NwYWNlLWJldHdlZW4nfVwiXG4gICAgICAgICAgW2Nzc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgWydnZW9sb2NhdGlvbicsIGZvY3VzT25HZW9sb2NhdGlvbiAmJiBnZW9sb2NhdGlvblN0YXRlICE9PSAyICYmICdmb2N1cycsIGdlb2xvY2F0aW9uU3RhdGUgPT09IDIgJiYgJ2Rpc2FibGVkJ10pXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgIChjbGlja0NoYW5nZSk9XCJ1cGRhdGVDdXJyZW50UG9zaXRpb24oKVwiXG4gICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25HZW9sb2NhdGlvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbkdlb2xvY2F0aW9uSG92ZXIoZmFsc2UpXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZW9sb2NhdGlvblN0YXRlID09PSAxOyBlbHNlIGdlb2xvY2F0aW9uRGVuaWVkXCJcbiAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZ2VvbG9jYXRpb24nLCAnbGFiZWwnKVwiPnt7cmVzdWx0c0xhYmVscz8uZ2VvbG9jYXRpb259fTwvc3Bhbj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2dlb2xvY2F0aW9uRGVuaWVkPlxuICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdnZW9sb2NhdGlvbicsICdsYWJlbCcpXCI+e3tyZXN1bHRzTGFiZWxzPy5nZW9sb2NhdGlvbkRlbmllZH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5hcy1pY29uIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZ2VvbG9jYXRpb24nLCAnaWNvbicpXCJcbiAgICAgICAgICAgIFt0eXBlXT1cImdlb2xvY2F0aW9uSWNvblwiPjwvbmFzLWljb24+XG4gICAgICAgIDwvbmFzLWJ1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGxpIHJvbGU9XCJzZXBhcmF0b3JcIlxuICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdsaXN0LXNlY3Rpb24tbGFiZWwnKVwiXG4gICAgICAqbmdJZj1cImxhdGVzdFNlYXJjaGVzPy5sZW5ndGggPiAwXG4gICAgICAmJiBleGlzdHMoZGlzcGxheUxhdGVzdFNlYXJjaGVzKVxuICAgICAgJiYgcmVzdWx0c0xhYmVscz8ubGF0ZXN0U2VhcmNoZXNcbiAgICAgICYmIGlzVmFsaWRcIj5cbiAgICAgIDxzcGFuPnt7cmVzdWx0c0xhYmVscz8ubGF0ZXN0U2VhcmNoZXN9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleGlzdHMoZGlzcGxheUxhdGVzdFNlYXJjaGVzKSAmJiBpc1ZhbGlkXCI+XG4gICAgICA8bGkgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBhaXJwb3J0IG9mIGxhdGVzdFNlYXJjaGVzXCJcbiAgICAgICAgW2lkXT1cImdldExhdGVzdFNlYXJjaGVzQWlycG9ydElkKGFpcnBvcnQuY29kZSlcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGVcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xpc3QtaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgJiYgJ2ZvY3VzJylcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCBhaXJwb3J0LmNvZGUgPT09IGZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlICYmICdmb2N1cycpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWQoYWlycG9ydClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgICpuZ0lmPVwiZXhpc3RzKGRpc3BsYXlDbG9zZXN0QWlycG9ydHMpXG4gICAgICAgJiYgZ2VvbG9jYXRpb25TdGF0ZSAhPT0gbnVsbFxuICAgICAgICYmIGdlb2xvY2F0aW9uU3RhdGUgPT09IDBcbiAgICAgICAmJiBjbG9zZXN0QWlycG9ydHM/Lmxlbmd0aCA+IDBcbiAgICAgICAmJiByZXN1bHRzTGFiZWxzPy5jbG9zZXN0QWlycG9ydHNcbiAgICAgICAmJiBpc1ZhbGlkXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1zZWN0aW9uLWxhYmVsJylcIj5cbiAgICAgIDxzcGFuPnt7cmVzdWx0c0xhYmVscz8uY2xvc2VzdEFpcnBvcnRzfX08L3NwYW4+XG4gICAgPC9saT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhpc3RzKGRpc3BsYXlDbG9zZXN0QWlycG9ydHMpICYmIGdlb2xvY2F0aW9uU3RhdGUgPT09IDAgJiYgaXNWYWxpZFwiPlxuICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgYWlycG9ydCBvZiBjbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICBbaWRdPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzQWlycG9ydElkKGFpcnBvcnQuY29kZSlcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZVwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1pdGVtJywgYWlycG9ydC5jb2RlID09PSBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgYWlycG9ydC5jb2RlID09PSBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWQoYWlycG9ydClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1zZWN0aW9uLWxhYmVsJylcIlxuICAgICAgKm5nSWY9XCJkaXNwbGF5QWxsQWlycG9ydHNMYWJlbCAmJiByZXN1bHRzTGFiZWxzPy5hbGxBaXJwb3J0cyAmJiBpc1ZhbGlkXCI+XG4gICAgICA8c3Bhbj57e3Jlc3VsdHNMYWJlbHM/LmFsbEFpcnBvcnRzfX08L3NwYW4+XG4gICAgPC9saT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNWYWxpZFwiPlxuICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgYWlycG9ydCBvZiBmaWx0ZXJlZEFpcnBvcnRzXCJcbiAgICAgICAgW2lkXT1cImdldEFsbEFpcnBvcnRzQWlycG9ydElkKGFpcnBvcnQuY29kZSlcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZEFpcnBvcnRDb2RlXCJcbiAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdsaXN0LWl0ZW0nLCBhaXJwb3J0LmNvZGUgPT09IGZvY3VzZWRBaXJwb3J0Q29kZSAmJiAnZm9jdXMnKVwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWQoYWlycG9ydClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSAqbmdJZj1cIiFpc1ZhbGlkXCJcbiAgICAgIHJvbGU9XCJsaXN0aXRlbVwiPlxuICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCduYW1lJywgJ2ludmFsaWQnKVwiPnt7aW52YWxpZFRleHR9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9kaXY+XG48YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICB0YWJpbmRleD1cIjBcIlxuICAqbmdJZj1cIm9wZW5cIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgW25hc0NsYXNzXT1cImdldENsYXNzKCdiYWNrZHJvcCcpXCJcbiAgKGNsaWNrKT1cImJsdXIoKVwiPjwvYnV0dG9uPiJdfQ==
|
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9haXJwb3J0LXNlbGVjdC1uZXcvYWlycG9ydC1zZWxlY3QtZHJvcGRvd24vYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9haXJwb3J0LXNlbGVjdC1uZXcvYWlycG9ydC1zZWxlY3QtZHJvcGRvd24vYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFNekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7Ozs7QUFFN0YsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBUWYsTUFBTSxPQUFPLDhCQUErQixTQUFRLGdCQUFnQjtJQW1DbEUsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxRQUE2QjtRQUMvQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsb0JB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QkE2SS9CLFFBQVE7a0dBN0lQLDhCQUE4Qiwwb0NDbEMzQyxxcFFBK0w0Qjs7MkZEN0pmLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDRSw2QkFBNkIsaUJBR3hCLGlCQUFpQixDQUFDLElBQUk7OzBCQStJbEMsTUFBTTsyQkFBQyxRQUFROzJKQTdIVSxLQUFLO3NCQUFoQyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0osT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUVYLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBY0YsT0FBTztzQkFEVixLQUFLO2dCQWVGLElBQUk7c0JBRFAsS0FBSztnQkFvQkYsUUFBUTtzQkFEWCxLQUFLO2dCQVNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTm9yd2VnaWFuIEFpciBTaHV0dGxlLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBaXJwb3J0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvYWlycG9ydC5tb2RlbCc7XG5pbXBvcnQgeyBSZXN1bHRzTGFiZWxzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcmVzdWx0cy1sYWJlbHMubW9kZWwnO1xuaW1wb3J0IHsgQWlycG9ydFNlbGVjdERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWlycG9ydFNlbGVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9haXJwb3J0LXNlbGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2dlb2xvY2F0aW9uL2dlb2xvY2F0aW9uLXN0YXRlLmVudW0nO1xuXG5sZXQgbmV4dElkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBaXJwb3J0U2VsZWN0RHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBOYXNDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBhaXJwb3J0VmFsdWU6IEFpcnBvcnRNb2RlbDtcbiAgYWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgZm9jdXNlZEFpcnBvcnRJbmRleCA9IC0xO1xuICBmb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlOiBzdHJpbmc7XG4gIGZvY3VzZWRBaXJwb3J0Q29kZTogc3RyaW5nO1xuICBmb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZTogc3RyaW5nO1xuICBmaWx0ZXJlZEFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+ID0gdGhpcy5haXJwb3J0cztcbiAgZGlzcGxheUFsbEFpcnBvcnRzTGFiZWwgPSB0cnVlO1xuICBvcGVuVmFsdWU6IGJvb2xlYW47XG4gIGZvY3VzT25HZW9sb2NhdGlvbjogYm9vbGVhbjtcbiAgZ2VvbG9jYXRpb25TdGF0ZTogR2VvbG9jYXRpb25TdGF0ZSA9IG51bGw7XG5cbiAgQFZpZXdDaGlsZCgnYWlycG9ydFNlbGVjdCcpIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcmVzdWx0czogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBkaXNwbGF5TGF0ZXN0U2VhcmNoZXM/OiBib29sZWFuO1xuICBASW5wdXQoKSBkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzPzogYm9vbGVhbjtcbiAgQElucHV0KCkgbGF0ZXN0U2VhcmNoZXM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIEBJbnB1dCgpIHJlc3VsdHNMYWJlbHM6IFJlc3VsdHNMYWJlbHNNb2RlbDtcbiAgQElucHV0KCkgYWlycG9ydFNlbGVjdExhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFpcnBvcnRTZWxlY3RQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBhaXJwb3J0U2VsZWN0SWNvbk1vZGlmaWVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGtlZXBTZWxlY3Rpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBuYXNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZW5hYmxlR2VvbG9jYXRpb24/OiBib29sZWFuO1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuICBASW5wdXQoKSBhcmlhTGFiZWxCYWNrZHJvcDogc3RyaW5nO1xuICBASW5wdXQoKSBpc1ZhbGlkID0gdHJ1ZTtcbiAgQElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgY2xvc2VzdEFpcnBvcnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBjbG9zZXN0QWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICBpZiAoIWFpcnBvcnRzIHx8ICFhaXJwb3J0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlID0gYWlycG9ydHM7XG4gICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlID0gR2VvbG9jYXRpb25TdGF0ZS5ncmFudGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGFpcnBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydFZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCkge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWlycG9ydFZhbHVlID0gYWlycG9ydDtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBhaXJwb3J0Lm5hbWU7XG4gICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5zZWxlY3RTZXJ2aWNlLmZpbHRlcih0aGlzLmFpcnBvcnRzLCB0aGlzLnNlbGVjdGVkTW9kZWwpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlblZhbHVlO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMub3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmlucHV0U2VsZWN0aW9uVGltZW91dCk7XG4gICAgdGhpcy5vcGVuVmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dFNlbGVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgYWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydHNWYWx1ZTtcbiAgfVxuICBzZXQgYWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICB0aGlzLmFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcbiAgICB0aGlzLmZpbHRlcmVkQWlycG9ydHMgPSB0aGlzLnNlbGVjdFNlcnZpY2UuZmlsdGVyKHRoaXMuYWlycG9ydHMsIHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gIH1cblxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGZvY3VzT25QcmV2aW91cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuICBAT3V0cHV0KCkgY2xlYXJlZFNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXQgc2VsZWN0ZWRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE1vZGVsVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9kZWwobW9kZWw6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlbFZhbHVlID0gbW9kZWw7XG5cbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwIHx8ICF0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gbW9kZWwpIHtcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc3VsdHNJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLXJlc3VsdHMtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXQgbGFiZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLWxhYmVsLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1pbnB1dC0ke3RoaXMuY29tcG9uZW50SWR9YDtcbiAgfVxuXG4gIGdldCBnZW9sb2NhdGlvbkljb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5nZW9sb2NhdGlvblN0YXRlID09PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZCkge1xuICAgICAgcmV0dXJuICdnZW9sb2NhdGlvbi0tZGlzYWJsZWQnO1xuICAgIH1cblxuICAgIHJldHVybiAnZ2VvbG9jYXRpb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRNb2RlbDogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkTW9kZWxWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIGlucHV0U2VsZWN0aW9uVGltZW91dDogYW55O1xuICBwcml2YXRlIGNsb3Nlc3RBaXJwb3J0c1ZhbHVlOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuICBwcml2YXRlIGNvbXBvbmVudElkOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgc2VsZWN0U2VydmljZTogQWlycG9ydFNlbGVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhaXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlOiBBaXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2VvbG9jYXRpb25TZXJ2aWNlOiBHZW9sb2NhdGlvblNlcnZpY2UpIHtcbiAgICBzdXBlcignbmFzLWFpcnBvcnQtc2VsZWN0LW5ldycpO1xuICAgIHRoaXMuY29tcG9uZW50SWQgPSBuZXh0SWQrKztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hcmlhTGFiZWxDbGVhcikge1xuICAgICAgdGhpcy53YXJuTWlzc2luZ0FjY2Vzc2liaWx0eUlucHV0KCdhcmlhTGFiZWxDbGVhcicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsQmFja2Ryb3ApIHtcbiAgICAgIHRoaXMud2Fybk1pc3NpbmdBY2Nlc3NpYmlsdHlJbnB1dCgnYXJpYUxhYmVsQmFja2Ryb3AnKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSB0aGlzLmFpcnBvcnQgPyB0aGlzLmFpcnBvcnQubmFtZSA6ICcnO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUNsb3Nlc3RBaXJwb3J0cykpIHtcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldFN0YXRlKCkuc3Vic2NyaWJlKChzdGF0ZTogR2VvbG9jYXRpb25TdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgPSBzdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IEdlb2xvY2F0aW9uU3RhdGUuZ3JhbnRlZCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZGVsKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQWlycG9ydHMgPSB0aGlzLnNlbGVjdFNlcnZpY2UuZmlsdGVyKHRoaXMuYWlycG9ydHMsIHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwbGF5TGF0ZXN0U2VhcmNoZXMgPSBmYWxzZTtcbiAgICB0aGlzLmRpc3BsYXlDbG9zZXN0QWlycG9ydHMgPSBmYWxzZTtcbiAgICB0aGlzLmRpc3BsYXlBbGxBaXJwb3J0c0xhYmVsID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyZWRBaXJwb3J0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHMuZmluZCh4ID0+IHgubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZGVsKTtcblxuICAgIGlmIChhaXJwb3J0KSB7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB9XG4gIH1cblxuICBnZXRBbGxBaXJwb3J0c0FpcnBvcnRJZChhaXJwb3J0Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1haXJwb3J0LSR7dGhpcy5jb21wb25lbnRJZH0tYWxsLWFpcnBvcnRzLSR7YWlycG9ydENvZGV9YDtcbiAgfVxuXG4gIGdldENsb3Nlc3RBaXJwb3J0c0FpcnBvcnRJZChhaXJwb3J0Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1haXJwb3J0LSR7dGhpcy5jb21wb25lbnRJZH0tY2xvc2VzdC1haXJwb3J0cy0ke2FpcnBvcnRDb2RlfWA7XG4gIH1cblxuICBnZXRMYXRlc3RTZWFyY2hlc0FpcnBvcnRJZChhaXJwb3J0Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG5hcy1haXJwb3J0LXNlbGVjdC1kcm9wZG93bi1haXJwb3J0LSR7dGhpcy5jb21wb25lbnRJZH0tbGF0ZXN0LXNlYXJjaGVzLSR7YWlycG9ydENvZGV9YDtcbiAgfVxuXG4gIHVwZGF0ZUN1cnJlbnRQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5nZW9sb2NhdGlvblN0YXRlID09PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZFxuICAgICAgfHwgdGhpcy5nZW9sb2NhdGlvblN0YXRlID09PSBHZW9sb2NhdGlvblN0YXRlLnVua25vd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdlb2xvY2F0aW9uU2VydmljZS5nZXRDdXJyZW50UG9zaXRpb24oKS5zdWJzY3JpYmUoKHg6IEdlb2xvY2F0aW9uUG9zaXRpb24pID0+IHtcbiAgICAgIHRoaXMucG9zaXRpb25DaGFuZ2UuZW1pdCh4KTtcbiAgICB9LCAoZXJyb3I6IEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvcikgPT4ge1xuICAgICAgaWYgKGVycm9yLlBFUk1JU1NJT05fREVOSUVEKSB7XG4gICAgICAgIHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSA9IEdlb2xvY2F0aW9uU3RhdGUuZGVuaWVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0T3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uR2VvbG9jYXRpb25Ib3Zlcihob3ZlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChob3ZlciAmJiB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IEdlb2xvY2F0aW9uU3RhdGUuZGVuaWVkKSB7XG4gICAgICB0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYmx1cigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSB0aGlzLmxhc3RTZWxlY3RlZE1vZGVsO1xuICAgIH1cblxuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kZWwgPT09IHRoaXMubGFzdFNlbGVjdGVkTW9kZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJlZEFpcnBvcnRzKSB7XG4gICAgICAgIGxldCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzLmZpbmQoeCA9PiB4Lm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gICAgICAgIGlmICghYWlycG9ydCkge1xuICAgICAgICAgIGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZChhaXJwb3J0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZCh7XG4gICAgICAgIGFpcnBvcnROYW1lOiAnJyxcbiAgICAgICAgY29kZTogJycsXG4gICAgICAgIGNvdW50cnlOYW1lOiAnJyxcbiAgICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgbm9ybWFsaXplZEFpcnBvcnROYW1lOiAnJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKCk6IHZvaWQge1xuICAgIGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwIHx8ICF0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kZWwpIHtcbiAgICAgICAgdGhpcy5yZXNldEZpbHRlcigpO1xuICAgICAgICBpc0VtcHR5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRBaXJwb3J0cyA9IHRoaXMuc2VsZWN0U2VydmljZS5maWx0ZXIodGhpcy5haXJwb3J0cywgdGhpcy5zZWxlY3RlZE1vZGVsKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF0uY29kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG4gICAgICAgIGlzRW1wdHkgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5zZWxlY3RTZXJ2aWNlLmZpbHRlcih0aGlzLmFpcnBvcnRzLCBjb250cm9sLnZhbHVlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF0uY29kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlMYXRlc3RTZWFyY2hlcyA9IGlzRW1wdHk7XG4gICAgdGhpcy5kaXNwbGF5Q2xvc2VzdEFpcnBvcnRzID0gaXNFbXB0eTtcbiAgICB0aGlzLmRpc3BsYXlBbGxBaXJwb3J0c0xhYmVsID0gaXNFbXB0eTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLmtlZXBTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkTW9kZWwgPSB0aGlzLmFpcnBvcnQubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSAnJztcblxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoe1xuICAgICAgbmFtZTogJycsXG4gICAgICBjb3VudHJ5TmFtZTogJycsXG4gICAgICBjb2RlOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICAgIGFpcnBvcnROYW1lOiAnJyxcbiAgICAgIG5vcm1hbGl6ZWRBaXJwb3J0TmFtZTogJydcbiAgICB9KTtcblxuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSAnJztcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5haXJwb3J0cztcblxuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5TGF0ZXN0U2VhcmNoZXMgPSB0cnVlO1xuICAgIHRoaXMuZGlzcGxheUNsb3Nlc3RBaXJwb3J0cyA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5QWxsQWlycG9ydHNMYWJlbCA9IHRydWU7XG4gICAgdGhpcy5jbGVhcmVkU2VsZWN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIGZvY3VzRG93bigpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNMYXRlc3RTZWFyY2hlcyA9IHRoaXMuYWlycG9ydFNlbGVjdERyb3Bkb3duU2VydmljZVxuICAgICAgLmhhc0xhdGVzdFNlYXJjaGVzKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSwgdGhpcy5sYXRlc3RTZWFyY2hlcyk7XG5cbiAgICBjb25zdCBoYXNDbG9zZXN0QWlycG9ydHMgPSB0aGlzLmFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2VcbiAgICAgIC5oYXNDbG9zZXN0QWlycG9ydHModGhpcy5leGlzdHModGhpcy5kaXNwbGF5Q2xvc2VzdEFpcnBvcnRzKSwgdGhpcy5jbG9zZXN0QWlycG9ydHMpO1xuXG4gICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBHZW9sb2NhdGlvblN0YXRlLmdyYW50ZWQgJiZcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gR2VvbG9jYXRpb25TdGF0ZS5kZW5pZWQgJiZcbiAgICAgICF0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiAmJlxuICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID09PSAtMSAmJlxuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhc0xhdGVzdFNlYXJjaGVzICYmIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPCB0aGlzLmxhdGVzdFNlYXJjaGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMuZm9jdXNEb3duTGF0ZXN0U2VhcmNoZXMoKTtcbiAgICB9IGVsc2UgaWYgKGhhc0Nsb3Nlc3RBaXJwb3J0c1xuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlLmlzSW5kZXhJbkNsb3Nlc3RBaXJwb3J0cyh0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4LCB0aGlzLmNsb3Nlc3RBaXJwb3J0cykpIHtcbiAgICAgIHRoaXMuZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNEb3duQWlycG9ydHMoaGFzQ2xvc2VzdEFpcnBvcnRzLCBoYXNMYXRlc3RTZWFyY2hlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvU2Nyb2xsKDY2KTtcbiAgfVxuXG4gIGZvY3VzVXAoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzTGF0ZXN0U2VhcmNoZXMgPSB0aGlzLmFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2VcbiAgICAgIC5oYXNMYXRlc3RTZWFyY2hlcyh0aGlzLmV4aXN0cyh0aGlzLmRpc3BsYXlMYXRlc3RTZWFyY2hlcyksIHRoaXMubGF0ZXN0U2VhcmNoZXMpO1xuXG4gICAgY29uc3QgaGFzQ2xvc2VzdEFpcnBvcnRzID0gdGhpcy5haXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlXG4gICAgICAuaGFzQ2xvc2VzdEFpcnBvcnRzKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUNsb3Nlc3RBaXJwb3J0cyksIHRoaXMuY2xvc2VzdEFpcnBvcnRzKTtcblxuICAgIGNvbnN0IGhhc0dlb2xvY2F0aW9uID0gdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBudWxsICYmXG4gICAgICB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IEdlb2xvY2F0aW9uU3RhdGUuZ3JhbnRlZCAmJlxuICAgICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZCAmJlxuICAgICAgIXRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uO1xuXG4gICAgaWYgKHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA+IDApIHtcbiAgICAgIHRoaXMuZm9jdXNVcEFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0cywgaGFzTGF0ZXN0U2VhcmNoZXMpO1xuICAgIH0gZWxzZSBpZiAoaGFzQ2xvc2VzdEFpcnBvcnRzICYmIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA8PSAwICYmIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmZvY3VzVXBDbG9zZXN0QWlycG9ydHMoaGFzTGF0ZXN0U2VhcmNoZXMpO1xuICAgIH0gZWxzZSBpZiAoaGFzTGF0ZXN0U2VhcmNoZXMgJiYgaGFzQ2xvc2VzdEFpcnBvcnRzICYmIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXggPD0gMFxuICAgICAgfHwgaGFzTGF0ZXN0U2VhcmNoZXMgJiYgIWhhc0Nsb3Nlc3RBaXJwb3J0cyAmJiB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPD0gMCkge1xuICAgICAgdGhpcy5mb2N1c1VwTGF0ZXN0U2VhcmNoZXMoKTtcbiAgICB9IGVsc2UgaWYgKGhhc0dlb2xvY2F0aW9uICYmIGhhc0xhdGVzdFNlYXJjaGVzICYmIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPD0gMFxuICAgICAgfHwgaGFzR2VvbG9jYXRpb24gJiYgIWhhc0xhdGVzdFNlYXJjaGVzICYmIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA8PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiA9IHRydWU7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH1cblxuICAgIHRoaXMuYXV0b1Njcm9sbCg2Nik7XG4gIH1cblxuICBzZXRTZWxlY3RlZChhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGFpcnBvcnQpO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMua2VlcFNlbGVjdGlvbiAmJiAhdGhpcy5haXJwb3J0Lm5hbWUpIHtcbiAgICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkQWlycG9ydHMpIHtcbiAgICAgICAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzLmZpbmQoeCA9PiB4LmNvZGUgPT09IHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlKSB8fCB0aGlzLmZpbHRlcmVkQWlycG9ydHNbMF07XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gYWlycG9ydC5uYW1lIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRQb3NpdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV4dC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uUHJldmlvdXMuZW1pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHQuZW1pdChldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnRG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRNb2RlbCA9IHRoaXMuYWlycG9ydC5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZmlsdGVyZWRBaXJwb3J0cyA9IHRoaXMuYWlycG9ydHM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IGFpcnBvcnQubmFtZTtcbiAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uICYmIGFpcnBvcnQubmFtZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkTW9kZWwgPSBhaXJwb3J0Lm5hbWU7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duTGF0ZXN0U2VhcmNoZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGxldCBpbmRleCA9IHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXg7XG5cbiAgICBpbmRleCA9IGluZGV4ICsgMTtcblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmxhdGVzdFNlYXJjaGVzW2luZGV4XTtcblxuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZChhaXJwb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk6IHZvaWQge1xuICAgIGxldCBpbmRleCA9IHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXg7XG5cbiAgICBpbmRleCA9IGluZGV4ICsgMTtcblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmNsb3Nlc3RBaXJwb3J0c1tpbmRleF07XG5cbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlIHx8ICcnO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzRG93bkFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0czogYm9vbGVhbiwgaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGluZGV4ID0gaW5kZXggKyAxO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRBaXJwb3J0cyAmJiBpbmRleCA+IHRoaXMuZmlsdGVyZWRBaXJwb3J0cy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcblxuICAgICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gR2VvbG9jYXRpb25TdGF0ZS5ncmFudGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSAnJztcbiAgICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChoYXNMYXRlc3RTZWFyY2hlcykge1xuICAgICAgICB0aGlzLmZvY3VzRG93bkxhdGVzdFNlYXJjaGVzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2xvc2VzdEFpcnBvcnRzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSBpbmRleDtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkQWlycG9ydHMpIHtcbiAgICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbaW5kZXhdO1xuXG4gICAgICBpZiAoYWlycG9ydCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gYWlycG9ydC5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSAnJztcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNVcEFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0czogYm9vbGVhbiwgaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGlmIChpbmRleCAtIDEgPCAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcbiAgICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICB0aGlzLmJsdXIoKTtcblxuICAgICAgaWYgKCFoYXNDbG9zZXN0QWlycG9ydHMpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICB9XG4gICAgICBpZiAoIWhhc0xhdGVzdFNlYXJjaGVzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXggPSBpbmRleCAtIDE7XG5cbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZEFpcnBvcnRzKSB7XG4gICAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzW2luZGV4XTtcblxuICAgICAgaWYgKGFpcnBvcnQpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IGFpcnBvcnQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9TY3JvbGwoZXh0cmFPZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXN1bHRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnJlc3VsdHMubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hcy1haXJwb3J0LXNlbGVjdC1uZXdfX2xpc3QtaXRlbS0tZm9jdXMnKTtcblxuICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgcmVzdWx0cy5zY3JvbGxUbygwLCAwKTtcbiAgICAgIHJlc3VsdHMuc2Nyb2xsVG8oMCwgZm9jdXNlZEl0ZW0ub2Zmc2V0VG9wICsgZXh0cmFPZmZzZXQgLSByZXN1bHRzLmNsaWVudEhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1VwTGF0ZXN0U2VhcmNoZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGxldCBsYXRlc3RTZWFyY2hlc0luZGV4ID0gdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleDtcblxuICAgIGlmIChsYXRlc3RTZWFyY2hlc0luZGV4IDwgMCkge1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xvc2VzdEFpcnBvcnRJbmRleCA9IHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXg7XG4gICAgY29uc3QgYWlycG9ydHNJbmRleCA9IHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleDtcblxuICAgIGlmIChjbG9zZXN0QWlycG9ydEluZGV4IDwgMCAmJiBhaXJwb3J0c0luZGV4IDwgMCkge1xuICAgICAgbGF0ZXN0U2VhcmNoZXNJbmRleCA9IGxhdGVzdFNlYXJjaGVzSW5kZXggLSAxO1xuXG4gICAgICBpZiAobGF0ZXN0U2VhcmNoZXNJbmRleCA8IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWlycG9ydCA9IHRoaXMubGF0ZXN0U2VhcmNoZXNbbGF0ZXN0U2VhcmNoZXNJbmRleF07XG5cbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gbGF0ZXN0U2VhcmNoZXNJbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzVXBDbG9zZXN0QWlycG9ydHMoaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgY2xvc2VzdEFpcnBvcnRJbmRleCA9IHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXg7XG5cbiAgICBpZiAoIWhhc0xhdGVzdFNlYXJjaGVzICYmIGNsb3Nlc3RBaXJwb3J0SW5kZXggPD0gMCkge1xuICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNsb3Nlc3RBaXJwb3J0SW5kZXggLSAxIDwgMCkge1xuICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA8IDApIHtcbiAgICAgIGNsb3Nlc3RBaXJwb3J0SW5kZXggPSBjbG9zZXN0QWlycG9ydEluZGV4IC0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5jbG9zZXN0QWlycG9ydHNbY2xvc2VzdEFpcnBvcnRJbmRleF07XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IGNsb3Nlc3RBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID0gLTE7XG5cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGFpcnBvcnQpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIW5hc0Zvcm1Db250cm9sTmFtZTsgZWxzZSByZWFjdGl2ZUZvcm1cIj5cbiAgPGxhYmVsIFtpZF09XCJsYWJlbElkXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFpcnBvcnRTZWxlY3RMYWJlbFwiXG4gICAgW25hc0NsYXNzXT1cImdldENsYXNzKCd3cmFwcGVyJywgW29wZW4gJiYgJ2FjdGl2ZScsIHNlbGVjdGVkTW9kZWwgJiYgJ2ZpbGxlZCddKVwiPlxuICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGFiZWwnKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFpcnBvcnRTZWxlY3RMYWJlbDsgZWxzZSBlbXB0eUxhYmVsXCI+e3thaXJwb3J0U2VsZWN0TGFiZWx9fTwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eUxhYmVsPiZuYnNwOzwvbmctdGVtcGxhdGU+XG4gICAgPC9zcGFuPlxuICAgIDxpbnB1dCAjYWlycG9ydFNlbGVjdFxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIlxuICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJyZXN1bHRzSWRcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJ1wiXG4gICAgICBbYXR0ci5hcmlhLW93bnNdPVwicmVzdWx0c0lkXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaW5wdXQnKVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiYWlycG9ydFNlbGVjdFBsYWNlaG9sZGVyXCJcbiAgICAgIChmb2N1cyk9XCJzZXRPcGVuKClcIlxuICAgICAgKG1vdXNlZG93bik9XCJzZXRPcGVuKClcIlxuICAgICAgKGlucHV0KT1cImZpbHRlcigpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNb2RlbFwiLz5cbiAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2ljb24nKVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAqbmdJZj1cInNlbGVjdGVkTW9kZWw7IGVsc2UgaXNFbXB0eVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsQ2xlYXJcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCJzZWxlY3RlZE1vZGVsID8gJ3JlbW92ZS0tc2Vjb25kYXJ5JyA6ICdyZW1vdmUnXCI+PC9uYXMtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5PlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2ljb25dPVwiYWlycG9ydFNlbGVjdEljb25Nb2RpZmllclwiPjwvbmFzLWljb24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvc3Bhbj5cbiAgPC9sYWJlbD5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNyZWFjdGl2ZUZvcm0+XG4gIDxsYWJlbCBbaWRdPVwibGFiZWxJZFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhaXJwb3J0U2VsZWN0TGFiZWxcIlxuICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnd3JhcHBlcicsIFtvcGVuICYmICdhY3RpdmUnLCBzZWxlY3RlZE1vZGVsICYmICdmaWxsZWQnXSlcIlxuICAgIFtmb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCI+XG4gICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdsYWJlbCcpXCJcbiAgICAgICpuZ0lmPVwiYWlycG9ydFNlbGVjdExhYmVsXCI+e3thaXJwb3J0U2VsZWN0TGFiZWx9fTwvc3Bhbj5cbiAgICA8aW5wdXQgI2FpcnBvcnRTZWxlY3RcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCJcbiAgICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwicmVzdWx0c0lkXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbiA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgW2F0dHIuYXJpYS1vd25zXT1cInJlc3VsdHNJZFwiXG4gICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2lucHV0JylcIlxuICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJuYXNGb3JtQ29udHJvbE5hbWVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImFpcnBvcnRTZWxlY3RQbGFjZWhvbGRlclwiXG4gICAgICAobW91c2Vkb3duKT1cInNldE9wZW4oKVwiXG4gICAgICAoZm9jdXMpPVwic2V0T3BlbigpXCJcbiAgICAgIChpbnB1dCk9XCJmaWx0ZXIoKVwiXG4gICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIC8+XG4gICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdpY29uJylcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZE1vZGVsOyBlbHNlIGlzRW1wdHlcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbENsZWFyXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwic2VsZWN0ZWRNb2RlbCA/ICdyZW1vdmUtLXNlY29uZGFyeScgOiAncmVtb3ZlJ1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjaXNFbXB0eT5cbiAgICAgICAgPG5hcy1pY29uIFt0eXBlXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtpY29uXT1cImFpcnBvcnRTZWxlY3RJY29uTW9kaWZpZXJcIj48L25hcy1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gIDwvbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Jlc3VsdHMtd3JhcHBlcicpXCJcbiAgW2lkXT1cInJlc3VsdHNJZFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbiA/ICd0cnVlJyA6ICdmYWxzZSdcIj5cbiAgPHVsICNyZXN1bHRzXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICpuZ0lmPVwib3BlblwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygncmVzdWx0cycpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4aXN0cyhlbmFibGVHZW9sb2NhdGlvbikgJiYgZ2VvbG9jYXRpb25TdGF0ZSAhPT0gbnVsbCAmJiBnZW9sb2NhdGlvblN0YXRlICE9PSAwICYmIGlzVmFsaWRcIj5cbiAgICAgIDxsaSByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgIDxuYXMtYnV0dG9uIGxpbmtcbiAgICAgICAgICBzZWNvbmRhcnlcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2VvbG9jYXRpb25TdGF0ZSA9PT0gMlwiXG4gICAgICAgICAgW2Nzc1N0eWxlXT1cInsnaGVpZ2h0JzogJzY2cHgnLCAndGV4dC1kZWNvcmF0aW9uJzogJ3VuZGVybGluZScsICdkaXNwbGF5JzogJ2ZsZXgnLCAnanVzdGlmeS1jb250ZW50JzogJ3NwYWNlLWJldHdlZW4nfVwiXG4gICAgICAgICAgW2Nzc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgWydnZW9sb2NhdGlvbicsIGZvY3VzT25HZW9sb2NhdGlvbiAmJiBnZW9sb2NhdGlvblN0YXRlICE9PSAyICYmICdmb2N1cycsIGdlb2xvY2F0aW9uU3RhdGUgPT09IDIgJiYgJ2Rpc2FibGVkJ10pXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgIChjbGlja0NoYW5nZSk9XCJ1cGRhdGVDdXJyZW50UG9zaXRpb24oKVwiXG4gICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25HZW9sb2NhdGlvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbkdlb2xvY2F0aW9uSG92ZXIoZmFsc2UpXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZW9sb2NhdGlvblN0YXRlID09PSAxOyBlbHNlIGdlb2xvY2F0aW9uRGVuaWVkXCJcbiAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZ2VvbG9jYXRpb24nLCAnbGFiZWwnKVwiPnt7cmVzdWx0c0xhYmVscz8uZ2VvbG9jYXRpb259fTwvc3Bhbj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2dlb2xvY2F0aW9uRGVuaWVkPlxuICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdnZW9sb2NhdGlvbicsICdsYWJlbCcpXCI+e3tyZXN1bHRzTGFiZWxzPy5nZW9sb2NhdGlvbkRlbmllZH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5hcy1pY29uIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZ2VvbG9jYXRpb24nLCAnaWNvbicpXCJcbiAgICAgICAgICAgIFt0eXBlXT1cImdlb2xvY2F0aW9uSWNvblwiPjwvbmFzLWljb24+XG4gICAgICAgIDwvbmFzLWJ1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGxpIHJvbGU9XCJzZXBhcmF0b3JcIlxuICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdsaXN0LXNlY3Rpb24tbGFiZWwnKVwiXG4gICAgICAqbmdJZj1cImxhdGVzdFNlYXJjaGVzPy5sZW5ndGggPiAwXG4gICAgICAmJiBleGlzdHMoZGlzcGxheUxhdGVzdFNlYXJjaGVzKVxuICAgICAgJiYgcmVzdWx0c0xhYmVscz8ubGF0ZXN0U2VhcmNoZXNcbiAgICAgICYmIGlzVmFsaWRcIj5cbiAgICAgIDxzcGFuPnt7cmVzdWx0c0xhYmVscz8ubGF0ZXN0U2VhcmNoZXN9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleGlzdHMoZGlzcGxheUxhdGVzdFNlYXJjaGVzKSAmJiBpc1ZhbGlkXCI+XG4gICAgICA8bGkgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBhaXJwb3J0IG9mIGxhdGVzdFNlYXJjaGVzXCJcbiAgICAgICAgW2lkXT1cImdldExhdGVzdFNlYXJjaGVzQWlycG9ydElkKGFpcnBvcnQuY29kZSlcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGVcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xpc3QtaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgJiYgJ2ZvY3VzJylcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCBhaXJwb3J0LmNvZGUgPT09IGZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlICYmICdmb2N1cycpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWQoYWlycG9ydClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgICpuZ0lmPVwiZXhpc3RzKGRpc3BsYXlDbG9zZXN0QWlycG9ydHMpXG4gICAgICAgJiYgZ2VvbG9jYXRpb25TdGF0ZSAhPT0gbnVsbFxuICAgICAgICYmIGdlb2xvY2F0aW9uU3RhdGUgPT09IDBcbiAgICAgICAmJiBjbG9zZXN0QWlycG9ydHM/Lmxlbmd0aCA+IDBcbiAgICAgICAmJiByZXN1bHRzTGFiZWxzPy5jbG9zZXN0QWlycG9ydHNcbiAgICAgICAmJiBpc1ZhbGlkXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1zZWN0aW9uLWxhYmVsJylcIj5cbiAgICAgIDxzcGFuPnt7cmVzdWx0c0xhYmVscz8uY2xvc2VzdEFpcnBvcnRzfX08L3NwYW4+XG4gICAgPC9saT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhpc3RzKGRpc3BsYXlDbG9zZXN0QWlycG9ydHMpICYmIGdlb2xvY2F0aW9uU3RhdGUgPT09IDAgJiYgaXNWYWxpZFwiPlxuICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgYWlycG9ydCBvZiBjbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICBbaWRdPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzQWlycG9ydElkKGFpcnBvcnQuY29kZSlcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZVwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1pdGVtJywgYWlycG9ydC5jb2RlID09PSBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgYWlycG9ydC5jb2RlID09PSBmb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWQoYWlycG9ydClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1zZWN0aW9uLWxhYmVsJylcIlxuICAgICAgKm5nSWY9XCJkaXNwbGF5QWxsQWlycG9ydHNMYWJlbCAmJiByZXN1bHRzTGFiZWxzPy5hbGxBaXJwb3J0cyAmJiBpc1ZhbGlkXCI+XG4gICAgICA8c3Bhbj57e3Jlc3VsdHNMYWJlbHM/LmFsbEFpcnBvcnRzfX08L3NwYW4+XG4gICAgPC9saT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNWYWxpZFwiPlxuICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgYWlycG9ydCBvZiBmaWx0ZXJlZEFpcnBvcnRzXCJcbiAgICAgICAgW2lkXT1cImdldEFsbEFpcnBvcnRzQWlycG9ydElkKGFpcnBvcnQuY29kZSlcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZEFpcnBvcnRDb2RlXCJcbiAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdsaXN0LWl0ZW0nLCBhaXJwb3J0LmNvZGUgPT09IGZvY3VzZWRBaXJwb3J0Q29kZSAmJiAnZm9jdXMnKVwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWQoYWlycG9ydClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSAqbmdJZj1cIiFpc1ZhbGlkXCJcbiAgICAgIHJvbGU9XCJsaXN0aXRlbVwiPlxuICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCduYW1lJywgJ2ludmFsaWQnKVwiPnt7aW52YWxpZFRleHR9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9kaXY+XG48YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICB0YWJpbmRleD1cIjBcIlxuICAqbmdJZj1cIm9wZW5cIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgW25hc0NsYXNzXT1cImdldENsYXNzKCdiYWNrZHJvcCcpXCJcbiAgKGNsaWNrKT1cImJsdXIoKVwiPjwvYnV0dG9uPiJdfQ==
|