@elderbyte/ngx-starter 13.9.3 → 13.9.4

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.
@@ -165,6 +165,11 @@ export class ElderSelectComponent extends ElderSelectBase {
165
165
  input.value = null;
166
166
  }
167
167
  }
168
+ onInputFocus(autoTrigger) {
169
+ if (!this._autocomplete) {
170
+ this.openPanel(autoTrigger);
171
+ }
172
+ }
168
173
  get isOptionDisabledInternalFn() {
169
174
  return (option) => {
170
175
  if (!this.isEntitySelected(option)) {
@@ -193,18 +198,21 @@ export class ElderSelectComponent extends ElderSelectBase {
193
198
  autoTrigger.closePanel();
194
199
  }
195
200
  else {
196
- this.logger.debug('Requesting to open auto-complete panel...', autoTrigger);
197
- if (this.suggestionsDc) {
198
- try {
199
- this.suggestionsDc.start(this.sorts, this.filters);
200
- }
201
- catch (err) {
202
- this.logger.error('Failed to start DC!', err);
203
- this.updateState(ElderSelectComponentState.error(err));
204
- }
201
+ this.openPanel(autoTrigger);
202
+ }
203
+ }
204
+ openPanel(autoTrigger) {
205
+ this.logger.debug('Requesting to open auto-complete panel...', autoTrigger);
206
+ if (this.suggestionsDc) {
207
+ try {
208
+ this.suggestionsDc.start(this.sorts, this.filters);
209
+ }
210
+ catch (err) {
211
+ this.logger.error('Failed to start DC!', err);
212
+ this.updateState(ElderSelectComponentState.error(err));
205
213
  }
206
- autoTrigger.openPanel();
207
214
  }
215
+ autoTrigger.openPanel();
208
216
  }
209
217
  onInputClicked(autoTrigger) {
210
218
  // this.logger.debug('onInputClicked, locked: ' + this.isLocked + ', autocomplete: ' + this.autocomplete, autoTrigger);
@@ -363,7 +371,7 @@ ElderSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
363
371
  useExisting: forwardRef(() => ElderSelectComponent)
364
372
  },
365
373
  ...buildFormIntegrationProviders(ElderSelectComponent)
366
- ], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense"] }, { type: i7.ElderFormFieldNoHintDirective, selector: "mat-form-field[elderNoHint]", inputs: ["elderNoHint"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i1.MatPrefix, selector: "[matPrefix]" }, { type: i9.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"] }, { type: i10.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i12.ElderSelectOnTabDirective, selector: "[elderSelectOnTab]" }, { type: i11.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i14.ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i5.AsyncPipe, "translate": i15.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
374
+ ], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus(autoTrigger)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense"] }, { type: i7.ElderFormFieldNoHintDirective, selector: "mat-form-field[elderNoHint]", inputs: ["elderNoHint"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i1.MatPrefix, selector: "[matPrefix]" }, { type: i9.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"] }, { type: i10.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i12.ElderSelectOnTabDirective, selector: "[elderSelectOnTab]" }, { type: i11.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i14.ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i5.AsyncPipe, "translate": i15.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
367
375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: ElderSelectComponent, decorators: [{
368
376
  type: Component,
369
377
  args: [{ selector: 'elder-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -372,7 +380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
372
380
  useExisting: forwardRef(() => ElderSelectComponent)
373
381
  },
374
382
  ...buildFormIntegrationProviders(ElderSelectComponent)
375
- ], template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"] }]
383
+ ], template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus(autoTrigger)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"] }]
376
384
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { inputRef: [{
377
385
  type: ViewChild,
378
386
  args: ['input']
@@ -399,4 +407,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
399
407
  }], hintPropertyResolver: [{
400
408
  type: Input
401
409
  }] } });
402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L2VsZGVyLXNlbGVjdC9lbGRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvZWxkZXItc2VsZWN0L2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFBYyxVQUFVLEVBQ2pDLEtBQUssRUFHTCxNQUFNLEVBQUUsU0FBUyxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUMvRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBNkIsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUNuRixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFbkgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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Z0JBY0ssWUFBWTtzQkFEdEIsS0FBSztnQkFNSyxvQkFBb0I7c0JBRDlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLFxuICBJbnB1dCwgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LCBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtidWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVyc30gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Zvcm1zL3RlbXBsYXRlLWNvbXBvc2l0ZS1jb250cm9sJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJRGF0YUNvbnRleHR9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsIHNraXAsIGZpbHRlciwgc3RhcnRXaXRoLCB3aXRoTGF0ZXN0RnJvbSwgc3dpdGNoTWFwLCB0YWtlLCB0aW1lb3V0LCBjYXRjaEVycm9yXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVUcmlnZ2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtFTERFUl9TRUxFQ1RfQkFTRSwgRWxkZXJTZWxlY3RCYXNlLCBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLCBUZXh0UmVzb2x2ZXJGbn0gZnJvbSAnLi4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtJRWxkZXJFbnRpdHlWYWx1ZUFjY2Vzc29yfSBmcm9tICcuLi9lbGRlci1lbnRpdHktdmFsdWUtYWNjZXNzb3InO1xuaW1wb3J0IHtFbGRlclNlbGVjdEZpcnN0VXRpbH0gZnJvbSAnLi4vYXV0by9lbGRlci1zZWxlY3QtZmlyc3QtdXRpbCc7XG5cbmNsYXNzIEVudGl0eUNvbnRleHQ8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IFQsXG4gICAgcHVibGljIHJlYWRvbmx5IGhpbnRUZXh0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmdcbiAgKSB7XG4gIH1cbn1cblxuXG4vKipcbiAqIFRoZSBlbGRlci1zZWxlY3QgY29udHJvbCBhbGxvd3MgdG8gc2VsZWN0IGEgc2luZ2xlXG4gKiBlbnRpdHkuXG4gKlxuICogUHJpbWFyeSBmb2N1cyBpcyBvbiBlYXN5IHVzYWdlIGZvciBjb21tb24gc2NlbmFyaW9zOlxuICpcbiAqIC0gSW50ZWdyYXRlZCBpbnRvIGFuZ3VsYXIgZm9ybXMgYW5kIHZhbGlkYXRpb25cbiAqIC0gU3VwcG9ydCBlbnRpdHkgaWQgaGFuZGxpbmcsIGlucHV0IC8gb3V0cHV0IGlzIHRoZSBlbnRpdHkgaWQgdnMgZnVsbCB2YWx1ZS5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVMREVSX1NFTEVDVF9CQVNFLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWxkZXJTZWxlY3RDb21wb25lbnQpXG4gICAgfSxcbiAgICAuLi5idWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVycyhFbGRlclNlbGVjdENvbXBvbmVudClcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlbGVjdENvbXBvbmVudDxURW50aXR5ID0gYW55LCBUSWQgPSBhbnksIFRWYWx1ZSA9IFRFbnRpdHkgfCBUSWQ+XG4gIGV4dGVuZHMgRWxkZXJTZWxlY3RCYXNlPFRJZCwgVEVudGl0eSwgVFZhbHVlPlxuICBpbXBsZW1lbnRzIElFbGRlckVudGl0eVZhbHVlQWNjZXNzb3I8VEVudGl0eSwgVElkLCBUVmFsdWU+LCBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGludFByb3BlcnR5UmVzb2x2ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0UmVzb2x2ZXJGbj4oKHZhbHVlOiBURW50aXR5KSA9PiBudWxsKTtcblxuICBwcml2YXRlIF9hbGxvd051bGwgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcpXG4gIHB1YmxpYyBpbnB1dFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAvKipcbiAgICogU3RyaW5nIHRvIGRpc3BsYXkgZm9yIHRoZSAnbm90aGluZycgLyBudWxsIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG51bGxEaXNwbGF5ID0gJy0nO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5SWRDaGFuZ2U6IE9ic2VydmFibGU8VElkPjtcblxuICAvKipcbiAgICogU2ltaWxhciB0byBlbnRpdHktaWQgY2hhbmdlLCBidXQgZW1pdHMgb25seSB3aGVuIHRoZSB1c2VyXG4gICAqIGhhcyB1cGRhdGVkIHRoZSB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5SWRVcGRhdGVkOiBPYnNlcnZhYmxlPFRJZD47XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBlbnRpdHlDaGFuZ2U6IE9ic2VydmFibGU8VEVudGl0eT47XG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gZW50aXR5IGNoYW5nZSwgYnV0IGVtaXRzIG9ubHkgd2hlbiB0aGUgdXNlclxuICAgKiBoYXMgdXBkYXRlZCB0aGUgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eVVwZGF0ZWQ6IE9ic2VydmFibGU8VEVudGl0eT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZW50aXR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VEVudGl0eT4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9hdXRvY29tcGxldGUgPSBmYWxzZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5V3JhcHBlZCQ6IE9ic2VydmFibGU8RW50aXR5Q29udGV4dDxURW50aXR5Pj47XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnB1dFRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgcHJpdmF0ZSBlbnRpdHlDb250ZXh0OiBFbnRpdHlDb250ZXh0PFRFbnRpdHk+O1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgc3VwZXIoem9uZSk7XG5cbiAgICB0aGlzLmVudGl0eUlkQ2hhbmdlID0gdGhpcy52YWx1ZUNoYW5nZS5waXBlKFxuICAgICAgbWFwKHYgPT4gdGhpcy5lbnRpdHlJZEZyb21WYWx1ZSh2KSlcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlDaGFuZ2UgPSB0aGlzLl9lbnRpdHkkLnBpcGUoXG4gICAgICBza2lwKDEpIC8vIFNraXAgdGhlIGluaXRpYWwgb3IgY3VycmVudCB2YWx1ZVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eUlkVXBkYXRlZCA9IHRoaXMudmFsdWVVcGRhdGVkLnBpcGUoXG4gICAgICBtYXAodmFsdWUgPT4gdGhpcy5lbnRpdHlJZEZyb21WYWx1ZSh2YWx1ZSkpXG4gICAgKTtcblxuICAgIHRoaXMuZW50aXR5VXBkYXRlZCA9IHRoaXMuZW50aXR5SWRVcGRhdGVkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZW50aXR5SWQgPT4gdGhpcy5hd2FpdEVudGl0eVdpdGhJZChlbnRpdHlJZCwgdGhpcy50aW1lb3V0QWZ0ZXJNcykpLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBhd2FpdEVudGl0eVdpdGhJZCAtPiB0aW1lZCBvdXQgYWZ0ZXI6ICR7dGhpcy50aW1lb3V0QWZ0ZXJNc31gLCBlcnIpO1xuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eVdyYXBwZWQkID0gY29tYmluZUxhdGVzdChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5fZW50aXR5JCxcbiAgICAgICAgdGhpcy5kaXNwbGF5UHJvcGVydHlSZXNvbHZlciQsXG4gICAgICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIkXG4gICAgICBdXG4gICAgKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWUsIGRQUiwgaFBSXSkgPT4gbmV3IEVudGl0eUNvbnRleHQ8VEVudGl0eT4odmFsdWUsIGhQUih2YWx1ZSksIGRQUih2YWx1ZSkpKVxuICAgICk7XG5cbiAgICB0aGlzLmlucHV0VGV4dCQgPSB0aGlzLmVudGl0eVdyYXBwZWQkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgdGFwKHZhbHVlQ29udGV4dCA9PiB0aGlzLmVudGl0eUNvbnRleHQgPSB2YWx1ZUNvbnRleHQpLFxuICAgICAgbWFwKHZhbHVlQ29udGV4dCA9PiB7XG4gICAgICAgIGlmICh2YWx1ZUNvbnRleHQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVDb250ZXh0LmRpc3BsYXlUZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZSBDeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmF1dG9DbGVhblVwKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQmVoYXZpb3VyIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGF1dG9jb21wbGV0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgJ25vdGhpbmcnIC8gbnVsbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWxsb3dOdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2FsbG93TnVsbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGxvd051bGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93TnVsbDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZW50aXR5KGVudGl0eTogVEVudGl0eSkge1xuICAgIHRoaXMuX2VudGl0eSQubmV4dChlbnRpdHkpO1xuICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKFxuICAgICAgdGhpcy5lbnRpdHlUb1ZhbHVlKGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBlbnRpdHkoKTogVEVudGl0eSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGVudGl0eSBhcyBvYnNlcnZhYmxlIHN0cmVhbS4gKEJlaGF2aW91clN1YmplY3QpXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVudGl0eSQoKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0eUlkKGlkOiBUSWQpIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKDxhbnk+aWQgYXMgVFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RFbnRpdHlCeUlkKGlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudGl0eUlkKCk6IFRJZCB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpbnRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5oaW50UHJvcGVydHlSZXNvbHZlciA9ICh2YWx1ZSA9PiB0aGlzLnByb3BlcnR5U3RyaW5nVmFsdWUodmFsdWUsIHByb3BlcnR5KSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpbnRQcm9wZXJ0eVJlc29sdmVyKHJlc29sdmVyOiBUZXh0UmVzb2x2ZXJGbikge1xuICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIkLm5leHQocmVzb2x2ZXIpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG9uSW5wdXRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAodGhpcy5lbnRpdHlDb250ZXh0LnZhbHVlKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZW50aXR5Q29udGV4dC5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQudmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0VudGl0eVNlbGVjdGVkKG9wdGlvbikpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcHRpb25EaXNhYmxlZEZuKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25EaXNhYmxlZEZuKG9wdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbkhpZGRlbkludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uSGlkZGVuRm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25IaWRkZW5GbihvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuXG4gIHB1YmxpYyB0b2dnbGVQYW5lbChhdXRvVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xuICAgIGlmIChhdXRvVHJpZ2dlci5hdXRvY29tcGxldGUuaXNPcGVuKSB7XG4gICAgICBhdXRvVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdSZXF1ZXN0aW5nIHRvIG9wZW4gYXV0by1jb21wbGV0ZSBwYW5lbC4uLicsIGF1dG9UcmlnZ2VyKTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zRGMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zRGMuc3RhcnQodGhpcy5zb3J0cywgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEQyEnLCBlcnIpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZS5lcnJvcihlcnIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXV0b1RyaWdnZXIub3BlblBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5wdXRDbGlja2VkKGF1dG9UcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyKTogdm9pZCB7XG5cbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1Zygnb25JbnB1dENsaWNrZWQsIGxvY2tlZDogJyArIHRoaXMuaXNMb2NrZWQgKyAnLCBhdXRvY29tcGxldGU6ICcgKyB0aGlzLmF1dG9jb21wbGV0ZSwgYXV0b1RyaWdnZXIpO1xuICAgIGlmICh0aGlzLmlzTG9ja2VkIHx8IHRoaXMuYXV0b2NvbXBsZXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlUGFuZWwoYXV0b1RyaWdnZXIpO1xuICB9XG5cbiAgcHVibGljIG9uT3B0aW9uU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZTogVEVudGl0eSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRW50aXR5U2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZSkpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKG51bGwpOyAvLyBIQUNLOiBFbnN1cmUgd2UgdHJpZ2dlciB2aWV3IHJlZHJhd1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlQnlFbnRpdHkoc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgb3BlblNlbGVjdGlvblBvcHVwKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvblBvcHVwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblBvcHVwLmNob29zZShcbiAgICAgICAgdGhpcy5maWx0ZXJzLFxuICAgICAgICB0aGlzLnNvcnRzLFxuICAgICAgICBmYWxzZVxuICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgIChzZWxlY3Rpb246IFRFbnRpdHlbXSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVCeUVudGl0eShzZWxlY3Rpb25bMF0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdDYW50IG9wZW4gc2VsZWN0aW9uIGJyb3dzZXIgcG9wdXAsIHNpbmNlIFtTZWxlY3Rpb25Nb2RlbFBvcHVwRGlyZWN0aXZlXSB3YXMgbm90IGZvdW5kIScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhcihldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JjZVJlbG9hZEZpcnN0KCkge1xuICAgIHRoaXMudmFsdWUgPSBudWxsOyAvLyB2YWx1ZUlkIGlzIHNldCB0byBudWxsIGF1dG9tYXRpY2FsbHlcbiAgICBFbGRlclNlbGVjdEZpcnN0VXRpbC50cnlTZWxlY3RGaXJzdCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZUJ5RW50aXR5KGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIHRoaXMuX2VudGl0eSQubmV4dChlbnRpdHkpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUoXG4gICAgICB0aGlzLmVudGl0eVRvVmFsdWUoZW50aXR5KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyl7XG4gICAgdGhpcy5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMob3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYmx1cigpe1xuICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmJsdXIoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBBYnN0cmFjdCBJbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgc3VnZ2VzdGlvbnMgZGF0YS1jb250ZXh0IGhhcyBjaGFuZ2VkXG4gICAqL1xuICBwcm90ZWN0ZWQgb25TdWdnZXN0aW9uc0RjQ2hhbmdlZChkYXRhOiBJRGF0YUNvbnRleHQ8VEVudGl0eT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0RW50aXR5QnlJZCh0aGlzLmVudGl0eUlkKTtcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBNZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcm90ZWN0ZWQgdmFsdWVzRXF1YWxzKGE6IFRWYWx1ZSwgYjogVFZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5SWRGcm9tVmFsdWUoYSkgPT09IHRoaXMuZW50aXR5SWRGcm9tVmFsdWUoYik7XG4gIH1cblxuICBwcml2YXRlIGF3YWl0RW50aXR5V2l0aElkKGVudGl0eUlkOiBUSWQsIHRpbWVvdXRNczogbnVtYmVyKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5JC5waXBlKFxuICAgICAgZmlsdGVyKGVudGl0eSA9PiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSkgPT09IGVudGl0eUlkKSxcbiAgICAgIHRha2UoMSksXG4gICAgICB0aW1lb3V0KHRpbWVvdXRNcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VudGl0eVNlbGVjdGVkKGVudGl0eTogVEVudGl0eSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSkgPT09IHRoaXMuZW50aXR5SWQ7XG4gIH1cblxuICBwcml2YXRlIGVudGl0eUlkRnJvbVZhbHVlKHZhbHVlOiBUVmFsdWUpOiBUSWQge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJZCkge1xuICAgICAgcmV0dXJuIDxhbnk+dmFsdWUgYXMgVElkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSAoPGFueT52YWx1ZSkgYXMgVEVudGl0eTtcbiAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RFbnRpdHlCeUlkKGlkOiBUSWQpOiB2b2lkIHtcblxuICAgIGNvbnN0IGN1cnJlbnRFbnRpdHkgPSB0aGlzLmVudGl0eTtcbiAgICBpZiAoY3VycmVudEVudGl0eSAmJiB0aGlzLmdldEVudGl0eUlkKGN1cnJlbnRFbnRpdHkpID09PSBpZCkge1xuICAgICAgcmV0dXJuOyAvLyBFbnRpdHkgYWxyZWFkeSBsb2FkZWRcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGN1cnJlbnRFbnRpdHkgIT09IG51bGwgJiYgY3VycmVudEVudGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW50aXR5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNEYykge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZmluZEluRGF0YUNvbnRleHQoaWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZEVudGl0eUJ5SWQoaWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gc2VsZWN0IHZhbHVlIGJ5IElkOiAnICsgaWQgKyAnIC0gRGF0YUNvbnRleHQgbm90IGF2YWlsYWJsZS4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRFbnRpdHlCeUlkKGlkOiBUSWQpOiB2b2lkIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGMuZGF0YVNvdXJjZS5maW5kQnlJZCg8YW55PmlkKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgZW50aXR5ID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGVkIG1pc3NpbmcgZW50aXR5IGJ5IGlkICcgKyBpZCArICc6JywgZW50aXR5KTtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGxvYWQgZW50aXR5IGJ5IGlkICcgKyBpZCwgZXJyKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZXJyb3IoZXJyKSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbkRhdGFDb250ZXh0KGlkOiBUSWQpOiBURW50aXR5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNEYy5zbmFwc2hvdC5kYXRhXG4gICAgICAuZmluZCh2ID0+IHRoaXMuZ2V0RW50aXR5SWQodikgPT09IGlkKTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRpdHlUb1ZhbHVlKGVudGl0eTogVEVudGl0eSk6IFRWYWx1ZSB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0RW50aXR5SWQoZW50aXR5KTtcbiAgICAgIHJldHVybiA8YW55PmlkIGFzIFRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxhbnk+ZW50aXR5IGFzIFRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBhZnRlciBhIHZhbHVlIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhpcyBjb250cm9sLlxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIHdyaXRlVG9Db250cm9sKHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gPGFueT52YWx1ZSBhcyBUSWQ7XG4gICAgICAvLyBWYWx1ZSB3YXMgd3JpdHRlbiBhcyBlbnRpdHkgaWQsIGVuc3VyZSB3ZSBzZWxlY3QgZW50aXR5IGJ5IGlkXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnd3JpdGVUb0NvbnRyb2w6IHZhbHVlIHdhcyB3cml0dGVuIGFzIGlkOiAnICsgZW50aXR5SWQsIHZhbHVlKTtcbiAgICAgIHRoaXMuc2VsZWN0RW50aXR5QnlJZChlbnRpdHlJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZhbHVlIHdhcyB3cml0dGVuIGFzIGVudGl0eSwgZW5zdXJlIGVudGl0eSBpcyB1cGRhdGVkXG4gICAgICBjb25zdCBjdXJyZW50RW50aXR5ID0gdGhpcy5lbnRpdHk7XG4gICAgICBjb25zdCBuZXdFbnRpdHkgPSA8YW55PnZhbHVlIGFzIFRFbnRpdHk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnd3JpdGVUb0NvbnRyb2w6IHZhbHVlIHdhcyB3cml0dGVuIGFzIGVudGl0eTogJyArIEpTT04uc3RyaW5naWZ5KG5ld0VudGl0eSksIHZhbHVlKTtcbiAgICAgIGlmICghdGhpcy5pc0VxdWFsKGN1cnJlbnRFbnRpdHksIG5ld0VudGl0eSkpIHtcbiAgICAgICAgdGhpcy5fZW50aXR5JC5uZXh0KG5ld0VudGl0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdJZ25vcmVkIHdyaXR0ZW4gZW50aXR5IGFzIGl0IGlzIGFscmVhZHkgc2V0IHRvIGVudGl0eSQhJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLndyaXRlVG9Db250cm9sKHZhbHVlKTtcbiAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiKGVudGl0eVdyYXBwZWQkIHwgYXN5bmMpIGFzIGVudGl0eVdyYXBwZXJcIiBmeEZsZXhcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLXN0ZC1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgIFtlbGRlckRlbnNlXT1cImRlbnNlXCJcbiAgICAgICAgICAgICAgICBbZWxkZXJOb0hpbnRdPVwibm9IaW50XCJcbj5cblxuICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cblxuXG4gIDxuZy1jb250YWluZXIgbWF0UHJlZml4ICpuZ0lmPVwiKG1lcmdlZFN0YXRlJCB8IGFzeW5jKSBhcyBzdGF0ZVwiPlxuXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIGRpc2FibGVkXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0IGNsaWNrYWJsZS1pY29uXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmxvYWRpbmddPVwic3RhdGUubG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJzdGF0ZT8uZXJyb3IgPyAnd2FybicgOiBjb2xvclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkN1cnJlbnRDbGlja2VkKGVudGl0eSlcIlxuICAgID5cbiAgICAgIHt7aWNvbn19XG4gICAgPC9tYXQtaWNvbj5cblxuXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiIWljb24gJiYgc3RhdGU/LmVycm9yXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZWFkaW5nLWljb24gcHJlZml4LXBhZGRpbmcgbm9zZWxlY3RcIlxuICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIj5cbiAgICAgIHdhcm5pbmdcbiAgICA8L21hdC1pY29uPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIEEgZHluYW1pYyBpbnB1dCAtLT5cbiAgPGlucHV0ICNpbnB1dFxuICAgIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgZnhGbGV4PVwiZ3Jvd1wiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seSB8fCAhYXV0b2NvbXBsZXRlXCJcbiAgICBbbmFtZV09XCJuYW1lICsgJy1pbm5lci1pbnB1dCdcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgW21hdEF1dG9jb21wbGV0ZV0gI2F1dG9UcmlnZ2VyPVwibWF0QXV0b2NvbXBsZXRlVHJpZ2dlclwiXG4gICAgW2VsZGVyRWxkZXJBdXRvY29tcGxldGVdPVwiZWxkZXJBdXRvXCIgW3F1ZXJ5RmlsdGVyXT1cInF1ZXJ5RmlsdGVyXCIgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiIFtzb3J0c109XCJzb3J0c1wiXG4gICAgZWxkZXJTZWxlY3RPblRhYlxuICAgIFtjbGFzcy5zZWxlY3RdPVwiIWF1dG9jb21wbGV0ZVwiIChjbGljayk9XCJvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcilcIlxuICAgIFtuZ01vZGVsXT1cImlucHV0VGV4dCQgfCBhc3luY1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdzdWJtaXQnfVwiXG4gICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gID5cblxuICA8IS0tIFRoaXMgYnJlYWtzIHN0dWZmOiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkIHwgYXN5bmNcIiAtLT5cblxuICA8ZWxkZXItYXV0b2NvbXBsZXRlXG4gICAgI2VsZGVyQXV0bz1cImVsZGVyQXV0b2NvbXBsZXRlXCJcbiAgICBbc3VnZ2VzdGlvbnNEY109XCJzdWdnZXN0aW9uc0RjJCB8IGFzeW5jXCJcbiAgICBbdmFsdWVUZW1wbGF0ZV09XCJ2YWx1ZVRlbXBsYXRlXCJcbiAgICBbZW5hYmxlZF09XCJhdXRvY29tcGxldGVcIlxuICAgIFtkaXNwbGF5UHJvcGVydHlSZXNvbHZlcl09XCJkaXNwbGF5UHJvcGVydHlSZXNvbHZlciQgfCBhc3luY1wiXG4gICAgW2lzT3B0aW9uRGlzYWJsZWRGbl09XCJpc09wdGlvbkRpc2FibGVkSW50ZXJuYWxGblwiXG4gICAgW2lzT3B0aW9uSGlkZGVuRm5dPVwiaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuXCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkYW55KCRldmVudCkpXCJcbiAgPjwvZWxkZXItYXV0b2NvbXBsZXRlPlxuXG5cbiAgPG5nLWNvbnRhaW5lciBtYXRTdWZmaXg+XG5cbiAgICA8bWF0LWljb25cbiAgICAgICpuZ0lmPVwiIXNlbGVjdGlvblBvcHVwICYmICFhdXRvY29tcGxldGVcIiBjbGFzcz1cInNlbGVjdC1hcnJvdyBzdWZmaXgtaWNvbiBub3NlbGVjdFwiXG4gICAgICAoY2xpY2spPVwib25JbnB1dENsaWNrZWQoYXV0b1RyaWdnZXIpXCI+XG4gICAgICBhcnJvd19kcm9wX2Rvd25cbiAgICA8L21hdC1pY29uPlxuXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3VmZml4LWljb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25Qb3B1cCAmJiAoIWVudGl0eVdyYXBwZXIudmFsdWUgfHwgIWFsbG93TnVsbClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2VsZWN0aW9uUG9wdXAoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJTZWFyY2hcIlxuICAgICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdWZmaXgtaWNvblwiXG4gICAgICAgICAgICAqbmdJZj1cImVudGl0eVdyYXBwZXIudmFsdWUgJiYgYWxsb3dOdWxsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICAgICAgICBlbGRlclN0b3BFdmVudFByb3BhZ2F0aW9uXG4gICAgICAgICAgICB0YWJJbmRleD1cIi0xXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxtYXQtaGludCAqbmdJZj1cImVudGl0eVdyYXBwZXIuaGludFRleHRcIj57e2VudGl0eVdyYXBwZXIuaGludFRleHR9fTwvbWF0LWhpbnQ+XG5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cblxuXG4iXX0=
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L2VsZGVyLXNlbGVjdC9lbGRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvZWxkZXItc2VsZWN0L2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFBYyxVQUFVLEVBQ2pDLEtBQUssRUFHTCxNQUFNLEVBQUUsU0FBUyxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUMvRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBNkIsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUNuRixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFbkgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXJFLE1BQU0sYUFBYTtJQUNqQixZQUNrQixLQUFRLEVBQ1IsUUFBZ0IsRUFDaEIsV0FBbUI7UUFGbkIsVUFBSyxHQUFMLEtBQUssQ0FBRztRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7SUFFckMsQ0FBQztDQUNGO0FBR0Q7Ozs7Ozs7OztHQVNHO0FBY0gsTUFBTSxPQUFPLG9CQUNYLFNBQVEsZUFBcUM7SUF3RDdDOzs7O2dGQUk0RTtJQUU1RSxZQUNFLElBQVk7UUFFWixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUE5RGQ7Ozs7b0ZBSTRFO1FBRTNELFdBQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEQsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQWlCLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvRixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBSzNCOztXQUVHO1FBRUksZ0JBQVcsR0FBRyxHQUFHLENBQUM7UUFzQlIsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLFNBQVMsQ0FBQyxDQUFDO1FBRTVELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSWIsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBaUI1QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDcEMsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7U0FDN0MsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM1QyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDNUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFDNUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FDakM7WUFDRSxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyx3QkFBd0I7WUFDN0IsSUFBSSxDQUFDLHFCQUFxQjtTQUMzQixDQUNGLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxhQUFhLENBQVUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUN0RixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDeEMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDNUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsRUFDdEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2pCLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRTtnQkFDdEIsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxRQUFRO0lBRWYsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRTVFLElBQ1csWUFBWSxDQUFDLEtBQWM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNXLFNBQVMsQ0FBQyxHQUFZO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RSxJQUNXLE1BQU0sQ0FBQyxNQUFlO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFDVyxRQUFRLENBQUMsRUFBTztRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFNLEVBQVksQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFDVyxZQUFZLENBQUMsUUFBZ0I7UUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELElBQ1csb0JBQW9CLENBQUMsUUFBd0I7UUFDdEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXJFLFdBQVcsQ0FBQyxLQUFpQjtRQUNsQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQzVCLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDOUM7YUFBTTtZQUNMLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVNLFlBQVksQ0FBQyxXQUFtQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELElBQVcsMEJBQTBCO1FBQ25DLE9BQU8sQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtvQkFDM0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3hDO3FCQUFNO29CQUNMLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLHdCQUF3QjtRQUNqQyxPQUFPLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBR00sV0FBVyxDQUFDLFdBQW1DO1FBQ3BELElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDbkMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxXQUFtQztRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSTtnQkFDRixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNwRDtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO1NBQ0Y7UUFDRCxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxXQUFtQztRQUV2RCx1SEFBdUg7UUFDdkgsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsYUFBc0I7UUFDNUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0NBQXNDO1NBQ3RFO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxLQUFZO1FBQ3BDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDeEIsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsS0FBSyxFQUNWLEtBQUssQ0FDTixDQUFDLFNBQVMsQ0FDVCxDQUFDLFNBQW9CLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdGQUF3RixDQUFDLENBQUM7U0FDNUc7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQWE7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsdUNBQXVDO1FBQzFELG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsTUFBZTtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQzNCLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQXNCO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUU7O09BRUc7SUFDTyxzQkFBc0IsQ0FBQyxJQUEyQjtRQUMxRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRDs7OztnRkFJNEU7SUFFbEUsWUFBWSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBYSxFQUFFLFNBQWlCO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQ3ZELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxPQUFPLENBQUMsU0FBUyxDQUFDLENBQ25CLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBZTtRQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBYTtRQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBWSxLQUFZLENBQUM7U0FDMUI7YUFBTTtZQUNMLE1BQU0sTUFBTSxHQUFTLEtBQWlCLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEVBQU87UUFFOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzRCxPQUFPLENBQUMsd0JBQXdCO1NBQ2pDO1FBRUQsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDbkMsSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ3BCO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLFFBQVEsRUFBRTtvQkFDWixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztpQkFDeEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDekI7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLEdBQUcsK0JBQStCLENBQUMsQ0FBQzthQUMzRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxFQUFPO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBTSxFQUFFLENBQUM7YUFDNUMsU0FBUyxDQUNSLE1BQU0sQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7WUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxFQUFPO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSTthQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxhQUFhLENBQUMsTUFBZTtRQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxPQUFZLEVBQVksQ0FBQztTQUMxQjthQUFNO1lBQ0wsT0FBWSxNQUFnQixDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGNBQWMsQ0FBQyxLQUFhO1FBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixNQUFNLFFBQVEsR0FBUSxLQUFZLENBQUM7WUFDbkMsZ0VBQWdFO1lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDakM7YUFBTTtZQUNMLHdEQUF3RDtZQUN4RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFRLEtBQWdCLENBQUM7WUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7YUFDN0U7U0FDRjtRQUNELEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7a0hBN2JVLG9CQUFvQjtzR0FBcEIsb0JBQW9CLDBZQVJwQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1NBQ3BEO1FBQ0QsR0FBRyw2QkFBNkIsQ0FBQyxvQkFBb0IsQ0FBQztLQUN2RCxvSkN0REgsMnVHQWtHQTs0RkQxQ2Esb0JBQW9CO2tCQWJoQyxTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzt5QkFDcEQ7d0JBQ0QsR0FBRyw2QkFBNkIsc0JBQXNCO3FCQUN2RDs2RkFtQk0sUUFBUTtzQkFEZCxTQUFTO3VCQUFDLE9BQU87Z0JBT1gsV0FBVztzQkFEakIsS0FBSztnQkFJVSxjQUFjO3NCQUQ3QixNQUFNO2dCQVFTLGVBQWU7c0JBRDlCLE1BQU07Z0JBSVMsWUFBWTtzQkFEM0IsTUFBTTtnQkFRUyxhQUFhO3NCQUQ1QixNQUFNO2dCQTRGSSxZQUFZO3NCQUR0QixLQUFLO2dCQWFLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBZ0JLLE1BQU07c0JBRGhCLEtBQUs7Z0JBb0JLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBY0ssWUFBWTtzQkFEdEIsS0FBSztnQkFNSyxvQkFBb0I7c0JBRDlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLFxuICBJbnB1dCwgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LCBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtidWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVyc30gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Zvcm1zL3RlbXBsYXRlLWNvbXBvc2l0ZS1jb250cm9sJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJRGF0YUNvbnRleHR9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsIHNraXAsIGZpbHRlciwgc3RhcnRXaXRoLCB3aXRoTGF0ZXN0RnJvbSwgc3dpdGNoTWFwLCB0YWtlLCB0aW1lb3V0LCBjYXRjaEVycm9yXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVUcmlnZ2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtFTERFUl9TRUxFQ1RfQkFTRSwgRWxkZXJTZWxlY3RCYXNlLCBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLCBUZXh0UmVzb2x2ZXJGbn0gZnJvbSAnLi4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtJRWxkZXJFbnRpdHlWYWx1ZUFjY2Vzc29yfSBmcm9tICcuLi9lbGRlci1lbnRpdHktdmFsdWUtYWNjZXNzb3InO1xuaW1wb3J0IHtFbGRlclNlbGVjdEZpcnN0VXRpbH0gZnJvbSAnLi4vYXV0by9lbGRlci1zZWxlY3QtZmlyc3QtdXRpbCc7XG5cbmNsYXNzIEVudGl0eUNvbnRleHQ8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IFQsXG4gICAgcHVibGljIHJlYWRvbmx5IGhpbnRUZXh0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmdcbiAgKSB7XG4gIH1cbn1cblxuXG4vKipcbiAqIFRoZSBlbGRlci1zZWxlY3QgY29udHJvbCBhbGxvd3MgdG8gc2VsZWN0IGEgc2luZ2xlXG4gKiBlbnRpdHkuXG4gKlxuICogUHJpbWFyeSBmb2N1cyBpcyBvbiBlYXN5IHVzYWdlIGZvciBjb21tb24gc2NlbmFyaW9zOlxuICpcbiAqIC0gSW50ZWdyYXRlZCBpbnRvIGFuZ3VsYXIgZm9ybXMgYW5kIHZhbGlkYXRpb25cbiAqIC0gU3VwcG9ydCBlbnRpdHkgaWQgaGFuZGxpbmcsIGlucHV0IC8gb3V0cHV0IGlzIHRoZSBlbnRpdHkgaWQgdnMgZnVsbCB2YWx1ZS5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVMREVSX1NFTEVDVF9CQVNFLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWxkZXJTZWxlY3RDb21wb25lbnQpXG4gICAgfSxcbiAgICAuLi5idWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVycyhFbGRlclNlbGVjdENvbXBvbmVudClcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlbGVjdENvbXBvbmVudDxURW50aXR5ID0gYW55LCBUSWQgPSBhbnksIFRWYWx1ZSA9IFRFbnRpdHkgfCBUSWQ+XG4gIGV4dGVuZHMgRWxkZXJTZWxlY3RCYXNlPFRJZCwgVEVudGl0eSwgVFZhbHVlPlxuICBpbXBsZW1lbnRzIElFbGRlckVudGl0eVZhbHVlQWNjZXNzb3I8VEVudGl0eSwgVElkLCBUVmFsdWU+LCBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGludFByb3BlcnR5UmVzb2x2ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0UmVzb2x2ZXJGbj4oKHZhbHVlOiBURW50aXR5KSA9PiBudWxsKTtcblxuICBwcml2YXRlIF9hbGxvd051bGwgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcpXG4gIHB1YmxpYyBpbnB1dFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAvKipcbiAgICogU3RyaW5nIHRvIGRpc3BsYXkgZm9yIHRoZSAnbm90aGluZycgLyBudWxsIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG51bGxEaXNwbGF5ID0gJy0nO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5SWRDaGFuZ2U6IE9ic2VydmFibGU8VElkPjtcblxuICAvKipcbiAgICogU2ltaWxhciB0byBlbnRpdHktaWQgY2hhbmdlLCBidXQgZW1pdHMgb25seSB3aGVuIHRoZSB1c2VyXG4gICAqIGhhcyB1cGRhdGVkIHRoZSB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5SWRVcGRhdGVkOiBPYnNlcnZhYmxlPFRJZD47XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBlbnRpdHlDaGFuZ2U6IE9ic2VydmFibGU8VEVudGl0eT47XG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gZW50aXR5IGNoYW5nZSwgYnV0IGVtaXRzIG9ubHkgd2hlbiB0aGUgdXNlclxuICAgKiBoYXMgdXBkYXRlZCB0aGUgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eVVwZGF0ZWQ6IE9ic2VydmFibGU8VEVudGl0eT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZW50aXR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VEVudGl0eT4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9hdXRvY29tcGxldGUgPSBmYWxzZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5V3JhcHBlZCQ6IE9ic2VydmFibGU8RW50aXR5Q29udGV4dDxURW50aXR5Pj47XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnB1dFRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgcHJpdmF0ZSBlbnRpdHlDb250ZXh0OiBFbnRpdHlDb250ZXh0PFRFbnRpdHk+O1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgc3VwZXIoem9uZSk7XG5cbiAgICB0aGlzLmVudGl0eUlkQ2hhbmdlID0gdGhpcy52YWx1ZUNoYW5nZS5waXBlKFxuICAgICAgbWFwKHYgPT4gdGhpcy5lbnRpdHlJZEZyb21WYWx1ZSh2KSlcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlDaGFuZ2UgPSB0aGlzLl9lbnRpdHkkLnBpcGUoXG4gICAgICBza2lwKDEpIC8vIFNraXAgdGhlIGluaXRpYWwgb3IgY3VycmVudCB2YWx1ZVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eUlkVXBkYXRlZCA9IHRoaXMudmFsdWVVcGRhdGVkLnBpcGUoXG4gICAgICBtYXAodmFsdWUgPT4gdGhpcy5lbnRpdHlJZEZyb21WYWx1ZSh2YWx1ZSkpXG4gICAgKTtcblxuICAgIHRoaXMuZW50aXR5VXBkYXRlZCA9IHRoaXMuZW50aXR5SWRVcGRhdGVkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZW50aXR5SWQgPT4gdGhpcy5hd2FpdEVudGl0eVdpdGhJZChlbnRpdHlJZCwgdGhpcy50aW1lb3V0QWZ0ZXJNcykpLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBhd2FpdEVudGl0eVdpdGhJZCAtPiB0aW1lZCBvdXQgYWZ0ZXI6ICR7dGhpcy50aW1lb3V0QWZ0ZXJNc31gLCBlcnIpO1xuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eVdyYXBwZWQkID0gY29tYmluZUxhdGVzdChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5fZW50aXR5JCxcbiAgICAgICAgdGhpcy5kaXNwbGF5UHJvcGVydHlSZXNvbHZlciQsXG4gICAgICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIkXG4gICAgICBdXG4gICAgKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWUsIGRQUiwgaFBSXSkgPT4gbmV3IEVudGl0eUNvbnRleHQ8VEVudGl0eT4odmFsdWUsIGhQUih2YWx1ZSksIGRQUih2YWx1ZSkpKVxuICAgICk7XG5cbiAgICB0aGlzLmlucHV0VGV4dCQgPSB0aGlzLmVudGl0eVdyYXBwZWQkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgdGFwKHZhbHVlQ29udGV4dCA9PiB0aGlzLmVudGl0eUNvbnRleHQgPSB2YWx1ZUNvbnRleHQpLFxuICAgICAgbWFwKHZhbHVlQ29udGV4dCA9PiB7XG4gICAgICAgIGlmICh2YWx1ZUNvbnRleHQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVDb250ZXh0LmRpc3BsYXlUZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZSBDeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmF1dG9DbGVhblVwKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQmVoYXZpb3VyIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGF1dG9jb21wbGV0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgJ25vdGhpbmcnIC8gbnVsbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWxsb3dOdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2FsbG93TnVsbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGxvd051bGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93TnVsbDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZW50aXR5KGVudGl0eTogVEVudGl0eSkge1xuICAgIHRoaXMuX2VudGl0eSQubmV4dChlbnRpdHkpO1xuICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKFxuICAgICAgdGhpcy5lbnRpdHlUb1ZhbHVlKGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBlbnRpdHkoKTogVEVudGl0eSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGVudGl0eSBhcyBvYnNlcnZhYmxlIHN0cmVhbS4gKEJlaGF2aW91clN1YmplY3QpXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVudGl0eSQoKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0eUlkKGlkOiBUSWQpIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKDxhbnk+aWQgYXMgVFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RFbnRpdHlCeUlkKGlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudGl0eUlkKCk6IFRJZCB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpbnRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5oaW50UHJvcGVydHlSZXNvbHZlciA9ICh2YWx1ZSA9PiB0aGlzLnByb3BlcnR5U3RyaW5nVmFsdWUodmFsdWUsIHByb3BlcnR5KSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpbnRQcm9wZXJ0eVJlc29sdmVyKHJlc29sdmVyOiBUZXh0UmVzb2x2ZXJGbikge1xuICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIkLm5leHQocmVzb2x2ZXIpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG9uSW5wdXRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAodGhpcy5lbnRpdHlDb250ZXh0LnZhbHVlKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZW50aXR5Q29udGV4dC5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQudmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Rm9jdXMoYXV0b1RyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2F1dG9jb21wbGV0ZSkge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoYXV0b1RyaWdnZXIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0VudGl0eVNlbGVjdGVkKG9wdGlvbikpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcHRpb25EaXNhYmxlZEZuKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25EaXNhYmxlZEZuKG9wdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbkhpZGRlbkludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uSGlkZGVuRm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25IaWRkZW5GbihvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuXG4gIHB1YmxpYyB0b2dnbGVQYW5lbChhdXRvVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xuICAgIGlmIChhdXRvVHJpZ2dlci5hdXRvY29tcGxldGUuaXNPcGVuKSB7XG4gICAgICBhdXRvVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlblBhbmVsKGF1dG9UcmlnZ2VyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlblBhbmVsKGF1dG9UcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyKTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1JlcXVlc3RpbmcgdG8gb3BlbiBhdXRvLWNvbXBsZXRlIHBhbmVsLi4uJywgYXV0b1RyaWdnZXIpO1xuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zRGMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNEYy5zdGFydCh0aGlzLnNvcnRzLCB0aGlzLmZpbHRlcnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgREMhJywgZXJyKTtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmVycm9yKGVycikpO1xuICAgICAgfVxuICAgIH1cbiAgICBhdXRvVHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xuXG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ29uSW5wdXRDbGlja2VkLCBsb2NrZWQ6ICcgKyB0aGlzLmlzTG9ja2VkICsgJywgYXV0b2NvbXBsZXRlOiAnICsgdGhpcy5hdXRvY29tcGxldGUsIGF1dG9UcmlnZ2VyKTtcbiAgICBpZiAodGhpcy5pc0xvY2tlZCB8fCB0aGlzLmF1dG9jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZVBhbmVsKGF1dG9UcmlnZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9wdGlvblNlbGVjdGVkKHNlbGVjdGVkVmFsdWU6IFRFbnRpdHkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VudGl0eVNlbGVjdGVkKHNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbChudWxsKTsgLy8gSEFDSzogRW5zdXJlIHdlIHRyaWdnZXIgdmlldyByZWRyYXdcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWYWx1ZUJ5RW50aXR5KHNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9wZW5TZWxlY3Rpb25Qb3B1cChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Qb3B1cCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Qb3B1cC5jaG9vc2UoXG4gICAgICAgIHRoaXMuZmlsdGVycyxcbiAgICAgICAgdGhpcy5zb3J0cyxcbiAgICAgICAgZmFsc2VcbiAgICAgICkuc3Vic2NyaWJlKFxuICAgICAgICAoc2VsZWN0aW9uOiBURW50aXR5W10pID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQnlFbnRpdHkoc2VsZWN0aW9uWzBdKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIud2FybignQ2FudCBvcGVuIHNlbGVjdGlvbiBicm93c2VyIHBvcHVwLCBzaW5jZSBbU2VsZWN0aW9uTW9kZWxQb3B1cERpcmVjdGl2ZV0gd2FzIG5vdCBmb3VuZCEnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgZm9yY2VSZWxvYWRGaXJzdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDsgLy8gdmFsdWVJZCBpcyBzZXQgdG8gbnVsbCBhdXRvbWF0aWNhbGx5XG4gICAgRWxkZXJTZWxlY3RGaXJzdFV0aWwudHJ5U2VsZWN0Rmlyc3QodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlVmFsdWVCeUVudGl0eShlbnRpdHk6IFRFbnRpdHkpOiB2b2lkIHtcbiAgICB0aGlzLl9lbnRpdHkkLm5leHQoZW50aXR5KTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKFxuICAgICAgdGhpcy5lbnRpdHlUb1ZhbHVlKGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpe1xuICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGJsdXIoKXtcbiAgICB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5ibHVyKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQWJzdHJhY3QgSW1wbGVtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIHN1Z2dlc3Rpb25zIGRhdGEtY29udGV4dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgcHJvdGVjdGVkIG9uU3VnZ2VzdGlvbnNEY0NoYW5nZWQoZGF0YTogSURhdGFDb250ZXh0PFRFbnRpdHk+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICB0aGlzLnNlbGVjdEVudGl0eUJ5SWQodGhpcy5lbnRpdHlJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIHZhbHVlc0VxdWFscyhhOiBUVmFsdWUsIGI6IFRWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKGEpID09PSB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhd2FpdEVudGl0eVdpdGhJZChlbnRpdHlJZDogVElkLCB0aW1lb3V0TXM6IG51bWJlcik6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eSQucGlwZShcbiAgICAgIGZpbHRlcihlbnRpdHkgPT4gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpID09PSBlbnRpdHlJZCksXG4gICAgICB0YWtlKDEpLFxuICAgICAgdGltZW91dCh0aW1lb3V0TXMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbnRpdHlTZWxlY3RlZChlbnRpdHk6IFRFbnRpdHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpID09PSB0aGlzLmVudGl0eUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnRpdHlJZEZyb21WYWx1ZSh2YWx1ZTogVFZhbHVlKTogVElkIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIHJldHVybiA8YW55PnZhbHVlIGFzIFRJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW50aXR5ID0gKDxhbnk+dmFsdWUpIGFzIFRFbnRpdHk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0RW50aXR5QnlJZChpZDogVElkKTogdm9pZCB7XG5cbiAgICBjb25zdCBjdXJyZW50RW50aXR5ID0gdGhpcy5lbnRpdHk7XG4gICAgaWYgKGN1cnJlbnRFbnRpdHkgJiYgdGhpcy5nZXRFbnRpdHlJZChjdXJyZW50RW50aXR5KSA9PT0gaWQpIHtcbiAgICAgIHJldHVybjsgLy8gRW50aXR5IGFscmVhZHkgbG9hZGVkXG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjdXJyZW50RW50aXR5ICE9PSBudWxsICYmIGN1cnJlbnRFbnRpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zRGMpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmZpbmRJbkRhdGFDb250ZXh0KGlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgdGhpcy5lbnRpdHkgPSBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRFbnRpdHlCeUlkKGlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFpbGVkIHRvIHNlbGVjdCB2YWx1ZSBieSBJZDogJyArIGlkICsgJyAtIERhdGFDb250ZXh0IG5vdCBhdmFpbGFibGUuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRW50aXR5QnlJZChpZDogVElkKTogdm9pZCB7XG4gICAgdGhpcy5zdWdnZXN0aW9uc0RjLmRhdGFTb3VyY2UuZmluZEJ5SWQoPGFueT5pZClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIGVudGl0eSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRlZCBtaXNzaW5nIGVudGl0eSBieSBpZCAnICsgaWQgKyAnOicsIGVudGl0eSk7XG4gICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGVudGl0eSBieSBpZCAnICsgaWQsIGVycik7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmVycm9yKGVycikpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSW5EYXRhQ29udGV4dChpZDogVElkKTogVEVudGl0eSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25zRGMuc25hcHNob3QuZGF0YVxuICAgICAgLmZpbmQodiA9PiB0aGlzLmdldEVudGl0eUlkKHYpID09PSBpZCk7XG4gIH1cblxuICBwdWJsaWMgZW50aXR5VG9WYWx1ZShlbnRpdHk6IFRFbnRpdHkpOiBUVmFsdWUge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJZCkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEVudGl0eUlkKGVudGl0eSk7XG4gICAgICByZXR1cm4gPGFueT5pZCBhcyBUVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8YW55PmVudGl0eSBhcyBUVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYWZ0ZXIgYSB2YWx1ZSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoaXMgY29udHJvbC5cbiAgICpcbiAgICovXG4gIHByb3RlY3RlZCB3cml0ZVRvQ29udHJvbCh2YWx1ZTogVFZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICBjb25zdCBlbnRpdHlJZCA9IDxhbnk+dmFsdWUgYXMgVElkO1xuICAgICAgLy8gVmFsdWUgd2FzIHdyaXR0ZW4gYXMgZW50aXR5IGlkLCBlbnN1cmUgd2Ugc2VsZWN0IGVudGl0eSBieSBpZFxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3dyaXRlVG9Db250cm9sOiB2YWx1ZSB3YXMgd3JpdHRlbiBhcyBpZDogJyArIGVudGl0eUlkLCB2YWx1ZSk7XG4gICAgICB0aGlzLnNlbGVjdEVudGl0eUJ5SWQoZW50aXR5SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWx1ZSB3YXMgd3JpdHRlbiBhcyBlbnRpdHksIGVuc3VyZSBlbnRpdHkgaXMgdXBkYXRlZFxuICAgICAgY29uc3QgY3VycmVudEVudGl0eSA9IHRoaXMuZW50aXR5O1xuICAgICAgY29uc3QgbmV3RW50aXR5ID0gPGFueT52YWx1ZSBhcyBURW50aXR5O1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3dyaXRlVG9Db250cm9sOiB2YWx1ZSB3YXMgd3JpdHRlbiBhcyBlbnRpdHk6ICcgKyBKU09OLnN0cmluZ2lmeShuZXdFbnRpdHkpLCB2YWx1ZSk7XG4gICAgICBpZiAoIXRoaXMuaXNFcXVhbChjdXJyZW50RW50aXR5LCBuZXdFbnRpdHkpKSB7XG4gICAgICAgIHRoaXMuX2VudGl0eSQubmV4dChuZXdFbnRpdHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignSWdub3JlZCB3cml0dGVuIGVudGl0eSBhcyBpdCBpcyBhbHJlYWR5IHNldCB0byBlbnRpdHkkIScpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci53cml0ZVRvQ29udHJvbCh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIihlbnRpdHlXcmFwcGVkJCB8IGFzeW5jKSBhcyBlbnRpdHlXcmFwcGVyXCIgZnhGbGV4XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1zdGQtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICBbZWxkZXJEZW5zZV09XCJkZW5zZVwiXG4gICAgICAgICAgICAgICAgW2VsZGVyTm9IaW50XT1cIm5vSGludFwiXG4+XG5cbiAgPG1hdC1sYWJlbCAqbmdJZj1cImxhYmVsXCI+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG5cblxuICA8bmctY29udGFpbmVyIG1hdFByZWZpeCAqbmdJZj1cIihtZXJnZWRTdGF0ZSQgfCBhc3luYykgYXMgc3RhdGVcIj5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBkaXNhYmxlZFxuICAgICAgICAgICAgICBjbGFzcz1cImxlYWRpbmctaWNvbiBwcmVmaXgtcGFkZGluZyBub3NlbGVjdCBjbGlja2FibGUtaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5sb2FkaW5nXT1cInN0YXRlLmxvYWRpbmdcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwic3RhdGU/LmVycm9yID8gJ3dhcm4nIDogY29sb3JcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DdXJyZW50Q2xpY2tlZChlbnRpdHkpXCJcbiAgICA+XG4gICAgICB7e2ljb259fVxuICAgIDwvbWF0LWljb24+XG5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpY29uICYmIHN0YXRlPy5lcnJvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCI+XG4gICAgICB3YXJuaW5nXG4gICAgPC9tYXQtaWNvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBBIGR5bmFtaWMgaW5wdXQgLS0+XG4gIDxpbnB1dCAjaW5wdXRcbiAgICBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGZ4RmxleD1cImdyb3dcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkgfHwgIWF1dG9jb21wbGV0ZVwiXG4gICAgW25hbWVdPVwibmFtZSArICctaW5uZXItaW5wdXQnXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgIFttYXRBdXRvY29tcGxldGVdICNhdXRvVHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIlxuICAgIFtlbGRlckVsZGVyQXV0b2NvbXBsZXRlXT1cImVsZGVyQXV0b1wiIFtxdWVyeUZpbHRlcl09XCJxdWVyeUZpbHRlclwiIFtmaWx0ZXJzXT1cImZpbHRlcnNcIiBbc29ydHNdPVwic29ydHNcIlxuICAgIGVsZGVyU2VsZWN0T25UYWJcbiAgICBbY2xhc3Muc2VsZWN0XT1cIiFhdXRvY29tcGxldGVcIlxuICAgIFtuZ01vZGVsXT1cImlucHV0VGV4dCQgfCBhc3luY1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdzdWJtaXQnfVwiXG4gICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gICAgKGZvY3VzKT1cIm9uSW5wdXRGb2N1cyhhdXRvVHJpZ2dlcilcIlxuICA+XG5cbiAgPCEtLSBUaGlzIGJyZWFrcyBzdHVmZjogW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCB8IGFzeW5jXCIgLS0+XG5cbiAgPGVsZGVyLWF1dG9jb21wbGV0ZVxuICAgICNlbGRlckF1dG89XCJlbGRlckF1dG9jb21wbGV0ZVwiXG4gICAgW3N1Z2dlc3Rpb25zRGNdPVwic3VnZ2VzdGlvbnNEYyQgfCBhc3luY1wiXG4gICAgW3ZhbHVlVGVtcGxhdGVdPVwidmFsdWVUZW1wbGF0ZVwiXG4gICAgW2VuYWJsZWRdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICBbZGlzcGxheVByb3BlcnR5UmVzb2x2ZXJdPVwiZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkIHwgYXN5bmNcIlxuICAgIFtpc09wdGlvbkRpc2FibGVkRm5dPVwiaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm5cIlxuICAgIFtpc09wdGlvbkhpZGRlbkZuXT1cImlzT3B0aW9uSGlkZGVuSW50ZXJuYWxGblwiXG4gICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGFueSgkZXZlbnQpKVwiXG4gID48L2VsZGVyLWF1dG9jb21wbGV0ZT5cblxuXG4gIDxuZy1jb250YWluZXIgbWF0U3VmZml4PlxuXG4gICAgPG1hdC1pY29uXG4gICAgICAqbmdJZj1cIiFzZWxlY3Rpb25Qb3B1cCAmJiAhYXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJzZWxlY3QtYXJyb3cgc3VmZml4LWljb24gbm9zZWxlY3RcIlxuICAgICAgKGNsaWNrKT1cIm9uSW5wdXRDbGlja2VkKGF1dG9UcmlnZ2VyKVwiPlxuICAgICAgYXJyb3dfZHJvcF9kb3duXG4gICAgPC9tYXQtaWNvbj5cblxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN1ZmZpeC1pY29uXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uUG9wdXAgJiYgKCFlbnRpdHlXcmFwcGVyLnZhbHVlIHx8ICFhbGxvd051bGwpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdGlvblBvcHVwKCRldmVudClcIiBhcmlhLWxhYmVsPVwiU2VhcmNoXCJcbiAgICAgICAgICAgIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICAgIHRhYkluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3VmZml4LWljb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJlbnRpdHlXcmFwcGVyLnZhbHVlICYmIGFsbG93TnVsbFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2NrZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIiBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bWF0LWhpbnQgKm5nSWY9XCJlbnRpdHlXcmFwcGVyLmhpbnRUZXh0XCI+e3tlbnRpdHlXcmFwcGVyLmhpbnRUZXh0fX08L21hdC1oaW50PlxuXG48L21hdC1mb3JtLWZpZWxkPlxuXG5cblxuIl19
@@ -16,6 +16,7 @@ export class ElderSelectOnTabDirective {
16
16
  **************************************************************************/
17
17
  constructor(autoTrigger, elderSelectBase) {
18
18
  this.autoTrigger = autoTrigger;
19
+ this.elderSelectBase = elderSelectBase;
19
20
  /***************************************************************************
20
21
  * *
21
22
  * Fields *
@@ -46,12 +47,17 @@ export class ElderSelectOnTabDirective {
46
47
  if (!this.panelOpen) {
47
48
  return;
48
49
  }
49
- if (this.controlValueAccessor.value) {
50
- // If there is already a value present, only allow tab based value setting if the user actually modified the value
51
- if (!this.userInput) {
50
+ if (!this.userInput) {
51
+ // The user did not select anything in the auto-complete
52
+ if (this.controlValueAccessor.value) {
52
53
  this.logger.warn('Discarding TAB since the user did probably not intend to change the value! userInput:', this.userInput);
53
54
  return;
54
55
  }
56
+ if (!this.elderSelectBase.required) {
57
+ // The user did not select any option and no current value is present.
58
+ // Since the input is NOT marked as required, we assume the user did not want to select a value
59
+ return;
60
+ }
55
61
  }
56
62
  const activeOption = this.autoTrigger.activeOption;
57
63
  if (activeOption) {
@@ -124,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
124
130
  type: HostListener,
125
131
  args: ['keydown.tab']
126
132
  }] } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LW9uLXRhYi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9lbGRlci1zZWxlY3Qtb24tdGFiLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBUSxZQUFZLEVBQUUsTUFBTSxFQUFhLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV4RyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUt6RSxNQUFNLE9BQU8seUJBQXlCO0lBeUJwQzs7OztnRkFJNEU7SUFFNUUsWUFDbUIsV0FBbUMsRUFDYixlQUErQztRQURyRSxnQkFBVyxHQUFYLFdBQVcsQ0FBd0I7UUE5QnREOzs7O29GQUk0RTtRQUUzRCxXQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO1FBSWpEOztXQUVHO1FBQ0ssY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUxQjs7O1dBR0c7UUFDSyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBWXhCLElBQUksQ0FBQyxvQkFB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QUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNMLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw2REFBNkQsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMzRyxPQUFZLE1BQU0sQ0FBQztTQUNwQjtJQUNILENBQUM7O3VIQWhJVSx5QkFBeUIsd0RBaUNkLGlCQUFpQjsyR0FqQzVCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7aUJBQy9COzswQkFrQ0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7NENBYWhDLGNBQWM7c0JBRnBCLFlBQVk7dUJBQUMsaUJBQWlCOztzQkFDOUIsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBTTFCLE1BQU07c0JBRFosWUFBWTt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEhvc3QsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkRlc3Ryb3ksIFNraXBTZWxmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlVHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJqZWN0JztcbmltcG9ydCB7ZGVsYXksIG1hcCwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi8uLi9jb21tb24vZm9ybXMvdmFsdWUtYWNjZXNzb3ItYmFzZSc7XG5pbXBvcnQge0VMREVSX1NFTEVDVF9CQVNFLCBFbGRlclNlbGVjdEJhc2V9IGZyb20gJy4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtNYXRPcHRpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtpc0VsZGVyRW50aXR5VmFsdWVBY2Nlc3Nvcn0gZnJvbSAnLi9lbGRlci1lbnRpdHktdmFsdWUtYWNjZXNzb3InO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZWxkZXJTZWxlY3RPblRhYl0nXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VsZWN0T25UYWJEaXJlY3RpdmU8VEVudGl0eSA9IGFueSwgVElkID0gYW55LCBUVmFsdWUgPSBURW50aXR5IHwgVElkPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxuZXZlcj4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xWYWx1ZUFjY2Vzc29yOiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgcGFuZWwgd2FzIG9wZW4gYmVmb3JlIHRoZSBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBwYW5lbE9wZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdXNlciBzZWxlY3RlZCBhbiBvcHRpb24uXG4gICAqIChXZSB3YW50IHRvIGlnbm9yZSBzZWxlY3Rpb25zIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzZWxlY3Rpb24gcHJlc2VudCBhbmQgdGhlIHVzZXIgdGFicyBhd2F5KVxuICAgKi9cbiAgcHJpdmF0ZSB1c2VySW5wdXQgPSBmYWxzZTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dG9UcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLFxuICAgIEBTa2lwU2VsZigpIEBJbmplY3QoRUxERVJfU0VMRUNUX0JBU0UpIGVsZGVyU2VsZWN0QmFzZTogRWxkZXJTZWxlY3RCYXNlPGFueSwgYW55LCBhbnk+XG4gICkge1xuICAgIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3IgPSBlbGRlclNlbGVjdEJhc2U7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRXZlbnQgTGlzdGVuZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93dXAnKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93ZG93bicpXG4gIHB1YmxpYyBvbk9wdGlvblNlbGVjdCgpe1xuICAgIHRoaXMudXNlcklucHV0ID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24udGFiJylcbiAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcblxuICAgIGlmICghdGhpcy5wYW5lbE9wZW4pIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAodGhpcy5jb250cm9sVmFsdWVBY2Nlc3Nvci52YWx1ZSkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHZhbHVlIHByZXNlbnQsIG9ubHkgYWxsb3cgdGFiIGJhc2VkIHZhbHVlIHNldHRpbmcgaWYgdGhlIHVzZXIgYWN0dWFsbHkgbW9kaWZpZWQgdGhlIHZhbHVlXG4gICAgICBpZiAoIXRoaXMudXNlcklucHV0KSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Rpc2NhcmRpbmcgVEFCIHNpbmNlIHRoZSB1c2VyIGRpZCBwcm9iYWJseSBub3QgaW50ZW5kIHRvIGNoYW5nZSB0aGUgdmFsdWUhIHVzZXJJbnB1dDonLCB0aGlzLnVzZXJJbnB1dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLmF1dG9UcmlnZ2VyLmFjdGl2ZU9wdGlvbiBhcyBNYXRPcHRpb248VEVudGl0eT47XG5cbiAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBhY3RpdmVPcHRpb24udmFsdWU7XG4gICAgICB0aGlzLndyaXRlRW50aXR5KGVudGl0eSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBhdXRvY29tcGxldGUgPSB0aGlzLmF1dG9UcmlnZ2VyLmF1dG9jb21wbGV0ZTtcbiAgICBtZXJnZShcbiAgICAgIGF1dG9jb21wbGV0ZS5vcGVuZWQucGlwZShtYXAoKCkgPT4gdHJ1ZSkpLFxuICAgICAgYXV0b2NvbXBsZXRlLmNsb3NlZC5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgZGVsYXkoMClcbiAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnBhbmVsT3BlbiA9IHZhbHVlKTtcblxuICAgIHRoaXMuYXV0b1RyaWdnZXIub3B0aW9uU2VsZWN0aW9ucy5waXBlKCAvLyBUT0RPIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8xNDgxM1xuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgdGFwKG9wdCA9PiB0aGlzLmxvZ2dlci5kZWJ1ZygnW29wdGlvblNlbGVjdGlvbnNdIENIQU5HRUQgJywgb3B0KSksXG4gICAgICBtYXAob3B0ID0+IG9wdC5pc1VzZXJJbnB1dClcbiAgICApLnN1YnNjcmliZShpc1VzZXJJbnB1dCA9PiB0aGlzLnVzZXJJbnB1dCA9IGlzVXNlcklucHV0KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMudXNlcklucHV0ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlRW50aXR5KGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbnRpdHlUb1ZhbHVlKGVudGl0eSk7XG4gICAgdGhpcy5jb250cm9sVmFsdWVBY2Nlc3Nvci51cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5hdXRvVHJpZ2dlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdXcm90ZSBlbnRpdHkgdG8gY29udHJvbCBhcyB2YWx1ZTogJywgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnRpdHlUb1ZhbHVlKGVudGl0eTogVEVudGl0eSk6IFRWYWx1ZSB7XG4gICAgaWYgKGlzRWxkZXJFbnRpdHlWYWx1ZUFjY2Vzc29yKHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3IpKSB7XG4gICAgICAvLyBTaW5jZSBlbGRlci1zZWxlY3QgbWF5IHVzZSB0aGUgZW50aXR5IGlkIGFzIHZhbHVlICh2YWx1ZUFzSWQpLFxuICAgICAgLy8gd2UgY2FuIG5vdCBkaXJlY3RseSB3cml0ZSB0byB0aGUgdmFsdWUgc2FmZWx5LlxuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3IuZW50aXR5VG9WYWx1ZShlbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCeSBkZWZhdWx0LCB3cml0ZSB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBjb250cm9sIHZhbHVlXG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdbY29udHJvbFZhbHVlQWNjZXNzb3JdIGlzIG5vdCBhIEVsZGVyRW50aXR5VmFsdWVBY2Nlc3NvciE6ICcsIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3IpO1xuICAgICAgcmV0dXJuIDxhbnk+ZW50aXR5O1xuICAgIH1cbiAgfVxufVxuIl19
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LW9uLXRhYi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9lbGRlci1zZWxlY3Qtb24tdGFiLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBUSxZQUFZLEVBQUUsTUFBTSxFQUFhLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV4RyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUt6RSxNQUFNLE9BQU8seUJBQXlCO0lBeUJwQzs7OztnRkFJNEU7SUFFNUUsWUFDbUIsV0FBbUMsRUFDSSxlQUErQztRQUR0RixnQkFBVyxHQUFYLFdBQVcsQ0FBd0I7UUFDSSxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0M7UUEvQnpHOzs7O29GQUk0RTtRQUUzRCxXQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO1FBSWpEOztXQUVHO1FBQ0ssY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUxQjs7O1dBR0c7UUFDSyxjQUFTLEdBQUcsS0FB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QUM7SUFDaEUsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFlO1FBQ25DLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDekQsaUVBQWlFO1lBQ2pFLGlEQUFpRDtZQUNqRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNMLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw2REFBNkQsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMzRyxPQUFZLE1BQU0sQ0FBQztTQUNwQjtJQUNILENBQUM7O3VIQXRJVSx5QkFBeUIsd0RBaUNkLGlCQUFpQjsyR0FqQzVCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7aUJBQy9COzswQkFrQ0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7NENBYWhDLGNBQWM7c0JBRnBCLFlBQVk7dUJBQUMsaUJBQWlCOztzQkFDOUIsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBTTFCLE1BQU07c0JBRFosWUFBWTt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEhvc3QsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkRlc3Ryb3ksIFNraXBTZWxmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlVHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJqZWN0JztcbmltcG9ydCB7ZGVsYXksIG1hcCwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi8uLi9jb21tb24vZm9ybXMvdmFsdWUtYWNjZXNzb3ItYmFzZSc7XG5pbXBvcnQge0VMREVSX1NFTEVDVF9CQVNFLCBFbGRlclNlbGVjdEJhc2V9IGZyb20gJy4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtNYXRPcHRpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtpc0VsZGVyRW50aXR5VmFsdWVBY2Nlc3Nvcn0gZnJvbSAnLi9lbGRlci1lbnRpdHktdmFsdWUtYWNjZXNzb3InO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZWxkZXJTZWxlY3RPblRhYl0nXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VsZWN0T25UYWJEaXJlY3RpdmU8VEVudGl0eSA9IGFueSwgVElkID0gYW55LCBUVmFsdWUgPSBURW50aXR5IHwgVElkPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxuZXZlcj4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xWYWx1ZUFjY2Vzc29yOiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgcGFuZWwgd2FzIG9wZW4gYmVmb3JlIHRoZSBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBwYW5lbE9wZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdXNlciBzZWxlY3RlZCBhbiBvcHRpb24uXG4gICAqIChXZSB3YW50IHRvIGlnbm9yZSBzZWxlY3Rpb25zIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzZWxlY3Rpb24gcHJlc2VudCBhbmQgdGhlIHVzZXIgdGFicyBhd2F5KVxuICAgKi9cbiAgcHJpdmF0ZSB1c2VySW5wdXQgPSBmYWxzZTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dG9UcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLFxuICAgIEBTa2lwU2VsZigpIEBJbmplY3QoRUxERVJfU0VMRUNUX0JBU0UpIHByaXZhdGUgcmVhZG9ubHkgZWxkZXJTZWxlY3RCYXNlOiBFbGRlclNlbGVjdEJhc2U8YW55LCBhbnksIGFueT5cbiAgKSB7XG4gICAgdGhpcy5jb250cm9sVmFsdWVBY2Nlc3NvciA9IGVsZGVyU2VsZWN0QmFzZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBFdmVudCBMaXN0ZW5lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3d1cCcpXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJylcbiAgcHVibGljIG9uT3B0aW9uU2VsZWN0KCl7XG4gICAgdGhpcy51c2VySW5wdXQgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi50YWInKVxuICBwdWJsaWMgb25CbHVyKCk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLnBhbmVsT3BlbikgeyByZXR1cm47IH1cblxuICAgIGlmICghdGhpcy51c2VySW5wdXQpIHtcbiAgICAgIC8vIFRoZSB1c2VyIGRpZCBub3Qgc2VsZWN0IGFueXRoaW5nIGluIHRoZSBhdXRvLWNvbXBsZXRlXG5cbiAgICAgIGlmICh0aGlzLmNvbnRyb2xWYWx1ZUFjY2Vzc29yLnZhbHVlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Rpc2NhcmRpbmcgVEFCIHNpbmNlIHRoZSB1c2VyIGRpZCBwcm9iYWJseSBub3QgaW50ZW5kIHRvIGNoYW5nZSB0aGUgdmFsdWUhIHVzZXJJbnB1dDonLCB0aGlzLnVzZXJJbnB1dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoIXRoaXMuZWxkZXJTZWxlY3RCYXNlLnJlcXVpcmVkKSB7XG4gICAgICAgIC8vIFRoZSB1c2VyIGRpZCBub3Qgc2VsZWN0IGFueSBvcHRpb24gYW5kIG5vIGN1cnJlbnQgdmFsdWUgaXMgcHJlc2VudC5cbiAgICAgICAgLy8gU2luY2UgdGhlIGlucHV0IGlzIE5PVCBtYXJrZWQgYXMgcmVxdWlyZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBkaWQgbm90IHdhbnQgdG8gc2VsZWN0IGEgdmFsdWVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IHRoaXMuYXV0b1RyaWdnZXIuYWN0aXZlT3B0aW9uIGFzIE1hdE9wdGlvbjxURW50aXR5PjtcbiAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBhY3RpdmVPcHRpb24udmFsdWU7XG4gICAgICB0aGlzLndyaXRlRW50aXR5KGVudGl0eSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBhdXRvY29tcGxldGUgPSB0aGlzLmF1dG9UcmlnZ2VyLmF1dG9jb21wbGV0ZTtcbiAgICBtZXJnZShcbiAgICAgIGF1dG9jb21wbGV0ZS5vcGVuZWQucGlwZShtYXAoKCkgPT4gdHJ1ZSkpLFxuICAgICAgYXV0b2NvbXBsZXRlLmNsb3NlZC5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgZGVsYXkoMClcbiAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnBhbmVsT3BlbiA9IHZhbHVlKTtcblxuICAgIHRoaXMuYXV0b1RyaWdnZXIub3B0aW9uU2VsZWN0aW9ucy5waXBlKCAvLyBUT0RPIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8xNDgxM1xuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgdGFwKG9wdCA9PiB0aGlzLmxvZ2dlci5kZWJ1ZygnW29wdGlvblNlbGVjdGlvbnNdIENIQU5HRUQgJywgb3B0KSksXG4gICAgICBtYXAob3B0ID0+IG9wdC5pc1VzZXJJbnB1dClcbiAgICApLnN1YnNjcmliZShpc1VzZXJJbnB1dCA9PiB0aGlzLnVzZXJJbnB1dCA9IGlzVXNlcklucHV0KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMudXNlcklucHV0ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlRW50aXR5KGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbnRpdHlUb1ZhbHVlKGVudGl0eSk7XG4gICAgdGhpcy5jb250cm9sVmFsdWVBY2Nlc3Nvci51cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5hdXRvVHJpZ2dlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdXcm90ZSBlbnRpdHkgdG8gY29udHJvbCBhcyB2YWx1ZTogJywgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnRpdHlUb1ZhbHVlKGVudGl0eTogVEVudGl0eSk6IFRWYWx1ZSB7XG4gICAgaWYgKGlzRWxkZXJFbnRpdHlWYWx1ZUFjY2Vzc29yKHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3IpKSB7XG4gICAgICAvLyBTaW5jZSBlbGRlci1zZWxlY3QgbWF5IHVzZSB0aGUgZW50aXR5IGlkIGFzIHZhbHVlICh2YWx1ZUFzSWQpLFxuICAgICAgLy8gd2UgY2FuIG5vdCBkaXJlY3RseSB3cml0ZSB0byB0aGUgdmFsdWUgc2FmZWx5LlxuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3IuZW50aXR5VG9WYWx1ZShlbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCeSBkZWZhdWx0LCB3cml0ZSB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBjb250cm9sIHZhbHVlXG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdbY29udHJvbFZhbHVlQWNjZXNzb3JdIGlzIG5vdCBhIEVsZGVyRW50aXR5VmFsdWVBY2Nlc3NvciE6ICcsIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3IpO1xuICAgICAgcmV0dXJuIDxhbnk+ZW50aXR5O1xuICAgIH1cbiAgfVxufVxuIl19
@@ -20866,6 +20866,7 @@ class ElderSelectOnTabDirective {
20866
20866
  **************************************************************************/
20867
20867
  constructor(autoTrigger, elderSelectBase) {
20868
20868
  this.autoTrigger = autoTrigger;
20869
+ this.elderSelectBase = elderSelectBase;
20869
20870
  /***************************************************************************
20870
20871
  * *
20871
20872
  * Fields *
@@ -20896,12 +20897,17 @@ class ElderSelectOnTabDirective {
20896
20897
  if (!this.panelOpen) {
20897
20898
  return;
20898
20899
  }
20899
- if (this.controlValueAccessor.value) {
20900
- // If there is already a value present, only allow tab based value setting if the user actually modified the value
20901
- if (!this.userInput) {
20900
+ if (!this.userInput) {
20901
+ // The user did not select anything in the auto-complete
20902
+ if (this.controlValueAccessor.value) {
20902
20903
  this.logger.warn('Discarding TAB since the user did probably not intend to change the value! userInput:', this.userInput);
20903
20904
  return;
20904
20905
  }
20906
+ if (!this.elderSelectBase.required) {
20907
+ // The user did not select any option and no current value is present.
20908
+ // Since the input is NOT marked as required, we assume the user did not want to select a value
20909
+ return;
20910
+ }
20905
20911
  }
20906
20912
  const activeOption = this.autoTrigger.activeOption;
20907
20913
  if (activeOption) {
@@ -21227,6 +21233,11 @@ class ElderSelectComponent extends ElderSelectBase {
21227
21233
  input.value = null;
21228
21234
  }
21229
21235
  }
21236
+ onInputFocus(autoTrigger) {
21237
+ if (!this._autocomplete) {
21238
+ this.openPanel(autoTrigger);
21239
+ }
21240
+ }
21230
21241
  get isOptionDisabledInternalFn() {
21231
21242
  return (option) => {
21232
21243
  if (!this.isEntitySelected(option)) {
@@ -21255,18 +21266,21 @@ class ElderSelectComponent extends ElderSelectBase {
21255
21266
  autoTrigger.closePanel();
21256
21267
  }
21257
21268
  else {
21258
- this.logger.debug('Requesting to open auto-complete panel...', autoTrigger);
21259
- if (this.suggestionsDc) {
21260
- try {
21261
- this.suggestionsDc.start(this.sorts, this.filters);
21262
- }
21263
- catch (err) {
21264
- this.logger.error('Failed to start DC!', err);
21265
- this.updateState(ElderSelectComponentState.error(err));
21266
- }
21269
+ this.openPanel(autoTrigger);
21270
+ }
21271
+ }
21272
+ openPanel(autoTrigger) {
21273
+ this.logger.debug('Requesting to open auto-complete panel...', autoTrigger);
21274
+ if (this.suggestionsDc) {
21275
+ try {
21276
+ this.suggestionsDc.start(this.sorts, this.filters);
21277
+ }
21278
+ catch (err) {
21279
+ this.logger.error('Failed to start DC!', err);
21280
+ this.updateState(ElderSelectComponentState.error(err));
21267
21281
  }
21268
- autoTrigger.openPanel();
21269
21282
  }
21283
+ autoTrigger.openPanel();
21270
21284
  }
21271
21285
  onInputClicked(autoTrigger) {
21272
21286
  // this.logger.debug('onInputClicked, locked: ' + this.isLocked + ', autocomplete: ' + this.autocomplete, autoTrigger);
@@ -21427,7 +21441,7 @@ ElderSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
21427
21441
  useExisting: forwardRef(() => ElderSelectComponent)
21428
21442
  },
21429
21443
  ...buildFormIntegrationProviders(ElderSelectComponent)
21430
- ], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"], components: [{ type: i1$5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense"] }, { type: ElderFormFieldNoHintDirective, selector: "mat-form-field[elderNoHint]", inputs: ["elderNoHint"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$5.MatLabel, selector: "mat-label" }, { type: i1$5.MatPrefix, selector: "[matPrefix]" }, { type: i4.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"] }, { type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: ElderSelectOnTabDirective, selector: "[elderSelectOnTab]" }, { type: i5$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$5.MatSuffix, selector: "[matSuffix]" }, { type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { type: i1$5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i1$2.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
21444
+ ], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus(autoTrigger)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"], components: [{ type: i1$5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense"] }, { type: ElderFormFieldNoHintDirective, selector: "mat-form-field[elderNoHint]", inputs: ["elderNoHint"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$5.MatLabel, selector: "mat-label" }, { type: i1$5.MatPrefix, selector: "[matPrefix]" }, { type: i4.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"] }, { type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: ElderSelectOnTabDirective, selector: "[elderSelectOnTab]" }, { type: i5$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$5.MatSuffix, selector: "[matSuffix]" }, { type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { type: i1$5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i1$2.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
21431
21445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: ElderSelectComponent, decorators: [{
21432
21446
  type: Component,
21433
21447
  args: [{ selector: 'elder-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -21436,7 +21450,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
21436
21450
  useExisting: forwardRef(() => ElderSelectComponent)
21437
21451
  },
21438
21452
  ...buildFormIntegrationProviders(ElderSelectComponent)
21439
- ], template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"] }]
21453
+ ], template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n [elderDense]=\"dense\"\n [elderNoHint]=\"noHint\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect clickable-icon\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\"\n (click)=\"onCurrentClicked(entity)\"\n >\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input #input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus(autoTrigger)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!selectionPopup && !autocomplete\" class=\"select-arrow suffix-icon noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\" class=\"suffix-icon\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon,.suffix-icon,.suffix-icon .mat-icon{font-size:16px;width:16px;height:16px}.clickable-icon{cursor:pointer}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"] }]
21440
21454
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { inputRef: [{
21441
21455
  type: ViewChild,
21442
21456
  args: ['input']