UNPKG

@formio-tmt/angular

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.

109 lines 18.7 kB
import { Component, ViewChild } from '@angular/core'; import { DefaultConfiguration } from '../form-manager.config'; import { FormioGridComponent } from '@formio-tmt/angular/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 "@formio-tmt/angular/grid"; 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 }); this.formGrid.refreshGrid(this.gridQuery); } 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.pageChanged({ page: 1 }); this.formGrid.query = {}; this.formGrid.refreshGrid(this.gridQuery); } 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: "16.1.6", 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: "16.1.6", 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"] }] }); } export { FormManagerIndexComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", 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: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvaW5kZXgvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvaW5kZXgvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4RixPQUFPLEVBQUUsb0JBQW9CLEVBQXFCLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7OztBQUVsQyxNQUlhLHlCQUF5QjtJQU0zQjtJQUNBO0lBQ0E7SUFDQTtJQVJZLGFBQWEsQ0FBYTtJQUNFLFFBQVEsQ0FBc0I7SUFDeEUsU0FBUyxDQUFNO0lBQ2YsUUFBUSxDQUFDO0lBQ2hCLFlBQ1MsT0FBMkIsRUFDM0IsS0FBcUIsRUFDckIsTUFBYyxFQUNkLE1BQXlCO1FBSHpCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzNCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUVoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUMsR0FBRyxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQztRQUN6RCxJQUFJLElBQUksQ0FBQyxNQUFNLENB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LENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO3VHQXZGVSx5QkFBeUI7MkZBQXpCLHlCQUF5Qix3TEFFekIsbUJBQW1CLGdEQ2JoQyxzdUJBY0E7O1NESGEseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBSnJDLFNBQVM7OzJMQUthLGFBQWE7c0JBQWpDLFNBQVM7dUJBQUMsUUFBUTtnQkFDOEIsUUFBUTtzQkFBeEQsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9mb3JtLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IERlZmF1bHRDb25maWd1cmF0aW9uLCBGb3JtTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL2Zvcm0tbWFuYWdlci5jb25maWcnO1xyXG5pbXBvcnQgeyBGb3JtaW9HcmlkQ29tcG9uZW50IH0gZnJvbSAnQGZvcm1pby10bXQvYW5ndWxhci9ncmlkJztcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL2luZGV4LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbmRleC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtTWFuYWdlckluZGV4Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdzZWFyY2gnKSBzZWFyY2hFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoRm9ybWlvR3JpZENvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9KSBmb3JtR3JpZDogRm9ybWlvR3JpZENvbXBvbmVudDtcclxuICBwdWJsaWMgZ3JpZFF1ZXJ5OiBhbnk7XHJcbiAgcHVibGljIG9uU2VhcmNoO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNlcnZpY2U6IEZvcm1NYW5hZ2VyU2VydmljZSxcclxuICAgIHB1YmxpYyByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwdWJsaWMgY29uZmlnOiBGb3JtTWFuYWdlckNvbmZpZ1xyXG4gICkge1xyXG4gICAgdGhpcy5jb25maWcgPSB7Li4uRGVmYXVsdENvbmZpZ3VyYXRpb24sIC4uLnRoaXMuY29uZmlnfTtcclxuICAgIHRoaXMuZ3JpZFF1ZXJ5ID0ge3R5cGU6IHRoaXMuY29uZmlnLnR5cGUsIHNvcnQ6ICd0aXRsZSd9O1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnRhZykge1xyXG4gICAgICB0aGlzLmdyaWRRdWVyeS50YWdzID0gdGhpcy5jb25maWcudGFnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblNlYXJjaCA9IGRlYm91bmNlKHRoaXMuX29uU2VhcmNoLCAzMDApO1xyXG4gIH1cclxuXHJcbiAgbG9hZEdyaWQoKSB7XHJcbiAgICB0aGlzLmdyaWRRdWVyeSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3F1ZXJ5JykpIHx8IHRoaXMuZ3JpZFF1ZXJ5O1xyXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSArbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRQYWdlJykgfHwgMDtcclxuICAgIHRoaXMuZm9ybUdyaWRcclxuICAgICAgLnJlZnJlc2hHcmlkKHRoaXMuZ3JpZFF1ZXJ5KVxyXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmZvcm1HcmlkLnNldFBhZ2UoY3VycmVudFBhZ2UgLSAxKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZ3JpZFF1ZXJ5ID0ge3R5cGU6IHRoaXMuY29uZmlnLnR5cGUsIHNvcnQ6ICd0aXRsZSd9O1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnRhZykge1xyXG4gICAgICB0aGlzLmdyaWRRdWVyeS50YWdzID0gdGhpcy5jb25maWcudGFnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICB0aGlzLnNlcnZpY2UucmVhZHkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZEdyaWQoKTtcclxuICAgICAgdGhpcy5mb3JtR3JpZC5mb290ZXIucGFnZUNoYW5nZWQuc3Vic2NyaWJlKHBhZ2UgPT4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjdXJyZW50UGFnZScsIHBhZ2UucGFnZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZWFyY2hJbnB1dCcpIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgX29uU2VhcmNoKCkge1xyXG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XHJcbiAgICBpZiAoc2VhcmNoLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5ncmlkUXVlcnkuc2tpcCA9IDA7XHJcbiAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnRpdGxlX19yZWdleCA9ICcvJyArIHNlYXJjaCArICcvaSc7XHJcbiAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnRpdGxlX19yZWdleCA9ICcvJyArIHNlYXJjaC50cmltKCkgKyAnL2knO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHRoaXMuZ3JpZFF1ZXJ5LnRpdGxlX19yZWdleDtcclxuICAgIH1cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdxdWVyeScsIEpTT04uc3RyaW5naWZ5KHRoaXMuZ3JpZFF1ZXJ5KSk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VhcmNoSW5wdXQnLCBzZWFyY2gpO1xyXG4gICAgdGhpcy5mb3JtR3JpZC5wYWdlQ2hhbmdlZCh7cGFnZTogMSwgaXRlbVBlclBhZ2U6IHRoaXMuZ3JpZFF1ZXJ5LmxpbWl0fSk7XHJcbiAgICB0aGlzLmZvcm1HcmlkLnJlZnJlc2hHcmlkKHRoaXMuZ3JpZFF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgdGhpcy5ncmlkUXVlcnkgPSB7dHlwZTogdGhpcy5jb25maWcudHlwZSwgc29ydDogJ3RpdGxlJ307XHJcbiAgICBpZiAodGhpcy5jb25maWcudGFnKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnRhZ3MgPSB0aGlzLmNvbmZpZy50YWc7XHJcbiAgICB9XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncXVlcnknKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzZWFyY2hJbnB1dCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRQYWdlJyk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1HcmlkLnBhZ2VDaGFuZ2VkKHtwYWdlOiAxfSk7XHJcbiAgICB0aGlzLmZvcm1HcmlkLnF1ZXJ5ID0ge307XHJcbiAgICB0aGlzLmZvcm1HcmlkLnJlZnJlc2hHcmlkKHRoaXMuZ3JpZFF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uKGFjdGlvbjogYW55KSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZm9ybSA9IG51bGw7IC8vIFJlc2V0IHByZXZpb3VzIGZvcm0gZGF0YVxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2FjdGlvbi5yb3cuX2lkLCBhY3Rpb24uYWN0aW9uXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Qocm93OiBhbnkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3cuX2lkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DcmVhdGVJdGVtKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjcmVhdGUnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IHJvbGU9XCJzZWFyY2hcIiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTNcIiAqbmdJZj1cImNvbmZpZy5pbmNsdWRlU2VhcmNoXCI+XHJcbiAgPGlucHV0ICNzZWFyY2ggdHlwZT1cInRleHRcIiAoa2V5dXApPVwib25TZWFyY2goKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggRm9ybXNcIiBhcmlhLWxhYmVsPVwiU2VhcmNoIEZvcm1zXCIgYXJpYS1kZXNjcmliZWRieT1cImJ1dHRvbi1zZWFyY2hcIj5cclxuICA8c3BhbiAqbmdJZj1cInNlYXJjaCAmJiBzZWFyY2ggIT09ICcnXCIgY2xhc3M9XCJmb3JtLWNsZWFyIGlucHV0LWdyb3VwLWFkZG9uXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj48c3BhbiBjbGFzcz1cImZhIGZhLXRpbWVzIGJpIGJpLXhcIj48L3NwYW4+PC9zcGFuPlxyXG48L2Rpdj5cclxuPGZvcm1pby1ncmlkXHJcbiAgKm5nSWY9XCJzZXJ2aWNlLnJlYWR5XCJcclxuICBbZm9ybWlvXT1cInNlcnZpY2UuZm9ybWlvXCJcclxuICBbZ3JpZFR5cGVdPVwiJ2Zvcm0nXCJcclxuICBbcXVlcnldPVwiZ3JpZFF1ZXJ5XCJcclxuICBbaXNBY3Rpb25BbGxvd2VkXT1cInNlcnZpY2UuYWN0aW9uQWxsb3dlZFwiXHJcbiAgKHJvd0FjdGlvbik9XCJvbkFjdGlvbigkZXZlbnQpXCJcclxuICAocm93U2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxyXG4gIChjcmVhdGVJdGVtKT1cIm9uQ3JlYXRlSXRlbSgpXCJcclxuPjwvZm9ybWlvLWdyaWQ+XHJcbiJdfQ==