@smartbit4all/ng-client 4.3.8 → 4.3.10
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.
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.mjs +7 -8
- package/fesm2022/smartbit4all-ng-client.mjs +37 -37
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/package.json +1 -1
- package/smartbit4all-ng-client-4.3.10.tgz +0 -0
- package/smartbit4all-ng-client-4.3.8.tgz +0 -0
|
@@ -3,11 +3,10 @@ import { UploadWidgetUtils } from '../upload-widget.utils';
|
|
|
3
3
|
import { IconPosition, UiActionButtonType, } from '../../../../../view-context/api/model/models';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "primeng/
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "../../../ui-action-button/ui-action-button.component";
|
|
6
|
+
import * as i2 from "primeng/api";
|
|
7
|
+
import * as i3 from "../../../../../smart-icon/smart-icon/smart-icon.component";
|
|
8
|
+
import * as i4 from "primeng/fileupload";
|
|
9
|
+
import * as i5 from "../../../ui-action-button/ui-action-button.component";
|
|
11
10
|
export class PrimeFileUploaderComponent {
|
|
12
11
|
constructor() {
|
|
13
12
|
this.autoUpload = false;
|
|
@@ -68,11 +67,11 @@ export class PrimeFileUploaderComponent {
|
|
|
68
67
|
};
|
|
69
68
|
}
|
|
70
69
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrimeFileUploaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: PrimeFileUploaderComponent, selector: "prime-file-uploader", inputs: { isMultiple: "isMultiple", autoUpload: "autoUpload", maxSizeMb: "maxSizeMb", fileFormats: "fileFormats", title: "title", subTitle: "subTitle", isDisabled: "isDisabled" }, outputs: { uploadFilesEvent: "uploadFilesEvent" }, viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }], ngImport: i0, template: "@if(isMultiple){\r\n<p-fileUpload\r\n
|
|
70
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: PrimeFileUploaderComponent, selector: "prime-file-uploader", inputs: { isMultiple: "isMultiple", autoUpload: "autoUpload", maxSizeMb: "maxSizeMb", fileFormats: "fileFormats", title: "title", subTitle: "subTitle", isDisabled: "isDisabled" }, outputs: { uploadFilesEvent: "uploadFilesEvent" }, viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }], ngImport: i0, template: "@if (isMultiple) {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [disabled]=\"isDisabled\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\" *ngIf=\"!isMobile()\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n} @else {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [disabled]=\"isDisabled\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [ngClass]=\"{ singlePrimeNg: true, autoUpload: autoUpload, disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\" *ngIf=\"!isMobile()\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n}\r\n\r\n<ng-template #uploader let-file let-i=\"index\">\r\n <div class=\"uploadField\" (click)=\"fileUploadPrime.choose()\">\r\n <div class=\"uploadData\"\r\n ><smart-icon class=\"uploadIcon\" [icon]=\"'upload'\"></smart-icon>\r\n <div class=\"dataField\">\r\n <span class=\"title message\">{{ title }}</span>\r\n <span class=\"message\">{{ subTitle }}</span>\r\n <span class=\"message\">{{ fileFormatsString }}</span>\r\n <span class=\"message\"> max {{ maxSizeMb }} Mb</span>\r\n </div>\r\n </div>\r\n @if (autoUpload == false && files && files.length > 0) {\r\n <ui-action-button [descriptor]=\"uploadButton\" (actionClick)=\"fileUploadPrime.upload()\" />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #fileContainer let-file let-i=\"index\">\r\n <div class=\"p-fileupload-file\">\r\n @if (file.objectURL) {\r\n <img role=\"presentation\" [alt]=\"file.name\" [src]=\"file.objectURL\" width=\"50\" height=\"50\" />\r\n } @else {\r\n <i class=\"pi pi-file\" style=\"font-size: 2rem\"></i>\r\n }\r\n\r\n <div class=\"fileData\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n <div class=\"fileButtons\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"trash\"\r\n (click)=\"fileUploadPrime.remove($event, i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}:host ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}:host ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}:host ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{font-size:smaller;text-align:center;color:#6b7280}.title{font-size:unset;color:var(--primary-color)}.uploadField{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1rem;padding:.5rem 1rem;cursor:pointer}.uploadField:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .uploadField:hover{background-color:unset;cursor:unset}:host ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}:host ::ng-deep .p-fileupload-choose,:host ::ng-deep .p-fileupload-row ::ng-deep button,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.disabledWidget ::ng-deep *{opacity:.85}:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:unset;cursor:unset}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.fileSize{display:flex;justify-content:flex-start}.fileData{flex:1;display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}.uploadData{flex:1;display:flex;flex-direction:row;justify-content:flex-start;gap:1rem}.fileName{text-align:start}.singlePrimeNg ::ng-deep .uploadField{padding:1rem}.uploadIcon{align-content:center}:host ::ng-deep .uploadIcon i{font-size:2rem}:host ::ng-deep .p-fileupload-file i,:host ::ng-deep .uploadIcon i,:host ::ng-deep img{display:flex;justify-content:center;width:3rem}.dataField{display:flex;flex-direction:column;justify-content:flex-start;align-items:baseline}:host ::ng-deep .p-fileupload-content p-progressbar,:host ::ng-deep .p-fileupload ::ng-deep .p-fileupload-buttonbar{display:none!important}:host ::ng-deep .p-fileupload-content{display:flex;flex-direction:column-reverse}:host ::ng-deep .p-fileupload-file{border:unset;border-top:1px solid var(--border-color)}:host ::ng-deep .p-fileupload.p-fileupload-advanced .p-message{margin:unset}.fileButtons{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileButtons ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i4.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
|
|
72
71
|
}
|
|
73
72
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrimeFileUploaderComponent, decorators: [{
|
|
74
73
|
type: Component,
|
|
75
|
-
args: [{ selector: 'prime-file-uploader', template: "@if(isMultiple){\r\n<p-fileUpload\r\n
|
|
74
|
+
args: [{ selector: 'prime-file-uploader', template: "@if (isMultiple) {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [disabled]=\"isDisabled\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\" *ngIf=\"!isMobile()\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n} @else {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [disabled]=\"isDisabled\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [ngClass]=\"{ singlePrimeNg: true, autoUpload: autoUpload, disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\" *ngIf=\"!isMobile()\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n}\r\n\r\n<ng-template #uploader let-file let-i=\"index\">\r\n <div class=\"uploadField\" (click)=\"fileUploadPrime.choose()\">\r\n <div class=\"uploadData\"\r\n ><smart-icon class=\"uploadIcon\" [icon]=\"'upload'\"></smart-icon>\r\n <div class=\"dataField\">\r\n <span class=\"title message\">{{ title }}</span>\r\n <span class=\"message\">{{ subTitle }}</span>\r\n <span class=\"message\">{{ fileFormatsString }}</span>\r\n <span class=\"message\"> max {{ maxSizeMb }} Mb</span>\r\n </div>\r\n </div>\r\n @if (autoUpload == false && files && files.length > 0) {\r\n <ui-action-button [descriptor]=\"uploadButton\" (actionClick)=\"fileUploadPrime.upload()\" />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #fileContainer let-file let-i=\"index\">\r\n <div class=\"p-fileupload-file\">\r\n @if (file.objectURL) {\r\n <img role=\"presentation\" [alt]=\"file.name\" [src]=\"file.objectURL\" width=\"50\" height=\"50\" />\r\n } @else {\r\n <i class=\"pi pi-file\" style=\"font-size: 2rem\"></i>\r\n }\r\n\r\n <div class=\"fileData\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n <div class=\"fileButtons\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"trash\"\r\n (click)=\"fileUploadPrime.remove($event, i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}:host ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}:host ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}:host ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{font-size:smaller;text-align:center;color:#6b7280}.title{font-size:unset;color:var(--primary-color)}.uploadField{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1rem;padding:.5rem 1rem;cursor:pointer}.uploadField:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .uploadField:hover{background-color:unset;cursor:unset}:host ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}:host ::ng-deep .p-fileupload-choose,:host ::ng-deep .p-fileupload-row ::ng-deep button,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.disabledWidget ::ng-deep *{opacity:.85}:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:unset;cursor:unset}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.fileSize{display:flex;justify-content:flex-start}.fileData{flex:1;display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}.uploadData{flex:1;display:flex;flex-direction:row;justify-content:flex-start;gap:1rem}.fileName{text-align:start}.singlePrimeNg ::ng-deep .uploadField{padding:1rem}.uploadIcon{align-content:center}:host ::ng-deep .uploadIcon i{font-size:2rem}:host ::ng-deep .p-fileupload-file i,:host ::ng-deep .uploadIcon i,:host ::ng-deep img{display:flex;justify-content:center;width:3rem}.dataField{display:flex;flex-direction:column;justify-content:flex-start;align-items:baseline}:host ::ng-deep .p-fileupload-content p-progressbar,:host ::ng-deep .p-fileupload ::ng-deep .p-fileupload-buttonbar{display:none!important}:host ::ng-deep .p-fileupload-content{display:flex;flex-direction:column-reverse}:host ::ng-deep .p-fileupload-file{border:unset;border-top:1px solid var(--border-color)}:host ::ng-deep .p-fileupload.p-fileupload-advanced .p-message{margin:unset}.fileButtons{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileButtons ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"] }]
|
|
76
75
|
}], propDecorators: { fileUploadPrime: [{
|
|
77
76
|
type: ViewChild,
|
|
78
77
|
args: ['fileUploadPrimeNg']
|
|
@@ -93,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
93
92
|
}], uploadFilesEvent: [{
|
|
94
93
|
type: Output
|
|
95
94
|
}] } });
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWUtZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC9wcmltZS1maWxlLXVwbG9hZGVyL3ByaW1lLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9jb21wb25lbnRzL3VwbG9hZC13aWRnZXQvcHJpbWUtZmlsZS11cGxvYWRlci9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFDTCxZQUFZLEVBQ1osa0JBQWtCLEdBRW5CLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7O0FBT3RELE1BQU0sT0FBTywwQkFBMEI7SUFMdkM7UUFTVyxlQUFVLEdBQWEsS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFJdkIsZUFBVSxHQUFhLEtBQUssQ0FBQztRQWE1QixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFFekMsQ0FBQztLQXlETjtJQW5FQyxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLHVCQUF1QixDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSx1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aXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAncHJpbWVuZy9maWxldXBsb2FkJztcclxuaW1wb3J0IHsgVXBsb2FkV2lkZ2V0VXRpbHMgfSBmcm9tICcuLi91cGxvYWQtd2lkZ2V0LnV0aWxzJztcclxuaW1wb3J0IHtcclxuICBJY29uUG9zaXRpb24sXHJcbiAgVWlBY3Rpb25CdXR0b25UeXBlLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi92aWV3LWNvbnRleHQvYXBpL21vZGVsL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ByaW1lLWZpbGUtdXBsb2FkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcHJpbWUtZmlsZS11cGxvYWRlci5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByaW1lRmlsZVVwbG9hZGVyQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKCdmaWxlVXBsb2FkUHJpbWVOZycpIGZpbGVVcGxvYWRQcmltZSE6IEZpbGVVcGxvYWQ7XHJcblxyXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGF1dG9VcGxvYWQ/OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWF4U2l6ZU1iOiBudW1iZXIgPSAyNTtcclxuICBASW5wdXQoKSBmaWxlRm9ybWF0cz86IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN1YlRpdGxlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIG1heFNpemVCeXRlcz86IG51bWJlcjtcclxuICBmaWxlRm9ybWF0c1N0cmluZz86IHN0cmluZztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZSA/PyAnRG9rdW1lbnR1bSBob3p6w6FhZMOhc2EnO1xyXG4gICAgdGhpcy5zdWJUaXRsZSA9IHRoaXMuc3ViVGl0bGUgPz8gJ3RhbGzDs3rDoXMgdmFneSBiZWjDunrDoXMnO1xyXG4gICAgdGhpcy5tYXhTaXplQnl0ZXMgPSB0aGlzLm1heFNpemVNYiAqIDEwMjQgKiAxMDI0O1xyXG5cclxuICAgIHRoaXMuZmlsZUZvcm1hdHNTdHJpbmcgPSB0aGlzLmZpbGVGb3JtYXRzPy5qb2luKCcsICcpID8/ICcnO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHVwbG9hZEZpbGVzRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGZpbGVzOiBhbnlbXTtcclxuICB9PigpO1xyXG5cclxuICBpc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAvaVBob25lfGlQYWR8aVBvZHxBbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlVXBsb2FkUHJpbWUuY2xlYXIoKTtcclxuICB9XHJcbiAgb25GaWxlU2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZVVwbG9hZFByaW1lLm9uRmlsZVNlbGVjdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXV0b1VwbG9hZCAmJiBldmVudC5jdXJyZW50RmlsZXMubGVuZ3RoID09IGV2ZW50LmZpbGVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGVzKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudXBsb2FkRmlsZXNFdmVudC5lbWl0KHtcclxuICAgICAgZmlsZXM6IHRoaXMuZmlsZVVwbG9hZFByaW1lLmZpbGVzLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWxlVXBsb2FkUHJpbWUuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRmlsZShmaWxlOiBGaWxlKSB7XHJcbiAgICBsZXQgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSBmaWxlLm5hbWU7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0U2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBVcGxvYWRXaWRnZXRVdGlscy5mb3JtYXRTaXplKGJ5dGVzKTtcclxuICB9XHJcblxyXG4gIGdldCBmaWxlcygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlVXBsb2FkUHJpbWU/LmZpbGVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZpbGVzKGZpbGVzOiBhbnlbXSkge1xyXG4gICAgdGhpcy5maWxlVXBsb2FkUHJpbWUuZmlsZXMgPSBmaWxlcztcclxuICB9XHJcblxyXG4gIGdldCB1cGxvYWRCdXR0b24oKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpdGxlOiAnRmVsdMO2bHTDqXMnLFxyXG4gICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICBpY29uOiAndXBsb2FkJyxcclxuICAgICAgaWNvblBvc2l0aW9uOiBJY29uUG9zaXRpb24uUFJFLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiQGlmKGlzTXVsdGlwbGUpe1xyXG48cC1maWxlVXBsb2FkXHJcbiAgI2ZpbGVVcGxvYWRQcmltZU5nXHJcbiAgbmFtZT1cImZpbGVzW11cIlxyXG4gIHVybD1cIlwiXHJcbiAgKG9uU2VsZWN0KT1cInNlbGVjdCgkZXZlbnQpXCJcclxuICAob25TZW5kKT1cInVwbG9hZEZpbGVzKCRldmVudClcIlxyXG4gIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICBbYWNjZXB0XT1cImZpbGVGb3JtYXRzU3RyaW5nXCJcclxuICBbbWF4RmlsZVNpemVdPVwibWF4U2l6ZUJ5dGVzXCJcclxuICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZFdpZGdldDogaXNEaXNhYmxlZCB9XCJcclxuICB1cGxvYWRMYWJlbD1cIkZlbHTDtmx0w6lzXCJcclxuICBjYW5jZWxMYWJlbD1cIk3DqWdzZW1cIlxyXG4gIGNob29zZUxhYmVsPVwiVsOhbGFzenTDoXNcIlxyXG4+XHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiAqbmdJZj1cIiFpc01vYmlsZSgpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkZXJcIiAvPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbGVcIiBsZXQtZmlsZSBsZXQtaT1cImluZGV4XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsZUNvbnRhaW5lcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZpbGUsIGk6IGkgfVwiIC8+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLWZpbGVVcGxvYWQ+XHJcbn0gQGVsc2V7XHJcbjxwLWZpbGVVcGxvYWRcclxuICAjZmlsZVVwbG9hZFByaW1lTmdcclxuICBuYW1lPVwiZmlsZXNbXVwiXHJcbiAgdXJsPVwiXCJcclxuICAob25TZWxlY3QpPVwic2VsZWN0KCRldmVudClcIlxyXG4gIChvblNlbmQpPVwidXBsb2FkRmlsZXMoJGV2ZW50KVwiXHJcbiAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICBbYWNjZXB0XT1cImZpbGVGb3JtYXRzU3RyaW5nXCJcclxuICBbbWF4RmlsZVNpemVdPVwibWF4U2l6ZUJ5dGVzXCJcclxuICBbbmdDbGFzc109XCJ7IHNpbmdsZVByaW1lTmc6IHRydWUsIGF1dG9VcGxvYWQ6IGF1dG9VcGxvYWQsIGRpc2FibGVkV2lkZ2V0OiBpc0Rpc2FibGVkIH1cIlxyXG4gIHVwbG9hZExhYmVsPVwiRmVsdMO2bHTDqXNcIlxyXG4gIGNhbmNlbExhYmVsPVwiTcOpZ3NlbVwiXHJcbiAgY2hvb3NlTGFiZWw9XCJWw6FsYXN6dMOhc1wiXHJcbj5cclxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiICpuZ0lmPVwiIWlzTW9iaWxlKClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRlclwiIC8+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsZVwiIGxldC1maWxlIGxldC1pPVwiaW5kZXhcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlQ29udGFpbmVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmlsZSwgaTogaSB9XCIgLz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L3AtZmlsZVVwbG9hZD5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICN1cGxvYWRlciBsZXQtZmlsZSBsZXQtaT1cImluZGV4XCI+XHJcbiAgPGRpdiBjbGFzcz1cInVwbG9hZEZpZWxkXCIgKGNsaWNrKT1cImZpbGVVcGxvYWRQcmltZS5jaG9vc2UoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZERhdGFcIlxyXG4gICAgICA+PHNtYXJ0LWljb24gY2xhc3M9XCJ1cGxvYWRJY29uXCIgW2ljb25dPVwiJ3VwbG9hZCdcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhRmllbGRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlIG1lc3NhZ2VcIj57eyB0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lc3NhZ2VcIj57eyBzdWJUaXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lc3NhZ2VcIj57eyBmaWxlRm9ybWF0c1N0cmluZyB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lc3NhZ2VcIj4gbWF4IHt7IG1heFNpemVNYiB9fSBNYjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZihpc011bHRpcGxlID09IGZhbHNlICYmIGF1dG9VcGxvYWQgPT0gZmFsc2UgJiYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApKXtcclxuICAgIDx1aS1hY3Rpb24tYnV0dG9uIFtkZXNjcmlwdG9yXT1cInVwbG9hZEJ1dHRvblwiIChhY3Rpb25DbGljayk9XCJmaWxlVXBsb2FkUHJpbWUudXBsb2FkKClcIiAvPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmaWxlQ29udGFpbmVyIGxldC1maWxlIGxldC1pPVwiaW5kZXhcIj5cclxuICA8ZGl2IGNsYXNzPVwicC1maWxldXBsb2FkLWZpbGVcIj5cclxuICAgIEBpZihmaWxlLm9iamVjdFVSTCl7XHJcbiAgICA8aW1nIHJvbGU9XCJwcmVzZW50YXRpb25cIiBbYWx0XT1cImZpbGUubmFtZVwiIFtzcmNdPVwiZmlsZS5vYmplY3RVUkxcIiB3aWR0aD1cIjUwXCIgaGVpZ2h0PVwiNTBcIiAvPlxyXG4gICAgfUBlbHNlIHtcclxuICAgIDxpIGNsYXNzPVwicGkgcGktZmlsZVwiIHN0eWxlPVwiZm9udC1zaXplOiAycmVtXCI+PC9pPlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlRGF0YVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGVOYW1lXCI+e3sgZmlsZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGVTaXplXCI+e3sgZm9ybWF0U2l6ZShmaWxlLnNpemUpIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZUJ1dHRvbnNcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHBCdXR0b25cclxuICAgICAgICBpY29uPVwicGkgcGktZG93bmxvYWRcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBmaWxlLWFjdGlvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkRmlsZShmaWxlKVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkRvd25sb2FkXCJcclxuICAgICAgICBzdHlsZT1cImNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKVwiXHJcbiAgICAgID48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHBCdXR0b25cclxuICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBmaWxlLWFjdGlvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cImZpbGVVcGxvYWRQcmltZS5yZW1vdmUoJGV2ZW50LCBpKVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZVwiXHJcbiAgICAgICAgc3R5bGU9XCJjb2xvcjogcmdiKDIzOSwgNjgsIDY4KVwiXHJcbiAgICAgID48L2J1dHRvblxyXG4gICAgPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWUtZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC9wcmltZS1maWxlLXVwbG9hZGVyL3ByaW1lLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9jb21wb25lbnRzL3VwbG9hZC13aWRnZXQvcHJpbWUtZmlsZS11cGxvYWRlci9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFDTCxZQUFZLEVBQ1osa0JBQWtCLEdBRW5CLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQVNXLGVBQVUsR0FBYSxLQUFLLENBQUM7UUFDN0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUl2QixlQUFVLEdBQWEsS0FBSyxDQUFDO1FBYTVCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUV6QyxDQUFDO0tBeUROO0lBbkVDLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksdUJBQXVCLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLHVC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dHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBVcGxvYWRXaWRnZXRVdGlscyB9IGZyb20gJy4uL3VwbG9hZC13aWRnZXQudXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncHJpbWUtZmlsZS11cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ByaW1lLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpbWVGaWxlVXBsb2FkZXJDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRQcmltZU5nJykgZmlsZVVwbG9hZFByaW1lITogRmlsZVVwbG9hZDtcclxuXHJcbiAgQElucHV0KCkgaXNNdWx0aXBsZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYXV0b1VwbG9hZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXhTaXplTWI6IG51bWJlciA9IDI1O1xyXG4gIEBJbnB1dCgpIGZpbGVGb3JtYXRzPzogc3RyaW5nW107XHJcbiAgQElucHV0KCkgdGl0bGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3ViVGl0bGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNEaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbWF4U2l6ZUJ5dGVzPzogbnVtYmVyO1xyXG4gIGZpbGVGb3JtYXRzU3RyaW5nPzogc3RyaW5nO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlID8/ICdEb2t1bWVudHVtIGhvenrDoWFkw6FzYSc7XHJcbiAgICB0aGlzLnN1YlRpdGxlID0gdGhpcy5zdWJUaXRsZSA/PyAndGFsbMOzesOhcyB2YWd5IGJlaMO6esOhcyc7XHJcbiAgICB0aGlzLm1heFNpemVCeXRlcyA9IHRoaXMubWF4U2l6ZU1iICogMTAyNCAqIDEwMjQ7XHJcblxyXG4gICAgdGhpcy5maWxlRm9ybWF0c1N0cmluZyA9IHRoaXMuZmlsZUZvcm1hdHM/LmpvaW4oJywgJykgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdXBsb2FkRmlsZXNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZmlsZXM6IGFueVtdO1xyXG4gIH0+KCk7XHJcblxyXG4gIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5jbGVhcigpO1xyXG4gIH1cclxuICBvbkZpbGVTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlVXBsb2FkUHJpbWUub25GaWxlU2VsZWN0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRvVXBsb2FkICYmIGV2ZW50LmN1cnJlbnRGaWxlcy5sZW5ndGggPT0gZXZlbnQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZXMoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZXMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRGaWxlc0V2ZW50LmVtaXQoe1xyXG4gICAgICBmaWxlczogdGhpcy5maWxlVXBsb2FkUHJpbWUuZmlsZXMsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRGaWxlKGZpbGU6IEZpbGUpIHtcclxuICAgIGxldCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGUubmFtZTtcclxuICAgIGEuY2xpY2soKTtcclxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVwbG9hZFdpZGdldFV0aWxzLmZvcm1hdFNpemUoYnl0ZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVVcGxvYWRQcmltZT8uZmlsZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgZmlsZXMoZmlsZXM6IGFueVtdKSB7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5maWxlcyA9IGZpbGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVwbG9hZEJ1dHRvbigpOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGl0bGU6ICdGZWx0w7ZsdMOpcycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgIGljb246ICd1cGxvYWQnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGlzTXVsdGlwbGUpIHtcclxuICA8cC1maWxlVXBsb2FkXHJcbiAgICAjZmlsZVVwbG9hZFByaW1lTmdcclxuICAgIG5hbWU9XCJmaWxlc1tdXCJcclxuICAgIHVybD1cIlwiXHJcbiAgICAob25TZWxlY3QpPVwic2VsZWN0KCRldmVudClcIlxyXG4gICAgKG9uU2VuZCk9XCJ1cGxvYWRGaWxlcygkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICAgIFthY2NlcHRdPVwiZmlsZUZvcm1hdHNTdHJpbmdcIlxyXG4gICAgW21heEZpbGVTaXplXT1cIm1heFNpemVCeXRlc1wiXHJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkV2lkZ2V0OiBpc0Rpc2FibGVkIH1cIlxyXG4gICAgdXBsb2FkTGFiZWw9XCJGZWx0w7ZsdMOpc1wiXHJcbiAgICBjYW5jZWxMYWJlbD1cIk3DqWdzZW1cIlxyXG4gICAgY2hvb3NlTGFiZWw9XCJWw6FsYXN6dMOhc1wiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiAqbmdJZj1cIiFpc01vYmlsZSgpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRlclwiIC8+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbGVcIiBsZXQtZmlsZSBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlQ29udGFpbmVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmlsZSwgaTogaSB9XCIgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWZpbGVVcGxvYWQ+XHJcbn0gQGVsc2Uge1xyXG4gIDxwLWZpbGVVcGxvYWRcclxuICAgICNmaWxlVXBsb2FkUHJpbWVOZ1xyXG4gICAgbmFtZT1cImZpbGVzW11cIlxyXG4gICAgdXJsPVwiXCJcclxuICAgIChvblNlbGVjdCk9XCJzZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAob25TZW5kKT1cInVwbG9hZEZpbGVzKCRldmVudClcIlxyXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgW211bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgW2FjY2VwdF09XCJmaWxlRm9ybWF0c1N0cmluZ1wiXHJcbiAgICBbbWF4RmlsZVNpemVdPVwibWF4U2l6ZUJ5dGVzXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgc2luZ2xlUHJpbWVOZzogdHJ1ZSwgYXV0b1VwbG9hZDogYXV0b1VwbG9hZCwgZGlzYWJsZWRXaWRnZXQ6IGlzRGlzYWJsZWQgfVwiXHJcbiAgICB1cGxvYWRMYWJlbD1cIkZlbHTDtmx0w6lzXCJcclxuICAgIGNhbmNlbExhYmVsPVwiTcOpZ3NlbVwiXHJcbiAgICBjaG9vc2VMYWJlbD1cIlbDoWxhc3p0w6FzXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiICpuZ0lmPVwiIWlzTW9iaWxlKClcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZGVyXCIgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsZVwiIGxldC1maWxlIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVDb250YWluZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWxlLCBpOiBpIH1cIiAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtZmlsZVVwbG9hZD5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICN1cGxvYWRlciBsZXQtZmlsZSBsZXQtaT1cImluZGV4XCI+XHJcbiAgPGRpdiBjbGFzcz1cInVwbG9hZEZpZWxkXCIgKGNsaWNrKT1cImZpbGVVcGxvYWRQcmltZS5jaG9vc2UoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZERhdGFcIlxyXG4gICAgICA+PHNtYXJ0LWljb24gY2xhc3M9XCJ1cGxvYWRJY29uXCIgW2ljb25dPVwiJ3VwbG9hZCdcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhRmllbGRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlIG1lc3NhZ2VcIj57eyB0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lc3NhZ2VcIj57eyBzdWJUaXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lc3NhZ2VcIj57eyBmaWxlRm9ybWF0c1N0cmluZyB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lc3NhZ2VcIj4gbWF4IHt7IG1heFNpemVNYiB9fSBNYjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoYXV0b1VwbG9hZCA9PSBmYWxzZSAmJiBmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIDx1aS1hY3Rpb24tYnV0dG9uIFtkZXNjcmlwdG9yXT1cInVwbG9hZEJ1dHRvblwiIChhY3Rpb25DbGljayk9XCJmaWxlVXBsb2FkUHJpbWUudXBsb2FkKClcIiAvPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmaWxlQ29udGFpbmVyIGxldC1maWxlIGxldC1pPVwiaW5kZXhcIj5cclxuICA8ZGl2IGNsYXNzPVwicC1maWxldXBsb2FkLWZpbGVcIj5cclxuICAgIEBpZiAoZmlsZS5vYmplY3RVUkwpIHtcclxuICAgICAgPGltZyByb2xlPVwicHJlc2VudGF0aW9uXCIgW2FsdF09XCJmaWxlLm5hbWVcIiBbc3JjXT1cImZpbGUub2JqZWN0VVJMXCIgd2lkdGg9XCI1MFwiIGhlaWdodD1cIjUwXCIgLz5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWZpbGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMnJlbVwiPjwvaT5cclxuICAgIH1cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZURhdGFcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlTmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlU2l6ZVwiPnt7IGZvcm1hdFNpemUoZmlsZS5zaXplKSB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGVCdXR0b25zXCI+XHJcbiAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgY2xhc3M9XCJkb3dubG9hZEljb25cIlxyXG4gICAgICAgIGljb249XCJkb3dubG9hZFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkRmlsZShmaWxlLmRhdGFVcmkpXCJcclxuICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICBjbGFzcz1cInJlbW92ZUljb25cIlxyXG4gICAgICAgIGljb249XCJ0cmFzaFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImZpbGVVcGxvYWRQcmltZS5yZW1vdmUoJGV2ZW50LCBpKVwiXHJcbiAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|