@asoftwareworld/form-builder-pro
Version:
ASW Form Builder Pro 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 b
95 lines • 25.8 kB
JavaScript
/**
* @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 { CSSFrameworkEnum } from '@asoftwareworld/form-builder-pro/api';
import { Constants, Icons } from '@asoftwareworld/form-builder-pro/common';
import { AswConfirmDialog } from '@asoftwareworld/form-builder-pro/form-control/confirm-dialog';
import { AswButtonDialog } from './button-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/button";
import * as i4 from "@angular/material/tooltip";
import * as i5 from "@asoftwareworld/form-builder-pro/core";
import * as i6 from "@asoftwareworld/form-builder-pro/common";
export class AswButton {
dialog;
constants = Constants;
icons = Icons;
/**
* Button control
*/
control = null;
CSSFramework = CSSFrameworkEnum.Material;
isPreviewTemplate = false;
propertyPersonalization = [];
buttonClickEvent = new EventEmitter();
buttonUpdateEvent = new EventEmitter();
buttonDeleteEvent = new EventEmitter();
duplicateControl = new EventEmitter();
constructor(dialog) {
this.dialog = dialog;
}
/**
* Delete button control based on control index
* @param control button control items
* @param controlIndex button control index
*/
deleteButtonDialog(control) {
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.buttonDeleteEvent.emit(control);
}
});
}
editButtonDialog(control) {
const dialogRef = this.dialog.open(AswButtonDialog, {
width: '50%',
disableClose: true,
data: { control, CSSFramework: this.CSSFramework, propertyPersonalization: this.propertyPersonalization }
});
dialogRef.afterClosed().subscribe((result) => {
if (result !== undefined) {
this.buttonUpdateEvent.emit(result);
}
});
}
buttonClick(type) {
this.buttonClickEvent.emit(type);
}
duplicateButtonControl(control) {
this.duplicateControl.emit(control);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AswButton, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: AswButton, selector: "asw-button", inputs: { control: "control", CSSFramework: "CSSFramework", isPreviewTemplate: "isPreviewTemplate", propertyPersonalization: "propertyPersonalization" }, outputs: { buttonClickEvent: "buttonClickEvent", buttonUpdateEvent: "buttonUpdateEvent", buttonDeleteEvent: "buttonDeleteEvent", duplicateControl: "duplicateControl" }, ngImport: i0, template: "<ng-container *ngIf=\"control as control\">\r\n <ng-container *ngIf=\"CSSFramework === 'material'; else bootstrap\">\r\n <ng-container [ngSwitch]=\"control.style\">\r\n <ng-container *ngSwitchCase=\"'mat-button'\">\r\n <button mat-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n >{{control.label | aswTranslate}}</button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mat-raised-button'\">\r\n <button mat-raised-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n >{{control.label | aswTranslate}}</button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mat-stroked-button'\">\r\n <button mat-stroked-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n >{{control.label | aswTranslate}}</button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mat-flat-button'\">\r\n <button mat-flat-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\">\r\n {{control.label | aswTranslate}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #bootstrap>\r\n <button [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n class=\"asw-button asw-button-{{control.color}}\">{{control.label | aswTranslate}}\r\n </button>\r\n </ng-template>\r\n <div class=\"asw-row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"asw-col-md-12\" align=\"right\">\r\n <button type=\"button\"\r\n mat-icon-button \r\n matTooltip=\"{{'FormControl.Duplicate' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateButtonControl(control)\">\r\n <div [innerHTML]=\"icons.contentCopy | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Edit' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editButtonDialog(control)\">\r\n <div [innerHTML]=\"icons.edit | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Delete' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteButtonDialog(control)\">\r\n <div [innerHTML]=\"icons.delete2 | aswSafeHtml\"></div>\r\n </button>\r\n </div>\r\n </div>\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.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i5.AswTranslatePipe, name: "aswTranslate" }, { kind: "pipe", type: i6.AswSafeHtmlPipe, name: "aswSafeHtml" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AswButton, decorators: [{
type: Component,
args: [{ selector: 'asw-button', template: "<ng-container *ngIf=\"control as control\">\r\n <ng-container *ngIf=\"CSSFramework === 'material'; else bootstrap\">\r\n <ng-container [ngSwitch]=\"control.style\">\r\n <ng-container *ngSwitchCase=\"'mat-button'\">\r\n <button mat-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n >{{control.label | aswTranslate}}</button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mat-raised-button'\">\r\n <button mat-raised-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n >{{control.label | aswTranslate}}</button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mat-stroked-button'\">\r\n <button mat-stroked-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n >{{control.label | aswTranslate}}</button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mat-flat-button'\">\r\n <button mat-flat-button \r\n [color]=\"control.color\"\r\n [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\">\r\n {{control.label | aswTranslate}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #bootstrap>\r\n <button [id]=\"control.id\"\r\n [class]=\"control.customClass\"\r\n [type]=\"control.type\"\r\n [matTooltip]=\"control.tooltip | aswTranslate\"\r\n (click)=\"buttonClick(control.type)\"\r\n class=\"asw-button asw-button-{{control.color}}\">{{control.label | aswTranslate}}\r\n </button>\r\n </ng-template>\r\n <div class=\"asw-row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"asw-col-md-12\" align=\"right\">\r\n <button type=\"button\"\r\n mat-icon-button \r\n matTooltip=\"{{'FormControl.Duplicate' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateButtonControl(control)\">\r\n <div [innerHTML]=\"icons.contentCopy | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Edit' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editButtonDialog(control)\">\r\n <div [innerHTML]=\"icons.edit | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Delete' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteButtonDialog(control)\">\r\n <div [innerHTML]=\"icons.delete2 | aswSafeHtml\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n</ng-container>" }]
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { control: [{
type: Input
}], CSSFramework: [{
type: Input
}], isPreviewTemplate: [{
type: Input
}], propertyPersonalization: [{
type: Input
}], buttonClickEvent: [{
type: Output
}], buttonUpdateEvent: [{
type: Output
}], buttonDeleteEvent: [{
type: Output
}], duplicateControl: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL2J1dHRvbi9idXR0b24udHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvYnV0dG9uL2J1dHRvbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUVoRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7O0FBTWxELE1BQU0sT0FBTyxTQUFTO0lBZ0JDO0lBZm5CLFNBQVMsR0FBUSxTQUFTLENBQUM7SUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkOztPQUVHO0lBQ00sT0FBTyxHQUF5QixJQUFJLENBQUM7SUFDckMsWUFBWSxHQUFxQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDM0QsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLHVCQUF1QixHQUFhLEVBQUUsQ0FBQztJQUV0QyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQzlDLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQ3RELGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQ3RELGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBRS9ELFlBQW1CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFBRyxDQUFDO0lBRXhDOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxPQUFzQjtRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqRCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7U0FDdEYsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFzQjtRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDaEQsS0FBSyxFQUFFLEtBQUs7WUFDWixZQUFZLEVBQUUsSUFBSTtZQUNsQixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1NBQzVHLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsT0FBc0I7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO3VHQXREUSxTQUFTOzJGQUFULFNBQVMscVhDcEJ0QixrbklBZ0ZlOzsyRkQ1REYsU0FBUztrQkFKckIsU0FBUzsrQkFDSSxZQUFZOzhFQVNiLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFTVyAoQSBTb2Z0d2FyZSBXb3JsZCkgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ1NTRnJhbWV3b3JrRW51bSB9IGZyb20gJ0Bhc29mdHdhcmV3b3JsZC9mb3JtLWJ1aWxkZXItcHJvL2FwaSc7XG5pbXBvcnQgeyBDb25zdGFudHMsIEljb25zIH0gZnJvbSAnQGFzb2Z0d2FyZXdvcmxkL2Zvcm0tYnVpbGRlci1wcm8vY29tbW9uJztcbmltcG9ydCB7IEFzd0NvbmZpcm1EaWFsb2cgfSBmcm9tICdAYXNvZnR3YXJld29ybGQvZm9ybS1idWlsZGVyLXByby9mb3JtLWNvbnRyb2wvY29uZmlybS1kaWFsb2cnO1xuaW1wb3J0IHsgQnV0dG9uQ29udHJvbCB9IGZyb20gJy4vYnV0dG9uLWNvbnRyb2wnO1xuaW1wb3J0IHsgQXN3QnV0dG9uRGlhbG9nIH0gZnJvbSAnLi9idXR0b24tZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhc3ctYnV0dG9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYnV0dG9uLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzd0J1dHRvbiB7XG4gICAgY29uc3RhbnRzOiBhbnkgPSBDb25zdGFudHM7XG4gICAgaWNvbnMgPSBJY29ucztcbiAgICAvKipcbiAgICAgKiBCdXR0b24gY29udHJvbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEJ1dHRvbkNvbnRyb2wgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSBDU1NGcmFtZXdvcms6IENTU0ZyYW1ld29ya0VudW0gPSBDU1NGcmFtZXdvcmtFbnVtLk1hdGVyaWFsO1xuICAgIEBJbnB1dCgpIGlzUHJldmlld1RlbXBsYXRlID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHJvcGVydHlQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cbiAgICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBidXR0b25VcGRhdGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ29udHJvbD4oKTtcbiAgICBAT3V0cHV0KCkgYnV0dG9uRGVsZXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNvbnRyb2w+KCk7XG4gICAgQE91dHB1dCgpIGR1cGxpY2F0ZUNvbnRyb2wgPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNvbnRyb2w+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHt9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgYnV0dG9uIGNvbnRyb2wgYmFzZWQgb24gY29udHJvbCBpbmRleFxuICAgICAqIEBwYXJhbSBjb250cm9sIGJ1dHRvbiBjb250cm9sIGl0ZW1zXG4gICAgICogQHBhcmFtIGNvbnRyb2xJbmRleCBidXR0b24gY29udHJvbCBpbmRleFxuICAgICAqL1xuICAgIGRlbGV0ZUJ1dHRvbkRpYWxvZyhjb250cm9sOiBCdXR0b25Db250cm9sKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3Q29uZmlybURpYWxvZywge1xuICAgICAgICAgICAgd2lkdGg6ICczNTBweCcsXG4gICAgICAgICAgICBkYXRhOiB7IG5hbWU6IGNvbnRyb2wuY29udHJvbFR5cGUsIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzLm1lc3NhZ2VzLndhcmluZ01lc3NhZ2UgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGVsZXRlRXZlbnQuZW1pdChjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWRpdEJ1dHRvbkRpYWxvZyhjb250cm9sOiBCdXR0b25Db250cm9sKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3QnV0dG9uRGlhbG9nLCB7XG4gICAgICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiB7IGNvbnRyb2wsIENTU0ZyYW1ld29yazogdGhpcy5DU1NGcmFtZXdvcmssIHByb3BlcnR5UGVyc29uYWxpemF0aW9uOiB0aGlzLnByb3BlcnR5UGVyc29uYWxpemF0aW9uIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvblVwZGF0ZUV2ZW50LmVtaXQocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYnV0dG9uQ2xpY2sodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tFdmVudC5lbWl0KHR5cGUpO1xuICAgIH1cblxuICAgIGR1cGxpY2F0ZUJ1dHRvbkNvbnRyb2woY29udHJvbDogQnV0dG9uQ29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZUNvbnRyb2wuZW1pdChjb250cm9sKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbCBhcyBjb250cm9sXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiQ1NTRnJhbWV3b3JrID09PSAnbWF0ZXJpYWwnOyBlbHNlIGJvb3RzdHJhcFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRyb2wuc3R5bGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hdC1idXR0b24nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJjb250cm9sLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbnRyb2wuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29udHJvbC5jdXN0b21DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImNvbnRyb2wudHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImNvbnRyb2wudG9vbHRpcCB8IGFzd1RyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGljayhjb250cm9sLnR5cGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7Y29udHJvbC5sYWJlbCB8IGFzd1RyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWF0LXJhaXNlZC1idXR0b24nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29udHJvbC5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb250cm9sLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbnRyb2wuY3VzdG9tQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb250cm9sLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb250cm9sLnRvb2x0aXAgfCBhc3dUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29udHJvbC50eXBlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57e2NvbnRyb2wubGFiZWwgfCBhc3dUcmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hdC1zdHJva2VkLWJ1dHRvbidcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29udHJvbC5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb250cm9sLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbnRyb2wuY3VzdG9tQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb250cm9sLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb250cm9sLnRvb2x0aXAgfCBhc3dUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29udHJvbC50eXBlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57e2NvbnRyb2wubGFiZWwgfCBhc3dUcmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hdC1mbGF0LWJ1dHRvbidcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29udHJvbC5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb250cm9sLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbnRyb2wuY3VzdG9tQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb250cm9sLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb250cm9sLnRvb2x0aXAgfCBhc3dUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29udHJvbC50eXBlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Y29udHJvbC5sYWJlbCB8IGFzd1RyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYm9vdHN0cmFwPlxyXG4gICAgICAgIDxidXR0b24gW2lkXT1cImNvbnRyb2wuaWRcIlxyXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29udHJvbC5jdXN0b21DbGFzc1wiXHJcbiAgICAgICAgICAgIFt0eXBlXT1cImNvbnRyb2wudHlwZVwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImNvbnRyb2wudG9vbHRpcCB8IGFzd1RyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGljayhjb250cm9sLnR5cGUpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhc3ctYnV0dG9uIGFzdy1idXR0b24te3tjb250cm9sLmNvbG9yfX1cIj57e2NvbnRyb2wubGFiZWwgfCBhc3dUcmFuc2xhdGV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJhc3ctcm93XCIgKm5nSWY9XCJpc1ByZXZpZXdUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhc3ctY29sLW1kLTEyXCIgYWxpZ249XCJyaWdodFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3snRm9ybUNvbnRyb2wuRHVwbGljYXRlJyB8IGFzd1RyYW5zbGF0ZX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYmVsb3cnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImR1cGxpY2F0ZUJ1dHRvbkNvbnRyb2woY29udHJvbClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJpY29ucy5jb250ZW50Q29weSB8IGFzd1NhZmVIdG1sXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7J0Zvcm1Db250cm9sLkVkaXQnIHwgYXN3VHJhbnNsYXRlfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidiZWxvdydcIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdEJ1dHRvbkRpYWxvZyhjb250cm9sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImljb25zLmVkaXQgfCBhc3dTYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydGb3JtQ29udHJvbC5EZWxldGUnIHwgYXN3VHJhbnNsYXRlfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidiZWxvdydcIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQnV0dG9uRGlhbG9nKGNvbnRyb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaWNvbnMuZGVsZXRlMiB8IGFzd1NhZmVIdG1sXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPiJdfQ==