@c8y/ngx-components 1018.0.83 → 1018.0.89

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.
@@ -227,12 +227,12 @@ export class WidgetConfigComponent {
227
227
  }
228
228
  }
229
229
  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 });
230
- 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\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form name=\"form\" #configForm=\"ngForm\">\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 class=\"btn\"\n type=\"button\"\n title=\"{{ 'Select widget' | translate }}\"\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 class=\"btn\"\n type=\"button\"\n title=\"{{ 'Configuration' | translate }}\"\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 class=\"btn\"\n type=\"button\"\n title=\"{{ 'Appearance' | translate }}\"\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 modal-inner-scroll--fixed\">\n <div\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 *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\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 type=\"button\"\n title=\"{{ 'Search' | translate }}\"\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 title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean card p-8\"\n type=\"button\"\n [class.active]=\"selected === cmp\"\n (click)=\"select(cmp)\"\n >\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"presentation\">\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 </button>\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 class=\"m-r-8\" translate>Rephrase your search term.</p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Reset search' | translate }}\"\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 class=\"d-flex d-col fit-h\" *ngIf=\"selected\" [ngClass]=\"{ hidden: mode !== 'config' }\">\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\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 class=\"form-control\"\n type=\"text\"\n id=\"widgetTitle\"\n name=\"title\"\n [(ngModel)]=\"selected.data.title\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row flex-grow\" [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\">\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div class=\"fit-h bg-inherit p-l-16\" [ngClass]=\"{ 'p-r-24': !hasConfig() }\">\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\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 ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\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 class=\"modal-body p-t-0\" style=\"height: calc(100vh - 310px)\" *ngIf=\"mode === 'style'\">\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\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\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", "suppressDataOverriding"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { 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" }] });
230
+ 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\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\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 class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\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 class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\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 modal-inner-scroll--fixed\">\n <div\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 *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\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\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\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\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\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 </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\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\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\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\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\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 ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\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\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\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\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\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", "suppressDataOverriding"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { 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" }] });
231
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetConfigComponent, decorators: [{
232
232
  type: Component,
233
- args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form name=\"form\" #configForm=\"ngForm\">\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 class=\"btn\"\n type=\"button\"\n title=\"{{ 'Select widget' | translate }}\"\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 class=\"btn\"\n type=\"button\"\n title=\"{{ 'Configuration' | translate }}\"\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 class=\"btn\"\n type=\"button\"\n title=\"{{ 'Appearance' | translate }}\"\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 modal-inner-scroll--fixed\">\n <div\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 *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\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 type=\"button\"\n title=\"{{ 'Search' | translate }}\"\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 title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean card p-8\"\n type=\"button\"\n [class.active]=\"selected === cmp\"\n (click)=\"select(cmp)\"\n >\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"presentation\">\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 </button>\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 class=\"m-r-8\" translate>Rephrase your search term.</p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Reset search' | translate }}\"\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 class=\"d-flex d-col fit-h\" *ngIf=\"selected\" [ngClass]=\"{ hidden: mode !== 'config' }\">\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\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 class=\"form-control\"\n type=\"text\"\n id=\"widgetTitle\"\n name=\"title\"\n [(ngModel)]=\"selected.data.title\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row flex-grow\" [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\">\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div class=\"fit-h bg-inherit p-l-16\" [ngClass]=\"{ 'p-r-24': !hasConfig() }\">\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\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 ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\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 class=\"modal-body p-t-0\" style=\"height: calc(100vh - 310px)\" *ngIf=\"mode === 'style'\">\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\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\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" }]
233
+ args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\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 class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\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 class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\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 modal-inner-scroll--fixed\">\n <div\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 *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\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\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\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\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\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 </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\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\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\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\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\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 ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\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\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\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\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\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" }]
234
234
  }], ctorParameters: function () { return [{ type: i1.WidgetService }, { type: i2.BsModalRef }, { type: i3.InventoryService }, { type: i4.ContextDashboardService }]; }, propDecorators: { dynamicComponent: [{
235
235
  type: ViewChild,
236
236
  args: ['config', { static: false }]
237
237
  }] } });
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFzQyx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUV0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFNL0QsTUFBTSxPQUFPLHFCQUFxQjtJQTRDaEMsWUFDVSxhQUE0QixFQUM1QixLQUFpQixFQUNqQixTQUEyQixFQUM1Qix1QkFBZ0Q7UUFIL0Msa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtR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ImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLCBXaWRnZXQsIER5bmFtaWNDb21wb25lbnRDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Fzc2V0cy1uYXZpZ2F0b3InO1xuaW1wb3J0IHsgY2xvbmUsIGNsb25lRGVlcCwgZXNjYXBlUmVnRXhwLCBnZXQsIG9taXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgaWlmLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyxcbiAgV0lER0VUX0hFQURFUl9DTEFTU0VTLFxuICBDb250ZXh0V2lkZ2V0Q29uZmlnXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgV2lkZ2V0U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13aWRnZXQtY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHNlbGVjdGVkRGV2aWNlOiBJTWFuYWdlZE9iamVjdDtcbiAgbW9kZTogJ2NvbmZpZycgfCAnc2VsZWN0JyB8ICdzdHlsZScgPSAnc2VsZWN0JztcbiAgc2VhcmNoUmVzdWx0OiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdO1xuICBjb21wb25lbnRzOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdO1xuICBzZWxlY3RlZDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb247XG4gIHNlYXJjaENoYW5nZSQgPSBuZXcgU3ViamVjdCgpO1xuICBzZWFyY2hUZXJtID0gJyc7XG4gIGNvbnRleHQ6IGFueTtcbiAgY29tcG9uZW50TGFiZWw6IHN0cmluZztcbiAgbW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICBzdHlsaW5nID0ge1xuICAgIGhlYWRlckNsYXNzOiAncGFuZWwtdGl0bGUtcmVndWxhcicsXG4gICAgY29udGVudENsYXNzOiAncGFuZWwtY29udGVudC1saWdodCdcbiAgfTtcbiAgZGVmYXVsdFN0eWxpbmcgPSB7XG4gICAgaGVhZGVyQ2xhc3M6ICdwYW5lbC10aXRsZS1yZWd1bGFyJyxcbiAgICBjb250ZW50Q2xhc3M6ICdwYW5lbC1jb250ZW50LWxpZ2h0J1xuICB9O1xuICBwb3NzaWJsZVN0eWxpbmcgPSB7IFdJREdFVF9IRUFERVJfQ0xBU1NFUywgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyB9O1xuICBjdXJyZW50OiBhbnk7XG4gIHdpZGdldENvbmZpZzogQ29udGV4dFdpZGdldENvbmZpZztcbiAgaXNVcGdyYWRlID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY29uZmlnJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGR5bmFtaWNDb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnRDb21wb25lbnQ7XG5cbiAgZ2V0IGlzRWRpdCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnQ7XG4gIH1cblxuICBnZXQgaXNEZXZpY2VUeXBlRGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubW8uYzh5X0Rhc2hib2FyZD8uZGV2aWNlVHlwZSAmJiAhIXRoaXMubW8uYzh5X0Rhc2hib2FyZD8uZGV2aWNlVHlwZVZhbHVlO1xuICB9XG5cbiAgcmVzdWx0OiBQcm9taXNlPFdpZGdldD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fc2F2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcblxuICBwcml2YXRlIHNlYXJjaFN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9zYXZlOiAodmFsdWU6IFdpZGdldCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfY2FuY2VsOiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvbXBvbmVudHMgPSB0aGlzLndpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBjbG9uZSh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQsIHRoaXMuaXNFZGl0ID8gJ2NvbmZpZycgOiAnc2VsZWN0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hTdWIgPSB0aGlzLnNlYXJjaENoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBpaWYoKCkgPT4gZXZlbnQud2hpY2ggIT09IDEzLCB0aW1lcigyMDApLCB0aW1lcigxMCkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2V0U3R5bGluZ3MoKTtcbiAgICBpZiAodGhpcy53aWRnZXRDb25maWc/LmRldmljZSkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwodGhpcy53aWRnZXRDb25maWcuZGV2aWNlLmlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREZXZpY2UgPSBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrSWZEZXZpY2VSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnIHx8XG4gICAgICAoIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmRldmljZVRhcmdldE5vdFJlcXVpcmVkICYmXG4gICAgICAgICF0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbj86IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgPSBzZWxlY3Rpb24/LmNoYW5nZT8uaXRlbTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuZW1pdENvbmZpZ0NoYW5nZSh7XG4gICAgICBkZXZpY2U6IHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICBjb25zdCBob29rU3VjY2VzcyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudC5jYWxsTGlmZUN5Y2xlSG9va3MoKS50b1Byb21pc2UoKTtcbiAgICBpZiAoIWhvb2tTdWNjZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCB9ID0gdGhpcy5zZWxlY3RlZC5kYXRhO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy53aWRnZXRDb25maWcgJiZcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSAmJlxuICAgICAgLy8gc2VyaWFsaXppbmcgd2lsbCBiZSBoYW5kbGVkIGJ5IHJlc29sdmVyXG4gICAgICAhdGhpcy5zZWxlY3RlZD8ucmVzb2x2ZT8uZGV2aWNlXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGlkLCBuYW1lIH0gPSB0aGlzLndpZGdldENvbmZpZy5kZXZpY2U7XG4gICAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgPSB7IGlkLCBuYW1lIH07XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkZ2V0ID0ge1xuICAgICAgX3gsXG4gICAgICBfeSxcbiAgICAgIF93aWR0aCxcbiAgICAgIF9oZWlnaHQsXG4gICAgICBjb25maWc6IG9taXQodGhpcy53aWRnZXRDb25maWcsIFsnc2V0dGluZ3MnLCAnZGlzcGxheVNldHRpbmdzJ10pLFxuICAgICAgdGl0bGU6IHRoaXMuc2VsZWN0ZWQuZGF0YS50aXRsZSxcbiAgICAgIGNvbXBvbmVudElkOiB0aGlzLnNlbGVjdGVkLmlkLFxuICAgICAgaWQ6IHRoaXMuaXNFZGl0ID8gdGhpcy5jdXJyZW50LmRhdGEuaWQgOiBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc3Vic3RyKDIpLFxuICAgICAgY2xhc3NlczogdGhpcy5nZXRTdHlsZSgpLFxuICAgICAgLi4uKCF0aGlzLmlzRWRpdCA/IHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLndpZGdldERlZmF1bHRzIDoge30pXG4gICAgfSBhcyBXaWRnZXQ7XG5cbiAgICB0aGlzLl9zYXZlKHdpZGdldCk7XG4gIH1cblxuICBzZWxlY3QoY21wLCBtb2RlOiAnc2VsZWN0JyB8ICdjb25maWcnID0gJ2NvbmZpZycpIHtcbiAgICBjbXAuZGF0YSA9IGNtcC5kYXRhIHx8IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBjbXA7XG5cbiAgICB0aGlzLmlzVXBncmFkZSA9ICEhZ2V0KGNtcCwgJ2RhdGEuc2V0dGluZ3MudXBncmFkZScpO1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gdGhpcy5pc1VwZ3JhZGU7XG5cbiAgICBpZiAodGhpcy5pc0VkaXQpIHtcbiAgICAgIGNvbnN0IHsgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQsIGNsYXNzZXMsIHRpdGxlIH0gPSB0aGlzLmN1cnJlbnQuZGF0YTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZGF0YSA9IHsgLi4udGhpcy5zZWxlY3RlZC5kYXRhLCBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCwgY2xhc3NlcywgdGl0bGUgfTtcbiAgICB9XG5cbiAgICB0aGlzLndpZGdldENvbmZpZyA9IGNsb25lRGVlcCh0aGlzLmNvbXBvc2VXaWRnZXRDb25maWcodGhpcy5zZWxlY3RlZCwgdGhpcy5jb250ZXh0KSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUgPSB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUgfHwgY21wLmxhYmVsO1xuICAgIHRoaXMuY29tcG9uZW50TGFiZWwgPSBjbXAubGFiZWw7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXJtLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gdGhpcy5jb21wb25lbnRzLmZpbHRlcihjbXAgPT5cbiAgICAgICAgbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSksICdpJykudGVzdChjbXAubGFiZWwpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5zZWFyY2hSZXN1bHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGFuZ2VNb2RlKG1vZGU6ICdjb25maWcnIHwgJ3NlbGVjdCcgfCAnc3R5bGUnKSB7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICB9XG5cbiAgZ2V0U3R5bGUoaXNQcmV2aWV3ID0gZmFsc2UpIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0ge307XG4gICAgaWYgKGlzUHJldmlldyB8fCAhdGhpcy5pc0Rhc2hib2FyZERlZmF1bHRTdHlsZSh0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3MpKSB7XG4gICAgICBjc3NDbGFzc2VzW3RoaXMuc3R5bGluZy5oZWFkZXJDbGFzc10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXZpZXcgfHwgIXRoaXMuaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUodGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzcykpIHtcbiAgICAgIGNzc0NsYXNzZXNbdGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzc10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgIGNzc0NsYXNzZXNbYGRhc2hib2FyZC10aGVtZS0ke3RoaXMuZGVmYXVsdFN0eWxpbmcuY29udGVudENsYXNzLnNwbGl0KCctJykucG9wKCl9YF0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5mb3JtRGlzYWJsZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNlYXJjaFN1Yikge1xuICAgICAgdGhpcy5zZWFyY2hTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBoYXNDb25maWcoKSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzPy51cGdyYWRlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29uZmlnQ29tcG9uZW50IHx8IHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5jb25maWdUZW1wbGF0ZVVybFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLmR5bmFtaWNDb21wb25lbnQ/LmVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsaW5ncygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzOiBzdHJpbmdbXSA9XG4gICAgICAodGhpcy5tby5jOHlfRGFzaGJvYXJkPy5jbGFzc2VzICYmIE9iamVjdC5rZXlzKHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jbGFzc2VzKSkgfHwgW107XG4gICAgY29uc3QgZGFzaGJvYXJkV2lkZ2V0Q2xhc3Nlczogc3RyaW5nW10gPVxuICAgICAgKHRoaXMubW8uYzh5X0Rhc2hib2FyZD8ud2lkZ2V0Q2xhc3NlcyAmJiBPYmplY3Qua2V5cyh0aGlzLm1vLmM4eV9EYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcykpIHx8XG4gICAgICBbXTtcbiAgICBjb25zdCB3aWRnZXRDbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMuaXNFZGl0ID8gT2JqZWN0LmtleXModGhpcy5jdXJyZW50LmRhdGEuY2xhc3NlcykgOiBbXTtcblxuICAgIHRoaXMuc3R5bGluZyA9IHRoaXMuc2V0RGVmYXVsdFN0eWxlKFtcbiAgICAgIC4uLmRhc2hib2FyZENsYXNzZXMsXG4gICAgICAuLi5kYXNoYm9hcmRXaWRnZXRDbGFzc2VzLFxuICAgICAgLi4ud2lkZ2V0Q2xhc3Nlc1xuICAgIF0pO1xuICAgIHRoaXMuZGVmYXVsdFN0eWxpbmcgPSB0aGlzLnNldERlZmF1bHRTdHlsZShbLi4uZGFzaGJvYXJkQ2xhc3NlcywgLi4uZGFzaGJvYXJkV2lkZ2V0Q2xhc3Nlc10pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rhc2hib2FyZERlZmF1bHRTdHlsZShjbGFzc05hbWUpIHtcbiAgICBjb25zdCBhbGxDbGFzc2VzID0ge1xuICAgICAgLi4udGhpcy5tby5jOHlfRGFzaGJvYXJkLmNsYXNzZXMsXG4gICAgICAuLi50aGlzLm1vLmM4eV9EYXNoYm9hcmQud2lkZ2V0Q2xhc3Nlc1xuICAgIH07XG4gICAgY29uc3Qgc3R5bGVzID0gT2JqZWN0LmtleXMoYWxsQ2xhc3NlcykubWFwKGNzc0NsYXNzID0+ICh7IGNsYXNzOiBjc3NDbGFzcyB9KSk7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICBzdHlsZXMsXG4gICAgICBjbGFzc05hbWUuc3BsaXQoJy0nKS5wb3AoKSxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgcmV0dXJuICEhc3R5bGU7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRTdHlsZShzZXRDbGFzc2VzOiBzdHJpbmdbXSkge1xuICAgIGxldCBjb250ZW50Q2xhc3MgPSB0aGlzLnN0eWxpbmcuY29udGVudENsYXNzO1xuICAgIGxldCBoZWFkZXJDbGFzcyA9IHRoaXMuc3R5bGluZy5oZWFkZXJDbGFzcztcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAuZ2V0RmlsdGVyZWREYXNoYm9hcmRTdHlsZXMoc2V0Q2xhc3NlcylcbiAgICAgIC5tYXAoYyA9PiBjLnNwbGl0KCctJykucG9wKCkpO1xuICAgIHN0eWxlcy5mb3JFYWNoKHN0eWxlTmFtZSA9PiB7XG4gICAgICBjb250ZW50Q2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIFdJREdFVF9DT05URU5UX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgY29udGVudENsYXNzXG4gICAgICApO1xuICAgICAgaGVhZGVyQ2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIFdJREdFVF9IRUFERVJfQ0xBU1NFUyxcbiAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICBoZWFkZXJDbGFzc1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGhlYWRlckNsYXNzLCBjb250ZW50Q2xhc3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZVdpZGdldENvbmZpZyhzZWxlY3RlZENvbXBvbmVudCwgY29udGV4dCA9IHt9KSB7XG4gICAgY29uc3Qgc2V0dGluZyA9IHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIC4uLnNlbGVjdGVkQ29tcG9uZW50LmRhdGEuc2V0dGluZ3MsXG4gICAgICAgIC4uLmdldChzZWxlY3RlZENvbXBvbmVudC5kYXRhLnNldHRpbmdzLCAnbmcxLm9wdGlvbnMnKSxcbiAgICAgICAgLi4uZ2V0KHNlbGVjdGVkQ29tcG9uZW50LmRhdGEsICduZzEub3B0aW9ucycpLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBkYXNoYm9hcmRNbzogdGhpcy5tby5jOHlfRGFzaGJvYXJkXG4gICAgICB9LFxuICAgICAgLi4uc2VsZWN0ZWRDb21wb25lbnQuZGF0YS5jb25maWdcbiAgICB9IGFzIENvbnRleHRXaWRnZXRDb25maWc7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlUYXJnZXRJZkRldmljZURhc2hib2FyZChzZXR0aW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUYXJnZXRJZkRldmljZURhc2hib2FyZCh3aWRnZXRDb25maWc6IENvbnRleHRXaWRnZXRDb25maWcpIHtcbiAgICBjb25zdCBpc0RldmljZVR5cGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKTtcblxuICAgIGlmIChpc0RldmljZVR5cGUpIHtcbiAgICAgIHdpZGdldENvbmZpZy5zZXR0aW5ncy5oaWRlVGFyZ2V0ID0gaXNEZXZpY2VUeXBlO1xuXG4gICAgICBjb25zdCBub0RldmljZVRhcmdldCA9IHdpZGdldENvbmZpZy5zZXR0aW5ncy5uZzFcbiAgICAgICAgPyB3aWRnZXRDb25maWcuc2V0dGluZ3MubmcxLm9wdGlvbnMubm9EZXZpY2VUYXJnZXRcbiAgICAgICAgOiB3aWRnZXRDb25maWcuc2V0dGluZ3Mubm9EZXZpY2VUYXJnZXQ7XG5cbiAgICAgIGlmICghbm9EZXZpY2VUYXJnZXQpIHtcbiAgICAgICAgd2lkZ2V0Q29uZmlnLmRldmljZSA9IHtcbiAgICAgICAgICBpZDogdGhpcy5jb250ZXh0LmlkLFxuICAgICAgICAgIG5hbWU6IHRoaXMuY29udGV4dC5uYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3aWRnZXRDb25maWc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImgzXCJcbiAgICB0aXRsZT1cInt7ICdBZGQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgaWQ9XCJtb2RhbC10aXRsZVwiXG4gICAgKm5nSWY9XCIhY3VycmVudFwiXG4gICAgdHJhbnNsYXRlXG4gID5cbiAgICBBZGQgd2lkZ2V0XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJoM1wiXG4gICAgdGl0bGU9XCJ7eyAnRWRpdCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBpZD1cIm1vZGFsLXRpdGxlXCJcbiAgICAqbmdJZj1cImN1cnJlbnRcIlxuICAgIHRyYW5zbGF0ZVxuICA+XG4gICAgRWRpdCB3aWRnZXRcbiAgPC9kaXY+XG48L2Rpdj5cbjxmb3JtIG5hbWU9XCJmb3JtXCIgI2NvbmZpZ0Zvcm09XCJuZ0Zvcm1cIj5cbiAgPGRpdiBjbGFzcz1cImM4eS1tb2RhbC10YWJzXCIgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYkNvbnRhaW5lclwiPlxuICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzIG5hdi10YWJzYzh5IHAtbC0yNFwiPlxuICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2RlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2VsZWN0IHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ3NlbGVjdCcpOyAoZmFsc2UpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwidGgtbGFyZ2VcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+U2VsZWN0IHdpZGdldDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwibW9kZSA9PT0gJ2NvbmZpZydcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ2NvbmZpZycpOyAoZmFsc2UpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwiY29nXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkNvbmZpZ3VyYXRpb248L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBbY2xhc3MuYWN0aXZlXT1cIm1vZGUgPT09ICdzdHlsZSdcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGVhcmFuY2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ3N0eWxlJyk7IChmYWxzZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJwYWludC1icnVzaFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BcHBlYXJhbmNlPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWlubmVyLXNjcm9sbCBtb2RhbC1pbm5lci1zY3JvbGwtLWZpeGVkXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJiZy1sZXZlbC0wIHAtbC0yNCBwLXItMjQgcC10LTggcC1iLTggc3RpY2t5LWhlYWRlci10b3AtMFwiXG4gICAgICBzdHlsZT1cInotaW5kZXg6IDJcIlxuICAgICAgKm5nSWY9XCJtb2RlID09PSAnc2VsZWN0J1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc2VhcmNoXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJ3aWRnZXQtY29uZmlnLS1TZWFyY2hcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWFyY2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnU2VhcmNo4oCmJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cInNlYXJjaENoYW5nZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0U2VhcmNoKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwic2VhcmNoVGVybS5sZW5ndGggPT09IDAgPyAnc2VhcmNoJyA6ICdjbG9zZSdcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IGJnLWxldmVsLTJcIiAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncm91cCBjYXJkLXNlbGVjdCBtLWItMFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tNCBjb2wteHMtNlwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBjbXAuZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjbXAgb2Ygc2VhcmNoUmVzdWx0IHx8IGNvbXBvbmVudHNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gY2FyZCBwLThcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkID09PSBjbXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChjbXApXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcC04IG0tYi04IGQtY29sIGZsZXgtY2VudGVyIGJnLWxldmVsLTJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY21wLnByZXZpZXdJbWFnZTsgZWxzZSBwcmV2aWV3SW1hZ2VcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaDFcIj48aSBjOHlJY29uPVwiZmlsZS1pbWFnZS1vXCI+PC9pPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCB0cmFuc2xhdGU+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJldmlld0ltYWdlPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctcmVzcG9uc2l2ZVwiIGFsdCBbc3JjXT1cImNtcC5wcmV2aWV3SW1hZ2VcIiAvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgIHRleHQ9XCJ7eyBjbXAubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtwYXR0ZXJuXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWVtcHR5LXN0YXRlIHRleHQtY2VudGVyXCIgKm5nSWY9XCJzZWFyY2hSZXN1bHQgJiYgc2VhcmNoUmVzdWx0Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoMVwiIGM4eUljb249XCJzZWFyY2hcIj48L2Rpdj5cbiAgICAgICAgICA8aDMgdHJhbnNsYXRlPk5vIHdpZGdldHMgZm91bmQuPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm0tci04XCIgdHJhbnNsYXRlPlJlcGhyYXNlIHlvdXIgc2VhcmNoIHRlcm0uPC9wPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZXNldCBzZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0U2VhcmNoKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnUmVzZXQgc2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaXMgaW50ZW50aW9uYWwgc2V0IHRvIGhpZGRlbiB0byBhbGxvdyB0aGUgVmlld0NoaWxkIHJlZiBpbiB0aGUgY29udHJvbGxlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGQtY29sIGZpdC1oXCIgKm5nSWY9XCJzZWxlY3RlZFwiIFtuZ0NsYXNzXT1cInsgaGlkZGVuOiBtb2RlICE9PSAnY29uZmlnJyB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC10LTE2IGZsZXgtbm8tc2hyaW5rIHNlcGFyYXRvci1ib3R0b20gcC1iLTE2XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWwtMjRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGVmdCB0ZXh0LW1lZGl1bSBoNFwiPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZC5kZXNjcmlwdGlvbiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXItMjRcIj5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ3aWRnZXRUaXRsZVwiIHRyYW5zbGF0ZT5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBpZD1cIndpZGdldFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmRhdGEudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0ge3sgY29tcG9uZW50TGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGZsZXgtZ3Jvd1wiIFtuZ0NsYXNzXT1cInsgJ2QtZmxleCc6IHdpZGdldENvbmZpZy5vcHRpb25zIHx8IGhhc0NvbmZpZygpIH1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYS1zLXN0cmV0Y2hcIlxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldENvbmZpZy5zZXR0aW5ncz8ubm9EZXZpY2VUYXJnZXRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdiZy1sZXZlbC0xIGNvbC1zbS00IHAtci0wJzogaGFzQ29uZmlnKCksXG4gICAgICAgICAgICAnYmctbGV2ZWwtMCBjb2wtc20tMTInOiAhaGFzQ29uZmlnKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXQtaCBiZy1pbmhlcml0IHAtbC0xNlwiIFtuZ0NsYXNzXT1cInsgJ3Atci0yNCc6ICFoYXNDb25maWcoKSB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1yZWxhdGl2ZSBiZy1pbmhlcml0XCI+XG4gICAgICAgICAgICAgIDxjOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrIGJnLWluaGVyaXQgcC1yZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwdmggLSA0MjJweClcIlxuICAgICAgICAgICAgICAgIChvblNlbGVjdGVkKT1cInNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uQ2xlYXJTZWxlY3RlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgICAgICAgdmlldzogJ21pbGxlcicsXG4gICAgICAgICAgICAgICAgICBncm91cHNTZWxlY3RhYmxlOiB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb2x1bW5IZWFkZXJzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2hvd1VuYXNzaWduZWREZXZpY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiAhdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3MuY29udGV4dD8uYWRkaXRpb25QYXJlbnRzLFxuICAgICAgICAgICAgICAgICAgc2hvd0ZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNpbmdsZUNvbHVtbjogISF0aGlzLmhhc0NvbmZpZygpXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW2Fzc2V0XT1cIndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29udGV4dFwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRGV2aWNlXT1cInNlbGVjdGVkRGV2aWNlXCJcbiAgICAgICAgICAgICAgPjwvYzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdjb2wtc20tOCc6ICF3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0LFxuICAgICAgICAgICAgJ2NvbC1zbS0xMic6IHdpZGdldENvbmZpZy5zZXR0aW5ncz8ubm9EZXZpY2VUYXJnZXQsXG4gICAgICAgICAgICAnc3Itb25seSc6ICFoYXNDb25maWcoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1keW5hbWljLWNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiB7eyBoYXNDb25maWcoKSA/ICdjYWxjKDEwMHZoIC0gNDIycHgpJyA6ICcwJyB9fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpbm5lci1zY3JvbGwgcC1yLTI0JzogIXdpZGdldENvbmZpZy5zZXR0aW5ncz8ubm9EZXZpY2VUYXJnZXQgfVwiXG4gICAgICAgICAgICBbY29tcG9uZW50SWRdPVwic2VsZWN0ZWQuaWRcIlxuICAgICAgICAgICAgbW9kZT1cImNvbmZpZ1wiXG4gICAgICAgICAgICBbY29uZmlnXT1cIndpZGdldENvbmZpZ1wiXG4gICAgICAgICAgICBbbm90Rm91bmRFcnJvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAjY29uZmlnXG4gICAgICAgICAgPjwvYzh5LWR5bmFtaWMtY29tcG9uZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgcC10LTBcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDB2aCAtIDMxMHB4KVwiICpuZ0lmPVwibW9kZSA9PT0gJ3N0eWxlJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTZcIj5cbiAgICAgICAgICA8Yzh5LWFwcGVhcmFuY2Utc2V0dGluZ3NcbiAgICAgICAgICAgIFsodGhlbWVDbGFzcyldPVwic3R5bGluZy5jb250ZW50Q2xhc3NcIlxuICAgICAgICAgICAgWyhoZWFkZXJDbGFzcyldPVwic3R5bGluZy5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICBbcG9zc2libGVTdHlsaW5nVGhlbWVdPVwicG9zc2libGVTdHlsaW5nLldJREdFVF9DT05URU5UX0NMQVNTRVNcIlxuICAgICAgICAgICAgW3Bvc3NpYmxlU3R5bGluZ0hlYWRlcl09XCJwb3NzaWJsZVN0eWxpbmcuV0lER0VUX0hFQURFUl9DTEFTU0VTXCJcbiAgICAgICAgICAgIFtkZWZhdWx0VGhlbWVDbGFzc109XCJkZWZhdWx0U3R5bGluZy5jb250ZW50Q2xhc3NcIlxuICAgICAgICAgICAgW2RlZmF1bHRIZWFkZXJDbGFzc109XCJkZWZhdWx0U3R5bGluZy5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgPjwvYzh5LWFwcGVhcmFuY2Utc2V0dGluZ3M+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTYgc3RpY2t5LWhlYWRlci10b3AtMFwiPlxuICAgICAgICAgIDxjOHktd2lkZ2V0LXByZXZpZXdcbiAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzgycHgpXCJcbiAgICAgICAgICAgIFtwcmV2aWV3Q2xhc3Nlc109XCJnZXRTdHlsZSh0cnVlKVwiXG4gICAgICAgICAgPjwvYzh5LXdpZGdldC1wcmV2aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICA+XG4gICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmZvcm1EaXNhYmxlZCB8fCBjb25maWdGb3JtLmludmFsaWQgfHwgY2hlY2tJZkRldmljZVJlcXVpcmVkKClcbiAgICAgIFwiXG4gICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgW2FjdGlvbk5hbWVdPVwiY3VycmVudCA/ICdlZGl0V2lkZ2V0JyA6ICdjcmVhdGVXaWRnZXQnXCJcbiAgICAgIFthY3Rpb25EYXRhXT1cInsgd2lkZ2V0TmFtZTogc2VsZWN0ZWQgJiYgc2VsZWN0ZWQuaWQgfVwiXG4gICAgPlxuICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFzQyx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUV0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFNL0QsTUFBTSxPQUFPLHFCQUFxQjtJQTRDaEMsWUFDVSxhQUE0QixFQUM1QixLQUFpQixFQUNqQixTQUEyQixFQUM1Qix1QkFBZ0Q7UUFIL0Msa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtR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ImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLCBXaWRnZXQsIER5bmFtaWNDb21wb25lbnRDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Fzc2V0cy1uYXZpZ2F0b3InO1xuaW1wb3J0IHsgY2xvbmUsIGNsb25lRGVlcCwgZXNjYXBlUmVnRXhwLCBnZXQsIG9taXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgaWlmLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyxcbiAgV0lER0VUX0hFQURFUl9DTEFTU0VTLFxuICBDb250ZXh0V2lkZ2V0Q29uZmlnXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgV2lkZ2V0U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13aWRnZXQtY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHNlbGVjdGVkRGV2aWNlOiBJTWFuYWdlZE9iamVjdDtcbiAgbW9kZTogJ2NvbmZpZycgfCAnc2VsZWN0JyB8ICdzdHlsZScgPSAnc2VsZWN0JztcbiAgc2VhcmNoUmVzdWx0OiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdO1xuICBjb21wb25lbnRzOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdO1xuICBzZWxlY3RlZDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb247XG4gIHNlYXJjaENoYW5nZSQgPSBuZXcgU3ViamVjdCgpO1xuICBzZWFyY2hUZXJtID0gJyc7XG4gIGNvbnRleHQ6IGFueTtcbiAgY29tcG9uZW50TGFiZWw6IHN0cmluZztcbiAgbW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICBzdHlsaW5nID0ge1xuICAgIGhlYWRlckNsYXNzOiAncGFuZWwtdGl0bGUtcmVndWxhcicsXG4gICAgY29udGVudENsYXNzOiAncGFuZWwtY29udGVudC1saWdodCdcbiAgfTtcbiAgZGVmYXVsdFN0eWxpbmcgPSB7XG4gICAgaGVhZGVyQ2xhc3M6ICdwYW5lbC10aXRsZS1yZWd1bGFyJyxcbiAgICBjb250ZW50Q2xhc3M6ICdwYW5lbC1jb250ZW50LWxpZ2h0J1xuICB9O1xuICBwb3NzaWJsZVN0eWxpbmcgPSB7IFdJREdFVF9IRUFERVJfQ0xBU1NFUywgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyB9O1xuICBjdXJyZW50OiBhbnk7XG4gIHdpZGdldENvbmZpZzogQ29udGV4dFdpZGdldENvbmZpZztcbiAgaXNVcGdyYWRlID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY29uZmlnJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGR5bmFtaWNDb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnRDb21wb25lbnQ7XG5cbiAgZ2V0IGlzRWRpdCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnQ7XG4gIH1cblxuICBnZXQgaXNEZXZpY2VUeXBlRGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubW8uYzh5X0Rhc2hib2FyZD8uZGV2aWNlVHlwZSAmJiAhIXRoaXMubW8uYzh5X0Rhc2hib2FyZD8uZGV2aWNlVHlwZVZhbHVlO1xuICB9XG5cbiAgcmVzdWx0OiBQcm9taXNlPFdpZGdldD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fc2F2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcblxuICBwcml2YXRlIHNlYXJjaFN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9zYXZlOiAodmFsdWU6IFdpZGdldCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfY2FuY2VsOiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvbXBvbmVudHMgPSB0aGlzLndpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBjbG9uZSh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWQsIHRoaXMuaXNFZGl0ID8gJ2NvbmZpZycgOiAnc2VsZWN0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hTdWIgPSB0aGlzLnNlYXJjaENoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBpaWYoKCkgPT4gZXZlbnQud2hpY2ggIT09IDEzLCB0aW1lcigyMDApLCB0aW1lcigxMCkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2V0U3R5bGluZ3MoKTtcbiAgICBpZiAodGhpcy53aWRnZXRDb25maWc/LmRldmljZSkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwodGhpcy53aWRnZXRDb25maWcuZGV2aWNlLmlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREZXZpY2UgPSBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrSWZEZXZpY2VSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnIHx8XG4gICAgICAoIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmRldmljZVRhcmdldE5vdFJlcXVpcmVkICYmXG4gICAgICAgICF0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbj86IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgPSBzZWxlY3Rpb24/LmNoYW5nZT8uaXRlbTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuZW1pdENvbmZpZ0NoYW5nZSh7XG4gICAgICBkZXZpY2U6IHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICBjb25zdCBob29rU3VjY2VzcyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudC5jYWxsTGlmZUN5Y2xlSG9va3MoKS50b1Byb21pc2UoKTtcbiAgICBpZiAoIWhvb2tTdWNjZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCB9ID0gdGhpcy5zZWxlY3RlZC5kYXRhO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy53aWRnZXRDb25maWcgJiZcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSAmJlxuICAgICAgLy8gc2VyaWFsaXppbmcgd2lsbCBiZSBoYW5kbGVkIGJ5IHJlc29sdmVyXG4gICAgICAhdGhpcy5zZWxlY3RlZD8ucmVzb2x2ZT8uZGV2aWNlXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGlkLCBuYW1lIH0gPSB0aGlzLndpZGdldENvbmZpZy5kZXZpY2U7XG4gICAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgPSB7IGlkLCBuYW1lIH07XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkZ2V0ID0ge1xuICAgICAgX3gsXG4gICAgICBfeSxcbiAgICAgIF93aWR0aCxcbiAgICAgIF9oZWlnaHQsXG4gICAgICBjb25maWc6IG9taXQodGhpcy53aWRnZXRDb25maWcsIFsnc2V0dGluZ3MnLCAnZGlzcGxheVNldHRpbmdzJ10pLFxuICAgICAgdGl0bGU6IHRoaXMuc2VsZWN0ZWQuZGF0YS50aXRsZSxcbiAgICAgIGNvbXBvbmVudElkOiB0aGlzLnNlbGVjdGVkLmlkLFxuICAgICAgaWQ6IHRoaXMuaXNFZGl0ID8gdGhpcy5jdXJyZW50LmRhdGEuaWQgOiBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc3Vic3RyKDIpLFxuICAgICAgY2xhc3NlczogdGhpcy5nZXRTdHlsZSgpLFxuICAgICAgLi4uKCF0aGlzLmlzRWRpdCA/IHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLndpZGdldERlZmF1bHRzIDoge30pXG4gICAgfSBhcyBXaWRnZXQ7XG5cbiAgICB0aGlzLl9zYXZlKHdpZGdldCk7XG4gIH1cblxuICBzZWxlY3QoY21wLCBtb2RlOiAnc2VsZWN0JyB8ICdjb25maWcnID0gJ2NvbmZpZycpIHtcbiAgICBjbXAuZGF0YSA9IGNtcC5kYXRhIHx8IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBjbXA7XG5cbiAgICB0aGlzLmlzVXBncmFkZSA9ICEhZ2V0KGNtcCwgJ2RhdGEuc2V0dGluZ3MudXBncmFkZScpO1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gdGhpcy5pc1VwZ3JhZGU7XG5cbiAgICBpZiAodGhpcy5pc0VkaXQpIHtcbiAgICAgIGNvbnN0IHsgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQsIGNsYXNzZXMsIHRpdGxlIH0gPSB0aGlzLmN1cnJlbnQuZGF0YTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZGF0YSA9IHsgLi4udGhpcy5zZWxlY3RlZC5kYXRhLCBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCwgY2xhc3NlcywgdGl0bGUgfTtcbiAgICB9XG5cbiAgICB0aGlzLndpZGdldENvbmZpZyA9IGNsb25lRGVlcCh0aGlzLmNvbXBvc2VXaWRnZXRDb25maWcodGhpcy5zZWxlY3RlZCwgdGhpcy5jb250ZXh0KSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUgPSB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUgfHwgY21wLmxhYmVsO1xuICAgIHRoaXMuY29tcG9uZW50TGFiZWwgPSBjbXAubGFiZWw7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXJtLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gdGhpcy5jb21wb25lbnRzLmZpbHRlcihjbXAgPT5cbiAgICAgICAgbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSksICdpJykudGVzdChjbXAubGFiZWwpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5zZWFyY2hSZXN1bHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGFuZ2VNb2RlKG1vZGU6ICdjb25maWcnIHwgJ3NlbGVjdCcgfCAnc3R5bGUnKSB7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICB9XG5cbiAgZ2V0U3R5bGUoaXNQcmV2aWV3ID0gZmFsc2UpIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0ge307XG4gICAgaWYgKGlzUHJldmlldyB8fCAhdGhpcy5pc0Rhc2hib2FyZERlZmF1bHRTdHlsZSh0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3MpKSB7XG4gICAgICBjc3NDbGFzc2VzW3RoaXMuc3R5bGluZy5oZWFkZXJDbGFzc10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXZpZXcgfHwgIXRoaXMuaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUodGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzcykpIHtcbiAgICAgIGNzc0NsYXNzZXNbdGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzc10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgIGNzc0NsYXNzZXNbYGRhc2hib2FyZC10aGVtZS0ke3RoaXMuZGVmYXVsdFN0eWxpbmcuY29udGVudENsYXNzLnNwbGl0KCctJykucG9wKCl9YF0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5mb3JtRGlzYWJsZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNlYXJjaFN1Yikge1xuICAgICAgdGhpcy5zZWFyY2hTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBoYXNDb25maWcoKSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzPy51cGdyYWRlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29uZmlnQ29tcG9uZW50IHx8IHRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5jb25maWdUZW1wbGF0ZVVybFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLmR5bmFtaWNDb21wb25lbnQ/LmVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsaW5ncygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzOiBzdHJpbmdbXSA9XG4gICAgICAodGhpcy5tby5jOHlfRGFzaGJvYXJkPy5jbGFzc2VzICYmIE9iamVjdC5rZXlzKHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jbGFzc2VzKSkgfHwgW107XG4gICAgY29uc3QgZGFzaGJvYXJkV2lkZ2V0Q2xhc3Nlczogc3RyaW5nW10gPVxuICAgICAgKHRoaXMubW8uYzh5X0Rhc2hib2FyZD8ud2lkZ2V0Q2xhc3NlcyAmJiBPYmplY3Qua2V5cyh0aGlzLm1vLmM4eV9EYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcykpIHx8XG4gICAgICBbXTtcbiAgICBjb25zdCB3aWRnZXRDbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMuaXNFZGl0ID8gT2JqZWN0LmtleXModGhpcy5jdXJyZW50LmRhdGEuY2xhc3NlcykgOiBbXTtcblxuICAgIHRoaXMuc3R5bGluZyA9IHRoaXMuc2V0RGVmYXVsdFN0eWxlKFtcbiAgICAgIC4uLmRhc2hib2FyZENsYXNzZXMsXG4gICAgICAuLi5kYXNoYm9hcmRXaWRnZXRDbGFzc2VzLFxuICAgICAgLi4ud2lkZ2V0Q2xhc3Nlc1xuICAgIF0pO1xuICAgIHRoaXMuZGVmYXVsdFN0eWxpbmcgPSB0aGlzLnNldERlZmF1bHRTdHlsZShbLi4uZGFzaGJvYXJkQ2xhc3NlcywgLi4uZGFzaGJvYXJkV2lkZ2V0Q2xhc3Nlc10pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rhc2hib2FyZERlZmF1bHRTdHlsZShjbGFzc05hbWUpIHtcbiAgICBjb25zdCBhbGxDbGFzc2VzID0ge1xuICAgICAgLi4udGhpcy5tby5jOHlfRGFzaGJvYXJkLmNsYXNzZXMsXG4gICAgICAuLi50aGlzLm1vLmM4eV9EYXNoYm9hcmQud2lkZ2V0Q2xhc3Nlc1xuICAgIH07XG4gICAgY29uc3Qgc3R5bGVzID0gT2JqZWN0LmtleXMoYWxsQ2xhc3NlcykubWFwKGNzc0NsYXNzID0+ICh7IGNsYXNzOiBjc3NDbGFzcyB9KSk7XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICBzdHlsZXMsXG4gICAgICBjbGFzc05hbWUuc3BsaXQoJy0nKS5wb3AoKSxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgcmV0dXJuICEhc3R5bGU7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRTdHlsZShzZXRDbGFzc2VzOiBzdHJpbmdbXSkge1xuICAgIGxldCBjb250ZW50Q2xhc3MgPSB0aGlzLnN0eWxpbmcuY29udGVudENsYXNzO1xuICAgIGxldCBoZWFkZXJDbGFzcyA9IHRoaXMuc3R5bGluZy5oZWFkZXJDbGFzcztcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAuZ2V0RmlsdGVyZWREYXNoYm9hcmRTdHlsZXMoc2V0Q2xhc3NlcylcbiAgICAgIC5tYXAoYyA9PiBjLnNwbGl0KCctJykucG9wKCkpO1xuICAgIHN0eWxlcy5mb3JFYWNoKHN0eWxlTmFtZSA9PiB7XG4gICAgICBjb250ZW50Q2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIFdJREdFVF9DT05URU5UX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgY29udGVudENsYXNzXG4gICAgICApO1xuICAgICAgaGVhZGVyQ2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIFdJREdFVF9IRUFERVJfQ0xBU1NFUyxcbiAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICBoZWFkZXJDbGFzc1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGhlYWRlckNsYXNzLCBjb250ZW50Q2xhc3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZVdpZGdldENvbmZpZyhzZWxlY3RlZENvbXBvbmVudCwgY29udGV4dCA9IHt9KSB7XG4gICAgY29uc3Qgc2V0dGluZyA9IHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIC4uLnNlbGVjdGVkQ29tcG9uZW50LmRhdGEuc2V0dGluZ3MsXG4gICAgICAgIC4uLmdldChzZWxlY3RlZENvbXBvbmVudC5kYXRhLnNldHRpbmdzLCAnbmcxLm9wdGlvbnMnKSxcbiAgICAgICAgLi4uZ2V0KHNlbGVjdGVkQ29tcG9uZW50LmRhdGEsICduZzEub3B0aW9ucycpLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBkYXNoYm9hcmRNbzogdGhpcy5tby5jOHlfRGFzaGJvYXJkXG4gICAgICB9LFxuICAgICAgLi4uc2VsZWN0ZWRDb21wb25lbnQuZGF0YS5jb25maWdcbiAgICB9IGFzIENvbnRleHRXaWRnZXRDb25maWc7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlUYXJnZXRJZkRldmljZURhc2hib2FyZChzZXR0aW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUYXJnZXRJZkRldmljZURhc2hib2FyZCh3aWRnZXRDb25maWc6IENvbnRleHRXaWRnZXRDb25maWcpIHtcbiAgICBjb25zdCBpc0RldmljZVR5cGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKTtcblxuICAgIGlmIChpc0RldmljZVR5cGUpIHtcbiAgICAgIHdpZGdldENvbmZpZy5zZXR0aW5ncy5oaWRlVGFyZ2V0ID0gaXNEZXZpY2VUeXBlO1xuXG4gICAgICBjb25zdCBub0RldmljZVRhcmdldCA9IHdpZGdldENvbmZpZy5zZXR0aW5ncy5uZzFcbiAgICAgICAgPyB3aWRnZXRDb25maWcuc2V0dGluZ3MubmcxLm9wdGlvbnMubm9EZXZpY2VUYXJnZXRcbiAgICAgICAgOiB3aWRnZXRDb25maWcuc2V0dGluZ3Mubm9EZXZpY2VUYXJnZXQ7XG5cbiAgICAgIGlmICghbm9EZXZpY2VUYXJnZXQpIHtcbiAgICAgICAgd2lkZ2V0Q29uZmlnLmRldmljZSA9IHtcbiAgICAgICAgICBpZDogdGhpcy5jb250ZXh0LmlkLFxuICAgICAgICAgIG5hbWU6IHRoaXMuY29udGV4dC5uYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3aWRnZXRDb25maWc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImgzXCJcbiAgICB0aXRsZT1cInt7ICdBZGQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgaWQ9XCJtb2RhbC10aXRsZVwiXG4gICAgKm5nSWY9XCIhY3VycmVudFwiXG4gICAgdHJhbnNsYXRlXG4gID5cbiAgICBBZGQgd2lkZ2V0XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJoM1wiXG4gICAgdGl0bGU9XCJ7eyAnRWRpdCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBpZD1cIm1vZGFsLXRpdGxlXCJcbiAgICAqbmdJZj1cImN1cnJlbnRcIlxuICAgIHRyYW5zbGF0ZVxuICA+XG4gICAgRWRpdCB3aWRnZXRcbiAgPC9kaXY+XG48L2Rpdj5cbjxmb3JtXG4gIG5hbWU9XCJmb3JtXCJcbiAgI2NvbmZpZ0Zvcm09XCJuZ0Zvcm1cIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjOHktbW9kYWwtdGFic1wiXG4gICAgaWQ9XCJtb2RhbC1ib2R5XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJDb250YWluZXJcIj5cbiAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBuYXYtdGFic2M4eSBwLWwtMjRcIj5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwibW9kZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3Qgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKCdzZWxlY3QnKTsgKGZhbHNlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRoLWxhcmdlXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNlbGVjdCB3aWRnZXQ8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBbY2xhc3MuYWN0aXZlXT1cIm1vZGUgPT09ICdjb25maWcnXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQ29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKCdjb25maWcnKTsgKGZhbHNlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNvZ1wiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5Db25maWd1cmF0aW9uPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2RlID09PSAnc3R5bGUnXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQXBwZWFyYW5jZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKCdzdHlsZScpOyAoZmFsc2UpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwicGFpbnQtYnJ1c2hcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+QXBwZWFyYW5jZTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGwgbW9kYWwtaW5uZXItc2Nyb2xsLS1maXhlZFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMCBwLWwtMjQgcC1yLTI0IHAtdC04IHAtYi04IHN0aWNreS1oZWFkZXItdG9wLTBcIlxuICAgICAgc3R5bGU9XCJ6LWluZGV4OiAyXCJcbiAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3NlbGVjdCdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNlYXJjaFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VhcmNoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlYXJjaOKApicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJ3aWRnZXQtY29uZmlnLS1TZWFyY2hcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJzZWFyY2hDaGFuZ2UkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3RcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldFNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cInNlYXJjaFRlcm0ubGVuZ3RoID09PSAwID8gJ3NlYXJjaCcgOiAnY2xvc2UnXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1vZGFsLWJvZHkgYmctbGV2ZWwtMlwiXG4gICAgICAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncm91cCBjYXJkLXNlbGVjdCBtLWItMFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tNCBjb2wteHMtNlwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBjbXAuZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjbXAgb2Ygc2VhcmNoUmVzdWx0IHx8IGNvbXBvbmVudHNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gZC1jb2wgY2FyZCBwLThcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZCA9PT0gY21wXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChjbXApXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgcC04IG0tYi04IGQtY29sIGZsZXgtY2VudGVyIGZsZXgtZ3JvdyBiZy1sZXZlbC0yXCJcbiAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY21wLnByZXZpZXdJbWFnZTsgZWxzZSBwcmV2aWV3SW1hZ2VcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaDFcIj48aSBjOHlJY29uPVwiZmlsZS1pbWFnZS1vXCI+PC9pPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCB0cmFuc2xhdGU+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJldmlld0ltYWdlPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LXRodW1ibmFpbFwiXG4gICAgICAgICAgICAgICAgICBhbHRcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY21wLnByZXZpZXdJbWFnZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRpdGxlIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICB0ZXh0PVwie3sgY21wLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYzh5LWVtcHR5LXN0YXRlIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaFJlc3VsdCAmJiBzZWFyY2hSZXN1bHQubGVuZ3RoID09PSAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaDFcIlxuICAgICAgICAgICAgYzh5SWNvbj1cInNlYXJjaFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxoMyB0cmFuc2xhdGU+Tm8gd2lkZ2V0cyBmb3VuZC48L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgIGNsYXNzPVwibS1yLThcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmVwaHJhc2UgeW91ciBzZWFyY2ggdGVybS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZXNldCBzZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNldFNlYXJjaCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ1Jlc2V0IHNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGludGVudGlvbmFsIHNldCB0byBoaWRkZW4gdG8gYWxsb3cgdGhlIFZpZXdDaGlsZCByZWYgaW4gdGhlIGNvbnRyb2xsZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXggZC1jb2wgZml0LWhcIlxuICAgICAgKm5nSWY9XCJzZWxlY3RlZFwiXG4gICAgICBbbmdDbGFzc109XCJ7IGhpZGRlbjogbW9kZSAhPT0gJ2NvbmZpZycgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNiBmbGV4LW5vLXNocmluayBzZXBhcmF0b3ItYm90dG9tIHAtYi0xNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1sLTI0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxlZnQgdGV4dC1tZWRpdW0gaDRcIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWQuZGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1yLTI0XCI+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGZvcj1cIndpZGdldFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRpdGxlXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwid2lkZ2V0VGl0bGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0ge3sgY29tcG9uZW50TGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmRhdGEudGl0bGVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJyb3cgZmxleC1ncm93XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZC1mbGV4Jzogd2lkZ2V0Q29uZmlnLm9wdGlvbnMgfHwgaGFzQ29uZmlnKCkgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImEtcy1zdHJldGNoXCJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYmctbGV2ZWwtMSBjb2wtc20tNCBwLXItMCc6IGhhc0NvbmZpZygpLFxuICAgICAgICAgICAgJ2JnLWxldmVsLTAgY29sLXNtLTEyJzogIWhhc0NvbmZpZygpXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZpdC1oIGJnLWluaGVyaXQgcC1sLTE2XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3Atci0yNCc6ICFoYXNDb25maWcoKSB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1yZWxhdGl2ZSBiZy1pbmhlcml0XCI+XG4gICAgICAgICAgICAgIDxjOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrIGJnLWluaGVyaXQgcC1yZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwdmggLSA0MjJweClcIlxuICAgICAgICAgICAgICAgIChvblNlbGVjdGVkKT1cInNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uQ2xlYXJTZWxlY3RlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgICAgICAgdmlldzogJ21pbGxlcicsXG4gICAgICAgICAgICAgICAgICBncm91cHNTZWxlY3RhYmxlOiB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb2x1bW5IZWFkZXJzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2hvd1VuYXNzaWduZWREZXZpY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiAhdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3MuY29udGV4dD8uYWRkaXRpb25QYXJlbnRzLFxuICAgICAgICAgICAgICAgICAgc2hvd0ZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNpbmdsZUNvbHVtbjogISF0aGlzLmhhc0NvbmZpZygpXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW2Fzc2V0XT1cIndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29udGV4dFwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRGV2aWNlXT1cInNlbGVjdGVkRGV2aWNlXCJcbiAgICAgICAgICAgICAgPjwvYzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdjb2wtc20tOCc6ICF3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0LFxuICAgICAgICAgICAgJ2NvbC1zbS0xMic6IHdpZGdldENvbmZpZy5zZXR0aW5ncz8ubm9EZXZpY2VUYXJnZXQsXG4gICAgICAgICAgICAnc3Itb25seSc6ICFoYXNDb25maWcoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1keW5hbWljLWNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiB7eyBoYXNDb25maWcoKSA/ICdjYWxjKDEwMHZoIC0gNDIycHgpJyA6ICcwJyB9fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpbm5lci1zY3JvbGwgcC1yLTI0JzogIXdpZGdldENvbmZpZy5zZXR0aW5ncz8ubm9EZXZpY2VUYXJnZXQgfVwiXG4gICAgICAgICAgICBbY29tcG9uZW50SWRdPVwic2VsZWN0ZWQuaWRcIlxuICAgICAgICAgICAgbW9kZT1cImNvbmZpZ1wiXG4gICAgICAgICAgICBbY29uZmlnXT1cIndpZGdldENvbmZpZ1wiXG4gICAgICAgICAgICBbbm90Rm91bmRFcnJvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAjY29uZmlnXG4gICAgICAgICAgPjwvYzh5LWR5bmFtaWMtY29tcG9uZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1ib2R5IHAtdC0wXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzEwcHgpXCJcbiAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3N0eWxlJ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTZcIj5cbiAgICAgICAgICA8Yzh5LWFwcGVhcmFuY2Utc2V0dGluZ3NcbiAgICAgICAgICAgIFsodGhlbWVDbGFzcyldPVwic3R5bGluZy5jb250ZW50Q2xhc3NcIlxuICAgICAgICAgICAgWyhoZWFkZXJDbGFzcyldPVwic3R5bGluZy5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICBbcG9zc2libGVTdHlsaW5nVGhlbWVdPVwicG9zc2libGVTdHlsaW5nLldJREdFVF9DT05URU5UX0NMQVNTRVNcIlxuICAgICAgICAgICAgW3Bvc3NpYmxlU3R5bGluZ0hlYWRlcl09XCJwb3NzaWJsZVN0eWxpbmcuV0lER0VUX0hFQURFUl9DTEFTU0VTXCJcbiAgICAgICAgICAgIFtkZWZhdWx0VGhlbWVDbGFzc109XCJkZWZhdWx0U3R5bGluZy5jb250ZW50Q2xhc3NcIlxuICAgICAgICAgICAgW2RlZmF1bHRIZWFkZXJDbGFzc109XCJkZWZhdWx0U3R5bGluZy5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgPjwvYzh5LWFwcGVhcmFuY2Utc2V0dGluZ3M+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTYgc3RpY2t5LWhlYWRlci10b3AtMFwiPlxuICAgICAgICAgIDxjOHktd2lkZ2V0LXByZXZpZXdcbiAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzgycHgpXCJcbiAgICAgICAgICAgIFtwcmV2aWV3Q2xhc3Nlc109XCJnZXRTdHlsZSh0cnVlKVwiXG4gICAgICAgICAgPjwvYzh5LXdpZGdldC1wcmV2aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICA+XG4gICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmZvcm1EaXNhYmxlZCB8fCBjb25maWdGb3JtLmludmFsaWQgfHwgY2hlY2tJZkRldmljZVJlcXVpcmVkKClcbiAgICAgIFwiXG4gICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgW2FjdGlvbk5hbWVdPVwiY3VycmVudCA/ICdlZGl0V2lkZ2V0JyA6ICdjcmVhdGVXaWRnZXQnXCJcbiAgICAgIFthY3Rpb25EYXRhXT1cInsgd2lkZ2V0TmFtZTogc2VsZWN0ZWQgJiYgc2VsZWN0ZWQuaWQgfVwiXG4gICAgPlxuICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -23,8 +23,7 @@ export class AssetTypesService {
23
23
  __and: [{ __has: 'c8y_IsAssetType' }, { name: 'group' }]
24
24
  }
25
25
  };
26
- this.DEFAULT_GROUP_ICON = 'c8y-group';
27
- this.DEFAULT_GROUP_ICON_OPEN = 'c8y-group-open';
26
+ this.DEFAULT_ASSET_ICON = 'c8y-enterprise';
28
27
  this.assetTypesCache = {};
29
28
  this.isCacheSet = false;
30
29
  this.allowedMethods = ['POST', 'PUT', 'DELETE'];
@@ -84,7 +83,7 @@ export class AssetTypesService {
84
83
  * Defaults to false.
85
84
  * @returns Returns an icon for a given asset type.
86
85
  */
87
- async getIcon(type, open = false) {
86
+ async getIcon(type) {
88
87
  if (!this.isCacheSet) {
89
88
  try {
90
89
  await this.initAssetTypesCache();
@@ -94,10 +93,7 @@ export class AssetTypesService {
94
93
  }
95
94
  }
96
95
  const assetType = this.getAssetTypeByName(type);
97
- return assetType?.c8y_IsAssetType?.icon?.name || this.getDefaultGroupIcon(open);
98
- }
99
- getDefaultGroupIcon(open = false) {
100
- return open ? this.DEFAULT_GROUP_ICON_OPEN : this.DEFAULT_GROUP_ICON;
96
+ return assetType?.c8y_IsAssetType?.icon?.name || this.DEFAULT_ASSET_ICON;
101
97
  }
102
98
  /**
103
99
  * Add an asset type to the local cache.
@@ -190,4 +186,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
190
186
  type: Injectable,
191
187
  args: [{ providedIn: 'root' }]
192
188
  }], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.ApiService }, { type: i3.AppStateService }]; } });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtdHlwZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYXNzZXQtdHlwZXMvYXNzZXQtdHlwZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFXLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUU3RDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQVk1QixZQUNVLFNBQTJCLEVBQzNCLFVBQXNCLEVBQ3RCLGVBQWdDO1FBRmhDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBZHpCLDJCQUFzQixHQUFHO1lBQ3hDLFFBQVEsRUFBRTtnQkFDUixLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3pEO1NBQ0YsQ0FBQztRQUNlLHVCQUFrQixHQUFHLFdBQVcsQ0FBQztRQUNqQyw0QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUNwRCxvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLG1CQUFjLEdBQUcsQ0FBQyxNQUFNLEVB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YjtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHlCQUF5QixDQUFDLElBQWE7UUFDN0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLGlCQUFpQixHQUNyQixJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQztRQUM5RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNELE9BQU8saUJBQWlCLElBQUksY0FBYyxDQUFDO0lBQzdDLENBQUM7OzhHQTFNVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQURKLE1BQU07MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwaUNhbGwsIEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBORVZFUiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuXG4vKipcbiAqIEFzc2V0VHlwZXNTZXJ2aWNlIGlzIGJlaW5nIHVzZWQgdG8gbWFuYWdlIGEgY2FjaGUgb2YgYWxsIGV4aXN0aW5nIGFzc2V0IHR5cGVzLlxuICogVGhpcyBzZXJ2aWNlIGlzIGluamVjdGVkIGluIHRoZSBBc3NldE92ZXJ2aWV3TmF2aWdhdGlvbkZhY3RvcnkgY2xhc3MsIHdoaWNoIHdpbGwgdHJpZ2dlclxuICogdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjYWNoZSBhcyB0aGUgY29uc3RydWN0b3IgaXMgY2FsbGVkLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFzc2V0VHlwZXNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBBU1NFVF9UWVBFX0dST1VQX1FVRVJZID0ge1xuICAgIF9fZmlsdGVyOiB7XG4gICAgICBfX2FuZDogW3sgX19oYXM6ICdjOHlfSXNBc3NldFR5cGUnIH0sIHsgbmFtZTogJ2dyb3VwJyB9XVxuICAgIH1cbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0dST1VQX0lDT04gPSAnYzh5LWdyb3VwJztcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0dST1VQX0lDT05fT1BFTiA9ICdjOHktZ3JvdXAtb3Blbic7XG4gIHByaXZhdGUgYXNzZXRUeXBlc0NhY2hlOiBvYmplY3QgPSB7fTtcbiAgcHJpdmF0ZSBpc0NhY2hlU2V0ID0gZmFsc2U7XG4gIHByaXZhdGUgYWxsb3dlZE1ldGhvZHMgPSBbJ1BPU1QnLCAnUFVUJywgJ0RFTEVURSddO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRVc2VyXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHVzZXIgPT4gdXNlcj8uaWQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAodXNlcklkID0+IHtcbiAgICAgICAgICBpZiAodXNlcklkKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRBc3NldFR5cGVzQ2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZUZvckFzc2V0VHlwZVVwZGF0ZXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NldFR5cGVzQ2FjaGUgPSB7fTtcbiAgICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyBhdmFpbGFibGUgYXNzZXQgdHlwZXMgYW5kIGFkZHMgZXZlcnkgYXNzZXQgdHlwZSB0byB0aGUgbG9jYWwgY2FjaGUuXG4gICAqIEByZXR1cm5zIElNYW5hZ2VkT2JqZWN0IHRhYmxlIG9mIGFzc2V0IHR5cGVzLlxuICAgKi9cbiAgYXN5bmMgaW5pdEFzc2V0VHlwZXNDYWNoZSgpOiBQcm9taXNlPElNYW5hZ2VkT2JqZWN0W10+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgZnJhZ21lbnRUeXBlOiAnYzh5X0lzQXNzZXRUeXBlJyxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2UsXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH0pO1xuICAgIGRhdGEuZm9yRWFjaChhc3NldFR5cGUgPT4gdGhpcy5hZGRBc3NldFR5cGUoYXNzZXRUeXBlKSk7XG5cbiAgICB0aGlzLmlzQ2FjaGVTZXQgPSB0cnVlO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXNzZXQgdHlwZSBmcm9tIHRoZSBjYWNoZSBiYXNlZCBvbiB0aGUgdW5pcXVlIG5hbWUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGFzc2V0IHR5cGUuXG4gICAqIEByZXR1cm5zIElNYW5hZ2VkT2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGFzc2V0IHR5cGUuXG4gICAqL1xuICBnZXRBc3NldFR5cGVCeU5hbWUobmFtZTogc3RyaW5nKTogSU1hbmFnZWRPYmplY3Qge1xuICAgIGlmICghdGhpcy5hc3NldFR5cGVzQ2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXNzZXRUeXBlc0NhY2hlW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXNzZXQgdHlwZSBmcm9tIHRoZSBjYWNoZSBiYXNlZCBvbiB0aGUgaWQuXG4gICAqIEBwYXJhbSBhc3NldFR5cGVJZCBJZCBvZiB0aGUgYXNzZXQgdHlwZS5cbiAgICogQHJldHVybnMgSU1hbmFnZWRPYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgYXNzZXQgdHlwZS5cbiAgICovXG4gIGdldEFzc2V0VHlwZUJ5SWQoYXNzZXRUeXBlSWQ6IHN0cmluZyk6IElNYW5hZ2VkT2JqZWN0IHtcbiAgICBpZiAoIWFzc2V0VHlwZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5hc3NldFR5cGVzQ2FjaGUpLmZpbmQoXG4gICAgICAoYXNzZXRUeXBlOiBJTWFuYWdlZE9iamVjdCkgPT4gYXNzZXRUeXBlLmlkID09PSBhc3NldFR5cGVJZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYW4gaWNvbiBmcm9tIGFuIGFzc2V0IHR5cGUuXG4gICAqIEBwYXJhbSB0eXBlIFR5cGUgb2YgdGhlIGFzc2V0IHR5cGUuXG4gICAqIEBwYXJhbSBvcGVuIERldGVybWluZXMgd2hldGhlciB0aGUgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gYWx0ZXJuYXRpdmUgaWNvbiBzaG93aW5nIHRoZSBvcGVuIHN0YXRlLlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICogQHJldHVybnMgUmV0dXJucyBhbiBpY29uIGZvciBhIGdpdmVuIGFzc2V0IHR5cGUuXG4gICAqL1xuICBhc3luYyBnZXRJY29uKHR5cGU6IHN0cmluZywgb3BlbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuaXNDYWNoZVNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0QXNzZXRUeXBlc0NhY2hlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFzc2V0VHlwZSA9IHRoaXMuZ2V0QXNzZXRUeXBlQnlOYW1lKHR5cGUpO1xuICAgIHJldHVybiBhc3NldFR5cGU/LmM4eV9Jc0Fzc2V0VHlwZT8uaWNvbj8ubmFtZSB8fCB0aGlzLmdldERlZmF1bHRHcm91cEljb24ob3Blbik7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRHcm91cEljb24ob3BlbiA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wZW4gPyB0aGlzLkRFRkFVTFRfR1JPVVBfSUNPTl9PUEVOIDogdGhpcy5ERUZBVUxUX0dST1VQX0lDT047XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFzc2V0IHR5cGUgdG8gdGhlIGxvY2FsIGNhY2hlLlxuICAgKiBAcGFyYW0gYXNzZXRUeXBlIEFzc2V0IHR5cGUgd2hpY2ggc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjYWNoZS5cbiAgICogQHJldHVybnMgdm9pZC5cbiAgICovXG4gIHByaXZhdGUgYWRkQXNzZXRUeXBlKGFzc2V0VHlwZTogSU1hbmFnZWRPYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2V0VHlwZXNDYWNoZVthc3NldFR5cGUubmFtZV0gPSBhc3NldFR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFuIGFzc2V0IHR5cGUgZnJvbSB0aGUgbG9jYWwgY2FjaGUgYmFzZWQgb24gdGhlIGdpdmVuIGFzc2V0IHR5cGUgaWQuXG4gICAqIEBwYXJhbSBhc3NldFR5cGVJZCBJZCBvZiB0aGUgYXNzZXQgdHlwZSB3aGljaCBzaG91bGQgYmUgZGVsZXRlZC5cbiAgICogQHJldHVybnMgdm9pZC5cbiAgICovXG4gIHByaXZhdGUgZGVsZXRlQXNzZXRUeXBlKGFzc2V0VHlwZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBhc3NldFR5cGUgPSB0aGlzLmdldEFzc2V0VHlwZUJ5SWQoYXNzZXRUeXBlSWQpO1xuICAgIGlmIChhc3NldFR5cGUpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmFzc2V0VHlwZXNDYWNoZVthc3NldFR5cGUubmFtZV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgYW4gYXNzZXQgdHlwZSBpbiB0aGUgbG9jYWwgY2FjaGUuXG4gICAqIEBwYXJhbSBhc3NldFR5cGUgQXNzZXQgdHlwZSB3aGljaCBzaG91bGQgYmUgdXBkYXRlZCBpbiB0aGUgY2FjaGUuXG4gICAqIEByZXR1cm5zIHZvaWQuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFzc2V0VHlwZShhc3NldFR5cGU6IElNYW5hZ2VkT2JqZWN0KTogdm9pZCB7XG4gICAgY29uc3QgY2FjaGVkQXNzZXRUeXBlID0gdGhpcy5nZXRBc3NldFR5cGVCeUlkKGFzc2V0VHlwZS5pZCk7XG4gICAgaWYgKGNhY2hlZEFzc2V0VHlwZSkge1xuICAgICAgdGhpcy5hc3NldFR5cGVzQ2FjaGVbY2FjaGVkQXNzZXRUeXBlLm5hbWVdID0gT2JqZWN0LmFzc2lnbihjYWNoZWRBc3NldFR5cGUsIGFzc2V0VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gYXBpIFBVVCwgUE9TVCBhbmQgREVMRVRFIHJlcXVlc3RzIGludGVyY2VwdG9yIHRvIHVwZGF0ZSBsb2NhbCBhc3NldCB0eXBlcyBjYWNoZS5cbiAgICogSWYgYSBuZXcgYXNzZXQgdHlwZSBoYXMgYmVlbiBjcmVhdGVkIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxvY2FsIGNhY2hlLiBJZiBhbiBhc3NldFxuICAgKiB0eXBlIGhhcyBiZWVuIGRlbGV0ZWQgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxvY2FsIGNhY2hlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JBc3NldFR5cGVVcGRhdGVzKCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5ob29rUmVzcG9uc2UoYyA9PiB0aGlzLmNoZWNrSWZJbnZlbnRvcnlNb0FwaUNhbGwoYykpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChjYWxsOiBBcGlDYWxsKSA9PiAhIWNhbGw/Lm1ldGhvZCAmJiB0aGlzLmlzRXhwZWN0ZWRNZXRob2QoY2FsbCkpLFxuICAgICAgICBtZXJnZU1hcCh0aGlzLmFwaVNlcnZpY2UucmVzb2x2ZURhdGE8SU1hbmFnZWRPYmplY3QgfCBudWxsPiksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBtZXRob2QsIGRhdGEsIHVybCB9KSA9PlxuICAgICAgICAgIG1ldGhvZCA9PT0gJ0RFTEVURScgPyB0aGlzLmhhbmRsZURlbGV0ZShtZXRob2QsIHVybCkgOiBvZihkYXRhKVxuICAgICAgICApLFxuICAgICAgICBmaWx0ZXIoKG1vOiBJTWFuYWdlZE9iamVjdCkgPT4gISFtbyAmJiB0aGlzLmhhc0lzQXNzZXRUeXBlRnJhZ21lbnQobW8pKSxcbiAgICAgICAgdGFwKChtbzogSU1hbmFnZWRPYmplY3QpID0+IHRoaXMuaGFuZGxlUHV0T3JQb3N0KG1vKSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzRXhwZWN0ZWRNZXRob2QoY2FsbDogQXBpQ2FsbCkge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRNZXRob2RzLmluY2x1ZGVzKGNhbGw/Lm1ldGhvZCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURlbGV0ZShtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb0lkOiBzdHJpbmcgPSB0aGlzLmdldE1vSWRGcm9tVXJsKHVybCk7XG4gICAgaWYgKG1ldGhvZCAhPT0gJ0RFTEVURScgfHwgIW1vSWQpIHtcbiAgICAgIHJldHVybiBORVZFUjtcbiAgICB9XG4gICAgdGhpcy5kZWxldGVBc3NldFR5cGUobW9JZCk7XG4gICAgcmV0dXJuIE5FVkVSO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQdXRPclBvc3QobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKHRoaXMuZ2V0QXNzZXRUeXBlQnlJZChtby5pZCkpIHtcbiAgICAgIHRoaXMudXBkYXRlQXNzZXRUeXBlKG1vKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRBc3NldFR5cGUobW8pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzSXNBc3NldFR5cGVGcmFnbWVudChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gbW8/Lmhhc093blByb3BlcnR5KCdjOHlfSXNBc3NldFR5cGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9JZEZyb21VcmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZWdleCA9IC9tYW5hZ2VkT2JqZWN0c1xcLyhcXGQrKS87XG4gICAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBtb0lkID0gbWF0Y2hbMV07XG4gICAgICByZXR1cm4gbW9JZDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmFnZWQgb2JqZWN0cyBpbnZlbnRvcnkgYXBpIGZpbHRlciwgYWxsb3dpbmcgb25seSBQVVQsIFBPU1QgYW5kIERFTEVURSBtZXRob2RzLlxuICAgKiBAcGFyYW0gY2FsbCBBcGkgY2FsbCB0byBmaWx0ZXIuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBhcGkgY2FsbCBtZWV0cyB0aGUgcmVxdWlyZWQgY3JpdGVyaWEuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrSWZJbnZlbnRvcnlNb0FwaUNhbGwoY2FsbDogQXBpQ2FsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1JlcXVpcmVkTWV0aG9kID1cbiAgICAgIGNhbGwubWV0aG9kID09PSAnUE9TVCcgfHwgY2FsbC5tZXRob2QgPT09ICdERUxFVEUnIHx8IGNhbGwubWV0aG9kID09PSAnUFVUJztcbiAgICBjb25zdCBoYXNSZXF1aXJlZFVybCA9IGNhbGwudXJsLmluY2x1ZGVzKCdtYW5hZ2VkT2JqZWN0cycpO1xuICAgIHJldHVybiBoYXNSZXF1aXJlZE1ldGhvZCAmJiBoYXNSZXF1aXJlZFVybDtcbiAgfVxufVxuIl19
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtdHlwZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYXNzZXQtdHlwZXMvYXNzZXQtdHlwZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFXLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUU3RDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQVc1QixZQUNVLFNBQTJCLEVBQzNCLFVBQXNCLEVBQ3RCLGVBQWdDO1FBRmhDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBYnpCLDJCQUFzQixHQUFHO1lBQ3hDLFFBQVEsRUFBRTtnQkFDUixLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3pEO1NBQ0YsQ0FBQztRQUNlLHVCQUFrQixHQUFHLGdCQUFnQixDQUFDO1FBQy9DLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsbUJBQWMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7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SUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUM7UUFDOUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRCxPQUFPLGlCQUFpQixJQUFJLGNBQWMsQ0FBQztJQUM3QyxDQUFDOzs4R0FyTVUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcGlDYWxsLCBBcGlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgTkVWRVIsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBBc3NldFR5cGVzU2VydmljZSBpcyBiZWluZyB1c2VkIHRvIG1hbmFnZSBhIGNhY2hlIG9mIGFsbCBleGlzdGluZyBhc3NldCB0eXBlcy5cbiAqIFRoaXMgc2VydmljZSBpcyBpbmplY3RlZCBpbiB0aGUgQXNzZXRPdmVydmlld05hdmlnYXRpb25GYWN0b3J5IGNsYXNzLCB3aGljaCB3aWxsIHRyaWdnZXJcbiAqIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2FjaGUgYXMgdGhlIGNvbnN0cnVjdG9yIGlzIGNhbGxlZC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBc3NldFR5cGVzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgQVNTRVRfVFlQRV9HUk9VUF9RVUVSWSA9IHtcbiAgICBfX2ZpbHRlcjoge1xuICAgICAgX19hbmQ6IFt7IF9faGFzOiAnYzh5X0lzQXNzZXRUeXBlJyB9LCB7IG5hbWU6ICdncm91cCcgfV1cbiAgICB9XG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9BU1NFVF9JQ09OID0gJ2M4eS1lbnRlcnByaXNlJztcbiAgcHJpdmF0ZSBhc3NldFR5cGVzQ2FjaGU6IG9iamVjdCA9IHt9O1xuICBwcml2YXRlIGlzQ2FjaGVTZXQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhbGxvd2VkTWV0aG9kcyA9IFsnUE9TVCcsICdQVVQnLCAnREVMRVRFJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFVzZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAodXNlciA9PiB1c2VyPy5pZCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCh1c2VySWQgPT4ge1xuICAgICAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEFzc2V0VHlwZXNDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlRm9yQXNzZXRUeXBlVXBkYXRlcygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2V0VHlwZXNDYWNoZSA9IHt9O1xuICAgICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIGF2YWlsYWJsZSBhc3NldCB0eXBlcyBhbmQgYWRkcyBldmVyeSBhc3NldCB0eXBlIHRvIHRoZSBsb2NhbCBjYWNoZS5cbiAgICogQHJldHVybnMgSU1hbmFnZWRPYmplY3QgdGFibGUgb2YgYXNzZXQgdHlwZXMuXG4gICAqL1xuICBhc3luYyBpbml0QXNzZXRUeXBlc0NhY2hlKCk6IFByb21pc2U8SU1hbmFnZWRPYmplY3RbXT4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBmcmFnbWVudFR5cGU6ICdjOHlfSXNBc3NldFR5cGUnLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgfSk7XG4gICAgZGF0YS5mb3JFYWNoKGFzc2V0VHlwZSA9PiB0aGlzLmFkZEFzc2V0VHlwZShhc3NldFR5cGUpKTtcblxuICAgIHRoaXMuaXNDYWNoZVNldCA9IHRydWU7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhc3NldCB0eXBlIGZyb20gdGhlIGNhY2hlIGJhc2VkIG9uIHRoZSB1bmlxdWUgbmFtZSBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgYXNzZXQgdHlwZS5cbiAgICogQHJldHVybnMgSU1hbmFnZWRPYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgYXNzZXQgdHlwZS5cbiAgICovXG4gIGdldEFzc2V0VHlwZUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBJTWFuYWdlZE9iamVjdCB7XG4gICAgaWYgKCF0aGlzLmFzc2V0VHlwZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hc3NldFR5cGVzQ2FjaGVbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhc3NldCB0eXBlIGZyb20gdGhlIGNhY2hlIGJhc2VkIG9uIHRoZSBpZC5cbiAgICogQHBhcmFtIGFzc2V0VHlwZUlkIElkIG9mIHRoZSBhc3NldCB0eXBlLlxuICAgKiBAcmV0dXJucyBJTWFuYWdlZE9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBhc3NldCB0eXBlLlxuICAgKi9cbiAgZ2V0QXNzZXRUeXBlQnlJZChhc3NldFR5cGVJZDogc3RyaW5nKTogSU1hbmFnZWRPYmplY3Qge1xuICAgIGlmICghYXNzZXRUeXBlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmFzc2V0VHlwZXNDYWNoZSkuZmluZChcbiAgICAgIChhc3NldFR5cGU6IElNYW5hZ2VkT2JqZWN0KSA9PiBhc3NldFR5cGUuaWQgPT09IGFzc2V0VHlwZUlkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbiBpY29uIGZyb20gYW4gYXNzZXQgdHlwZS5cbiAgICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgYXNzZXQgdHlwZS5cbiAgICogQHBhcmFtIG9wZW4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBhbHRlcm5hdGl2ZSBpY29uIHNob3dpbmcgdGhlIG9wZW4gc3RhdGUuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGFuIGljb24gZm9yIGEgZ2l2ZW4gYXNzZXQgdHlwZS5cbiAgICovXG4gIGFzeW5jIGdldEljb24odHlwZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuaXNDYWNoZVNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0QXNzZXRUeXBlc0NhY2hlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFzc2V0VHlwZSA9IHRoaXMuZ2V0QXNzZXRUeXBlQnlOYW1lKHR5cGUpO1xuICAgIHJldHVybiBhc3NldFR5cGU/LmM4eV9Jc0Fzc2V0VHlwZT8uaWNvbj8ubmFtZSB8fCB0aGlzLkRFRkFVTFRfQVNTRVRfSUNPTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYXNzZXQgdHlwZSB0byB0aGUgbG9jYWwgY2FjaGUuXG4gICAqIEBwYXJhbSBhc3NldFR5cGUgQXNzZXQgdHlwZSB3aGljaCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNhY2hlLlxuICAgKiBAcmV0dXJucyB2b2lkLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRBc3NldFR5cGUoYXNzZXRUeXBlOiBJTWFuYWdlZE9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXRUeXBlc0NhY2hlW2Fzc2V0VHlwZS5uYW1lXSA9IGFzc2V0VHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW4gYXNzZXQgdHlwZSBmcm9tIHRoZSBsb2NhbCBjYWNoZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXNzZXQgdHlwZSBpZC5cbiAgICogQHBhcmFtIGFzc2V0VHlwZUlkIElkIG9mIHRoZSBhc3NldCB0eXBlIHdoaWNoIHNob3VsZCBiZSBkZWxldGVkLlxuICAgKiBAcmV0dXJucyB2b2lkLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWxldGVBc3NldFR5cGUoYXNzZXRUeXBlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGFzc2V0VHlwZSA9IHRoaXMuZ2V0QXNzZXRUeXBlQnlJZChhc3NldFR5cGVJZCk7XG4gICAgaWYgKGFzc2V0VHlwZSkge1xuICAgICAgZGVsZXRlIHRoaXMuYXNzZXRUeXBlc0NhY2hlW2Fzc2V0VHlwZS5uYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbiBhc3NldCB0eXBlIGluIHRoZSBsb2NhbCBjYWNoZS5cbiAgICogQHBhcmFtIGFzc2V0VHlwZSBBc3NldCB0eXBlIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkIGluIHRoZSBjYWNoZS5cbiAgICogQHJldHVybnMgdm9pZC5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQXNzZXRUeXBlKGFzc2V0VHlwZTogSU1hbmFnZWRPYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBjYWNoZWRBc3NldFR5cGUgPSB0aGlzLmdldEFzc2V0VHlwZUJ5SWQoYXNzZXRUeXBlLmlkKTtcbiAgICBpZiAoY2FjaGVkQXNzZXRUeXBlKSB7XG4gICAgICB0aGlzLmFzc2V0VHlwZXNDYWNoZVtjYWNoZWRBc3NldFR5cGUubmFtZV0gPSBPYmplY3QuYXNzaWduKGNhY2hlZEFzc2V0VHlwZSwgYXNzZXRUeXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byBhcGkgUFVULCBQT1NUIGFuZCBERUxFVEUgcmVxdWVzdHMgaW50ZXJjZXB0b3IgdG8gdXBkYXRlIGxvY2FsIGFzc2V0IHR5cGVzIGNhY2hlLlxuICAgKiBJZiBhIG5ldyBhc3NldCB0eXBlIGhhcyBiZWVuIGNyZWF0ZWQgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbG9jYWwgY2FjaGUuIElmIGFuIGFzc2V0XG4gICAqIHR5cGUgaGFzIGJlZW4gZGVsZXRlZCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbG9jYWwgY2FjaGUuXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZUZvckFzc2V0VHlwZVVwZGF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmhvb2tSZXNwb25zZShjID0+IHRoaXMuY2hlY2tJZkludmVudG9yeU1vQXBpQ2FsbChjKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGNhbGw6IEFwaUNhbGwpID0+ICEhY2FsbD8ubWV0aG9kICYmIHRoaXMuaXNFeHBlY3RlZE1ldGhvZChjYWxsKSksXG4gICAgICAgIG1lcmdlTWFwKHRoaXMuYXBpU2VydmljZS5yZXNvbHZlRGF0YTxJTWFuYWdlZE9iamVjdCB8IG51bGw+KSxcbiAgICAgICAgc3dpdGNoTWFwKCh7IG1ldGhvZCwgZGF0YSwgdXJsIH0pID0+XG4gICAgICAgICAgbWV0aG9kID09PSAnREVMRVRFJyA/IHRoaXMuaGFuZGxlRGVsZXRlKG1ldGhvZCwgdXJsKSA6IG9mKGRhdGEpXG4gICAgICAgICksXG4gICAgICAgIGZpbHRlcigobW86IElNYW5hZ2VkT2JqZWN0KSA9PiAhIW1vICYmIHRoaXMuaGFzSXNBc3NldFR5cGVGcmFnbWVudChtbykpLFxuICAgICAgICB0YXAoKG1vOiBJTWFuYWdlZE9iamVjdCkgPT4gdGhpcy5oYW5kbGVQdXRPclBvc3QobW8pKVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFeHBlY3RlZE1ldGhvZChjYWxsOiBBcGlDYWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dlZE1ldGhvZHMuaW5jbHVkZXMoY2FsbD8ubWV0aG9kKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGVsZXRlKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1vSWQ6IHN0cmluZyA9IHRoaXMuZ2V0TW9JZEZyb21VcmwodXJsKTtcbiAgICBpZiAobWV0aG9kICE9PSAnREVMRVRFJyB8fCAhbW9JZCkge1xuICAgICAgcmV0dXJuIE5FVkVSO1xuICAgIH1cbiAgICB0aGlzLmRlbGV0ZUFzc2V0VHlwZShtb0lkKTtcbiAgICByZXR1cm4gTkVWRVI7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVB1dE9yUG9zdChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAodGhpcy5nZXRBc3NldFR5cGVCeUlkKG1vLmlkKSkge1xuICAgICAgdGhpcy51cGRhdGVBc3NldFR5cGUobW8pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZEFzc2V0VHlwZShtbyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNJc0Fzc2V0VHlwZUZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiBtbz8uaGFzT3duUHJvcGVydHkoJ2M4eV9Jc0Fzc2V0VHlwZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb0lkRnJvbVVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHJlZ2V4ID0gL21hbmFnZWRPYmplY3RzXFwvKFxcZCspLztcbiAgICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaChyZWdleCk7XG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IG1vSWQgPSBtYXRjaFsxXTtcbiAgICAgIHJldHVybiBtb0lkO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTWFuYWdlZCBvYmplY3RzIGludmVudG9yeSBhcGkgZmlsdGVyLCBhbGxvd2luZyBvbmx5IFBVVCwgUE9TVCBhbmQgREVMRVRFIG1ldGhvZHMuXG4gICAqIEBwYXJhbSBjYWxsIEFwaSBjYWxsIHRvIGZpbHRlci5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGFwaSBjYWxsIG1lZXRzIHRoZSByZXF1aXJlZCBjcml0ZXJpYS5cbiAgICovXG4gIHByaXZhdGUgY2hlY2tJZkludmVudG9yeU1vQXBpQ2FsbChjYWxsOiBBcGlDYWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjYWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzUmVxdWlyZWRNZXRob2QgPVxuICAgICAgY2FsbC5tZXRob2QgPT09ICdQT1NUJyB8fCBjYWxsLm1ldGhvZCA9PT0gJ0RFTEVURScgfHwgY2FsbC5tZXRob2QgPT09ICdQVVQnO1xuICAgIGNvbnN0IGhhc1JlcXVpcmVkVXJsID0gY2FsbC51cmwuaW5jbHVkZXMoJ21hbmFnZWRPYmplY3RzJyk7XG4gICAgcmV0dXJuIGhhc1JlcXVpcmVkTWV0aG9kICYmIGhhc1JlcXVpcmVkVXJsO1xuICB9XG59XG4iXX0=
@@ -51,7 +51,7 @@ export class GroupService {
51
51
  async getIcon(mo, open = false) {
52
52
  const genericMoType = this.determineMoType(mo);
53
53
  if (genericMoType === 'asset') {
54
- return await this.getAssetCustomIcon(mo.type, open);
54
+ return await this.getAssetCustomIcon(mo.type);
55
55
  }
56
56
  const typeIcons = this.getDefaultIcon(genericMoType);
57
57
  return (open && typeIcons.iconOpen) || typeIcons.icon;
@@ -116,8 +116,8 @@ export class GroupService {
116
116
  isDevice(mo) {
117
117
  return !!mo.c8y_IsDevice;
118
118
  }
119
- getAssetCustomIcon(moType, open = false) {
120
- return this.assetTypesService.getIcon(moType, open);
119
+ getAssetCustomIcon(moType) {
120
+ return this.assetTypesService.getIcon(moType);
121
121
  }
122
122
  getDefaultIcon(moType) {
123
123
  return this.icons[moType];
@@ -155,4 +155,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
155
155
  providedIn: 'root'
156
156
  }]
157
157
  }], ctorParameters: function () { return [{ type: i1.AssetTypesService }]; }, propDecorators: { getIcon: [] } });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2dyb3VwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFFOUMsTUFBTSxRQUFRLEdBQUc7SUFDZixPQUFPO0lBQ1AsY0FBYztJQUNkLGNBQWM7SUFDZCxzQkFBc0I7SUFDdEIsT0FBTztJQUNQLE9BQU87Q0FDQyxDQUFDO0FBV1gsTUFBTSxPQUFPLFlBQVk7SUF5QnZCLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBeEIvQyxVQUFLLEdBQVU7WUFDdEIsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUksRUFBRSwyQkFBMkI7Z0JBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsUUFBUSxFQUFFLHVCQUF1QjthQUNsQztZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsV0FBVztnQkFDakIsUUFBUSxFQUFFLGdCQUFnQjthQUMzQjtZQUNELFlBQVksRUFBRTtnQkFDWixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixRQUFRLEVBQUUsc0JBQXNCO2FBQ2pDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsZUFBZTthQUMzQjtTQUNGLENBQUM7UUFDRixxQ0FBZ0MsR0FBRyxJQUFJ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QUFDLEVBQUU7WUFDL0IsT0FBTyxjQUFjLENBQUM7U0FDdkI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDekIsT0FBTyxzQkFBc0IsQ0FBQztTQUMvQjtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNwQixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O3lHQW5KVSxZQUFZOzZHQUFaLFlBQVksY0FGWCxNQUFNO0FBcUNsQjtJQURDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7MkNBUXZCOzJGQTFDVSxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjt3R0FvQ08sT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQXNzZXRUeXBlc1NlcnZpY2UgfSBmcm9tICcuLi9hc3NldC10eXBlcy9hc3NldC10eXBlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdyb3VwRnJhZ21lbnQgfSBmcm9tICcuL2dyb3VwLWZyYWdtZW50Lm1vZGVsJztcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tICcuL21lbW9pemUuZGVjb3JhdG9yJztcblxuY29uc3QgTU9fVFlQRVMgPSBbXG4gICdhc3NldCcsXG4gICdkeW5hbWljR3JvdXAnLFxuICAnYnJva2VyU291cmNlJyxcbiAgJ2Jyb2tlclNvdXJjZUluYWN0aXZlJyxcbiAgJ2dyb3VwJyxcbiAgJ290aGVyJ1xuXSBhcyBjb25zdDtcblxudHlwZSBNb1R5cGVzID0gdHlwZW9mIE1PX1RZUEVTW251bWJlcl07XG5cbnR5cGUgSWNvbiA9IFBhcnRpYWw8eyBpY29uOiBzdHJpbmc7IGljb25PcGVuPzogc3RyaW5nOyBpY29uQ2xhc3M/OiBzdHJpbmcgfT47XG5cbnR5cGUgSWNvbnMgPSBQYXJ0aWFsPFJlY29yZDxNb1R5cGVzLCBJY29uPj47XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdyb3VwU2VydmljZSB7XG4gIHJlYWRvbmx5IGljb25zOiBJY29ucyA9IHtcbiAgICBicm9rZXJTb3VyY2VJbmFjdGl2ZToge1xuICAgICAgaWNvbjogJ2M4eS1ncm91cC1yZW1vdGUtaW5hY3RpdmUnLFxuICAgICAgaWNvbk9wZW46ICdjOHktZ3JvdXAtcmVtb3RlLWluYWN0aXZlJ1xuICAgIH0sXG4gICAgYnJva2VyU291cmNlOiB7XG4gICAgICBpY29uOiAnYzh5LWdyb3VwLXJlbW90ZScsXG4gICAgICBpY29uT3BlbjogJ2M4eS1ncm91cC1yZW1vdGUtb3BlbidcbiAgICB9LFxuICAgIGdyb3VwOiB7XG4gICAgICBpY29uOiAnYzh5LWdyb3VwJyxcbiAgICAgIGljb25PcGVuOiAnYzh5LWdyb3VwLW9wZW4nXG4gICAgfSxcbiAgICBkeW5hbWljR3JvdXA6IHtcbiAgICAgIGljb246ICdjOHktZ3JvdXAtc21hcnQnLFxuICAgICAgaWNvbk9wZW46ICdjOHktZ3JvdXAtc21hcnQtb3BlbidcbiAgICB9LFxuICAgIG90aGVyOiB7XG4gICAgICBpY29uOiAnZXhjaGFuZ2UnLFxuICAgICAgaWNvbkNsYXNzOiAnc3RhdHVzVW5rbm93bidcbiAgICB9XG4gIH07XG4gIGRhdGFCcm9rZXJTb3VyY2VGcmFnbWVudEluYWN0aXZlID0gYF8ke0dyb3VwRnJhZ21lbnQuZGF0YUJyb2tlclNvdXJjZUZyYWdtZW50fWA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhc3NldFR5cGVzU2VydmljZTogQXNzZXRUeXBlc1NlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuIGljb24gYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIGEgbWFuYWdlZCBvYmplY3QuXG4gICAqIEl0IHRha2VzIGludG8gYWNjb3VudCBmYWN0b3JzIHN1Y2ggYXMgdHlwZSwgYW5kIHNwZWNpZmljIGZyYWdtZW50cy5cbiAgICogQHBhcmFtIG1vIE1hbmFnZWQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEBwYXJhbSBvcGVuIERldGVybWluZXMgd2hldGhlciB0aGUgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gYWx0ZXJuYXRpdmUgaWNvbiBzaG93aW5nIHRoZSBvcGVuIHN0YXRlLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGFuIGljb24uXG4gICAqL1xuICBAbWVtb2l6ZShwcm9wZXJ0eSgnaWQnKSlcbiAgYXN5bmMgZ2V0SWNvbihtbzogSU1hbmFnZWRPYmplY3QsIG9wZW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZ2VuZXJpY01vVHlwZSA9IHRoaXMuZGV0ZXJtaW5lTW9UeXBlKG1vKTtcbiAgICBpZiAoZ2VuZXJpY01vVHlwZSA9PT0gJ2Fzc2V0Jykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXNzZXRDdXN0b21JY29uKG1vLnR5cGUsIG9wZW4pO1xuICAgIH1cbiAgICBjb25zdCB0eXBlSWNvbnMgPSB0aGlzLmdldERlZmF1bHRJY29uKGdlbmVyaWNNb1R5cGUpO1xuICAgIHJldHVybiAob3BlbiAmJiB0eXBlSWNvbnMuaWNvbk9wZW4pIHx8IHR5cGVJY29ucy5pY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYSBncm91cC5cbiAgICogQHBhcmFtIG1vIE1hbmFnZWQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFuYWdlZCBvYmplY3QgaXMgYSBncm91cC5cbiAgICovXG4gIGlzR3JvdXAobW86IElNYW5hZ2VkT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhbW9bR3JvdXBGcmFnbWVudC5ncm91cEZyYWdtZW50VHlwZV0gfHwgbW8udHlwZSA9PT0gR3JvdXBGcmFnbWVudC5ncm91cFR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBtYW5hZ2VkIG9iamVjdCBpcyBhIGR5bmFtaWMgZ3JvdXAuXG4gICAqIEBwYXJhbSBtbyBNYW5hZ2VkIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hbmFnZWQgb2JqZWN0IGlzIGEgZHluYW1pYyBncm91cC5cbiAgICovXG4gIGlzRHluYW1pY0dyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW1vW0dyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwRnJhZ21lbnRdIHx8IG1vLnR5cGUgPT09IEdyb3VwRnJhZ21lbnQuZHluYW1pY0dyb3VwVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIG1hbmFnZWQgb2JqZWN0IGlzIGEgZGF0YSBicm9rZXIuXG4gICAqIEBwYXJhbSBtbyBNYW5hZ2VkIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hbmFnZWQgb2JqZWN0IGlzIGEgZGF0YSBicm9rZXIuXG4gICAqL1xuICBpc0RhdGFCcm9rZXIobW86IElNYW5hZ2VkT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhbW9bR3JvdXBGcmFnbWVudC5kYXRhQnJva2VyU291cmNlRnJhZ21lbnRdIHx8ICEhbW9bdGhpcy5kYXRhQnJva2VyU291cmNlRnJhZ21lbnRJbmFjdGl2ZV1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYSBkYXRhIGJyb2tlciBhY3RpdmUuXG4gICAqIEBwYXJhbSBtbyBNYW5hZ2VkIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hbmFnZWQgb2JqZWN0IGlzIGEgZGF0YSBicm9rZXIgYWN0aXZlLlxuICAgKi9cbiAgaXNEYXRhQnJva2VyQWN0aXZlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiAoXG4gICAgICAhIW1vW0dyb3VwRnJhZ21lbnQuZGF0YUJyb2tlclNvdXJjZUZyYWdtZW50XSAmJiAhbW9bdGhpcy5kYXRhQnJva2VyU291cmNlRnJhZ21lbnRJbmFjdGl2ZV1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYW4gYXNzZXQuXG4gICAqIEBwYXJhbSBtbyBNYW5hZ2VkIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hbmFnZWQgb2JqZWN0IGlzIGFuIGFzc2V0LlxuICAgKi9cbiAgaXNBc3NldChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gISFtby5jOHlfSXNBc3NldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlbG9uZ3MgdG8gYW55IHR5cGUgb2YgZ3JvdXAuXG4gICAqIFR5cGVzIG9mIGdyb3VwczogZ3JvdXAsIGR5bmFtaWMgZ3JvdXAsIGRhdGEgYnJva2VyLCBkYXRhIGJyb2tlciBhY3RpdmUuXG4gICAqIEBwYXJhbSBtbyBNYW5hZ2VkIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hbmFnZWQgb2JqZWN0IGJlbG9uZ3MgdG8gdGhlIGdyb3VwIGNhdGVnb3J5LlxuICAgKi9cbiAgaXNBbnlHcm91cChtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0dyb3VwKG1vKSB8fFxuICAgICAgdGhpcy5pc0R5bmFtaWNHcm91cChtbykgfHxcbiAgICAgIHRoaXMuaXNEYXRhQnJva2VyKG1vKSB8fFxuICAgICAgdGhpcy5pc0RhdGFCcm9rZXJBY3RpdmUobW8pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIG1hbmFnZWQgb2JqZWN0IGlzIGEgZGV2aWNlLlxuICAgKiBAcGFyYW0gbW8gTWFuYWdlZCBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYW5hZ2VkIG9iamVjdCBpcyBhIGRldmljZS5cbiAgICovXG4gIGlzRGV2aWNlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiAhIW1vLmM4eV9Jc0RldmljZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXNzZXRDdXN0b21JY29uKG1vVHlwZTogc3RyaW5nLCBvcGVuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmFzc2V0VHlwZXNTZXJ2aWNlLmdldEljb24obW9UeXBlLCBvcGVuKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEljb24obW9UeXBlOiBNb1R5cGVzKTogSWNvbiB7XG4gICAgcmV0dXJuIHRoaXMuaWNvbnNbbW9UeXBlXTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lTW9UeXBlKG1vOiBJTWFuYWdlZE9iamVjdCk6IE1vVHlwZXMge1xuICAgIGlmICh0aGlzLmlzQXNzZXQobW8pKSB7XG4gICAgICByZXR1cm4gJ2Fzc2V0JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0R5bmFtaWNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiAnZHluYW1pY0dyb3VwJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0RhdGFCcm9rZXJBY3RpdmUobW8pKSB7XG4gICAgICByZXR1cm4gJ2Jyb2tlclNvdXJjZSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEYXRhQnJva2VyKG1vKSkge1xuICAgICAgcmV0dXJuICdicm9rZXJTb3VyY2VJbmFjdGl2ZSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiAnZ3JvdXAnO1xuICAgIH1cblxuICAgIHJldHVybiAnb3RoZXInO1xuICB9XG59XG4iXX0=
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2dyb3VwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFFOUMsTUFBTSxRQUFRLEdBQUc7SUFDZixPQUFPO0lBQ1AsY0FBYztJQUNkLGNBQWM7SUFDZCxzQkFBc0I7SUFDdEIsT0FBTztJQUNQLE9BQU87Q0FDQyxDQUFDO0FBV1gsTUFBTSxPQUFPLFlBQVk7SUF5QnZCLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBeEIvQyxVQUFLLEdBQVU7WUFDdEIsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUksRUFBRSwyQkFBMkI7Z0JBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsUUFBUSxFQUFFLHVCQUF1QjthQUNsQztZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsV0FBVztnQkFDakIsUUFBUSxFQUFFLGdCQUFnQjthQUMzQjtZQUNELFlBQVksRUFBRTtnQkFDWixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixRQUFRLEVBQUUsc0JBQXNCO2FBQ2pDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsZUFBZTthQUMzQjtTQUNGLENBQUM7UUFDRixxQ0FBZ0MsR0FBRyxJQUFJ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LElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN6QixPQUFPLHNCQUFzQixDQUFDO1NBQy9CO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7eUdBbkpVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07QUFxQ2xCO0lBREMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7OzsyQ0FRdkI7MkZBMUNVLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CO3dHQW9DTyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBBc3NldFR5cGVzU2VydmljZSB9IGZyb20gJy4uL2Fzc2V0LXR5cGVzL2Fzc2V0LXR5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JvdXBGcmFnbWVudCB9IGZyb20gJy4vZ3JvdXAtZnJhZ21lbnQubW9kZWwnO1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gJy4vbWVtb2l6ZS5kZWNvcmF0b3InO1xuXG5jb25zdCBNT19UWVBFUyA9IFtcbiAgJ2Fzc2V0JyxcbiAgJ2R5bmFtaWNHcm91cCcsXG4gICdicm9rZXJTb3VyY2UnLFxuICAnYnJva2VyU291cmNlSW5hY3RpdmUnLFxuICAnZ3JvdXAnLFxuICAnb3RoZXInXG5dIGFzIGNvbnN0O1xuXG50eXBlIE1vVHlwZXMgPSB0eXBlb2YgTU9fVFlQRVNbbnVtYmVyXTtcblxudHlwZSBJY29uID0gUGFydGlhbDx7IGljb246IHN0cmluZzsgaWNvbk9wZW4/OiBzdHJpbmc7IGljb25DbGFzcz86IHN0cmluZyB9PjtcblxudHlwZSBJY29ucyA9IFBhcnRpYWw8UmVjb3JkPE1vVHlwZXMsIEljb24+PjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgR3JvdXBTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgaWNvbnM6IEljb25zID0ge1xuICAgIGJyb2tlclNvdXJjZUluYWN0aXZlOiB7XG4gICAgICBpY29uOiAnYzh5LWdyb3VwLXJlbW90ZS1pbmFjdGl2ZScsXG4gICAgICBpY29uT3BlbjogJ2M4eS1ncm91cC1yZW1vdGUtaW5hY3RpdmUnXG4gICAgfSxcbiAgICBicm9rZXJTb3VyY2U6IHtcbiAgICAgIGljb246ICdjOHktZ3JvdXAtcmVtb3RlJyxcbiAgICAgIGljb25PcGVuOiAnYzh5LWdyb3VwLXJlbW90ZS1vcGVuJ1xuICAgIH0sXG4gICAgZ3JvdXA6IHtcbiAgICAgIGljb246ICdjOHktZ3JvdXAnLFxuICAgICAgaWNvbk9wZW46ICdjOHktZ3JvdXAtb3BlbidcbiAgICB9LFxuICAgIGR5bmFtaWNHcm91cDoge1xuICAgICAgaWNvbjogJ2M4eS1ncm91cC1zbWFydCcsXG4gICAgICBpY29uT3BlbjogJ2M4eS1ncm91cC1zbWFydC1vcGVuJ1xuICAgIH0sXG4gICAgb3RoZXI6IHtcbiAgICAgIGljb246ICdleGNoYW5nZScsXG4gICAgICBpY29uQ2xhc3M6ICdzdGF0dXNVbmtub3duJ1xuICAgIH1cbiAgfTtcbiAgZGF0YUJyb2tlclNvdXJjZUZyYWdtZW50SW5hY3RpdmUgPSBgXyR7R3JvdXBGcmFnbWVudC5kYXRhQnJva2VyU291cmNlRnJhZ21lbnR9YDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFzc2V0VHlwZXNTZXJ2aWNlOiBBc3NldFR5cGVzU2VydmljZSkge31cblxuICAvKipcbiAgICogRmluZHMgYW4gaWNvbiBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYSBtYW5hZ2VkIG9iamVjdC5cbiAgICogSXQgdGFrZXMgaW50byBhY2NvdW50IGZhY3RvcnMgc3VjaCBhcyB0eXBlLCBhbmQgc3BlY2lmaWMgZnJhZ21lbnRzLlxuICAgKiBAcGFyYW0gbW8gTWFuYWdlZCBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAgICogQHBhcmFtIG9wZW4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBhbHRlcm5hdGl2ZSBpY29uIHNob3dpbmcgdGhlIG9wZW4gc3RhdGUuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gaWNvbi5cbiAgICovXG4gIEBtZW1vaXplKHByb3BlcnR5KCdpZCcpKVxuICBhc3luYyBnZXRJY29uKG1vOiBJTWFuYWdlZE9iamVjdCwgb3BlbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBnZW5lcmljTW9UeXBlID0gdGhpcy5kZXRlcm1pbmVNb1R5cGUobW8pO1xuICAgIGlmIChnZW5lcmljTW9UeXBlID09PSAnYXNzZXQnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBc3NldEN1c3RvbUljb24obW8udHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVJY29ucyA9IHRoaXMuZ2V0RGVmYXVsdEljb24oZ2VuZXJpY01vVHlwZSk7XG4gICAgcmV0dXJuIChvcGVuICYmIHR5cGVJY29ucy5pY29uT3BlbikgfHwgdHlwZUljb25zLmljb247XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBtYW5hZ2VkIG9iamVjdCBpcyBhIGdyb3VwLlxuICAgKiBAcGFyYW0gbW8gTWFuYWdlZCBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYW5hZ2VkIG9iamVjdCBpcyBhIGdyb3VwLlxuICAgKi9cbiAgaXNHcm91cChtbzogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFtb1tHcm91cEZyYWdtZW50Lmdyb3VwRnJhZ21lbnRUeXBlXSB8fCBtby50eXBlID09PSBHcm91cEZyYWdtZW50Lmdyb3VwVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIG1hbmFnZWQgb2JqZWN0IGlzIGEgZHluYW1pYyBncm91cC5cbiAgICogQHBhcmFtIG1vIE1hbmFnZWQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFuYWdlZCBvYmplY3QgaXMgYSBkeW5hbWljIGdyb3VwLlxuICAgKi9cbiAgaXNEeW5hbWljR3JvdXAobW86IElNYW5hZ2VkT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhbW9bR3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBGcmFnbWVudF0gfHwgbW8udHlwZSA9PT0gR3JvdXBGcmFnbWVudC5keW5hbWljR3JvdXBUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYSBkYXRhIGJyb2tlci5cbiAgICogQHBhcmFtIG1vIE1hbmFnZWQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFuYWdlZCBvYmplY3QgaXMgYSBkYXRhIGJyb2tlci5cbiAgICovXG4gIGlzRGF0YUJyb2tlcihtbzogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISFtb1tHcm91cEZyYWdtZW50LmRhdGFCcm9rZXJTb3VyY2VGcmFnbWVudF0gfHwgISFtb1t0aGlzLmRhdGFCcm9rZXJTb3VyY2VGcmFnbWVudEluYWN0aXZlXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBtYW5hZ2VkIG9iamVjdCBpcyBhIGRhdGEgYnJva2VyIGFjdGl2ZS5cbiAgICogQHBhcmFtIG1vIE1hbmFnZWQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFuYWdlZCBvYmplY3QgaXMgYSBkYXRhIGJyb2tlciBhY3RpdmUuXG4gICAqL1xuICBpc0RhdGFCcm9rZXJBY3RpdmUobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhbW9bR3JvdXBGcmFnbWVudC5kYXRhQnJva2VyU291cmNlRnJhZ21lbnRdICYmICFtb1t0aGlzLmRhdGFCcm9rZXJTb3VyY2VGcmFnbWVudEluYWN0aXZlXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBtYW5hZ2VkIG9iamVjdCBpcyBhbiBhc3NldC5cbiAgICogQHBhcmFtIG1vIE1hbmFnZWQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFuYWdlZCBvYmplY3QgaXMgYW4gYXNzZXQuXG4gICAqL1xuICBpc0Fzc2V0KG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiAhIW1vLmM4eV9Jc0Fzc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgYmVsb25ncyB0byBhbnkgdHlwZSBvZiBncm91cC5cbiAgICogVHlwZXMgb2YgZ3JvdXBzOiBncm91cCwgZHluYW1pYyBncm91cCwgZGF0YSBicm9rZXIsIGRhdGEgYnJva2VyIGFjdGl2ZS5cbiAgICogQHBhcmFtIG1vIE1hbmFnZWQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFuYWdlZCBvYmplY3QgYmVsb25ncyB0byB0aGUgZ3JvdXAgY2F0ZWdvcnkuXG4gICAqL1xuICBpc0FueUdyb3VwKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzR3JvdXAobW8pIHx8XG4gICAgICB0aGlzLmlzRHluYW1pY0dyb3VwKG1vKSB8fFxuICAgICAgdGhpcy5pc0RhdGFCcm9rZXIobW8pIHx8XG4gICAgICB0aGlzLmlzRGF0YUJyb2tlckFjdGl2ZShtbylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYSBkZXZpY2UuXG4gICAqIEBwYXJhbSBtbyBNYW5hZ2VkIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hbmFnZWQgb2JqZWN0IGlzIGEgZGV2aWNlLlxuICAgKi9cbiAgaXNEZXZpY2UobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuICEhbW8uYzh5X0lzRGV2aWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBc3NldEN1c3RvbUljb24obW9UeXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmFzc2V0VHlwZXNTZXJ2aWNlLmdldEljb24obW9UeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEljb24obW9UeXBlOiBNb1R5cGVzKTogSWNvbiB7XG4gICAgcmV0dXJuIHRoaXMuaWNvbnNbbW9UeXBlXTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lTW9UeXBlKG1vOiBJTWFuYWdlZE9iamVjdCk6IE1vVHlwZXMge1xuICAgIGlmICh0aGlzLmlzQXNzZXQobW8pKSB7XG4gICAgICByZXR1cm4gJ2Fzc2V0JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0R5bmFtaWNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiAnZHluYW1pY0dyb3VwJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0RhdGFCcm9rZXJBY3RpdmUobW8pKSB7XG4gICAgICByZXR1cm4gJ2Jyb2tlclNvdXJjZSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEYXRhQnJva2VyKG1vKSkge1xuICAgICAgcmV0dXJuICdicm9rZXJTb3VyY2VJbmFjdGl2ZSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiAnZ3JvdXAnO1xuICAgIH1cblxuICAgIHJldHVybiAnb3RoZXInO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { cloneDeep } from 'lodash-es';
2
- import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
2
+ import { BehaviorSubject } from 'rxjs';
3
3
  import { DismissAlertStrategy } from './dynamic-component-alert.model';
4
4
  /**
5
5
  * Order of widget alerts due to alerts severity.
@@ -112,4 +112,4 @@ export class DynamicComponentAlertAggregator {
112
112
  });
113
113
  }
114
114
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBR0wsb0JBQW9CLEVBRXJCLE1BQU0saUNBQWlDLENBQUM7QUFFekM7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFdkUsTUFBTSxPQUFPLCtCQUErQjtJQWUxQyxZQUFZLFNBQWtDLEVBQUU7UUFGeEMsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFHbEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsR0FBRyxNQUErQjtRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxJQUFnQjtRQUNwQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUNqRDthQUFNO1lBQ0wsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxL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WUFDbEYsSUFBSSxFQUFFLEdBQUc7WUFDVCxLQUFLO1NBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSixjQUFjLENBQUMsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7XG4gIEFsZXJ0R3JvdXBEYXRhLFxuICBBbGVydFR5cGUsXG4gIERpc21pc3NBbGVydFN0cmF0ZWd5LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRcbn0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC1hbGVydC5tb2RlbCc7XG5cbi8qKlxuICogT3JkZXIgb2Ygd2lkZ2V0IGFsZXJ0cyBkdWUgdG8gYWxlcnRzIHNldmVyaXR5LlxuICovXG5jb25zdCBXSURHRVRfQUxFUlRTX09SREVSOiBBbGVydFR5cGVbXSA9IFsnZGFuZ2VyJywgJ3dhcm5pbmcnLCAnaW5mbyddO1xuXG5leHBvcnQgY2xhc3MgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB7XG4gIGFueUFsZXJ0RXhpc3RzJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIEFycmF5IGNvbnRhaW5pbmcgZ3JvdXBlZCBhbGVydHMgd2l0aCBkYXRhIG5lY2Vzc2FyeSB0byBkaXNwbGF5IGFsZXJ0cyBhbmQgd2hldGhlciBhbGVydCBncm91cCBzaG91bGQgYmUgZGlzbWlzc2libGUuXG4gICAqL1xuICBhbGVydEdyb3VwczogQXJyYXk8e1xuICAgIHR5cGU6IEFsZXJ0VHlwZTtcbiAgICB2YWx1ZTogQWxlcnRHcm91cERhdGE7XG4gIH0+O1xuICAvKipcbiAgICogUHJpdmF0ZSBNYXAgb2YgYWxlcnRzIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGFnZ3JlZ2F0ZWRBbGVydHNEYXRhOiBNYXA8QWxlcnRUeXBlLCBBbGVydEdyb3VwRGF0YT47XG4gIHByaXZhdGUgYW55QWxlcnRFeGlzdHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRbXSA9IFtdKSB7XG4gICAgdGhpcy5hbnlBbGVydEV4aXN0cyQgPSB0aGlzLmFueUFsZXJ0RXhpc3RzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmluaXRBbGVydHNHcm91cHMoKTtcbiAgICB0aGlzLnNldEFsZXJ0cyhhbGVydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxlcnQgdG8gYWdncmVnYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtEeW5hbWljQ29tcG9uZW50QWxlcnRbXX0gYWxlcnRzIExpc3Qgb2YgYWxlcnRzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIGFnZ3JlZ2F0b3IuXG4gICAqXG4gICAqL1xuICBhZGRBbGVydHMoLi4uYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRbXSkge1xuICAgIHRoaXMuc2V0QWxlcnRzKGFsZXJ0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsZXJ0cyBpbiBncm91cCBieSBwcm92aWRlZCBhbGVydCB0eXBlIG9yIHJlbW92ZXMgYWxsIGFsZXJ0cyB3aGVuIG5vIHBhcmFtIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FsZXJ0VHlwZX0gdHlwZSBUeXBlIG9mIGFsZXJ0cyBncm91cCB0aGF0IHNob3VsZCBiZSByZW1vdmVkLlxuICAgKlxuICAgKi9cbiAgY2xlYXIodHlwZT86IEFsZXJ0VHlwZSkge1xuICAgIGlmICh0eXBlKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldCh0eXBlKS5hbGVydHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5mb3JFYWNoKHZhbHVlID0+ICh2YWx1ZS5hbGVydHMgPSBbXSkpO1xuICAgIH1cbiAgICB0aGlzLm9uRGF0YUNoYW5nZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHBvc3NpYmlsaXR5IG9mIGFsZXJ0IHRvIGJlIGRpc21pc3NlZCBpbiBzcGVjaWZpYyB3YXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QWxlcnRUeXBlfSBhbGVydFR5cGUgVHlwZSBvZiBhbGVydHMgZm9yIHdoaWNoIHRoZSBkaXNtaXNzYWwgc3RyYXRlZ3kgc2hvdWxkIGJlIHNldC5cbiAgICogQHBhcmFtIHtkaXNtaXNzU3RyYXRlZ3l9IGRpc21pc3NTdHJhdGVneSBUeXBlIG9mIGRpc21pc3NhbCBzdHJhdGVneSB0aGF0IHdpbGwgYmUgc2V0IGZvciB0aGUgYWxlcnQgdHlwZS5cbiAgICpcbiAgICovXG4gIHNldEFsZXJ0R3JvdXBEaXNtaXNzU3RyYXRlZ3koYWxlcnRUeXBlOiBBbGVydFR5cGUsIGRpc21pc3NTdHJhdGVneTogRGlzbWlzc0FsZXJ0U3RyYXRlZ3kpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydFR5cGUpLmFsZXJ0RGlzbWlzc2FsLmRpc21pc3NTdHJhdGVneSA9IGRpc21pc3NTdHJhdGVneTtcbiAgICB0aGlzLm9uRGF0YUNoYW5nZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsZXJ0cyBpbiBncm91cCBkdWUgdG8gZGlzbWlzc2FsIGRpc21pc3NTdHJhdGVneSBhbmQgc2V0cyB1c2VyRGlzbWlzc2FsQ2hvaWNlIHByb3BlcnR5LlxuICAgKiBJZiBncm91cCBoYXMgZGlzbWlzc2FsIHN0cmF0ZWd5IGRlY2xhcmVkIGFzIFRFTVBPUkFSWV9PUl9QRVJNQU5FTlQsIGl0cyB1c2VyRGlzbWlzc2FsQ2hvaWNlIHByb3BlcnR5IGNhbiBiZSBzZXQgdG9cbiAgICogUkVNSU5EX0FMTE9XRUQgb3IgUkVNSU5EX0RJU0FMTE9XRUQgZGVwZW5kaW5nIG9uIHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZSBUeXBlIG9mIGFsZXJ0cyBncm91cCB0aGF0IHNob3VsZCBiZSBkaXNtaXNzZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGVybWFuZW50IERldGVybWluZXMgd2hldGhlciB0aGUgZGlzbWlzc2FsIG9mIGFsZXJ0cyBvZiBhIGdpdmVuIHR5cGUgaXMgcGVybWFuZW50LlxuICAgKlxuICAgKi9cbiAgZGlzbWlzc0FsZXJ0R3JvdXAoYWxlcnRUeXBlOiBBbGVydFR5cGUsIGlzUGVybWFuZW50ID0gZmFsc2UpIHtcbiAgICBjb25zdCBncm91cERpc21pc3NTdHJhdGVneSA9XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydFR5cGUpLmFsZXJ0RGlzbWlzc2FsLmRpc21pc3NTdHJhdGVneTtcblxuICAgIHN3aXRjaCAoZ3JvdXBEaXNtaXNzU3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuTk9ORTpcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUlk6XG4gICAgICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEuZ2V0KGFsZXJ0VHlwZSkuYWxlcnREaXNtaXNzYWwudXNlckRpc21pc3NhbENob2ljZSA9XG4gICAgICAgICAgJ1JFTUlORF9BTExPV0VEJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERpc21pc3NBbGVydFN0cmF0ZWd5LlRFTVBPUkFSWV9PUl9QRVJNQU5FTlQ6XG4gICAgICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEuZ2V0KGFsZXJ0VHlwZSkuYWxlcnREaXNtaXNzYWwudXNlckRpc21pc3NhbENob2ljZSA9IGlzUGVybWFuZW50XG4gICAgICAgICAgPyAnUkVNSU5EX0RJU0FMTE9XRUQnXG4gICAgICAgICAgOiAnUkVNSU5EX0FMTE9XRUQnO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXIoYWxlcnRUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGVydCBhZ2dyZWdhdG9yIGFzIGEgd2lkZ2V0IHByb3BlcnR5IHNob3VsZCBub3QgYmUgc2VyaWFsaXplZCBhbmQgc3RvcmVkIGluIGRhdGFiYXNlLlxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRBbGVydHNHcm91cHMoKSB7XG4gICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YSA9IG5ldyBNYXAoXG4gICAgICBXSURHRVRfQUxFUlRTX09SREVSLm1hcChhbGVydFR5cGUgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGFsZXJ0VHlwZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGVydHM6IFtdLFxuICAgICAgICAgICAgYWxlcnREaXNtaXNzYWw6IHsgZGlzbWlzc1N0cmF0ZWd5OiBEaXNtaXNzQWxlcnRTdHJhdGVneS5OT05FIH1cbiAgICAgICAgICB9IGFzIEFsZXJ0R3JvdXBEYXRhXG4gICAgICAgIF07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEFsZXJ0cyhhbGVydHM6IER5bmFtaWNDb21wb25lbnRBbGVydFtdKSB7XG4gICAgYWxlcnRzLmZvckVhY2goYWxlcnQgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydC50eXBlKS5hbGVydERpc21pc3NhbC51c2VyRGlzbWlzc2FsQ2hvaWNlID09PVxuICAgICAgICAnUkVNSU5EX0RJU0FMTE9XRUQnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydC50eXBlKSkge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydC50eXBlKS5hbGVydHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEuZ2V0KGFsZXJ0LnR5cGUpLmFsZXJ0cy5wdXNoKGFsZXJ0KTtcbiAgICB9KTtcbiAgICB0aGlzLm9uRGF0YUNoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EYXRhQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmFsZXJ0R3JvdXBzID0gWy4uLmNsb25lRGVlcCh0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhKV0ubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICB0eXBlOiBrZXksXG4gICAgICB2YWx1ZVxuICAgIH0pKTtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICB0aGlzLmFueUFsZXJ0RXhpc3RzU3ViamVjdC5uZXh0KHRoaXMuYWxlcnRHcm91cHMuc29tZSgoeyB2YWx1ZSB9KSA9PiAhIXZhbHVlLmFsZXJ0cy5sZW5ndGgpKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUdMLG9CQUFvQixFQUVyQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBZ0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXZFLE1BQU0sT0FBTywrQkFBK0I7SUFlMUMsWUFBWSxTQUFrQyxFQUFFO1FBRnhDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBR2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEdBQUcsTUFBK0I7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDakQ7YUFBTTtZQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsS0FB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Q2xGLElBQUksRUFBRSxHQUFHO1lBQ1QsS0FBSztTQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0osY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFsZXJ0R3JvdXBEYXRhLFxuICBBbGVydFR5cGUsXG4gIERpc21pc3NBbGVydFN0cmF0ZWd5LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRcbn0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC1hbGVydC5tb2RlbCc7XG5cbi8qKlxuICogT3JkZXIgb2Ygd2lkZ2V0IGFsZXJ0cyBkdWUgdG8gYWxlcnRzIHNldmVyaXR5LlxuICovXG5jb25zdCBXSURHRVRfQUxFUlRTX09SREVSOiBBbGVydFR5cGVbXSA9IFsnZGFuZ2VyJywgJ3dhcm5pbmcnLCAnaW5mbyddO1xuXG5leHBvcnQgY2xhc3MgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB7XG4gIGFueUFsZXJ0RXhpc3RzJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIEFycmF5IGNvbnRhaW5pbmcgZ3JvdXBlZCBhbGVydHMgd2l0aCBkYXRhIG5lY2Vzc2FyeSB0byBkaXNwbGF5IGFsZXJ0cyBhbmQgd2hldGhlciBhbGVydCBncm91cCBzaG91bGQgYmUgZGlzbWlzc2libGUuXG4gICAqL1xuICBhbGVydEdyb3VwczogQXJyYXk8e1xuICAgIHR5cGU6IEFsZXJ0VHlwZTtcbiAgICB2YWx1ZTogQWxlcnRHcm91cERhdGE7XG4gIH0+O1xuICAvKipcbiAgICogUHJpdmF0ZSBNYXAgb2YgYWxlcnRzIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGFnZ3JlZ2F0ZWRBbGVydHNEYXRhOiBNYXA8QWxlcnRUeXBlLCBBbGVydEdyb3VwRGF0YT47XG4gIHByaXZhdGUgYW55QWxlcnRFeGlzdHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRbXSA9IFtdKSB7XG4gICAgdGhpcy5hbnlBbGVydEV4aXN0cyQgPSB0aGlzLmFueUFsZXJ0RXhpc3RzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmluaXRBbGVydHNHcm91cHMoKTtcbiAgICB0aGlzLnNldEFsZXJ0cyhhbGVydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxlcnQgdG8gYWdncmVnYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtEeW5hbWljQ29tcG9uZW50QWxlcnRbXX0gYWxlcnRzIExpc3Qgb2YgYWxlcnRzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIGFnZ3JlZ2F0b3IuXG4gICAqXG4gICAqL1xuICBhZGRBbGVydHMoLi4uYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRbXSkge1xuICAgIHRoaXMuc2V0QWxlcnRzKGFsZXJ0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsZXJ0cyBpbiBncm91cCBieSBwcm92aWRlZCBhbGVydCB0eXBlIG9yIHJlbW92ZXMgYWxsIGFsZXJ0cyB3aGVuIG5vIHBhcmFtIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FsZXJ0VHlwZX0gdHlwZSBUeXBlIG9mIGFsZXJ0cyBncm91cCB0aGF0IHNob3VsZCBiZSByZW1vdmVkLlxuICAgKlxuICAgKi9cbiAgY2xlYXIodHlwZT86IEFsZXJ0VHlwZSkge1xuICAgIGlmICh0eXBlKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldCh0eXBlKS5hbGVydHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5mb3JFYWNoKHZhbHVlID0+ICh2YWx1ZS5hbGVydHMgPSBbXSkpO1xuICAgIH1cbiAgICB0aGlzLm9uRGF0YUNoYW5nZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHBvc3NpYmlsaXR5IG9mIGFsZXJ0IHRvIGJlIGRpc21pc3NlZCBpbiBzcGVjaWZpYyB3YXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QWxlcnRUeXBlfSBhbGVydFR5cGUgVHlwZSBvZiBhbGVydHMgZm9yIHdoaWNoIHRoZSBkaXNtaXNzYWwgc3RyYXRlZ3kgc2hvdWxkIGJlIHNldC5cbiAgICogQHBhcmFtIHtkaXNtaXNzU3RyYXRlZ3l9IGRpc21pc3NTdHJhdGVneSBUeXBlIG9mIGRpc21pc3NhbCBzdHJhdGVneSB0aGF0IHdpbGwgYmUgc2V0IGZvciB0aGUgYWxlcnQgdHlwZS5cbiAgICpcbiAgICovXG4gIHNldEFsZXJ0R3JvdXBEaXNtaXNzU3RyYXRlZ3koYWxlcnRUeXBlOiBBbGVydFR5cGUsIGRpc21pc3NTdHJhdGVneTogRGlzbWlzc0FsZXJ0U3RyYXRlZ3kpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydFR5cGUpLmFsZXJ0RGlzbWlzc2FsLmRpc21pc3NTdHJhdGVneSA9IGRpc21pc3NTdHJhdGVneTtcbiAgICB0aGlzLm9uRGF0YUNoYW5nZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsZXJ0cyBpbiBncm91cCBkdWUgdG8gZGlzbWlzc2FsIGRpc21pc3NTdHJhdGVneSBhbmQgc2V0cyB1c2VyRGlzbWlzc2FsQ2hvaWNlIHByb3BlcnR5LlxuICAgKiBJZiBncm91cCBoYXMgZGlzbWlzc2FsIHN0cmF0ZWd5IGRlY2xhcmVkIGFzIFRFTVBPUkFSWV9PUl9QRVJNQU5FTlQsIGl0cyB1c2VyRGlzbWlzc2FsQ2hvaWNlIHByb3BlcnR5IGNhbiBiZSBzZXQgdG9cbiAgICogUkVNSU5EX0FMTE9XRUQgb3IgUkVNSU5EX0RJU0FMTE9XRUQgZGVwZW5kaW5nIG9uIHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZSBUeXBlIG9mIGFsZXJ0cyBncm91cCB0aGF0IHNob3VsZCBiZSBkaXNtaXNzZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGVybWFuZW50IERldGVybWluZXMgd2hldGhlciB0aGUgZGlzbWlzc2FsIG9mIGFsZXJ0cyBvZiBhIGdpdmVuIHR5cGUgaXMgcGVybWFuZW50LlxuICAgKlxuICAgKi9cbiAgZGlzbWlzc0FsZXJ0R3JvdXAoYWxlcnRUeXBlOiBBbGVydFR5cGUsIGlzUGVybWFuZW50ID0gZmFsc2UpIHtcbiAgICBjb25zdCBncm91cERpc21pc3NTdHJhdGVneSA9XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydFR5cGUpLmFsZXJ0RGlzbWlzc2FsLmRpc21pc3NTdHJhdGVneTtcblxuICAgIHN3aXRjaCAoZ3JvdXBEaXNtaXNzU3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuTk9ORTpcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUlk6XG4gICAgICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEuZ2V0KGFsZXJ0VHlwZSkuYWxlcnREaXNtaXNzYWwudXNlckRpc21pc3NhbENob2ljZSA9XG4gICAgICAgICAgJ1JFTUlORF9BTExPV0VEJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERpc21pc3NBbGVydFN0cmF0ZWd5LlRFTVBPUkFSWV9PUl9QRVJNQU5FTlQ6XG4gICAgICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEuZ2V0KGFsZXJ0VHlwZSkuYWxlcnREaXNtaXNzYWwudXNlckRpc21pc3NhbENob2ljZSA9IGlzUGVybWFuZW50XG4gICAgICAgICAgPyAnUkVNSU5EX0RJU0FMTE9XRUQnXG4gICAgICAgICAgOiAnUkVNSU5EX0FMTE9XRUQnO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXIoYWxlcnRUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGVydCBhZ2dyZWdhdG9yIGFzIGEgd2lkZ2V0IHByb3BlcnR5IHNob3VsZCBub3QgYmUgc2VyaWFsaXplZCBhbmQgc3RvcmVkIGluIGRhdGFiYXNlLlxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRBbGVydHNHcm91cHMoKSB7XG4gICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YSA9IG5ldyBNYXAoXG4gICAgICBXSURHRVRfQUxFUlRTX09SREVSLm1hcChhbGVydFR5cGUgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGFsZXJ0VHlwZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGVydHM6IFtdLFxuICAgICAgICAgICAgYWxlcnREaXNtaXNzYWw6IHsgZGlzbWlzc1N0cmF0ZWd5OiBEaXNtaXNzQWxlcnRTdHJhdGVneS5OT05FIH1cbiAgICAgICAgICB9IGFzIEFsZXJ0R3JvdXBEYXRhXG4gICAgICAgIF07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEFsZXJ0cyhhbGVydHM6IER5bmFtaWNDb21wb25lbnRBbGVydFtdKSB7XG4gICAgYWxlcnRzLmZvckVhY2goYWxlcnQgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydC50eXBlKS5hbGVydERpc21pc3NhbC51c2VyRGlzbWlzc2FsQ2hvaWNlID09PVxuICAgICAgICAnUkVNSU5EX0RJU0FMTE9XRUQnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydC50eXBlKSkge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydC50eXBlKS5hbGVydHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEuZ2V0KGFsZXJ0LnR5cGUpLmFsZXJ0cy5wdXNoKGFsZXJ0KTtcbiAgICB9KTtcbiAgICB0aGlzLm9uRGF0YUNoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EYXRhQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmFsZXJ0R3JvdXBzID0gWy4uLmNsb25lRGVlcCh0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhKV0ubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICB0eXBlOiBrZXksXG4gICAgICB2YWx1ZVxuICAgIH0pKTtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICB0aGlzLmFueUFsZXJ0RXhpc3RzU3ViamVjdC5uZXh0KHRoaXMuYWxlcnRHcm91cHMuc29tZSgoeyB2YWx1ZSB9KSA9PiAhIXZhbHVlLmFsZXJ0cy5sZW5ndGgpKTtcbiAgICB9KTtcbiAgfVxufVxuIl19