UNPKG

@asoftwareworld/form-builder

Version:

ASW Form Builder helps you with rapid development and designed web forms which includes several controls. The key feature of Form Builder is to make your content attractive and effective. We can customize our control at run time and preview the same befor

86 lines 18.8 kB
/** * @license * Copyright ASW (A Software World) All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { AswConfirmDialog } from '@asoftwareworld/form-builder/form-control/confirm-dialog'; import { Constants } from '@asoftwareworld/form-builder/form-control/core'; import { AswHeaderDialog } from './header-dialog'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; import * as i2 from "@angular/common"; import * as i3 from "@angular/material/icon"; import * as i4 from "@angular/material/button"; import * as i5 from "@angular/material/tooltip"; export class AswHeader { dialog; constants = Constants; /** * Header control */ control = null; /** * Header control index to help update or delete button from drop area */ controlIndex; isPreviewTemplate = false; headerUpdateEvent = new EventEmitter(); headerDeleteEvent = new EventEmitter(); duplicateControl = new EventEmitter(); constructor(dialog) { this.dialog = dialog; } /** * Delete header control based on control index * @param control header control items * @param controlIndex header control index */ deleteHeaderDialog(control, controlIndex) { const dialogRef = this.dialog.open(AswConfirmDialog, { width: '350px', data: { name: control.controlType, message: this.constants.messages.waringMessage } }); dialogRef.afterClosed().subscribe(result => { if (result !== undefined) { this.headerDeleteEvent.emit(controlIndex); } }); } editHeaderDialog(control, controlIndex) { const dialogRef = this.dialog.open(AswHeaderDialog, { disableClose: true, width: '50%', data: control }); dialogRef.afterClosed().subscribe(result => { if (result !== undefined) { this.headerUpdateEvent.emit({ control: result, index: controlIndex }); } }); } duplicateHeaderControl(control) { this.duplicateControl.emit(control); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswHeader, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: AswHeader, selector: "asw-header", inputs: { control: "control", controlIndex: "controlIndex", isPreviewTemplate: "isPreviewTemplate" }, outputs: { headerUpdateEvent: "headerUpdateEvent", headerDeleteEvent: "headerDeleteEvent", duplicateControl: "duplicateControl" }, ngImport: i0, template: "<ng-container *ngIf=\"control as control\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'h1'\">\r\n <h1 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h1>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h2'\">\r\n <h2 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h2>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h3'\">\r\n <h3 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h3>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h4'\">\r\n <h4 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h4>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h5'\">\r\n <h5 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h5>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h6'\">\r\n <h6 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h6>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template [ngIf]=\"isPreviewTemplate\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Duplicate\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateHeaderControl(control)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Edit\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editHeaderDialog(control, controlIndex)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Delete\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteHeaderDialog(control, controlIndex)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div> \r\n </div>\r\n </ng-template> \r\n</ng-container>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswHeader, decorators: [{ type: Component, args: [{ selector: 'asw-header', template: "<ng-container *ngIf=\"control as control\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'h1'\">\r\n <h1 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h1>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h2'\">\r\n <h2 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h2>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h3'\">\r\n <h3 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h3>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h4'\">\r\n <h4 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h4>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h5'\">\r\n <h5 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h5>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'h6'\">\r\n <h6 class=\"{{control.style}} {{control.customClass}}\">{{control.label}}</h6>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template [ngIf]=\"isPreviewTemplate\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Duplicate\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateHeaderControl(control)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Edit\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editHeaderDialog(control, controlIndex)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Delete\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteHeaderDialog(control, controlIndex)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div> \r\n </div>\r\n </ng-template> \r\n</ng-container>" }] }], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { control: [{ type: Input }], controlIndex: [{ type: Input }], isPreviewTemplate: [{ type: Input }], headerUpdateEvent: [{ type: Output }], headerDeleteEvent: [{ type: Output }], duplicateControl: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL2hlYWRlci9oZWFkZXIudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvaGVhZGVyL2hlYWRlci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7OztBQU1sRCxNQUFNLE9BQU8sU0FBUztJQWtCQztJQWhCbkIsU0FBUyxHQUFRLFNBQVMsQ0FBQztJQUMzQjs7T0FFRztJQUNNLE9BQU8sR0FBeUIsSUFBSSxDQUFDO0lBRTlDOztPQUVHO0lBQ00sWUFBWSxDQUFVO0lBQ3RCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUV6QixpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBNkMsQ0FBQztJQUNsRixpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQy9DLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBRS9ELFlBQW1CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFBSSxDQUFDO0lBRXpDOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxPQUFzQixFQUFFLFlBQW9CO1FBQzNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pELEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtTQUN0RixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFzQixFQUFFLFlBQW9CO1FBQ3pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNoRCxZQUFZLEVBQUUsSUFBSTtZQUNsQixLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxPQUFPO1NBQ2hCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFzQjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBcERRLFNBQVM7NEZBQVQsU0FBUywyUkNuQnRCLG82RUFnRGU7OzRGRDdCRixTQUFTO2tCQUpyQixTQUFTOytCQUNJLFlBQVk7OEVBU2IsT0FBTztzQkFBZixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBU1cgKEEgU29mdHdhcmUgV29ybGQpIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGVcclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBBc3dDb25maXJtRGlhbG9nIH0gZnJvbSAnQGFzb2Z0d2FyZXdvcmxkL2Zvcm0tYnVpbGRlci9mb3JtLWNvbnRyb2wvY29uZmlybS1kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICdAYXNvZnR3YXJld29ybGQvZm9ybS1idWlsZGVyL2Zvcm0tY29udHJvbC9jb3JlJztcclxuaW1wb3J0IHsgSGVhZGVyQ29udHJvbCB9IGZyb20gJy4vaGVhZGVyLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBBc3dIZWFkZXJEaWFsb2cgfSBmcm9tICcuL2hlYWRlci1kaWFsb2cnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Fzdy1oZWFkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXN3SGVhZGVyIHtcclxuXHJcbiAgICBjb25zdGFudHM6IGFueSA9IENvbnN0YW50cztcclxuICAgIC8qKlxyXG4gICAgICogSGVhZGVyIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgY29udHJvbDogSGVhZGVyQ29udHJvbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVhZGVyIGNvbnRyb2wgaW5kZXggdG8gaGVscCB1cGRhdGUgb3IgZGVsZXRlIGJ1dHRvbiBmcm9tIGRyb3AgYXJlYVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBjb250cm9sSW5kZXghOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBpc1ByZXZpZXdUZW1wbGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBoZWFkZXJVcGRhdGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb250cm9sOiBIZWFkZXJDb250cm9sLCBpbmRleDogbnVtYmVyIH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgaGVhZGVyRGVsZXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICAgIEBPdXRwdXQoKSBkdXBsaWNhdGVDb250cm9sID0gbmV3IEV2ZW50RW1pdHRlcjxIZWFkZXJDb250cm9sPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGUgaGVhZGVyIGNvbnRyb2wgYmFzZWQgb24gY29udHJvbCBpbmRleFxyXG4gICAgICogQHBhcmFtIGNvbnRyb2wgaGVhZGVyIGNvbnRyb2wgaXRlbXNcclxuICAgICAqIEBwYXJhbSBjb250cm9sSW5kZXggaGVhZGVyIGNvbnRyb2wgaW5kZXhcclxuICAgICAqL1xyXG4gICAgZGVsZXRlSGVhZGVyRGlhbG9nKGNvbnRyb2w6IEhlYWRlckNvbnRyb2wsIGNvbnRyb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBc3dDb25maXJtRGlhbG9nLCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnMzUwcHgnLFxyXG4gICAgICAgICAgICBkYXRhOiB7IG5hbWU6IGNvbnRyb2wuY29udHJvbFR5cGUsIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzLm1lc3NhZ2VzLndhcmluZ01lc3NhZ2UgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyRGVsZXRlRXZlbnQuZW1pdChjb250cm9sSW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdEhlYWRlckRpYWxvZyhjb250cm9sOiBIZWFkZXJDb250cm9sLCBjb250cm9sSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3SGVhZGVyRGlhbG9nLCB7XHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGg6ICc1MCUnLFxyXG4gICAgICAgICAgICBkYXRhOiBjb250cm9sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJVcGRhdGVFdmVudC5lbWl0KHsgY29udHJvbDogcmVzdWx0LCBpbmRleDogY29udHJvbEluZGV4IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZHVwbGljYXRlSGVhZGVyQ29udHJvbChjb250cm9sOiBIZWFkZXJDb250cm9sKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kdXBsaWNhdGVDb250cm9sLmVtaXQoY29udHJvbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2wgYXMgY29udHJvbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29udHJvbC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2gxJ1wiPlxyXG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJ7e2NvbnRyb2wuc3R5bGV9fSB7e2NvbnRyb2wuY3VzdG9tQ2xhc3N9fVwiPnt7Y29udHJvbC5sYWJlbH19PC9oMT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaDInXCI+XHJcbiAgICAgICAgICAgIDxoMiBjbGFzcz1cInt7Y29udHJvbC5zdHlsZX19IHt7Y29udHJvbC5jdXN0b21DbGFzc319XCI+e3tjb250cm9sLmxhYmVsfX08L2gyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidoMydcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwie3tjb250cm9sLnN0eWxlfX0ge3tjb250cm9sLmN1c3RvbUNsYXNzfX1cIj57e2NvbnRyb2wubGFiZWx9fTwvaDM+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2g0J1wiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJ7e2NvbnRyb2wuc3R5bGV9fSB7e2NvbnRyb2wuY3VzdG9tQ2xhc3N9fVwiPnt7Y29udHJvbC5sYWJlbH19PC9oND5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaDUnXCI+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cInt7Y29udHJvbC5zdHlsZX19IHt7Y29udHJvbC5jdXN0b21DbGFzc319XCI+e3tjb250cm9sLmxhYmVsfX08L2g1PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidoNidcIj5cclxuICAgICAgICAgICAgPGg2IGNsYXNzPVwie3tjb250cm9sLnN0eWxlfX0ge3tjb250cm9sLmN1c3RvbUNsYXNzfX1cIj57e2NvbnRyb2wubGFiZWx9fTwvaDY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc1ByZXZpZXdUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkR1cGxpY2F0ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidiZWxvdydcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImR1cGxpY2F0ZUhlYWRlckNvbnRyb2woY29udHJvbClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYmVsb3cnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0SGVhZGVyRGlhbG9nKGNvbnRyb2wsIGNvbnRyb2xJbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYmVsb3cnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVIZWFkZXJEaWFsb2coY29udHJvbCwgY29udHJvbEluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPiAgICBcclxuPC9uZy1jb250YWluZXI+Il19