@nova-ui/dashboards
Version:
Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and
75 lines • 15.5 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { ChangeDetectorRef, Component, HostBinding, Input, } from "@angular/core";
import { LoggerService } from "@nova-ui/bits";
import { PizzagnaService } from "../../../pizzagna/services/pizzagna.service";
import { ErrorNodeKey } from "../../../widget-types/common/widget/types";
import { BaseLayout } from "../../layouts/base-layout";
import * as i0 from "@angular/core";
import * as i1 from "../../../pizzagna/services/pizzagna.service";
import * as i2 from "@nova-ui/bits";
import * as i3 from "@angular/common";
import * as i4 from "@angular/cdk/portal";
import * as i5 from "../../../pizzagna/directives/component-portal/component-portal.directive";
export class WidgetBodyContentComponent extends BaseLayout {
static { this.lateLoadKey = "WidgetBodyContentComponent"; }
constructor(changeDetector, pizzagnaService, logger) {
super(changeDetector, pizzagnaService, logger);
/**
* Optional class for styling
*/
this.elementClass = "";
this.defaultClasses = "w-100";
}
ngOnInit() {
this.classNames = `${this.defaultClasses} ${this.elementClass}`;
}
ngOnDestroy() {
super.ngOnDestroy();
}
getNodes() {
if (this.fallbackKey) {
const fallbackContent = (this.fallbackMap && this.fallbackMap[this.fallbackKey]) ||
ErrorNodeKey.ErrorUnknown;
return [this.primaryContent, fallbackContent];
}
return [this.primaryContent];
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetBodyContentComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PizzagnaService }, { token: i2.LoggerService }], target: i0.ɵɵFactoryTarget.Component }); }
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WidgetBodyContentComponent, selector: "nui-widget-body-content", inputs: { componentId: "componentId", primaryContent: "primaryContent", fallbackKey: "fallbackKey", fallbackMap: "fallbackMap", elementClass: "elementClass" }, host: { properties: { "class": "this.classNames" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-100\"\n [ngClass]=\"{ 'd-none': fallbackKey, 'd-flex': !fallbackKey }\"\n>\n <ng-container\n nuiComponentPortal\n #componentPortal=\"nuiComponentPortal\"\n [componentId]=\"nodeConfigs[0].id\"\n [componentType]=\"nodeConfigs[0].componentType\"\n [providers]=\"nodeConfigs[0].providers\"\n [properties]=\"nodeConfigs[0].properties\"\n >\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n </ng-container>\n</div>\n<div class=\"d-flex h-100\" *ngIf=\"fallbackKey\">\n <ng-container\n nuiComponentPortal\n #componentPortal=\"nuiComponentPortal\"\n [componentId]=\"nodeConfigs[1].id\"\n [componentType]=\"nodeConfigs[1].componentType\"\n [providers]=\"nodeConfigs[1].providers\"\n [properties]=\"nodeConfigs[1].properties\"\n >\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i5.ComponentPortalDirective, selector: "[nuiComponentPortal]", inputs: ["componentId", "componentType", "properties", "providers", "outputs"], outputs: ["output"], exportAs: ["nuiComponentPortal"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetBodyContentComponent, decorators: [{
type: Component,
args: [{ selector: "nui-widget-body-content", template: "<div\n class=\"h-100\"\n [ngClass]=\"{ 'd-none': fallbackKey, 'd-flex': !fallbackKey }\"\n>\n <ng-container\n nuiComponentPortal\n #componentPortal=\"nuiComponentPortal\"\n [componentId]=\"nodeConfigs[0].id\"\n [componentType]=\"nodeConfigs[0].componentType\"\n [providers]=\"nodeConfigs[0].providers\"\n [properties]=\"nodeConfigs[0].properties\"\n >\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n </ng-container>\n</div>\n<div class=\"d-flex h-100\" *ngIf=\"fallbackKey\">\n <ng-container\n nuiComponentPortal\n #componentPortal=\"nuiComponentPortal\"\n [componentId]=\"nodeConfigs[1].id\"\n [componentType]=\"nodeConfigs[1].componentType\"\n [providers]=\"nodeConfigs[1].providers\"\n [properties]=\"nodeConfigs[1].properties\"\n >\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n </ng-container>\n</div>\n" }]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.PizzagnaService }, { type: i2.LoggerService }], propDecorators: { componentId: [{
type: Input
}], primaryContent: [{
type: Input
}], fallbackKey: [{
type: Input
}], fallbackMap: [{
type: Input
}], elementClass: [{
type: Input
}], classNames: [{
type: HostBinding,
args: ["class"]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWJvZHktY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvd2lkZ2V0L3dpZGdldC1ib2R5LWNvbnRlbnQvd2lkZ2V0LWJvZHktY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvd2lkZ2V0L3dpZGdldC1ib2R5LWNvbnRlbnQvd2lkZ2V0LWJvZHktY29udGVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBTXZELE1BQU0sT0FBTywwQkFDVCxTQUFRLFVBQVU7YUFHSixnQkFBVyxHQUFHLDRCQUE0QixBQUEvQixDQUFnQztJQWdDekQsWUFDSSxjQUFpQyxFQUNqQyxlQUFnQyxFQUNoQyxNQUFxQjtRQUVyQixLQUFLLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQWRuRDs7V0FFRztRQUNhLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBSWxCLG1CQUFjLEdBQUcsT0FBTyxDQUFDO0lBUXpDLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFTSxXQUFXO1FBQ2QsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLE1BQU0sZUFBZSxHQUNqQixDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7a0lBNURRLDBCQUEwQjtzSEFBMUIsMEJBQTBCLDRTQ3hDdkMsdW9DQWlDQTs7NEZET2EsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNJLHlCQUF5QjtnSkFZbkIsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxjQUFjO3NCQUE3QixLQUFLO2dCQU1VLFdBQVc7c0JBQTFCLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxZQUFZO3NCQUEzQixLQUFLO2dCQUV1QixVQUFVO3NCQUF0QyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuXG5pbXBvcnQgeyBQaXp6YWduYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vcGl6emFnbmEvc2VydmljZXMvcGl6emFnbmEuc2VydmljZVwiO1xuaW1wb3J0IHsgRXJyb3JOb2RlS2V5IH0gZnJvbSBcIi4uLy4uLy4uL3dpZGdldC10eXBlcy9jb21tb24vd2lkZ2V0L3R5cGVzXCI7XG5pbXBvcnQgeyBCYXNlTGF5b3V0IH0gZnJvbSBcIi4uLy4uL2xheW91dHMvYmFzZS1sYXlvdXRcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibnVpLXdpZGdldC1ib2R5LWNvbnRlbnRcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3dpZGdldC1ib2R5LWNvbnRlbnQuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Qm9keUNvbnRlbnRDb21wb25lbnRcbiAgICBleHRlbmRzIEJhc2VMYXlvdXRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBwdWJsaWMgc3RhdGljIGxhdGVMb2FkS2V5ID0gXCJXaWRnZXRCb2R5Q29udGVudENvbXBvbmVudFwiO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbXBvbmVudCdzIGlkXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGNvbXBvbmVudElkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGl6emFnbmEgbm9kZSB0byB1c2UgZm9yIHRoZSBwcmltYXJ5IGNvbnRlbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcHJpbWFyeUNvbnRlbnQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBwb3B1bGF0ZWQsIHRoZSBjb21wb25lbnQgZGlzcGxheXMgdGhlIGFzc29jaWF0ZWRcbiAgICAgKiBmYWxsYmFjayBjb250ZW50IGluIHBsYWNlIG9mIHRoZSBwcmltYXJ5IGNvbnRlbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZmFsbGJhY2tLZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1hcCBvZiBjb250ZW50IGtleXMgdG8gcGl6emFnbmEgbm9kZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZmFsbGJhY2tNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBjbGFzcyBmb3Igc3R5bGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBlbGVtZW50Q2xhc3MgPSBcIlwiO1xuXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIikgcHVibGljIGNsYXNzTmFtZXM6IHN0cmluZztcblxuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Q2xhc3NlcyA9IFwidy0xMDBcIjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHBpenphZ25hU2VydmljZTogUGl6emFnbmFTZXJ2aWNlLFxuICAgICAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3IsIHBpenphZ25hU2VydmljZSwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lcyA9IGAke3RoaXMuZGVmYXVsdENsYXNzZXN9ICR7dGhpcy5lbGVtZW50Q2xhc3N9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5vZGVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKHRoaXMuZmFsbGJhY2tLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29udGVudCA9XG4gICAgICAgICAgICAgICAgKHRoaXMuZmFsbGJhY2tNYXAgJiYgdGhpcy5mYWxsYmFja01hcFt0aGlzLmZhbGxiYWNrS2V5XSkgfHxcbiAgICAgICAgICAgICAgICBFcnJvck5vZGVLZXkuRXJyb3JVbmtub3duO1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLnByaW1hcnlDb250ZW50LCBmYWxsYmFja0NvbnRlbnRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdGhpcy5wcmltYXJ5Q29udGVudF07XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiaC0xMDBcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGZhbGxiYWNrS2V5LCAnZC1mbGV4JzogIWZhbGxiYWNrS2V5IH1cIlxuPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgbnVpQ29tcG9uZW50UG9ydGFsXG4gICAgICAgICNjb21wb25lbnRQb3J0YWw9XCJudWlDb21wb25lbnRQb3J0YWxcIlxuICAgICAgICBbY29tcG9uZW50SWRdPVwibm9kZUNvbmZpZ3NbMF0uaWRcIlxuICAgICAgICBbY29tcG9uZW50VHlwZV09XCJub2RlQ29uZmlnc1swXS5jb21wb25lbnRUeXBlXCJcbiAgICAgICAgW3Byb3ZpZGVyc109XCJub2RlQ29uZmlnc1swXS5wcm92aWRlcnNcIlxuICAgICAgICBbcHJvcGVydGllc109XCJub2RlQ29uZmlnc1swXS5wcm9wZXJ0aWVzXCJcbiAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW2Nka1BvcnRhbE91dGxldF09XCJjb21wb25lbnRQb3J0YWwucG9ydGFsXCJcbiAgICAgICAgICAgIChhdHRhY2hlZCk9XCJjb21wb25lbnRQb3J0YWwuYXR0YWNoZWQoJGV2ZW50KVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZC1mbGV4IGgtMTAwXCIgKm5nSWY9XCJmYWxsYmFja0tleVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgbnVpQ29tcG9uZW50UG9ydGFsXG4gICAgICAgICNjb21wb25lbnRQb3J0YWw9XCJudWlDb21wb25lbnRQb3J0YWxcIlxuICAgICAgICBbY29tcG9uZW50SWRdPVwibm9kZUNvbmZpZ3NbMV0uaWRcIlxuICAgICAgICBbY29tcG9uZW50VHlwZV09XCJub2RlQ29uZmlnc1sxXS5jb21wb25lbnRUeXBlXCJcbiAgICAgICAgW3Byb3ZpZGVyc109XCJub2RlQ29uZmlnc1sxXS5wcm92aWRlcnNcIlxuICAgICAgICBbcHJvcGVydGllc109XCJub2RlQ29uZmlnc1sxXS5wcm9wZXJ0aWVzXCJcbiAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW2Nka1BvcnRhbE91dGxldF09XCJjb21wb25lbnRQb3J0YWwucG9ydGFsXCJcbiAgICAgICAgICAgIChhdHRhY2hlZCk9XCJjb21wb25lbnRQb3J0YWwuYXR0YWNoZWQoJGV2ZW50KVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=