UNPKG

@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

76 lines 15.6 kB
// © 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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Output, } from "@angular/core"; import { Subject } from "rxjs"; import { takeUntil } from "rxjs/operators"; import { EventBus } from "@nova-ui/bits"; import { WIDGET_SEARCH } from "../../../../services/types"; import { PIZZAGNA_EVENT_BUS } from "../../../../types"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@nova-ui/bits"; export class ListLeafItemComponent { static { this.lateLoadKey = "ListLeafItemComponent"; } onButtonClick() { if (this.canNavigate) { this.navigated.emit(this); } } constructor(changeDetector, eventBus) { this.changeDetector = changeDetector; this.eventBus = eventBus; this.navigated = new EventEmitter(); this.searchTerm = ""; this.destroy$ = new Subject(); } ngOnInit() { this.eventBus .getStream(WIDGET_SEARCH) .pipe(takeUntil(this.destroy$)) .subscribe((event) => { this.searchTerm = event.payload ?? ""; this.changeDetector.markForCheck(); }); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListLeafItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: PIZZAGNA_EVENT_BUS }], target: i0.ɵɵFactoryTarget.Component }); } /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ListLeafItemComponent, selector: "nui-list-leaf-item", inputs: { icon: "icon", status: "status", detailedUrl: "detailedUrl", label: "label", canNavigate: "canNavigate", url: "url" }, outputs: { navigated: "navigated" }, host: { classAttribute: "w-100" }, ngImport: i0, template: "<div class=\"nui-list-leaf-item\" (click)=\"onButtonClick()\">\n <div class=\"nui-list-leaf-item__info-container\">\n <div class=\"nui-list-leaf-item__icon-container\">\n <nui-icon\n *ngIf=\"icon; else statusTpl\"\n [icon]=\"icon\"\n [status]=\"status\"\n class=\"mr-1\"\n ></nui-icon>\n </div>\n <div class=\"nui-list-leaf-item__description\">\n <a\n class=\"nui-text-ellipsis\"\n [ngClass]=\"url ? '' : 'not-active'\"\n [attr.target]=\"url ? '_blank' : null\"\n [attr.href]=\"url || null\"\n [innerHTML]=\"label | nuiHighlight : searchTerm\"\n ></a>\n <div\n class=\"nui-text-secondary nui-text-ellipsis\"\n [innerHTML]=\"detailedUrl | nuiHighlight : searchTerm\"\n ></div>\n </div>\n\n <ng-template #statusTpl>{{ status }}</ng-template>\n </div>\n <nui-icon *ngIf=\"canNavigate\" icon=\"caret-right\"></nui-icon>\n</div>\n", styles: [".nui-list-leaf-item{width:100%;display:flex;justify-content:space-between;align-items:center;padding:5px 0}.nui-list-leaf-item__info-container{display:flex;height:40px}.nui-list-leaf-item__icon-container{display:flex;justify-content:center;align-items:center;min-width:30px}.nui-list-leaf-item__description{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;max-width:100%}a.not-active{text-decoration:none;color:#111}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "nui-icon", inputs: ["iconColor", "brushType", "iconHoverColor", "iconSize", "cssClass", "fillContainer", "status", "childStatus", "icon", "counter"] }, { kind: "pipe", type: i2.HighlightPipe, name: "nuiHighlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListLeafItemComponent, decorators: [{ type: Component, args: [{ selector: "nui-list-leaf-item", changeDetection: ChangeDetectionStrategy.OnPush, host: { class: "w-100" }, template: "<div class=\"nui-list-leaf-item\" (click)=\"onButtonClick()\">\n <div class=\"nui-list-leaf-item__info-container\">\n <div class=\"nui-list-leaf-item__icon-container\">\n <nui-icon\n *ngIf=\"icon; else statusTpl\"\n [icon]=\"icon\"\n [status]=\"status\"\n class=\"mr-1\"\n ></nui-icon>\n </div>\n <div class=\"nui-list-leaf-item__description\">\n <a\n class=\"nui-text-ellipsis\"\n [ngClass]=\"url ? '' : 'not-active'\"\n [attr.target]=\"url ? '_blank' : null\"\n [attr.href]=\"url || null\"\n [innerHTML]=\"label | nuiHighlight : searchTerm\"\n ></a>\n <div\n class=\"nui-text-secondary nui-text-ellipsis\"\n [innerHTML]=\"detailedUrl | nuiHighlight : searchTerm\"\n ></div>\n </div>\n\n <ng-template #statusTpl>{{ status }}</ng-template>\n </div>\n <nui-icon *ngIf=\"canNavigate\" icon=\"caret-right\"></nui-icon>\n</div>\n", styles: [".nui-list-leaf-item{width:100%;display:flex;justify-content:space-between;align-items:center;padding:5px 0}.nui-list-leaf-item__info-container{display:flex;height:40px}.nui-list-leaf-item__icon-container{display:flex;justify-content:center;align-items:center;min-width:30px}.nui-list-leaf-item__description{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;max-width:100%}a.not-active{text-decoration:none;color:#111}\n"] }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2.EventBus, decorators: [{ type: Inject, args: [PIZZAGNA_EVENT_BUS] }] }], propDecorators: { icon: [{ type: Input }], status: [{ type: Input }], detailedUrl: [{ type: Input }], label: [{ type: Input }], canNavigate: [{ type: Input }], url: [{ type: Input }], navigated: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1sZWFmLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtd2lkZ2V0L2xpc3QtZWxlbWVudHMvbGlzdC1sZWFmLWl0ZW0vbGlzdC1sZWFmLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtd2lkZ2V0L2xpc3QtZWxlbWVudHMvbGlzdC1sZWFmLWl0ZW0vbGlzdC1sZWFmLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFzQixrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBUzNFLE1BQU0sT0FBTyxxQkFBcUI7YUFDdkIsZ0JBQVcsR0FBRyx1QkFBdUIsQUFBMUIsQ0FBMkI7SUFjdEMsYUFBYTtRQUNoQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBRUQsWUFDVyxjQUFpQyxFQUNMLFFBQTBCO1FBRHRELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNMLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBYmhELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUVoRSxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ1osYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFXL0MsQ0FBQztJQUVHLFFBQVE7UUFDWCxJQUFJLENBQUMsUUFBUTthQUNSLFNBQVMsQ0FBQyxhQUFhLENBQUM7YUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztrSUFsQ1EscUJBQXFCLG1EQXVCbEIsa0JBQWtCO3NIQXZCckIscUJBQXFCLGtRQzdDbEMsOGtDQTRCQTs7NEZEaUJhLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBRWIsdUJBQXVCLENBQUMsTUFBTSxRQUN6QyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7OzBCQTBCbkIsTUFBTTsyQkFBQyxrQkFBa0I7eUNBcEJkLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxHQUFHO3NCQUFsQixLQUFLO2dCQUVXLFNBQVM7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgRXZlbnRCdXMsIElFdmVudCB9IGZyb20gXCJAbm92YS11aS9iaXRzXCI7XG5cbmltcG9ydCB7IFdJREdFVF9TRUFSQ0ggfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdHlwZXNcIjtcbmltcG9ydCB7IElIYXNDaGFuZ2VEZXRlY3RvciwgUElaWkFHTkFfRVZFTlRfQlVTIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm51aS1saXN0LWxlYWYtaXRlbVwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vbGlzdC1sZWFmLWl0ZW0uY29tcG9uZW50Lmh0bWxcIixcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7IGNsYXNzOiBcInctMTAwXCIgfSxcbiAgICBzdHlsZVVybHM6IFtcImxpc3QtbGVhZi1pdGVtLmNvbXBvbmVudC5sZXNzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBMaXN0TGVhZkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBJSGFzQ2hhbmdlRGV0ZWN0b3IsIE9uSW5pdCB7XG4gICAgc3RhdGljIGxhdGVMb2FkS2V5ID0gXCJMaXN0TGVhZkl0ZW1Db21wb25lbnRcIjtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHN0YXR1czogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkZXRhaWxlZFVybDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjYW5OYXZpZ2F0ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdXJsOiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIG5hdmlnYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdExlYWZJdGVtQ29tcG9uZW50PigpO1xuXG4gICAgcHVibGljIHNlYXJjaFRlcm06IHN0cmluZyA9IFwiXCI7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBvbkJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZWQuZW1pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KFBJWlpBR05BX0VWRU5UX0JVUykgcHVibGljIGV2ZW50QnVzOiBFdmVudEJ1czxJRXZlbnQ+XG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV2ZW50QnVzXG4gICAgICAgICAgICAuZ2V0U3RyZWFtKFdJREdFVF9TRUFSQ0gpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IGV2ZW50LnBheWxvYWQgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm51aS1saXN0LWxlYWYtaXRlbVwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwibnVpLWxpc3QtbGVhZi1pdGVtX19pbmZvLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnVpLWxpc3QtbGVhZi1pdGVtX19pY29uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG51aS1pY29uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpY29uOyBlbHNlIHN0YXR1c1RwbFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgW3N0YXR1c109XCJzdGF0dXNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMVwiXG4gICAgICAgICAgICA+PC9udWktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJudWktbGlzdC1sZWFmLWl0ZW1fX2Rlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGNsYXNzPVwibnVpLXRleHQtZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInVybCA/ICcnIDogJ25vdC1hY3RpdmUnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwidXJsID8gJ19ibGFuaycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cInVybCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsIHwgbnVpSGlnaGxpZ2h0IDogc2VhcmNoVGVybVwiXG4gICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibnVpLXRleHQtc2Vjb25kYXJ5IG51aS10ZXh0LWVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImRldGFpbGVkVXJsIHwgbnVpSGlnaGxpZ2h0IDogc2VhcmNoVGVybVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhdHVzVHBsPnt7IHN0YXR1cyB9fTwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPG51aS1pY29uICpuZ0lmPVwiY2FuTmF2aWdhdGVcIiBpY29uPVwiY2FyZXQtcmlnaHRcIj48L251aS1pY29uPlxuPC9kaXY+XG4iXX0=