formioangular-colfuturo
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.
110 lines • 18.7 kB
JavaScript
import { Component, ViewChild, } from "@angular/core";
import { DefaultConfiguration, } from "../form-manager.config";
import { FormioGridComponent } from "formioangular-colfuturo/grid";
import { debounce } from "lodash";
import * as i0 from "@angular/core";
import * as i1 from "../form-manager.service";
import * as i2 from "@angular/router";
import * as i3 from "../form-manager.config";
import * as i4 from "@angular/common";
import * as i5 from "formioangular-colfuturo/grid";
export class FormManagerIndexComponent {
service;
route;
router;
config;
searchElement;
formGrid;
gridQuery;
onSearch;
constructor(service, route, router, config) {
this.service = service;
this.route = route;
this.router = router;
this.config = config;
this.config = { ...DefaultConfiguration, ...this.config };
this.gridQuery = { type: this.config.type, sort: "title" };
if (this.config.tag) {
this.gridQuery.tags = this.config.tag;
}
this.onSearch = debounce(this._onSearch, 300);
}
loadGrid() {
this.gridQuery =
JSON.parse(localStorage.getItem("query")) || this.gridQuery;
const currentPage = +localStorage.getItem("currentPage") || 0;
this.formGrid
.refreshGrid(this.gridQuery)
.then(() => this.formGrid.setPage(currentPage - 1));
}
ngOnInit() {
this.gridQuery = { type: this.config.type, sort: "title" };
if (this.config.tag) {
this.gridQuery.tags = this.config.tag;
}
this.service.reset();
this.service.ready.then(() => {
this.loadGrid();
this.formGrid.footer.pageChanged.subscribe((page) => {
localStorage.setItem("currentPage", page.page);
});
});
}
ngAfterViewInit() {
this.searchElement.nativeElement.value =
localStorage.getItem("searchInput") || "";
}
_onSearch() {
const search = this.searchElement.nativeElement.value;
if (search.length > 0) {
this.gridQuery.skip = 0;
this.gridQuery.title__regex = "/" + search + "/i";
this.gridQuery.title__regex = "/" + search.trim() + "/i";
}
else {
delete this.gridQuery.title__regex;
}
localStorage.setItem("query", JSON.stringify(this.gridQuery));
localStorage.setItem("searchInput", search);
this.formGrid.pageChanged({ page: 1, itemPerPage: this.gridQuery.limit });
}
clearSearch() {
this.gridQuery = { type: this.config.type, sort: "title" };
if (this.config.tag) {
this.gridQuery.tags = this.config.tag;
}
localStorage.removeItem("query");
localStorage.removeItem("searchInput");
localStorage.removeItem("currentPage");
if (this.searchElement?.nativeElement) {
this.searchElement.nativeElement.value = "";
}
this.formGrid.query = this.gridQuery;
this.formGrid.pageChanged({ page: 1 });
}
onAction(action) {
this.service.form = null; // Reset previous form data
this.router.navigate([action.row._id, action.action], {
relativeTo: this.route,
});
}
onSelect(row) {
this.router.navigate([row._id], { relativeTo: this.route });
}
onCreateItem() {
this.router.navigate(["create"], { relativeTo: this.route });
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerIndexComponent, deps: [{ token: i1.FormManagerService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.FormManagerConfig }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerIndexComponent, selector: "ng-component", viewQueries: [{ propertyName: "searchElement", first: true, predicate: ["search"], descendants: true }, { propertyName: "formGrid", first: true, predicate: FormioGridComponent, descendants: true }], ngImport: i0, template: "<div role=\"search\" class=\"input-group mb-3\" *ngIf=\"config.includeSearch\">\r\n <input #search type=\"text\" (keyup)=\"onSearch()\" class=\"form-control\" placeholder=\"Search Forms\" aria-label=\"Search Forms\" aria-describedby=\"button-search\">\r\n <span *ngIf=\"search && search !== ''\" class=\"form-clear input-group-addon\" (click)=\"clearSearch()\"><span class=\"fa fa-times bi bi-x\"></span></span>\r\n</div>\r\n<formio-grid\r\n *ngIf=\"service.ready\"\r\n [formio]=\"service.formio\"\r\n [gridType]=\"'form'\"\r\n [query]=\"gridQuery\"\r\n [isActionAllowed]=\"service.actionAllowed\"\r\n (rowAction)=\"onAction($event)\"\r\n (rowSelect)=\"onSelect($event)\"\r\n (createItem)=\"onCreateItem()\"\r\n></formio-grid>\r\n", styles: [".form-clear{background:#cecece;border-radius:50%;bottom:8px;color:#0000004d;cursor:pointer;display:flex;justify-content:center;align-items:center;padding-bottom:2px;height:24px;position:absolute;right:10px;top:6px;width:24px;z-index:10}.form-clear .fa{font-size:16px;font-weight:500}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.FormioGridComponent, selector: "formio-grid", inputs: ["footerPosition", "src", "items", "onForm", "query", "refresh", "columns", "gridType", "size", "components", "formio", "label", "createText", "isActionAllowed"], outputs: ["select", "rowSelect", "rowAction", "createItem", "error"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerIndexComponent, decorators: [{
type: Component,
args: [{ template: "<div role=\"search\" class=\"input-group mb-3\" *ngIf=\"config.includeSearch\">\r\n <input #search type=\"text\" (keyup)=\"onSearch()\" class=\"form-control\" placeholder=\"Search Forms\" aria-label=\"Search Forms\" aria-describedby=\"button-search\">\r\n <span *ngIf=\"search && search !== ''\" class=\"form-clear input-group-addon\" (click)=\"clearSearch()\"><span class=\"fa fa-times bi bi-x\"></span></span>\r\n</div>\r\n<formio-grid\r\n *ngIf=\"service.ready\"\r\n [formio]=\"service.formio\"\r\n [gridType]=\"'form'\"\r\n [query]=\"gridQuery\"\r\n [isActionAllowed]=\"service.actionAllowed\"\r\n (rowAction)=\"onAction($event)\"\r\n (rowSelect)=\"onSelect($event)\"\r\n (createItem)=\"onCreateItem()\"\r\n></formio-grid>\r\n", styles: [".form-clear{background:#cecece;border-radius:50%;bottom:8px;color:#0000004d;cursor:pointer;display:flex;justify-content:center;align-items:center;padding-bottom:2px;height:24px;position:absolute;right:10px;top:6px;width:24px;z-index:10}.form-clear .fa{font-size:16px;font-weight:500}\n"] }]
}], ctorParameters: () => [{ type: i1.FormManagerService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.FormManagerConfig }], propDecorators: { searchElement: [{
type: ViewChild,
args: ["search"]
}], formGrid: [{
type: ViewChild,
args: [FormioGridComponent, { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvaW5kZXgvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvaW5kZXgvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLG9CQUFvQixHQUVyQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7QUFNbEMsTUFBTSxPQUFPLHlCQUF5QjtJQU8zQjtJQUNBO0lBQ0E7SUFDQTtJQVRZLGFBQWEsQ0FBYTtJQUUvQyxRQUFRLENBQXNCO0lBQ3ZCLFNBQVMsQ0FBTTtJQUNmLFFBQVEsQ0FBQztJQUNoQixZQUNTLE9BQTJCLEVBQzNCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxNQUF5QjtRQUh6QixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFFaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0QsSUFBSSxJQUFJLENBQUMsTUFB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQzt3R0ExRlUseUJBQXlCOzRGQUF6Qix5QkFBeUIsd0xBRXpCLG1CQUFtQixnREN0QmhDLHN1QkFjQTs7NEZETWEseUJBQXlCO2tCQUpyQyxTQUFTOzt5S0FLYSxhQUFhO3NCQUFqQyxTQUFTO3VCQUFDLFFBQVE7Z0JBRW5CLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vZm9ybS1tYW5hZ2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICBEZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICBGb3JtTWFuYWdlckNvbmZpZyxcclxufSBmcm9tIFwiLi4vZm9ybS1tYW5hZ2VyLmNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBGb3JtaW9HcmlkQ29tcG9uZW50IH0gZnJvbSBcImZvcm1pb2FuZ3VsYXItY29sZnV0dXJvL2dyaWRcIjtcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwibG9kYXNoXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybU1hbmFnZXJJbmRleENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcInNlYXJjaFwiKSBzZWFyY2hFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoRm9ybWlvR3JpZENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgZm9ybUdyaWQ6IEZvcm1pb0dyaWRDb21wb25lbnQ7XHJcbiAgcHVibGljIGdyaWRRdWVyeTogYW55O1xyXG4gIHB1YmxpYyBvblNlYXJjaDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzZXJ2aWNlOiBGb3JtTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGNvbmZpZzogRm9ybU1hbmFnZXJDb25maWdcclxuICApIHtcclxuICAgIHRoaXMuY29uZmlnID0geyAuLi5EZWZhdWx0Q29uZmlndXJhdGlvbiwgLi4udGhpcy5jb25maWcgfTtcclxuICAgIHRoaXMuZ3JpZFF1ZXJ5ID0geyB0eXBlOiB0aGlzLmNvbmZpZy50eXBlLCBzb3J0OiBcInRpdGxlXCIgfTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy50YWcpIHtcclxuICAgICAgdGhpcy5ncmlkUXVlcnkudGFncyA9IHRoaXMuY29uZmlnLnRhZztcclxuICAgIH1cclxuICAgIHRoaXMub25TZWFyY2ggPSBkZWJvdW5jZSh0aGlzLl9vblNlYXJjaCwgMzAwKTtcclxuICB9XHJcblxyXG4gIGxvYWRHcmlkKCkge1xyXG4gICAgdGhpcy5ncmlkUXVlcnkgPVxyXG4gICAgICBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicXVlcnlcIikpIHx8IHRoaXMuZ3JpZFF1ZXJ5O1xyXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSArbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjdXJyZW50UGFnZVwiKSB8fCAwO1xyXG4gICAgdGhpcy5mb3JtR3JpZFxyXG4gICAgICAucmVmcmVzaEdyaWQodGhpcy5ncmlkUXVlcnkpXHJcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZm9ybUdyaWQuc2V0UGFnZShjdXJyZW50UGFnZSAtIDEpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5ncmlkUXVlcnkgPSB7IHR5cGU6IHRoaXMuY29uZmlnLnR5cGUsIHNvcnQ6IFwidGl0bGVcIiB9O1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnRhZykge1xyXG4gICAgICB0aGlzLmdyaWRRdWVyeS50YWdzID0gdGhpcy5jb25maWcudGFnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICB0aGlzLnNlcnZpY2UucmVhZHkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZEdyaWQoKTtcclxuICAgICAgdGhpcy5mb3JtR3JpZC5mb290ZXIucGFnZUNoYW5nZWQuc3Vic2NyaWJlKChwYWdlKSA9PiB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJjdXJyZW50UGFnZVwiLCBwYWdlLnBhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPVxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNlYXJjaElucHV0XCIpIHx8IFwiXCI7XHJcbiAgfVxyXG5cclxuICBfb25TZWFyY2goKSB7XHJcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgIGlmIChzZWFyY2gubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmdyaWRRdWVyeS5za2lwID0gMDtcclxuICAgICAgdGhpcy5ncmlkUXVlcnkudGl0bGVfX3JlZ2V4ID0gXCIvXCIgKyBzZWFyY2ggKyBcIi9pXCI7XHJcbiAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnRpdGxlX19yZWdleCA9IFwiL1wiICsgc2VhcmNoLnRyaW0oKSArIFwiL2lcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmdyaWRRdWVyeS50aXRsZV9fcmVnZXg7XHJcbiAgICB9XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInF1ZXJ5XCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuZ3JpZFF1ZXJ5KSk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNlYXJjaElucHV0XCIsIHNlYXJjaCk7XHJcbiAgICB0aGlzLmZvcm1HcmlkLnBhZ2VDaGFuZ2VkKHsgcGFnZTogMSwgaXRlbVBlclBhZ2U6IHRoaXMuZ3JpZFF1ZXJ5LmxpbWl0IH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICB0aGlzLmdyaWRRdWVyeSA9IHsgdHlwZTogdGhpcy5jb25maWcudHlwZSwgc29ydDogXCJ0aXRsZVwiIH07XHJcbiAgICBpZiAodGhpcy5jb25maWcudGFnKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnRhZ3MgPSB0aGlzLmNvbmZpZy50YWc7XHJcbiAgICB9XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInF1ZXJ5XCIpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJzZWFyY2hJbnB1dFwiKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiY3VycmVudFBhZ2VcIik7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUdyaWQucXVlcnkgPSB0aGlzLmdyaWRRdWVyeTtcclxuICAgIHRoaXMuZm9ybUdyaWQucGFnZUNoYW5nZWQoeyBwYWdlOiAxIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb24oYWN0aW9uOiBhbnkpIHtcclxuICAgIHRoaXMuc2VydmljZS5mb3JtID0gbnVsbDsgLy8gUmVzZXQgcHJldmlvdXMgZm9ybSBkYXRhXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYWN0aW9uLnJvdy5faWQsIGFjdGlvbi5hY3Rpb25dLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0KHJvdzogYW55KSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm93Ll9pZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICB9XHJcblxyXG4gIG9uQ3JlYXRlSXRlbSgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImNyZWF0ZVwiXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IHJvbGU9XCJzZWFyY2hcIiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTNcIiAqbmdJZj1cImNvbmZpZy5pbmNsdWRlU2VhcmNoXCI+XHJcbiAgPGlucHV0ICNzZWFyY2ggdHlwZT1cInRleHRcIiAoa2V5dXApPVwib25TZWFyY2goKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggRm9ybXNcIiBhcmlhLWxhYmVsPVwiU2VhcmNoIEZvcm1zXCIgYXJpYS1kZXNjcmliZWRieT1cImJ1dHRvbi1zZWFyY2hcIj5cclxuICA8c3BhbiAqbmdJZj1cInNlYXJjaCAmJiBzZWFyY2ggIT09ICcnXCIgY2xhc3M9XCJmb3JtLWNsZWFyIGlucHV0LWdyb3VwLWFkZG9uXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj48c3BhbiBjbGFzcz1cImZhIGZhLXRpbWVzIGJpIGJpLXhcIj48L3NwYW4+PC9zcGFuPlxyXG48L2Rpdj5cclxuPGZvcm1pby1ncmlkXHJcbiAgKm5nSWY9XCJzZXJ2aWNlLnJlYWR5XCJcclxuICBbZm9ybWlvXT1cInNlcnZpY2UuZm9ybWlvXCJcclxuICBbZ3JpZFR5cGVdPVwiJ2Zvcm0nXCJcclxuICBbcXVlcnldPVwiZ3JpZFF1ZXJ5XCJcclxuICBbaXNBY3Rpb25BbGxvd2VkXT1cInNlcnZpY2UuYWN0aW9uQWxsb3dlZFwiXHJcbiAgKHJvd0FjdGlvbik9XCJvbkFjdGlvbigkZXZlbnQpXCJcclxuICAocm93U2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxyXG4gIChjcmVhdGVJdGVtKT1cIm9uQ3JlYXRlSXRlbSgpXCJcclxuPjwvZm9ybWlvLWdyaWQ+XHJcbiJdfQ==