sb-element
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.1. It is a component library constructed around the SCSS library [Sb-Theming](https://github.com/SeverinBuchser/SbTheming) and supports [Angular Schematics]
110 lines • 17.3 kB
JavaScript
import { Component, Input } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { SbDoubleInput } from "../../input";
import { Color, mixinClassName, mixinColor, mixinDisable, mixinFocus, mixinSize, Size } from '../../../core';
import * as i0 from "@angular/core";
import * as i1 from "../../../core";
import * as i2 from "../../../icon/icon/icon.component";
import * as i3 from "../number-input-core/number-input-core.component";
import * as i4 from "@angular/common";
import * as i5 from "@angular/forms";
const SbDoubleNumberInputCore = mixinDisable(mixinFocus(mixinSize(mixinColor(mixinClassName(class {
constructor(_elementRef, _themeService) {
this._elementRef = _elementRef;
this._themeService = _themeService;
}
}, 'sb-input'), Color.PRIMARY), Size.MEDIUM)));
export class SbDoubleNumberInputComponent extends SbDoubleNumberInputCore {
constructor(elementRef, themeService) {
super(elementRef, themeService);
this.rootClass = 'sb-input';
this.firstPlaceholder = '';
this.secondPlaceholder = '';
this.firstMin = Number.MIN_SAFE_INTEGER;
this.secondMin = Number.MIN_SAFE_INTEGER;
this.firstMax = Number.MAX_SAFE_INTEGER;
this.secondMax = Number.MAX_SAFE_INTEGER;
this.delimiter = ':';
this.type = 'text';
this.spellcheck = false;
this.prefixIcon = '';
this.suffixIcon = '';
this.onChange = () => { };
this.onTouch = () => { };
this.innerFirstValue = undefined;
this.innerSecondValue = undefined;
}
set firstValue(firstValue) {
let value = new SbDoubleInput(firstValue, this.innerSecondValue);
this.writeValue(value);
this.onChange(value);
}
get firstValue() {
return this.innerFirstValue;
}
set secondValue(secondValue) {
let value = new SbDoubleInput(this.innerFirstValue, secondValue);
this.writeValue(value);
this.onChange(value);
}
get secondValue() {
return this.innerSecondValue;
}
writeValue(value) {
if (value && !this.disabled) {
if (value.first) {
this.innerFirstValue = value.first;
}
if (value.second) {
this.innerSecondValue = value.second;
}
}
}
registerOnChange(fn) { this.onChange = fn; }
registerOnTouched(fn) { this.onTouch = fn; }
onBlur() { this.onTouch(); }
}
SbDoubleNumberInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbDoubleNumberInputComponent, deps: [{ token: i0.ElementRef }, { token: i1.SbThemeService }], target: i0.ɵɵFactoryTarget.Component });
SbDoubleNumberInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: SbDoubleNumberInputComponent, selector: "sb-input[type=double-number]", inputs: { size: "size", color: "color", disabled: "disabled", firstPlaceholder: "firstPlaceholder", secondPlaceholder: "secondPlaceholder", firstMin: "firstMin", secondMin: "secondMin", firstMax: "firstMax", secondMax: "secondMax", delimiter: "delimiter", type: "type", spellcheck: "spellcheck", prefixIcon: "prefixIcon", suffixIcon: "suffixIcon" }, outputs: { focus: "focus", blur: "blur" }, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbDoubleNumberInputComponent,
multi: true
}], usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"className + '__border'\"></div>\n<sb-icon\n *ngIf=\"prefixIcon\"\n [ngClass]=\"className + '__prefix'\"\n [icon]=\"prefixIcon\"\n size=\"s\">\n</sb-icon>\n<sb-input-core\n [size]=\"size\"\n [color]=\"color\"\n [placeholder]=\"firstPlaceholder\"\n type=\"number\"\n [min]=\"firstMin\"\n [max]=\"firstMax\"\n [(ngModel)]=\"firstValue\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n</sb-input-core>\n<div [ngClass]=\"className + '__delimiter'\">\n {{ delimiter }}\n</div>\n<sb-input-core\n [size]=\"size\"\n [color]=\"color\"\n [placeholder]=\"secondPlaceholder\"\n type=\"number\"\n [min]=\"secondMin\"\n [max]=\"secondMax\"\n [(ngModel)]=\"secondValue\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n</sb-input-core>\n<sb-icon\n *ngIf=\"suffixIcon\"\n [ngClass]=\"className + '__suffix'\"\n [icon]=\"suffixIcon\"\n size=\"s\">\n</sb-icon>\n", components: [{ type: i2.SbIconComponent, selector: "sb-icon", inputs: ["size", "color", "icon", "isOutline"] }, { type: i3.SbNumberInputCoreComponent, selector: "sb-input-core[type=number]", inputs: ["size", "color", "disabled", "placeholder", "min", "max", "prefixIcon", "suffixIcon"], outputs: ["focus", "blur", "overflow", "underflow"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbDoubleNumberInputComponent, decorators: [{
type: Component,
args: [{ selector: 'sb-input[type=double-number]', inputs: [
'size',
'color',
'disabled'
], outputs: [
'focus',
'blur'
], providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbDoubleNumberInputComponent,
multi: true
}], template: "<div [ngClass]=\"className + '__border'\"></div>\n<sb-icon\n *ngIf=\"prefixIcon\"\n [ngClass]=\"className + '__prefix'\"\n [icon]=\"prefixIcon\"\n size=\"s\">\n</sb-icon>\n<sb-input-core\n [size]=\"size\"\n [color]=\"color\"\n [placeholder]=\"firstPlaceholder\"\n type=\"number\"\n [min]=\"firstMin\"\n [max]=\"firstMax\"\n [(ngModel)]=\"firstValue\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n</sb-input-core>\n<div [ngClass]=\"className + '__delimiter'\">\n {{ delimiter }}\n</div>\n<sb-input-core\n [size]=\"size\"\n [color]=\"color\"\n [placeholder]=\"secondPlaceholder\"\n type=\"number\"\n [min]=\"secondMin\"\n [max]=\"secondMax\"\n [(ngModel)]=\"secondValue\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n</sb-input-core>\n<sb-icon\n *ngIf=\"suffixIcon\"\n [ngClass]=\"className + '__suffix'\"\n [icon]=\"suffixIcon\"\n size=\"s\">\n</sb-icon>\n" }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SbThemeService }]; }, propDecorators: { firstPlaceholder: [{
type: Input
}], secondPlaceholder: [{
type: Input
}], firstMin: [{
type: Input
}], secondMin: [{
type: Input
}], firstMax: [{
type: Input
}], secondMax: [{
type: Input
}], delimiter: [{
type: Input
}], type: [{
type: Input
}], spellcheck: [{
type: Input
}], prefixIcon: [{
type: Input
}], suffixIcon: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlLW51bWJlci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zYi1lbGVtZW50L3NyYy9saWIvZm9ybXMvbnVtYmVyLWlucHV0L2RvdWJsZS1udW1iZXItaW5wdXQvZG91YmxlLW51bWJlci1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zYi1lbGVtZW50L3NyYy9saWIvZm9ybXMvbnVtYmVyLWlucHV0L2RvdWJsZS1udW1iZXItaW5wdXQvZG91YmxlLW51bWJlci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFrQixNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUU3SCxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FDMUMsVUFBVSxDQUNSLFNBQVMsQ0FDUCxVQUFVLENBQ1IsY0FBYyxDQUNaO0lBQ0UsWUFDUyxXQUF1QixFQUN2QixhQUE2QjtRQUQ3QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7SUFBRyxDQUFDO0NBQzNDLEVBQUUsVUFBVSxDQUNkLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FDakIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUNmLENBQ0YsQ0FDRixDQUFDO0FBb0JGLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSx1QkFBdUI7SUF3RHZFLFlBQ0UsVUFBc0IsRUFDdEIsWUFBNEI7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QUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDOzhIQU1LLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUdDLFNBQVM7c0JBRGYsS0FBSztnQkFHQyxRQUFRO3NCQURkLEtBQUs7Z0JBR0MsU0FBUztzQkFEZixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsVUFBVTtzQkFEaEIsS0FBSztnQkFJQyxVQUFVO3NCQURoQixLQUFLO2dCQUdDLFVBQVU7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTYkRvdWJsZUlucHV0IH0gZnJvbSBcIi4uLy4uL2lucHV0XCI7XG5pbXBvcnQgeyBDb2xvciwgbWl4aW5DbGFzc05hbWUsIG1peGluQ29sb3IsIG1peGluRGlzYWJsZSwgbWl4aW5Gb2N1cywgbWl4aW5TaXplLCBTaXplLCBTYlRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuXG5jb25zdCBTYkRvdWJsZU51bWJlcklucHV0Q29yZSA9IG1peGluRGlzYWJsZShcbiAgbWl4aW5Gb2N1cyhcbiAgICBtaXhpblNpemUoXG4gICAgICBtaXhpbkNvbG9yKFxuICAgICAgICBtaXhpbkNsYXNzTmFtZShcbiAgICAgICAgICBjbGFzcyB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgICAgcHVibGljIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwdWJsaWMgX3RoZW1lU2VydmljZTogU2JUaGVtZVNlcnZpY2UpIHt9XG4gICAgICAgICAgfSwgJ3NiLWlucHV0J1xuICAgICAgICApLCBDb2xvci5QUklNQVJZXG4gICAgICApLCBTaXplLk1FRElVTVxuICAgIClcbiAgKVxuKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItaW5wdXRbdHlwZT1kb3VibGUtbnVtYmVyXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3VibGUtbnVtYmVyLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgaW5wdXRzOiBbXG4gICAgJ3NpemUnLFxuICAgICdjb2xvcicsXG4gICAgJ2Rpc2FibGVkJ1xuICBdLFxuICBvdXRwdXRzOiBbXG4gICAgJ2ZvY3VzJyxcbiAgICAnYmx1cidcbiAgXSxcbiAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBTYkRvdWJsZU51bWJlcklucHV0Q29tcG9uZW50LFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIFNiRG91YmxlTnVtYmVySW5wdXRDb21wb25lbnQgZXh0ZW5kcyBTYkRvdWJsZU51bWJlcklucHV0Q29yZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHVibGljIHJvb3RDbGFzcyA9ICdzYi1pbnB1dCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpcnN0UGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWNvbmRQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpcnN0TWluOiBudW1iZXIgPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcbiAgQElucHV0KClcbiAgcHVibGljIHNlY29uZE1pbjogbnVtYmVyID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaXJzdE1heDogbnVtYmVyID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWNvbmRNYXg6IG51bWJlciA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWxpbWl0ZXI6IHN0cmluZyA9ICc6JztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzcGVsbGNoZWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHByZWZpeEljb246IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3VmZml4SWNvbjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJpdmF0ZSBpbm5lckZpcnN0VmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpbm5lclNlY29uZFZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgc2V0IGZpcnN0VmFsdWUoZmlyc3RWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgbGV0IHZhbHVlID0gbmV3IFNiRG91YmxlSW5wdXQoZmlyc3RWYWx1ZSwgdGhpcy5pbm5lclNlY29uZFZhbHVlKTtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG4gIGdldCBmaXJzdFZhbHVlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJGaXJzdFZhbHVlXG4gIH1cblxuICBzZXQgc2Vjb25kVmFsdWUoc2Vjb25kVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGxldCB2YWx1ZSA9IG5ldyBTYkRvdWJsZUlucHV0KHRoaXMuaW5uZXJGaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZSk7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuICBnZXQgc2Vjb25kVmFsdWUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lclNlY29uZFZhbHVlXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHRoZW1lU2VydmljZTogU2JUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgdGhlbWVTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBTYkRvdWJsZUlucHV0PG51bWJlcj4pOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YWx1ZS5maXJzdCkge1xuICAgICAgICB0aGlzLmlubmVyRmlyc3RWYWx1ZSA9IHZhbHVlLmZpcnN0O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLnNlY29uZCkge1xuICAgICAgICB0aGlzLmlubmVyU2Vjb25kVmFsdWUgPSB2YWx1ZS5zZWNvbmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm4gfVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uVG91Y2ggPSBmbiB9XG4gIHByb3RlY3RlZCBvbkJsdXIoKTogdm9pZCB7IHRoaXMub25Ub3VjaCgpIH1cblxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJjbGFzc05hbWUgKyAnX19ib3JkZXInXCI+PC9kaXY+XG48c2ItaWNvblxuICAqbmdJZj1cInByZWZpeEljb25cIlxuICBbbmdDbGFzc109XCJjbGFzc05hbWUgKyAnX19wcmVmaXgnXCJcbiAgW2ljb25dPVwicHJlZml4SWNvblwiXG4gIHNpemU9XCJzXCI+XG48L3NiLWljb24+XG48c2ItaW5wdXQtY29yZVxuICBbc2l6ZV09XCJzaXplXCJcbiAgW2NvbG9yXT1cImNvbG9yXCJcbiAgW3BsYWNlaG9sZGVyXT1cImZpcnN0UGxhY2Vob2xkZXJcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgW21pbl09XCJmaXJzdE1pblwiXG4gIFttYXhdPVwiZmlyc3RNYXhcIlxuICBbKG5nTW9kZWwpXT1cImZpcnN0VmFsdWVcIlxuICAoYmx1cik9XCJzZXRGb2N1c2VkU3RhdGUoZmFsc2UpXCJcbiAgKGZvY3VzKT1cInNldEZvY3VzZWRTdGF0ZSh0cnVlKVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuPC9zYi1pbnB1dC1jb3JlPlxuPGRpdiBbbmdDbGFzc109XCJjbGFzc05hbWUgKyAnX19kZWxpbWl0ZXInXCI+XG4gIHt7IGRlbGltaXRlciB9fVxuPC9kaXY+XG48c2ItaW5wdXQtY29yZVxuICBbc2l6ZV09XCJzaXplXCJcbiAgW2NvbG9yXT1cImNvbG9yXCJcbiAgW3BsYWNlaG9sZGVyXT1cInNlY29uZFBsYWNlaG9sZGVyXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIFttaW5dPVwic2Vjb25kTWluXCJcbiAgW21heF09XCJzZWNvbmRNYXhcIlxuICBbKG5nTW9kZWwpXT1cInNlY29uZFZhbHVlXCJcbiAgKGJsdXIpPVwic2V0Rm9jdXNlZFN0YXRlKGZhbHNlKVwiXG4gIChmb2N1cyk9XCJzZXRGb2N1c2VkU3RhdGUodHJ1ZSlcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbjwvc2ItaW5wdXQtY29yZT5cbjxzYi1pY29uXG4gICpuZ0lmPVwic3VmZml4SWNvblwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZSArICdfX3N1ZmZpeCdcIlxuICBbaWNvbl09XCJzdWZmaXhJY29uXCJcbiAgc2l6ZT1cInNcIj5cbjwvc2ItaWNvbj5cbiJdfQ==