ecabs-components 1.1.33 → 1.1.35

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/README.md CHANGED
@@ -93,3 +93,7 @@ To get more help on the Angular CLI use `ng help` or go check out the [Angular C
93
93
  - **v1.1.31** — Prevent hover state persistence on disabled buttons.
94
94
  - **v1.1.32** — Return falsey value when no input is available in `DateTime` selector.
95
95
  - **v1.1.33** — Return falsey value when no input is available in `DateTime` selector through keyboard action deletion.
96
+ - **v1.1.34** — Emit `selectionChange` event when selecting item from `EcabsSelectV2`.
97
+ - Add collapse styling for `EcabsLogo`.
98
+ - **v1.1.35** — Add `waypointType` input to `EcabsAutoComplete`.
99
+ - Add `nativeElement` handles to custom inputs.
@@ -0,0 +1,10 @@
1
+ export var WaypointTypeEnum;
2
+ (function (WaypointTypeEnum) {
3
+ WaypointTypeEnum["PICKUP"] = "PICKUP";
4
+ WaypointTypeEnum["DROPOFF"] = "DROPOFF";
5
+ WaypointTypeEnum["GENERIC"] = "GENERIC";
6
+ WaypointTypeEnum["DIVERSION"] = "DIVERSION";
7
+ WaypointTypeEnum["CUSTOM"] = "CUSTOM";
8
+ WaypointTypeEnum["LOCATION"] = "LOCATION";
9
+ })(WaypointTypeEnum || (WaypointTypeEnum = {}));
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F5cG9pbnQuY29uc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2Jhc2UvY29uc3RzL3dheXBvaW50LmNvbnN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxnQkFPWDtBQVBELFdBQVksZ0JBQWdCO0lBQzFCLHFDQUFpQixDQUFBO0lBQ2pCLHVDQUFtQixDQUFBO0lBQ25CLHVDQUFtQixDQUFBO0lBQ25CLDJDQUF1QixDQUFBO0lBQ3ZCLHFDQUFpQixDQUFBO0lBQ2pCLHlDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFQVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTzNCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gV2F5cG9pbnRUeXBlRW51bSB7XHJcbiAgUElDS1VQID0gJ1BJQ0tVUCcsXHJcbiAgRFJPUE9GRiA9ICdEUk9QT0ZGJyxcclxuICBHRU5FUklDID0gJ0dFTkVSSUMnLFxyXG4gIERJVkVSU0lPTiA9ICdESVZFUlNJT04nLFxyXG4gIENVU1RPTSA9ICdDVVNUT00nLFxyXG4gIExPQ0FUSU9OID0gJ0xPQ0FUSU9OJyxcclxufVxyXG4iXX0=
@@ -66,6 +66,7 @@ export class EcabsBasePhoneComponent extends _NgxMatIntlTelInputMixinBase {
66
66
  countryChanged = new EventEmitter();
67
67
  matMenu;
68
68
  searchInput;
69
+ matCustomInput;
69
70
  id = `ecabs-intl-tel-input-${EcabsBasePhoneComponent.nextId++}`;
70
71
  get shouldLabelFloat() {
71
72
  return this.focused || !this.empty;
@@ -347,7 +348,7 @@ export class EcabsBasePhoneComponent extends _NgxMatIntlTelInputMixinBase {
347
348
  useValue: phoneNumberValidator,
348
349
  multi: true,
349
350
  },
350
- ], viewQueries: [{ propertyName: "matMenu", first: true, predicate: MatMenu, descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecabs-tel-input-container\">\r\n <button\r\n type=\"button\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n class=\"country-selector\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span\r\n class=\"country-selector-flag flag\"\r\n [ngClass]=\"flagClass(selectedCountry?.flagClass)\"\r\n ></span>\r\n <span class=\"country-selector-code\" *ngIf=\"selectedCountry?.dialCode\"\r\n >+{{ selectedCountry.dialCode }}</span\r\n >\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"ecabs-tel-input-mat-menu-panel\"\r\n backdropClass=\"ecabs-tel-input-overlay-backdrop\"\r\n overlayPanelClass=\"ecabs-tel-input-overlay-pane\">\r\n <input\r\n #searchInput\r\n *ngIf=\"enableSearch\"\r\n class=\"country-search\"\r\n [(ngModel)]=\"searchCriteria\"\r\n (ngModelChange)=\"onSearchInput()\"\r\n type=\"text\"\r\n [placeholder]=\"searchPlaceholder\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <ng-container *ngIf=\"!searchCriteria\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngFor=\"let country of preferredCountriesInDropDown\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\" \r\n [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }}\r\n <span *ngIf=\"country?.dialCode\">+{{ country.dialCode }}</span>\r\n </div>\r\n </button>\r\n <mat-divider *ngIf=\"preferredCountriesInDropDown?.length\"></mat-divider>\r\n </ng-container>\r\n <ng-container *ngFor=\"let country of allCountries\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngIf=\"country | search: searchCriteria\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\" [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }} +{{ country.dialCode }}\r\n </div>\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <input\r\n matInput\r\n type=\"tel\"\r\n autocomplete=\"tel\"\r\n [ngClass]=\"cssClass\"\r\n (blur)=\"onTouched()\"\r\n (keypress)=\"onInputKeyPress($event)\"\r\n [(ngModel)]=\"phoneNumber\"\r\n (ngModelChange)=\"onPhoneNumberChangeDebounce()\"\r\n [errorStateMatcher]=\"errorStateMatcher\"\r\n [placeholder]=\"inputPlaceholder\"\r\n [disabled]=\"disabled\"\r\n [aria-describedby]=\"describedBy\"\r\n />\r\n</div>", styles: ["input:not(.country-search){border:none;background:none;outline:none;font:inherit;width:100%;box-sizing:border-box;padding:0 6px 0 90px;position:relative;z-index:0;margin-top:0!important;margin-bottom:0!important;margin-right:0;margin-left:0}input.country-search{width:100%;height:34px;border:none;border-bottom:1px solid #ddd;font-size:14px;padding:20px 20px 24px;position:sticky;top:0;background-color:#fff;z-index:9}.icon-wrapper{padding-right:24px}.flag{background-size:100% auto;filter:drop-shadow(1px 1px 1px rgba(0,0,0,.54));height:14px;width:24px}.icon-wrapper,.label-wrapper{display:table-cell;vertical-align:middle}.country-selector{border-radius:0;color:#000000de;flex-shrink:0;height:initial;line-height:unset;width:90px;padding:1px;opacity:0;transition:opacity .2s;position:absolute;z-index:1;inset:0 auto 0 0;font-size:inherit;font-weight:inherit;background-position:right center;background-repeat:no-repeat;background-size:18px auto}.country-selector:disabled{color:#00000061}:host.ngx-floating .country-selector{opacity:1!important}.country-selector-flag{display:inline-block;margin-right:.5ex}.country-list-button{color:#000000de;direction:ltr;font-size:16px;font-weight:400;height:initial;line-height:normal;min-height:48px;padding:14px 24px;text-align:left;text-transform:none;width:100%}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: i10.SearchPipe, name: "search" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
351
+ ], viewQueries: [{ propertyName: "matMenu", first: true, predicate: MatMenu, descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "matCustomInput", first: true, predicate: ["matCustomInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecabs-tel-input-container\">\r\n <button\r\n type=\"button\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n class=\"country-selector\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span\r\n class=\"country-selector-flag flag\"\r\n [ngClass]=\"flagClass(selectedCountry?.flagClass)\"\r\n ></span>\r\n <span class=\"country-selector-code\" *ngIf=\"selectedCountry?.dialCode\"\r\n >+{{ selectedCountry.dialCode }}</span\r\n >\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"ecabs-tel-input-mat-menu-panel\"\r\n backdropClass=\"ecabs-tel-input-overlay-backdrop\"\r\n overlayPanelClass=\"ecabs-tel-input-overlay-pane\">\r\n <input\r\n #searchInput\r\n *ngIf=\"enableSearch\"\r\n class=\"country-search\"\r\n [(ngModel)]=\"searchCriteria\"\r\n (ngModelChange)=\"onSearchInput()\"\r\n type=\"text\"\r\n [placeholder]=\"searchPlaceholder\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <ng-container *ngIf=\"!searchCriteria\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngFor=\"let country of preferredCountriesInDropDown\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\"\r\n [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }}\r\n <span *ngIf=\"country?.dialCode\">+{{ country.dialCode }}</span>\r\n </div>\r\n </button>\r\n <mat-divider *ngIf=\"preferredCountriesInDropDown?.length\"></mat-divider>\r\n </ng-container>\r\n <ng-container *ngFor=\"let country of allCountries\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngIf=\"country | search: searchCriteria\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\" [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }} +{{ country.dialCode }}\r\n </div>\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <input #matCustomInput\r\n matInput\r\n type=\"tel\"\r\n autocomplete=\"tel\"\r\n [ngClass]=\"cssClass\"\r\n (blur)=\"onTouched()\"\r\n (keypress)=\"onInputKeyPress($event)\"\r\n [(ngModel)]=\"phoneNumber\"\r\n (ngModelChange)=\"onPhoneNumberChangeDebounce()\"\r\n [errorStateMatcher]=\"errorStateMatcher\"\r\n [placeholder]=\"inputPlaceholder\"\r\n [disabled]=\"disabled\"\r\n [aria-describedby]=\"describedBy\"\r\n />\r\n</div>\r\n", styles: ["input:not(.country-search){border:none;background:none;outline:none;font:inherit;width:100%;box-sizing:border-box;padding:0 6px 0 90px;position:relative;z-index:0;margin-top:0!important;margin-bottom:0!important;margin-right:0;margin-left:0}input.country-search{width:100%;height:34px;border:none;border-bottom:1px solid #ddd;font-size:14px;padding:20px 20px 24px;position:sticky;top:0;background-color:#fff;z-index:9}.icon-wrapper{padding-right:24px}.flag{background-size:100% auto;filter:drop-shadow(1px 1px 1px rgba(0,0,0,.54));height:14px;width:24px}.icon-wrapper,.label-wrapper{display:table-cell;vertical-align:middle}.country-selector{border-radius:0;color:#000000de;flex-shrink:0;height:initial;line-height:unset;width:90px;padding:1px;opacity:0;transition:opacity .2s;position:absolute;z-index:1;inset:0 auto 0 0;font-size:inherit;font-weight:inherit;background-position:right center;background-repeat:no-repeat;background-size:18px auto}.country-selector:disabled{color:#00000061}:host.ngx-floating .country-selector{opacity:1!important}.country-selector-flag{display:inline-block;margin-right:.5ex}.country-list-button{color:#000000de;direction:ltr;font-size:16px;font-weight:400;height:initial;line-height:normal;min-height:48px;padding:14px 24px;text-align:left;text-transform:none;width:100%}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: i10.SearchPipe, name: "search" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
351
352
  }
352
353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsBasePhoneComponent, decorators: [{
353
354
  type: Component,
@@ -359,7 +360,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
359
360
  useValue: phoneNumberValidator,
360
361
  multi: true,
361
362
  },
362
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ecabs-tel-input-container\">\r\n <button\r\n type=\"button\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n class=\"country-selector\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span\r\n class=\"country-selector-flag flag\"\r\n [ngClass]=\"flagClass(selectedCountry?.flagClass)\"\r\n ></span>\r\n <span class=\"country-selector-code\" *ngIf=\"selectedCountry?.dialCode\"\r\n >+{{ selectedCountry.dialCode }}</span\r\n >\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"ecabs-tel-input-mat-menu-panel\"\r\n backdropClass=\"ecabs-tel-input-overlay-backdrop\"\r\n overlayPanelClass=\"ecabs-tel-input-overlay-pane\">\r\n <input\r\n #searchInput\r\n *ngIf=\"enableSearch\"\r\n class=\"country-search\"\r\n [(ngModel)]=\"searchCriteria\"\r\n (ngModelChange)=\"onSearchInput()\"\r\n type=\"text\"\r\n [placeholder]=\"searchPlaceholder\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <ng-container *ngIf=\"!searchCriteria\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngFor=\"let country of preferredCountriesInDropDown\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\" \r\n [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }}\r\n <span *ngIf=\"country?.dialCode\">+{{ country.dialCode }}</span>\r\n </div>\r\n </button>\r\n <mat-divider *ngIf=\"preferredCountriesInDropDown?.length\"></mat-divider>\r\n </ng-container>\r\n <ng-container *ngFor=\"let country of allCountries\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngIf=\"country | search: searchCriteria\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\" [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }} +{{ country.dialCode }}\r\n </div>\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <input\r\n matInput\r\n type=\"tel\"\r\n autocomplete=\"tel\"\r\n [ngClass]=\"cssClass\"\r\n (blur)=\"onTouched()\"\r\n (keypress)=\"onInputKeyPress($event)\"\r\n [(ngModel)]=\"phoneNumber\"\r\n (ngModelChange)=\"onPhoneNumberChangeDebounce()\"\r\n [errorStateMatcher]=\"errorStateMatcher\"\r\n [placeholder]=\"inputPlaceholder\"\r\n [disabled]=\"disabled\"\r\n [aria-describedby]=\"describedBy\"\r\n />\r\n</div>", styles: ["input:not(.country-search){border:none;background:none;outline:none;font:inherit;width:100%;box-sizing:border-box;padding:0 6px 0 90px;position:relative;z-index:0;margin-top:0!important;margin-bottom:0!important;margin-right:0;margin-left:0}input.country-search{width:100%;height:34px;border:none;border-bottom:1px solid #ddd;font-size:14px;padding:20px 20px 24px;position:sticky;top:0;background-color:#fff;z-index:9}.icon-wrapper{padding-right:24px}.flag{background-size:100% auto;filter:drop-shadow(1px 1px 1px rgba(0,0,0,.54));height:14px;width:24px}.icon-wrapper,.label-wrapper{display:table-cell;vertical-align:middle}.country-selector{border-radius:0;color:#000000de;flex-shrink:0;height:initial;line-height:unset;width:90px;padding:1px;opacity:0;transition:opacity .2s;position:absolute;z-index:1;inset:0 auto 0 0;font-size:inherit;font-weight:inherit;background-position:right center;background-repeat:no-repeat;background-size:18px auto}.country-selector:disabled{color:#00000061}:host.ngx-floating .country-selector{opacity:1!important}.country-selector-flag{display:inline-block;margin-right:.5ex}.country-list-button{color:#000000de;direction:ltr;font-size:16px;font-weight:400;height:initial;line-height:normal;min-height:48px;padding:14px 24px;text-align:left;text-transform:none;width:100%}\n"] }]
363
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ecabs-tel-input-container\">\r\n <button\r\n type=\"button\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n class=\"country-selector\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span\r\n class=\"country-selector-flag flag\"\r\n [ngClass]=\"flagClass(selectedCountry?.flagClass)\"\r\n ></span>\r\n <span class=\"country-selector-code\" *ngIf=\"selectedCountry?.dialCode\"\r\n >+{{ selectedCountry.dialCode }}</span\r\n >\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"ecabs-tel-input-mat-menu-panel\"\r\n backdropClass=\"ecabs-tel-input-overlay-backdrop\"\r\n overlayPanelClass=\"ecabs-tel-input-overlay-pane\">\r\n <input\r\n #searchInput\r\n *ngIf=\"enableSearch\"\r\n class=\"country-search\"\r\n [(ngModel)]=\"searchCriteria\"\r\n (ngModelChange)=\"onSearchInput()\"\r\n type=\"text\"\r\n [placeholder]=\"searchPlaceholder\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <ng-container *ngIf=\"!searchCriteria\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngFor=\"let country of preferredCountriesInDropDown\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\"\r\n [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }}\r\n <span *ngIf=\"country?.dialCode\">+{{ country.dialCode }}</span>\r\n </div>\r\n </button>\r\n <mat-divider *ngIf=\"preferredCountriesInDropDown?.length\"></mat-divider>\r\n </ng-container>\r\n <ng-container *ngFor=\"let country of allCountries\">\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n class=\"country-list-button\"\r\n *ngIf=\"country | search: searchCriteria\"\r\n (click)=\"onCountrySelect(country)\"\r\n >\r\n <div class=\"icon-wrapper\">\r\n <div class=\"flag\" [ngClass]=\"flagClass(country.flagClass)\"></div>\r\n </div>\r\n <div class=\"label-wrapper\">\r\n {{ country.name }} +{{ country.dialCode }}\r\n </div>\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <input #matCustomInput\r\n matInput\r\n type=\"tel\"\r\n autocomplete=\"tel\"\r\n [ngClass]=\"cssClass\"\r\n (blur)=\"onTouched()\"\r\n (keypress)=\"onInputKeyPress($event)\"\r\n [(ngModel)]=\"phoneNumber\"\r\n (ngModelChange)=\"onPhoneNumberChangeDebounce()\"\r\n [errorStateMatcher]=\"errorStateMatcher\"\r\n [placeholder]=\"inputPlaceholder\"\r\n [disabled]=\"disabled\"\r\n [aria-describedby]=\"describedBy\"\r\n />\r\n</div>\r\n", styles: ["input:not(.country-search){border:none;background:none;outline:none;font:inherit;width:100%;box-sizing:border-box;padding:0 6px 0 90px;position:relative;z-index:0;margin-top:0!important;margin-bottom:0!important;margin-right:0;margin-left:0}input.country-search{width:100%;height:34px;border:none;border-bottom:1px solid #ddd;font-size:14px;padding:20px 20px 24px;position:sticky;top:0;background-color:#fff;z-index:9}.icon-wrapper{padding-right:24px}.flag{background-size:100% auto;filter:drop-shadow(1px 1px 1px rgba(0,0,0,.54));height:14px;width:24px}.icon-wrapper,.label-wrapper{display:table-cell;vertical-align:middle}.country-selector{border-radius:0;color:#000000de;flex-shrink:0;height:initial;line-height:unset;width:90px;padding:1px;opacity:0;transition:opacity .2s;position:absolute;z-index:1;inset:0 auto 0 0;font-size:inherit;font-weight:inherit;background-position:right center;background-repeat:no-repeat;background-size:18px auto}.country-selector:disabled{color:#00000061}:host.ngx-floating .country-selector{opacity:1!important}.country-selector-flag{display:inline-block;margin-right:.5ex}.country-list-button{color:#000000de;direction:ltr;font-size:16px;font-weight:400;height:initial;line-height:normal;min-height:48px;padding:14px 24px;text-align:left;text-transform:none;width:100%}\n"] }]
363
364
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CountryCode }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i3.NgControl, decorators: [{
364
365
  type: Optional
365
366
  }, {
@@ -406,10 +407,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
406
407
  }], searchInput: [{
407
408
  type: ViewChild,
408
409
  args: ['searchInput', { static: false }]
410
+ }], matCustomInput: [{
411
+ type: ViewChild,
412
+ args: ['matCustomInput', { static: false }]
409
413
  }], id: [{
410
414
  type: HostBinding
411
415
  }], shouldLabelFloat: [{
412
416
  type: HostBinding,
413
417
  args: ['class.ngx-floating']
414
418
  }] } });
415
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtYmFzZS1waG9uZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtYmFzZS1waG9uZS1pbnB1dC9lY2Ficy1iYXNlLXBob25lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1iYXNlLXBob25lLWlucHV0L2VjYWJzLWJhc2UtcGhvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBQ3BELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuRSxPQUFPLEVBSUwsYUFBYSxHQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLFNBQVMsRUFHVCxnQkFBZ0IsRUFFaEIsMEJBQTBCLEdBRTNCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixlQUFlLEdBR2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7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dCI6WyIvLyBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgU2VsZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gIE5nQ29udHJvbCxcclxuICBOZ0Zvcm0sXHJcbiAgTkdfVkFMSURBVE9SUyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgQXNZb3VUeXBlLFxyXG4gIENvdW50cnlDb2RlIGFzIENDLFxyXG4gIEUxNjROdW1iZXIsXHJcbiAgZ2V0RXhhbXBsZU51bWJlcixcclxuICBOYXRpb25hbE51bWJlcixcclxuICBwYXJzZVBob25lTnVtYmVyRnJvbVN0cmluZyxcclxuICBQaG9uZU51bWJlcixcclxufSBmcm9tICdsaWJwaG9uZW51bWJlci1qcyc7XHJcblxyXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7XHJcbiAgQ2FuVXBkYXRlRXJyb3JTdGF0ZSxcclxuICBFcnJvclN0YXRlTWF0Y2hlcixcclxuICBtaXhpbkVycm9yU3RhdGUsXHJcbiAgX0Fic3RyYWN0Q29uc3RydWN0b3IsXHJcbiAgX0NvbnN0cnVjdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3VudHJ5Q29kZSwgRXhhbXBsZXMgfSBmcm9tICcuLi9iYXNlL2NvbnN0cy9jb3VudHJ5LWNvZGVzJztcclxuaW1wb3J0IHsgcGhvbmVOdW1iZXJWYWxpZGF0b3IgfSBmcm9tICcuLi9iYXNlL3ZhbGlkYXRvcnMvcGhvbmUtbnVtYmVyLnZhbGlkYXRvcic7XHJcbmltcG9ydCB7IENvdW50cnksIFBob25lTnVtYmVyRm9ybWF0IH0gZnJvbSAnLi4vYmFzZS9tb2RlbHMvcGhvbmUubW9kZWxzJztcclxuXHJcbmNsYXNzIE5neE1hdEludGxUZWxJbnB1dEJhc2Uge1xyXG4gIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG4gICAgcHVibGljIF9wYXJlbnRGb3JtOiBOZ0Zvcm0sXHJcbiAgICBwdWJsaWMgX3BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gICAgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICkge31cclxufVxyXG5cclxuZGVjbGFyZSB0eXBlIENhblVwZGF0ZUVycm9yU3RhdGVDdG9yID0gX0NvbnN0cnVjdG9yPENhblVwZGF0ZUVycm9yU3RhdGU+ICZcclxuICBfQWJzdHJhY3RDb25zdHJ1Y3RvcjxDYW5VcGRhdGVFcnJvclN0YXRlPjtcclxuXHJcbmNvbnN0IF9OZ3hNYXRJbnRsVGVsSW5wdXRNaXhpbkJhc2U6IENhblVwZGF0ZUVycm9yU3RhdGVDdG9yICZcclxuICB0eXBlb2YgTmd4TWF0SW50bFRlbElucHV0QmFzZSA9IG1peGluRXJyb3JTdGF0ZShOZ3hNYXRJbnRsVGVsSW5wdXRCYXNlKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtYmFzZS1waG9uZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VjYWJzLWJhc2UtcGhvbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLWJhc2UtcGhvbmUuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIENvdW50cnlDb2RlLFxyXG4gICAgeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRWNhYnNCYXNlUGhvbmVDb21wb25lbnQgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlVmFsdWU6IHBob25lTnVtYmVyVmFsaWRhdG9yLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVjYWJzQmFzZVBob25lQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBfTmd4TWF0SW50bFRlbElucHV0TWl4aW5CYXNlXHJcbiAgaW1wbGVtZW50c1xyXG4gICAgT25Jbml0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgRG9DaGVjayxcclxuICAgIENhblVwZGF0ZUVycm9yU3RhdGUsXHJcbiAgICBNYXRGb3JtRmllbGRDb250cm9sPGFueT5cclxue1xyXG4gIEBJbnB1dCgpIHByZWZlcnJlZENvdW50cmllczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBlbmFibGVQbGFjZWhvbGRlciA9IHRydWU7XHJcbiAgQElucHV0KCkgaW5wdXRQbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGNzc0NsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG9ubHlDb3VudHJpZXM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgb3ZlcnJpZGUgZXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyID1cclxuICAgIG5ldyBFcnJvclN0YXRlTWF0Y2hlcigpO1xyXG4gIEBJbnB1dCgpIGVuYWJsZVNlYXJjaCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgZGVzY3JpYmVkQnkgPSAnJztcclxuICBASW5wdXQoKSBkZWJvdW5jZVRpbWVNcztcclxuICBASW5wdXQoKVxyXG4gIGdldCBmb3JtYXQoKTogUGhvbmVOdW1iZXJGb3JtYXQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXIgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGNvdW50cnlDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb3VudHJ5PigpO1xyXG5cclxuICBAVmlld0NoaWxkKE1hdE1lbnUpIG1hdE1lbnU6IE1hdE1lbnUgfCB1bmRlZmluZWQ7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKClcclxuICBpZCA9IGBlY2Ficy1pbnRsLXRlbC1pbnB1dC0ke0VjYWJzQmFzZVBob25lQ29tcG9uZW50Lm5leHRJZCsrfWA7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3Mubmd4LWZsb2F0aW5nJylcclxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfY2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcHJldmlvdXNGb3JtYXR0ZWROdW1iZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9mb3JtYXQ6IFBob25lTnVtYmVyRm9ybWF0ID0gJ2RlZmF1bHQnO1xyXG4gIG92ZXJyaWRlIHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGZvY3VzZWQgPSBmYWxzZTtcclxuICBwaG9uZU51bWJlcjogTmF0aW9uYWxOdW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgYWxsQ291bnRyaWVzOiBDb3VudHJ5W10gPSBbXTtcclxuICBwcmVmZXJyZWRDb3VudHJpZXNJbkRyb3BEb3duOiBDb3VudHJ5W10gPSBbXTtcclxuICBzZWxlY3RlZENvdW50cnk6IENvdW50cnkgfCB1bmRlZmluZWQ7XHJcbiAgbnVtYmVySW5zdGFuY2U6IFBob25lTnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIHZhbHVlOiBFMTY0TnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlYXJjaENyaXRlcmlhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5waG9uZU51bWJlcjtcclxuICB9XHJcblxyXG4gIHNldCBmb3JtYXQodmFsdWU6IFBob25lTnVtYmVyRm9ybWF0KSB7XHJcbiAgICB0aGlzLl9mb3JtYXQgPSB2YWx1ZTtcclxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmZvcm1hdHRlZFBob25lTnVtYmVyO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFBob25lTnVtYmVyUGxhY2VIb2xkZXIoY291bnRyeUlTT0NvZGU6IENDKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGdldEV4YW1wbGVOdW1iZXIoY291bnRyeUlTT0NvZGUsIEV4YW1wbGVzKTtcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtYm9vbGVhbi1jYXN0XHJcbiAgICByZXR1cm4gISFyZXN1bHQgPyByZXN1bHQubnVtYmVyLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiB1bmtub3duKSA9PiB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgY291bnRyeUNvZGVEYXRhOiBDb3VudHJ5Q29kZSxcclxuICAgIHByaXZhdGUgZm06IEZvY3VzTW9uaXRvcixcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgb3ZlcnJpZGUgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtOiBOZ0Zvcm0sXHJcbiAgICBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICAgIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXHJcbiAgKSB7XHJcbiAgICBzdXBlcihkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsIHBhcmVudEZvcm0sIHBhcmVudEZvcm1Hcm91cCwgbmdDb250cm9sKTtcclxuXHJcbiAgICBmbS5tb25pdG9yKGVsUmVmLCB0cnVlKS5zdWJzY3JpYmUoKG9yaWdpbikgPT4ge1xyXG4gICAgICBpZiAodGhpcy5mb2N1c2VkICYmICFvcmlnaW4pIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9ICEhb3JpZ2luO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmV0Y2hDb3VudHJ5RGF0YSgpO1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZWFyY2hQbGFjZWhvbGRlcikge1xyXG4gICAgICB0aGlzLnNlYXJjaFBsYWNlaG9sZGVyID0gJ1NlYXJjaCAuLi4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJlZmVycmVkQ291bnRyaWVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnByZWZlcnJlZENvdW50cmllcy5mb3JFYWNoKChpc28yKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJlZmVycmVkQ291bnRyeSA9IHRoaXMuYWxsQ291bnRyaWVzXHJcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PiBjLmlzbzIgPT09IGlzbzIpXHJcbiAgICAgICAgICAuc2hpZnQoKTtcclxuICAgICAgICBpZiAocHJlZmVycmVkQ291bnRyeSkge1xyXG4gICAgICAgICAgdGhpcy5wcmVmZXJyZWRDb3VudHJpZXNJbkRyb3BEb3duLnB1c2gocHJlZmVycmVkQ291bnRyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9ubHlDb3VudHJpZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYWxsQ291bnRyaWVzID0gdGhpcy5hbGxDb3VudHJpZXMuZmlsdGVyKChjKSA9PlxyXG4gICAgICAgIHRoaXMub25seUNvdW50cmllcy5pbmNsdWRlcyhjLmlzbzIpLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubnVtYmVySW5zdGFuY2UgJiYgdGhpcy5udW1iZXJJbnN0YW5jZS5jb3VudHJ5KSB7XHJcbiAgICAgIC8vIElmIGFuIGV4aXN0aW5nIG51bWJlciBpcyBwcmVzZW50LCB3ZSB1c2UgaXQgdG8gZGV0ZXJtaW5lIHNlbGVjdGVkQ291bnRyeVxyXG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZ2V0Q291bnRyeSh0aGlzLm51bWJlckluc3RhbmNlLmNvdW50cnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMucHJlZmVycmVkQ291bnRyaWVzSW5Ecm9wRG93bi5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMucHJlZmVycmVkQ291bnRyaWVzSW5Ecm9wRG93blswXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuYWxsQ291bnRyaWVzWzBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jaGFuZ2VTdWJqZWN0XHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZU1zKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblBob25lTnVtYmVyQ2hhbmdlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5jb3VudHJ5Q2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy51cGRhdGVFcnJvclN0YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYpO1xyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25QaG9uZU51bWJlckNoYW5nZURlYm91bmNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBvblBob25lTnVtYmVyQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5udW1iZXJJbnN0YW5jZSA9IHBhcnNlUGhvbmVOdW1iZXJGcm9tU3RyaW5nKFxyXG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXI/LnRvU3RyaW5nKCkgfHwgJycsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnk/LmlzbzIudG9VcHBlckNhc2UoKSBhcyBDQyxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mb3JtYXRBc1lvdVR5cGVJZkVuYWJsZWQoKTtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtYmVySW5zdGFuY2U/Lm51bWJlcjtcclxuICAgICAgaWYgKHRoaXMubnVtYmVySW5zdGFuY2UgJiYgdGhpcy5udW1iZXJJbnN0YW5jZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICBpZiAodGhpcy5waG9uZU51bWJlciAhPT0gdGhpcy5mb3JtYXR0ZWRQaG9uZU51bWJlcikge1xyXG4gICAgICAgICAgdGhpcy5waG9uZU51bWJlciA9IHRoaXMuZm9ybWF0dGVkUGhvbmVOdW1iZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc28yICE9PSB0aGlzLm51bWJlckluc3RhbmNlLmNvdW50cnkgJiZcclxuICAgICAgICAgICEhdGhpcy5udW1iZXJJbnN0YW5jZS5jb3VudHJ5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZ2V0Q291bnRyeSh0aGlzLm51bWJlckluc3RhbmNlLmNvdW50cnkpO1xyXG4gICAgICAgICAgdGhpcy5jb3VudHJ5Q2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBpZiBubyBwb3NzaWJsZSBudW1iZXJzIGFyZSB0aGVyZSxcclxuICAgICAgLy8gdGhlbiB0aGUgZnVsbCBudW1iZXIgaXMgcGFzc2VkIHNvIHRoYXQgdmFsaWRhdG9yIGNvdWxkIGJlIHRyaWdnZXJlZCBhbmQgcHJvcGVyIGVycm9yIGNvdWxkIGJlIHNob3duXHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnBob25lTnVtYmVyPy50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25Db3VudHJ5U2VsZWN0KGNvdW50cnk6IENvdW50cnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBob25lTnVtYmVyKSB7XHJcbiAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLm51bWJlckluc3RhbmNlPy5uYXRpb25hbE51bWJlcjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gY291bnRyeTtcclxuICAgIHRoaXMuY291bnRyeUNoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XHJcbiAgICB0aGlzLm9uUGhvbmVOdW1iZXJDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGdldENvdW50cnkoY29kZTogc3RyaW5nKTogQ291bnRyeSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmFsbENvdW50cmllcy5maW5kKChjKSA9PiBjLmlzbzIgPT09IGNvZGUudG9Mb3dlckNhc2UoKSkgfHwge1xyXG4gICAgICAgIG5hbWU6ICdVTicsXHJcbiAgICAgICAgaXNvMjogJ1VOJyxcclxuICAgICAgICBkaWFsQ29kZTogJycsXHJcbiAgICAgICAgcHJpb3JpdHk6IDAsXHJcbiAgICAgICAgYXJlYUNvZGVzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZmxhZ0NsYXNzOiAnVU4nLFxyXG4gICAgICAgIHBsYWNlSG9sZGVyOiAnJyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRLZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9bMC05K1xcLSBdLztcclxuICAgIGlmICghcGF0dGVybi50ZXN0KGV2ZW50LmtleSkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZsYWdDbGFzcyhsYW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBmaSBmaS0ke2xhbmc/LnNsaWNlKC0yKS50b0xvd2VyQ2FzZSgpfWA7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLm51bWJlckluc3RhbmNlID0gcGFyc2VQaG9uZU51bWJlckZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5udW1iZXJJbnN0YW5jZSkge1xyXG4gICAgICAgIGNvbnN0IGNvdW50cnlDb2RlID0gdGhpcy5udW1iZXJJbnN0YW5jZS5jb3VudHJ5O1xyXG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmZvcm1hdHRlZFBob25lTnVtYmVyO1xyXG4gICAgICAgIGlmICghY291bnRyeUNvZGUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZ2V0Q291bnRyeShjb3VudHJ5Q29kZSk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5LmRpYWxDb2RlICYmXHJcbiAgICAgICAgICAgICF0aGlzLnByZWZlcnJlZENvdW50cmllcy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkQ291bnRyeS5pc28yKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkQ291bnRyaWVzSW5Ecm9wRG93bi5wdXNoKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY291bnRyeUNoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XHJcblxyXG4gICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZSBpcyBzZXRcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5waG9uZU51bWJlciA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsdWUgaXMgc2V0IGZyb20gb3V0c2lkZSB1c2luZyBzZXRWYWx1ZSgpXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpbnB1dCcpIHtcclxuICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykhLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSAnJztcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaElucHV0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZldGNoQ291bnRyeURhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvdW50cnlDb2RlRGF0YS5hbGxDb3VudHJpZXMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICBjb25zdCBjb3VudHJ5OiBDb3VudHJ5ID0ge1xyXG4gICAgICAgIG5hbWU6IGNbMF0udG9TdHJpbmcoKSxcclxuICAgICAgICBpc28yOiBjWzFdLnRvU3RyaW5nKCksXHJcbiAgICAgICAgZGlhbENvZGU6IGNbMl0udG9TdHJpbmcoKSxcclxuICAgICAgICBwcmlvcml0eTogK2NbM10gfHwgMCxcclxuICAgICAgICBhcmVhQ29kZXM6IChjWzRdIGFzIHN0cmluZ1tdKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgZmxhZ0NsYXNzOiBjWzFdLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSxcclxuICAgICAgICBwbGFjZUhvbGRlcjogJycsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVQbGFjZWhvbGRlcikge1xyXG4gICAgICAgIGNvdW50cnkucGxhY2VIb2xkZXIgPSBFY2Fic0Jhc2VQaG9uZUNvbXBvbmVudC5nZXRQaG9uZU51bWJlclBsYWNlSG9sZGVyKFxyXG4gICAgICAgICAgY291bnRyeS5pc28yLnRvVXBwZXJDYXNlKCkgYXMgQ0MsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hbGxDb3VudHJpZXMucHVzaChjb3VudHJ5KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgZm9ybWF0dGVkUGhvbmVOdW1iZXIoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5udW1iZXJJbnN0YW5jZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5waG9uZU51bWJlcj8udG9TdHJpbmcoKSB8fCAnJztcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5mb3JtYXQpIHtcclxuICAgICAgY2FzZSAnbmF0aW9uYWwnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLm51bWJlckluc3RhbmNlLmZvcm1hdE5hdGlvbmFsKCk7XHJcblxyXG4gICAgICBjYXNlICdpbnRlcm5hdGlvbmFsJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5udW1iZXJJbnN0YW5jZS5mb3JtYXRJbnRlcm5hdGlvbmFsKCk7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLm51bWJlckluc3RhbmNlLm5hdGlvbmFsTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdEFzWW91VHlwZUlmRW5hYmxlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gJ2RlZmF1bHQnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGFzWW91VHlwZTogQXNZb3VUeXBlID0gbmV3IEFzWW91VHlwZShcclxuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnk/LmlzbzIudG9VcHBlckNhc2UoKSBhcyBDQyxcclxuICAgICk7XHJcbiAgICAvLyBUbyBhdm9pZCBjYXJldCBwb3NpdGlvbmluZyB3ZSBhcHBseSBmb3JtYXR0aW5nIG9ubHkgaWYgdGhlIGNhcmV0IGlzIGF0IHRoZSBlbmQ6XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucGhvbmVOdW1iZXJcclxuICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAuc3RhcnRzV2l0aCh0aGlzLl9wcmV2aW91c0Zvcm1hdHRlZE51bWJlciB8fCAnJylcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBob25lTnVtYmVyID0gYXNZb3VUeXBlLmlucHV0KHRoaXMucGhvbmVOdW1iZXIudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wcmV2aW91c0Zvcm1hdHRlZE51bWJlciA9IHRoaXMucGhvbmVOdW1iZXI/LnRvU3RyaW5nKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJlY2Ficy10ZWwtaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBtYXQtYnV0dG9uXHJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXHJcbiAgICBjbGFzcz1cImNvdW50cnktc2VsZWN0b3JcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICA+XHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cImNvdW50cnktc2VsZWN0b3ItZmxhZyBmbGFnXCJcclxuICAgICAgW25nQ2xhc3NdPVwiZmxhZ0NsYXNzKHNlbGVjdGVkQ291bnRyeT8uZmxhZ0NsYXNzKVwiXHJcbiAgICA+PC9zcGFuPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjb3VudHJ5LXNlbGVjdG9yLWNvZGVcIiAqbmdJZj1cInNlbGVjdGVkQ291bnRyeT8uZGlhbENvZGVcIlxyXG4gICAgPit7eyBzZWxlY3RlZENvdW50cnkuZGlhbENvZGUgfX08L3NwYW5cclxuICAgID5cclxuICA8L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJlY2Ficy10ZWwtaW5wdXQtbWF0LW1lbnUtcGFuZWxcIlxyXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzPVwiZWNhYnMtdGVsLWlucHV0LW92ZXJsYXktYmFja2Ryb3BcIlxyXG4gICAgICAgICAgICBvdmVybGF5UGFuZWxDbGFzcz1cImVjYWJzLXRlbC1pbnB1dC1vdmVybGF5LXBhbmVcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICAjc2VhcmNoSW5wdXRcclxuICAgICAgKm5nSWY9XCJlbmFibGVTZWFyY2hcIlxyXG4gICAgICBjbGFzcz1cImNvdW50cnktc2VhcmNoXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hDcml0ZXJpYVwiXHJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoSW5wdXQoKVwiXHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAvPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWFyY2hDcml0ZXJpYVwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgIGNsYXNzPVwiY291bnRyeS1saXN0LWJ1dHRvblwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvdW50cnkgb2YgcHJlZmVycmVkQ291bnRyaWVzSW5Ecm9wRG93blwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ291bnRyeVNlbGVjdChjb3VudHJ5KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi13cmFwcGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxhZ1wiICAgIFxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZmxhZ0NsYXNzKGNvdW50cnkuZmxhZ0NsYXNzKVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICB7eyBjb3VudHJ5Lm5hbWUgfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY291bnRyeT8uZGlhbENvZGVcIj4re3sgY291bnRyeS5kaWFsQ29kZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cInByZWZlcnJlZENvdW50cmllc0luRHJvcERvd24/Lmxlbmd0aFwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvdW50cnkgb2YgYWxsQ291bnRyaWVzXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgY2xhc3M9XCJjb3VudHJ5LWxpc3QtYnV0dG9uXCJcclxuICAgICAgICAqbmdJZj1cImNvdW50cnkgfCBzZWFyY2g6IHNlYXJjaENyaXRlcmlhXCJcclxuICAgICAgICAoY2xpY2spPVwib25Db3VudHJ5U2VsZWN0KGNvdW50cnkpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGFnXCIgW25nQ2xhc3NdPVwiZmxhZ0NsYXNzKGNvdW50cnkuZmxhZ0NsYXNzKVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICB7eyBjb3VudHJ5Lm5hbWUgfX0gK3t7IGNvdW50cnkuZGlhbENvZGUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L21hdC1tZW51PlxyXG5cclxuICA8aW5wdXRcclxuICAgIG1hdElucHV0XHJcbiAgICB0eXBlPVwidGVsXCJcclxuICAgIGF1dG9jb21wbGV0ZT1cInRlbFwiXHJcbiAgICBbbmdDbGFzc109XCJjc3NDbGFzc1wiXHJcbiAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXHJcbiAgICAoa2V5cHJlc3MpPVwib25JbnB1dEtleVByZXNzKCRldmVudClcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJwaG9uZU51bWJlclwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvblBob25lTnVtYmVyQ2hhbmdlRGVib3VuY2UoKVwiXHJcbiAgICBbZXJyb3JTdGF0ZU1hdGNoZXJdPVwiZXJyb3JTdGF0ZU1hdGNoZXJcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cImlucHV0UGxhY2Vob2xkZXJcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIFthcmlhLWRlc2NyaWJlZGJ5XT1cImRlc2NyaWJlZEJ5XCJcclxuICAvPlxyXG48L2Rpdj4iXX0=
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtYmFzZS1waG9uZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtYmFzZS1waG9uZS1pbnB1dC9lY2Ficy1iYXNlLXBob25lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1iYXNlLXBob25lLWlucHV0L2VjYWJzLWJhc2UtcGhvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBQ3BELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuRSxPQUFPLEVBSUwsYUFBYSxHQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLFNBQVMsRUFHVCxnQkFBZ0IsRUFFaEIsMEJBQTBCLEdBRTNCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixlQUFlLEdBR2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7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LEVBQUU7Z0JBSTlDLEVBQUU7c0JBREQsV0FBVztnQkFJUixnQkFBZ0I7c0JBRG5CLFdBQVc7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBEb0NoZWNrLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFNlbGYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICBOZ0NvbnRyb2wsXHJcbiAgTmdGb3JtLFxyXG4gIE5HX1ZBTElEQVRPUlMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIEFzWW91VHlwZSxcclxuICBDb3VudHJ5Q29kZSBhcyBDQyxcclxuICBFMTY0TnVtYmVyLFxyXG4gIGdldEV4YW1wbGVOdW1iZXIsXHJcbiAgTmF0aW9uYWxOdW1iZXIsXHJcbiAgcGFyc2VQaG9uZU51bWJlckZyb21TdHJpbmcsXHJcbiAgUGhvbmVOdW1iZXIsXHJcbn0gZnJvbSAnbGlicGhvbmVudW1iZXItanMnO1xyXG5cclxuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQge1xyXG4gIENhblVwZGF0ZUVycm9yU3RhdGUsXHJcbiAgRXJyb3JTdGF0ZU1hdGNoZXIsXHJcbiAgbWl4aW5FcnJvclN0YXRlLFxyXG4gIF9BYnN0cmFjdENvbnN0cnVjdG9yLFxyXG4gIF9Db25zdHJ1Y3RvcixcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0TWVudSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ291bnRyeUNvZGUsIEV4YW1wbGVzIH0gZnJvbSAnLi4vYmFzZS9jb25zdHMvY291bnRyeS1jb2Rlcyc7XHJcbmltcG9ydCB7IHBob25lTnVtYmVyVmFsaWRhdG9yIH0gZnJvbSAnLi4vYmFzZS92YWxpZGF0b3JzL3Bob25lLW51bWJlci52YWxpZGF0b3InO1xyXG5pbXBvcnQgeyBDb3VudHJ5LCBQaG9uZU51bWJlckZvcm1hdCB9IGZyb20gJy4uL2Jhc2UvbW9kZWxzL3Bob25lLm1vZGVscyc7XHJcblxyXG5jbGFzcyBOZ3hNYXRJbnRsVGVsSW5wdXRCYXNlIHtcclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcclxuICAgIHB1YmxpYyBfcGFyZW50Rm9ybTogTmdGb3JtLFxyXG4gICAgcHVibGljIF9wYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICAgIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICApIHt9XHJcbn1cclxuXHJcbmRlY2xhcmUgdHlwZSBDYW5VcGRhdGVFcnJvclN0YXRlQ3RvciA9IF9Db25zdHJ1Y3RvcjxDYW5VcGRhdGVFcnJvclN0YXRlPiAmXHJcbiAgX0Fic3RyYWN0Q29uc3RydWN0b3I8Q2FuVXBkYXRlRXJyb3JTdGF0ZT47XHJcblxyXG5jb25zdCBfTmd4TWF0SW50bFRlbElucHV0TWl4aW5CYXNlOiBDYW5VcGRhdGVFcnJvclN0YXRlQ3RvciAmXHJcbiAgdHlwZW9mIE5neE1hdEludGxUZWxJbnB1dEJhc2UgPSBtaXhpbkVycm9yU3RhdGUoTmd4TWF0SW50bFRlbElucHV0QmFzZSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLWJhc2UtcGhvbmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1iYXNlLXBob25lLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9lY2Ficy1iYXNlLXBob25lLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBDb3VudHJ5Q29kZSxcclxuICAgIHsgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEVjYWJzQmFzZVBob25lQ29tcG9uZW50IH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZVZhbHVlOiBwaG9uZU51bWJlclZhbGlkYXRvcixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0Jhc2VQaG9uZUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgX05neE1hdEludGxUZWxJbnB1dE1peGluQmFzZVxyXG4gIGltcGxlbWVudHNcclxuICAgIE9uSW5pdCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBDYW5VcGRhdGVFcnJvclN0YXRlLFxyXG4gICAgTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+XHJcbntcclxuICBASW5wdXQoKSBwcmVmZXJyZWRDb3VudHJpZXM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgZW5hYmxlUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBjc3NDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBvbmx5Q291bnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlciA9XHJcbiAgICBuZXcgRXJyb3JTdGF0ZU1hdGNoZXIoKTtcclxuICBASW5wdXQoKSBlbmFibGVTZWFyY2ggPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGRlc2NyaWJlZEJ5ID0gJyc7XHJcbiAgQElucHV0KCkgZGVib3VuY2VUaW1lTXM7XHJcbiAgQElucHV0KClcclxuICBnZXQgZm9ybWF0KCk6IFBob25lTnVtYmVyRm9ybWF0IHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBjb3VudHJ5Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q291bnRyeT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChNYXRNZW51KSBtYXRNZW51OiBNYXRNZW51IHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21hdEN1c3RvbUlucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgbWF0Q3VzdG9tSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBIb3N0QmluZGluZygpXHJcbiAgaWQgPSBgZWNhYnMtaW50bC10ZWwtaW5wdXQtJHtFY2Fic0Jhc2VQaG9uZUNvbXBvbmVudC5uZXh0SWQrK31gO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5neC1mbG9hdGluZycpXHJcbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG5leHRJZCA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2NoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3ByZXZpb3VzRm9ybWF0dGVkTnVtYmVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZm9ybWF0OiBQaG9uZU51bWJlckZvcm1hdCA9ICdkZWZhdWx0JztcclxuICBvdmVycmlkZSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBmb2N1c2VkID0gZmFsc2U7XHJcbiAgcGhvbmVOdW1iZXI6IE5hdGlvbmFsTnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGFsbENvdW50cmllczogQ291bnRyeVtdID0gW107XHJcbiAgcHJlZmVycmVkQ291bnRyaWVzSW5Ecm9wRG93bjogQ291bnRyeVtdID0gW107XHJcbiAgc2VsZWN0ZWRDb3VudHJ5OiBDb3VudHJ5IHwgdW5kZWZpbmVkO1xyXG4gIG51bWJlckluc3RhbmNlOiBQaG9uZU51bWJlciB8IHVuZGVmaW5lZDtcclxuICB2YWx1ZTogRTE2NE51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBzZWFyY2hDcml0ZXJpYTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMucGhvbmVOdW1iZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgZm9ybWF0KHZhbHVlOiBQaG9uZU51bWJlckZvcm1hdCkge1xyXG4gICAgdGhpcy5fZm9ybWF0ID0gdmFsdWU7XHJcbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5mb3JtYXR0ZWRQaG9uZU51bWJlcjtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRQaG9uZU51bWJlclBsYWNlSG9sZGVyKGNvdW50cnlJU09Db2RlOiBDQyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBnZXRFeGFtcGxlTnVtYmVyKGNvdW50cnlJU09Db2RlLCBFeGFtcGxlcyk7XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLWJvb2xlYW4tY2FzdFxyXG4gICAgcmV0dXJuICEhcmVzdWx0ID8gcmVzdWx0Lm51bWJlci50b1N0cmluZygpIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogdW5rbm93bikgPT4ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGNvdW50cnlDb2RlRGF0YTogQ291bnRyeUNvZGUsXHJcbiAgICBwcml2YXRlIGZtOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG92ZXJyaWRlIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybTogTmdGb3JtLFxyXG4gICAgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgICBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG4gICkge1xyXG4gICAgc3VwZXIoZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLCBwYXJlbnRGb3JtLCBwYXJlbnRGb3JtR3JvdXAsIG5nQ29udHJvbCk7XHJcblxyXG4gICAgZm0ubW9uaXRvcihlbFJlZiwgdHJ1ZSkuc3Vic2NyaWJlKChvcmlnaW4pID0+IHtcclxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCAmJiAhb3JpZ2luKSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvY3VzZWQgPSAhIW9yaWdpbjtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZldGNoQ291bnRyeURhdGEoKTtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoUGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hQbGFjZWhvbGRlciA9ICdTZWFyY2ggLi4uJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByZWZlcnJlZENvdW50cmllcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wcmVmZXJyZWRDb3VudHJpZXMuZm9yRWFjaCgoaXNvMikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByZWZlcnJlZENvdW50cnkgPSB0aGlzLmFsbENvdW50cmllc1xyXG4gICAgICAgICAgLmZpbHRlcigoYykgPT4gYy5pc28yID09PSBpc28yKVxyXG4gICAgICAgICAgLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKHByZWZlcnJlZENvdW50cnkpIHtcclxuICAgICAgICAgIHRoaXMucHJlZmVycmVkQ291bnRyaWVzSW5Ecm9wRG93bi5wdXNoKHByZWZlcnJlZENvdW50cnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vbmx5Q291bnRyaWVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmFsbENvdW50cmllcyA9IHRoaXMuYWxsQ291bnRyaWVzLmZpbHRlcigoYykgPT5cclxuICAgICAgICB0aGlzLm9ubHlDb3VudHJpZXMuaW5jbHVkZXMoYy5pc28yKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm51bWJlckluc3RhbmNlICYmIHRoaXMubnVtYmVySW5zdGFuY2UuY291bnRyeSkge1xyXG4gICAgICAvLyBJZiBhbiBleGlzdGluZyBudW1iZXIgaXMgcHJlc2VudCwgd2UgdXNlIGl0IHRvIGRldGVybWluZSBzZWxlY3RlZENvdW50cnlcclxuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmdldENvdW50cnkodGhpcy5udW1iZXJJbnN0YW5jZS5jb3VudHJ5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnByZWZlcnJlZENvdW50cmllc0luRHJvcERvd24ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLnByZWZlcnJlZENvdW50cmllc0luRHJvcERvd25bMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmFsbENvdW50cmllc1swXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fY2hhbmdlU3ViamVjdFxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVNcykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25QaG9uZU51bWJlckNoYW5nZSgpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuY291bnRyeUNoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5mbS5zdG9wTW9uaXRvcmluZyh0aGlzLmVsUmVmKTtcclxuICAgIHRoaXMuX2NoYW5nZVN1YmplY3QuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uUGhvbmVOdW1iZXJDaGFuZ2VEZWJvdW5jZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NoYW5nZVN1YmplY3QubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgb25QaG9uZU51bWJlckNoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMubnVtYmVySW5zdGFuY2UgPSBwYXJzZVBob25lTnVtYmVyRnJvbVN0cmluZyhcclxuICAgICAgICB0aGlzLnBob25lTnVtYmVyPy50b1N0cmluZygpIHx8ICcnLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc28yLnRvVXBwZXJDYXNlKCkgYXMgQ0MsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybWF0QXNZb3VUeXBlSWZFbmFibGVkKCk7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bWJlckluc3RhbmNlPy5udW1iZXI7XHJcbiAgICAgIGlmICh0aGlzLm51bWJlckluc3RhbmNlICYmIHRoaXMubnVtYmVySW5zdGFuY2UuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGhvbmVOdW1iZXIgIT09IHRoaXMuZm9ybWF0dGVkUGhvbmVOdW1iZXIpIHtcclxuICAgICAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmZvcm1hdHRlZFBob25lTnVtYmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvMiAhPT0gdGhpcy5udW1iZXJJbnN0YW5jZS5jb3VudHJ5ICYmXHJcbiAgICAgICAgICAhIXRoaXMubnVtYmVySW5zdGFuY2UuY291bnRyeVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmdldENvdW50cnkodGhpcy5udW1iZXJJbnN0YW5jZS5jb3VudHJ5KTtcclxuICAgICAgICAgIHRoaXMuY291bnRyeUNoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gaWYgbm8gcG9zc2libGUgbnVtYmVycyBhcmUgdGhlcmUsXHJcbiAgICAgIC8vIHRoZW4gdGhlIGZ1bGwgbnVtYmVyIGlzIHBhc3NlZCBzbyB0aGF0IHZhbGlkYXRvciBjb3VsZCBiZSB0cmlnZ2VyZWQgYW5kIHByb3BlciBlcnJvciBjb3VsZCBiZSBzaG93blxyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5waG9uZU51bWJlcj8udG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uQ291bnRyeVNlbGVjdChjb3VudHJ5OiBDb3VudHJ5KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5waG9uZU51bWJlcikge1xyXG4gICAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5udW1iZXJJbnN0YW5jZT8ubmF0aW9uYWxOdW1iZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvdW50cnk7XHJcbiAgICB0aGlzLmNvdW50cnlDaGFuZ2VkLmVtaXQodGhpcy5zZWxlY3RlZENvdW50cnkpO1xyXG4gICAgdGhpcy5vblBob25lTnVtYmVyQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb3VudHJ5KGNvZGU6IHN0cmluZyk6IENvdW50cnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5hbGxDb3VudHJpZXMuZmluZCgoYykgPT4gYy5pc28yID09PSBjb2RlLnRvTG93ZXJDYXNlKCkpIHx8IHtcclxuICAgICAgICBuYW1lOiAnVU4nLFxyXG4gICAgICAgIGlzbzI6ICdVTicsXHJcbiAgICAgICAgZGlhbENvZGU6ICcnLFxyXG4gICAgICAgIHByaW9yaXR5OiAwLFxyXG4gICAgICAgIGFyZWFDb2RlczogdW5kZWZpbmVkLFxyXG4gICAgICAgIGZsYWdDbGFzczogJ1VOJyxcclxuICAgICAgICBwbGFjZUhvbGRlcjogJycsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbklucHV0S2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvWzAtOStcXC0gXS87XHJcbiAgICBpZiAoIXBhdHRlcm4udGVzdChldmVudC5rZXkpKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmbGFnQ2xhc3MobGFuZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgZmkgZmktJHtsYW5nPy5zbGljZSgtMikudG9Mb3dlckNhc2UoKX1gO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5udW1iZXJJbnN0YW5jZSA9IHBhcnNlUGhvbmVOdW1iZXJGcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgaWYgKHRoaXMubnVtYmVySW5zdGFuY2UpIHtcclxuICAgICAgICBjb25zdCBjb3VudHJ5Q29kZSA9IHRoaXMubnVtYmVySW5zdGFuY2UuY291bnRyeTtcclxuICAgICAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5mb3JtYXR0ZWRQaG9uZU51bWJlcjtcclxuICAgICAgICBpZiAoIWNvdW50cnlDb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmdldENvdW50cnkoY291bnRyeUNvZGUpO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeS5kaWFsQ29kZSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5wcmVmZXJyZWRDb3VudHJpZXMuaW5jbHVkZXModGhpcy5zZWxlY3RlZENvdW50cnkuaXNvMilcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZENvdW50cmllc0luRHJvcERvd24ucHVzaCh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvdW50cnlDaGFuZ2VkLmVtaXQodGhpcy5zZWxlY3RlZENvdW50cnkpO1xyXG5cclxuICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWUgaXMgc2V0XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH0sIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbHVlIGlzIHNldCBmcm9tIG91dHNpZGUgdXNpbmcgc2V0VmFsdWUoKVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnaW5wdXQnKSB7XHJcbiAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpIS5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBob25lTnVtYmVyID0gJyc7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShudWxsKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hJbnB1dCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmZXRjaENvdW50cnlEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb3VudHJ5Q29kZURhdGEuYWxsQ291bnRyaWVzLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgY29uc3QgY291bnRyeTogQ291bnRyeSA9IHtcclxuICAgICAgICBuYW1lOiBjWzBdLnRvU3RyaW5nKCksXHJcbiAgICAgICAgaXNvMjogY1sxXS50b1N0cmluZygpLFxyXG4gICAgICAgIGRpYWxDb2RlOiBjWzJdLnRvU3RyaW5nKCksXHJcbiAgICAgICAgcHJpb3JpdHk6ICtjWzNdIHx8IDAsXHJcbiAgICAgICAgYXJlYUNvZGVzOiAoY1s0XSBhcyBzdHJpbmdbXSkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGZsYWdDbGFzczogY1sxXS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCksXHJcbiAgICAgICAgcGxhY2VIb2xkZXI6ICcnLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUGxhY2Vob2xkZXIpIHtcclxuICAgICAgICBjb3VudHJ5LnBsYWNlSG9sZGVyID0gRWNhYnNCYXNlUGhvbmVDb21wb25lbnQuZ2V0UGhvbmVOdW1iZXJQbGFjZUhvbGRlcihcclxuICAgICAgICAgIGNvdW50cnkuaXNvMi50b1VwcGVyQ2FzZSgpIGFzIENDLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYWxsQ291bnRyaWVzLnB1c2goY291bnRyeSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGZvcm1hdHRlZFBob25lTnVtYmVyKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubnVtYmVySW5zdGFuY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGhvbmVOdW1iZXI/LnRvU3RyaW5nKCkgfHwgJyc7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMuZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgJ25hdGlvbmFsJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5udW1iZXJJbnN0YW5jZS5mb3JtYXROYXRpb25hbCgpO1xyXG5cclxuICAgICAgY2FzZSAnaW50ZXJuYXRpb25hbCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVySW5zdGFuY2UuZm9ybWF0SW50ZXJuYXRpb25hbCgpO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy5udW1iZXJJbnN0YW5jZS5uYXRpb25hbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRBc1lvdVR5cGVJZkVuYWJsZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtYXQgPT09ICdkZWZhdWx0Jykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhc1lvdVR5cGU6IEFzWW91VHlwZSA9IG5ldyBBc1lvdVR5cGUoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc28yLnRvVXBwZXJDYXNlKCkgYXMgQ0MsXHJcbiAgICApO1xyXG4gICAgLy8gVG8gYXZvaWQgY2FyZXQgcG9zaXRpb25pbmcgd2UgYXBwbHkgZm9ybWF0dGluZyBvbmx5IGlmIHRoZSBjYXJldCBpcyBhdCB0aGUgZW5kOlxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBob25lTnVtYmVyXHJcbiAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgLnN0YXJ0c1dpdGgodGhpcy5fcHJldmlvdXNGb3JtYXR0ZWROdW1iZXIgfHwgJycpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5waG9uZU51bWJlciA9IGFzWW91VHlwZS5pbnB1dCh0aGlzLnBob25lTnVtYmVyLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcHJldmlvdXNGb3JtYXR0ZWROdW1iZXIgPSB0aGlzLnBob25lTnVtYmVyPy50b1N0cmluZygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZWNhYnMtdGVsLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgbWF0LWJ1dHRvblxyXG4gICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgY2xhc3M9XCJjb3VudHJ5LXNlbGVjdG9yXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgPlxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJjb3VudHJ5LXNlbGVjdG9yLWZsYWcgZmxhZ1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImZsYWdDbGFzcyhzZWxlY3RlZENvdW50cnk/LmZsYWdDbGFzcylcIlxyXG4gICAgPjwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY291bnRyeS1zZWxlY3Rvci1jb2RlXCIgKm5nSWY9XCJzZWxlY3RlZENvdW50cnk/LmRpYWxDb2RlXCJcclxuICAgID4re3sgc2VsZWN0ZWRDb3VudHJ5LmRpYWxDb2RlIH19PC9zcGFuXHJcbiAgICA+XHJcbiAgPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZWNhYnMtdGVsLWlucHV0LW1hdC1tZW51LXBhbmVsXCJcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzcz1cImVjYWJzLXRlbC1pbnB1dC1vdmVybGF5LWJhY2tkcm9wXCJcclxuICAgICAgICAgICAgb3ZlcmxheVBhbmVsQ2xhc3M9XCJlY2Ficy10ZWwtaW5wdXQtb3ZlcmxheS1wYW5lXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgI3NlYXJjaElucHV0XHJcbiAgICAgICpuZ0lmPVwiZW5hYmxlU2VhcmNoXCJcclxuICAgICAgY2xhc3M9XCJjb3VudHJ5LXNlYXJjaFwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoQ3JpdGVyaWFcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaElucHV0KClcIlxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgLz5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoQ3JpdGVyaWFcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICBjbGFzcz1cImNvdW50cnktbGlzdC1idXR0b25cIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb3VudHJ5IG9mIHByZWZlcnJlZENvdW50cmllc0luRHJvcERvd25cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNvdW50cnlTZWxlY3QoY291bnRyeSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImljb24td3JhcHBlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsYWdcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZmxhZ0NsYXNzKGNvdW50cnkuZmxhZ0NsYXNzKVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICB7eyBjb3VudHJ5Lm5hbWUgfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY291bnRyeT8uZGlhbENvZGVcIj4re3sgY291bnRyeS5kaWFsQ29kZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cInByZWZlcnJlZENvdW50cmllc0luRHJvcERvd24/Lmxlbmd0aFwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvdW50cnkgb2YgYWxsQ291bnRyaWVzXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgY2xhc3M9XCJjb3VudHJ5LWxpc3QtYnV0dG9uXCJcclxuICAgICAgICAqbmdJZj1cImNvdW50cnkgfCBzZWFyY2g6IHNlYXJjaENyaXRlcmlhXCJcclxuICAgICAgICAoY2xpY2spPVwib25Db3VudHJ5U2VsZWN0KGNvdW50cnkpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGFnXCIgW25nQ2xhc3NdPVwiZmxhZ0NsYXNzKGNvdW50cnkuZmxhZ0NsYXNzKVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICB7eyBjb3VudHJ5Lm5hbWUgfX0gK3t7IGNvdW50cnkuZGlhbENvZGUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L21hdC1tZW51PlxyXG5cclxuICA8aW5wdXQgI21hdEN1c3RvbUlucHV0XHJcbiAgICBtYXRJbnB1dFxyXG4gICAgdHlwZT1cInRlbFwiXHJcbiAgICBhdXRvY29tcGxldGU9XCJ0ZWxcIlxyXG4gICAgW25nQ2xhc3NdPVwiY3NzQ2xhc3NcIlxyXG4gICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxyXG4gICAgKGtleXByZXNzKT1cIm9uSW5wdXRLZXlQcmVzcygkZXZlbnQpXCJcclxuICAgIFsobmdNb2RlbCldPVwicGhvbmVOdW1iZXJcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25QaG9uZU51bWJlckNoYW5nZURlYm91bmNlKClcIlxyXG4gICAgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yU3RhdGVNYXRjaGVyXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJpbnB1dFBsYWNlaG9sZGVyXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICBbYXJpYS1kZXNjcmliZWRieV09XCJkZXNjcmliZWRCeVwiXHJcbiAgLz5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { format, isValid, parse, setHours, setMinutes, setSeconds, } from 'date-fns';
2
2
  import { takeUntil } from 'rxjs';
3
3
  import { DecimalPipe } from '@angular/common';
4
- import { Component, forwardRef, Input, } from '@angular/core';
4
+ import { Component, forwardRef, Input, ViewChild, } from '@angular/core';
5
5
  import { NG_VALUE_ACCESSOR, NgControl, } from '@angular/forms';
6
6
  import EcabsElementBaseComponent from '../base/element-base';
7
7
  import { UnsubscribeService } from '../base/services/unsubscribe.service';
@@ -25,6 +25,8 @@ export class EcabsDateTimePickerComponent extends EcabsElementBaseComponent {
25
25
  cd;
26
26
  ecabsDatePickerHeaderService;
27
27
  unsubscribeService;
28
+ matCustomInput;
29
+ matCustomButton;
28
30
  minDate;
29
31
  maxDate;
30
32
  touchUi = false;
@@ -197,7 +199,7 @@ export class EcabsDateTimePickerComponent extends EcabsElementBaseComponent {
197
199
  },
198
200
  DecimalPipe,
199
201
  UnsubscribeService,
200
- ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper w-full\">\r\n <input\r\n class=\"fake-input\"\r\n [id]=\"_date\"\r\n [(ngModel)]=\"_date\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"picker\"\r\n [min]=\"minDate\"\r\n [max]=\"maxDate\"\r\n (blur)=\"onTouch()\"\r\n />\r\n <mat-datepicker #picker [calendarHeaderComponent]=\"header\" [touchUi]=\"touchUi\" class=\"datepicker-ui\">\r\n <mat-datepicker-actions>\r\n <div class=\"actions\">\r\n <div class=\"time--inputs\">\r\n <input\r\n class=\"form-field__input time\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [id]=\"hours\"\r\n [value]=\"_hours\"\r\n [maxValue]=\"maxValueHours\"\r\n [(ngModel)]=\"hours\"\r\n />\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"minutes\"\r\n [(ngModel)]=\"minutes\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n\r\n <ng-container *ngIf=\"!hideSeconds\">\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"seconds\"\r\n [(ngModel)]=\"seconds\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n </ng-container>\r\n </div>\r\n\r\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\r\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\r\n (apply)=\"onApply()\">\r\n </ecabs-date-picker-actions>\r\n </div>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n <input\r\n class=\"form-field__input w-full date-input\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"pickerValue\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n ecabsMaskDate\r\n [isDateTimeMask]=\"true\"\r\n [considerSeconds]=\"!hideSeconds\"\r\n (blur)=\"onTouch()\"\r\n />\r\n <button mat-icon-button class=\"datepicker-ui__toggle text-gray-500\"\r\n (click)=\"picker.open()\">\r\n <mat-icon>calendar_today</mat-icon>\r\n </button>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [".time--inputs:before,.time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0;margin:0}.time--inputs{position:relative;display:flex;gap:.5rem;justify-content:center;align-items:center;margin-top:2.4rem;margin-bottom:2.4rem}.time--inputs:before,.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300)}.time--inputs:before{top:-1.6rem}.time--inputs:after{bottom:-1.6rem}.font-bold{font-weight:700}.actions{display:flex;flex-direction:column;width:100%!important;row-gap:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: i10.EcabsNumberBorderDirective, selector: "[ecabsNumberBorder]", inputs: ["maxValue", "minValue"] }, { kind: "directive", type: i11.EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }, { kind: "component", type: i12.EcabsDatePickerActionsComponent, selector: "ecabs-date-picker-actions", inputs: ["cancelLabel", "applyLabel"], outputs: ["apply"] }] });
202
+ ], viewQueries: [{ propertyName: "matCustomInput", first: true, predicate: ["matCustomInput"], descendants: true }, { propertyName: "matCustomButton", first: true, predicate: ["matCustomButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper w-full\">\r\n <input\r\n class=\"fake-input\"\r\n [id]=\"_date\"\r\n [(ngModel)]=\"_date\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"picker\"\r\n [min]=\"minDate\"\r\n [max]=\"maxDate\"\r\n (blur)=\"onTouch()\"\r\n />\r\n <mat-datepicker #picker [calendarHeaderComponent]=\"header\" [touchUi]=\"touchUi\" class=\"datepicker-ui\">\r\n <mat-datepicker-actions>\r\n <div class=\"actions\">\r\n <div class=\"time--inputs\">\r\n <input\r\n class=\"form-field__input time\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [id]=\"hours\"\r\n [value]=\"_hours\"\r\n [maxValue]=\"maxValueHours\"\r\n [(ngModel)]=\"hours\"\r\n />\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"minutes\"\r\n [(ngModel)]=\"minutes\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n\r\n <ng-container *ngIf=\"!hideSeconds\">\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"seconds\"\r\n [(ngModel)]=\"seconds\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n </ng-container>\r\n </div>\r\n\r\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\r\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\r\n (apply)=\"onApply()\">\r\n </ecabs-date-picker-actions>\r\n </div>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n <input #matCustomInput\r\n class=\"form-field__input w-full date-input\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"pickerValue\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n ecabsMaskDate\r\n [isDateTimeMask]=\"true\"\r\n [considerSeconds]=\"!hideSeconds\"\r\n (blur)=\"onTouch()\"\r\n />\r\n\r\n <button mat-icon-button #matCustomButton\r\n class=\"datepicker-ui__toggle text-gray-500\"\r\n (click)=\"picker.open()\">\r\n <mat-icon>calendar_today</mat-icon>\r\n </button>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [".time--inputs:before,.time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0;margin:0}.time--inputs{position:relative;display:flex;gap:.5rem;justify-content:center;align-items:center;margin-top:2.4rem;margin-bottom:2.4rem}.time--inputs:before,.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300)}.time--inputs:before{top:-1.6rem}.time--inputs:after{bottom:-1.6rem}.font-bold{font-weight:700}.actions{display:flex;flex-direction:column;width:100%!important;row-gap:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: i10.EcabsNumberBorderDirective, selector: "[ecabsNumberBorder]", inputs: ["maxValue", "minValue"] }, { kind: "directive", type: i11.EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }, { kind: "component", type: i12.EcabsDatePickerActionsComponent, selector: "ecabs-date-picker-actions", inputs: ["cancelLabel", "applyLabel"], outputs: ["apply"] }] });
201
203
  }
202
204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateTimePickerComponent, decorators: [{
203
205
  type: Component,
@@ -209,8 +211,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
209
211
  },
210
212
  DecimalPipe,
211
213
  UnsubscribeService,
212
- ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper w-full\">\r\n <input\r\n class=\"fake-input\"\r\n [id]=\"_date\"\r\n [(ngModel)]=\"_date\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"picker\"\r\n [min]=\"minDate\"\r\n [max]=\"maxDate\"\r\n (blur)=\"onTouch()\"\r\n />\r\n <mat-datepicker #picker [calendarHeaderComponent]=\"header\" [touchUi]=\"touchUi\" class=\"datepicker-ui\">\r\n <mat-datepicker-actions>\r\n <div class=\"actions\">\r\n <div class=\"time--inputs\">\r\n <input\r\n class=\"form-field__input time\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [id]=\"hours\"\r\n [value]=\"_hours\"\r\n [maxValue]=\"maxValueHours\"\r\n [(ngModel)]=\"hours\"\r\n />\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"minutes\"\r\n [(ngModel)]=\"minutes\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n\r\n <ng-container *ngIf=\"!hideSeconds\">\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"seconds\"\r\n [(ngModel)]=\"seconds\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n </ng-container>\r\n </div>\r\n\r\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\r\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\r\n (apply)=\"onApply()\">\r\n </ecabs-date-picker-actions>\r\n </div>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n <input\r\n class=\"form-field__input w-full date-input\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"pickerValue\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n ecabsMaskDate\r\n [isDateTimeMask]=\"true\"\r\n [considerSeconds]=\"!hideSeconds\"\r\n (blur)=\"onTouch()\"\r\n />\r\n <button mat-icon-button class=\"datepicker-ui__toggle text-gray-500\"\r\n (click)=\"picker.open()\">\r\n <mat-icon>calendar_today</mat-icon>\r\n </button>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [".time--inputs:before,.time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0;margin:0}.time--inputs{position:relative;display:flex;gap:.5rem;justify-content:center;align-items:center;margin-top:2.4rem;margin-bottom:2.4rem}.time--inputs:before,.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300)}.time--inputs:before{top:-1.6rem}.time--inputs:after{bottom:-1.6rem}.font-bold{font-weight:700}.actions{display:flex;flex-direction:column;width:100%!important;row-gap:1rem}\n"] }]
213
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.DecimalPipe }, { type: i0.ChangeDetectorRef }, { type: i2.EcabsDatePickerHeaderService }, { type: i3.UnsubscribeService }]; }, propDecorators: { minDate: [{
214
+ ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper w-full\">\r\n <input\r\n class=\"fake-input\"\r\n [id]=\"_date\"\r\n [(ngModel)]=\"_date\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"picker\"\r\n [min]=\"minDate\"\r\n [max]=\"maxDate\"\r\n (blur)=\"onTouch()\"\r\n />\r\n <mat-datepicker #picker [calendarHeaderComponent]=\"header\" [touchUi]=\"touchUi\" class=\"datepicker-ui\">\r\n <mat-datepicker-actions>\r\n <div class=\"actions\">\r\n <div class=\"time--inputs\">\r\n <input\r\n class=\"form-field__input time\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [id]=\"hours\"\r\n [value]=\"_hours\"\r\n [maxValue]=\"maxValueHours\"\r\n [(ngModel)]=\"hours\"\r\n />\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"minutes\"\r\n [(ngModel)]=\"minutes\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n\r\n <ng-container *ngIf=\"!hideSeconds\">\r\n <span class=\"font-bold\">:</span>\r\n <input\r\n class=\"form-field__input time\"\r\n [id]=\"seconds\"\r\n [(ngModel)]=\"seconds\"\r\n ecabsDigitsOnly\r\n ecabsNumberBorder\r\n [digitsOnly]=\"true\"\r\n [maxValue]=\"maxValueMinutesSeconds\"\r\n />\r\n </ng-container>\r\n </div>\r\n\r\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\r\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\r\n (apply)=\"onApply()\">\r\n </ecabs-date-picker-actions>\r\n </div>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n <input #matCustomInput\r\n class=\"form-field__input w-full date-input\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"pickerValue\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n ecabsMaskDate\r\n [isDateTimeMask]=\"true\"\r\n [considerSeconds]=\"!hideSeconds\"\r\n (blur)=\"onTouch()\"\r\n />\r\n\r\n <button mat-icon-button #matCustomButton\r\n class=\"datepicker-ui__toggle text-gray-500\"\r\n (click)=\"picker.open()\">\r\n <mat-icon>calendar_today</mat-icon>\r\n </button>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [".time--inputs:before,.time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0;margin:0}.time--inputs{position:relative;display:flex;gap:.5rem;justify-content:center;align-items:center;margin-top:2.4rem;margin-bottom:2.4rem}.time--inputs:before,.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300)}.time--inputs:before{top:-1.6rem}.time--inputs:after{bottom:-1.6rem}.font-bold{font-weight:700}.actions{display:flex;flex-direction:column;width:100%!important;row-gap:1rem}\n"] }]
215
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.DecimalPipe }, { type: i0.ChangeDetectorRef }, { type: i2.EcabsDatePickerHeaderService }, { type: i3.UnsubscribeService }]; }, propDecorators: { matCustomInput: [{
216
+ type: ViewChild,
217
+ args: ['matCustomInput', { static: false }]
218
+ }], matCustomButton: [{
219
+ type: ViewChild,
220
+ args: ['matCustomButton', { static: false }]
221
+ }], minDate: [{
214
222
  type: Input
215
223
  }], maxDate: [{
216
224
  type: Input
@@ -225,4 +233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
225
233
  }], applyMinDateAuto: [{
226
234
  type: Input
227
235
  }] } });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtZGF0ZS10aW1lLXBpY2tlci9lY2Ficy1kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1kYXRlLXRpbWUtcGlja2VyL2VjYWJzLWRhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBbUMsU0FBUyxFQUFFLFVBQVUsRUFBWSxLQUFLLEdBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUF1QixpQkFBaUIsRUFBRSxTQUFTLEdBQXNCLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkcsT0FBTyx5QkFBeUIsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsa0NBQWtDLEVBQ25DLE1BQU0sb0ZBQW9GLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBZ0I1RixNQUFNLE9BQU8sNEJBQ1gsU0FBUSx5QkFBeUI7SUFzSGQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXZIVixPQUFPLENBQU87SUFDZCxPQUFPLENBQU87SUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFdBQVcsR0FBRyxJQUFJ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L0NhLDRCQUE0QjtrQkFkeEMsU0FBUzsrQkFDRSx3QkFBd0IsYUFHdkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUM7NEJBQzNELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELFdBQVc7d0JBQ1gsa0JBQWtCO3FCQUNuQjtxT0FNUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zvcm1hdCwgaXNWYWxpZCwgcGFyc2UsIHNldEhvdXJzLCBzZXRNaW51dGVzLCBzZXRTZWNvbmRzLH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQge3Rha2VVbnRpbH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge0RlY2ltYWxQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCx9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuaW1wb3J0IHtFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnN9IGZyb20gJy4uL2Jhc2UvbW9kZWxzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5tb2RlbHMnO1xyXG5pbXBvcnQge0VjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2V9IGZyb20gJy4uL2Jhc2Uvc2VydmljZXMvZWNhYnMtZGF0ZS1waWNrZXItdHJhbnNsYXRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Vuc3Vic2NyaWJlU2VydmljZX0gZnJvbSAnLi4vYmFzZS9zZXJ2aWNlcy91bnN1YnNjcmliZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBFY2Fic0RhdGVUaW1lUGlja2VySGVhZGVyQ29tcG9uZW50XHJcbn0gZnJvbSAnLi9jb21wb25lbnRzL2VjYWJzLWRhdGUtdGltZS1waWNrZXItaGVhZGVyL2VjYWJzLWRhdGUtdGltZS1waWNrZXItaGVhZGVyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLWRhdGUtdGltZS1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9lY2Ficy1kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFY2Fic0RhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgRGVjaW1hbFBpcGUsXHJcbiAgICBVbnN1YnNjcmliZVNlcnZpY2UsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVjYWJzRGF0ZVRpbWVQaWNrZXJDb21wb25lbnRcclxuICBleHRlbmRzIEVjYWJzRWxlbWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkluaXRcclxue1xyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGU7XHJcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZTtcclxuICBASW5wdXQoKSB0b3VjaFVpID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVNlY29uZHMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwbHlMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcGx5TWluRGF0ZUF1dG8gPSB0cnVlO1xyXG5cclxuICBfaG91cnMgPSAnMTInO1xyXG4gIF9taW51dGVzID0gJzAwJztcclxuICBfc2Vjb25kcyA9ICcwMCc7XHJcbiAgX2RhdGU6IERhdGU7XHJcbiAgX3BpY2tlclZhbHVlOiBzdHJpbmc7XHJcbiAgdmFsOiBEYXRlO1xyXG4gIGhlYWRlciA9IEVjYWJzRGF0ZVRpbWVQaWNrZXJIZWFkZXJDb21wb25lbnQ7XHJcbiAgbWF4VmFsdWVIb3VycyA9IDIzO1xyXG4gIG1heFZhbHVlTWludXRlc1NlY29uZHMgPSA1OTtcclxuICBwcmV2ZW50Q2FsbFNldHRlclBpY2tlclZhbHVlID0gZmFsc2U7XHJcbiAgcnVuVGltZW91dCA9IGZhbHNlO1xyXG4gIHRyYW5zbGF0aW9uQ29uZmlnOiBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnM7XHJcbiAgaXNFbXB0eUZvcm1hdCA9ICdfL19fL19fX18sIF9fOl9fJztcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBpY2tlclZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja2VyVmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaG91cnMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3VycztcclxuICB9XHJcblxyXG4gIGdldCBtaW51dGVzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWludXRlcztcclxuICB9XHJcblxyXG4gIGdldCBzZWNvbmRzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vjb25kcztcclxuICB9XHJcblxyXG4gIHNldCBob3Vycyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9ob3VycyAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5faG91cnMgPSB0aGlzLnJvdW5kTnVtYmVyKCt2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgbWludXRlcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9taW51dGVzICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9taW51dGVzID0gdGhpcy5yb3VuZE51bWJlcigrdmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IHNlY29uZHModmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2Vjb25kcyAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fc2Vjb25kcyA9IHRoaXMucm91bmROdW1iZXIoK3ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgIGlmICh2YWwgJiYgdGhpcy52YWw/LmdldFRpbWUoKSAhPT0gbmV3IERhdGUodmFsKS5nZXRUaW1lKCkpIHtcclxuICAgICAgaWYgKCF0aGlzLnByZXZlbnRDYWxsU2V0dGVyUGlja2VyVmFsdWUpIHtcclxuICAgICAgICB0aGlzLnBpY2tlclZhbHVlID0gdGhpcy5mb3JtYXREYXRlVGltZSh2YWwpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJldmVudENhbGxTZXR0ZXJQaWNrZXJWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2tlclZhbHVlKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXZhbCB8fCB2YWwgPT09IHRoaXMuaXNFbXB0eUZvcm1hdCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnNldFZhbHVlcyh1bmRlZmluZWQpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRhdGUgPSBwYXJzZShcclxuICAgICAgdmFsLnJlcGxhY2UoJ18nLCAnJyksXHJcbiAgICAgIHRoaXMuaGlkZVNlY29uZHMgPyBgZGQvTU0veXl5eSwgSEg6bW1gIDogYGRkL01NL3l5eXksIEhIOm1tOnNzYCxcclxuICAgICAgbmV3IERhdGUoKSxcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGlzVmFsaWQoZGF0ZSkgJiYgdGhpcy5fcGlja2VyVmFsdWUgIT09IHZhbCkge1xyXG4gICAgICBpZiAodGhpcy5taW5EYXRlICYmIGRhdGUgPCB0aGlzLm1pbkRhdGUgJiYgdGhpcy5hcHBseU1pbkRhdGVBdXRvKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZXModGhpcy5taW5EYXRlKTtcclxuICAgICAgICB0aGlzLl9waWNrZXJWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLnByZXZlbnRDYWxsU2V0dGVyUGlja2VyVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbkRhdGU7XHJcbiAgICAgICAgdGhpcy5ydW5UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hQaWNrZXJWYWx1ZSh0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1heERhdGUgJiYgZGF0ZSA+IHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVzKHRoaXMubWF4RGF0ZSk7XHJcbiAgICAgICAgdGhpcy5fcGlja2VyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50Q2FsbFNldHRlclBpY2tlclZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXhEYXRlO1xyXG4gICAgICAgIHRoaXMucnVuVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoUGlja2VyVmFsdWUodGhpcy5tYXhEYXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJ1blRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fcGlja2VyVmFsdWUgPSB2YWw7XHJcbiAgICAgIHRoaXMucHJldmVudENhbGxTZXR0ZXJQaWNrZXJWYWx1ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xyXG4gICAgICB0aGlzLnNldFZhbHVlcyhkYXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlOiBFY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZVNlcnZpY2U6IFVuc3Vic2NyaWJlU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWNhYnNEYXRlUGlja2VySGVhZGVyU2VydmljZVxyXG4gICAgICAuZ2V0Q29uZmlnKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVTZXJ2aWNlLnN1YnNjcmlwdGlvbigpKSlcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlnKSA9PiAodGhpcy50cmFuc2xhdGlvbkNvbmZpZyA9IGNvbmZpZykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKG5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sRGF0ZSA9IHRoaXMuY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2xEYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbHVlcyhjb250cm9sRGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIG9uVG91Y2g6IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkFwcGx5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fc2Vjb25kcyAmJiB0aGlzLl9taW51dGVzICYmIHRoaXMuX2hvdXJzKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBzZXRTZWNvbmRzKFxyXG4gICAgICAgIHNldE1pbnV0ZXMoXHJcbiAgICAgICAgICBzZXRIb3VycyhuZXcgRGF0ZSh0aGlzLl9kYXRlKSwgK3RoaXMuX2hvdXJzKSxcclxuICAgICAgICAgICt0aGlzLl9taW51dGVzLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgK3RoaXMuX3NlY29uZHMsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoUGlja2VyVmFsdWUoZGF0ZTogRGF0ZSk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJ1blRpbWVvdXQpIHtcclxuICAgICAgICB0aGlzLl9waWNrZXJWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZVRpbWUoZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDMwMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXREYXRlVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICBpZiAoZGF0ZSAmJiBpc1ZhbGlkKG5ldyBEYXRlKGRhdGUpKSkge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLmhpZGVTZWNvbmRzXHJcbiAgICAgICAgPyBmb3JtYXQobmV3IERhdGUoZGF0ZSksIGBkZC9NTS95eXl5LCBISDptbWApXHJcbiAgICAgICAgOiBmb3JtYXQobmV3IERhdGUoZGF0ZSksIGBkZC9NTS95eXl5LCBISDptbTpzc2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJvdW5kTnVtYmVyKG51bTogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0obnVtLCAnMi4wLTAnKSA/PyAnMDAnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZXMoZGF0ZTogRGF0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcclxuICAgIHRoaXMub25Ub3VjaChkYXRlKTtcclxuICAgIHRoaXMuX2RhdGUgPSBkYXRlO1xyXG5cclxuICAgIGlmIChkYXRlICYmIGlzVmFsaWQoZGF0ZSkpIHtcclxuICAgICAgdGhpcy5ob3VycyA9IGRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLm1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnNlY29uZHMgPSBkYXRlLmdldFNlY29uZHMoKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZWNhYnMtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dC0td3JhcHBlciB3LWZ1bGxcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICBjbGFzcz1cImZha2UtaW5wdXRcIlxyXG4gICAgICBbaWRdPVwiX2RhdGVcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cIl9kYXRlXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCJcclxuICAgICAgW21pbl09XCJtaW5EYXRlXCJcclxuICAgICAgW21heF09XCJtYXhEYXRlXCJcclxuICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcclxuICAgIC8+XHJcbiAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlciBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiaGVhZGVyXCIgW3RvdWNoVWldPVwidG91Y2hVaVwiIGNsYXNzPVwiZGF0ZXBpY2tlci11aVwiPlxyXG4gICAgICA8bWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtLWlucHV0c1wiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0IHRpbWVcIlxyXG4gICAgICAgICAgICAgIGVjYWJzRGlnaXRzT25seVxyXG4gICAgICAgICAgICAgIGVjYWJzTnVtYmVyQm9yZGVyXHJcbiAgICAgICAgICAgICAgW2RpZ2l0c09ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImhvdXJzXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiX2hvdXJzXCJcclxuICAgICAgICAgICAgICBbbWF4VmFsdWVdPVwibWF4VmFsdWVIb3Vyc1wiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJob3Vyc1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+Ojwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dCB0aW1lXCJcclxuICAgICAgICAgICAgICBbaWRdPVwibWludXRlc1wiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtaW51dGVzXCJcclxuICAgICAgICAgICAgICBlY2Fic0RpZ2l0c09ubHlcclxuICAgICAgICAgICAgICBlY2Fic051bWJlckJvcmRlclxyXG4gICAgICAgICAgICAgIFtkaWdpdHNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFttYXhWYWx1ZV09XCJtYXhWYWx1ZU1pbnV0ZXNTZWNvbmRzXCJcclxuICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZVNlY29uZHNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPjo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0IHRpbWVcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cInNlY29uZHNcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRzXCJcclxuICAgICAgICAgICAgICAgIGVjYWJzRGlnaXRzT25seVxyXG4gICAgICAgICAgICAgICAgZWNhYnNOdW1iZXJCb3JkZXJcclxuICAgICAgICAgICAgICAgIFtkaWdpdHNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW21heFZhbHVlXT1cIm1heFZhbHVlTWludXRlc1NlY29uZHNcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGVjYWJzLWRhdGUtcGlja2VyLWFjdGlvbnMgW2FwcGx5TGFiZWxdPVwiYXBwbHlMYWJlbCA/PyB0cmFuc2xhdGlvbkNvbmZpZz8uYXBwbHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuY2VsTGFiZWxdPVwiY2FuY2VsTGFiZWwgPz8gdHJhbnNsYXRpb25Db25maWc/LmNhbmNlbExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBseSk9XCJvbkFwcGx5KClcIj5cclxuICAgICAgICAgIDwvZWNhYnMtZGF0ZS1waWNrZXItYWN0aW9ucz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci1hY3Rpb25zPlxyXG4gICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDxpbnB1dFxyXG4gICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0IHctZnVsbCBkYXRlLWlucHV0XCJcclxuICAgICAgW2lkXT1cIm5hbWVcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cInBpY2tlclZhbHVlXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgZWNhYnNNYXNrRGF0ZVxyXG4gICAgICBbaXNEYXRlVGltZU1hc2tdPVwidHJ1ZVwiXHJcbiAgICAgIFtjb25zaWRlclNlY29uZHNdPVwiIWhpZGVTZWNvbmRzXCJcclxuICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcclxuICAgIC8+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImRhdGVwaWNrZXItdWlfX3RvZ2dsZSB0ZXh0LWdyYXktNTAwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5cclxuICAgICAgPG1hdC1pY29uPmNhbGVuZGFyX3RvZGF5PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2VjYWJzLWVsZW1lbnQtd3JhcHBlcj5cclxuIl19
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtZGF0ZS10aW1lLXBpY2tlci9lY2Ficy1kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1kYXRlLXRpbWUtcGlja2VyL2VjYWJzLWRhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxHQUNYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFHTCxTQUFTLEVBRVQsVUFBVSxFQUVWLEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEdBRVYsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLHlCQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBRzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLG9GQUFvRixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWdCeEksTUFBTSxPQUFPLDRCQUNYLFNBQVEseUJBQXlCO0lBNEhkO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE1SG5CLGNBQWMsQ0FBYTtJQUczQixlQUFlLENBQWE7SUFFbkIsT0FBTyxDQUFPO0lBQ2QsT0FBTyxDQUFPO0lBQ2Qs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QVc7WUFDWCxrQkFBa0I7U0FDbkIsd1FDL0NILHEyRkE4RUE7OzRGRDdCYSw0QkFBNEI7a0JBZHhDLFNBQVM7K0JBQ0Usd0JBQXdCLGFBR3ZCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDOzRCQUMzRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRCxXQUFXO3dCQUNYLGtCQUFrQjtxQkFDbkI7cU9BT0QsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJOUMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBmb3JtYXQsXHJcbiAgaXNWYWxpZCxcclxuICBwYXJzZSxcclxuICBzZXRIb3VycyxcclxuICBzZXRNaW51dGVzLFxyXG4gIHNldFNlY29uZHMsXHJcbn0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICBOZ0NvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuaW1wb3J0IHsgRWNhYnNEYXRlUGlja2VyVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vYmFzZS9tb2RlbHMvZWNhYnMtZGF0ZS1waWNrZXItdHJhbnNsYXRpb25zLm1vZGVscyc7XHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9iYXNlL3NlcnZpY2VzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5zdWJzY3JpYmVTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS9zZXJ2aWNlcy91bnN1YnNjcmliZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWNhYnNEYXRlVGltZVBpY2tlckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lY2Ficy1kYXRlLXRpbWUtcGlja2VyLWhlYWRlci9lY2Ficy1kYXRlLXRpbWUtcGlja2VyLWhlYWRlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlY2Ficy1kYXRlLXRpbWUtcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWNhYnMtZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWNhYnNEYXRlVGltZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIERlY2ltYWxQaXBlLFxyXG4gICAgVW5zdWJzY3JpYmVTZXJ2aWNlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0RhdGVUaW1lUGlja2VyQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0XHJcbntcclxuICBAVmlld0NoaWxkKCdtYXRDdXN0b21JbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIG1hdEN1c3RvbUlucHV0OiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdtYXRDdXN0b21CdXR0b24nLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBtYXRDdXN0b21CdXR0b246IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGU7XHJcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZTtcclxuICBASW5wdXQoKSB0b3VjaFVpID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVNlY29uZHMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwbHlMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcGx5TWluRGF0ZUF1dG8gPSB0cnVlO1xyXG5cclxuICBfaG91cnMgPSAnMTInO1xyXG4gIF9taW51dGVzID0gJzAwJztcclxuICBfc2Vjb25kcyA9ICcwMCc7XHJcbiAgX2RhdGU6IERhdGU7XHJcbiAgX3BpY2tlclZhbHVlOiBzdHJpbmc7XHJcbiAgdmFsOiBEYXRlO1xyXG4gIGhlYWRlciA9IEVjYWJzRGF0ZVRpbWVQaWNrZXJIZWFkZXJDb21wb25lbnQ7XHJcbiAgbWF4VmFsdWVIb3VycyA9IDIzO1xyXG4gIG1heFZhbHVlTWludXRlc1NlY29uZHMgPSA1OTtcclxuICBwcmV2ZW50Q2FsbFNldHRlclBpY2tlclZhbHVlID0gZmFsc2U7XHJcbiAgcnVuVGltZW91dCA9IGZhbHNlO1xyXG4gIHRyYW5zbGF0aW9uQ29uZmlnOiBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnM7XHJcbiAgaXNFbXB0eUZvcm1hdCA9ICdfL19fL19fX18sIF9fOl9fJztcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBpY2tlclZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja2VyVmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaG91cnMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3VycztcclxuICB9XHJcblxyXG4gIGdldCBtaW51dGVzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWludXRlcztcclxuICB9XHJcblxyXG4gIGdldCBzZWNvbmRzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vjb25kcztcclxuICB9XHJcblxyXG4gIHNldCBob3Vycyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9ob3VycyAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5faG91cnMgPSB0aGlzLnJvdW5kTnVtYmVyKCt2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgbWludXRlcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9taW51dGVzICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9taW51dGVzID0gdGhpcy5yb3VuZE51bWJlcigrdmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IHNlY29uZHModmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2Vjb25kcyAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fc2Vjb25kcyA9IHRoaXMucm91bmROdW1iZXIoK3ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgIGlmICh2YWwgJiYgdGhpcy52YWw/LmdldFRpbWUoKSAhPT0gbmV3IERhdGUodmFsKS5nZXRUaW1lKCkpIHtcclxuICAgICAgaWYgKCF0aGlzLnByZXZlbnRDYWxsU2V0dGVyUGlja2VyVmFsdWUpIHtcclxuICAgICAgICB0aGlzLnBpY2tlclZhbHVlID0gdGhpcy5mb3JtYXREYXRlVGltZSh2YWwpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJldmVudENhbGxTZXR0ZXJQaWNrZXJWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2tlclZhbHVlKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXZhbCB8fCB2YWwgPT09IHRoaXMuaXNFbXB0eUZvcm1hdCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnNldFZhbHVlcyh1bmRlZmluZWQpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRhdGUgPSBwYXJzZShcclxuICAgICAgdmFsLnJlcGxhY2UoJ18nLCAnJyksXHJcbiAgICAgIHRoaXMuaGlkZVNlY29uZHMgPyBgZGQvTU0veXl5eSwgSEg6bW1gIDogYGRkL01NL3l5eXksIEhIOm1tOnNzYCxcclxuICAgICAgbmV3IERhdGUoKSxcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGlzVmFsaWQoZGF0ZSkgJiYgdGhpcy5fcGlja2VyVmFsdWUgIT09IHZhbCkge1xyXG4gICAgICBpZiAodGhpcy5taW5EYXRlICYmIGRhdGUgPCB0aGlzLm1pbkRhdGUgJiYgdGhpcy5hcHBseU1pbkRhdGVBdXRvKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZXModGhpcy5taW5EYXRlKTtcclxuICAgICAgICB0aGlzLl9waWNrZXJWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLnByZXZlbnRDYWxsU2V0dGVyUGlja2VyVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbkRhdGU7XHJcbiAgICAgICAgdGhpcy5ydW5UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hQaWNrZXJWYWx1ZSh0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1heERhdGUgJiYgZGF0ZSA+IHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVzKHRoaXMubWF4RGF0ZSk7XHJcbiAgICAgICAgdGhpcy5fcGlja2VyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50Q2FsbFNldHRlclBpY2tlclZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXhEYXRlO1xyXG4gICAgICAgIHRoaXMucnVuVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoUGlja2VyVmFsdWUodGhpcy5tYXhEYXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJ1blRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fcGlja2VyVmFsdWUgPSB2YWw7XHJcbiAgICAgIHRoaXMucHJldmVudENhbGxTZXR0ZXJQaWNrZXJWYWx1ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xyXG4gICAgICB0aGlzLnNldFZhbHVlcyhkYXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlOiBFY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZVNlcnZpY2U6IFVuc3Vic2NyaWJlU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWNhYnNEYXRlUGlja2VySGVhZGVyU2VydmljZVxyXG4gICAgICAuZ2V0Q29uZmlnKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVTZXJ2aWNlLnN1YnNjcmlwdGlvbigpKSlcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlnKSA9PiAodGhpcy50cmFuc2xhdGlvbkNvbmZpZyA9IGNvbmZpZykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKG5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sRGF0ZSA9IHRoaXMuY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2xEYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbHVlcyhjb250cm9sRGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIG9uVG91Y2g6IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkFwcGx5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fc2Vjb25kcyAmJiB0aGlzLl9taW51dGVzICYmIHRoaXMuX2hvdXJzKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBzZXRTZWNvbmRzKFxyXG4gICAgICAgIHNldE1pbnV0ZXMoXHJcbiAgICAgICAgICBzZXRIb3VycyhuZXcgRGF0ZSh0aGlzLl9kYXRlKSwgK3RoaXMuX2hvdXJzKSxcclxuICAgICAgICAgICt0aGlzLl9taW51dGVzLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgK3RoaXMuX3NlY29uZHMsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoUGlja2VyVmFsdWUoZGF0ZTogRGF0ZSk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJ1blRpbWVvdXQpIHtcclxuICAgICAgICB0aGlzLl9waWNrZXJWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZVRpbWUoZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDMwMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXREYXRlVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICBpZiAoZGF0ZSAmJiBpc1ZhbGlkKG5ldyBEYXRlKGRhdGUpKSkge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLmhpZGVTZWNvbmRzXHJcbiAgICAgICAgPyBmb3JtYXQobmV3IERhdGUoZGF0ZSksIGBkZC9NTS95eXl5LCBISDptbWApXHJcbiAgICAgICAgOiBmb3JtYXQobmV3IERhdGUoZGF0ZSksIGBkZC9NTS95eXl5LCBISDptbTpzc2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJvdW5kTnVtYmVyKG51bTogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0obnVtLCAnMi4wLTAnKSA/PyAnMDAnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZXMoZGF0ZTogRGF0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcclxuICAgIHRoaXMub25Ub3VjaChkYXRlKTtcclxuICAgIHRoaXMuX2RhdGUgPSBkYXRlO1xyXG5cclxuICAgIGlmIChkYXRlICYmIGlzVmFsaWQoZGF0ZSkpIHtcclxuICAgICAgdGhpcy5ob3VycyA9IGRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLm1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnNlY29uZHMgPSBkYXRlLmdldFNlY29uZHMoKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZWNhYnMtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dC0td3JhcHBlciB3LWZ1bGxcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICBjbGFzcz1cImZha2UtaW5wdXRcIlxyXG4gICAgICBbaWRdPVwiX2RhdGVcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cIl9kYXRlXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCJcclxuICAgICAgW21pbl09XCJtaW5EYXRlXCJcclxuICAgICAgW21heF09XCJtYXhEYXRlXCJcclxuICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcclxuICAgIC8+XHJcbiAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlciBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiaGVhZGVyXCIgW3RvdWNoVWldPVwidG91Y2hVaVwiIGNsYXNzPVwiZGF0ZXBpY2tlci11aVwiPlxyXG4gICAgICA8bWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtLWlucHV0c1wiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0IHRpbWVcIlxyXG4gICAgICAgICAgICAgIGVjYWJzRGlnaXRzT25seVxyXG4gICAgICAgICAgICAgIGVjYWJzTnVtYmVyQm9yZGVyXHJcbiAgICAgICAgICAgICAgW2RpZ2l0c09ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImhvdXJzXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiX2hvdXJzXCJcclxuICAgICAgICAgICAgICBbbWF4VmFsdWVdPVwibWF4VmFsdWVIb3Vyc1wiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJob3Vyc1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+Ojwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dCB0aW1lXCJcclxuICAgICAgICAgICAgICBbaWRdPVwibWludXRlc1wiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtaW51dGVzXCJcclxuICAgICAgICAgICAgICBlY2Fic0RpZ2l0c09ubHlcclxuICAgICAgICAgICAgICBlY2Fic051bWJlckJvcmRlclxyXG4gICAgICAgICAgICAgIFtkaWdpdHNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFttYXhWYWx1ZV09XCJtYXhWYWx1ZU1pbnV0ZXNTZWNvbmRzXCJcclxuICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZVNlY29uZHNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPjo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0IHRpbWVcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cInNlY29uZHNcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRzXCJcclxuICAgICAgICAgICAgICAgIGVjYWJzRGlnaXRzT25seVxyXG4gICAgICAgICAgICAgICAgZWNhYnNOdW1iZXJCb3JkZXJcclxuICAgICAgICAgICAgICAgIFtkaWdpdHNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW21heFZhbHVlXT1cIm1heFZhbHVlTWludXRlc1NlY29uZHNcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGVjYWJzLWRhdGUtcGlja2VyLWFjdGlvbnMgW2FwcGx5TGFiZWxdPVwiYXBwbHlMYWJlbCA/PyB0cmFuc2xhdGlvbkNvbmZpZz8uYXBwbHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuY2VsTGFiZWxdPVwiY2FuY2VsTGFiZWwgPz8gdHJhbnNsYXRpb25Db25maWc/LmNhbmNlbExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBseSk9XCJvbkFwcGx5KClcIj5cclxuICAgICAgICAgIDwvZWNhYnMtZGF0ZS1waWNrZXItYWN0aW9ucz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci1hY3Rpb25zPlxyXG4gICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDxpbnB1dCAjbWF0Q3VzdG9tSW5wdXRcclxuICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0IHctZnVsbCBkYXRlLWlucHV0XCJcclxuICAgICAgICAgICBbaWRdPVwibmFtZVwiXHJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwaWNrZXJWYWx1ZVwiXHJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgIGVjYWJzTWFza0RhdGVcclxuICAgICAgICAgICBbaXNEYXRlVGltZU1hc2tdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgW2NvbnNpZGVyU2Vjb25kc109XCIhaGlkZVNlY29uZHNcIlxyXG4gICAgICAgICAgIChibHVyKT1cIm9uVG91Y2goKVwiXHJcbiAgICAvPlxyXG5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICNtYXRDdXN0b21CdXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLXVpX190b2dnbGUgdGV4dC1ncmF5LTUwMFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9lY2Ficy1lbGVtZW50LXdyYXBwZXI+XHJcbiJdfQ==
@@ -1,5 +1,5 @@
1
- import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
- import { NgControl, NG_VALUE_ACCESSOR, } from '@angular/forms';
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NgControl, } from '@angular/forms';
3
3
  import EcabsElementBaseComponent from '../base/element-base';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import * as i0 from "@angular/core";
@@ -11,6 +11,7 @@ import * as i5 from "../base/directives/min-max.directive";
11
11
  export class EcabsInputComponent extends EcabsElementBaseComponent {
12
12
  injector;
13
13
  destroyRef;
14
+ matCustomInput;
14
15
  digitsOnly;
15
16
  allowDecimal;
16
17
  allowHyphen;
@@ -75,7 +76,7 @@ export class EcabsInputComponent extends EcabsElementBaseComponent {
75
76
  useExisting: EcabsInputComponent,
76
77
  multi: true,
77
78
  },
78
- ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input\r\n ecabsDigitsOnly\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: i5.EcabsMinDirective, selector: "[mini][formControlName],[mini][formControl],[mini][ngModel]", inputs: ["mini"] }, { kind: "directive", type: i5.EcabsMaxDirective, selector: "[maxi][formControlName],[maxi][formControl],[maxi][ngModel]", inputs: ["maxi"] }] });
79
+ ], viewQueries: [{ propertyName: "matCustomInput", first: true, predicate: ["matCustomInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input #matCustomInput\r\n ecabsDigitsOnly\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: i5.EcabsMinDirective, selector: "[mini][formControlName],[mini][formControl],[mini][ngModel]", inputs: ["mini"] }, { kind: "directive", type: i5.EcabsMaxDirective, selector: "[maxi][formControlName],[maxi][formControl],[maxi][ngModel]", inputs: ["maxi"] }] });
79
80
  }
80
81
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsInputComponent, decorators: [{
81
82
  type: Component,
@@ -85,8 +86,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
85
86
  useExisting: EcabsInputComponent,
86
87
  multi: true,
87
88
  },
88
- ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input\r\n ecabsDigitsOnly\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
89
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.DestroyRef }]; }, propDecorators: { digitsOnly: [{
89
+ ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input #matCustomInput\r\n ecabsDigitsOnly\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
90
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.DestroyRef }]; }, propDecorators: { matCustomInput: [{
91
+ type: ViewChild,
92
+ args: ['matCustomInput', { static: false }]
93
+ }], digitsOnly: [{
90
94
  type: Input
91
95
  }], allowDecimal: [{
92
96
  type: Input
@@ -103,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
103
107
  }], onblur: [{
104
108
  type: Output
105
109
  }] } });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWlucHV0L2VjYWJzLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1pbnB1dC9lY2Ficy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFFWixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyx5QkFBeUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztBQWFoRSxNQUFNLE9BQU8sbUJBQ1gsU0FBUSx5QkFBeUI7SUFvQ3ZCO0lBQ1M7SUFqQ25CLFVBQVUsQ0FBVztJQUdyQixZQUFZLENBQVc7SUFHdkIsV0FBVyxDQUFXO0lBRWIsR0FBRyxDQUFVO0lBQ2IsSUFBSSxDQUFVO0lBQ2QsSUFBSSxDQUFVO0lBQ2QsSUFBSSxDQUFVO0lBRWIsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDM0MsR0FBRyxDQUFtQjtJQUV0QixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDWCxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDekMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEtBQUssTUFBTSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsWUFDVSxRQUFrQixFQUNULFVBQXNCO1FBRXZDLEtBQUssRUFBRSxDQUFDO1FBSEEsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNULGVBQVUsR0FBVixVQUFVLENBQVk7SUFHekMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLFNBQVMsR0FBYyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUE2QixDQUFDO1lBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTtpQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDekMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFekIsT0FBTyxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUV4QixVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVSxDQUFDLENBQU07UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO3dHQWpGVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwyTkFSbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsbUJBQW1CO2dCQUNoQyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsaURDNUJILDYzQkE0QkE7OzRGREVhLG1CQUFtQjtrQkFYL0IsU0FBUzsrQkFDRSxhQUFhLGFBRVo7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxxQkFBcUI7NEJBQ2hDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3dIQU9ELFVBQVU7c0JBRFQsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUdHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIE5nQ29udHJvbCxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlY2Ficy1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VjYWJzLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBFY2Fic0lucHV0Q29tcG9uZW50LFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVjYWJzSW5wdXRDb21wb25lbnRcclxuICBleHRlbmRzIEVjYWJzRWxlbWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkluaXRcclxue1xyXG4gIEBJbnB1dCgpXHJcbiAgZGlnaXRzT25seSE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYWxsb3dEZWNpbWFsITogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KClcclxuICBhbGxvd0h5cGhlbiE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIG1heCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBtaW5pITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG1heGkhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc3RlcCE6IG51bWJlcjtcclxuXHJcbiAgQE91dHB1dCgpIG9uYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHZhbCE6IHN0cmluZyB8IG51bWJlcjtcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy52YWw7XHJcbiAgfVxyXG5cclxuICBzZXQgdmFsdWUodmFsKSB7XHJcbiAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWwgIT09IHZhbCkge1xyXG4gICAgICB0aGlzLnZhbCA9IHZhbDtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ2V0RGF0YSgpPy5jb250cm9sPy51cGRhdGVPbiAhPT0gJ2JsdXInKSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aGlzLmRpZ2l0c09ubHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKG5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcclxuXHJcbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIGJsdXJDaGFuZ2UoZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uYmx1ci5lbWl0KGUpO1xyXG4gIH1cclxufVxyXG4iLCI8ZWNhYnMtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dC0td3JhcHBlclwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIGVjYWJzRGlnaXRzT25seVxyXG4gICAgICBbZGlnaXRzT25seV09XCJkaWdpdHNPbmx5XCJcclxuICAgICAgW2RlY2ltYWxdPVwiYWxsb3dEZWNpbWFsXCJcclxuICAgICAgW2FsbG93SHlwaGVuXT1cImFsbG93SHlwaGVuXCJcclxuICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dFwiXHJcbiAgICAgIFt0eXBlXT1cInR5cGVcIlxyXG4gICAgICBbaWRdPVwibmFtZVwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAoYmx1cik9XCJvblRvdWNoKClcIlxyXG4gICAgICBbbWluaV09XCJtaW5pXCJcclxuICAgICAgW21heGldPVwibWF4aVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgIFttYXhsZW5ndGhdPVwibWF4TGVuZ3RoXCJcclxuICAgICAgW21heF09XCJtYXhcIlxyXG4gICAgICBbc3RlcF09XCJzdGVwXCJcclxuICAgICAgKGJsdXIpPVwiYmx1ckNoYW5nZSgkZXZlbnQpXCJcclxuICAgIC8+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0LS1zdWZmaXhcIiAqbmdJZj1cInR5cGUgIT09ICdudW1iZXInXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1pY29uXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuc3VmZml4XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZWNhYnMtZWxlbWVudC13cmFwcGVyPlxyXG4iXX0=
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWlucHV0L2VjYWJzLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1pbnB1dC9lY2Ficy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUdULFlBQVksRUFFWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsR0FFVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8seUJBQXlCLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFhaEUsTUFBTSxPQUFPLG1CQUNYLFNBQVEseUJBQXlCO0lBdUN2QjtJQUNTO0lBcENuQixjQUFjLENBQWE7SUFHM0IsVUFBVSxDQUFXO0lBR3JCLFlBQVksQ0FBVztJQUd2QixXQUFXLENBQVc7SUFFYixHQUFHLENBQVU7SUFDYixJQUFJLENBQVU7SUFDZCxJQUFJLENBQVU7SUFDZCxJQUFJLENBQVU7SUFFYixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMzQyxHQUFHLENBQW1CO0lBRXRCLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsR0FBRztRQUNYLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsS0FBSyxNQUFNLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbkI7U0FDRjtJQUNILENBQUM7SUFFRCxZQUNVLFFBQWtCLEVBQ1QsVUFBc0I7UUFFdkMsS0FBSyxFQUFFLENBQUM7UUFIQSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ1QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUd6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sU0FBUyxHQUFjLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQTZCLENBQUM7WUFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO2lCQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN6QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUV6QixPQUFPLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRXhCLFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBTTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7d0dBcEZVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDJOQVJuQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxtQkFBbUI7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixtS0M5QkgsaytCQTRCQTs7NEZESWEsbUJBQW1CO2tCQVgvQixTQUFTOytCQUNFLGFBQWEsYUFFWjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHFCQUFxQjs0QkFDaEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7d0hBT0QsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJOUMsVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBR0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICBOZ0NvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IEVjYWJzRWxlbWVudEJhc2VDb21wb25lbnQgZnJvbSAnLi4vYmFzZS9lbGVtZW50LWJhc2UnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IEVjYWJzSW5wdXRDb21wb25lbnQsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWNhYnNJbnB1dENvbXBvbmVudFxyXG4gIGV4dGVuZHMgRWNhYnNFbGVtZW50QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnbWF0Q3VzdG9tSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBtYXRDdXN0b21JbnB1dDogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KClcclxuICBkaWdpdHNPbmx5ITogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KClcclxuICBhbGxvd0RlY2ltYWwhOiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGFsbG93SHlwaGVuITogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgbWF4ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG1pbmkhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4aSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBzdGVwITogbnVtYmVyO1xyXG5cclxuICBAT3V0cHV0KCkgb25ibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgdmFsITogc3RyaW5nIHwgbnVtYmVyO1xyXG5cclxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnZhbDtcclxuICB9XHJcblxyXG4gIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbCAhPT0gdmFsKSB7XHJcbiAgICAgIHRoaXMudmFsID0gdmFsO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5nZXREYXRhKCk/LmNvbnRyb2w/LnVwZGF0ZU9uICE9PSAnYmx1cicpIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2godmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZixcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHRoaXMuZGlnaXRzT25seSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICBpZiAobmdDb250cm9sKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAgICAgdGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7fTtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgYmx1ckNoYW5nZShlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25ibHVyLmVtaXQoZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxlY2Ficy1lbGVtZW50LXdyYXBwZXIgW2RhdGFdPVwiZ2V0RGF0YSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0LS13cmFwcGVyXCI+XHJcbiAgICA8aW5wdXQgI21hdEN1c3RvbUlucHV0XHJcbiAgICAgICAgICAgZWNhYnNEaWdpdHNPbmx5XHJcbiAgICAgICAgICAgW2RpZ2l0c09ubHldPVwiZGlnaXRzT25seVwiXHJcbiAgICAgICAgICAgW2RlY2ltYWxdPVwiYWxsb3dEZWNpbWFsXCJcclxuICAgICAgICAgICBbYWxsb3dIeXBoZW5dPVwiYWxsb3dIeXBoZW5cIlxyXG4gICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZF9faW5wdXRcIlxyXG4gICAgICAgICAgIFt0eXBlXT1cInR5cGVcIlxyXG4gICAgICAgICAgIFtpZF09XCJuYW1lXCJcclxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgIChibHVyKT1cIm9uVG91Y2goKVwiXHJcbiAgICAgICAgICAgW21pbmldPVwibWluaVwiXHJcbiAgICAgICAgICAgW21heGldPVwibWF4aVwiXHJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiXHJcbiAgICAgICAgICAgW21heF09XCJtYXhcIlxyXG4gICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxyXG4gICAgICAgICAgIChibHVyKT1cImJsdXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAvPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dC0tc3VmZml4XCIgKm5nSWY9XCJ0eXBlICE9PSAnbnVtYmVyJ1wiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaWNvblwiPjwvbmctY29udGVudD5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnN1ZmZpeFwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2VjYWJzLWVsZW1lbnQtd3JhcHBlcj5cclxuIl19