@elderbyte/ngx-starter 13.9.0 → 13.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, forwardRef, Input, Output, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, Input, Output, ViewChild, } from '@angular/core';
2
2
  import { buildFormIntegrationProviders } from '../../../common/forms/template-composite-control';
3
3
  import { LoggerFactory } from '@elderbyte/ts-logger';
4
4
  import { BehaviorSubject, combineLatest, EMPTY, Subject } from 'rxjs';
@@ -240,6 +240,12 @@ export class ElderSelectComponent extends ElderSelectBase {
240
240
  this._entity$.next(entity);
241
241
  this.updateValue(this.entityToValue(entity));
242
242
  }
243
+ focus(options) {
244
+ this.inputRef?.nativeElement?.focus(options);
245
+ }
246
+ blur() {
247
+ this.inputRef?.nativeElement?.blur();
248
+ }
243
249
  /***************************************************************************
244
250
  * *
245
251
  * Abstract Implementation *
@@ -357,7 +363,7 @@ ElderSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
357
363
  useExisting: forwardRef(() => ElderSelectComponent)
358
364
  },
359
365
  ...buildFormIntegrationProviders(ElderSelectComponent)
360
- ], 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\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 noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\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\"\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{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 });
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 noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\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\"\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{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 });
361
367
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: ElderSelectComponent, decorators: [{
362
368
  type: Component,
363
369
  args: [{ selector: 'elder-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -366,8 +372,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
366
372
  useExisting: forwardRef(() => ElderSelectComponent)
367
373
  },
368
374
  ...buildFormIntegrationProviders(ElderSelectComponent)
369
- ], 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\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 noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\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\"\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{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"] }]
370
- }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { nullDisplay: [{
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 noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\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\"\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{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
+ }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { inputRef: [{
377
+ type: ViewChild,
378
+ args: ['input']
379
+ }], nullDisplay: [{
371
380
  type: Input
372
381
  }], entityIdChange: [{
373
382
  type: Output
@@ -390,4 +399,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
390
399
  }], hintPropertyResolver: [{
391
400
  type: Input
392
401
  }] } });
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L2VsZGVyLXNlbGVjdC9lbGRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvZWxkZXItc2VsZWN0L2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFBRSxVQUFVLEVBQ3JCLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDL0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBQ1QsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQTZCLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFDbkYsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBRW5ILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVyRSxNQUFNLGFB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aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMseURBQXlELENBQUMsQ0FBQzthQUM3RTtTQUNGO1FBQ0QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOztrSEF4YVUsb0JBQW9CO3NHQUFwQixvQkFBb0IsMFlBUnBCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDcEQ7UUFDRCxHQUFHLDZCQUE2QixDQUFDLG9CQUFvQixDQUFDO0tBQ3ZELGlEQ3RESCx5cUdBaUdBOzRGRHpDYSxvQkFBb0I7a0JBYmhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDO3lCQUNwRDt3QkFDRCxHQUFHLDZCQUE2QixzQkFBc0I7cUJBQ3ZEOzZGQXNCTSxXQUFXO3NCQURqQixLQUFLO2dCQUlVLGNBQWM7c0JBRDdCLE1BQU07Z0JBUVMsZUFBZTtzQkFEOUIsTUFBTTtnQkFJUyxZQUFZO3NCQUQzQixNQUFNO2dCQVFTLGFBQWE7c0JBRDVCLE1BQU07Z0JBNEZJLFlBQVk7c0JBRHRCLEtBQUs7Z0JBYUssU0FBUztzQkFEbkIsS0FBSztnQkFnQkssTUFBTTtzQkFEaEIsS0FBSztnQkFvQkssUUFBUTtzQkFEbEIsS0FBSztnQkFjSyxZQUFZO3NCQUR0QixLQUFLO2dCQU1LLG9CQUFvQjtzQkFEOUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsIGZvcndhcmRSZWYsXG4gIElucHV0LCBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtidWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVyc30gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Zvcm1zL3RlbXBsYXRlLWNvbXBvc2l0ZS1jb250cm9sJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJRGF0YUNvbnRleHR9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsIHNraXAsIGZpbHRlciwgc3RhcnRXaXRoLCB3aXRoTGF0ZXN0RnJvbSwgc3dpdGNoTWFwLCB0YWtlLCB0aW1lb3V0LCBjYXRjaEVycm9yXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVUcmlnZ2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtFTERFUl9TRUxFQ1RfQkFTRSwgRWxkZXJTZWxlY3RCYXNlLCBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLCBUZXh0UmVzb2x2ZXJGbn0gZnJvbSAnLi4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtJRWxkZXJFbnRpdHlWYWx1ZUFjY2Vzc29yfSBmcm9tICcuLi9lbGRlci1lbnRpdHktdmFsdWUtYWNjZXNzb3InO1xuaW1wb3J0IHtFbGRlclNlbGVjdEZpcnN0VXRpbH0gZnJvbSAnLi4vYXV0by9lbGRlci1zZWxlY3QtZmlyc3QtdXRpbCc7XG5cbmNsYXNzIEVudGl0eUNvbnRleHQ8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IFQsXG4gICAgcHVibGljIHJlYWRvbmx5IGhpbnRUZXh0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmdcbiAgKSB7XG4gIH1cbn1cblxuXG4vKipcbiAqIFRoZSBlbGRlci1zZWxlY3QgY29udHJvbCBhbGxvd3MgdG8gc2VsZWN0IGEgc2luZ2xlXG4gKiBlbnRpdHkuXG4gKlxuICogUHJpbWFyeSBmb2N1cyBpcyBvbiBlYXN5IHVzYWdlIGZvciBjb21tb24gc2NlbmFyaW9zOlxuICpcbiAqIC0gSW50ZWdyYXRlZCBpbnRvIGFuZ3VsYXIgZm9ybXMgYW5kIHZhbGlkYXRpb25cbiAqIC0gU3VwcG9ydCBlbnRpdHkgaWQgaGFuZGxpbmcsIGlucHV0IC8gb3V0cHV0IGlzIHRoZSBlbnRpdHkgaWQgdnMgZnVsbCB2YWx1ZS5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVMREVSX1NFTEVDVF9CQVNFLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWxkZXJTZWxlY3RDb21wb25lbnQpXG4gICAgfSxcbiAgICAuLi5idWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVycyhFbGRlclNlbGVjdENvbXBvbmVudClcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlbGVjdENvbXBvbmVudDxURW50aXR5ID0gYW55LCBUSWQgPSBhbnksIFRWYWx1ZSA9IFRFbnRpdHkgfCBUSWQ+XG4gIGV4dGVuZHMgRWxkZXJTZWxlY3RCYXNlPFRJZCwgVEVudGl0eSwgVFZhbHVlPlxuICBpbXBsZW1lbnRzIElFbGRlckVudGl0eVZhbHVlQWNjZXNzb3I8VEVudGl0eSwgVElkPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhpbnRQcm9wZXJ0eVJlc29sdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dFJlc29sdmVyRm4+KCh2YWx1ZTogVEVudGl0eSkgPT4gbnVsbCk7XG5cbiAgcHJpdmF0ZSBfYWxsb3dOdWxsID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFN0cmluZyB0byBkaXNwbGF5IGZvciB0aGUgJ25vdGhpbmcnIC8gbnVsbCB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBudWxsRGlzcGxheSA9ICctJztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eUlkQ2hhbmdlOiBPYnNlcnZhYmxlPFRJZD47XG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gZW50aXR5LWlkIGNoYW5nZSwgYnV0IGVtaXRzIG9ubHkgd2hlbiB0aGUgdXNlclxuICAgKiBoYXMgdXBkYXRlZCB0aGUgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eUlkVXBkYXRlZDogT2JzZXJ2YWJsZTxUSWQ+O1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5Q2hhbmdlOiBPYnNlcnZhYmxlPFRFbnRpdHk+O1xuXG4gIC8qKlxuICAgKiBTaW1pbGFyIHRvIGVudGl0eSBjaGFuZ2UsIGJ1dCBlbWl0cyBvbmx5IHdoZW4gdGhlIHVzZXJcbiAgICogaGFzIHVwZGF0ZWQgdGhlIHZhbHVlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBlbnRpdHlVcGRhdGVkOiBPYnNlcnZhYmxlPFRFbnRpdHk+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VudGl0eSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRFbnRpdHk+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfYXV0b2NvbXBsZXRlID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eVdyYXBwZWQkOiBPYnNlcnZhYmxlPEVudGl0eUNvbnRleHQ8VEVudGl0eT4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgZW50aXR5Q29udGV4dDogRW50aXR5Q29udGV4dDxURW50aXR5PjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICB6b25lOiBOZ1pvbmUsXG4gICkge1xuICAgIHN1cGVyKHpvbmUpO1xuXG4gICAgdGhpcy5lbnRpdHlJZENoYW5nZSA9IHRoaXMudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgIG1hcCh2ID0+IHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodikpXG4gICAgKTtcblxuICAgIHRoaXMuZW50aXR5Q2hhbmdlID0gdGhpcy5fZW50aXR5JC5waXBlKFxuICAgICAgc2tpcCgxKSAvLyBTa2lwIHRoZSBpbml0aWFsIG9yIGN1cnJlbnQgdmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlJZFVwZGF0ZWQgPSB0aGlzLnZhbHVlVXBkYXRlZC5waXBlKFxuICAgICAgbWFwKHZhbHVlID0+IHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodmFsdWUpKVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eVVwZGF0ZWQgPSB0aGlzLmVudGl0eUlkVXBkYXRlZC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGVudGl0eUlkID0+IHRoaXMuYXdhaXRFbnRpdHlXaXRoSWQoZW50aXR5SWQsIHRoaXMudGltZW91dEFmdGVyTXMpKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgYXdhaXRFbnRpdHlXaXRoSWQgLT4gdGltZWQgb3V0IGFmdGVyOiAke3RoaXMudGltZW91dEFmdGVyTXN9YCwgZXJyKTtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlXcmFwcGVkJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMuX2VudGl0eSQsXG4gICAgICAgIHRoaXMuZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkLFxuICAgICAgICB0aGlzLmhpbnRQcm9wZXJ0eVJlc29sdmVyJFxuICAgICAgXVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlLCBkUFIsIGhQUl0pID0+IG5ldyBFbnRpdHlDb250ZXh0PFRFbnRpdHk+KHZhbHVlLCBoUFIodmFsdWUpLCBkUFIodmFsdWUpKSlcbiAgICApO1xuXG4gICAgdGhpcy5pbnB1dFRleHQkID0gdGhpcy5lbnRpdHlXcmFwcGVkJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIHRhcCh2YWx1ZUNvbnRleHQgPT4gdGhpcy5lbnRpdHlDb250ZXh0ID0gdmFsdWVDb250ZXh0KSxcbiAgICAgIG1hcCh2YWx1ZUNvbnRleHQgPT4ge1xuICAgICAgICBpZiAodmFsdWVDb250ZXh0LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlQ29udGV4dC5kaXNwbGF5VGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5hdXRvQ2xlYW5VcCgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEJlaGF2aW91ciBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhdXRvY29tcGxldGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvY29tcGxldGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRvY29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0ICdub3RoaW5nJyAvIG51bGwuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFsbG93TnVsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hbGxvd051bGwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWxsb3dOdWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd051bGw7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0eShlbnRpdHk6IFRFbnRpdHkpIHtcbiAgICB0aGlzLl9lbnRpdHkkLm5leHQoZW50aXR5KTtcbiAgICB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbChcbiAgICAgIHRoaXMuZW50aXR5VG9WYWx1ZShlbnRpdHkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW50aXR5KCk6IFRFbnRpdHkge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHkkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBlbnRpdHkgYXMgb2JzZXJ2YWJsZSBzdHJlYW0uIChCZWhhdmlvdXJTdWJqZWN0KVxuICAgKi9cbiAgcHVibGljIGdldCBlbnRpdHkkKCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbnRpdHlJZChpZDogVElkKSB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbCg8YW55PmlkIGFzIFRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0RW50aXR5QnlJZChpZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBlbnRpdHlJZCgpOiBUSWQge1xuICAgIHJldHVybiB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaW50UHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIgPSAodmFsdWUgPT4gdGhpcy5wcm9wZXJ0eVN0cmluZ1ZhbHVlKHZhbHVlLCBwcm9wZXJ0eSkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaW50UHJvcGVydHlSZXNvbHZlcihyZXNvbHZlcjogVGV4dFJlc29sdmVyRm4pIHtcbiAgICB0aGlzLmhpbnRQcm9wZXJ0eVJlc29sdmVyJC5uZXh0KHJlc29sdmVyKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBvbklucHV0Qmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuZW50aXR5Q29udGV4dC52YWx1ZSkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmVudGl0eUNvbnRleHQuZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LnZhbHVlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3B0aW9uRGlzYWJsZWRJbnRlcm5hbEZuKCk6IChvcHRpb246IFRFbnRpdHkpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAob3B0aW9uOiBURW50aXR5KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNFbnRpdHlTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbihvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuKCk6IChvcHRpb246IFRFbnRpdHkpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAob3B0aW9uOiBURW50aXR5KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc09wdGlvbkhpZGRlbkZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3B0aW9uSGlkZGVuRm4ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cblxuICBwdWJsaWMgdG9nZ2xlUGFuZWwoYXV0b1RyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpOiB2b2lkIHtcbiAgICBpZiAoYXV0b1RyaWdnZXIuYXV0b2NvbXBsZXRlLmlzT3Blbikge1xuICAgICAgYXV0b1RyaWdnZXIuY2xvc2VQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUmVxdWVzdGluZyB0byBvcGVuIGF1dG8tY29tcGxldGUgcGFuZWwuLi4nLCBhdXRvVHJpZ2dlcik7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0RjKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0RjLnN0YXJ0KHRoaXMuc29ydHMsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgREMhJywgZXJyKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZXJyb3IoZXJyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF1dG9UcmlnZ2VyLm9wZW5QYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xuXG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ29uSW5wdXRDbGlja2VkLCBsb2NrZWQ6ICcgKyB0aGlzLmlzTG9ja2VkICsgJywgYXV0b2NvbXBsZXRlOiAnICsgdGhpcy5hdXRvY29tcGxldGUsIGF1dG9UcmlnZ2VyKTtcbiAgICBpZiAodGhpcy5pc0xvY2tlZCB8fCB0aGlzLmF1dG9jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZVBhbmVsKGF1dG9UcmlnZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9wdGlvblNlbGVjdGVkKHNlbGVjdGVkVmFsdWU6IFRFbnRpdHkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VudGl0eVNlbGVjdGVkKHNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbChudWxsKTsgLy8gSEFDSzogRW5zdXJlIHdlIHRyaWdnZXIgdmlldyByZWRyYXdcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWYWx1ZUJ5RW50aXR5KHNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9wZW5TZWxlY3Rpb25Qb3B1cChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Qb3B1cCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Qb3B1cC5jaG9vc2UoXG4gICAgICAgIHRoaXMuZmlsdGVycyxcbiAgICAgICAgdGhpcy5zb3J0cyxcbiAgICAgICAgZmFsc2VcbiAgICAgICkuc3Vic2NyaWJlKFxuICAgICAgICAoc2VsZWN0aW9uOiBURW50aXR5W10pID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQnlFbnRpdHkoc2VsZWN0aW9uWzBdKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIud2FybignQ2FudCBvcGVuIHNlbGVjdGlvbiBicm93c2VyIHBvcHVwLCBzaW5jZSBbU2VsZWN0aW9uTW9kZWxQb3B1cERpcmVjdGl2ZV0gd2FzIG5vdCBmb3VuZCEnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JjZVJlbG9hZEZpcnN0KCkge1xuICAgIHRoaXMudmFsdWUgPSBudWxsOyAvLyB2YWx1ZUlkIGlzIHNldCB0byBudWxsIGF1dG9tYXRpY2FsbHlcbiAgICBFbGRlclNlbGVjdEZpcnN0VXRpbC50cnlTZWxlY3RGaXJzdCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZUJ5RW50aXR5KGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIHRoaXMuX2VudGl0eSQubmV4dChlbnRpdHkpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUoXG4gICAgICB0aGlzLmVudGl0eVRvVmFsdWUoZW50aXR5KVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQWJzdHJhY3QgSW1wbGVtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIHN1Z2dlc3Rpb25zIGRhdGEtY29udGV4dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgcHJvdGVjdGVkIG9uU3VnZ2VzdGlvbnNEY0NoYW5nZWQoZGF0YTogSURhdGFDb250ZXh0PFRFbnRpdHk+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICB0aGlzLnNlbGVjdEVudGl0eUJ5SWQodGhpcy5lbnRpdHlJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIHZhbHVlc0VxdWFscyhhOiBUVmFsdWUsIGI6IFRWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKGEpID09PSB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhd2FpdEVudGl0eVdpdGhJZChlbnRpdHlJZDogVElkLCB0aW1lb3V0TXM6IG51bWJlcik6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eSQucGlwZShcbiAgICAgIGZpbHRlcihlbnRpdHkgPT4gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpID09PSBlbnRpdHlJZCksXG4gICAgICB0YWtlKDEpLFxuICAgICAgdGltZW91dCh0aW1lb3V0TXMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbnRpdHlTZWxlY3RlZChlbnRpdHk6IFRFbnRpdHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpID09PSB0aGlzLmVudGl0eUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnRpdHlJZEZyb21WYWx1ZSh2YWx1ZTogVFZhbHVlKTogVElkIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIHJldHVybiA8YW55PnZhbHVlIGFzIFRJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW50aXR5ID0gKDxhbnk+dmFsdWUpIGFzIFRFbnRpdHk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0RW50aXR5QnlJZChpZDogVElkKTogdm9pZCB7XG5cbiAgICBjb25zdCBjdXJyZW50RW50aXR5ID0gdGhpcy5lbnRpdHk7XG4gICAgaWYgKGN1cnJlbnRFbnRpdHkgJiYgdGhpcy5nZXRFbnRpdHlJZChjdXJyZW50RW50aXR5KSA9PT0gaWQpIHtcbiAgICAgIHJldHVybjsgLy8gRW50aXR5IGFscmVhZHkgbG9hZGVkXG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjdXJyZW50RW50aXR5ICE9PSBudWxsICYmIGN1cnJlbnRFbnRpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zRGMpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmZpbmRJbkRhdGFDb250ZXh0KGlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgdGhpcy5lbnRpdHkgPSBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRFbnRpdHlCeUlkKGlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFpbGVkIHRvIHNlbGVjdCB2YWx1ZSBieSBJZDogJyArIGlkICsgJyAtIERhdGFDb250ZXh0IG5vdCBhdmFpbGFibGUuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRW50aXR5QnlJZChpZDogVElkKTogdm9pZCB7XG4gICAgdGhpcy5zdWdnZXN0aW9uc0RjLmRhdGFTb3VyY2UuZmluZEJ5SWQoPGFueT5pZClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIGVudGl0eSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRlZCBtaXNzaW5nIGVudGl0eSBieSBpZCAnICsgaWQgKyAnOicsIGVudGl0eSk7XG4gICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGVudGl0eSBieSBpZCAnICsgaWQsIGVycik7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmVycm9yKGVycikpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSW5EYXRhQ29udGV4dChpZDogVElkKTogVEVudGl0eSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25zRGMuc25hcHNob3QuZGF0YVxuICAgICAgLmZpbmQodiA9PiB0aGlzLmdldEVudGl0eUlkKHYpID09PSBpZCk7XG4gIH1cblxuICBwcml2YXRlIGVudGl0eVRvVmFsdWUoZW50aXR5OiBURW50aXR5KTogVFZhbHVlIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpO1xuICAgICAgcmV0dXJuIDxhbnk+aWQgYXMgVFZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gPGFueT5lbnRpdHkgYXMgVFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGFmdGVyIGEgdmFsdWUgaGFzIGJlZW4gd3JpdHRlbiB0byB0aGlzIGNvbnRyb2wuXG4gICAqXG4gICAqL1xuICBwcm90ZWN0ZWQgd3JpdGVUb0NvbnRyb2wodmFsdWU6IFRWYWx1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJZCkge1xuICAgICAgY29uc3QgZW50aXR5SWQgPSA8YW55PnZhbHVlIGFzIFRJZDtcbiAgICAgIC8vIFZhbHVlIHdhcyB3cml0dGVuIGFzIGVudGl0eSBpZCwgZW5zdXJlIHdlIHNlbGVjdCBlbnRpdHkgYnkgaWRcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd3cml0ZVRvQ29udHJvbDogdmFsdWUgd2FzIHdyaXR0ZW4gYXMgaWQ6ICcgKyBlbnRpdHlJZCwgdmFsdWUpO1xuICAgICAgdGhpcy5zZWxlY3RFbnRpdHlCeUlkKGVudGl0eUlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVmFsdWUgd2FzIHdyaXR0ZW4gYXMgZW50aXR5LCBlbnN1cmUgZW50aXR5IGlzIHVwZGF0ZWRcbiAgICAgIGNvbnN0IGN1cnJlbnRFbnRpdHkgPSB0aGlzLmVudGl0eTtcbiAgICAgIGNvbnN0IG5ld0VudGl0eSA9IDxhbnk+dmFsdWUgYXMgVEVudGl0eTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd3cml0ZVRvQ29udHJvbDogdmFsdWUgd2FzIHdyaXR0ZW4gYXMgZW50aXR5OiAnICsgSlNPTi5zdHJpbmdpZnkobmV3RW50aXR5KSwgdmFsdWUpO1xuICAgICAgaWYgKCF0aGlzLmlzRXF1YWwoY3VycmVudEVudGl0eSwgbmV3RW50aXR5KSkge1xuICAgICAgICB0aGlzLl9lbnRpdHkkLm5leHQobmV3RW50aXR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0lnbm9yZWQgd3JpdHRlbiBlbnRpdHkgYXMgaXQgaXMgYWxyZWFkeSBzZXQgdG8gZW50aXR5JCEnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIud3JpdGVUb0NvbnRyb2wodmFsdWUpO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIoZW50aXR5V3JhcHBlZCQgfCBhc3luYykgYXMgZW50aXR5V3JhcHBlclwiIGZ4RmxleFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWxkZXItc3RkLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgW2VsZGVyRGVuc2VdPVwiZGVuc2VcIlxuICAgICAgICAgICAgICAgIFtlbGRlck5vSGludF09XCJub0hpbnRcIlxuPlxuXG4gIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuXG5cbiAgPG5nLWNvbnRhaW5lciBtYXRQcmVmaXggKm5nSWY9XCIobWVyZ2VkU3RhdGUkIHwgYXN5bmMpIGFzIHN0YXRlXCI+XG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZWFkaW5nLWljb24gcHJlZml4LXBhZGRpbmcgbm9zZWxlY3QgY2xpY2thYmxlLWljb25cIlxuICAgICAgICAgICAgICBbY2xhc3MubG9hZGluZ109XCJzdGF0ZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cInN0YXRlPy5lcnJvciA/ICd3YXJuJyA6IGNvbG9yXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ3VycmVudENsaWNrZWQoZW50aXR5KVwiXG4gICAgPlxuICAgICAge3tpY29ufX1cbiAgICA8L21hdC1pY29uPlxuXG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIhaWNvbiAmJiBzdGF0ZT8uZXJyb3JcIlxuICAgICAgICAgICAgICBjbGFzcz1cImxlYWRpbmctaWNvbiBwcmVmaXgtcGFkZGluZyBub3NlbGVjdFwiXG4gICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiPlxuICAgICAgd2FybmluZ1xuICAgIDwvbWF0LWljb24+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQSBkeW5hbWljIGlucHV0IC0tPlxuICA8aW5wdXRcbiAgICBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGZ4RmxleD1cImdyb3dcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkgfHwgIWF1dG9jb21wbGV0ZVwiXG4gICAgW25hbWVdPVwibmFtZSArICctaW5uZXItaW5wdXQnXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgIFttYXRBdXRvY29tcGxldGVdICNhdXRvVHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIlxuICAgIFtlbGRlckVsZGVyQXV0b2NvbXBsZXRlXT1cImVsZGVyQXV0b1wiIFtxdWVyeUZpbHRlcl09XCJxdWVyeUZpbHRlclwiIFtmaWx0ZXJzXT1cImZpbHRlcnNcIiBbc29ydHNdPVwic29ydHNcIlxuICAgIGVsZGVyU2VsZWN0T25UYWJcbiAgICBbY2xhc3Muc2VsZWN0XT1cIiFhdXRvY29tcGxldGVcIiAoY2xpY2spPVwib25JbnB1dENsaWNrZWQoYXV0b1RyaWdnZXIpXCJcbiAgICBbbmdNb2RlbF09XCJpbnB1dFRleHQkIHwgYXN5bmNcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWUsIHVwZGF0ZU9uOiAnc3VibWl0J31cIlxuICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxuICA+XG5cbiAgPCEtLSBUaGlzIGJyZWFrcyBzdHVmZjogW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCB8IGFzeW5jXCIgLS0+XG5cbiAgPGVsZGVyLWF1dG9jb21wbGV0ZVxuICAgICNlbGRlckF1dG89XCJlbGRlckF1dG9jb21wbGV0ZVwiXG4gICAgW3N1Z2dlc3Rpb25zRGNdPVwic3VnZ2VzdGlvbnNEYyQgfCBhc3luY1wiXG4gICAgW3ZhbHVlVGVtcGxhdGVdPVwidmFsdWVUZW1wbGF0ZVwiXG4gICAgW2VuYWJsZWRdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICBbZGlzcGxheVByb3BlcnR5UmVzb2x2ZXJdPVwiZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkIHwgYXN5bmNcIlxuICAgIFtpc09wdGlvbkRpc2FibGVkRm5dPVwiaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm5cIlxuICAgIFtpc09wdGlvbkhpZGRlbkZuXT1cImlzT3B0aW9uSGlkZGVuSW50ZXJuYWxGblwiXG4gICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGFueSgkZXZlbnQpKVwiXG4gID48L2VsZGVyLWF1dG9jb21wbGV0ZT5cblxuXG4gIDxuZy1jb250YWluZXIgbWF0U3VmZml4PlxuXG4gICAgPG1hdC1pY29uXG4gICAgICAqbmdJZj1cIiFzZWxlY3Rpb25Qb3B1cCAmJiAhYXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJzZWxlY3QtYXJyb3cgbm9zZWxlY3RcIlxuICAgICAgKGNsaWNrKT1cIm9uSW5wdXRDbGlja2VkKGF1dG9UcmlnZ2VyKVwiPlxuICAgICAgYXJyb3dfZHJvcF9kb3duXG4gICAgPC9tYXQtaWNvbj5cblxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25Qb3B1cCAmJiAoIWVudGl0eVdyYXBwZXIudmFsdWUgfHwgIWFsbG93TnVsbClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2VsZWN0aW9uUG9wdXAoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJTZWFyY2hcIlxuICAgICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZW50aXR5V3JhcHBlci52YWx1ZSAmJiBhbGxvd051bGxcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICAgIHRhYkluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG1hdC1oaW50ICpuZ0lmPVwiZW50aXR5V3JhcHBlci5oaW50VGV4dFwiPnt7ZW50aXR5V3JhcHBlci5oaW50VGV4dH19PC9tYXQtaGludD5cblxuPC9tYXQtZm9ybS1maWVsZD5cblxuXG5cbiJdfQ==
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L2VsZGVyLXNlbGVjdC9lbGRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvZWxkZXItc2VsZWN0L2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFBYyxVQUFVLEVBQ2pDLEtBQUssRUFHTCxNQUFNLEVBQUUsU0FBUyxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUMvRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBNkIsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUNuRixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFbkgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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Z0JBY0ssWUFBWTtzQkFEdEIsS0FBSztnQkFNSyxvQkFBb0I7c0JBRDlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLFxuICBJbnB1dCwgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LCBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtidWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVyc30gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Zvcm1zL3RlbXBsYXRlLWNvbXBvc2l0ZS1jb250cm9sJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJRGF0YUNvbnRleHR9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsIHNraXAsIGZpbHRlciwgc3RhcnRXaXRoLCB3aXRoTGF0ZXN0RnJvbSwgc3dpdGNoTWFwLCB0YWtlLCB0aW1lb3V0LCBjYXRjaEVycm9yXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVUcmlnZ2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtFTERFUl9TRUxFQ1RfQkFTRSwgRWxkZXJTZWxlY3RCYXNlLCBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLCBUZXh0UmVzb2x2ZXJGbn0gZnJvbSAnLi4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtJRWxkZXJFbnRpdHlWYWx1ZUFjY2Vzc29yfSBmcm9tICcuLi9lbGRlci1lbnRpdHktdmFsdWUtYWNjZXNzb3InO1xuaW1wb3J0IHtFbGRlclNlbGVjdEZpcnN0VXRpbH0gZnJvbSAnLi4vYXV0by9lbGRlci1zZWxlY3QtZmlyc3QtdXRpbCc7XG5cbmNsYXNzIEVudGl0eUNvbnRleHQ8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IFQsXG4gICAgcHVibGljIHJlYWRvbmx5IGhpbnRUZXh0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmdcbiAgKSB7XG4gIH1cbn1cblxuXG4vKipcbiAqIFRoZSBlbGRlci1zZWxlY3QgY29udHJvbCBhbGxvd3MgdG8gc2VsZWN0IGEgc2luZ2xlXG4gKiBlbnRpdHkuXG4gKlxuICogUHJpbWFyeSBmb2N1cyBpcyBvbiBlYXN5IHVzYWdlIGZvciBjb21tb24gc2NlbmFyaW9zOlxuICpcbiAqIC0gSW50ZWdyYXRlZCBpbnRvIGFuZ3VsYXIgZm9ybXMgYW5kIHZhbGlkYXRpb25cbiAqIC0gU3VwcG9ydCBlbnRpdHkgaWQgaGFuZGxpbmcsIGlucHV0IC8gb3V0cHV0IGlzIHRoZSBlbnRpdHkgaWQgdnMgZnVsbCB2YWx1ZS5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVMREVSX1NFTEVDVF9CQVNFLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWxkZXJTZWxlY3RDb21wb25lbnQpXG4gICAgfSxcbiAgICAuLi5idWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVycyhFbGRlclNlbGVjdENvbXBvbmVudClcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlbGVjdENvbXBvbmVudDxURW50aXR5ID0gYW55LCBUSWQgPSBhbnksIFRWYWx1ZSA9IFRFbnRpdHkgfCBUSWQ+XG4gIGV4dGVuZHMgRWxkZXJTZWxlY3RCYXNlPFRJZCwgVEVudGl0eSwgVFZhbHVlPlxuICBpbXBsZW1lbnRzIElFbGRlckVudGl0eVZhbHVlQWNjZXNzb3I8VEVudGl0eSwgVElkPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhpbnRQcm9wZXJ0eVJlc29sdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dFJlc29sdmVyRm4+KCh2YWx1ZTogVEVudGl0eSkgPT4gbnVsbCk7XG5cbiAgcHJpdmF0ZSBfYWxsb3dOdWxsID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKVxuICBwdWJsaWMgaW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgLyoqXG4gICAqIFN0cmluZyB0byBkaXNwbGF5IGZvciB0aGUgJ25vdGhpbmcnIC8gbnVsbCB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBudWxsRGlzcGxheSA9ICctJztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eUlkQ2hhbmdlOiBPYnNlcnZhYmxlPFRJZD47XG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gZW50aXR5LWlkIGNoYW5nZSwgYnV0IGVtaXRzIG9ubHkgd2hlbiB0aGUgdXNlclxuICAgKiBoYXMgdXBkYXRlZCB0aGUgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eUlkVXBkYXRlZDogT2JzZXJ2YWJsZTxUSWQ+O1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5Q2hhbmdlOiBPYnNlcnZhYmxlPFRFbnRpdHk+O1xuXG4gIC8qKlxuICAgKiBTaW1pbGFyIHRvIGVudGl0eSBjaGFuZ2UsIGJ1dCBlbWl0cyBvbmx5IHdoZW4gdGhlIHVzZXJcbiAgICogaGFzIHVwZGF0ZWQgdGhlIHZhbHVlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBlbnRpdHlVcGRhdGVkOiBPYnNlcnZhYmxlPFRFbnRpdHk+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VudGl0eSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRFbnRpdHk+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfYXV0b2NvbXBsZXRlID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eVdyYXBwZWQkOiBPYnNlcnZhYmxlPEVudGl0eUNvbnRleHQ8VEVudGl0eT4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgZW50aXR5Q29udGV4dDogRW50aXR5Q29udGV4dDxURW50aXR5PjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICB6b25lOiBOZ1pvbmUsXG4gICkge1xuICAgIHN1cGVyKHpvbmUpO1xuXG4gICAgdGhpcy5lbnRpdHlJZENoYW5nZSA9IHRoaXMudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgIG1hcCh2ID0+IHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodikpXG4gICAgKTtcblxuICAgIHRoaXMuZW50aXR5Q2hhbmdlID0gdGhpcy5fZW50aXR5JC5waXBlKFxuICAgICAgc2tpcCgxKSAvLyBTa2lwIHRoZSBpbml0aWFsIG9yIGN1cnJlbnQgdmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlJZFVwZGF0ZWQgPSB0aGlzLnZhbHVlVXBkYXRlZC5waXBlKFxuICAgICAgbWFwKHZhbHVlID0+IHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodmFsdWUpKVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eVVwZGF0ZWQgPSB0aGlzLmVudGl0eUlkVXBkYXRlZC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGVudGl0eUlkID0+IHRoaXMuYXdhaXRFbnRpdHlXaXRoSWQoZW50aXR5SWQsIHRoaXMudGltZW91dEFmdGVyTXMpKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgYXdhaXRFbnRpdHlXaXRoSWQgLT4gdGltZWQgb3V0IGFmdGVyOiAke3RoaXMudGltZW91dEFmdGVyTXN9YCwgZXJyKTtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlXcmFwcGVkJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMuX2VudGl0eSQsXG4gICAgICAgIHRoaXMuZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkLFxuICAgICAgICB0aGlzLmhpbnRQcm9wZXJ0eVJlc29sdmVyJFxuICAgICAgXVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlLCBkUFIsIGhQUl0pID0+IG5ldyBFbnRpdHlDb250ZXh0PFRFbnRpdHk+KHZhbHVlLCBoUFIodmFsdWUpLCBkUFIodmFsdWUpKSlcbiAgICApO1xuXG4gICAgdGhpcy5pbnB1dFRleHQkID0gdGhpcy5lbnRpdHlXcmFwcGVkJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIHRhcCh2YWx1ZUNvbnRleHQgPT4gdGhpcy5lbnRpdHlDb250ZXh0ID0gdmFsdWVDb250ZXh0KSxcbiAgICAgIG1hcCh2YWx1ZUNvbnRleHQgPT4ge1xuICAgICAgICBpZiAodmFsdWVDb250ZXh0LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlQ29udGV4dC5kaXNwbGF5VGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5hdXRvQ2xlYW5VcCgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEJlaGF2aW91ciBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhdXRvY29tcGxldGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvY29tcGxldGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRvY29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0ICdub3RoaW5nJyAvIG51bGwuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFsbG93TnVsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hbGxvd051bGwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWxsb3dOdWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd051bGw7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0eShlbnRpdHk6IFRFbnRpdHkpIHtcbiAgICB0aGlzLl9lbnRpdHkkLm5leHQoZW50aXR5KTtcbiAgICB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbChcbiAgICAgIHRoaXMuZW50aXR5VG9WYWx1ZShlbnRpdHkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW50aXR5KCk6IFRFbnRpdHkge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHkkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBlbnRpdHkgYXMgb2JzZXJ2YWJsZSBzdHJlYW0uIChCZWhhdmlvdXJTdWJqZWN0KVxuICAgKi9cbiAgcHVibGljIGdldCBlbnRpdHkkKCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbnRpdHlJZChpZDogVElkKSB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbCg8YW55PmlkIGFzIFRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0RW50aXR5QnlJZChpZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBlbnRpdHlJZCgpOiBUSWQge1xuICAgIHJldHVybiB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaW50UHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIgPSAodmFsdWUgPT4gdGhpcy5wcm9wZXJ0eVN0cmluZ1ZhbHVlKHZhbHVlLCBwcm9wZXJ0eSkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaW50UHJvcGVydHlSZXNvbHZlcihyZXNvbHZlcjogVGV4dFJlc29sdmVyRm4pIHtcbiAgICB0aGlzLmhpbnRQcm9wZXJ0eVJlc29sdmVyJC5uZXh0KHJlc29sdmVyKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBvbklucHV0Qmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuZW50aXR5Q29udGV4dC52YWx1ZSkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmVudGl0eUNvbnRleHQuZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LnZhbHVlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3B0aW9uRGlzYWJsZWRJbnRlcm5hbEZuKCk6IChvcHRpb246IFRFbnRpdHkpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAob3B0aW9uOiBURW50aXR5KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNFbnRpdHlTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbihvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuKCk6IChvcHRpb246IFRFbnRpdHkpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAob3B0aW9uOiBURW50aXR5KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc09wdGlvbkhpZGRlbkZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3B0aW9uSGlkZGVuRm4ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cblxuICBwdWJsaWMgdG9nZ2xlUGFuZWwoYXV0b1RyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpOiB2b2lkIHtcbiAgICBpZiAoYXV0b1RyaWdnZXIuYXV0b2NvbXBsZXRlLmlzT3Blbikge1xuICAgICAgYXV0b1RyaWdnZXIuY2xvc2VQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUmVxdWVzdGluZyB0byBvcGVuIGF1dG8tY29tcGxldGUgcGFuZWwuLi4nLCBhdXRvVHJpZ2dlcik7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0RjKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0RjLnN0YXJ0KHRoaXMuc29ydHMsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgREMhJywgZXJyKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZXJyb3IoZXJyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF1dG9UcmlnZ2VyLm9wZW5QYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xuXG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ29uSW5wdXRDbGlja2VkLCBsb2NrZWQ6ICcgKyB0aGlzLmlzTG9ja2VkICsgJywgYXV0b2NvbXBsZXRlOiAnICsgdGhpcy5hdXRvY29tcGxldGUsIGF1dG9UcmlnZ2VyKTtcbiAgICBpZiAodGhpcy5pc0xvY2tlZCB8fCB0aGlzLmF1dG9jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZVBhbmVsKGF1dG9UcmlnZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9wdGlvblNlbGVjdGVkKHNlbGVjdGVkVmFsdWU6IFRFbnRpdHkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VudGl0eVNlbGVjdGVkKHNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbChudWxsKTsgLy8gSEFDSzogRW5zdXJlIHdlIHRyaWdnZXIgdmlldyByZWRyYXdcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWYWx1ZUJ5RW50aXR5KHNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9wZW5TZWxlY3Rpb25Qb3B1cChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Qb3B1cCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Qb3B1cC5jaG9vc2UoXG4gICAgICAgIHRoaXMuZmlsdGVycyxcbiAgICAgICAgdGhpcy5zb3J0cyxcbiAgICAgICAgZmFsc2VcbiAgICAgICkuc3Vic2NyaWJlKFxuICAgICAgICAoc2VsZWN0aW9uOiBURW50aXR5W10pID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQnlFbnRpdHkoc2VsZWN0aW9uWzBdKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIud2FybignQ2FudCBvcGVuIHNlbGVjdGlvbiBicm93c2VyIHBvcHVwLCBzaW5jZSBbU2VsZWN0aW9uTW9kZWxQb3B1cERpcmVjdGl2ZV0gd2FzIG5vdCBmb3VuZCEnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JjZVJlbG9hZEZpcnN0KCkge1xuICAgIHRoaXMudmFsdWUgPSBudWxsOyAvLyB2YWx1ZUlkIGlzIHNldCB0byBudWxsIGF1dG9tYXRpY2FsbHlcbiAgICBFbGRlclNlbGVjdEZpcnN0VXRpbC50cnlTZWxlY3RGaXJzdCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZUJ5RW50aXR5KGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIHRoaXMuX2VudGl0eSQubmV4dChlbnRpdHkpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUoXG4gICAgICB0aGlzLmVudGl0eVRvVmFsdWUoZW50aXR5KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyl7XG4gICAgdGhpcy5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMob3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYmx1cigpe1xuICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmJsdXIoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBBYnN0cmFjdCBJbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgc3VnZ2VzdGlvbnMgZGF0YS1jb250ZXh0IGhhcyBjaGFuZ2VkXG4gICAqL1xuICBwcm90ZWN0ZWQgb25TdWdnZXN0aW9uc0RjQ2hhbmdlZChkYXRhOiBJRGF0YUNvbnRleHQ8VEVudGl0eT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0RW50aXR5QnlJZCh0aGlzLmVudGl0eUlkKTtcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBNZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcm90ZWN0ZWQgdmFsdWVzRXF1YWxzKGE6IFRWYWx1ZSwgYjogVFZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5SWRGcm9tVmFsdWUoYSkgPT09IHRoaXMuZW50aXR5SWRGcm9tVmFsdWUoYik7XG4gIH1cblxuICBwcml2YXRlIGF3YWl0RW50aXR5V2l0aElkKGVudGl0eUlkOiBUSWQsIHRpbWVvdXRNczogbnVtYmVyKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5JC5waXBlKFxuICAgICAgZmlsdGVyKGVudGl0eSA9PiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSkgPT09IGVudGl0eUlkKSxcbiAgICAgIHRha2UoMSksXG4gICAgICB0aW1lb3V0KHRpbWVvdXRNcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VudGl0eVNlbGVjdGVkKGVudGl0eTogVEVudGl0eSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSkgPT09IHRoaXMuZW50aXR5SWQ7XG4gIH1cblxuICBwcml2YXRlIGVudGl0eUlkRnJvbVZhbHVlKHZhbHVlOiBUVmFsdWUpOiBUSWQge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJZCkge1xuICAgICAgcmV0dXJuIDxhbnk+dmFsdWUgYXMgVElkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSAoPGFueT52YWx1ZSkgYXMgVEVudGl0eTtcbiAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RFbnRpdHlCeUlkKGlkOiBUSWQpOiB2b2lkIHtcblxuICAgIGNvbnN0IGN1cnJlbnRFbnRpdHkgPSB0aGlzLmVudGl0eTtcbiAgICBpZiAoY3VycmVudEVudGl0eSAmJiB0aGlzLmdldEVudGl0eUlkKGN1cnJlbnRFbnRpdHkpID09PSBpZCkge1xuICAgICAgcmV0dXJuOyAvLyBFbnRpdHkgYWxyZWFkeSBsb2FkZWRcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGN1cnJlbnRFbnRpdHkgIT09IG51bGwgJiYgY3VycmVudEVudGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW50aXR5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNEYykge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZmluZEluRGF0YUNvbnRleHQoaWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZEVudGl0eUJ5SWQoaWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gc2VsZWN0IHZhbHVlIGJ5IElkOiAnICsgaWQgKyAnIC0gRGF0YUNvbnRleHQgbm90IGF2YWlsYWJsZS4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRFbnRpdHlCeUlkKGlkOiBUSWQpOiB2b2lkIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGMuZGF0YVNvdXJjZS5maW5kQnlJZCg8YW55PmlkKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgZW50aXR5ID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGVkIG1pc3NpbmcgZW50aXR5IGJ5IGlkICcgKyBpZCArICc6JywgZW50aXR5KTtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGxvYWQgZW50aXR5IGJ5IGlkICcgKyBpZCwgZXJyKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZXJyb3IoZXJyKSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbkRhdGFDb250ZXh0KGlkOiBUSWQpOiBURW50aXR5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNEYy5zbmFwc2hvdC5kYXRhXG4gICAgICAuZmluZCh2ID0+IHRoaXMuZ2V0RW50aXR5SWQodikgPT09IGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZW50aXR5VG9WYWx1ZShlbnRpdHk6IFRFbnRpdHkpOiBUVmFsdWUge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJZCkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEVudGl0eUlkKGVudGl0eSk7XG4gICAgICByZXR1cm4gPGFueT5pZCBhcyBUVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8YW55PmVudGl0eSBhcyBUVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYWZ0ZXIgYSB2YWx1ZSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoaXMgY29udHJvbC5cbiAgICpcbiAgICovXG4gIHByb3RlY3RlZCB3cml0ZVRvQ29udHJvbCh2YWx1ZTogVFZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICBjb25zdCBlbnRpdHlJZCA9IDxhbnk+dmFsdWUgYXMgVElkO1xuICAgICAgLy8gVmFsdWUgd2FzIHdyaXR0ZW4gYXMgZW50aXR5IGlkLCBlbnN1cmUgd2Ugc2VsZWN0IGVudGl0eSBieSBpZFxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3dyaXRlVG9Db250cm9sOiB2YWx1ZSB3YXMgd3JpdHRlbiBhcyBpZDogJyArIGVudGl0eUlkLCB2YWx1ZSk7XG4gICAgICB0aGlzLnNlbGVjdEVudGl0eUJ5SWQoZW50aXR5SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWx1ZSB3YXMgd3JpdHRlbiBhcyBlbnRpdHksIGVuc3VyZSBlbnRpdHkgaXMgdXBkYXRlZFxuICAgICAgY29uc3QgY3VycmVudEVudGl0eSA9IHRoaXMuZW50aXR5O1xuICAgICAgY29uc3QgbmV3RW50aXR5ID0gPGFueT52YWx1ZSBhcyBURW50aXR5O1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3dyaXRlVG9Db250cm9sOiB2YWx1ZSB3YXMgd3JpdHRlbiBhcyBlbnRpdHk6ICcgKyBKU09OLnN0cmluZ2lmeShuZXdFbnRpdHkpLCB2YWx1ZSk7XG4gICAgICBpZiAoIXRoaXMuaXNFcXVhbChjdXJyZW50RW50aXR5LCBuZXdFbnRpdHkpKSB7XG4gICAgICAgIHRoaXMuX2VudGl0eSQubmV4dChuZXdFbnRpdHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignSWdub3JlZCB3cml0dGVuIGVudGl0eSBhcyBpdCBpcyBhbHJlYWR5IHNldCB0byBlbnRpdHkkIScpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci53cml0ZVRvQ29udHJvbCh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIihlbnRpdHlXcmFwcGVkJCB8IGFzeW5jKSBhcyBlbnRpdHlXcmFwcGVyXCIgZnhGbGV4XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1zdGQtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICBbZWxkZXJEZW5zZV09XCJkZW5zZVwiXG4gICAgICAgICAgICAgICAgW2VsZGVyTm9IaW50XT1cIm5vSGludFwiXG4+XG5cbiAgPG1hdC1sYWJlbCAqbmdJZj1cImxhYmVsXCI+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG5cblxuICA8bmctY29udGFpbmVyIG1hdFByZWZpeCAqbmdJZj1cIihtZXJnZWRTdGF0ZSQgfCBhc3luYykgYXMgc3RhdGVcIj5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIiBkaXNhYmxlZFxuICAgICAgICAgICAgICBjbGFzcz1cImxlYWRpbmctaWNvbiBwcmVmaXgtcGFkZGluZyBub3NlbGVjdCBjbGlja2FibGUtaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5sb2FkaW5nXT1cInN0YXRlLmxvYWRpbmdcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwic3RhdGU/LmVycm9yID8gJ3dhcm4nIDogY29sb3JcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DdXJyZW50Q2xpY2tlZChlbnRpdHkpXCJcbiAgICA+XG4gICAgICB7e2ljb259fVxuICAgIDwvbWF0LWljb24+XG5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpY29uICYmIHN0YXRlPy5lcnJvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCI+XG4gICAgICB3YXJuaW5nXG4gICAgPC9tYXQtaWNvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBBIGR5bmFtaWMgaW5wdXQgLS0+XG4gIDxpbnB1dCAjaW5wdXRcbiAgICBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGZ4RmxleD1cImdyb3dcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkgfHwgIWF1dG9jb21wbGV0ZVwiXG4gICAgW25hbWVdPVwibmFtZSArICctaW5uZXItaW5wdXQnXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgIFttYXRBdXRvY29tcGxldGVdICNhdXRvVHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIlxuICAgIFtlbGRlckVsZGVyQXV0b2NvbXBsZXRlXT1cImVsZGVyQXV0b1wiIFtxdWVyeUZpbHRlcl09XCJxdWVyeUZpbHRlclwiIFtmaWx0ZXJzXT1cImZpbHRlcnNcIiBbc29ydHNdPVwic29ydHNcIlxuICAgIGVsZGVyU2VsZWN0T25UYWJcbiAgICBbY2xhc3Muc2VsZWN0XT1cIiFhdXRvY29tcGxldGVcIiAoY2xpY2spPVwib25JbnB1dENsaWNrZWQoYXV0b1RyaWdnZXIpXCJcbiAgICBbbmdNb2RlbF09XCJpbnB1dFRleHQkIHwgYXN5bmNcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWUsIHVwZGF0ZU9uOiAnc3VibWl0J31cIlxuICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxuICA+XG5cbiAgPCEtLSBUaGlzIGJyZWFrcyBzdHVmZjogW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCB8IGFzeW5jXCIgLS0+XG5cbiAgPGVsZGVyLWF1dG9jb21wbGV0ZVxuICAgICNlbGRlckF1dG89XCJlbGRlckF1dG9jb21wbGV0ZVwiXG4gICAgW3N1Z2dlc3Rpb25zRGNdPVwic3VnZ2VzdGlvbnNEYyQgfCBhc3luY1wiXG4gICAgW3ZhbHVlVGVtcGxhdGVdPVwidmFsdWVUZW1wbGF0ZVwiXG4gICAgW2VuYWJsZWRdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICBbZGlzcGxheVByb3BlcnR5UmVzb2x2ZXJdPVwiZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkIHwgYXN5bmNcIlxuICAgIFtpc09wdGlvbkRpc2FibGVkRm5dPVwiaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm5cIlxuICAgIFtpc09wdGlvbkhpZGRlbkZuXT1cImlzT3B0aW9uSGlkZGVuSW50ZXJuYWxGblwiXG4gICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGFueSgkZXZlbnQpKVwiXG4gID48L2VsZGVyLWF1dG9jb21wbGV0ZT5cblxuXG4gIDxuZy1jb250YWluZXIgbWF0U3VmZml4PlxuXG4gICAgPG1hdC1pY29uXG4gICAgICAqbmdJZj1cIiFzZWxlY3Rpb25Qb3B1cCAmJiAhYXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJzZWxlY3QtYXJyb3cgbm9zZWxlY3RcIlxuICAgICAgKGNsaWNrKT1cIm9uSW5wdXRDbGlja2VkKGF1dG9UcmlnZ2VyKVwiPlxuICAgICAgYXJyb3dfZHJvcF9kb3duXG4gICAgPC9tYXQtaWNvbj5cblxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25Qb3B1cCAmJiAoIWVudGl0eVdyYXBwZXIudmFsdWUgfHwgIWFsbG93TnVsbClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2VsZWN0aW9uUG9wdXAoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJTZWFyY2hcIlxuICAgICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZW50aXR5V3JhcHBlci52YWx1ZSAmJiBhbGxvd051bGxcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICAgIHRhYkluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG1hdC1oaW50ICpuZ0lmPVwiZW50aXR5V3JhcHBlci5oaW50VGV4dFwiPnt7ZW50aXR5V3JhcHBlci5oaW50VGV4dH19PC9tYXQtaGludD5cblxuPC9tYXQtZm9ybS1maWVsZD5cblxuXG5cbiJdfQ==
@@ -269,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
269
269
  }], valueTemplate: [{
270
270
  type: Input
271
271
  }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9lbGRlci1zZWxlY3QtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUd2RixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUVyRixPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDM0QsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQU01RCxNQUFNLE9BQU8seUJBQXlCO0lBeUJwQyxZQUNrQixJQUFhLEVBQ2IsT0FBZ0IsRUFDaEIsS0FBYTtRQUZiLFNBQUksR0FBSixJQUFJLENBQVM7UUFDYixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENB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QUM1QjtJQUNILENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxLQUFjLEVBQUUsUUFBZ0I7UUFDNUQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDekMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksUUFBUSxFQUFFO1lBQ1osT0FBYSxLQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0I7UUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDOzs2R0EzUW1CLGVBQWU7aUdBQWYsZUFBZSx5aEJBbURyQix5QkFBeUIsMkJBQVMsV0FBVyw0RUFJN0MsNEJBQTRCOzRGQXZEdEIsZUFBZTtrQkFGcEMsU0FBUzs2RkF5QkQsT0FBTztzQkFEYixLQUFLO2dCQVlDLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxXQUFXO3NCQURqQixLQUFLO2dCQUlDLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsTUFBTTtzQkFEWixLQUFLO2dCQU9DLGtCQUFrQjtzQkFEeEIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQztnQkFLbkUsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBSW5DLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBUVUsY0FBYztzQkFEN0IsTUFBTTtnQkF1Q0ksU0FBUztzQkFEbkIsS0FBSztnQkFhSyxlQUFlO3NCQUR6QixLQUFLO2dCQU1LLHVCQUF1QjtzQkFEakMsS0FBSztnQkFNSyxPQUFPO3NCQURqQixLQUFLO2dCQVVLLFVBQVU7c0JBRHBCLEtBQUs7Z0JBUUssSUFBSTtzQkFEZCxLQUFLO2dCQThCSyxhQUFhO3NCQUR2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIE5nWm9uZSwgT3V0cHV0LCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1GaWVsZEJhc2VDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbW1vbi9mb3Jtcy9mb3JtLWZpZWxkLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJRGF0YUNvbnRleHR9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtJRGF0YVNvdXJjZX0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEvZGF0YXNvdXJjZS9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge0RhdGFDb250ZXh0QnVpbGRlcn0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEvZGF0YS1jb250ZXh0L2RhdGEtY29udGV4dC1idWlsZGVyJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS9maWx0ZXInO1xuaW1wb3J0IHtTb3J0fSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS9zb3J0JztcbmltcG9ydCB7RWxkZXJTZWxlY3RWYWx1ZURpcmVjdGl2ZX0gZnJvbSAnLi9lbGRlci1zZWxlY3QtdmFsdWUuZGlyZWN0aXZlJztcbmltcG9ydCB7U2VsZWN0aW9uTW9kZWxQb3B1cERpcmVjdGl2ZX0gZnJvbSAnLi9wb3B1cC9zZWxlY3Rpb24tbW9kZWwtcG9wdXAuZGlyZWN0aXZlJztcbmltcG9ydCB7RGF0YUNvbnRleHRTdGF0dXN9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQtc3RhdHVzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtydW5JblpvbmV9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscy9uZy16b25lLXV0aWxzJztcbmltcG9ydCB7RmlsdGVyQ29udGV4dH0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEvZmlsdGVyLWNvbnRleHQnO1xuaW1wb3J0IHtjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmV4cG9ydCB0eXBlIFRleHRSZXNvbHZlckZuID0gKHZhbHVlOiBhbnkpID0+IHN0cmluZztcblxuXG5cbmV4cG9ydCBjbGFzcyBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlIHtcblxuICBwdWJsaWMgc3RhdGljIGZyb21EYXRhQ29udGV4dChkY1N0YXRlOiBEYXRhQ29udGV4dFN0YXR1cyk6IEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUge1xuICAgIGlmIChkY1N0YXRlLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybiBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmxvYWRpbmcoKTtcbiAgICB9IGVsc2UgaWYgKGRjU3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmVycm9yKGRjU3RhdGUuZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZS5pZGxlKCk7XG4gICAgfVxuICB9XG5cblxuICBwdWJsaWMgc3RhdGljIGlkbGUoKTogRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlKHRydWUsIGZhbHNlLCBudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbG9hZGluZygpOiBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlIHtcbiAgICByZXR1cm4gbmV3IEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUoZmFsc2UsIHRydWUsIG51bGwpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlcnJvcihlcnJvcjogc3RyaW5nKTogRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlKGZhbHNlLCBmYWxzZSwgZXJyb3IpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGlkbGU6IGJvb2xlYW4sXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmc6IGJvb2xlYW4sXG4gICAgcHVibGljIHJlYWRvbmx5IGVycm9yOiBzdHJpbmdcbiAgKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVMREVSX1NFTEVDVF9CQVNFID0gbmV3IEluamVjdGlvblRva2VuPEVsZGVyU2VsZWN0QmFzZTxhbnksIGFueSwgYW55Pj4oJ0VsZGVyU2VsZWN0QmFzZScpO1xuXG5cbi8qKlxuICogQmFzZSBjb21wb25lbnQgZm9yIEVsZGVyIFNlbGVjdGlvbiBDb250cm9scy5cbiAqXG4gKiAgRWxkZXIgU2VsZWN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGFic3RyYWN0IGNvbmNlcHQ6XG4gKlxuICogLSBTdWdnZXN0aW9uLU1vZGVsOiBBIERhdGFTb3VyY2UgYW5kIGRlcml2ZWQgRGF0YUNvbnRleHQgZm9yIHRoZSAoYXV0by1jb21wbGV0ZSkgc3VnZ2VzdGlvbnMuXG4gKlxuICogQHBhcmFtIFRJRCBFbnRpdHkgSWQgVHlwZVxuICogQHBhcmFtIFQgRW50aXR5IFR5cGVcbiAqIEBwYXJhbSBUVmFsdWUgVmFsdWUgYmFja2luZyB0aGUgY29udHJvbC4gQ2FuIGJlIHRoZSBlbnRpdHksIHRoZSBpZCBvciBzb21ldGhpbmcgZWxzZS5cbiAqL1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbGRlclNlbGVjdEJhc2U8VElkLCBURW50aXR5LCBUVmFsdWU+IGV4dGVuZHMgRm9ybUZpZWxkQmFzZUNvbXBvbmVudDxUVmFsdWU+IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJDb250ZXh0ID0gbmV3IEZpbHRlckNvbnRleHQoKTtcblxuICBwcml2YXRlIF92YWx1ZUFzSWQ6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIHRpbWVvdXRBZnRlck1zID0gNTAwMDtcblxuICAvKipcbiAgICogRGVmaW5lIGlmIGVsZGVyLXNlbGVjdCBzaG91bGQgY2xlYW4gdXAgdGhlXG4gICAqIGRhdGEtY29udGV4dCByZXNvdXJjZXMgZm9yIHlvdS5cbiAgICpcbiAgICogSW4gbW9yZSBhZHZhbmNlZCBzY2VuYXJpb3Mgd2hlcmUgeW91IHBsYW4gdG8gcmV1c2UgdGhlIHNhbWUgZGF0YS1jb250ZXh0XG4gICAqIHNldCB0aGlzIHRvIGZhbHNlIGFuZCByZWxlYXNlIHRoZSByZXNvdXJjZXMgeW91cnNlbGYuIChkYXRhQ29udGV4dC5jbG9zZSlcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjbGVhblVwID0gdHJ1ZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0UmVzb2x2ZXJGbj4oKHZhbHVlOiBURW50aXR5KSA9PiB0aGlzLnByb3BlcnR5U3RyaW5nVmFsdWUodmFsdWUsIG51bGwpKTtcblxuICAvKiogVW5kZXJseWluZyBkYXRhIGNvbnRleHQuICovXG4gIHB1YmxpYyByZWFkb25seSBzdWdnZXN0aW9uc0RjJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SURhdGFDb250ZXh0PFRFbnRpdHk+PihudWxsKTtcblxuICAvKipcbiAgICogUGFnZSBzaXplLiAoVXNlZCBmb3IgaW5maW5pdGUgc2Nyb2xsaW5nIGNodW5rcylcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwYWdlU2l6ZSA9IDEwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBxdWVyeUZpbHRlciA9ICdxdWVyeSc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNvcnRzOiBTb3J0W10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVuc2U6IGJvb2xlYW4gfCBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vSGludDogYm9vbGVhbiB8IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wdGlvbiB0ZW1wbGF0ZSB0byBjdXN0b21pemUgdGhlIHVpIGxvb2suXG4gICAqL1xuICBAQ29udGVudENoaWxkKEVsZGVyU2VsZWN0VmFsdWVEaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHZhbHVlVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfdmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKFNlbGVjdGlvbk1vZGVsUG9wdXBEaXJlY3RpdmUpXG4gIHB1YmxpYyBzZWxlY3Rpb25Qb3B1cDogU2VsZWN0aW9uTW9kZWxQb3B1cERpcmVjdGl2ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXNPcHRpb25EaXNhYmxlZEZuOiAob3B0aW9uOiBURW50aXR5KSA9PiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpc09wdGlvbkhpZGRlbkZuOiAob3B0aW9uOiBURW50aXR5KSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSB1c2VyIGhhcyBjbGlja2VkIG9uIHRoZSBjdXJyZW50XG4gICAqIHNlbGVjdGVkIGVudGl0eS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRFbnRpdHk+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZT4oRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZS5pZGxlKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgbWVyZ2VkU3RhdGUkOiBPYnNlcnZhYmxlPEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGU+O1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHpvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMubWVyZ2VkU3RhdGUkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zRGMkLnBpcGUoZmlsdGVyKGRjID0+ICEhZGMpLCBzd2l0Y2hNYXAoZGMgPT4gZGMuc3RhdHVzKSksXG4gICAgICB0aGlzLnN0YXRlJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtkY1N0YXRlLCBzdGF0ZV0pID0+IHtcbiAgICAgICAgaWYgKGRjU3RhdGUuaWRsZSkge1xuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZS5mcm9tRGF0YUNvbnRleHQoZGNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgcnVuSW5ab25lKHRoaXMuem9uZSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZUFzSWQodmFsdWVBc0lkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fdmFsdWVBc0lkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlQXNJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlQXNJZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVBc0lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlcy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyID0gKHZhbHVlID0+IHRoaXMucHJvcGVydHlTdHJpbmdWYWx1ZSh2YWx1ZSwgcHJvcGVydHkpKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIocmVzb2x2ZXI6IFRleHRSZXNvbHZlckZuKSB7XG4gICAgdGhpcy5kaXNwbGF5UHJvcGVydHlSZXNvbHZlciQubmV4dChyZXNvbHZlcik7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZpbHRlcnMoZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICB0aGlzLnJlcGxhY2VGaWx0ZXJzKGZpbHRlcnMpO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJzKCk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ29udGV4dC5maWx0ZXJzU25hcHNob3Q7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2Uoc291cmNlOiBJRGF0YVNvdXJjZTxURW50aXR5Pikge1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNEYyA9IERhdGFDb250ZXh0QnVpbGRlci5zdGFydDxURW50aXR5PigpXG4gICAgICAucGFnZVNpemUodGhpcy5wYWdlU2l6ZSlcbiAgICAgIC5idWlsZChzb3VyY2UpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhKGRhdGE6IEFycmF5PFRFbnRpdHk+IHwgSURhdGFDb250ZXh0PFRFbnRpdHk+KSB7XG5cbiAgICB0aGlzLmF1dG9DbGVhblVwKCk7XG5cbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zRGMgPSBEYXRhQ29udGV4dEJ1aWxkZXIuc3RhcnQ8VEVudGl0eT4oKVxuICAgICAgICAubG9jYWxTb3J0KClcbiAgICAgICAgLmJ1aWxkTG9jYWwoZGF0YSk7IC8vIE1lbW9yeSBsZWFrXG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zRGMuc3RhcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0RjID0gZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNEYyA9IERhdGFDb250ZXh0QnVpbGRlci5zdGFydDxURW50aXR5PigpLmJ1aWxkRW1wdHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0IHN1Z2dlc3Rpb25zRGMoZGF0YTogSURhdGFDb250ZXh0PFRFbnRpdHk+KSB7XG4gICAgdGhpcy5hdXRvQ2xlYW5VcCgpO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNEYyQubmV4dChkYXRhKTtcbiAgICB0aGlzLm9uU3VnZ2VzdGlvbnNEY0NoYW5nZWQoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN1Z2dlc3Rpb25zRGMoKTogSURhdGFDb250ZXh0PFRFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5zdWdnZXN0aW9uc0RjJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fdmFsdWVUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZVRlbXBsYXRlIHx8IHRoaXMudmFsdWVUZW1wbGF0ZVF1ZXJ5O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG9uQ3VycmVudENsaWNrZWQoZW50aXR5OiBURW50aXR5KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50Q2xpY2tlZC5lbWl0KGVudGl0eSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmlsdGVyKHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJDb250ZXh0LnVwZGF0ZUZpbHRlcih1cGRhdGVkRmlsdGVyKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaWx0ZXJzKHVwZGF0ZWRGaWx0ZXJzPzogRmlsdGVyW10pOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJDb250ZXh0LnVwZGF0ZUZpbHRlcnModXBkYXRlZEZpbHRlcnMpO1xuICB9XG5cbiAgcHVibGljIHJlcGxhY2VGaWx0ZXJzKG5ld0ZpbHRlcnM/OiBGaWx0ZXJbXSkge1xuICAgIHRoaXMuX2ZpbHRlckNvbnRleHQucmVwbGFjZUZpbHRlcnMobmV3RmlsdGVycyk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbHRlckNvbnRleHQuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTdGF0ZShzdGF0ZTogRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEFic3RyYWN0IEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSBzdWdnZXN0aW9ucyBkYXRhLWNvbnRleHQgaGFzIGNoYW5nZWRcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvblN1Z2dlc3Rpb25zRGNDaGFuZ2VkKGRhdGE6IElEYXRhQ29udGV4dDxURW50aXR5Pik6IHZvaWQ7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEludGVybmFsIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIGdldEVudGl0eUlkKGVudGl0eTogVEVudGl0eSk6IFRJZCB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNEYz8uZGF0YVNvdXJjZT8uZ2V0SWQoZW50aXR5KSB8fCBlbnRpdHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFcXVhbChhOiBURW50aXR5LCBiOiBURW50aXR5KTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0VtcHR5KGEpICYmIHRoaXMuaXNFbXB0eShiKSkgeyAvLyBIQUNLOiBIYW5kbGUgZW1wdHkgc3RyaW5nIGFzIHVuZGVmaW5lZC5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlJZChhKSA9PT0gdGhpcy5nZXRFbnRpdHlJZChiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0VtcHR5KGE6IFRFbnRpdHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkIHx8IDxhbnk+YSA9PT0gJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGNsZWFuIHVwIG9mIHRoZSBjdXJyZW50IGRhdGEgY29udGV4dCBpZiBhdXRvIGNsZWFuIHVwIGlzIGVuYWJsZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXV0b0NsZWFuVXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW5VcCAmJiB0aGlzLnN1Z2dlc3Rpb25zRGMpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnUmVsZWFzaW5nIERhdGFDb250ZXh0IHJlc291cmNlcyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrLiBbY2xlYW5VcF09XCJ0cnVlXCInKTtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnNEYy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9wZXJ0eVN0cmluZ1ZhbHVlKHZhbHVlOiBURW50aXR5LCBwcm9wZXJ0eTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuICg8YW55PnZhbHVlKVtwcm9wZXJ0eV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9lbGRlci1zZWxlY3QtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUd2RixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUVyRixPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDM0QsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQU01RCxNQUFNLE9BQU8seUJBQXlCO0lBeUJwQyxZQUNrQixJQUFhLEVBQ2IsT0FBZ0IsRUFDaEIsS0FBYTtRQUZiLFNBQUksR0FBSixJQUFJLENBQVM7UUFDYixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENBQVE7SUFFL0IsQ0FBQztJQTVCTSxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQTBCO1FBQ3RELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixPQUFPLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzVDO2FBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3hCLE9BQU8seUJBQXlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2RDthQUFNO1lBQ0wsT0FBTyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6QztJQUNILENBQUM7SUFHTSxNQUFNLENBQUMsSUFBSTtRQUNoQixPQUFPLElBQUkseUJBQXlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU87UUFDbkIsT0FBTyxJQUFJLHlCQUF5QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYTtRQUMvQixPQUFPLElBQUkseUJBQXlCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBUUY7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBaUMsaUJBQWlCLENBQUMsQ0FBQztBQUd2Rzs7Ozs7Ozs7OztHQVVHO0FBRUgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsZUFBc0MsU0FBUSxzQkFBOEI7SUEwRWhHOzs7O2dGQUk0RTtJQUU1RSxZQUNtQixJQUFZO1FBRTdCLEtBQUssRUFBRSxDQUFDO1FBRlMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQS9FL0I7Ozs7b0ZBSTRFO1FBRTNELFlBQU8sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsbUJBQWMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBSTVDLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRWhDOzs7Ozs7V0FNRztRQUVJLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFTiw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUxSSwrQkFBK0I7UUFDZixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUMsQ0FBQztRQUVsRjs7V0FFRztRQUVJLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFHZCxnQkFBVyxHQUFHLE9BQU8sQ0FBQztRQUd0QixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBd0IxQjs7O1dBR0c7UUFFYSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFN0MsV0FBTSxHQUFHLElBQUksZUFBZSxDQUE0Qix5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBY3hHLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLE1BQU07U0FDWixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNoQixPQUFPLEtBQUssQ0FBQzthQUNkO2lCQUFNO2dCQUNMLE9BQU8seUJBQXlCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNEO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUUsSUFDVyxTQUFTLENBQUMsU0FBa0I7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNXLGVBQWUsQ0FBQyxRQUFnQjtRQUN6QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsSUFDVyx1QkFBdUIsQ0FBQyxRQUF3QjtRQUN6RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUNXLE9BQU8sQ0FBQyxPQUFpQjtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFDVyxVQUFVLENBQUMsTUFBNEI7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQVc7YUFDckQsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUNXLElBQUksQ0FBQyxJQUE0QztRQUUxRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFXO2lCQUNyRCxTQUFTLEVBQUU7aUJBQ1gsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYztZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzthQUMzQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3ZFO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsSUFBVyxhQUFhLENBQUMsSUFBMkI7UUFDbEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFDVyxhQUFhLENBQUMsUUFBMEI7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsZ0JBQWdCLENBQUMsTUFBZTtRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sWUFBWSxDQUFDLGFBQXNCO1FBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxhQUFhLENBQUMsY0FBeUI7UUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLGNBQWMsQ0FBQyxVQUFxQjtRQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTSxXQUFXLENBQUMsS0FBZ0M7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQWlCRDs7OztnRkFJNEU7SUFFbEUsV0FBVyxDQUFDLE1BQWU7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDO0lBQ2pFLENBQUM7SUFFUyxPQUFPLENBQUMsQ0FBVSxFQUFFLENBQVU7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsMENBQTBDO1lBQ2xGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRVMsT0FBTyxDQUFDLENBQVU7UUFDMUIsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ08sV0FBVztRQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1lBQy9GLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRVMsbUJBQW1CLENBQUMsS0FBYyxFQUFFLFFBQWdCO1FBQzVELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQWEsS0FBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO1FBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7NkdBL1FtQixlQUFlO2lHQUFmLGVBQWUseWhCQW1EckIseUJBQXlCLDJCQUFTLFdBQVcsNEVBSTdDLDRCQUE0Qjs0RkF2RHRCLGVBQWU7a0JBRnBDLFNBQVM7NkZBeUJELE9BQU87c0JBRGIsS0FBSztnQkFZQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLO2dCQUlDLE1BQU07c0JBRFosS0FBSztnQkFPQyxrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBS25FLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsNEJBQTRCO2dCQUluQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVFVLGNBQWM7c0JBRDdCLE1BQU07Z0JBdUNJLFNBQVM7c0JBRG5CLEtBQUs7Z0JBYUssZUFBZTtzQkFEekIsS0FBSztnQkFNSyx1QkFBdUI7c0JBRGpDLEtBQUs7Z0JBTUssT0FBTztzQkFEakIsS0FBSztnQkFVSyxVQUFVO3NCQURwQixLQUFLO2dCQVFLLElBQUk7c0JBRGQsS0FBSztnQkE4QkssYUFBYTtzQkFEdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29udGVudENoaWxkLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBOZ1pvbmUsIE91dHB1dCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtRmllbGRCYXNlQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21tb24vZm9ybXMvZm9ybS1maWVsZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7SURhdGFDb250ZXh0fSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0JztcbmltcG9ydCB7SURhdGFTb3VyY2V9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhL2RhdGFzb3VyY2UvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtEYXRhQ29udGV4dEJ1aWxkZXJ9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQtYnVpbGRlcic7XG5pbXBvcnQge0ZpbHRlcn0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEvZmlsdGVyJztcbmltcG9ydCB7U29ydH0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEvc29ydCc7XG5pbXBvcnQge0VsZGVyU2VsZWN0VmFsdWVEaXJlY3RpdmV9IGZyb20gJy4vZWxkZXItc2VsZWN0LXZhbHVlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsUG9wdXBEaXJlY3RpdmV9IGZyb20gJy4vcG9wdXAvc2VsZWN0aW9uLW1vZGVsLXBvcHVwLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0RhdGFDb250ZXh0U3RhdHVzfSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0LXN0YXR1cyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7cnVuSW5ab25lfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMvbmctem9uZS11dGlscyc7XG5pbXBvcnQge0ZpbHRlckNvbnRleHR9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlci1jb250ZXh0JztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5leHBvcnQgdHlwZSBUZXh0UmVzb2x2ZXJGbiA9ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XG5cblxuXG5leHBvcnQgY2xhc3MgRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZSB7XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tRGF0YUNvbnRleHQoZGNTdGF0ZTogRGF0YUNvbnRleHRTdGF0dXMpOiBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlIHtcbiAgICBpZiAoZGNTdGF0ZS5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZS5sb2FkaW5nKCk7XG4gICAgfSBlbHNlIGlmIChkY1N0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm4gRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZS5lcnJvcihkY1N0YXRlLmVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuaWRsZSgpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHVibGljIHN0YXRpYyBpZGxlKCk6IEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUge1xuICAgIHJldHVybiBuZXcgRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZSh0cnVlLCBmYWxzZSwgbnVsbCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGxvYWRpbmcoKTogRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlKGZhbHNlLCB0cnVlLCBudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZXJyb3IoZXJyb3I6IHN0cmluZyk6IEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUge1xuICAgIHJldHVybiBuZXcgRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZShmYWxzZSwgZmFsc2UsIGVycm9yKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBpZGxlOiBib29sZWFuLFxuICAgIHB1YmxpYyByZWFkb25seSBsb2FkaW5nOiBib29sZWFuLFxuICAgIHB1YmxpYyByZWFkb25seSBlcnJvcjogc3RyaW5nXG4gICkge1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFTERFUl9TRUxFQ1RfQkFTRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbGRlclNlbGVjdEJhc2U8YW55LCBhbnksIGFueT4+KCdFbGRlclNlbGVjdEJhc2UnKTtcblxuXG4vKipcbiAqIEJhc2UgY29tcG9uZW50IGZvciBFbGRlciBTZWxlY3Rpb24gQ29udHJvbHMuXG4gKlxuICogIEVsZGVyIFNlbGVjdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBhYnN0cmFjdCBjb25jZXB0OlxuICpcbiAqIC0gU3VnZ2VzdGlvbi1Nb2RlbDogQSBEYXRhU291cmNlIGFuZCBkZXJpdmVkIERhdGFDb250ZXh0IGZvciB0aGUgKGF1dG8tY29tcGxldGUpIHN1Z2dlc3Rpb25zLlxuICpcbiAqIEBwYXJhbSBUSUQgRW50aXR5IElkIFR5cGVcbiAqIEBwYXJhbSBUIEVudGl0eSBUeXBlXG4gKiBAcGFyYW0gVFZhbHVlIFZhbHVlIGJhY2tpbmcgdGhlIGNvbnRyb2wuIENhbiBiZSB0aGUgZW50aXR5LCB0aGUgaWQgb3Igc29tZXRoaW5nIGVsc2UuXG4gKi9cbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWxkZXJTZWxlY3RCYXNlPFRJZCwgVEVudGl0eSwgVFZhbHVlPiBleHRlbmRzIEZvcm1GaWVsZEJhc2VDb21wb25lbnQ8VFZhbHVlPiB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyQ29udGV4dCA9IG5ldyBGaWx0ZXJDb250ZXh0KCk7XG5cbiAgcHJpdmF0ZSBfdmFsdWVBc0lkOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCB0aW1lb3V0QWZ0ZXJNcyA9IDUwMDA7XG5cbiAgLyoqXG4gICAqIERlZmluZSBpZiBlbGRlci1zZWxlY3Qgc2hvdWxkIGNsZWFuIHVwIHRoZVxuICAgKiBkYXRhLWNvbnRleHQgcmVzb3VyY2VzIGZvciB5b3UuXG4gICAqXG4gICAqIEluIG1vcmUgYWR2YW5jZWQgc2NlbmFyaW9zIHdoZXJlIHlvdSBwbGFuIHRvIHJldXNlIHRoZSBzYW1lIGRhdGEtY29udGV4dFxuICAgKiBzZXQgdGhpcyB0byBmYWxzZSBhbmQgcmVsZWFzZSB0aGUgcmVzb3VyY2VzIHlvdXJzZWxmLiAoZGF0YUNvbnRleHQuY2xvc2UpXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgY2xlYW5VcCA9IHRydWU7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dFJlc29sdmVyRm4+KCh2YWx1ZTogVEVudGl0eSkgPT4gdGhpcy5wcm9wZXJ0eVN0cmluZ1ZhbHVlKHZhbHVlLCBudWxsKSk7XG5cbiAgLyoqIFVuZGVybHlpbmcgZGF0YSBjb250ZXh0LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdGlvbnNEYyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElEYXRhQ29udGV4dDxURW50aXR5Pj4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFBhZ2Ugc2l6ZS4gKFVzZWQgZm9yIGluZmluaXRlIHNjcm9sbGluZyBjaHVua3MpXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcGFnZVNpemUgPSAxMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcXVlcnlGaWx0ZXIgPSAncXVlcnknO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzb3J0czogU29ydFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGRlbnNlOiBib29sZWFuIHwgc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub0hpbnQ6IGJvb2xlYW4gfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gdGVtcGxhdGUgdG8gY3VzdG9taXplIHRoZSB1aSBsb29rLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChFbGRlclNlbGVjdFZhbHVlRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyB2YWx1ZVRlbXBsYXRlUXVlcnk6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX3ZhbHVlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChTZWxlY3Rpb25Nb2RlbFBvcHVwRGlyZWN0aXZlKVxuICBwdWJsaWMgc2VsZWN0aW9uUG9wdXA6IFNlbGVjdGlvbk1vZGVsUG9wdXBEaXJlY3RpdmU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGlzT3B0aW9uRGlzYWJsZWRGbjogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXNPcHRpb25IaWRkZW5GbjogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgdXNlciBoYXMgY2xpY2tlZCBvbiB0aGUgY3VycmVudFxuICAgKiBzZWxlY3RlZCBlbnRpdHkuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxURW50aXR5PigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGU+KEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuaWRsZSgpKTtcbiAgcHVibGljIHJlYWRvbmx5IG1lcmdlZFN0YXRlJDogT2JzZXJ2YWJsZTxFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlPjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLm1lcmdlZFN0YXRlJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdWdnZXN0aW9uc0RjJC5waXBlKGZpbHRlcihkYyA9PiAhIWRjKSwgc3dpdGNoTWFwKGRjID0+IGRjLnN0YXR1cykpLFxuICAgICAgdGhpcy5zdGF0ZSRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbZGNTdGF0ZSwgc3RhdGVdKSA9PiB7XG4gICAgICAgIGlmIChkY1N0YXRlLmlkbGUpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZnJvbURhdGFDb250ZXh0KGRjU3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHJ1bkluWm9uZSh0aGlzLnpvbmUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmFsdWVBc0lkKHZhbHVlQXNJZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZhbHVlQXNJZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZUFzSWQpO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZUFzSWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlQXNJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgdXNlZCB0byBkaXNwbGF5IHRoZSB2YWx1ZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5kaXNwbGF5UHJvcGVydHlSZXNvbHZlciA9ICh2YWx1ZSA9PiB0aGlzLnByb3BlcnR5U3RyaW5nVmFsdWUodmFsdWUsIHByb3BlcnR5KSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyKHJlc29sdmVyOiBUZXh0UmVzb2x2ZXJGbikge1xuICAgIHRoaXMuZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkLm5leHQocmVzb2x2ZXIpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmaWx0ZXJzKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgdGhpcy5yZXBsYWNlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVycygpOiBGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNvbnRleHQuZmlsdGVyc1NuYXBzaG90O1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHNvdXJjZTogSURhdGFTb3VyY2U8VEVudGl0eT4pIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGMgPSBEYXRhQ29udGV4dEJ1aWxkZXIuc3RhcnQ8VEVudGl0eT4oKVxuICAgICAgLnBhZ2VTaXplKHRoaXMucGFnZVNpemUpXG4gICAgICAuYnVpbGQoc291cmNlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBBcnJheTxURW50aXR5PiB8IElEYXRhQ29udGV4dDxURW50aXR5Pikge1xuXG4gICAgdGhpcy5hdXRvQ2xlYW5VcCgpO1xuXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgdGhpcy5zdWdnZXN0aW9uc0RjID0gRGF0YUNvbnRleHRCdWlsZGVyLnN0YXJ0PFRFbnRpdHk+KClcbiAgICAgICAgLmxvY2FsU29ydCgpXG4gICAgICAgIC5idWlsZExvY2FsKGRhdGEpOyAvLyBNZW1vcnkgbGVha1xuICAgICAgdGhpcy5zdWdnZXN0aW9uc0RjLnN0YXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNEYyA9IGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zRGMgPSBEYXRhQ29udGV4dEJ1aWxkZXIuc3RhcnQ8VEVudGl0eT4oKS5idWlsZEVtcHR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldCBzdWdnZXN0aW9uc0RjKGRhdGE6IElEYXRhQ29udGV4dDxURW50aXR5Pikge1xuICAgIHRoaXMuYXV0b0NsZWFuVXAoKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGMkLm5leHQoZGF0YSk7XG4gICAgdGhpcy5vblN1Z2dlc3Rpb25zRGNDaGFuZ2VkKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdWdnZXN0aW9uc0RjKCk6IElEYXRhQ29udGV4dDxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNEYyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmFsdWVUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX3ZhbHVlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWVUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVUZW1wbGF0ZSB8fCB0aGlzLnZhbHVlVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBvbkN1cnJlbnRDbGlja2VkKGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudENsaWNrZWQuZW1pdChlbnRpdHkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZpbHRlcih1cGRhdGVkRmlsdGVyPzogRmlsdGVyKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyQ29udGV4dC51cGRhdGVGaWx0ZXIodXBkYXRlZEZpbHRlcik7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmlsdGVycyh1cGRhdGVkRmlsdGVycz86IEZpbHRlcltdKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyQ29udGV4dC51cGRhdGVGaWx0ZXJzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlRmlsdGVycyhuZXdGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICB0aGlzLl9maWx0ZXJDb250ZXh0LnJlcGxhY2VGaWx0ZXJzKG5ld0ZpbHRlcnMpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJDb250ZXh0LmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RhdGUoc3RhdGU6IEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBBYnN0cmFjdCBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgc3VnZ2VzdGlvbnMgZGF0YS1jb250ZXh0IGhhcyBjaGFuZ2VkXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25TdWdnZXN0aW9uc0RjQ2hhbmdlZChkYXRhOiBJRGF0YUNvbnRleHQ8VEVudGl0eT4pOiB2b2lkO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBmb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZDtcblxuICBwdWJsaWMgYWJzdHJhY3QgYmx1cigpOiB2b2lkO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBJbnRlcm5hbCBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCBnZXRFbnRpdHlJZChlbnRpdHk6IFRFbnRpdHkpOiBUSWQge1xuICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25zRGM/LmRhdGFTb3VyY2U/LmdldElkKGVudGl0eSkgfHwgZW50aXR5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRXF1YWwoYTogVEVudGl0eSwgYjogVEVudGl0eSk6IGJvb2xlYW4ge1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNFbXB0eShhKSAmJiB0aGlzLmlzRW1wdHkoYikpIHsgLy8gSEFDSzogSGFuZGxlIGVtcHR5IHN0cmluZyBhcyB1bmRlZmluZWQuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5SWQoYSkgPT09IHRoaXMuZ2V0RW50aXR5SWQoYik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFbXB0eShhOiBURW50aXR5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZCB8fCA8YW55PmEgPT09ICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBjbGVhbiB1cCBvZiB0aGUgY3VycmVudCBkYXRhIGNvbnRleHQgaWYgYXV0byBjbGVhbiB1cCBpcyBlbmFibGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGF1dG9DbGVhblVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsZWFuVXAgJiYgdGhpcy5zdWdnZXN0aW9uc0RjKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ1JlbGVhc2luZyBEYXRhQ29udGV4dCByZXNvdXJjZXMgdG8gcHJldmVudCBtZW1vcnkgbGVhay4gW2NsZWFuVXBdPVwidHJ1ZVwiJyk7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zRGMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvcGVydHlTdHJpbmdWYWx1ZSh2YWx1ZTogVEVudGl0eSwgcHJvcGVydHk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiAoPGFueT52YWx1ZSlbcHJvcGVydHldO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59XG4iXX0=
@@ -121,6 +121,12 @@ export class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
121
121
  this.appendEntity(selectedValue);
122
122
  }
123
123
  }
124
+ focus(options) {
125
+ this.inputControl?.nativeElement?.focus(options);
126
+ }
127
+ blur() {
128
+ this.inputControl?.nativeElement?.blur();
129
+ }
124
130
  /***************************************************************************
125
131
  * *
126
132
  * Private methods *
@@ -161,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImpo
161
167
  }], chipColorResolver: [{
162
168
  type: Input
163
169
  }] } });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L211bHRpL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvbXVsdGkvZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFVLHVCQUF1QixFQUFVLFNBQVMsRUFBYyxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRyxNQUFNLFVBQVU7SUFDZCxZQUNrQixLQUFRLEVBQ1IsV0FBbUIsRUFDbkIsS0FBbUIsRUFDbkIsVUFBbUI7UUFIbkIsVUFBSyxHQUFMLEtBQUssQ0FBRztRQUNS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ZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBOZ1pvbmUsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtFbGRlck11bHRpU2VsZWN0QmFzZX0gZnJvbSAnLi4vZWxkZXItbXVsdGktc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlL2NvbW1vbi1iZWhhdmlvcnMvY29sb3InO1xuaW1wb3J0IHtUZXh0UmVzb2x2ZXJGbn0gZnJvbSAnLi4vLi4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0VsZGVyU2VsZWN0Q2hpcERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZWxkZXItc2VsZWN0LWNoaXAuZGlyZWN0aXZlJztcbmltcG9ydCB7YnVpbGRGb3JtSW50ZWdyYXRpb25Qcm92aWRlcnN9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9mb3Jtcy90ZW1wbGF0ZS1jb21wb3NpdGUtY29udHJvbCc7XG5cbmNsYXNzIFNlbGVjdENoaXA8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IFQsXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbG9yOiBUaGVtZVBhbGV0dGUsXG4gICAgcHVibGljIHJlYWRvbmx5IHJlbW92ZWFibGU6IGJvb2xlYW5cbiAgKSB7XG4gIH1cbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IGJ1aWxkRm9ybUludGVncmF0aW9uUHJvdmlkZXJzKEVsZGVyTXVsdGlTZWxlY3RDaGlwc0NvbXBvbmVudClcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJNdWx0aVNlbGVjdENoaXBzQ29tcG9uZW50PFRJZCA9IGFueSwgVEVudGl0eSA9IGFueSwgVFZhbHVlID0gYW55PlxuICBleHRlbmRzIEVsZGVyTXVsdGlTZWxlY3RCYXNlPFRJZCwgVEVudGl0eSwgVFZhbHVlPlxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RDaGlwcyQ6IE9ic2VydmFibGU8U2VsZWN0Q2hpcDxURW50aXR5PltdPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNoaXBDb2xvclJlc29sdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KG8xOiBhbnkpID0+IFRoZW1lUGFsZXR0ZT4oKHZhbHVlOiBURW50aXR5KSA9PiB1bmRlZmluZWQpO1xuXG5cbiAgcHVibGljIHNlbGVjdGFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd1JlbW92ZSA9IHRydWU7XG5cblxuICBAVmlld0NoaWxkKCdjaGlwSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0pXG4gIHByaXZhdGUgaW5wdXRDb250cm9sOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoRWxkZXJTZWxlY3RDaGlwRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyBjaGlwVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfY2hpcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgem9uZTogTmdab25lXG4gICkge1xuICAgIHN1cGVyKHpvbmUpO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnLi4uJztcbiAgICB0aGlzLnNlbGVjdENoaXBzJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMuZW50aXRpZXMkLFxuICAgICAgICB0aGlzLmRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCxcbiAgICAgICAgdGhpcy5jaGlwQ29sb3JSZXNvbHZlciRcbiAgICAgIF1cbiAgICApLnBpcGUoXG4gICAgICBtYXAoKFt2YWx1ZXMsIGRQUiwgY0NSXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoXG4gICAgICAgICAgICB2ID0+IG5ldyBTZWxlY3RDaGlwPFRFbnRpdHk+KFxuICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICBkUFIodiksXG4gICAgICAgICAgICAgIGNDUih2KSxcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd1JlbW92ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDxTZWxlY3RDaGlwPFRFbnRpdHk+W10+W107XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY2hpcFRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fY2hpcFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoaXBUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hpcFRlbXBsYXRlIHx8IHRoaXMuY2hpcFRlbXBsYXRlUXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBjb2xvciBvZiBhIGdpdmVuIGxhYmVsIG9iamVjdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY2hpcENvbG9yUmVzb2x2ZXIoZm46IChvMTogYW55KSA9PiBUaGVtZVBhbGV0dGUpIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaXBDb2xvclJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbiEnKTtcbiAgICB9XG4gICAgdGhpcy5jaGlwQ29sb3JSZXNvbHZlciQubmV4dChmbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3B0aW9uRGlzYWJsZWRJbnRlcm5hbEZuKCk6IChvcHRpb246IFRFbnRpdHkpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAob3B0aW9uOiBURW50aXR5KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc09wdGlvbkRpc2FibGVkRm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25EaXNhYmxlZEZuKG9wdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuKCk6IChvcHRpb246IFRFbnRpdHkpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAob3B0aW9uOiBURW50aXR5KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0FscmVhZHlQcmVzZW50KG9wdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc09wdGlvbkhpZGRlbkZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3B0aW9uSGlkZGVuRm4ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG9uT3B0aW9uU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZTogVEVudGl0eSk6IHZvaWQge1xuICAgIGlmIChzZWxlY3RlZFZhbHVlKSB7XG4gICAgICB0aGlzLnJlc2V0SW5wdXQoKTtcbiAgICAgIHRoaXMuYXBwZW5kRW50aXR5KHNlbGVjdGVkVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgaXNBbHJlYWR5UHJlc2VudChxdWVyeVZhbHVlOiBURW50aXR5KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZW50aXRpZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzLnNvbWUodiA9PiB0aGlzLmlzRXF1YWwodiwgcXVlcnlWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldElucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29udHJvbCkge1xuICAgICAgdGhpcy5pbnB1dENvbnRyb2wubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignRmFpbGVkIHRvIHJlc2V0IGlucHV0Q29udHJvbCBzaW5jZSBpdCB3YXMgbm90IGZvdW5kIScpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIoc2VsZWN0Q2hpcHMkIHwgYXN5bmMpIGFzIGNoaXBWYWx1ZXNcIiBmeEZsZXhcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLXN0ZC1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgIFtlbGRlckRlbnNlXT1cImRlbnNlXCJcbiAgICAgICAgICAgICAgICBbZWxkZXJOb0hpbnRdPVwibm9IaW50XCJcbj5cblxuICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cblxuXG4gIDxuZy1jb250YWluZXIgbWF0UHJlZml4ICpuZ0lmPVwiKG1lcmdlZFN0YXRlJCB8IGFzeW5jKSBhcyBzdGF0ZVwiPlxuXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIGRpc2FibGVkXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmxvYWRpbmddPVwic3RhdGUubG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJzdGF0ZT8uZXJyb3IgPyAnd2FybicgOiBjb2xvclwiPlxuICAgICAge3tpY29ufX1cbiAgICA8L21hdC1pY29uPlxuXG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIhaWNvbiAmJiBzdGF0ZT8uZXJyb3JcIlxuICAgICAgICAgICAgICBjbGFzcz1cImxlYWRpbmctaWNvbiBwcmVmaXgtcGFkZGluZyBub3NlbGVjdFwiXG4gICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiPlxuICAgICAgd2FybmluZ1xuICAgIDwvbWF0LWljb24+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQSBkeW5hbWljIGlucHV0IC0tPlxuXG4gIDxtYXQtY2hpcC1saXN0IHNlbGVjdGFibGUgI2NoaXBzPlxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgY2hpcE1vZGVsIG9mIGNoaXBWYWx1ZXNcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm5vc2VsZWN0IGNsaWNrYWJsZS1jaGlwXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImNoaXBNb2RlbC5jb2xvclwiIHNlbGVjdGFibGUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJjaGlwTW9kZWwucmVtb3ZlYWJsZVwiXG4gICAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZUVudGl0eShjaGlwTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ3VycmVudENsaWNrZWQoY2hpcE1vZGVsLnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNoaXBUZW1wbGF0ZSB8fCBzaW1wbGVDaGlwVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNoaXBNb2RlbH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmUgKm5nSWY9XCJjaGlwTW9kZWwucmVtb3ZlYWJsZVwiPmNhbmNlbDwvbWF0LWljb24+XG4gICAgPC9tYXQtY2hpcD5cblxuICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLW11bHRpLWNoaXBzLWlubmVyLWlucHV0J1wiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcHNcIlxuICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXVxuICAgICAgICAgICBbZWxkZXJFbGRlckF1dG9jb21wbGV0ZV09XCJlbGRlckF1dG9cIiBbcXVlcnlGaWx0ZXJdPVwicXVlcnlGaWx0ZXJcIiBbZmlsdGVyc109XCJmaWx0ZXJzXCIgW3NvcnRzXT1cInNvcnRzXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgI2NoaXBJbnB1dD5cblxuICA8L21hdC1jaGlwLWxpc3Q+XG5cbiAgPGVsZGVyLWF1dG9jb21wbGV0ZVxuICAgICNlbGRlckF1dG89XCJlbGRlckF1dG9jb21wbGV0ZVwiXG4gICAgW3N1Z2dlc3Rpb25zRGNdPVwic3VnZ2VzdGlvbnNEYyQgfCBhc3luY1wiXG4gICAgW3ZhbHVlVGVtcGxhdGVdPVwidmFsdWVUZW1wbGF0ZVwiXG4gICAgW2Rpc3BsYXlQcm9wZXJ0eVJlc29sdmVyXT1cImRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCB8IGFzeW5jXCJcbiAgICBbaXNPcHRpb25EaXNhYmxlZEZuXT1cImlzT3B0aW9uRGlzYWJsZWRJbnRlcm5hbEZuXCJcbiAgICBbaXNPcHRpb25IaWRkZW5Gbl09XCJpc09wdGlvbkhpZGRlbkludGVybmFsRm5cIlxuICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbk9wdGlvblNlbGVjdGVkKCRhbnkoJGV2ZW50KSlcIlxuICA+PC9lbGRlci1hdXRvY29tcGxldGU+XG5cbiAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uUG9wdXBcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Qb3B1cCgkZXZlbnQpXCIgYXJpYS1sYWJlbD1cIlNlYXJjaFwiXG4gICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgIHRhYkluZGV4PVwiLTFcIlxuICA+XG4gICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG5cbiAgPG1hdC1oaW50ICpuZ0lmPVwiaGludFwiPnt7aGludCB8IHRyYW5zbGF0ZX19PC9tYXQtaGludD5cblxuPC9tYXQtZm9ybS1maWVsZD5cblxuXG48bmctdGVtcGxhdGUgI3NpbXBsZUNoaXBUZW1wbGF0ZSBsZXQtY2hpcE1vZGVsPlxuICB7e2NoaXBNb2RlbC5kaXNwbGF5VGV4dCB8IGVsZGVyVHJpbToyMH19XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L211bHRpL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvbXVsdGkvZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFVLHVCQUF1QixFQUFVLFNBQVMsRUFBYyxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRyxNQUFNLFVBQVU7SUFDZCxZQUNrQixLQUFRLEVBQ1IsV0FBbUIsRUFDbkIsS0FBbUIsRUFDbkIsVUFBbUI7UUFIbkIsVUFBSyxHQUFMLEtBQUssQ0FBRztRQUNS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QU0sRUFBRSxLQUFLLEVBQUM7Z0JBSWhDLGlCQUFpQjtzQkFEdkIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQztnQkF3RDlELFlBQVk7c0JBRHRCLEtBQUs7Z0JBYUssaUJBQWlCO3NCQUQzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE5nWm9uZSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBJbnB1dCwgQ29udGVudENoaWxkLCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0VsZGVyTXVsdGlTZWxlY3RCYXNlfSBmcm9tICcuLi9lbGRlci1tdWx0aS1zZWxlY3QtYmFzZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUvY29tbW9uLWJlaGF2aW9ycy9jb2xvcic7XG5pbXBvcnQge1RleHRSZXNvbHZlckZufSBmcm9tICcuLi8uLi9lbGRlci1zZWxlY3QtYmFzZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7RWxkZXJTZWxlY3RDaGlwRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9lbGRlci1zZWxlY3QtY2hpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtidWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVyc30gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2Zvcm1zL3RlbXBsYXRlLWNvbXBvc2l0ZS1jb250cm9sJztcblxuY2xhc3MgU2VsZWN0Q2hpcDxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogVCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29sb3I6IFRoZW1lUGFsZXR0ZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVtb3ZlYWJsZTogYm9vbGVhblxuICApIHtcbiAgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogYnVpbGRGb3JtSW50ZWdyYXRpb25Qcm92aWRlcnMoRWxkZXJNdWx0aVNlbGVjdENoaXBzQ29tcG9uZW50KVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlck11bHRpU2VsZWN0Q2hpcHNDb21wb25lbnQ8VElkID0gYW55LCBURW50aXR5ID0gYW55LCBUVmFsdWUgPSBhbnk+XG4gIGV4dGVuZHMgRWxkZXJNdWx0aVNlbGVjdEJhc2U8VElkLCBURW50aXR5LCBUVmFsdWU+XG4gIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdENoaXBzJDogT2JzZXJ2YWJsZTxTZWxlY3RDaGlwPFRFbnRpdHk+W10+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpcENvbG9yUmVzb2x2ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDwobzE6IGFueSkgPT4gVGhlbWVQYWxldHRlPigodmFsdWU6IFRFbnRpdHkpID0+IHVuZGVmaW5lZCk7XG5cblxuICBwdWJsaWMgc2VsZWN0YWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGFsbG93UmVtb3ZlID0gdHJ1ZTtcblxuXG4gIEBWaWV3Q2hpbGQoJ2NoaXBJbnB1dCcsIHtzdGF0aWM6IGZhbHNlfSlcbiAgcHJpdmF0ZSBpbnB1dENvbnRyb2w6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgQENvbnRlbnRDaGlsZChFbGRlclNlbGVjdENoaXBEaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlfSlcbiAgcHVibGljIGNoaXBUZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9jaGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgc3VwZXIoem9uZSk7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9ICcuLi4nO1xuICAgIHRoaXMuc2VsZWN0Q2hpcHMkID0gY29tYmluZUxhdGVzdChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5lbnRpdGllcyQsXG4gICAgICAgIHRoaXMuZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkLFxuICAgICAgICB0aGlzLmNoaXBDb2xvclJlc29sdmVyJFxuICAgICAgXVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlcywgZFBSLCBjQ1JdKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChcbiAgICAgICAgICAgIHYgPT4gbmV3IFNlbGVjdENoaXA8VEVudGl0eT4oXG4gICAgICAgICAgICAgIHYsXG4gICAgICAgICAgICAgIGRQUih2KSxcbiAgICAgICAgICAgICAgY0NSKHYpLFxuICAgICAgICAgICAgICB0aGlzLmFsbG93UmVtb3ZlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gPFNlbGVjdENoaXA8VEVudGl0eT5bXT5bXTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl9jaGlwVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hpcFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlwVGVtcGxhdGUgfHwgdGhpcy5jaGlwVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGNvbG9yIG9mIGEgZ2l2ZW4gbGFiZWwgb2JqZWN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwQ29sb3JSZXNvbHZlcihmbjogKG8xOiBhbnkpID0+IFRoZW1lUGFsZXR0ZSkge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2hpcENvbG9yUmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIScpO1xuICAgIH1cbiAgICB0aGlzLmNoaXBDb2xvclJlc29sdmVyJC5uZXh0KGZuKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbikge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09wdGlvbkRpc2FibGVkRm4ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbkhpZGRlbkludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQWxyZWFkeVByZXNlbnQob3B0aW9uKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uSGlkZGVuRm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25IaWRkZW5GbihvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChzZWxlY3RlZFZhbHVlOiBURW50aXR5KTogdm9pZCB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMucmVzZXRJbnB1dCgpO1xuICAgICAgdGhpcy5hcHBlbmRFbnRpdHkoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpe1xuICAgIHRoaXMuaW5wdXRDb250cm9sPy5uYXRpdmVFbGVtZW50Py5mb2N1cyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBibHVyKCl7XG4gICAgdGhpcy5pbnB1dENvbnRyb2w/Lm5hdGl2ZUVsZW1lbnQ/LmJsdXIoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgaXNBbHJlYWR5UHJlc2VudChxdWVyeVZhbHVlOiBURW50aXR5KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZW50aXRpZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzLnNvbWUodiA9PiB0aGlzLmlzRXF1YWwodiwgcXVlcnlWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldElucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29udHJvbCkge1xuICAgICAgdGhpcy5pbnB1dENvbnRyb2wubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignRmFpbGVkIHRvIHJlc2V0IGlucHV0Q29udHJvbCBzaW5jZSBpdCB3YXMgbm90IGZvdW5kIScpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIoc2VsZWN0Q2hpcHMkIHwgYXN5bmMpIGFzIGNoaXBWYWx1ZXNcIiBmeEZsZXhcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLXN0ZC1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgIFtlbGRlckRlbnNlXT1cImRlbnNlXCJcbiAgICAgICAgICAgICAgICBbZWxkZXJOb0hpbnRdPVwibm9IaW50XCJcbj5cblxuICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cblxuXG4gIDxuZy1jb250YWluZXIgbWF0UHJlZml4ICpuZ0lmPVwiKG1lcmdlZFN0YXRlJCB8IGFzeW5jKSBhcyBzdGF0ZVwiPlxuXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIGRpc2FibGVkXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmxvYWRpbmddPVwic3RhdGUubG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJzdGF0ZT8uZXJyb3IgPyAnd2FybicgOiBjb2xvclwiPlxuICAgICAge3tpY29ufX1cbiAgICA8L21hdC1pY29uPlxuXG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIhaWNvbiAmJiBzdGF0ZT8uZXJyb3JcIlxuICAgICAgICAgICAgICBjbGFzcz1cImxlYWRpbmctaWNvbiBwcmVmaXgtcGFkZGluZyBub3NlbGVjdFwiXG4gICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiPlxuICAgICAgd2FybmluZ1xuICAgIDwvbWF0LWljb24+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQSBkeW5hbWljIGlucHV0IC0tPlxuXG4gIDxtYXQtY2hpcC1saXN0IHNlbGVjdGFibGUgI2NoaXBzPlxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgY2hpcE1vZGVsIG9mIGNoaXBWYWx1ZXNcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm5vc2VsZWN0IGNsaWNrYWJsZS1jaGlwXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImNoaXBNb2RlbC5jb2xvclwiIHNlbGVjdGFibGUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJjaGlwTW9kZWwucmVtb3ZlYWJsZVwiXG4gICAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZUVudGl0eShjaGlwTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ3VycmVudENsaWNrZWQoY2hpcE1vZGVsLnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNoaXBUZW1wbGF0ZSB8fCBzaW1wbGVDaGlwVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNoaXBNb2RlbH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmUgKm5nSWY9XCJjaGlwTW9kZWwucmVtb3ZlYWJsZVwiPmNhbmNlbDwvbWF0LWljb24+XG4gICAgPC9tYXQtY2hpcD5cblxuICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLW11bHRpLWNoaXBzLWlubmVyLWlucHV0J1wiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcHNcIlxuICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXVxuICAgICAgICAgICBbZWxkZXJFbGRlckF1dG9jb21wbGV0ZV09XCJlbGRlckF1dG9cIiBbcXVlcnlGaWx0ZXJdPVwicXVlcnlGaWx0ZXJcIiBbZmlsdGVyc109XCJmaWx0ZXJzXCIgW3NvcnRzXT1cInNvcnRzXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgI2NoaXBJbnB1dD5cblxuICA8L21hdC1jaGlwLWxpc3Q+XG5cbiAgPGVsZGVyLWF1dG9jb21wbGV0ZVxuICAgICNlbGRlckF1dG89XCJlbGRlckF1dG9jb21wbGV0ZVwiXG4gICAgW3N1Z2dlc3Rpb25zRGNdPVwic3VnZ2VzdGlvbnNEYyQgfCBhc3luY1wiXG4gICAgW3ZhbHVlVGVtcGxhdGVdPVwidmFsdWVUZW1wbGF0ZVwiXG4gICAgW2Rpc3BsYXlQcm9wZXJ0eVJlc29sdmVyXT1cImRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCB8IGFzeW5jXCJcbiAgICBbaXNPcHRpb25EaXNhYmxlZEZuXT1cImlzT3B0aW9uRGlzYWJsZWRJbnRlcm5hbEZuXCJcbiAgICBbaXNPcHRpb25IaWRkZW5Gbl09XCJpc09wdGlvbkhpZGRlbkludGVybmFsRm5cIlxuICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbk9wdGlvblNlbGVjdGVkKCRhbnkoJGV2ZW50KSlcIlxuICA+PC9lbGRlci1hdXRvY29tcGxldGU+XG5cbiAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uUG9wdXBcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Qb3B1cCgkZXZlbnQpXCIgYXJpYS1sYWJlbD1cIlNlYXJjaFwiXG4gICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgIHRhYkluZGV4PVwiLTFcIlxuICA+XG4gICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG5cbiAgPG1hdC1oaW50ICpuZ0lmPVwiaGludFwiPnt7aGludCB8IHRyYW5zbGF0ZX19PC9tYXQtaGludD5cblxuPC9tYXQtZm9ybS1maWVsZD5cblxuXG48bmctdGVtcGxhdGUgI3NpbXBsZUNoaXBUZW1wbGF0ZSBsZXQtY2hpcE1vZGVsPlxuICB7e2NoaXBNb2RlbC5kaXNwbGF5VGV4dCB8IGVsZGVyVHJpbToyMH19XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=