UNPKG

ontimize-web-ngx

Version:
74 lines 15.1 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Inject, Injector, ViewEncapsulation } from '@angular/core'; import { BooleanInputConverter } from '../../../../../decorators/input-converter'; import { Codes } from '../../../../../util/codes'; import { Util } from '../../../../../util/util'; import { OTableBase } from '../../../o-table-base.class'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/material/button"; import * as i3 from "@angular/material/icon"; import * as i4 from "../../../../../pipes/o-translate.pipe"; import * as i5 from "../../../o-table-base.class"; export const DEFAULT_INPUTS_O_TABLE_BUTTON = [ 'oattr: attr', 'enabled', 'icon', 'svgIcon: svg-icon', 'iconPosition: icon-position', 'olabel: label' ]; export const DEFAULT_OUTPUTS_O_TABLE_BUTTON = [ 'onClick' ]; export class OTableButtonComponent { constructor(injector, elRef, _table) { this.injector = injector; this.elRef = elRef; this._table = _table; this.onClick = new EventEmitter(); this.enabled = true; } ngOnInit() { if (!Util.isDefined(this.icon) && !Util.isDefined(this.svgIcon)) { this.icon = 'priority_high'; } this.iconPosition = Util.parseIconPosition(this.iconPosition); } innerOnClick(event) { event.stopPropagation(); if (!this.isReadOnly()) { this.onClick.emit(); } else if (this._table.showNotificationOfReadOnly) { this.table.getSnackService().open('MESSAGES.OPERATION_NOT_ALLOWED_READONLY'); } } isReadOnly() { return this._table.isComponentReadOnly('o-table-button', this.oattr); } isIconPositionLeft() { return this.iconPosition === Codes.ICON_POSITION_LEFT; } get table() { return this._table; } } OTableButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableButtonComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: forwardRef(() => OTableBase) }], target: i0.ɵɵFactoryTarget.Component }); OTableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableButtonComponent, selector: "o-table-button", inputs: { oattr: ["attr", "oattr"], enabled: "enabled", icon: "icon", svgIcon: ["svg-icon", "svgIcon"], iconPosition: ["icon-position", "iconPosition"], olabel: ["label", "olabel"] }, outputs: { onClick: "onClick" }, host: { properties: { "class.o-table-button": "true", "class.text": "table.showButtonsText", "class.no-text": "!table.showButtonsText" } }, ngImport: i0, template: "<ng-container *ngIf=\"table.showButtonsText\">\n <button type=\"button\" [disabled]=\"!enabled\" [class.disabled]=\"!enabled\" mat-stroked-button (click)=\"innerOnClick($event)\">\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n <span>{{ olabel | oTranslate }}</span>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n </button>\n</ng-container>\n\n<ng-container *ngIf=\"!table.showButtonsText\">\n <button type=\"button\" [disabled]=\"!enabled\" [class.disabled]=\"!enabled\" mat-icon-button (click)=\"innerOnClick($event)\">\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n </button>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i4.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableButtonComponent.prototype, "enabled", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableButtonComponent, decorators: [{ type: Component, args: [{ selector: 'o-table-button', inputs: DEFAULT_INPUTS_O_TABLE_BUTTON, outputs: DEFAULT_OUTPUTS_O_TABLE_BUTTON, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class.o-table-button]': 'true', '[class.text]': 'table.showButtonsText', '[class.no-text]': '!table.showButtonsText', }, template: "<ng-container *ngIf=\"table.showButtonsText\">\n <button type=\"button\" [disabled]=\"!enabled\" [class.disabled]=\"!enabled\" mat-stroked-button (click)=\"innerOnClick($event)\">\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n <span>{{ olabel | oTranslate }}</span>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n </button>\n</ng-container>\n\n<ng-container *ngIf=\"!table.showButtonsText\">\n <button type=\"button\" [disabled]=\"!enabled\" [class.disabled]=\"!enabled\" mat-icon-button (click)=\"innerOnClick($event)\">\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon !== undefined\" [svgIcon]=\"svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"!isIconPositionLeft() && svgIcon === undefined\">{{ icon }}</mat-icon>\n </button>\n</ng-container>\n" }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i5.OTableBase, decorators: [{ type: Inject, args: [forwardRef(() => OTableBase)] }] }]; }, propDecorators: { enabled: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtYnV0dG9uL28tdGFibGUtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWJ1dHRvbi9vLXRhYmxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRKLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBRXpELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQzNDLGFBQWE7SUFDYixTQUFTO0lBQ1QsTUFBTTtJQUNOLG1CQUFtQjtJQUNuQiw2QkFBNkI7SUFDN0IsZUFBZTtDQUNoQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUc7SUFDNUMsU0FBUztDQUNWLENBQUM7QUFlRixNQUFNLE9BQU8scUJBQXFCO0lBWWhDLFlBQ1ksUUFBa0IsRUFDckIsS0FBaUIsRUFDd0IsTUFBa0I7UUFGeEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNyQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ3dCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFiN0QsWUFBTyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBSTNELFlBQU8sR0FBWSxJQUFJLENBQUM7SUFVM0IsQ0FBQztJQUVFLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMvRCxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQUs7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsRUFBRTtZQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBRWhGO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7O21IQTdDVSxxQkFBcUIsb0VBZXRCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7dUdBZjNCLHFCQUFxQiwyWkNsQ2xDLGt2Q0FrQkE7QURxQkU7SUFBQyxxQkFBcUIsRUFBRTs7c0RBQ087NEZBTnBCLHFCQUFxQjtrQkFiakMsU0FBUzsrQkFDRSxnQkFBZ0IsVUFFbEIsNkJBQTZCLFdBQzVCLDhCQUE4QixpQkFDeEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSix3QkFBd0IsRUFBRSxNQUFNO3dCQUNoQyxjQUFjLEVBQUUsdUJBQXVCO3dCQUN2QyxpQkFBaUIsRUFBRSx3QkFBd0I7cUJBQzVDOzswQkFpQkUsTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDOzRDQVQvQixPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IE9UYWJsZUJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1idXR0b24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9CVVRUT04gPSBbXG4gICdvYXR0cjogYXR0cicsXG4gICdlbmFibGVkJyxcbiAgJ2ljb24nLFxuICAnc3ZnSWNvbjogc3ZnLWljb24nLFxuICAnaWNvblBvc2l0aW9uOiBpY29uLXBvc2l0aW9uJyxcbiAgJ29sYWJlbDogbGFiZWwnXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfQlVUVE9OID0gW1xuICAnb25DbGljaydcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0JVVFRPTixcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfQlVUVE9OLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby10YWJsZS1idXR0b25dJzogJ3RydWUnLFxuICAgICdbY2xhc3MudGV4dF0nOiAndGFibGUuc2hvd0J1dHRvbnNUZXh0JyxcbiAgICAnW2NsYXNzLm5vLXRleHRdJzogJyF0YWJsZS5zaG93QnV0dG9uc1RleHQnLFxuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9UYWJsZUJ1dHRvbiwgT25Jbml0IHtcblxuICBwdWJsaWMgb25DbGljazogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICBwdWJsaWMgb2F0dHI6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBlbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGljb246IHN0cmluZztcbiAgcHVibGljIHN2Z0ljb246IHN0cmluZztcbiAgcHVibGljIG9sYWJlbDogc3RyaW5nO1xuICBwdWJsaWMgaWNvblBvc2l0aW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUJhc2UpKSBwcm90ZWN0ZWQgX3RhYmxlOiBPVGFibGVCYXNlXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5pY29uKSAmJiAhVXRpbC5pc0RlZmluZWQodGhpcy5zdmdJY29uKSkge1xuICAgICAgdGhpcy5pY29uID0gJ3ByaW9yaXR5X2hpZ2gnO1xuICAgIH1cbiAgICB0aGlzLmljb25Qb3NpdGlvbiA9IFV0aWwucGFyc2VJY29uUG9zaXRpb24odGhpcy5pY29uUG9zaXRpb24pO1xuICB9XG5cbiAgcHVibGljIGlubmVyT25DbGljayhldmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc1JlYWRPbmx5KCkpIHtcbiAgICAgIHRoaXMub25DbGljay5lbWl0KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl90YWJsZS5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICB0aGlzLnRhYmxlLmdldFNuYWNrU2VydmljZSgpLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuXG4gICAgfVxuICB9XG5cbiAgaXNSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGUuaXNDb21wb25lbnRSZWFkT25seSgnby10YWJsZS1idXR0b24nLCB0aGlzLm9hdHRyKVxuICB9XG5cbiAgcHVibGljIGlzSWNvblBvc2l0aW9uTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pY29uUG9zaXRpb24gPT09IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgfVxuXG4gIGdldCB0YWJsZSgpOiBPVGFibGVCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLnNob3dCdXR0b25zVGV4dFwiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWVuYWJsZWRcIiBbY2xhc3MuZGlzYWJsZWRdPVwiIWVuYWJsZWRcIiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImlubmVyT25DbGljaygkZXZlbnQpXCI+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaXNJY29uUG9zaXRpb25MZWZ0KCkgJiYgc3ZnSWNvbiAhPT0gdW5kZWZpbmVkXCIgW3N2Z0ljb25dPVwic3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaXNJY29uUG9zaXRpb25MZWZ0KCkgJiYgc3ZnSWNvbiA9PT0gdW5kZWZpbmVkXCI+e3sgaWNvbiB9fTwvbWF0LWljb24+XG4gICAgPHNwYW4+e3sgb2xhYmVsIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNJY29uUG9zaXRpb25MZWZ0KCkgJiYgc3ZnSWNvbiAhPT0gdW5kZWZpbmVkXCIgW3N2Z0ljb25dPVwic3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzSWNvblBvc2l0aW9uTGVmdCgpICYmIHN2Z0ljb24gPT09IHVuZGVmaW5lZFwiPnt7IGljb24gfX08L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlLnNob3dCdXR0b25zVGV4dFwiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWVuYWJsZWRcIiBbY2xhc3MuZGlzYWJsZWRdPVwiIWVuYWJsZWRcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImlubmVyT25DbGljaygkZXZlbnQpXCI+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaXNJY29uUG9zaXRpb25MZWZ0KCkgJiYgc3ZnSWNvbiAhPT0gdW5kZWZpbmVkXCIgW3N2Z0ljb25dPVwic3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaXNJY29uUG9zaXRpb25MZWZ0KCkgJiYgc3ZnSWNvbiA9PT0gdW5kZWZpbmVkXCI+e3sgaWNvbiB9fTwvbWF0LWljb24+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzSWNvblBvc2l0aW9uTGVmdCgpICYmIHN2Z0ljb24gIT09IHVuZGVmaW5lZFwiIFtzdmdJY29uXT1cInN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpc0ljb25Qb3NpdGlvbkxlZnQoKSAmJiBzdmdJY29uID09PSB1bmRlZmluZWRcIj57eyBpY29uIH19PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==