chrv-components 1.1.7 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,73 @@
1
+ import { Component, EventEmitter, Output, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "ngx-pagination";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "../chr-form/chr-form.component";
6
+ export class ChrPaginatorComponent {
7
+ constructor(service) {
8
+ this.service = service;
9
+ this.currentPage = 1;
10
+ this.pageChange = new EventEmitter();
11
+ this.pageSizeChange = new EventEmitter();
12
+ this.previous = () => {
13
+ this.currentPage--;
14
+ this.emit();
15
+ };
16
+ this.next = () => {
17
+ this.currentPage++;
18
+ this.emit();
19
+ };
20
+ this.setPage = (page) => {
21
+ if (page < 1 || page > this.lastPage())
22
+ return;
23
+ this.currentPage = page;
24
+ this.emit();
25
+ };
26
+ this.setPageEventHandler = (event) => {
27
+ return this.setPage(event.target.value);
28
+ };
29
+ this.isFirstPage = () => {
30
+ return this.currentPage == 1;
31
+ };
32
+ this.setPageSize = (pageSize) => {
33
+ this.setPage(1);
34
+ this.instance.itemsPerPage = pageSize;
35
+ this.pageSizeChange.emit(pageSize);
36
+ };
37
+ this.setPageSizeEventHandler = (event) => {
38
+ return this.setPageSize(event.target.value);
39
+ };
40
+ this.isLastPage = () => {
41
+ if (!this.instance.totalItems)
42
+ return false;
43
+ return (this.currentPage ==
44
+ Math.ceil(this.instance.totalItems / this.instance.itemsPerPage));
45
+ };
46
+ this.pageSize = () => this.instance.itemsPerPage;
47
+ this.lastPage = () => this.instance.totalItems
48
+ ? Math.ceil(this.instance.totalItems / this.instance.itemsPerPage)
49
+ : 1;
50
+ this.emit = (page = undefined) => {
51
+ if (!page)
52
+ this.pageChange.emit(this.currentPage);
53
+ else
54
+ this.pageChange.emit(page);
55
+ };
56
+ }
57
+ ngAfterContentChecked() {
58
+ //console.log(this.service, this.service.getInstance('chr_data-table'));
59
+ this.instance = this.service.getInstance('chr_data-table');
60
+ }
61
+ ngOnInit() { }
62
+ }
63
+ ChrPaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChrPaginatorComponent, deps: [{ token: i1.PaginationService }], target: i0.ɵɵFactoryTarget.Component });
64
+ ChrPaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ChrPaginatorComponent, selector: "app-chr-paginator", outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n \u00C9lements par page:\n <app-chr-form class=\"ml-1\" (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { controls: [\n {\n type: 'text',\n name: 'pageSize',\n value: pageSize(),\n width: 'row'\n }]\n }]\">\n </app-chr-form>\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center\">\n <button type=\"button\" *ngIf=\"!isFirstPage()\" (click)=\"previous()\"\n class=\"w-fit cursor-pointer\">Pr\u00E9c\u00E9dent</button>\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n <div class=\"w-10 mr-1\">\n <app-chr-form (keyup.enter)=\"setPageEventHandler($event)\" [sections]=\"[\n { controls: [\n {\n type: 'text',\n name: 'currentPage',\n value: currentPage,\n width: 'row'\n }]\n }]\">\n </app-chr-form>\n </div> / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : '' \" (click)=\"!isLastPage() && next()\"\n class=\"w-fit\">Suivant</button>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ChrFormComponent, selector: "app-chr-form", inputs: ["sections", "valid", "model", "disabled"], outputs: ["validChange", "modelChange", "valuesChange"] }] });
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChrPaginatorComponent, decorators: [{
66
+ type: Component,
67
+ args: [{ selector: 'app-chr-paginator', template: "<div class=\"flex flex-row justify-between\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n \u00C9lements par page:\n <app-chr-form class=\"ml-1\" (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { controls: [\n {\n type: 'text',\n name: 'pageSize',\n value: pageSize(),\n width: 'row'\n }]\n }]\">\n </app-chr-form>\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center\">\n <button type=\"button\" *ngIf=\"!isFirstPage()\" (click)=\"previous()\"\n class=\"w-fit cursor-pointer\">Pr\u00E9c\u00E9dent</button>\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n <div class=\"w-10 mr-1\">\n <app-chr-form (keyup.enter)=\"setPageEventHandler($event)\" [sections]=\"[\n { controls: [\n {\n type: 'text',\n name: 'currentPage',\n value: currentPage,\n width: 'row'\n }]\n }]\">\n </app-chr-form>\n </div> / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : '' \" (click)=\"!isLastPage() && next()\"\n class=\"w-fit\">Suivant</button>\n </div>\n</div>" }]
68
+ }], ctorParameters: function () { return [{ type: i1.PaginationService }]; }, propDecorators: { pageChange: [{
69
+ type: Output
70
+ }], pageSizeChange: [{
71
+ type: Output
72
+ }] } });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLXBhZ2luYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9jaHItcGFnaW5hdG9yL2Noci1wYWdpbmF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLXBhZ2luYXRvci9jaHItcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRdkIsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUFtQixPQUEwQjtRQUExQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUx0QyxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUNyQixlQUFVLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsbUJBQWMsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQWM3RCxhQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFSyxTQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFSyxZQUFPLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUNoQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQUUsT0FBTztZQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFSyx3QkFBbUIsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQztRQUVLLGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUssZ0JBQVcsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFFSyw0QkFBdUIsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztRQUVLLGVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM1QyxPQUFPLENBQ0wsSUFBSSxDQUFDLFdBQVc7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FDakUsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVLLGFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUU1QyxhQUFRLEdBQUcsR0FBRyxFQUFFLENBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtZQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRUEsU0FBSSxHQUFHLENBQUMsT0FBMkIsU0FBUyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxDQUFDLElBQUk7Z0JBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztnQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO0lBL0Q4QyxDQUFDO0lBRWpELHFCQUFxQjtRQUNuQix3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FDdEMsZ0JBQWdCLENBQ0ssQ0FBQztJQUMxQixDQUFDO0lBRUQsUUFBUSxLQUFVLENBQUM7O21IQWZSLHFCQUFxQjt1R0FBckIscUJBQXFCLGtJQ2hCbEMseTNDQWtDTTs0RkRsQk8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjt3R0FNbkIsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2luYXRpb25JbnN0YW5jZSwgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICduZ3gtcGFnaW5hdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaHItcGFnaW5hdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Noci1wYWdpbmF0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaHItcGFnaW5hdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENoclBhZ2luYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBpbnN0YW5jZTogUGFnaW5hdGlvbkluc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSkge31cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlcnZpY2UsIHRoaXMuc2VydmljZS5nZXRJbnN0YW5jZSgnY2hyX2RhdGEtdGFibGUnKSk7XG4gICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuc2VydmljZS5nZXRJbnN0YW5jZShcbiAgICAgICdjaHJfZGF0YS10YWJsZSdcbiAgICApIGFzIFBhZ2luYXRpb25JbnN0YW5jZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBwdWJsaWMgcHJldmlvdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5jdXJyZW50UGFnZS0tO1xuICAgIHRoaXMuZW1pdCgpO1xuICB9O1xuXG4gIHB1YmxpYyBuZXh0ID0gKCkgPT4ge1xuICAgIHRoaXMuY3VycmVudFBhZ2UrKztcbiAgICB0aGlzLmVtaXQoKTtcbiAgfTtcblxuICBwdWJsaWMgc2V0UGFnZSA9IChwYWdlOiBudW1iZXIpID0+IHtcbiAgICBpZiAocGFnZSA8IDEgfHwgcGFnZSA+IHRoaXMubGFzdFBhZ2UoKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIHRoaXMuZW1pdCgpO1xuICB9O1xuXG4gIHB1YmxpYyBzZXRQYWdlRXZlbnRIYW5kbGVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRQYWdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgcHVibGljIGlzRmlyc3RQYWdlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09IDE7XG4gIH07XG5cbiAgcHVibGljIHNldFBhZ2VTaXplID0gKHBhZ2VTaXplOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnNldFBhZ2UoMSk7XG4gICAgdGhpcy5pbnN0YW5jZS5pdGVtc1BlclBhZ2UgPSBwYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlLmVtaXQocGFnZVNpemUpO1xuICB9O1xuXG4gIHB1YmxpYyBzZXRQYWdlU2l6ZUV2ZW50SGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0UGFnZVNpemUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfTtcblxuICBwdWJsaWMgaXNMYXN0UGFnZSA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuaW5zdGFuY2UudG90YWxJdGVtcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID09XG4gICAgICBNYXRoLmNlaWwodGhpcy5pbnN0YW5jZS50b3RhbEl0ZW1zIC8gdGhpcy5pbnN0YW5jZS5pdGVtc1BlclBhZ2UpXG4gICAgKTtcbiAgfTtcblxuICBwdWJsaWMgcGFnZVNpemUgPSAoKSA9PiB0aGlzLmluc3RhbmNlLml0ZW1zUGVyUGFnZTtcblxuICBwdWJsaWMgbGFzdFBhZ2UgPSAoKSA9PlxuICAgIHRoaXMuaW5zdGFuY2UudG90YWxJdGVtc1xuICAgICAgPyBNYXRoLmNlaWwodGhpcy5pbnN0YW5jZS50b3RhbEl0ZW1zIC8gdGhpcy5pbnN0YW5jZS5pdGVtc1BlclBhZ2UpXG4gICAgICA6IDE7XG5cbiAgcHJpdmF0ZSBlbWl0ID0gKHBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghcGFnZSkgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgZWxzZSB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChwYWdlKTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktc3RhcnQgcHktMiBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgw4lsZW1lbnRzIHBhciBwYWdlOlxuICAgICAgICA8YXBwLWNoci1mb3JtIGNsYXNzPVwibWwtMVwiIChrZXl1cC5lbnRlcik9XCJzZXRQYWdlU2l6ZUV2ZW50SGFuZGxlcigkZXZlbnQpXCIgW3NlY3Rpb25zXT1cIltcbiAgICAgICAgeyBjb250cm9sczogW1xuICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBuYW1lOiAncGFnZVNpemUnLFxuICAgICAgICAgICAgdmFsdWU6IHBhZ2VTaXplKCksXG4gICAgICAgICAgICB3aWR0aDogJ3JvdydcbiAgICAgICAgfV1cbiAgICAgICAgfV1cIj5cbiAgICAgICAgPC9hcHAtY2hyLWZvcm0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgcHktMiBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhaXNGaXJzdFBhZ2UoKVwiIChjbGljayk9XCJwcmV2aW91cygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1maXQgY3Vyc29yLXBvaW50ZXJcIj5QcsOpY8OpZGVudDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXIgbXgtMiB3LWZpdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAgbXItMVwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY2hyLWZvcm0gKGtleXVwLmVudGVyKT1cInNldFBhZ2VFdmVudEhhbmRsZXIoJGV2ZW50KVwiIFtzZWN0aW9uc109XCJbXG4gICAgICAgICAgICB7IGNvbnRyb2xzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgbmFtZTogJ2N1cnJlbnRQYWdlJyxcbiAgICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgICB3aWR0aDogJ3JvdydcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWNoci1mb3JtPlxuICAgICAgICAgICAgPC9kaXY+IC8ge3tsYXN0UGFnZSgpfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtuZ0NsYXNzXT1cIiFpc0xhc3RQYWdlKCkgPyAnY3Vyc29yLXBvaW50ZXInIDogJycgXCIgKGNsaWNrKT1cIiFpc0xhc3RQYWdlKCkgJiYgbmV4dCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1maXRcIj5TdWl2YW50PC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=