@c8y/ngx-components 1017.0.7 → 1017.0.8

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.
@@ -13,6 +13,7 @@ export declare class PackagesListComponent implements OnDestroy {
13
13
  packages$: Observable<IApplication>;
14
14
  listClass: string;
15
15
  hasAdminPermissions: boolean;
16
+ emptyStateSubtitle: any;
16
17
  private destroy$;
17
18
  constructor(ecosystemService: EcosystemService, wizardModalService: WizardModalService, permissions: Permissions);
18
19
  ngOnInit(): void;
@@ -67,9 +67,10 @@ export class WidgetConfigComponent {
67
67
  }
68
68
  }
69
69
  checkIfDeviceRequired() {
70
- return (!this.widgetConfig.settings.deviceTargetNotRequired &&
71
- !this.widgetConfig.device &&
72
- !this.widgetConfig.settings.noDeviceTarget);
70
+ return (!this.widgetConfig ||
71
+ (!this.widgetConfig.settings.deviceTargetNotRequired &&
72
+ !this.widgetConfig.device &&
73
+ !this.widgetConfig.settings.noDeviceTarget));
73
74
  }
74
75
  selectionChanged(selection) {
75
76
  this.widgetConfig.device = selection.change.item;
@@ -223,12 +224,12 @@ export class WidgetConfigComponent {
223
224
  }
224
225
  }
225
226
  WidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetConfigComponent, deps: [{ token: i1.WidgetService }, { token: i2.BsModalRef }, { token: i3.InventoryService }, { token: i4.ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component });
226
- WidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header separator\">\n <h3 id=\"mdoal-title\" title=\"{{ 'Add widget' | translate }}\" *ngIf=\"!current\" translate>Add widget</h3>\n <h3 id=\"modal-title\" title=\"{{ 'Edit widget' | translate }}\" *ngIf=\"current\" translate>Edit widget</h3>\n</div>\n<form #configForm=\"ngForm\" name=\"form\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n class=\"btn\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll\">\n <div\n *ngIf=\"mode === 'select'\"\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n [attr.aria-label]=\"'Search' | translate\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n *ngFor=\"let cmp of searchResult || components\"\n title=\"{{ cmp.description | translate }}\"\n >\n <div class=\"card p-8\" [class.active]=\"selected === cmp\" (click)=\"select(cmp)\">\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"none\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <h1><i c8yIcon=\"file-image-o\"></i></h1>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt=\"\" [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </div>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <h1 c8yIcon=\"search\"></h1>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p translate class=\"m-r-8\">Rephrase your search term.</p>\n <button\n title=\"{{ 'Reset search' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div *ngIf=\"selected\" [hidden]=\"mode !== 'config'\" style=\"max-height: calc(100vh - 290px)\">\n <div class=\"p-t-16 flex-no-grow\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <h4 class=\"text-left text-medium\">\n {{ selected.label | translate }}\n </h4>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n id=\"widgetTitle\"\n [(ngModel)]=\"selected.data.title\"\n type=\"text\"\n name=\"title\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow separator-top\"\n [ngClass]=\"{ 'd-flex m-l-0': widgetConfig.options || hasConfig() }\"\n >\n <div\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n class=\"a-i-stretch\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-l-0 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n style=\"height: 360px\"\n >\n <div class=\"p-l-16 fit-h bg-inherit\" [ngClass]=\"{ 'p-r-16': !hasConfig() }\">\n <c8y-asset-selector-miller\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n class=\"bg-inherit p-relative\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12 p-l-32 p-r-8': widgetConfig.settings?.noDeviceTarget\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block p-t-8 p-r-24\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"mode === 'style'\" class=\"modal-body p-t-0\" style=\"min-height: calc(100vh - 290px)\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview [previewClasses]=\"getStyle(true)\"></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i5.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i5.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected"] }, { kind: "component", type: i9.AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: i10.WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
227
+ WidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header separator\">\n <div id=\"modal-title\" class=\"h3\" title=\"{{ 'Add widget' | translate }}\" *ngIf=\"!current\" translate>Add widget</div>\n <div id=\"modal-title\" class=\"h3\" title=\"{{ 'Edit widget' | translate }}\" *ngIf=\"current\" translate>Edit widget</div>\n</div>\n<form #configForm=\"ngForm\" name=\"form\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n class=\"btn\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll\">\n <div\n *ngIf=\"mode === 'select'\"\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n [attr.aria-label]=\"'Search' | translate\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n *ngFor=\"let cmp of searchResult || components\"\n title=\"{{ cmp.description | translate }}\"\n >\n <div class=\"card p-8\" [class.active]=\"selected === cmp\" (click)=\"select(cmp)\">\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"none\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt=\"\" [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </div>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <div class=\"h1\" c8yIcon=\"search\"></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p translate class=\"m-r-8\">Rephrase your search term.</p>\n <button\n title=\"{{ 'Reset search' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div *ngIf=\"selected\" [hidden]=\"mode !== 'config'\" style=\"max-height: calc(100vh - 290px)\">\n <div class=\"p-t-16 flex-no-grow\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <h4 class=\"text-left text-medium\">\n {{ selected.label | translate }}\n </h4>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n id=\"widgetTitle\"\n [(ngModel)]=\"selected.data.title\"\n type=\"text\"\n name=\"title\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow separator-top\"\n [ngClass]=\"{ 'd-flex m-l-0': widgetConfig.options || hasConfig() }\"\n >\n <div\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n class=\"a-i-stretch\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-l-0 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n style=\"height: 360px\"\n >\n <div class=\"p-l-16 fit-h bg-inherit\" [ngClass]=\"{ 'p-r-16': !hasConfig() }\">\n <c8y-asset-selector-miller\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n class=\"bg-inherit p-relative\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12 p-l-32 p-r-8': widgetConfig.settings?.noDeviceTarget\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block p-t-8 p-r-24\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"mode === 'style'\" class=\"modal-body p-t-0\" style=\"min-height: calc(100vh - 290px)\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview [previewClasses]=\"getStyle(true)\"></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i5.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i5.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected"] }, { kind: "component", type: i9.AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: i10.WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
227
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetConfigComponent, decorators: [{
228
229
  type: Component,
229
- args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <h3 id=\"mdoal-title\" title=\"{{ 'Add widget' | translate }}\" *ngIf=\"!current\" translate>Add widget</h3>\n <h3 id=\"modal-title\" title=\"{{ 'Edit widget' | translate }}\" *ngIf=\"current\" translate>Edit widget</h3>\n</div>\n<form #configForm=\"ngForm\" name=\"form\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n class=\"btn\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll\">\n <div\n *ngIf=\"mode === 'select'\"\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n [attr.aria-label]=\"'Search' | translate\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n *ngFor=\"let cmp of searchResult || components\"\n title=\"{{ cmp.description | translate }}\"\n >\n <div class=\"card p-8\" [class.active]=\"selected === cmp\" (click)=\"select(cmp)\">\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"none\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <h1><i c8yIcon=\"file-image-o\"></i></h1>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt=\"\" [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </div>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <h1 c8yIcon=\"search\"></h1>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p translate class=\"m-r-8\">Rephrase your search term.</p>\n <button\n title=\"{{ 'Reset search' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div *ngIf=\"selected\" [hidden]=\"mode !== 'config'\" style=\"max-height: calc(100vh - 290px)\">\n <div class=\"p-t-16 flex-no-grow\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <h4 class=\"text-left text-medium\">\n {{ selected.label | translate }}\n </h4>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n id=\"widgetTitle\"\n [(ngModel)]=\"selected.data.title\"\n type=\"text\"\n name=\"title\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow separator-top\"\n [ngClass]=\"{ 'd-flex m-l-0': widgetConfig.options || hasConfig() }\"\n >\n <div\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n class=\"a-i-stretch\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-l-0 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n style=\"height: 360px\"\n >\n <div class=\"p-l-16 fit-h bg-inherit\" [ngClass]=\"{ 'p-r-16': !hasConfig() }\">\n <c8y-asset-selector-miller\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n class=\"bg-inherit p-relative\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12 p-l-32 p-r-8': widgetConfig.settings?.noDeviceTarget\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block p-t-8 p-r-24\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"mode === 'style'\" class=\"modal-body p-t-0\" style=\"min-height: calc(100vh - 290px)\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview [previewClasses]=\"getStyle(true)\"></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
230
+ args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <div id=\"modal-title\" class=\"h3\" title=\"{{ 'Add widget' | translate }}\" *ngIf=\"!current\" translate>Add widget</div>\n <div id=\"modal-title\" class=\"h3\" title=\"{{ 'Edit widget' | translate }}\" *ngIf=\"current\" translate>Edit widget</div>\n</div>\n<form #configForm=\"ngForm\" name=\"form\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n class=\"btn\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n class=\"btn\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll\">\n <div\n *ngIf=\"mode === 'select'\"\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n [attr.aria-label]=\"'Search' | translate\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n *ngFor=\"let cmp of searchResult || components\"\n title=\"{{ cmp.description | translate }}\"\n >\n <div class=\"card p-8\" [class.active]=\"selected === cmp\" (click)=\"select(cmp)\">\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"none\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt=\"\" [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </div>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <div class=\"h1\" c8yIcon=\"search\"></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p translate class=\"m-r-8\">Rephrase your search term.</p>\n <button\n title=\"{{ 'Reset search' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div *ngIf=\"selected\" [hidden]=\"mode !== 'config'\" style=\"max-height: calc(100vh - 290px)\">\n <div class=\"p-t-16 flex-no-grow\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <h4 class=\"text-left text-medium\">\n {{ selected.label | translate }}\n </h4>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n id=\"widgetTitle\"\n [(ngModel)]=\"selected.data.title\"\n type=\"text\"\n name=\"title\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow separator-top\"\n [ngClass]=\"{ 'd-flex m-l-0': widgetConfig.options || hasConfig() }\"\n >\n <div\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n class=\"a-i-stretch\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-l-0 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n style=\"height: 360px\"\n >\n <div class=\"p-l-16 fit-h bg-inherit\" [ngClass]=\"{ 'p-r-16': !hasConfig() }\">\n <c8y-asset-selector-miller\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n class=\"bg-inherit p-relative\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12 p-l-32 p-r-8': widgetConfig.settings?.noDeviceTarget\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block p-t-8 p-r-24\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"mode === 'style'\" class=\"modal-body p-t-0\" style=\"min-height: calc(100vh - 290px)\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview [previewClasses]=\"getStyle(true)\"></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
230
231
  }], ctorParameters: function () { return [{ type: i1.WidgetService }, { type: i2.BsModalRef }, { type: i3.InventoryService }, { type: i4.ContextDashboardService }]; }, propDecorators: { dynamicComponent: [{
231
232
  type: ViewChild,
232
233
  args: ['config', { static: false }]
233
234
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFzQyx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUV0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFNL0QsTUFBTSxPQUFPLHFCQUFxQjtJQTRDaEMsWUFDVSxhQUE0QixFQUM1QixLQUFpQixFQUNqQixTQUEyQixFQUM1Qix1QkFBZ0Q7UUFIL0Msa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtR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RCxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNO1NBQ1YsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsWUFBaUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO1lBRWhELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDOUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjO2dCQUNsRCxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFFekMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsWUFBWSxDQUFDLE1BQU0sR0FBRztvQkFDcEIsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtpQkFDeEIsQ0FBQzthQUNIO1NBQ0Y7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDOztrSEF6UlUscUJBQXFCO3NHQUFyQixxQkFBcUIscUtDckJsQywrbVNBeVBBOzJGRHBPYSxxQkFBcUI7a0JBSmpDLFNBQVM7K0JBQ0UsbUJBQW1CO2tNQTRCN0IsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLCBXaWRnZXQsIER5bmFtaWNDb21wb25lbnRDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Fzc2V0cy1uYXZpZ2F0b3InO1xuaW1wb3J0IHsgY2xvbmUsIGNsb25lRGVlcCwgZXNjYXBlUmVnRXhwLCBnZXQsIG9taXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgaWlmLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyxcbiAgV0lER0VUX0hFQURFUl9DTEFTU0VTLFxuICBDb250ZXh0V2lkZ2V0Q29uZmlnXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgV2lkZ2V0U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13aWRnZXQtY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHNlbGVjdGVkRGV2aWNlOiBJTWFuYWdlZE9iamVjdDtcbiAgbW9kZTogJ2NvbmZpZycgfCAnc2VsZWN0JyB8ICdzdHlsZScgPSAnc2VsZWN0JztcbiAgc2VhcmNoUmVzdWx0OiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdO1xuICBjb21wb25lbnRzOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdO1xuICBzZWxlY3RlZDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb247XG4gIHNlYXJjaENoYW5nZSQgPSBuZXcgU3ViamVjdCgpO1xuICBzZWFyY2hUZXJtID0gJyc7XG4gIGNvbnRleHQ6IGFueTtcbiAgY29tcG9uZW50TGFiZWw6IHN0cmluZztcbiAgbW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICBzdHlsaW5nID0ge1xuICAgIGhlYWRlckNsYXNzOiAncGFuZWwtdGl0bGUtcmVndWxhcicsXG4gICAgY29udGVudENsYXNzOiAncGFuZWwtY29udGVudC1saWdodCdcbiAgfTtcbiAgZGVmYXVsdFN0eWxpbmcgPSB7XG4gICAgaGVhZGVyQ2xhc3M6ICdwYW5lbC10aXRsZS1yZWd1bGFyJyxcbiAgICBjb250ZW50Q2xhc3M6ICdwYW5lbC1jb250ZW50LWxpZ2h0J1xuICB9O1xuICBwb3NzaWJsZVN0eWxpbmcgPSB7IFdJREdFVF9IRUFERVJfQ0xBU1NFUywgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyB9O1xuICBjdXJyZW50OiBhbnk7XG4gIHdpZGdldENvbmZpZzogQ29udGV4dFdpZGdldENvbmZpZztcbiAgaXNVcGdyYWRlID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY29uZmlnJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGR5bmFtaWNDb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnRDb21wb25lbnQ7XG5cbiAgZ2V0IGlzRWRpdCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnQ7XG4gIH1cblxuICBnZXQgaXNEZXZpY2VUeXBlRGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubW8uYzh5X0Rhc2hib2FyZD8uZGV2aWNlVHlwZSAmJiAhIXRoaXMubW8uYzh5X0Rhc2hib2FyZD8uZGV2aWNlVHlwZVZhbHVlO1xuICB9XG5cbiAgcmVzdWx0OiBQcm9taXNlPFdpZGdldD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fc2F2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcblxuICBwcml2YXRlIHNlYXJjaFN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9zYXZlOiAodmFsdWU6IFdpZGdldCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfY2FuY2VsOiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvbXBvbmVudHMgPSB0aGlzLndpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBjbG9uZSh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQsIHRoaXMuaXNFZGl0ID8gJ2NvbmZpZycgOiAnc2VsZWN0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hTdWIgPSB0aGlzLnNlYXJjaENoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBpaWYoKCkgPT4gZXZlbnQud2hpY2ggIT09IDEzLCB0aW1lcigyMDApLCB0aW1lcigxMCkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2V0U3R5bGluZ3MoKTtcblxuICAgIGlmICh0aGlzLndpZGdldENvbmZpZyAmJiB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UpIHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZS5pZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkRGV2aWNlID0gZGF0YTtcbiAgICB9XG4gIH1cblxuICBjaGVja0lmRGV2aWNlUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncy5kZXZpY2VUYXJnZXROb3RSZXF1aXJlZCAmJlxuICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSAmJlxuICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0XG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uOiBBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgdGhpcy53aWRnZXRDb25maWcuZGV2aWNlID0gc2VsZWN0aW9uLmNoYW5nZS5pdGVtO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICBjb25zdCBob29rU3VjY2VzcyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudC5jYWxsTGlmZUN5Y2xlSG9va3MoKS50b1Byb21pc2UoKTtcbiAgICBpZiAoIWhvb2tTdWNjZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCB9ID0gdGhpcy5zZWxlY3RlZC5kYXRhO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy53aWRnZXRDb25maWcgJiZcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSAmJlxuICAgICAgLy8gc2VyaWFsaXppbmcgd2lsbCBiZSBoYW5kbGVkIGJ5IHJlc29sdmVyXG4gICAgICAhdGhpcy5zZWxlY3RlZD8ucmVzb2x2ZT8uZGV2aWNlXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGlkLCBuYW1lIH0gPSB0aGlzLndpZGdldENvbmZpZy5kZXZpY2U7XG4gICAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgPSB7IGlkLCBuYW1lIH07XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkZ2V0ID0ge1xuICAgICAgX3gsXG4gICAgICBfeSxcbiAgICAgIF93aWR0aCxcbiAgICAgIF9oZWlnaHQsXG4gICAgICBjb25maWc6IG9taXQodGhpcy53aWRnZXRDb25maWcsIFsnc2V0dGluZ3MnLCAnZGlzcGxheVNldHRpbmdzJ10pLFxuICAgICAgdGl0bGU6IHRoaXMuc2VsZWN0ZWQuZGF0YS50aXRsZSxcbiAgICAgIGNvbXBvbmVudElkOiB0aGlzLnNlbGVjdGVkLmlkLFxuICAgICAgaWQ6IHRoaXMuaXNFZGl0ID8gdGhpcy5jdXJyZW50LmRhdGEuaWQgOiBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc3Vic3RyKDIpLFxuICAgICAgY2xhc3NlczogdGhpcy5nZXRTdHlsZSgpLFxuICAgICAgLi4uKCF0aGlzLmlzRWRpdCA/IHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLndpZGdldERlZmF1bHRzIDoge30pXG4gICAgfSBhcyBXaWRnZXQ7XG5cbiAgICB0aGlzLl9zYXZlKHdpZGdldCk7XG4gIH1cblxuICBzZWxlY3QoY21wLCBtb2RlOiAnc2VsZWN0JyB8ICdjb25maWcnID0gJ2NvbmZpZycpIHtcbiAgICBjbXAuZGF0YSA9IGNtcC5kYXRhIHx8IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBjbXA7XG5cbiAgICB0aGlzLmlzVXBncmFkZSA9ICEhZ2V0KGNtcCwgJ2RhdGEuc2V0dGluZ3MudXBncmFkZScpO1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gdGhpcy5pc1VwZ3JhZGU7XG5cbiAgICBpZiAodGhpcy5pc0VkaXQpIHtcbiAgICAgIGNvbnN0IHsgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQsIGNsYXNzZXMsIHRpdGxlIH0gPSB0aGlzLmN1cnJlbnQuZGF0YTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZGF0YSA9IHsgLi4udGhpcy5zZWxlY3RlZC5kYXRhLCBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCwgY2xhc3NlcywgdGl0bGUgfTtcbiAgICB9XG5cbiAgICB0aGlzLndpZGdldENvbmZpZyA9IGNsb25lRGVlcCh0aGlzLmNvbXBvc2VXaWRnZXRDb25maWcodGhpcy5zZWxlY3RlZCwgdGhpcy5jb250ZXh0KSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUgPSB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUgfHwgY21wLmxhYmVsO1xuICAgIHRoaXMuY29tcG9uZW50TGFiZWwgPSBjbXAubGFiZWw7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXJtLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gdGhpcy5jb21wb25lbnRzLmZpbHRlcihjbXAgPT5cbiAgICAgICAgbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSksICdpJykudGVzdChjbXAubGFiZWwpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5zZWFyY2hSZXN1bHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGFuZ2VNb2RlKG1vZGU6ICdjb25maWcnIHwgJ3NlbGVjdCcgfCAnc3R5bGUnKSB7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICB9XG5cbiAgZ2V0U3R5bGUoaXNQcmV2aWV3ID0gZmFsc2UpIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0ge307XG4gICAgaWYgKGlzUHJldmlldyB8fCAhdGhpcy5pc0Rhc2hib2FyZERlZmF1bHRTdHlsZSh0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3MpKSB7XG4gICAgICBjc3NDbGFzc2VzW3RoaXMuc3R5bGluZy5oZWFkZXJDbGFzc10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXZpZXcgfHwgIXRoaXMuaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUodGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzcykpIHtcbiAgICAgIGNzc0NsYXNzZXNbdGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzc10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgIGNzc0NsYXNzZXNbYGRhc2hib2FyZC10aGVtZS0ke3RoaXMuZGVmYXVsdFN0eWxpbmcuY29udGVudENsYXNzLnNwbGl0KCctJykucG9wKCl9YF0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5mb3JtRGlzYWJsZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNlYXJjaFN1Yikge1xuICAgICAgdGhpcy5zZWFyY2hTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBoYXNDb25maWcoKSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzPy51cGdyYWRlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29uZmlnQ29tcG9uZW50IHx8IHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5jb25maWdUZW1wbGF0ZVVybFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLmR5bmFtaWNDb21wb25lbnQ/LmVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsaW5ncygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzOiBzdHJpbmdbXSA9XG4gICAgICAodGhpcy5tby5jOHlfRGFzaGJvYXJkPy5jbGFzc2VzICYmIE9iamVjdC5rZXlzKHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jbGFzc2VzKSkgfHwgW107XG4gICAgY29uc3QgZGFzaGJvYXJkV2lkZ2V0Q2xhc3Nlczogc3RyaW5nW10gPVxuICAgICAgKHRoaXMubW8uYzh5X0Rhc2hib2FyZD8ud2lkZ2V0Q2xhc3NlcyAmJiBPYmplY3Qua2V5cyh0aGlzLm1vLmM4eV9EYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcykpIHx8XG4gICAgICBbXTtcbiAgICBjb25zdCB3aWRnZXRDbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMuaXNFZGl0ID8gT2JqZWN0LmtleXModGhpcy5jdXJyZW50LmRhdGEuY2xhc3NlcykgOiBbXTtcblxuICAgIHRoaXMuc3R5bGluZyA9IHRoaXMuc2V0RGVmYXVsdFN0eWxlKFtcbiAgICAgIC4uLmRhc2hib2FyZENsYXNzZXMsXG4gICAgICAuLi5kYXNoYm9hcmRXaWRnZXRDbGFzc2VzLFxuICAgICAgLi4ud2lkZ2V0Q2xhc3Nlc1xuICAgIF0pO1xuICAgIHRoaXMuZGVmYXVsdFN0eWxpbmcgPSB0aGlzLnNldERlZmF1bHRTdHlsZShbLi4uZGFzaGJvYXJkQ2xhc3NlcywgLi4uZGFzaGJvYXJkV2lkZ2V0Q2xhc3Nlc10pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rhc2hib2FyZERlZmF1bHRTdHlsZShjbGFzc05hbWUpIHtcbiAgICBjb25zdCBhbGxDbGFzc2VzID0ge1xuICAgICAgLi4udGhpcy5tby5jOHlfRGFzaGJvYXJkLmNsYXNzZXMsXG4gICAgICAuLi50aGlzLm1vLmM4eV9EYXNoYm9hcmQud2lkZ2V0Q2xhc3Nlc1xuICAgIH07XG4gICAgY29uc3Qgc3R5bGVzID0gT2JqZWN0LmtleXMoYWxsQ2xhc3NlcykubWFwKGNzc0NsYXNzID0+ICh7IGNsYXNzOiBjc3NDbGFzcyB9KSk7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICBzdHlsZXMsXG4gICAgICBjbGFzc05hbWUuc3BsaXQoJy0nKS5wb3AoKSxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgcmV0dXJuICEhc3R5bGU7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRTdHlsZShzZXRDbGFzc2VzOiBzdHJpbmdbXSkge1xuICAgIGxldCBjb250ZW50Q2xhc3MgPSB0aGlzLnN0eWxpbmcuY29udGVudENsYXNzO1xuICAgIGxldCBoZWFkZXJDbGFzcyA9IHRoaXMuc3R5bGluZy5oZWFkZXJDbGFzcztcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAuZ2V0RmlsdGVyZWREYXNoYm9hcmRTdHlsZXMoc2V0Q2xhc3NlcylcbiAgICAgIC5tYXAoYyA9PiBjLnNwbGl0KCctJykucG9wKCkpO1xuICAgIHN0eWxlcy5mb3JFYWNoKHN0eWxlTmFtZSA9PiB7XG4gICAgICBjb250ZW50Q2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIFdJREdFVF9DT05URU5UX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgY29udGVudENsYXNzXG4gICAgICApO1xuICAgICAgaGVhZGVyQ2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIFdJREdFVF9IRUFERVJfQ0xBU1NFUyxcbiAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICBoZWFkZXJDbGFzc1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGhlYWRlckNsYXNzLCBjb250ZW50Q2xhc3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZVdpZGdldENvbmZpZyhzZWxlY3RlZENvbXBvbmVudCwgY29udGV4dCA9IHt9KSB7XG4gICAgY29uc3Qgc2V0dGluZyA9IHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIC4uLnNlbGVjdGVkQ29tcG9uZW50LmRhdGEuc2V0dGluZ3MsXG4gICAgICAgIC4uLmdldChzZWxlY3RlZENvbXBvbmVudC5kYXRhLnNldHRpbmdzLCAnbmcxLm9wdGlvbnMnKSxcbiAgICAgICAgLi4uZ2V0KHNlbGVjdGVkQ29tcG9uZW50LmRhdGEsICduZzEub3B0aW9ucycpLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBkYXNoYm9hcmRNbzogdGhpcy5tby5jOHlfRGFzaGJvYXJkXG4gICAgICB9LFxuICAgICAgLi4uc2VsZWN0ZWRDb21wb25lbnQuZGF0YS5jb25maWdcbiAgICB9IGFzIENvbnRleHRXaWRnZXRDb25maWc7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlUYXJnZXRJZkRldmljZURhc2hib2FyZChzZXR0aW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUYXJnZXRJZkRldmljZURhc2hib2FyZCh3aWRnZXRDb25maWc6IENvbnRleHRXaWRnZXRDb25maWcpIHtcbiAgICBjb25zdCBpc0RldmljZVR5cGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKTtcblxuICAgIGlmIChpc0RldmljZVR5cGUpIHtcbiAgICAgIHdpZGdldENvbmZpZy5zZXR0aW5ncy5oaWRlVGFyZ2V0ID0gaXNEZXZpY2VUeXBlO1xuXG4gICAgICBjb25zdCBub0RldmljZVRhcmdldCA9IHdpZGdldENvbmZpZy5zZXR0aW5ncy5uZzFcbiAgICAgICAgPyB3aWRnZXRDb25maWcuc2V0dGluZ3MubmcxLm9wdGlvbnMubm9EZXZpY2VUYXJnZXRcbiAgICAgICAgOiB3aWRnZXRDb25maWcuc2V0dGluZ3Mubm9EZXZpY2VUYXJnZXQ7XG5cbiAgICAgIGlmICghbm9EZXZpY2VUYXJnZXQpIHtcbiAgICAgICAgd2lkZ2V0Q29uZmlnLmRldmljZSA9IHtcbiAgICAgICAgICBpZDogdGhpcy5jb250ZXh0LmlkLFxuICAgICAgICAgIG5hbWU6IHRoaXMuY29udGV4dC5uYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3aWRnZXRDb25maWc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gIDxoMyBpZD1cIm1kb2FsLXRpdGxlXCIgdGl0bGU9XCJ7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIiAqbmdJZj1cIiFjdXJyZW50XCIgdHJhbnNsYXRlPkFkZCB3aWRnZXQ8L2gzPlxuICA8aDMgaWQ9XCJtb2RhbC10aXRsZVwiIHRpdGxlPVwie3sgJ0VkaXQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiICpuZ0lmPVwiY3VycmVudFwiIHRyYW5zbGF0ZT5FZGl0IHdpZGdldDwvaDM+XG48L2Rpdj5cbjxmb3JtICNjb25maWdGb3JtPVwibmdGb3JtXCIgbmFtZT1cImZvcm1cIj5cbiAgPGRpdiBjbGFzcz1cImM4eS1tb2RhbC10YWJzXCIgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYkNvbnRhaW5lclwiPlxuICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzIG5hdi10YWJzYzh5IHAtbC0yNFwiPlxuICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2RlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NlbGVjdCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ3NlbGVjdCcpOyAoZmFsc2UpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwidGgtbGFyZ2VcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+U2VsZWN0IHdpZGdldDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwibW9kZSA9PT0gJ2NvbmZpZydcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdDb25maWd1cmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ2NvbmZpZycpOyAoZmFsc2UpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwiY29nXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkNvbmZpZ3VyYXRpb248L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBbY2xhc3MuYWN0aXZlXT1cIm1vZGUgPT09ICdzdHlsZSdcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdBcHBlYXJhbmNlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ3N0eWxlJyk7IChmYWxzZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJwYWludC1icnVzaFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BcHBlYXJhbmNlPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWlubmVyLXNjcm9sbFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3NlbGVjdCdcIlxuICAgICAgY2xhc3M9XCJiZy1sZXZlbC0wIHAtbC0yNCBwLXItMjQgcC10LTggcC1iLTggc3RpY2t5LWhlYWRlci10b3AtMFwiXG4gICAgICBzdHlsZT1cInotaW5kZXg6IDJcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNlYXJjaFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlYXJjaCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlYXJjaOKApicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cInNlYXJjaENoYW5nZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0U2VhcmNoKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwic2VhcmNoVGVybS5sZW5ndGggPT09IDAgPyAnc2VhcmNoJyA6ICdjbG9zZSdcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IGJnLWxldmVsLTJcIiAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncm91cCBjYXJkLXNlbGVjdCBtLWItMFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tNCBjb2wteHMtNlwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNtcCBvZiBzZWFyY2hSZXN1bHQgfHwgY29tcG9uZW50c1wiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBjbXAuZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgcC04XCIgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZCA9PT0gY21wXCIgKGNsaWNrKT1cInNlbGVjdChjbXApXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcC04IG0tYi04IGQtY29sIGZsZXgtY2VudGVyIGJnLWxldmVsLTJcIiByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNtcC5wcmV2aWV3SW1hZ2U7IGVsc2UgcHJldmlld0ltYWdlXCI+XG4gICAgICAgICAgICAgICAgPGgxPjxpIGM4eUljb249XCJmaWxlLWltYWdlLW9cIj48L2k+PC9oMT5cbiAgICAgICAgICAgICAgICA8c21hbGwgdHJhbnNsYXRlPlByZXZpZXcgbm90IGF2YWlsYWJsZTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ByZXZpZXdJbWFnZT5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXJlc3BvbnNpdmVcIiBhbHQ9XCJcIiBbc3JjXT1cImNtcC5wcmV2aWV3SW1hZ2VcIiAvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgIHRleHQ9XCJ7eyBjbXAubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtwYXR0ZXJuXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWVtcHR5LXN0YXRlIHRleHQtY2VudGVyXCIgKm5nSWY9XCJzZWFyY2hSZXN1bHQgJiYgc2VhcmNoUmVzdWx0Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxoMSBjOHlJY29uPVwic2VhcmNoXCI+PC9oMT5cbiAgICAgICAgICA8aDMgdHJhbnNsYXRlPk5vIHdpZGdldHMgZm91bmQuPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICA8cCB0cmFuc2xhdGUgY2xhc3M9XCJtLXItOFwiPlJlcGhyYXNlIHlvdXIgc2VhcmNoIHRlcm0uPC9wPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZXNldCBzZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0U2VhcmNoKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnUmVzZXQgc2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaXMgaW50ZW50aW9uYWwgc2V0IHRvIGhpZGRlbiB0byBhbGxvdyB0aGUgVmlld0NoaWxkIHJlZiBpbiB0aGUgY29udHJvbGxlciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRcIiBbaGlkZGVuXT1cIm1vZGUgIT09ICdjb25maWcnXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjkwcHgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC10LTE2IGZsZXgtbm8tZ3Jvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1sLTI0XCI+XG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtbGVmdCB0ZXh0LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtci0yNFwiPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIndpZGdldFRpdGxlXCIgdHJhbnNsYXRlPlRpdGxlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwid2lkZ2V0VGl0bGVcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZC5kYXRhLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuJyB8IHRyYW5zbGF0ZSB9fSB7eyBjb21wb25lbnRMYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJyb3cgZmxleC1ncm93IHNlcGFyYXRvci10b3BcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdkLWZsZXggbS1sLTAnOiB3aWRnZXRDb25maWcub3B0aW9ucyB8fCBoYXNDb25maWcoKSB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldENvbmZpZy5zZXR0aW5ncz8ubm9EZXZpY2VUYXJnZXRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1pLXN0cmV0Y2hcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdiZy1sZXZlbC0xIGNvbC1zbS00IHAtbC0wIHAtci0wJzogaGFzQ29uZmlnKCksXG4gICAgICAgICAgICAnYmctbGV2ZWwtMCBjb2wtc20tMTInOiAhaGFzQ29uZmlnKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzYwcHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtbC0xNiBmaXQtaCBiZy1pbmhlcml0XCIgW25nQ2xhc3NdPVwieyAncC1yLTE2JzogIWhhc0NvbmZpZygpIH1cIj5cbiAgICAgICAgICAgIDxjOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyXG4gICAgICAgICAgICAgIChvblNlbGVjdGVkKT1cInNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgICAgIHZpZXc6ICdtaWxsZXInLFxuICAgICAgICAgICAgICAgIGdyb3Vwc1NlbGVjdGFibGU6IHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5ncm91cHNTZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY29sdW1uSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG93VW5hc3NpZ25lZERldmljZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgc2VhcmNoOiAhdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3MuY29udGV4dD8uYWRkaXRpb25QYXJlbnRzLFxuICAgICAgICAgICAgICAgIHNob3dGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgc2luZ2xlQ29sdW1uOiAhIXRoaXMuaGFzQ29uZmlnKClcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFthc3NldF09XCJ3aWRnZXRDb25maWcuc2V0dGluZ3M/LmNvbnRleHRcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWREZXZpY2VdPVwic2VsZWN0ZWREZXZpY2VcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJnLWluaGVyaXQgcC1yZWxhdGl2ZVwiXG4gICAgICAgICAgICA+PC9jOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdjb2wtc20tOCc6ICF3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0LFxuICAgICAgICAgICAgJ2NvbC1zbS0xMiBwLWwtMzIgcC1yLTgnOiB3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0XG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWR5bmFtaWMtY29tcG9uZW50XG4gICAgICAgICAgICBjbGFzcz1cImQtYmxvY2sgcC10LTggcC1yLTI0XCJcbiAgICAgICAgICAgIFtjb21wb25lbnRJZF09XCJzZWxlY3RlZC5pZFwiXG4gICAgICAgICAgICBtb2RlPVwiY29uZmlnXCJcbiAgICAgICAgICAgIFtjb25maWddPVwid2lkZ2V0Q29uZmlnXCJcbiAgICAgICAgICAgIFtub3RGb3VuZEVycm9yXT1cImZhbHNlXCJcbiAgICAgICAgICAgICNjb25maWdcbiAgICAgICAgICA+PC9jOHktZHluYW1pYy1jb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ3N0eWxlJ1wiIGNsYXNzPVwibW9kYWwtYm9keSBwLXQtMFwiIHN0eWxlPVwibWluLWhlaWdodDogY2FsYygxMDB2aCAtIDI5MHB4KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTZcIj5cbiAgICAgICAgICA8Yzh5LWFwcGVhcmFuY2Utc2V0dGluZ3NcbiAgICAgICAgICAgIFsodGhlbWVDbGFzcyldPVwic3R5bGluZy5jb250ZW50Q2xhc3NcIlxuICAgICAgICAgICAgWyhoZWFkZXJDbGFzcyldPVwic3R5bGluZy5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICBbcG9zc2libGVTdHlsaW5nVGhlbWVdPVwicG9zc2libGVTdHlsaW5nLldJREdFVF9DT05URU5UX0NMQVNTRVNcIlxuICAgICAgICAgICAgW3Bvc3NpYmxlU3R5bGluZ0hlYWRlcl09XCJwb3NzaWJsZVN0eWxpbmcuV0lER0VUX0hFQURFUl9DTEFTU0VTXCJcbiAgICAgICAgICAgIFtkZWZhdWx0VGhlbWVDbGFzc109XCJkZWZhdWx0U3R5bGluZy5jb250ZW50Q2xhc3NcIlxuICAgICAgICAgICAgW2RlZmF1bHRIZWFkZXJDbGFzc109XCJkZWZhdWx0U3R5bGluZy5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgPjwvYzh5LWFwcGVhcmFuY2Utc2V0dGluZ3M+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTYgc3RpY2t5LWhlYWRlci10b3AtMFwiPlxuICAgICAgICAgIDxjOHktd2lkZ2V0LXByZXZpZXcgW3ByZXZpZXdDbGFzc2VzXT1cImdldFN0eWxlKHRydWUpXCI+PC9jOHktd2lkZ2V0LXByZXZpZXc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkIHx8IGNvbmZpZ0Zvcm0uaW52YWxpZCB8fCBjaGVja0lmRGV2aWNlUmVxdWlyZWQoKVxuICAgICAgXCJcbiAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICBbYWN0aW9uTmFtZV09XCJjdXJyZW50ID8gJ2VkaXRXaWRnZXQnIDogJ2NyZWF0ZVdpZGdldCdcIlxuICAgICAgW2FjdGlvbkRhdGFdPVwieyB3aWRnZXROYW1lOiBzZWxlY3RlZCAmJiBzZWxlY3RlZC5pZCB9XCJcbiAgICA+XG4gICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFzQyx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUV0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFNL0QsTUFBTSxPQUFPLHFCQUFxQjtJQTRDaEMsWUFDVSxhQUE0QixFQUM1QixLQUFpQixFQUNqQixTQUEyQixFQUM1Qix1QkFBZ0Q7UUFIL0Msa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtR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QUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTthQUNuQztZQUNELEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU07U0FDVixDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxZQUFpQztRQUNwRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RSxJQUFJLFlBQVksRUFBRTtZQUNoQixZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7WUFFaEQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUM5QyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWM7Z0JBQ2xELENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUV6QyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixZQUFZLENBQUMsTUFBTSxHQUFHO29CQUNwQixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2lCQUN4QixDQUFDO2FBQ0g7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7O2tIQTFSVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixxS0NyQmxDLDJxU0F5UEE7MkZEcE9hLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUI7a01BNEI3QixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIFdpZGdldCwgRHluYW1pY0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwLCBlc2NhcGVSZWdFeHAsIGdldCwgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBpaWYsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBXSURHRVRfQ09OVEVOVF9DTEFTU0VTLFxuICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gIENvbnRleHRXaWRnZXRDb25maWdcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgc2VsZWN0ZWREZXZpY2U6IElNYW5hZ2VkT2JqZWN0O1xuICBtb2RlOiAnY29uZmlnJyB8ICdzZWxlY3QnIHwgJ3N0eWxlJyA9ICdzZWxlY3QnO1xuICBzZWFyY2hSZXN1bHQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW107XG4gIGNvbXBvbmVudHM6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW107XG4gIHNlbGVjdGVkOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgc2VhcmNoQ2hhbmdlJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHNlYXJjaFRlcm0gPSAnJztcbiAgY29udGV4dDogYW55O1xuICBjb21wb25lbnRMYWJlbDogc3RyaW5nO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIHN0eWxpbmcgPSB7XG4gICAgaGVhZGVyQ2xhc3M6ICdwYW5lbC10aXRsZS1yZWd1bGFyJyxcbiAgICBjb250ZW50Q2xhc3M6ICdwYW5lbC1jb250ZW50LWxpZ2h0J1xuICB9O1xuICBkZWZhdWx0U3R5bGluZyA9IHtcbiAgICBoZWFkZXJDbGFzczogJ3BhbmVsLXRpdGxlLXJlZ3VsYXInLFxuICAgIGNvbnRlbnRDbGFzczogJ3BhbmVsLWNvbnRlbnQtbGlnaHQnXG4gIH07XG4gIHBvc3NpYmxlU3R5bGluZyA9IHsgV0lER0VUX0hFQURFUl9DTEFTU0VTLCBXSURHRVRfQ09OVEVOVF9DTEFTU0VTIH07XG4gIGN1cnJlbnQ6IGFueTtcbiAgd2lkZ2V0Q29uZmlnOiBDb250ZXh0V2lkZ2V0Q29uZmlnO1xuICBpc1VwZ3JhZGUgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdjb25maWcnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudENvbXBvbmVudDtcblxuICBnZXQgaXNFZGl0KCkge1xuICAgIHJldHVybiAhIXRoaXMuY3VycmVudDtcbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5kZXZpY2VUeXBlICYmICEhdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5kZXZpY2VUeXBlVmFsdWU7XG4gIH1cblxuICByZXN1bHQ6IFByb21pc2U8V2lkZ2V0PiA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLl9zYXZlID0gcmVzb2x2ZTtcbiAgICB0aGlzLl9jYW5jZWwgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHByaXZhdGUgc2VhcmNoU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX3NhdmU6ICh2YWx1ZTogV2lkZ2V0KSA9PiB2b2lkO1xuICBwcml2YXRlIF9jYW5jZWw6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHVibGljIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlOiBDb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdBZnRlckNvbnRlbnRJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY29tcG9uZW50cyA9IHRoaXMud2lkZ2V0U2VydmljZS5nZXRXaWRnZXREZWZpbml0aW9ucygpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IGNsb25lKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCwgdGhpcy5pc0VkaXQgPyAnY29uZmlnJyA6ICdzZWxlY3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaFN1YiA9IHRoaXMuc2VhcmNoQ2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGlpZigoKSA9PiBldmVudC53aGljaCAhPT0gMTMsIHRpbWVyKDIwMCksIHRpbWVyKDEwKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zZXRTdHlsaW5ncygpO1xuXG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnICYmIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwodGhpcy53aWRnZXRDb25maWcuZGV2aWNlLmlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREZXZpY2UgPSBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrSWZEZXZpY2VSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnIHx8XG4gICAgICAoIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmRldmljZVRhcmdldE5vdFJlcXVpcmVkICYmXG4gICAgICAgICF0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbjogQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSA9IHNlbGVjdGlvbi5jaGFuZ2UuaXRlbTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgY29uc3QgaG9va1N1Y2Nlc3MgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnQuY2FsbExpZmVDeWNsZUhvb2tzKCkudG9Qcm9taXNlKCk7XG4gICAgaWYgKCFob29rU3VjY2Vzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQgfSA9IHRoaXMuc2VsZWN0ZWQuZGF0YTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnICYmXG4gICAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgIC8vIHNlcmlhbGl6aW5nIHdpbGwgYmUgaGFuZGxlZCBieSByZXNvbHZlclxuICAgICAgIXRoaXMuc2VsZWN0ZWQ/LnJlc29sdmU/LmRldmljZVxuICAgICkge1xuICAgICAgY29uc3QgeyBpZCwgbmFtZSB9ID0gdGhpcy53aWRnZXRDb25maWcuZGV2aWNlO1xuICAgICAgdGhpcy53aWRnZXRDb25maWcuZGV2aWNlID0geyBpZCwgbmFtZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHdpZGdldCA9IHtcbiAgICAgIF94LFxuICAgICAgX3ksXG4gICAgICBfd2lkdGgsXG4gICAgICBfaGVpZ2h0LFxuICAgICAgY29uZmlnOiBvbWl0KHRoaXMud2lkZ2V0Q29uZmlnLCBbJ3NldHRpbmdzJywgJ2Rpc3BsYXlTZXR0aW5ncyddKSxcbiAgICAgIHRpdGxlOiB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUsXG4gICAgICBjb21wb25lbnRJZDogdGhpcy5zZWxlY3RlZC5pZCxcbiAgICAgIGlkOiB0aGlzLmlzRWRpdCA/IHRoaXMuY3VycmVudC5kYXRhLmlkIDogU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKSxcbiAgICAgIGNsYXNzZXM6IHRoaXMuZ2V0U3R5bGUoKSxcbiAgICAgIC4uLighdGhpcy5pc0VkaXQgPyB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncy53aWRnZXREZWZhdWx0cyA6IHt9KVxuICAgIH0gYXMgV2lkZ2V0O1xuXG4gICAgdGhpcy5fc2F2ZSh3aWRnZXQpO1xuICB9XG5cbiAgc2VsZWN0KGNtcCwgbW9kZTogJ3NlbGVjdCcgfCAnY29uZmlnJyA9ICdjb25maWcnKSB7XG4gICAgY21wLmRhdGEgPSBjbXAuZGF0YSB8fCB7fTtcbiAgICB0aGlzLnNlbGVjdGVkID0gY21wO1xuXG4gICAgdGhpcy5pc1VwZ3JhZGUgPSAhIWdldChjbXAsICdkYXRhLnNldHRpbmdzLnVwZ3JhZGUnKTtcbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmZvcm1EaXNhYmxlZCA9IHRoaXMuaXNVcGdyYWRlO1xuXG4gICAgaWYgKHRoaXMuaXNFZGl0KSB7XG4gICAgICBjb25zdCB7IF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0LCBjbGFzc2VzLCB0aXRsZSB9ID0gdGhpcy5jdXJyZW50LmRhdGE7XG4gICAgICB0aGlzLnNlbGVjdGVkLmRhdGEgPSB7IC4uLnRoaXMuc2VsZWN0ZWQuZGF0YSwgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQsIGNsYXNzZXMsIHRpdGxlIH07XG4gICAgfVxuXG4gICAgdGhpcy53aWRnZXRDb25maWcgPSBjbG9uZURlZXAodGhpcy5jb21wb3NlV2lkZ2V0Q29uZmlnKHRoaXMuc2VsZWN0ZWQsIHRoaXMuY29udGV4dCkpO1xuXG4gICAgdGhpcy5zZWxlY3RlZC5kYXRhLnRpdGxlID0gdGhpcy5zZWxlY3RlZC5kYXRhLnRpdGxlIHx8IGNtcC5sYWJlbDtcbiAgICB0aGlzLmNvbXBvbmVudExhYmVsID0gY21wLmxhYmVsO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gIH1cblxuICBzZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGVybS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdCA9IHRoaXMuY29tcG9uZW50cy5maWx0ZXIoY21wID0+XG4gICAgICAgIG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHRoaXMuc2VhcmNoVGVybS50cmltKCkpLCAnaScpLnRlc3QoY21wLmxhYmVsKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2hhbmdlTW9kZShtb2RlOiAnY29uZmlnJyB8ICdzZWxlY3QnIHwgJ3N0eWxlJykge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIGdldFN0eWxlKGlzUHJldmlldyA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHt9O1xuICAgIGlmIChpc1ByZXZpZXcgfHwgIXRoaXMuaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUodGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzKSkge1xuICAgICAgY3NzQ2xhc3Nlc1t0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3NdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmV2aWV3IHx8ICF0aGlzLmlzRGFzaGJvYXJkRGVmYXVsdFN0eWxlKHRoaXMuc3R5bGluZy5jb250ZW50Q2xhc3MpKSB7XG4gICAgICBjc3NDbGFzc2VzW3RoaXMuc3R5bGluZy5jb250ZW50Q2xhc3NdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICBjc3NDbGFzc2VzW2BkYXNoYm9hcmQtdGhlbWUtJHt0aGlzLmRlZmF1bHRTdHlsaW5nLmNvbnRlbnRDbGFzcy5zcGxpdCgnLScpLnBvcCgpfWBdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzQ2xhc3NlcztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zZWFyY2hTdWIpIHtcbiAgICAgIHRoaXMuc2VhcmNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFzQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8udXBncmFkZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3M/LmNvbmZpZ0NvbXBvbmVudCB8fCB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29uZmlnVGVtcGxhdGVVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5keW5hbWljQ29tcG9uZW50Py5lcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2xhc3Nlczogc3RyaW5nW10gPVxuICAgICAgKHRoaXMubW8uYzh5X0Rhc2hib2FyZD8uY2xhc3NlcyAmJiBPYmplY3Qua2V5cyh0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2xhc3NlcykpIHx8IFtdO1xuICAgIGNvbnN0IGRhc2hib2FyZFdpZGdldENsYXNzZXM6IHN0cmluZ1tdID1cbiAgICAgICh0aGlzLm1vLmM4eV9EYXNoYm9hcmQ/LndpZGdldENsYXNzZXMgJiYgT2JqZWN0LmtleXModGhpcy5tby5jOHlfRGFzaGJvYXJkLndpZGdldENsYXNzZXMpKSB8fFxuICAgICAgW107XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLmlzRWRpdCA/IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudC5kYXRhLmNsYXNzZXMpIDogW107XG5cbiAgICB0aGlzLnN0eWxpbmcgPSB0aGlzLnNldERlZmF1bHRTdHlsZShbXG4gICAgICAuLi5kYXNoYm9hcmRDbGFzc2VzLFxuICAgICAgLi4uZGFzaGJvYXJkV2lkZ2V0Q2xhc3NlcyxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICBdKTtcbiAgICB0aGlzLmRlZmF1bHRTdHlsaW5nID0gdGhpcy5zZXREZWZhdWx0U3R5bGUoWy4uLmRhc2hib2FyZENsYXNzZXMsIC4uLmRhc2hib2FyZFdpZGdldENsYXNzZXNdKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUoY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgYWxsQ2xhc3NlcyA9IHtcbiAgICAgIC4uLnRoaXMubW8uYzh5X0Rhc2hib2FyZC5jbGFzc2VzLFxuICAgICAgLi4udGhpcy5tby5jOHlfRGFzaGJvYXJkLndpZGdldENsYXNzZXNcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlcyA9IE9iamVjdC5rZXlzKGFsbENsYXNzZXMpLm1hcChjc3NDbGFzcyA9PiAoeyBjbGFzczogY3NzQ2xhc3MgfSkpO1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgc3R5bGVzLFxuICAgICAgY2xhc3NOYW1lLnNwbGl0KCctJykucG9wKCksXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuICAgIHJldHVybiAhIXN0eWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0U3R5bGUoc2V0Q2xhc3Nlczogc3RyaW5nW10pIHtcbiAgICBsZXQgY29udGVudENsYXNzID0gdGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzcztcbiAgICBsZXQgaGVhZGVyQ2xhc3MgPSB0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3M7XG4gICAgY29uc3Qgc3R5bGVzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHNldENsYXNzZXMpXG4gICAgICAubWFwKGMgPT4gYy5zcGxpdCgnLScpLnBvcCgpKTtcbiAgICBzdHlsZXMuZm9yRWFjaChzdHlsZU5hbWUgPT4ge1xuICAgICAgY29udGVudENsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfQ09OVEVOVF9DTEFTU0VTLFxuICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgIGNvbnRlbnRDbGFzc1xuICAgICAgKTtcbiAgICAgIGhlYWRlckNsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgaGVhZGVyQ2xhc3NcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBoZWFkZXJDbGFzcywgY29udGVudENsYXNzIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBvc2VXaWRnZXRDb25maWcoc2VsZWN0ZWRDb21wb25lbnQsIGNvbnRleHQgPSB7fSkge1xuICAgIGNvbnN0IHNldHRpbmcgPSB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAuLi5zZWxlY3RlZENvbXBvbmVudC5kYXRhLnNldHRpbmdzLFxuICAgICAgICAuLi5nZXQoc2VsZWN0ZWRDb21wb25lbnQuZGF0YS5zZXR0aW5ncywgJ25nMS5vcHRpb25zJyksXG4gICAgICAgIC4uLmdldChzZWxlY3RlZENvbXBvbmVudC5kYXRhLCAnbmcxLm9wdGlvbnMnKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGFzaGJvYXJkTW86IHRoaXMubW8uYzh5X0Rhc2hib2FyZFxuICAgICAgfSxcbiAgICAgIC4uLnNlbGVjdGVkQ29tcG9uZW50LmRhdGEuY29uZmlnXG4gICAgfSBhcyBDb250ZXh0V2lkZ2V0Q29uZmlnO1xuICAgIHJldHVybiB0aGlzLmFwcGx5VGFyZ2V0SWZEZXZpY2VEYXNoYm9hcmQoc2V0dGluZyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGFyZ2V0SWZEZXZpY2VEYXNoYm9hcmQod2lkZ2V0Q29uZmlnOiBDb250ZXh0V2lkZ2V0Q29uZmlnKSB7XG4gICAgY29uc3QgaXNEZXZpY2VUeXBlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyk7XG5cbiAgICBpZiAoaXNEZXZpY2VUeXBlKSB7XG4gICAgICB3aWRnZXRDb25maWcuc2V0dGluZ3MuaGlkZVRhcmdldCA9IGlzRGV2aWNlVHlwZTtcblxuICAgICAgY29uc3Qgbm9EZXZpY2VUYXJnZXQgPSB3aWRnZXRDb25maWcuc2V0dGluZ3MubmcxXG4gICAgICAgID8gd2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5nMS5vcHRpb25zLm5vRGV2aWNlVGFyZ2V0XG4gICAgICAgIDogd2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0O1xuXG4gICAgICBpZiAoIW5vRGV2aWNlVGFyZ2V0KSB7XG4gICAgICAgIHdpZGdldENvbmZpZy5kZXZpY2UgPSB7XG4gICAgICAgICAgaWQ6IHRoaXMuY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmNvbnRleHQubmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0Q29uZmlnO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHNlcGFyYXRvclwiPlxuICA8ZGl2IGlkPVwibW9kYWwtdGl0bGVcIiBjbGFzcz1cImgzXCIgdGl0bGU9XCJ7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIiAqbmdJZj1cIiFjdXJyZW50XCIgdHJhbnNsYXRlPkFkZCB3aWRnZXQ8L2Rpdj5cbiAgPGRpdiBpZD1cIm1vZGFsLXRpdGxlXCIgY2xhc3M9XCJoM1wiIHRpdGxlPVwie3sgJ0VkaXQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiICpuZ0lmPVwiY3VycmVudFwiIHRyYW5zbGF0ZT5FZGl0IHdpZGdldDwvZGl2PlxuPC9kaXY+XG48Zm9ybSAjY29uZmlnRm9ybT1cIm5nRm9ybVwiIG5hbWU9XCJmb3JtXCI+XG4gIDxkaXYgY2xhc3M9XCJjOHktbW9kYWwtdGFic1wiIGlkPVwibW9kYWwtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJDb250YWluZXJcIj5cbiAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBuYXYtdGFic2M4eSBwLWwtMjRcIj5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwibW9kZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3Qgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKCdzZWxlY3QnKTsgKGZhbHNlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRoLWxhcmdlXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNlbGVjdCB3aWRnZXQ8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBbY2xhc3MuYWN0aXZlXT1cIm1vZGUgPT09ICdjb25maWcnXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQ29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKCdjb25maWcnKTsgKGZhbHNlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNvZ1wiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5Db25maWd1cmF0aW9uPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2RlID09PSAnc3R5bGUnXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQXBwZWFyYW5jZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKCdzdHlsZScpOyAoZmFsc2UpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwicGFpbnQtYnJ1c2hcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+QXBwZWFyYW5jZTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGxcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCJcbiAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMCBwLWwtMjQgcC1yLTI0IHAtdC04IHAtYi04IHN0aWNreS1oZWFkZXItdG9wLTBcIlxuICAgICAgc3R5bGU9XCJ6LWluZGV4OiAyXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2hcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWFyY2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWFyY2jigKYnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJzZWFyY2hDaGFuZ2UkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3RcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldFNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cInNlYXJjaFRlcm0ubGVuZ3RoID09PSAwID8gJ3NlYXJjaCcgOiAnY2xvc2UnXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBiZy1sZXZlbC0yXCIgKm5nSWY9XCJtb2RlID09PSAnc2VsZWN0J1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZ3JvdXAgY2FyZC1zZWxlY3QgbS1iLTBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTQgY29sLXhzLTZcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjbXAgb2Ygc2VhcmNoUmVzdWx0IHx8IGNvbXBvbmVudHNcIlxuICAgICAgICAgIHRpdGxlPVwie3sgY21wLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHAtOFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWQgPT09IGNtcFwiIChjbGljayk9XCJzZWxlY3QoY21wKVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHAtOCBtLWItOCBkLWNvbCBmbGV4LWNlbnRlciBiZy1sZXZlbC0yXCIgcm9sZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjbXAucHJldmlld0ltYWdlOyBlbHNlIHByZXZpZXdJbWFnZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoMVwiPjxpIGM4eUljb249XCJmaWxlLWltYWdlLW9cIj48L2k+PC9kaXY+XG4gICAgICAgICAgICAgICAgPHNtYWxsIHRyYW5zbGF0ZT5QcmV2aWV3IG5vdCBhdmFpbGFibGU8L3NtYWxsPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwcmV2aWV3SW1hZ2U+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1yZXNwb25zaXZlXCIgYWx0PVwiXCIgW3NyY109XCJjbXAucHJldmlld0ltYWdlXCIgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRpdGxlIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICB0ZXh0PVwie3sgY21wLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSB0ZXh0LWNlbnRlclwiICpuZ0lmPVwic2VhcmNoUmVzdWx0ICYmIHNlYXJjaFJlc3VsdC5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaDFcIiBjOHlJY29uPVwic2VhcmNoXCI+PC9kaXY+XG4gICAgICAgICAgPGgzIHRyYW5zbGF0ZT5ObyB3aWRnZXRzIGZvdW5kLjwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgPHAgdHJhbnNsYXRlIGNsYXNzPVwibS1yLThcIj5SZXBocmFzZSB5b3VyIHNlYXJjaCB0ZXJtLjwvcD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVzZXQgc2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNldFNlYXJjaCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ1Jlc2V0IHNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGludGVudGlvbmFsIHNldCB0byBoaWRkZW4gdG8gYWxsb3cgdGhlIFZpZXdDaGlsZCByZWYgaW4gdGhlIGNvbnRyb2xsZXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkXCIgW2hpZGRlbl09XCJtb2RlICE9PSAnY29uZmlnJ1wiIHN0eWxlPVwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDI5MHB4KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNiBmbGV4LW5vLWdyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbC0yNFwiPlxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LWxlZnQgdGV4dC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZC5kZXNjcmlwdGlvbiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXItMjRcIj5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ3aWRnZXRUaXRsZVwiIHRyYW5zbGF0ZT5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cIndpZGdldFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuZGF0YS50aXRsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0ge3sgY29tcG9uZW50TGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93IGZsZXgtZ3JvdyBzZXBhcmF0b3ItdG9wXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZC1mbGV4IG0tbC0wJzogd2lkZ2V0Q29uZmlnLm9wdGlvbnMgfHwgaGFzQ29uZmlnKCkgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0XCJcbiAgICAgICAgICBjbGFzcz1cImEtaS1zdHJldGNoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYmctbGV2ZWwtMSBjb2wtc20tNCBwLWwtMCBwLXItMCc6IGhhc0NvbmZpZygpLFxuICAgICAgICAgICAgJ2JnLWxldmVsLTAgY29sLXNtLTEyJzogIWhhc0NvbmZpZygpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDM2MHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWwtMTYgZml0LWggYmctaW5oZXJpdFwiIFtuZ0NsYXNzXT1cInsgJ3Atci0xNic6ICFoYXNDb25maWcoKSB9XCI+XG4gICAgICAgICAgICA8Yzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlclxuICAgICAgICAgICAgICAob25TZWxlY3RlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgICAgICB2aWV3OiAnbWlsbGVyJyxcbiAgICAgICAgICAgICAgICBncm91cHNTZWxlY3RhYmxlOiB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICBzaG93Q2hpbGREZXZpY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbHVtbkhlYWRlcnM6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hvd1VuYXNzaWduZWREZXZpY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlYXJjaDogIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmNvbnRleHQ/LmFkZGl0aW9uUGFyZW50cyxcbiAgICAgICAgICAgICAgICBzaG93RmlsdGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNpbmdsZUNvbHVtbjogISF0aGlzLmhhc0NvbmZpZygpXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBbYXNzZXRdPVwid2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5jb250ZXh0XCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkRGV2aWNlXT1cInNlbGVjdGVkRGV2aWNlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJiZy1pbmhlcml0IHAtcmVsYXRpdmVcIlxuICAgICAgICAgICAgPjwvYzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnY29sLXNtLTgnOiAhd2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5ub0RldmljZVRhcmdldCxcbiAgICAgICAgICAgICdjb2wtc20tMTIgcC1sLTMyIHAtci04Jzogd2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5ub0RldmljZVRhcmdldFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1keW5hbWljLWNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrIHAtdC04IHAtci0yNFwiXG4gICAgICAgICAgICBbY29tcG9uZW50SWRdPVwic2VsZWN0ZWQuaWRcIlxuICAgICAgICAgICAgbW9kZT1cImNvbmZpZ1wiXG4gICAgICAgICAgICBbY29uZmlnXT1cIndpZGdldENvbmZpZ1wiXG4gICAgICAgICAgICBbbm90Rm91bmRFcnJvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAjY29uZmlnXG4gICAgICAgICAgPjwvYzh5LWR5bmFtaWMtY29tcG9uZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdzdHlsZSdcIiBjbGFzcz1cIm1vZGFsLWJvZHkgcC10LTBcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSAyOTBweClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02XCI+XG4gICAgICAgICAgPGM4eS1hcHBlYXJhbmNlLXNldHRpbmdzXG4gICAgICAgICAgICBbKHRoZW1lQ2xhc3MpXT1cInN0eWxpbmcuY29udGVudENsYXNzXCJcbiAgICAgICAgICAgIFsoaGVhZGVyQ2xhc3MpXT1cInN0eWxpbmcuaGVhZGVyQ2xhc3NcIlxuICAgICAgICAgICAgW3Bvc3NpYmxlU3R5bGluZ1RoZW1lXT1cInBvc3NpYmxlU3R5bGluZy5XSURHRVRfQ09OVEVOVF9DTEFTU0VTXCJcbiAgICAgICAgICAgIFtwb3NzaWJsZVN0eWxpbmdIZWFkZXJdPVwicG9zc2libGVTdHlsaW5nLldJREdFVF9IRUFERVJfQ0xBU1NFU1wiXG4gICAgICAgICAgICBbZGVmYXVsdFRoZW1lQ2xhc3NdPVwiZGVmYXVsdFN0eWxpbmcuY29udGVudENsYXNzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0SGVhZGVyQ2xhc3NdPVwiZGVmYXVsdFN0eWxpbmcuaGVhZGVyQ2xhc3NcIlxuICAgICAgICAgID48L2M4eS1hcHBlYXJhbmNlLXNldHRpbmdzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IHN0aWNreS1oZWFkZXItdG9wLTBcIj5cbiAgICAgICAgICA8Yzh5LXdpZGdldC1wcmV2aWV3IFtwcmV2aWV3Q2xhc3Nlc109XCJnZXRTdHlsZSh0cnVlKVwiPjwvYzh5LXdpZGdldC1wcmV2aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICA+XG4gICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmZvcm1EaXNhYmxlZCB8fCBjb25maWdGb3JtLmludmFsaWQgfHwgY2hlY2tJZkRldmljZVJlcXVpcmVkKClcbiAgICAgIFwiXG4gICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgW2FjdGlvbk5hbWVdPVwiY3VycmVudCA/ICdlZGl0V2lkZ2V0JyA6ICdjcmVhdGVXaWRnZXQnXCJcbiAgICAgIFthY3Rpb25EYXRhXT1cInsgd2lkZ2V0TmFtZTogc2VsZWN0ZWQgJiYgc2VsZWN0ZWQuaWQgfVwiXG4gICAgPlxuICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -106,13 +106,13 @@ export class SmsChallengeComponent {
106
106
  }
107
107
  }
108
108
  SmsChallengeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SmsChallengeComponent, deps: [{ token: i1.LoginService }, { token: i2.UserService }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
109
- SmsChallengeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: SmsChallengeComponent, selector: "c8y-sms-challenge", inputs: { credentials: "credentials" }, outputs: { onCancel: "onCancel" }, ngImport: i0, template: "<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"verifyTFACode()\" novalidate>\n <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n <c8y-form-group>\n <label translate>Verification code</label>\n <input\n [(ngModel)]=\"model.smsToken\"\n #sms_token=\"ngModel\"\n type=\"text\"\n name=\"sms_token\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 624327\"\n required\n />\n <p *ngIf=\"!twoFactorForm.form.valid || isLoading\" class=\"help-block\" translate>\n Insert the code received via SMS.\n </p>\n </c8y-form-group>\n\n <button\n title=\"{{ 'Verify' | translate }}\"\n [disabled]=\"!twoFactorForm.form.valid || isLoading\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Verify' | translate }}\n </button>\n\n <div class=\"d-flex m-t-8\">\n <a\n title=\"{{ 'Send new code' | translate }}\"\n [ngClass]=\"{ disabled: isLoading }\"\n class=\"small pointer m-r-auto\"\n (click)=\"resendTFASms()\"\n >\n {{ 'Send new code' | translate }}\n </a>\n <a title=\"{{ 'Log in' | translate }}\" class=\"small pointer m-l-auto\" (click)=\"onCancel.emit()\">\n {{ 'Log in' | translate }}\n </a>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i6.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i7.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i9.C8yTranslatePipe, name: "translate" }] });
109
+ SmsChallengeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: SmsChallengeComponent, selector: "c8y-sms-challenge", inputs: { credentials: "credentials" }, outputs: { onCancel: "onCancel" }, ngImport: i0, template: "<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"verifyTFACode()\" novalidate>\n <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n <c8y-form-group>\n <label translate>Verification code</label>\n <input\n [(ngModel)]=\"model.smsToken\"\n #sms_token=\"ngModel\"\n type=\"text\"\n name=\"sms_token\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 624327\"\n required\n />\n <p *ngIf=\"!twoFactorForm.form.valid || isLoading\" class=\"help-block\" translate>\n Insert the code received via SMS.\n </p>\n </c8y-form-group>\n\n <button\n title=\"{{ 'Verify' | translate }}\"\n [disabled]=\"!twoFactorForm.form.valid || isLoading\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Verify' | translate }}\n </button>\n\n <div class=\"d-flex m-t-8\">\n <button\n type=\"button\"\n title=\"{{ 'Send new code' | translate }}\"\n [ngClass]=\"{ disabled: isLoading }\"\n class=\"small pointer m-r-auto\"\n (click)=\"resendTFASms()\"\n >\n {{ 'Send new code' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Log in' | translate }}\"\n class=\"btn btn-link btn-sm\"\n (click)=\"onCancel.emit()\"\n >\n {{ 'Log in' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i6.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i7.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i9.C8yTranslatePipe, name: "translate" }] });
110
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SmsChallengeComponent, decorators: [{
111
111
  type: Component,
112
- args: [{ selector: 'c8y-sms-challenge', template: "<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"verifyTFACode()\" novalidate>\n <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n <c8y-form-group>\n <label translate>Verification code</label>\n <input\n [(ngModel)]=\"model.smsToken\"\n #sms_token=\"ngModel\"\n type=\"text\"\n name=\"sms_token\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 624327\"\n required\n />\n <p *ngIf=\"!twoFactorForm.form.valid || isLoading\" class=\"help-block\" translate>\n Insert the code received via SMS.\n </p>\n </c8y-form-group>\n\n <button\n title=\"{{ 'Verify' | translate }}\"\n [disabled]=\"!twoFactorForm.form.valid || isLoading\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Verify' | translate }}\n </button>\n\n <div class=\"d-flex m-t-8\">\n <a\n title=\"{{ 'Send new code' | translate }}\"\n [ngClass]=\"{ disabled: isLoading }\"\n class=\"small pointer m-r-auto\"\n (click)=\"resendTFASms()\"\n >\n {{ 'Send new code' | translate }}\n </a>\n <a title=\"{{ 'Log in' | translate }}\" class=\"small pointer m-l-auto\" (click)=\"onCancel.emit()\">\n {{ 'Log in' | translate }}\n </a>\n </div>\n</form>\n" }]
112
+ args: [{ selector: 'c8y-sms-challenge', template: "<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"verifyTFACode()\" novalidate>\n <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n <c8y-form-group>\n <label translate>Verification code</label>\n <input\n [(ngModel)]=\"model.smsToken\"\n #sms_token=\"ngModel\"\n type=\"text\"\n name=\"sms_token\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 624327\"\n required\n />\n <p *ngIf=\"!twoFactorForm.form.valid || isLoading\" class=\"help-block\" translate>\n Insert the code received via SMS.\n </p>\n </c8y-form-group>\n\n <button\n title=\"{{ 'Verify' | translate }}\"\n [disabled]=\"!twoFactorForm.form.valid || isLoading\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Verify' | translate }}\n </button>\n\n <div class=\"d-flex m-t-8\">\n <button\n type=\"button\"\n title=\"{{ 'Send new code' | translate }}\"\n [ngClass]=\"{ disabled: isLoading }\"\n class=\"small pointer m-r-auto\"\n (click)=\"resendTFASms()\"\n >\n {{ 'Send new code' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Log in' | translate }}\"\n class=\"btn btn-link btn-sm\"\n (click)=\"onCancel.emit()\"\n >\n {{ 'Log in' | translate }}\n </button>\n </div>\n</form>\n" }]
113
113
  }], ctorParameters: function () { return [{ type: i1.LoginService }, { type: i2.UserService }, { type: i3.AlertService }]; }, propDecorators: { credentials: [{
114
114
  type: Input
115
115
  }], onCancel: [{
116
116
  type: Output
117
117
  }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21zLWNoYWxsZW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2F1dGhlbnRpY2F0aW9uL3Ntcy1jaGFsbGVuZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9hdXRoZW50aWNhdGlvbi9zbXMtY2hhbGxlbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyxxQkFBcUI7SUFXaEMsWUFDUyxZQUEwQixFQUN6QixLQUFrQixFQUNsQixLQUFtQjtRQUZwQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFhO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFabkIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFeEMsVUFBSyxHQUFHO1lBQ04sUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDO1FBQ0YsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVWLGNBQVMsR0FBVyxHQUFHLENBQUM7SUFNN0IsQ0FBQztJQUVKLEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUNsQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NB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Q0FBQyxZQUFZLENBQUMsUUFBUTtRQUNqQyxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN6RCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDeEQ7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7O2tIQTlGVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixvSUNYbEMsMDFDQTJDQTsyRkRoQ2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjt3SkFLcEIsV0FBVztzQkFBbkIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlLCBJQ3JlZGVudGlhbHMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zbXMtY2hhbGxlbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Ntcy1jaGFsbGVuZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFNtc0NoYWxsZW5nZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHM7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBtb2RlbCA9IHtcbiAgICBzbXNUb2tlbjogJydcbiAgfTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZXNlbmRUZmE6IHN0cmluZyA9ICcwJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyczogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyB2ZXJpZnlURkFDb2RlKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBpZiAoYXdhaXQgdGhpcy51c2VzT0F1dGhJbnRlcm5hbCgpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZlcmlmeUNvZGVXaXRoT2F1dGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy52ZXJpZnlDb2RlV2l0aEJhc2ljQXV0aCgpO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVzZW5kVEZBU21zKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLnVzZXJzLnZlcmlmeVRGQUNvZGUodGhpcy5yZXNlbmRUZmEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLnJlcy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5jbGVhbk1lc3NhZ2VzKCk7XG4gICAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmFkZFN1Y2Nlc3NNZXNzYWdlKCdyZXNlbmRfc21zJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1c2VzT0F1dGhJbnRlcm5hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpblNlcnZpY2UuaXNQYXNzd29yZEdyYW50TG9naW4odGhpcy5jcmVkZW50aWFscyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZlcmlmeUNvZGVXaXRoT2F1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgY3JlZGVudGlhbHMgfSA9IHRoaXM7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZS5zd2l0Y2hMb2dpbk1vZGUoeyAuLi5jcmVkZW50aWFscywgdGZhOiB0aGlzLm1vZGVsLnNtc1Rva2VuIH0pO1xuICAgICAgYXdhaXQgdGhpcy5sb2dpblNlcnZpY2UudmVyaWZ5QXBwQWNjZXNzKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZS5hdXRoRnVsZmlsbGVkKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgcmVzU3RhdHVzID0gZS5yZXMgJiYgZS5yZXMuc3RhdHVzO1xuICAgICAgaWYgKHJlc1N0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgIC8vIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdXNlciBhbmQgcGFzc3dvcmQgYXJlIGNvcnJlY3Qgc28gaXQgbXVzdCBiZSB0aGUgdGZhIGNvZGVcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnSW52YWxpZCBjb2RlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5Q29kZVdpdGhCYXNpY0F1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcmVzIH0gPSBhd2FpdCB0aGlzLnVzZXJzLnZlcmlmeVRGQUNvZGUodGhpcy5tb2RlbC5zbXNUb2tlbik7XG4gICAgICBjb25zdCB0ZmFUb2tlbiA9IHJlcy5oZWFkZXJzLmdldCgndGZhdG9rZW4nKTtcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMudGZhID0gdGZhVG9rZW47XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luV2l0aFRGQSh0ZmFUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgcmVzU3RhdHVzID0gZS5yZXMgJiYgZS5yZXMuc3RhdHVzO1xuICAgICAgLy8gQkUgcmV0dXJucyA0MDMgaW4gY2FzZSBvZiBpbnZhbGlkIHRmYSBjb2RlXG4gICAgICBpZiAocmVzU3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnSW52YWxpZCBjb2RlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9naW5XaXRoVEZBKHRmYVRva2VuKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luKFxuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS51c2VCYXNpY0F1dGgoeyB0ZmE6IHRmYVRva2VuIH0pLFxuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dpblNlcnZpY2Uuc2F2ZVRGQVRva2VuKHRmYVRva2VuLCBzZXNzaW9uU3RvcmFnZSk7XG4gICAgICBpZiAodGhpcy5sb2dpblNlcnZpY2UucmVtZW1iZXJNZSkge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5zYXZlVEZBVG9rZW4odGZhVG9rZW4sIGxvY2FsU3RvcmFnZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gI3R3b0ZhY3RvckZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cImxvZ2luRm9ybVwiIChuZ1N1Ym1pdCk9XCJ2ZXJpZnlURkFDb2RlKClcIiBub3ZhbGlkYXRlPlxuICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2sgY2VudGVyXCIgdHJhbnNsYXRlPlR3by1mYWN0b3IgYXV0aGVudGljYXRpb248L2Rpdj5cblxuICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgPGxhYmVsIHRyYW5zbGF0ZT5WZXJpZmljYXRpb24gY29kZTwvbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLnNtc1Rva2VuXCJcbiAgICAgICNzbXNfdG9rZW49XCJuZ01vZGVsXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIG5hbWU9XCJzbXNfdG9rZW5cIlxuICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gNjI0MzI3XCJcbiAgICAgIHJlcXVpcmVkXG4gICAgLz5cbiAgICA8cCAqbmdJZj1cIiF0d29GYWN0b3JGb3JtLmZvcm0udmFsaWQgfHwgaXNMb2FkaW5nXCIgY2xhc3M9XCJoZWxwLWJsb2NrXCIgdHJhbnNsYXRlPlxuICAgICAgSW5zZXJ0IHRoZSBjb2RlIHJlY2VpdmVkIHZpYSBTTVMuXG4gICAgPC9wPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdWZXJpZnknIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbZGlzYWJsZWRdPVwiIXR3b0ZhY3RvckZvcm0uZm9ybS52YWxpZCB8fCBpc0xvYWRpbmdcIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgZm9ybS1ncm91cFwiXG4gID5cbiAgICB7eyAnVmVyaWZ5JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG0tdC04XCI+XG4gICAgPGFcbiAgICAgIHRpdGxlPVwie3sgJ1NlbmQgbmV3IGNvZGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGlzTG9hZGluZyB9XCJcbiAgICAgIGNsYXNzPVwic21hbGwgcG9pbnRlciBtLXItYXV0b1wiXG4gICAgICAoY2xpY2spPVwicmVzZW5kVEZBU21zKClcIlxuICAgID5cbiAgICAgIHt7ICdTZW5kIG5ldyBjb2RlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYT5cbiAgICA8YSB0aXRsZT1cInt7ICdMb2cgaW4nIHwgdHJhbnNsYXRlIH19XCIgY2xhc3M9XCJzbWFsbCBwb2ludGVyIG0tbC1hdXRvXCIgKGNsaWNrKT1cIm9uQ2FuY2VsLmVtaXQoKVwiPlxuICAgICAge3sgJ0xvZyBpbicgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21zLWNoYWxsZW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2F1dGhlbnRpY2F0aW9uL3Ntcy1jaGFsbGVuZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9hdXRoZW50aWNhdGlvbi9zbXMtY2hhbGxlbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyxxQkFBcUI7SUFXaEMsWUFDUyxZQUEwQixFQUN6QixLQUFrQixFQUNsQixLQUFtQjtRQUZwQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFhO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFabkIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFeEMsVUFBSyxHQUFHO1lBQ04sUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDO1FBQ0YsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVWLGNBQVMsR0FBVyxHQUFHLENBQUM7SUFNN0IsQ0FBQztJQUVKLEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUNsQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQ2xDO2FBQU07WUFDTCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUk7WUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQztTQUNGO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQjtRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CO1FBQy9CLElBQUk7WUFDRixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDekM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEMsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFO2dCQUNyQixrRkFBa0Y7Z0JBQ2xGLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2FBQzVDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEM7U0FDRjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCO1FBQ25DLElBQUk7WUFDRixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztZQUNoQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEMsNkNBQTZDO1lBQzdDLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUTtRQUNqQyxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN6RCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDeEQ7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7O2tIQTlGVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixvSUNYbEMsbzdDQWlEQTsyRkR0Q2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjt3SkFLcEIsV0FBVztzQkFBbkIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlLCBJQ3JlZGVudGlhbHMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zbXMtY2hhbGxlbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Ntcy1jaGFsbGVuZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFNtc0NoYWxsZW5nZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHM7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBtb2RlbCA9IHtcbiAgICBzbXNUb2tlbjogJydcbiAgfTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZXNlbmRUZmE6IHN0cmluZyA9ICcwJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyczogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyB2ZXJpZnlURkFDb2RlKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBpZiAoYXdhaXQgdGhpcy51c2VzT0F1dGhJbnRlcm5hbCgpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZlcmlmeUNvZGVXaXRoT2F1dGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy52ZXJpZnlDb2RlV2l0aEJhc2ljQXV0aCgpO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVzZW5kVEZBU21zKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLnVzZXJzLnZlcmlmeVRGQUNvZGUodGhpcy5yZXNlbmRUZmEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLnJlcy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5jbGVhbk1lc3NhZ2VzKCk7XG4gICAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmFkZFN1Y2Nlc3NNZXNzYWdlKCdyZXNlbmRfc21zJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1c2VzT0F1dGhJbnRlcm5hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpblNlcnZpY2UuaXNQYXNzd29yZEdyYW50TG9naW4odGhpcy5jcmVkZW50aWFscyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZlcmlmeUNvZGVXaXRoT2F1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgY3JlZGVudGlhbHMgfSA9IHRoaXM7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZS5zd2l0Y2hMb2dpbk1vZGUoeyAuLi5jcmVkZW50aWFscywgdGZhOiB0aGlzLm1vZGVsLnNtc1Rva2VuIH0pO1xuICAgICAgYXdhaXQgdGhpcy5sb2dpblNlcnZpY2UudmVyaWZ5QXBwQWNjZXNzKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZS5hdXRoRnVsZmlsbGVkKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgcmVzU3RhdHVzID0gZS5yZXMgJiYgZS5yZXMuc3RhdHVzO1xuICAgICAgaWYgKHJlc1N0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgIC8vIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdXNlciBhbmQgcGFzc3dvcmQgYXJlIGNvcnJlY3Qgc28gaXQgbXVzdCBiZSB0aGUgdGZhIGNvZGVcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnSW52YWxpZCBjb2RlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5Q29kZVdpdGhCYXNpY0F1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcmVzIH0gPSBhd2FpdCB0aGlzLnVzZXJzLnZlcmlmeVRGQUNvZGUodGhpcy5tb2RlbC5zbXNUb2tlbik7XG4gICAgICBjb25zdCB0ZmFUb2tlbiA9IHJlcy5oZWFkZXJzLmdldCgndGZhdG9rZW4nKTtcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMudGZhID0gdGZhVG9rZW47XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luV2l0aFRGQSh0ZmFUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgcmVzU3RhdHVzID0gZS5yZXMgJiYgZS5yZXMuc3RhdHVzO1xuICAgICAgLy8gQkUgcmV0dXJucyA0MDMgaW4gY2FzZSBvZiBpbnZhbGlkIHRmYSBjb2RlXG4gICAgICBpZiAocmVzU3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnSW52YWxpZCBjb2RlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9naW5XaXRoVEZBKHRmYVRva2VuKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luKFxuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS51c2VCYXNpY0F1dGgoeyB0ZmE6IHRmYVRva2VuIH0pLFxuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dpblNlcnZpY2Uuc2F2ZVRGQVRva2VuKHRmYVRva2VuLCBzZXNzaW9uU3RvcmFnZSk7XG4gICAgICBpZiAodGhpcy5sb2dpblNlcnZpY2UucmVtZW1iZXJNZSkge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5zYXZlVEZBVG9rZW4odGZhVG9rZW4sIGxvY2FsU3RvcmFnZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gI3R3b0ZhY3RvckZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cImxvZ2luRm9ybVwiIChuZ1N1Ym1pdCk9XCJ2ZXJpZnlURkFDb2RlKClcIiBub3ZhbGlkYXRlPlxuICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2sgY2VudGVyXCIgdHJhbnNsYXRlPlR3by1mYWN0b3IgYXV0aGVudGljYXRpb248L2Rpdj5cblxuICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgPGxhYmVsIHRyYW5zbGF0ZT5WZXJpZmljYXRpb24gY29kZTwvbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLnNtc1Rva2VuXCJcbiAgICAgICNzbXNfdG9rZW49XCJuZ01vZGVsXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIG5hbWU9XCJzbXNfdG9rZW5cIlxuICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gNjI0MzI3XCJcbiAgICAgIHJlcXVpcmVkXG4gICAgLz5cbiAgICA8cCAqbmdJZj1cIiF0d29GYWN0b3JGb3JtLmZvcm0udmFsaWQgfHwgaXNMb2FkaW5nXCIgY2xhc3M9XCJoZWxwLWJsb2NrXCIgdHJhbnNsYXRlPlxuICAgICAgSW5zZXJ0IHRoZSBjb2RlIHJlY2VpdmVkIHZpYSBTTVMuXG4gICAgPC9wPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdWZXJpZnknIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbZGlzYWJsZWRdPVwiIXR3b0ZhY3RvckZvcm0uZm9ybS52YWxpZCB8fCBpc0xvYWRpbmdcIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgZm9ybS1ncm91cFwiXG4gID5cbiAgICB7eyAnVmVyaWZ5JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG0tdC04XCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cInt7ICdTZW5kIG5ldyBjb2RlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpc0xvYWRpbmcgfVwiXG4gICAgICBjbGFzcz1cInNtYWxsIHBvaW50ZXIgbS1yLWF1dG9cIlxuICAgICAgKGNsaWNrKT1cInJlc2VuZFRGQVNtcygpXCJcbiAgICA+XG4gICAgICB7eyAnU2VuZCBuZXcgY29kZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwie3sgJ0xvZyBpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCJcbiAgICAgIChjbGljayk9XCJvbkNhbmNlbC5lbWl0KClcIlxuICAgID5cbiAgICAgIHt7ICdMb2cgaW4nIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -24,10 +24,10 @@ import * as i3 from "../../i18n/c8y-translate.pipe";
24
24
  export class EmptyStateComponent {
25
25
  }
26
26
  EmptyStateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27
- EmptyStateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: { icon: "icon", title: "title", subtitle: "subtitle", horizontal: "horizontal" }, ngImport: i0, template: "<div class=\"c8y-empty-state\" [ngClass]=\"{ 'c8y-empty-state--horizontal': horizontal }\">\n <i [c8yIcon]=\"icon\" class=\"c8y-icon-duocolor\"></i>\n\n <ng-container *ngIf=\"!horizontal\">\n <div>\n <h3 class=\"text-medium p-b-4\">{{ title | translate }}</h3>\n <p *ngIf=\"subtitle\">{{ subtitle | translate }}</p>\n <div class=\"p-t-16\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"horizontal\">\n <div class=\"d-flex d-col j-c-center\">\n <p class=\"text-medium a-s-start\">{{ title | translate }}</p>\n <p *ngIf=\"subtitle\" class=\"small a-s-start\">{{ subtitle | translate }}</p>\n <div class=\"small a-s-start\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
27
+ EmptyStateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: { icon: "icon", title: "title", subtitle: "subtitle", horizontal: "horizontal" }, ngImport: i0, template: "<div class=\"c8y-empty-state\" [ngClass]=\"{ 'c8y-empty-state--horizontal': horizontal }\">\n <i [c8yIcon]=\"icon\" class=\"c8y-icon-duocolor\"></i>\n\n <ng-container *ngIf=\"!horizontal\">\n <div>\n <h3 class=\"text-medium\">{{ title | translate }}</h3>\n <p class=\"p-b-16\" *ngIf=\"subtitle\">{{ subtitle | translate }}</p>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"horizontal\">\n <div class=\"d-flex d-col j-c-center\">\n <p class=\"text-medium a-s-start\">{{ title | translate }}</p>\n <p *ngIf=\"subtitle\" class=\"small a-s-start\">{{ subtitle | translate }}</p>\n <div class=\"small a-s-start\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
28
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EmptyStateComponent, decorators: [{
29
29
  type: Component,
30
- args: [{ selector: 'c8y-ui-empty-state', template: "<div class=\"c8y-empty-state\" [ngClass]=\"{ 'c8y-empty-state--horizontal': horizontal }\">\n <i [c8yIcon]=\"icon\" class=\"c8y-icon-duocolor\"></i>\n\n <ng-container *ngIf=\"!horizontal\">\n <div>\n <h3 class=\"text-medium p-b-4\">{{ title | translate }}</h3>\n <p *ngIf=\"subtitle\">{{ subtitle | translate }}</p>\n <div class=\"p-t-16\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"horizontal\">\n <div class=\"d-flex d-col j-c-center\">\n <p class=\"text-medium a-s-start\">{{ title | translate }}</p>\n <p *ngIf=\"subtitle\" class=\"small a-s-start\">{{ subtitle | translate }}</p>\n <div class=\"small a-s-start\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</div>\n" }]
30
+ args: [{ selector: 'c8y-ui-empty-state', template: "<div class=\"c8y-empty-state\" [ngClass]=\"{ 'c8y-empty-state--horizontal': horizontal }\">\n <i [c8yIcon]=\"icon\" class=\"c8y-icon-duocolor\"></i>\n\n <ng-container *ngIf=\"!horizontal\">\n <div>\n <h3 class=\"text-medium\">{{ title | translate }}</h3>\n <p class=\"p-b-16\" *ngIf=\"subtitle\">{{ subtitle | translate }}</p>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"horizontal\">\n <div class=\"d-flex d-col j-c-center\">\n <p class=\"text-medium a-s-start\">{{ title | translate }}</p>\n <p *ngIf=\"subtitle\" class=\"small a-s-start\">{{ subtitle | translate }}</p>\n <div class=\"small a-s-start\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</div>\n" }]
31
31
  }], propDecorators: { icon: [{
32
32
  type: Input
33
33
  }], title: [{
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
37
37
  }], horizontal: [{
38
38
  type: Input
39
39
  }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUtILE1BQU0sT0FBTyxtQkFBbUI7O2dIQUFuQixtQkFBbUI7b0dBQW5CLG1CQUFtQixvSkN4QmhDLDg3QkEyQkE7MkZESGEsbUJBQW1CO2tCQUovQixTQUFTOytCQUNFLG9CQUFvQjs4QkFLckIsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdG8gc2hvdyBnZW5lcmljIGVtcHR5IHN0YXRlLlxuICogVGl0bGUgYW5kIHN1YnRpdGxlIHNob3VsZCBiZSB1c2VkIHdpdGggdHJhbnNsYXRlIHBpcGUgdG8gbWFyayBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbi5cbiAqIENvbXBvbmVudCBjYW4gYmUgZGlzcGxheWVkIHZlcnRpY2FsbHkgKGRlZmF1bHQpIG9yIGhvcml6b250YWxseS5cbiAqIEFkZGl0aW9uYWwgbWFya3VwIGVsZW1lbnRzIGNhbiBiZSBwbGFjZWQgaW5zaWRlIHRoZSB0YWcuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxjOHktdWktZW1wdHktc3RhdGVcbiAqICAgW2ljb25dPVwiJ2M4eS1pY29uJ1wiXG4gKiAgIFt0aXRsZV09XCInUGxhY2UgeW91ciB0aXRsZSBoZXJlJyB8IHRyYW5zbGF0ZVwiXG4gKiAgIFtzdWJ0aXRsZV09XCInUGxhY2UgeW91ciBzdWJ0aXRsZSBoZXJlJyB8IHRyYW5zbGF0ZVwiXG4gKiAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICogPlxuICogICAoLi4uKVxuICogPC9jOHktdWktZW1wdHktc3RhdGU+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXVpLWVtcHR5LXN0YXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IHtcbiAgLyoqIEljb24gbmFtZS4gKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuICAvKiogUmVxdWlyZWQgdGl0bGUuICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBzdWJ0aXRsZS4gKi9cbiAgQElucHV0KCkgc3VidGl0bGU6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBpdCBpbiBob3Jpem9udGFsIGxheW91dC4gKi9cbiAgQElucHV0KCkgaG9yaXpvbnRhbDogYm9vbGVhbjtcbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktZW1wdHktc3RhdGVcIiBbbmdDbGFzc109XCJ7ICdjOHktZW1wdHktc3RhdGUtLWhvcml6b250YWwnOiBob3Jpem9udGFsIH1cIj5cbiAgPGkgW2M4eUljb25dPVwiaWNvblwiIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3JcIj48L2k+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFob3Jpem9udGFsXCI+XG4gICAgPGRpdj5cbiAgICAgIDxoMyBjbGFzcz1cInRleHQtbWVkaXVtIHAtYi00XCI+e3sgdGl0bGUgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgPHAgKm5nSWY9XCJzdWJ0aXRsZVwiPnt7IHN1YnRpdGxlIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJob3Jpem9udGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBkLWNvbCBqLWMtY2VudGVyXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIGEtcy1zdGFydFwiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgPHAgKm5nSWY9XCJzdWJ0aXRsZVwiIGNsYXNzPVwic21hbGwgYS1zLXN0YXJ0XCI+e3sgc3VidGl0bGUgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwic21hbGwgYS1zLXN0YXJ0XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUtILE1BQU0sT0FBTyxtQkFBbUI7O2dIQUFuQixtQkFBbUI7b0dBQW5CLG1CQUFtQixvSkN4QmhDLDI1QkF5QkE7MkZERGEsbUJBQW1CO2tCQUovQixTQUFTOytCQUNFLG9CQUFvQjs4QkFLckIsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdG8gc2hvdyBnZW5lcmljIGVtcHR5IHN0YXRlLlxuICogVGl0bGUgYW5kIHN1YnRpdGxlIHNob3VsZCBiZSB1c2VkIHdpdGggdHJhbnNsYXRlIHBpcGUgdG8gbWFyayBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbi5cbiAqIENvbXBvbmVudCBjYW4gYmUgZGlzcGxheWVkIHZlcnRpY2FsbHkgKGRlZmF1bHQpIG9yIGhvcml6b250YWxseS5cbiAqIEFkZGl0aW9uYWwgbWFya3VwIGVsZW1lbnRzIGNhbiBiZSBwbGFjZWQgaW5zaWRlIHRoZSB0YWcuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxjOHktdWktZW1wdHktc3RhdGVcbiAqICAgW2ljb25dPVwiJ2M4eS1pY29uJ1wiXG4gKiAgIFt0aXRsZV09XCInUGxhY2UgeW91ciB0aXRsZSBoZXJlJyB8IHRyYW5zbGF0ZVwiXG4gKiAgIFtzdWJ0aXRsZV09XCInUGxhY2UgeW91ciBzdWJ0aXRsZSBoZXJlJyB8IHRyYW5zbGF0ZVwiXG4gKiAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICogPlxuICogICAoLi4uKVxuICogPC9jOHktdWktZW1wdHktc3RhdGU+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXVpLWVtcHR5LXN0YXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IHtcbiAgLyoqIEljb24gbmFtZS4gKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuICAvKiogUmVxdWlyZWQgdGl0bGUuICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBzdWJ0aXRsZS4gKi9cbiAgQElucHV0KCkgc3VidGl0bGU6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBpdCBpbiBob3Jpem9udGFsIGxheW91dC4gKi9cbiAgQElucHV0KCkgaG9yaXpvbnRhbDogYm9vbGVhbjtcbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktZW1wdHktc3RhdGVcIiBbbmdDbGFzc109XCJ7ICdjOHktZW1wdHktc3RhdGUtLWhvcml6b250YWwnOiBob3Jpem9udGFsIH1cIj5cbiAgPGkgW2M4eUljb25dPVwiaWNvblwiIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3JcIj48L2k+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFob3Jpem9udGFsXCI+XG4gICAgPGRpdj5cbiAgICAgIDxoMyBjbGFzcz1cInRleHQtbWVkaXVtXCI+e3sgdGl0bGUgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgPHAgY2xhc3M9XCJwLWItMTZcIiAqbmdJZj1cInN1YnRpdGxlXCI+e3sgc3VidGl0bGUgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaG9yaXpvbnRhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgai1jLWNlbnRlclwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBhLXMtc3RhcnRcIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgIDxwICpuZ0lmPVwic3VidGl0bGVcIiBjbGFzcz1cInNtYWxsIGEtcy1zdGFydFwiPnt7IHN1YnRpdGxlIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIGEtcy1zdGFydFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
@@ -41,11 +41,11 @@ export class RecoverPasswordComponent {
41
41
  }
42
42
  }
43
43
  RecoverPasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RecoverPasswordComponent, deps: [{ token: i1.UserService }, { token: i2.LoginService }], target: i0.ɵɵFactoryTarget.Component });
44
- RecoverPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: RecoverPasswordComponent, selector: "c8y-recover-password", outputs: { onChangeView: "onChangeView" }, ngImport: i0, template: "<form #resetForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"resetPassword()\" novalidate>\n <div class=\"legend form-block center\" translate>Forgot password?</div>\n <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n <label translate>Tenant ID</label>\n <input\n [(ngModel)]=\"model.tenantId\"\n #tenantId=\"ngModel\"\n type=\"text\"\n name=\"tenantId\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Tenant ID' | translate }}\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Email address</label>\n <input\n [(ngModel)]=\"model.email\"\n #email=\"ngModel\"\n type=\"text\"\n name=\"email\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Email address' | translate }}\"\n email\n required\n />\n </c8y-form-group>\n\n <button\n title=\"{{ 'Reset password' | translate }}\"\n [disabled]=\"!resetForm.form.valid || isLoading\"\n type=\"submit\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Reset password' | translate }}\n </button>\n <div class=\"text-center m-t-8\">\n <p>\n <a\n title=\"{{ 'Login' | translate }}\"\n class=\"btn btn-link btn-sm\"\n (click)=\"onChangeView.emit({ view: LOGIN_VIEWS.Credentials })\"\n >\n {{ 'Login' | translate }}\n </a>\n </p>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i7.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] });
44
+ RecoverPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: RecoverPasswordComponent, selector: "c8y-recover-password", outputs: { onChangeView: "onChangeView" }, ngImport: i0, template: "<form #resetForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"resetPassword()\" novalidate>\n <div class=\"legend form-block center\" translate>Forgot password?</div>\n <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n <label translate>Tenant ID</label>\n <input\n [(ngModel)]=\"model.tenantId\"\n #tenantId=\"ngModel\"\n type=\"text\"\n name=\"tenantId\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Tenant ID' | translate }}\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Email address</label>\n <input\n [(ngModel)]=\"model.email\"\n #email=\"ngModel\"\n type=\"text\"\n name=\"email\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Email address' | translate }}\"\n email\n required\n />\n </c8y-form-group>\n\n <button\n title=\"{{ 'Reset password' | translate }}\"\n [disabled]=\"!resetForm.form.valid || isLoading\"\n type=\"submit\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Reset password' | translate }}\n </button>\n <div class=\"text-center m-t-8\">\n <button\n type=\"button\"\n title=\"{{ 'Login' | translate }}\"\n class=\"btn btn-link btn-sm\"\n (click)=\"onChangeView.emit({ view: LOGIN_VIEWS.Credentials })\"\n >\n {{ 'Login' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i7.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] });
45
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RecoverPasswordComponent, decorators: [{
46
46
  type: Component,
47
- args: [{ selector: 'c8y-recover-password', template: "<form #resetForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"resetPassword()\" novalidate>\n <div class=\"legend form-block center\" translate>Forgot password?</div>\n <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n <label translate>Tenant ID</label>\n <input\n [(ngModel)]=\"model.tenantId\"\n #tenantId=\"ngModel\"\n type=\"text\"\n name=\"tenantId\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Tenant ID' | translate }}\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Email address</label>\n <input\n [(ngModel)]=\"model.email\"\n #email=\"ngModel\"\n type=\"text\"\n name=\"email\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Email address' | translate }}\"\n email\n required\n />\n </c8y-form-group>\n\n <button\n title=\"{{ 'Reset password' | translate }}\"\n [disabled]=\"!resetForm.form.valid || isLoading\"\n type=\"submit\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Reset password' | translate }}\n </button>\n <div class=\"text-center m-t-8\">\n <p>\n <a\n title=\"{{ 'Login' | translate }}\"\n class=\"btn btn-link btn-sm\"\n (click)=\"onChangeView.emit({ view: LOGIN_VIEWS.Credentials })\"\n >\n {{ 'Login' | translate }}\n </a>\n </p>\n </div>\n</form>\n" }]
47
+ args: [{ selector: 'c8y-recover-password', template: "<form #resetForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"resetPassword()\" novalidate>\n <div class=\"legend form-block center\" translate>Forgot password?</div>\n <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n <label translate>Tenant ID</label>\n <input\n [(ngModel)]=\"model.tenantId\"\n #tenantId=\"ngModel\"\n type=\"text\"\n name=\"tenantId\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Tenant ID' | translate }}\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Email address</label>\n <input\n [(ngModel)]=\"model.email\"\n #email=\"ngModel\"\n type=\"text\"\n name=\"email\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n class=\"form-control\"\n placeholder=\"{{ 'Email address' | translate }}\"\n email\n required\n />\n </c8y-form-group>\n\n <button\n title=\"{{ 'Reset password' | translate }}\"\n [disabled]=\"!resetForm.form.valid || isLoading\"\n type=\"submit\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n >\n {{ 'Reset password' | translate }}\n </button>\n <div class=\"text-center m-t-8\">\n <button\n type=\"button\"\n title=\"{{ 'Login' | translate }}\"\n class=\"btn btn-link btn-sm\"\n (click)=\"onChangeView.emit({ view: LOGIN_VIEWS.Credentials })\"\n >\n {{ 'Login' | translate }}\n </button>\n </div>\n</form>\n" }]
48
48
  }], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.LoginService }]; }, propDecorators: { onChangeView: [{
49
49
  type: Output
50
50
  }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Zlci1wYXNzd29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2xvZ2luL3JlY292ZXItcGFzc3dvcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9sb2dpbi9yZWNvdmVyLXBhc3N3b3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBTzNDLE1BQU0sT0FBTyx3QkFBd0I7SUFTbkMsWUFBb0IsS0FBa0IsRUFBUyxZQUEwQjtRQUFyRCxVQUFLLEdBQUwsS0FBSyxDQUFhO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSL0QsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsVUFBSyxHQUFHO1lBQ04sS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7SUFFMEUsQ0FBQztJQUU3RSxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsSUFBSTtZQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLENBQUM7YUFDakU7U0FDRjtnQkFBUztZQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7SUFDSCxDQUFDOztxSEExQlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsdUdDVnJDLG9oREFxREE7MkZEM0NhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxzQkFBc0I7NkhBS3RCLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2luVmlld3MgfSBmcm9tICcuL2xvZ2luLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXJlY292ZXItcGFzc3dvcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVjb3Zlci1wYXNzd29yZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgUmVjb3ZlclBhc3N3b3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQE91dHB1dCgpIG9uQ2hhbmdlVmlldyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgTE9HSU5fVklFV1MgPSBMb2dpblZpZXdzO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgbW9kZWwgPSB7XG4gICAgZW1haWw6ICcnLFxuICAgIHRlbmFudElkOiAnJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXNlcnM6IFVzZXJTZXJ2aWNlLCBwdWJsaWMgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tb2RlbC50ZW5hbnRJZCA9IHRoaXMubG9naW5TZXJ2aWNlLmdldFRlbmFudCgpO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRQYXNzd29yZCgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgeyByZXMgfSA9IGF3YWl0IHRoaXMudXNlcnMuc2VuZFBhc3N3b3JkUmVzZXRNYWlsKHRoaXMubW9kZWwuZW1haWwsIHRoaXMubW9kZWwudGVuYW50SWQpO1xuICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5hZGRTdWNjZXNzTWVzc2FnZSgncGFzc3dvcmRfcmVzZXRfcmVxdWVzdGVkJyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLnJlc2V0KCk7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gI3Jlc2V0Rm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwibG9naW5Gb3JtXCIgKG5nU3VibWl0KT1cInJlc2V0UGFzc3dvcmQoKVwiIG5vdmFsaWRhdGU+XG4gIDxkaXYgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9jayBjZW50ZXJcIiB0cmFuc2xhdGU+Rm9yZ290IHBhc3N3b3JkPzwvZGl2PlxuICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJ0ZW5hbnRGaWVsZFwiIGlkPVwidGVuYW50RmllbGRcIiAqbmdJZj1cImxvZ2luU2VydmljZS5zaG93VGVuYW50KClcIj5cbiAgICA8bGFiZWwgdHJhbnNsYXRlPlRlbmFudCBJRDwvbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLnRlbmFudElkXCJcbiAgICAgICN0ZW5hbnRJZD1cIm5nTW9kZWxcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgbmFtZT1cInRlbmFudElkXCJcbiAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RlbmFudCBJRCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgcmVxdWlyZWRcbiAgICAvPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxjOHktZm9ybS1ncm91cD5cbiAgICA8bGFiZWwgdHJhbnNsYXRlPkVtYWlsIGFkZHJlc3M8L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5lbWFpbFwiXG4gICAgICAjZW1haWw9XCJuZ01vZGVsXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIG5hbWU9XCJlbWFpbFwiXG4gICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiXG4gICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cInt7ICdFbWFpbCBhZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBlbWFpbFxuICAgICAgcmVxdWlyZWRcbiAgICAvPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdSZXNldCBwYXNzd29yZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIFtkaXNhYmxlZF09XCIhcmVzZXRGb3JtLmZvcm0udmFsaWQgfHwgaXNMb2FkaW5nXCJcbiAgICB0eXBlPVwic3VibWl0XCJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGZvcm0tZ3JvdXBcIlxuICA+XG4gICAge3sgJ1Jlc2V0IHBhc3N3b3JkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG0tdC04XCI+XG4gICAgPHA+XG4gICAgICA8YVxuICAgICAgICB0aXRsZT1cInt7ICdMb2dpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIlxuICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VWaWV3LmVtaXQoeyB2aWV3OiBMT0dJTl9WSUVXUy5DcmVkZW50aWFscyB9KVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdMb2dpbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYT5cbiAgICA8L3A+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Zlci1wYXNzd29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2xvZ2luL3JlY292ZXItcGFzc3dvcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9sb2dpbi9yZWNvdmVyLXBhc3N3b3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBTzNDLE1BQU0sT0FBTyx3QkFBd0I7SUFTbkMsWUFBb0IsS0FBa0IsRUFBUyxZQUEwQjtRQUFyRCxVQUFLLEdBQUwsS0FBSyxDQUFhO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSL0QsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsVUFBSyxHQUFHO1lBQ04sS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7SUFFMEUsQ0FBQztJQUU3RSxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsSUFBSTtZQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLENBQUM7YUFDakU7U0FDRjtnQkFBUztZQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7SUFDSCxDQUFDOztxSEExQlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsdUdDVnJDLG9oREFvREE7MkZEMUNhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxzQkFBc0I7NkhBS3RCLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2luVmlld3MgfSBmcm9tICcuL2xvZ2luLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXJlY292ZXItcGFzc3dvcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVjb3Zlci1wYXNzd29yZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgUmVjb3ZlclBhc3N3b3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQE91dHB1dCgpIG9uQ2hhbmdlVmlldyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgTE9HSU5fVklFV1MgPSBMb2dpblZpZXdzO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgbW9kZWwgPSB7XG4gICAgZW1haWw6ICcnLFxuICAgIHRlbmFudElkOiAnJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXNlcnM6IFVzZXJTZXJ2aWNlLCBwdWJsaWMgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tb2RlbC50ZW5hbnRJZCA9IHRoaXMubG9naW5TZXJ2aWNlLmdldFRlbmFudCgpO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRQYXNzd29yZCgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgeyByZXMgfSA9IGF3YWl0IHRoaXMudXNlcnMuc2VuZFBhc3N3b3JkUmVzZXRNYWlsKHRoaXMubW9kZWwuZW1haWwsIHRoaXMubW9kZWwudGVuYW50SWQpO1xuICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5hZGRTdWNjZXNzTWVzc2FnZSgncGFzc3dvcmRfcmVzZXRfcmVxdWVzdGVkJyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLnJlc2V0KCk7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gI3Jlc2V0Rm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwibG9naW5Gb3JtXCIgKG5nU3VibWl0KT1cInJlc2V0UGFzc3dvcmQoKVwiIG5vdmFsaWRhdGU+XG4gIDxkaXYgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9jayBjZW50ZXJcIiB0cmFuc2xhdGU+Rm9yZ290IHBhc3N3b3JkPzwvZGl2PlxuICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJ0ZW5hbnRGaWVsZFwiIGlkPVwidGVuYW50RmllbGRcIiAqbmdJZj1cImxvZ2luU2VydmljZS5zaG93VGVuYW50KClcIj5cbiAgICA8bGFiZWwgdHJhbnNsYXRlPlRlbmFudCBJRDwvbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLnRlbmFudElkXCJcbiAgICAgICN0ZW5hbnRJZD1cIm5nTW9kZWxcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgbmFtZT1cInRlbmFudElkXCJcbiAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RlbmFudCBJRCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgcmVxdWlyZWRcbiAgICAvPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxjOHktZm9ybS1ncm91cD5cbiAgICA8bGFiZWwgdHJhbnNsYXRlPkVtYWlsIGFkZHJlc3M8L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5lbWFpbFwiXG4gICAgICAjZW1haWw9XCJuZ01vZGVsXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIG5hbWU9XCJlbWFpbFwiXG4gICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiXG4gICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cInt7ICdFbWFpbCBhZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBlbWFpbFxuICAgICAgcmVxdWlyZWRcbiAgICAvPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdSZXNldCBwYXNzd29yZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIFtkaXNhYmxlZF09XCIhcmVzZXRGb3JtLmZvcm0udmFsaWQgfHwgaXNMb2FkaW5nXCJcbiAgICB0eXBlPVwic3VibWl0XCJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGZvcm0tZ3JvdXBcIlxuICA+XG4gICAge3sgJ1Jlc2V0IHBhc3N3b3JkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG0tdC04XCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cInt7ICdMb2dpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCJcbiAgICAgIChjbGljayk9XCJvbkNoYW5nZVZpZXcuZW1pdCh7IHZpZXc6IExPR0lOX1ZJRVdTLkNyZWRlbnRpYWxzIH0pXCJcbiAgICA+XG4gICAgICB7eyAnTG9naW4nIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19