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]
125 lines • 17.9 kB
JavaScript
import { Component, Input } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
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 "../input-core/input-core.component";
import * as i4 from "@angular/common";
import * as i5 from "@angular/forms";
const SbDoubleInputCore = mixinDisable(mixinFocus(mixinSize(mixinColor(mixinClassName(class {
constructor(_elementRef, _themeService) {
this._elementRef = _elementRef;
this._themeService = _themeService;
}
}, 'sb-input'), Color.PRIMARY), Size.MEDIUM)));
export class SbDoubleInput {
constructor(first, second) {
if (first) {
this.first = first;
}
if (second) {
this.second = second;
}
}
static equals(inputOne, inputTwo) {
return inputOne.first == inputTwo.first && inputOne.second == inputTwo.second;
}
}
export class SbDoubleInputComponent extends SbDoubleInputCore {
constructor(elementRef, themeService) {
super(elementRef, themeService);
this.firstPlaceholder = '';
this.secondPlaceholder = '';
this.delimiter = ':';
this._type = 'text';
this.spellcheck = false;
this.prefixIcon = '';
this.suffixIcon = '';
this.onChange = () => { };
this.onTouch = () => { };
this.innerFirstValue = undefined;
this.innerSecondValue = undefined;
}
set type(type) {
if (type != 'double') {
this._type = type;
}
}
get type() {
return this._type;
}
set firstValue(firstValue) {
let value = new SbDoubleInput(firstValue, this.innerSecondValue);
this.writeValue(value);
this.onChange(value);
}
get firstValue() {
if (this.innerFirstValue) {
return this.innerFirstValue;
}
else
return '';
}
set secondValue(secondValue) {
let value = new SbDoubleInput(this.innerFirstValue, secondValue);
this.writeValue(value);
this.onChange(value);
}
get secondValue() {
if (this.innerSecondValue) {
return this.innerSecondValue;
}
else
return '';
}
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(); }
}
SbDoubleInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbDoubleInputComponent, deps: [{ token: i0.ElementRef }, { token: i1.SbThemeService }], target: i0.ɵɵFactoryTarget.Component });
SbDoubleInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: SbDoubleInputComponent, selector: "sb-input[type=double]", inputs: { size: "size", color: "color", disabled: "disabled", firstPlaceholder: "firstPlaceholder", secondPlaceholder: "secondPlaceholder", delimiter: "delimiter", type: "type", spellcheck: "spellcheck", prefixIcon: "prefixIcon", suffixIcon: "suffixIcon" }, outputs: { focus: "focus", blur: "blur" }, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbDoubleInputComponent,
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]=\"type\"\n [(ngModel)]=\"firstValue\"\n [spellcheck]=\"spellcheck\"\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]=\"type\"\n [(ngModel)]=\"secondValue\"\n [spellcheck]=\"spellcheck\"\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.SbInputCoreComponent, selector: "sb-input-core", inputs: ["size", "color", "disabled", "placeholder", "type", "spellcheck"], outputs: ["focus", "blur"] }], 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: SbDoubleInputComponent, decorators: [{
type: Component,
args: [{ selector: 'sb-input[type=double]', inputs: [
'size',
'color',
'disabled'
], outputs: [
'focus',
'blur'
], providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbDoubleInputComponent,
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]=\"type\"\n [(ngModel)]=\"firstValue\"\n [spellcheck]=\"spellcheck\"\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]=\"type\"\n [(ngModel)]=\"secondValue\"\n [spellcheck]=\"spellcheck\"\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
}], delimiter: [{
type: Input
}], type: [{
type: Input
}], spellcheck: [{
type: Input
}], prefixIcon: [{
type: Input
}], suffixIcon: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NiLWVsZW1lbnQvc3JjL2xpYi9mb3Jtcy9pbnB1dC9kb3VibGUtaW5wdXQvZG91YmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NiLWVsZW1lbnQvc3JjL2xpYi9mb3Jtcy9pbnB1dC9kb3VibGUtaW5wdXQvZG91YmxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFrQixNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUU3SCxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FDcEMsVUFBVSxDQUNSLFNBQVMsQ0FDUCxVQUFVLENBQ1IsY0FBYyxDQUNaO0lBQ0UsWUFDUyxXQUF1QixFQUN2QixhQUE2QjtRQUQ3QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7SUFBRyxDQUFDO0NBQzNDLEVBQUUsVUFBVSxDQUNkLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FDakIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUNmLENBQ0YsQ0FDRixDQUFDO0FBRUYsTUFBTSxPQUFPLGFBQWE7SUFNeEIsWUFBWSxLQUFTLEVBQUUsTUFBVTtRQUMvQixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLE1B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QUksQ0FBQyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUM7O21IQS9FaEMsc0JBQXNCO3VHQUF0QixzQkFBc0IsNlZBTnRCLENBQUM7WUFDVixPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxzQkFBc0I7WUFDbkMsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLGlEQ3hESix3OEJBc0NBOzJGRG9CYSxzQkFBc0I7a0JBbEJsQyxTQUFTOytCQUNFLHVCQUF1QixVQUV6Qjt3QkFDTixNQUFNO3dCQUNOLE9BQU87d0JBQ1AsVUFBVTtxQkFDWCxXQUNRO3dCQUNQLE9BQU87d0JBQ1AsTUFBTTtxQkFDUCxhQUNVLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyx3QkFBd0I7NEJBQ25DLEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7OEhBS0ssZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBS0YsSUFBSTtzQkFEUCxLQUFLO2dCQVdDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsVUFBVTtzQkFEaEIsS0FBSztnQkFHQyxVQUFVO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29sb3IsIG1peGluQ2xhc3NOYW1lLCBtaXhpbkNvbG9yLCBtaXhpbkRpc2FibGUsIG1peGluRm9jdXMsIG1peGluU2l6ZSwgU2l6ZSwgU2JUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcblxuY29uc3QgU2JEb3VibGVJbnB1dENvcmUgPSBtaXhpbkRpc2FibGUoXG4gIG1peGluRm9jdXMoXG4gICAgbWl4aW5TaXplKFxuICAgICAgbWl4aW5Db2xvcihcbiAgICAgICAgbWl4aW5DbGFzc05hbWUoXG4gICAgICAgICAgY2xhc3Mge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICAgIHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHVibGljIF90aGVtZVNlcnZpY2U6IFNiVGhlbWVTZXJ2aWNlKSB7fVxuICAgICAgICAgIH0sICdzYi1pbnB1dCdcbiAgICAgICAgKSwgQ29sb3IuUFJJTUFSWVxuICAgICAgKSwgU2l6ZS5NRURJVU1cbiAgICApXG4gIClcbik7XG5cbmV4cG9ydCBjbGFzcyBTYkRvdWJsZUlucHV0PFQ+IHtcbiAgcHVibGljIGZpcnN0PzogVDtcbiAgcHVibGljIHNlY29uZD86IFQ7XG5cbiAgY29uc3RydWN0b3IoKTtcbiAgY29uc3RydWN0b3IoZmlyc3Q6IFQgfCB1bmRlZmluZWQsIHNlY29uZDogVCB8IHVuZGVmaW5lZCk7XG4gIGNvbnN0cnVjdG9yKGZpcnN0PzogVCwgc2Vjb25kPzogVCkge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgdGhpcy5maXJzdCA9IGZpcnN0O1xuICAgIH1cbiAgICBpZiAoc2Vjb25kKSB7XG4gICAgICB0aGlzLnNlY29uZCA9IHNlY29uZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGVxdWFsczxUPihpbnB1dE9uZTogU2JEb3VibGVJbnB1dDxUPiwgaW5wdXRUd286IFNiRG91YmxlSW5wdXQ8VD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5wdXRPbmUuZmlyc3QgPT0gaW5wdXRUd28uZmlyc3QgJiYgaW5wdXRPbmUuc2Vjb25kID09IGlucHV0VHdvLnNlY29uZDtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYi1pbnB1dFt0eXBlPWRvdWJsZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZG91YmxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgaW5wdXRzOiBbXG4gICAgJ3NpemUnLFxuICAgICdjb2xvcicsXG4gICAgJ2Rpc2FibGVkJ1xuICBdLFxuICBvdXRwdXRzOiBbXG4gICAgJ2ZvY3VzJyxcbiAgICAnYmx1cidcbiAgXSxcbiAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBTYkRvdWJsZUlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIFNiRG91YmxlSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBTYkRvdWJsZUlucHV0Q29yZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZmlyc3RQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNlY29uZFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVsaW1pdGVyOiBzdHJpbmcgPSAnOic7XG5cbiAgcHVibGljIF90eXBlOiBzdHJpbmcgPSAndGV4dCc7XG4gIEBJbnB1dCgpXG4gIHNldCB0eXBlKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlICE9ICdkb3VibGUnKSB7XG4gICAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzcGVsbGNoZWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHByZWZpeEljb246IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3VmZml4SWNvbjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJpdmF0ZSBpbm5lckZpcnN0VmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpbm5lclNlY29uZFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgc2V0IGZpcnN0VmFsdWUoZmlyc3RWYWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IHZhbHVlID0gbmV3IFNiRG91YmxlSW5wdXQoZmlyc3RWYWx1ZSwgdGhpcy5pbm5lclNlY29uZFZhbHVlKTtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG4gIGdldCBmaXJzdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaW5uZXJGaXJzdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbm5lckZpcnN0VmFsdWU7XG4gICAgfSBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIHNldCBzZWNvbmRWYWx1ZShzZWNvbmRWYWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IHZhbHVlID0gbmV3IFNiRG91YmxlSW5wdXQodGhpcy5pbm5lckZpcnN0VmFsdWUsIHNlY29uZFZhbHVlKTtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlY29uZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaW5uZXJTZWNvbmRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5uZXJTZWNvbmRWYWx1ZTtcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICB0aGVtZVNlcnZpY2U6IFNiVGhlbWVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHRoZW1lU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogU2JEb3VibGVJbnB1dDxzdHJpbmc+KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFsdWUuZmlyc3QpIHtcbiAgICAgICAgdGhpcy5pbm5lckZpcnN0VmFsdWUgPSB2YWx1ZS5maXJzdDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5zZWNvbmQpIHtcbiAgICAgICAgdGhpcy5pbm5lclNlY29uZFZhbHVlID0gdmFsdWUuc2Vjb25kO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuIH1cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoID0gZm4gfVxuICBwcm90ZWN0ZWQgb25CbHVyKCk6IHZvaWQgeyB0aGlzLm9uVG91Y2goKSB9XG5cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwiY2xhc3NOYW1lICsgJ19fYm9yZGVyJ1wiPjwvZGl2PlxuPHNiLWljb25cbiAgKm5nSWY9XCJwcmVmaXhJY29uXCJcbiAgW25nQ2xhc3NdPVwiY2xhc3NOYW1lICsgJ19fcHJlZml4J1wiXG4gIFtpY29uXT1cInByZWZpeEljb25cIlxuICBzaXplPVwic1wiPlxuPC9zYi1pY29uPlxuPHNiLWlucHV0LWNvcmVcbiAgW3NpemVdPVwic2l6ZVwiXG4gIFtjb2xvcl09XCJjb2xvclwiXG4gIFtwbGFjZWhvbGRlcl09XCJmaXJzdFBsYWNlaG9sZGVyXCJcbiAgW3R5cGVdPVwidHlwZVwiXG4gIFsobmdNb2RlbCldPVwiZmlyc3RWYWx1ZVwiXG4gIFtzcGVsbGNoZWNrXT1cInNwZWxsY2hlY2tcIlxuICAoYmx1cik9XCJzZXRGb2N1c2VkU3RhdGUoZmFsc2UpXCJcbiAgKGZvY3VzKT1cInNldEZvY3VzZWRTdGF0ZSh0cnVlKVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuPC9zYi1pbnB1dC1jb3JlPlxuPGRpdiBbbmdDbGFzc109XCJjbGFzc05hbWUgKyAnX19kZWxpbWl0ZXInXCI+XG4gIHt7IGRlbGltaXRlciB9fVxuPC9kaXY+XG48c2ItaW5wdXQtY29yZVxuICBbc2l6ZV09XCJzaXplXCJcbiAgW2NvbG9yXT1cImNvbG9yXCJcbiAgW3BsYWNlaG9sZGVyXT1cInNlY29uZFBsYWNlaG9sZGVyXCJcbiAgW3R5cGVdPVwidHlwZVwiXG4gIFsobmdNb2RlbCldPVwic2Vjb25kVmFsdWVcIlxuICBbc3BlbGxjaGVja109XCJzcGVsbGNoZWNrXCJcbiAgKGJsdXIpPVwic2V0Rm9jdXNlZFN0YXRlKGZhbHNlKVwiXG4gIChmb2N1cyk9XCJzZXRGb2N1c2VkU3RhdGUodHJ1ZSlcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbjwvc2ItaW5wdXQtY29yZT5cbjxzYi1pY29uXG4gICpuZ0lmPVwic3VmZml4SWNvblwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZSArICdfX3N1ZmZpeCdcIlxuICBbaWNvbl09XCJzdWZmaXhJY29uXCJcbiAgc2l6ZT1cInNcIj5cbjwvc2ItaWNvbj5cbiJdfQ==