UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

75 lines 14.7 kB
import { HttpClient } from '@angular/common/http'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core'; import { of, Subject, catchError, startWith, switchMap, takeUntil, map, } from 'rxjs'; import { API_GATEWAY, K8sUtilService, publishRef, } from '../../../../core/public-api'; import { ResourceListBase } from '../../base-list'; import { ResourceSelectContextService } from '../../context.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; import * as i2 from "../../context.service"; import * as i3 from "../../../../core/public-api"; export class ClusterListComponent extends ResourceListBase { constructor(http, contextService, cdr, k8sUtil) { super(cdr, k8sUtil, contextService); this.http = http; this.type = 'cluster'; this.clusters = []; this.clusters$ = this.reload$$.pipe(startWith(null), switchMap(() => this.http.get(`${API_GATEWAY}/auth/v1/clusters`)), map(list => list.items), catchError(() => of([])), takeUntil(this.destroy$$), publishRef()); this.loadClusterInfo$$ = new Subject(); } ngOnInit() { this.clusters = this.contextService.cachedClusters; this.setSelected(); this.clusters$.subscribe(clusters => { this.clusters = this.mapResource(clusters); this.setSelected(); this.loading = false; this.forceLoading = false; this.loadClusterInfo$$.next(clusters); this.cdr.markForCheck(); }); } setSelected() { this.selectedCluster = this.clusters.find(c => c.name === this.value); } ngOnDestroy() { this.destroy$$.next(); this.destroy$$.complete(); } mapResource(list) { return list.map(item => ({ name: this.k8sUtil.getName(item), displayName: this.k8sUtil.getDisplayName(item), status: this.getClusterStatus(item), timestamp: item.metadata.creationTimestamp, __origin: item, })); } getClusterStatus(cluster) { if (cluster?.status) { const clusterStatus = cluster.status.conditions.find(condition => condition.type === 'ComponentNotHealthy'); if (clusterStatus) { return clusterStatus.status.toLowerCase() === 'true' ? 'abnormal' : 'normal'; } } return 'abnormal'; } static { this.ɵfac = function ClusterListComponent_Factory(t) { return new (t || ClusterListComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i2.ResourceSelectContextService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.K8sUtilService)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClusterListComponent, selectors: [["acl-cluster-list"]], inputs: { value: "value" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 7, consts: [[3, "selectItem", "reload", "data", "fields", "context", "popupLite", "selectedUid", "type", "loading"]], template: function ClusterListComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "acl-resource-data-grid", 0); i0.ɵɵlistener("selectItem", function ClusterListComponent_Template_acl_resource_data_grid_selectItem_0_listener($event) { return ctx.onSelect($event); })("reload", function ClusterListComponent_Template_acl_resource_data_grid_reload_0_listener() { return ctx.reload(); }); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("data", ctx.clusters)("fields", ctx.fields)("context", ctx.context)("popupLite", ctx.popupLite)("selectedUid", ctx.selectedCluster == null ? null : ctx.selectedCluster.__origin.metadata.uid)("type", ctx.type)("loading", ctx.forceLoading || !(ctx.clusters == null ? null : ctx.clusters.length) && ctx.loading); } }, styles: ["[_nghost-%COMP%]{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter[_ngcontent-%COMP%]{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter[_ngcontent-%COMP%] aui-form-item[_ngcontent-%COMP%] .aui-form-item{margin-bottom:0}.filter__project[_ngcontent-%COMP%]{margin-right:50px;padding-bottom:8px}.filter__project[_ngcontent-%COMP%] aui-select[_ngcontent-%COMP%]{width:240px}.filter__cluster[_ngcontent-%COMP%]{flex:1}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%]{margin-bottom:8px;display:inline-flex}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag{border:none}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}"], changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClusterListComponent, [{ type: Component, args: [{ selector: 'acl-cluster-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<acl-resource-data-grid\n [data]=\"clusters\"\n [fields]=\"fields\"\n [context]=\"context\"\n [popupLite]=\"popupLite\"\n (selectItem)=\"onSelect($event)\"\n [selectedUid]=\"selectedCluster?.__origin.metadata.uid\"\n [type]=\"type\"\n [loading]=\"forceLoading || (!clusters?.length && loading)\"\n (reload)=\"reload()\"\n></acl-resource-data-grid>\n", styles: [":host{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter aui-form-item ::ng-deep .aui-form-item{margin-bottom:0}.filter__project{margin-right:50px;padding-bottom:8px}.filter__project aui-select{width:240px}.filter__cluster{flex:1}.cluster-tags aui-check-tag{margin-bottom:8px;display:inline-flex}.cluster-tags aui-check-tag::ng-deep .aui-tag{border:none}.cluster-tags aui-check-tag::ng-deep .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}\n"] }] }], () => [{ type: i1.HttpClient }, { type: i2.ResourceSelectContextService }, { type: i0.ChangeDetectorRef }, { type: i3.K8sUtilService }], { value: [{ type: Input }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClusterListComponent, { className: "ClusterListComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2J1c2luZXNzL3Jlc291cmNlLXNlbGVjdC9leHBvcnRzL2NsdXN0ZXItbGlzdC9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvYnVzaW5lc3MvcmVzb3VyY2Utc2VsZWN0L2V4cG9ydHMvY2x1c3Rlci1saXN0L3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEVBQUUsRUFDRixPQUFPLEVBQ1AsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFHTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQVNyRSxNQUFNLE9BQU8sb0JBQ1gsU0FBUSxnQkFBZ0I7SUEyQnhCLFlBQ21CLElBQWdCLEVBQ2pDLGNBQTRDLEVBQzVDLEdBQXNCLEVBQ3RCLE9BQXVCO1FBRXZCLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBTG5CLFNBQUksR0FBSixJQUFJLENBQVk7UUF0Qm5DLFNBQUksR0FBRyxTQUFrQixDQUFDO1FBSTFCLGFBQVEsR0FBc0IsRUFBRSxDQUFDO1FBRWpDLGNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDNUIsU0FBUyxDQUFDLElBQVksQ0FBQyxFQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ1gsR0FBRyxXQUFXLG1CQUFtQixDQUNsQyxDQUNGLEVBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQWUsQ0FBQyxDQUFDLEVBQ3JDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLFVBQVUsRUFBRSxDQUNiLENBQUM7UUFFRixzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBYSxDQUFDO0lBUzdDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztRQUNuRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVRLFdBQVc7UUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBZTtRQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUM5QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7WUFDMUMsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFpQjtRQUNoQyxJQUFJLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNwQixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2xELFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FDdEQsQ0FBQztZQUNGLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO29CQUNsRCxDQUFDLENBQUMsVUFBVTtvQkFDWixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO3FGQWpGVSxvQkFBb0I7b0VBQXBCLG9CQUFvQjtZQ3BDakMsaURBVUM7WUFEQyxBQUpBLGlJQUFjLG9CQUFnQixJQUFDLHNHQUlyQixZQUFRLElBQUM7WUFDcEIsaUJBQXlCOztZQUZ4QixBQURBLEFBREEsQUFGQSxBQURBLEFBREEsQUFEQSxtQ0FBaUIsc0JBQ0Esd0JBQ0UsNEJBQ0ksK0ZBRStCLGtCQUN6QyxvR0FDNkM7OztpRkQ0Qi9DLG9CQUFvQjtjQU5oQyxTQUFTOzJCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNO21KQU8vQyxLQUFLO2tCQURKLEtBQUs7O2tGQUpLLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIG9mLFxuICBTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICBtYXAsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBDbHVzdGVyLFxuICBLdWJlcm5ldGVzUmVzb3VyY2VMaXN0LFxuICBBUElfR0FURVdBWSxcbiAgSzhzVXRpbFNlcnZpY2UsXG4gIHB1Ymxpc2hSZWYsXG59IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBSZXNvdXJjZUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS1saXN0JztcbmltcG9ydCB7IFJlc291cmNlU2VsZWN0Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2x1c3RlckRhdGFJdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtY2x1c3Rlci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHlsZS5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDbHVzdGVyTGlzdENvbXBvbmVudFxuICBleHRlbmRzIFJlc291cmNlTGlzdEJhc2VcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICB2YWx1ZTogc3RyaW5nO1xuXG4gIHR5cGUgPSAnY2x1c3RlcicgYXMgY29uc3Q7XG5cbiAgc2VsZWN0ZWRDbHVzdGVyOiBDbHVzdGVyRGF0YUl0ZW07XG5cbiAgY2x1c3RlcnM6IENsdXN0ZXJEYXRhSXRlbVtdID0gW107XG5cbiAgY2x1c3RlcnMkID0gdGhpcy5yZWxvYWQkJC5waXBlKFxuICAgIHN0YXJ0V2l0aChudWxsIGFzIHZvaWQpLFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5odHRwLmdldDxLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PENsdXN0ZXI+PihcbiAgICAgICAgYCR7QVBJX0dBVEVXQVl9L2F1dGgvdjEvY2x1c3RlcnNgLFxuICAgICAgKSxcbiAgICApLFxuICAgIG1hcChsaXN0ID0+IGxpc3QuaXRlbXMpLFxuICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10gYXMgQ2x1c3RlcltdKSksXG4gICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQkKSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgbG9hZENsdXN0ZXJJbmZvJCQgPSBuZXcgU3ViamVjdDxDbHVzdGVyW10+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIGNvbnRleHRTZXJ2aWNlOiBSZXNvdXJjZVNlbGVjdENvbnRleHRTZXJ2aWNlLFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgazhzVXRpbDogSzhzVXRpbFNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKGNkciwgazhzVXRpbCwgY29udGV4dFNlcnZpY2UpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jbHVzdGVycyA9IHRoaXMuY29udGV4dFNlcnZpY2UuY2FjaGVkQ2x1c3RlcnM7XG4gICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICAgIHRoaXMuY2x1c3RlcnMkLnN1YnNjcmliZShjbHVzdGVycyA9PiB7XG4gICAgICB0aGlzLmNsdXN0ZXJzID0gdGhpcy5tYXBSZXNvdXJjZShjbHVzdGVycyk7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9yY2VMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWRDbHVzdGVySW5mbyQkLm5leHQoY2x1c3RlcnMpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFNlbGVjdGVkKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDbHVzdGVyID0gdGhpcy5jbHVzdGVycy5maW5kKGMgPT4gYy5uYW1lID09PSB0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbWFwUmVzb3VyY2UobGlzdDogQ2x1c3RlcltdKTogQ2x1c3RlckRhdGFJdGVtW10ge1xuICAgIHJldHVybiBsaXN0Lm1hcChpdGVtID0+ICh7XG4gICAgICBuYW1lOiB0aGlzLms4c1V0aWwuZ2V0TmFtZShpdGVtKSxcbiAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLms4c1V0aWwuZ2V0RGlzcGxheU5hbWUoaXRlbSksXG4gICAgICBzdGF0dXM6IHRoaXMuZ2V0Q2x1c3RlclN0YXR1cyhpdGVtKSxcbiAgICAgIHRpbWVzdGFtcDogaXRlbS5tZXRhZGF0YS5jcmVhdGlvblRpbWVzdGFtcCxcbiAgICAgIF9fb3JpZ2luOiBpdGVtLFxuICAgIH0pKTtcbiAgfVxuXG4gIGdldENsdXN0ZXJTdGF0dXMoY2x1c3Rlcj86IENsdXN0ZXIpIHtcbiAgICBpZiAoY2x1c3Rlcj8uc3RhdHVzKSB7XG4gICAgICBjb25zdCBjbHVzdGVyU3RhdHVzID0gY2x1c3Rlci5zdGF0dXMuY29uZGl0aW9ucy5maW5kKFxuICAgICAgICBjb25kaXRpb24gPT4gY29uZGl0aW9uLnR5cGUgPT09ICdDb21wb25lbnROb3RIZWFsdGh5JyxcbiAgICAgICk7XG4gICAgICBpZiAoY2x1c3RlclN0YXR1cykge1xuICAgICAgICByZXR1cm4gY2x1c3RlclN0YXR1cy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gICAgICAgICAgPyAnYWJub3JtYWwnXG4gICAgICAgICAgOiAnbm9ybWFsJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdhYm5vcm1hbCc7XG4gIH1cbn1cbiIsIjxhY2wtcmVzb3VyY2UtZGF0YS1ncmlkXG4gIFtkYXRhXT1cImNsdXN0ZXJzXCJcbiAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW3BvcHVwTGl0ZV09XCJwb3B1cExpdGVcIlxuICAoc2VsZWN0SXRlbSk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgW3NlbGVjdGVkVWlkXT1cInNlbGVjdGVkQ2x1c3Rlcj8uX19vcmlnaW4ubWV0YWRhdGEudWlkXCJcbiAgW3R5cGVdPVwidHlwZVwiXG4gIFtsb2FkaW5nXT1cImZvcmNlTG9hZGluZyB8fCAoIWNsdXN0ZXJzPy5sZW5ndGggJiYgbG9hZGluZylcIlxuICAocmVsb2FkKT1cInJlbG9hZCgpXCJcbj48L2FjbC1yZXNvdXJjZS1kYXRhLWdyaWQ+XG4iXX0=