ngx-ui-hero
Version:
Simple, fast and reliable utilities for Angular.
115 lines • 19.7 kB
JavaScript
import { BsDatepickerDirective, BsLocaleService } from 'ngx-bootstrap/datepicker';
import { Component, EventEmitter, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgModel } from '@angular/forms';
import { DomSanitizer } from '@angular/platform-browser';
import { ElementBase } from '../../base/element-base';
import { INPUT_FORMS_CONFIG } from '../../input-forms-config.constants';
import * as i0 from "@angular/core";
import * as i1 from "ngx-bootstrap/datepicker";
import * as i2 from "@angular/platform-browser";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
import * as i5 from "ngx-bootstrap/tooltip";
import * as i6 from "../input-validations/input-validations.component";
let identifier = 0;
export class InputDateComponent extends ElementBase {
constructor(validators, asyncValidators, config, localeService, domSanitizer) {
super(validators, asyncValidators, config);
this.config = config;
this.localeService = localeService;
this.domSanitizer = domSanitizer;
this.placeholder = '';
this.format = 'MM/dd/yyyy';
this.showInputGroup = true;
this.placement = 'bottom';
this.theme = 'theme-dark-blue';
this.onChange = new EventEmitter();
this.locale = 'en-gb';
this.bsConfig = {
containerClass: this.theme,
customTodayClass: 'today',
};
this.identifier = `input-date-${identifier++}`;
if (config.date) {
Object.assign(this, config.date);
}
}
ngOnInit() {
this.localeService.use(this.locale);
this.datepicker.setConfig();
if (!this.inputGroupText) {
this.inputGroupText = this.domSanitizer.bypassSecurityTrustHtml("<i class='fa fa-calendar' aria-hidden='true'></i>");
}
setTimeout(() => {
this.handleInitialValue();
});
}
ngDoCheck() {
this.handleInitialValue();
}
onValueChange(value) {
this.onChange.emit(value);
}
handleInitialValue() {
if (this.value && (typeof this.value == "string" || this.value instanceof String)) {
let data = new Date(this.value);
data.setHours(0);
data.setMinutes(0);
data.setSeconds(0);
data.setMilliseconds(0);
this.writeValue(data);
}
}
}
InputDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: InputDateComponent, deps: [{ token: NG_VALIDATORS, optional: true }, { token: NG_ASYNC_VALIDATORS, optional: true }, { token: INPUT_FORMS_CONFIG }, { token: i1.BsLocaleService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
InputDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: InputDateComponent, selector: "input-date", inputs: { placeholder: "placeholder", minDate: "minDate", maxDate: "maxDate", format: "format", showInputGroup: "showInputGroup", inputGroupText: "inputGroupText", placement: "placement", theme: "theme" }, outputs: { onChange: "onChange" }, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: InputDateComponent,
multi: true
}], viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["dp"], descendants: true, static: true }, { propertyName: "model", first: true, predicate: NgModel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<label *ngIf=\"label\" [attr.for]=\"identifier\">\n {{label}}\n <span class=\"required-symbol\" *ngIf=\"isRequired\"> *</span>\n <i class=\"fa fa-question-circle ml-2\" tooltip=\"{{help}}\" container=\"body\" *ngIf=\"help\"></i>\n</label>\n\n<div class=\"input-group\">\n <div class=\"input-group-prepend\" *ngIf=\"showInputGroup\">\n <span class=\"input-group-text\" [innerHtml]=\"inputGroupText\"></span>\n </div>\n\n <input type=\"text\" class=\"form-control\" [id]=\"identifier\" #dp=\"bsDatepicker\"\n bsDatepicker\n autocomplete=\"off\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [placement]=\"placement\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" \n [bsConfig]=\"bsConfig\"\n [(ngModel)]=\"value\"\n (bsValueChange)=\"onValueChange($event)\"\n [ngClass]=\"{\n 'is-valid': showValidations && !disabled && touched && !(invalid | async),\n 'is-invalid': showValidations && !disabled && touched && (invalid | async)\n }\">\n</div>\n\n<small class=\"text-muted\" *ngIf=\"description\">{{description}}</small>\n\n<input-validations\n *ngIf=\"showValidations && !disabled && touched && (invalid | async)\"\n [messages]=\"failures | async\">\n</input-validations>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses"], outputs: ["bsValueChange", "onShown", "onHidden"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i1.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["containerClass", "tooltipAnimation", "tooltipFadeDuration", "isOpen", "tooltipHtml", "tooltip", "tooltipPlacement", "placement", "tooltipIsOpen", "tooltipEnable", "isDisabled", "tooltipAppendToBody", "container", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "delay", "tooltipTrigger", "triggers", "adaptivePosition"], outputs: ["tooltipChange", "tooltipStateChanged", "onShown", "onHidden"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i6.InputValidationsComponent, selector: "input-validations", inputs: ["messages"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: InputDateComponent, decorators: [{
type: Component,
args: [{ selector: 'input-date', providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: InputDateComponent,
multi: true
}], template: "<label *ngIf=\"label\" [attr.for]=\"identifier\">\n {{label}}\n <span class=\"required-symbol\" *ngIf=\"isRequired\"> *</span>\n <i class=\"fa fa-question-circle ml-2\" tooltip=\"{{help}}\" container=\"body\" *ngIf=\"help\"></i>\n</label>\n\n<div class=\"input-group\">\n <div class=\"input-group-prepend\" *ngIf=\"showInputGroup\">\n <span class=\"input-group-text\" [innerHtml]=\"inputGroupText\"></span>\n </div>\n\n <input type=\"text\" class=\"form-control\" [id]=\"identifier\" #dp=\"bsDatepicker\"\n bsDatepicker\n autocomplete=\"off\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [placement]=\"placement\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" \n [bsConfig]=\"bsConfig\"\n [(ngModel)]=\"value\"\n (bsValueChange)=\"onValueChange($event)\"\n [ngClass]=\"{\n 'is-valid': showValidations && !disabled && touched && !(invalid | async),\n 'is-invalid': showValidations && !disabled && touched && (invalid | async)\n }\">\n</div>\n\n<small class=\"text-muted\" *ngIf=\"description\">{{description}}</small>\n\n<input-validations\n *ngIf=\"showValidations && !disabled && touched && (invalid | async)\"\n [messages]=\"failures | async\">\n</input-validations>\n" }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NG_VALIDATORS]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NG_ASYNC_VALIDATORS]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [INPUT_FORMS_CONFIG]
}] }, { type: i1.BsLocaleService }, { type: i2.DomSanitizer }]; }, propDecorators: { placeholder: [{
type: Input
}], minDate: [{
type: Input
}], maxDate: [{
type: Input
}], format: [{
type: Input
}], showInputGroup: [{
type: Input
}], inputGroupText: [{
type: Input
}], placement: [{
type: Input
}], theme: [{
type: Input
}], onChange: [{
type: Output
}], datepicker: [{
type: ViewChild,
args: ['dp', { static: true }]
}], model: [{
type: ViewChild,
args: [NgModel, { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdWktaGVyby9zcmMvbGliL2lucHV0LWZvcm1zL2NvbXBvbmVudHMvaW5wdXQtZGF0ZS9pbnB1dC1kYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC11aS1oZXJvL3NyYy9saWIvaW5wdXQtZm9ybXMvY29tcG9uZW50cy9pbnB1dC1kYXRlL2lucHV0LWRhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RyxPQUFPLEVBQUUsU0FBUyxFQUFXLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7QUFHeEUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBV25CLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxXQUFpQjtJQXFCdkQsWUFDcUMsVUFBMEIsRUFDcEIsZUFBb0MsRUFDeEMsTUFBd0IsRUFDckQsYUFBOEIsRUFDOUIsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFKTixXQUFNLEdBQU4sTUFBTSxDQUFrQjtR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S0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQzBCLFVBQVU7c0JBQTFDLFNBQVM7dUJBQUMsSUFBSSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDSyxLQUFLO3NCQUF4QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCc0RhdGVwaWNrZXJDb25maWcsIEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSwgQnNMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19BU1lOQ19WQUxJREFUT1JTLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgRWxlbWVudEJhc2UgfSBmcm9tICcuLi8uLi9iYXNlL2VsZW1lbnQtYmFzZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckFycmF5LCBWYWxpZGF0b3JBcnJheSB9IGZyb20gJy4uLy4uL2Jhc2UvdmFsaWRhdGUnO1xuaW1wb3J0IHsgSW5wdXRGb3Jtc0NvbmZpZyB9IGZyb20gJy4uLy4uL2lucHV0LWZvcm1zLWNvbmZpZyc7XG5pbXBvcnQgeyBJTlBVVF9GT1JNU19DT05GSUcgfSBmcm9tICcuLi8uLi9pbnB1dC1mb3Jtcy1jb25maWcuY29uc3RhbnRzJztcbmltcG9ydCB7IElucHV0RGF0ZUNvbmZpZyB9IGZyb20gJy4vaW5wdXQtZGF0ZS1jb25maWcnO1xuXG5sZXQgaWRlbnRpZmllciA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lucHV0LWRhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogSW5wdXREYXRlQ29tcG9uZW50LFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIElucHV0RGF0ZUNvbXBvbmVudCBleHRlbmRzIEVsZW1lbnRCYXNlPERhdGU+IGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBJbnB1dERhdGVDb25maWcge1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBtaW5EYXRlPzogRGF0ZTtcbiAgQElucHV0KCkgbWF4RGF0ZT86IERhdGU7XG4gIEBJbnB1dCgpIGZvcm1hdD86IHN0cmluZyA9ICdNTS9kZC95eXl5JztcbiAgQElucHV0KCkgc2hvd0lucHV0R3JvdXA/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgaW5wdXRHcm91cFRleHQ/OiBzdHJpbmcgfCBTYWZlSHRtbDtcbiAgQElucHV0KCkgcGxhY2VtZW50Pzogc3RyaW5nID0gJ2JvdHRvbSc7XG4gIEBJbnB1dCgpIHRoZW1lPzogc3RyaW5nID0gJ3RoZW1lLWRhcmstYmx1ZSc7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbiAgQFZpZXdDaGlsZCgnZHAnLCB7c3RhdGljOiB0cnVlfSkgZGF0ZXBpY2tlcjogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKE5nTW9kZWwsIHtzdGF0aWM6IHRydWV9KSBtb2RlbDogTmdNb2RlbDtcblxuICBsb2NhbGU/OiBzdHJpbmcgPSAnZW4tZ2InO1xuICBic0NvbmZpZzogUGFydGlhbDxCc0RhdGVwaWNrZXJDb25maWc+ID0ge1xuICAgIGNvbnRhaW5lckNsYXNzOiB0aGlzLnRoZW1lLFxuICAgIGN1c3RvbVRvZGF5Q2xhc3M6ICd0b2RheScsXG4gIH07XG5cbiAgcHVibGljIGlkZW50aWZpZXIgPSBgaW5wdXQtZGF0ZS0ke2lkZW50aWZpZXIrK31gO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgdmFsaWRhdG9yczogVmFsaWRhdG9yQXJyYXksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChOR19BU1lOQ19WQUxJREFUT1JTKSBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yQXJyYXksXG4gICAgQEluamVjdCggSU5QVVRfRk9STVNfQ09ORklHICkgcHVibGljIGNvbmZpZzogSW5wdXRGb3Jtc0NvbmZpZyxcbiAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IEJzTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICApIHtcbiAgICBzdXBlcih2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIGNvbmZpZyk7XG5cbiAgICBpZiAoY29uZmlnLmRhdGUpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY29uZmlnLmRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9jYWxlU2VydmljZS51c2UodGhpcy5sb2NhbGUpO1xuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRDb25maWcoKTtcblxuICAgIGlmICghdGhpcy5pbnB1dEdyb3VwVGV4dCkge1xuICAgICAgdGhpcy5pbnB1dEdyb3VwVGV4dCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFwiPGkgY2xhc3M9J2ZhIGZhLWNhbGVuZGFyJyBhcmlhLWhpZGRlbj0ndHJ1ZSc+PC9pPlwiKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgdGhpcy5oYW5kbGVJbml0aWFsVmFsdWUoKTtcbiAgICB9KTtcbiAgfVxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVJbml0aWFsVmFsdWUoKTtcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZSk7ICBcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5pdGlhbFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZhbHVlICYmICh0eXBlb2YgdGhpcy52YWx1ZSA9PSBcInN0cmluZ1wiIHx8IHRoaXMudmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICBsZXQgZGF0YSA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgZGF0YS5zZXRIb3VycygwKTtcbiAgICAgIGRhdGEuc2V0TWludXRlcygwKTtcbiAgICAgIGRhdGEuc2V0U2Vjb25kcygwKTtcbiAgICAgIGRhdGEuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgdGhpcy53cml0ZVZhbHVlKGRhdGEpO1xuICAgIH1cbiAgfVxufVxuIiwiPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbYXR0ci5mb3JdPVwiaWRlbnRpZmllclwiPlxuICB7e2xhYmVsfX1cbiAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZC1zeW1ib2xcIiAqbmdJZj1cImlzUmVxdWlyZWRcIj4gKjwvc3Bhbj5cbiAgPGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgbWwtMlwiIHRvb2x0aXA9XCJ7e2hlbHB9fVwiIGNvbnRhaW5lcj1cImJvZHlcIiAqbmdJZj1cImhlbHBcIj48L2k+XG48L2xhYmVsPlxuXG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIiAqbmdJZj1cInNob3dJbnB1dEdyb3VwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgW2lubmVySHRtbF09XCJpbnB1dEdyb3VwVGV4dFwiPjwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiaWRlbnRpZmllclwiICNkcD1cImJzRGF0ZXBpY2tlclwiXG4gICAgYnNEYXRlcGlja2VyXG4gICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBcbiAgICBbYnNDb25maWddPVwiYnNDb25maWdcIlxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgIChic1ZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2lzLXZhbGlkJzogc2hvd1ZhbGlkYXRpb25zICYmICFkaXNhYmxlZCAmJiB0b3VjaGVkICYmICEoaW52YWxpZCB8IGFzeW5jKSxcbiAgICAgICdpcy1pbnZhbGlkJzogc2hvd1ZhbGlkYXRpb25zICYmICFkaXNhYmxlZCAmJiB0b3VjaGVkICYmIChpbnZhbGlkIHwgYXN5bmMpXG4gICAgfVwiPlxuPC9kaXY+XG5cbjxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIiAqbmdJZj1cImRlc2NyaXB0aW9uXCI+e3tkZXNjcmlwdGlvbn19PC9zbWFsbD5cblxuPGlucHV0LXZhbGlkYXRpb25zXG4gICpuZ0lmPVwic2hvd1ZhbGlkYXRpb25zICYmICFkaXNhYmxlZCAmJiB0b3VjaGVkICYmIChpbnZhbGlkIHwgYXN5bmMpXCJcbiAgW21lc3NhZ2VzXT1cImZhaWx1cmVzIHwgYXN5bmNcIj5cbjwvaW5wdXQtdmFsaWRhdGlvbnM+XG4iXX0=