ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
74 lines • 15.1 kB
JavaScript
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==