UNPKG

ng-devui

Version:

DevUI components based on Angular

133 lines 19.3 kB
import { __decorate, __metadata } from "tslib"; import { Component, EventEmitter, forwardRef, Input, Output, TemplateRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { DevConfigService, WithConfig } from 'ng-devui/utils'; import { isArray } from 'lodash-es'; import * as i0 from "@angular/core"; import * as i1 from "ng-devui/utils"; import * as i2 from "@angular/common"; import * as i3 from "@angular/forms"; import * as i4 from "./checkbox.component"; export class CheckBoxGroupComponent { static { this.ID_SEED = 0; } constructor(devConfigService) { this.devConfigService = devConfigService; this.direction = 'column'; this.isShowTitle = true; this.disabled = false; this.options = []; this.showAnimation = true; this.change = new EventEmitter(); this.values = []; this.options_display = []; this.onChange = (_) => null; this.onTouch = () => null; } ngOnChanges(changes) { if (changes.options) { this.values = this.values ?? []; this.checkType(); } } checkType() { this.options = this.options ?? []; this.options_display = []; const checkedArray = []; this.values.forEach((item) => { if (this.filterKey && item[this.filterKey]) { checkedArray[item[this.filterKey]] = true; } else { checkedArray[item] = true; } }); this.options.forEach((item) => { const option = { isChecked: false }; option.value = item; if (this.filterKey && item[this.filterKey]) { if (checkedArray[item[this.filterKey]] === true) { option.isChecked = true; } } else { if (checkedArray[item] === true) { option.isChecked = true; } } this.options_display.push(option); }); } writeValue(inputArray) { if (inputArray && isArray(inputArray)) { this.values = inputArray; this.checkType(); } } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouch = fn; } toggle($event, i) { this.onChange(this.getCheckedArray()); this.onTouch(); this.change.next(this.options_display[i]); } getCheckedArray() { const checkedArray = []; this.options_display.forEach((item) => { if (item.isChecked) { checkedArray.push(item.value); } }); return checkedArray; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CheckBoxGroupComponent, deps: [{ token: i1.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CheckBoxGroupComponent, selector: "d-checkbox-group", inputs: { name: "name", itemWidth: "itemWidth", color: "color", direction: "direction", isShowTitle: "isShowTitle", disabled: "disabled", options: "options", filterKey: "filterKey", labelTemplate: "labelTemplate", showAnimation: "showAnimation", beforeChange: "beforeChange" }, outputs: { change: "change" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckBoxGroupComponent), multi: true, }, ], usesOnChanges: true, ngImport: i0, template: "<div class=\"devui-checkbox-group\">\n <ul [class.devui-checkbox-list-inline]=\"direction === 'row'\">\n <li\n *ngFor=\"let item of options_display; let i = index\"\n [class.devui-checkbox-column-margin]=\"direction === 'column'\"\n [ngStyle]=\"{ 'width.px': itemWidth }\"\n [ngClass]=\"{ 'devui-checkbox-wrap': itemWidth !== undefined }\"\n >\n <span>\n <d-checkbox\n [name]=\"name\"\n [label]=\"item['value'][filterKey] ? item['value'][filterKey] : item['value']\"\n [(ngModel)]=\"item['isChecked']\"\n [isShowTitle]=\"isShowTitle\"\n [color]=\"color\"\n [disabled]=\"this.disabled ? true : item['value']['disabled']\"\n [labelTemplate]=\"labelTemplate\"\n [showAnimation]=\"showAnimation\"\n (ngModelChange)=\"toggle($event, i)\"\n [beforeChange]=\"beforeChange\"\n >\n </d-checkbox>\n </span>\n </li>\n </ul>\n</div>\n", styles: [":host{display:block}.devui-checkbox-list-inline{min-height:28px;line-height:28px;display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;margin:-8px 0 0}.devui-checkbox-list-inline>*{margin-top:8px}.devui-checkbox-list-inline ::ng-deep li{display:inline-block}.devui-checkbox-list-inline ::ng-deep li:not(:last-child){margin-right:20px}.devui-checkbox-wrap ::ng-deep .devui-checkbox label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.devui-checkbox-column-margin{height:28px;line-height:28px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.CheckBoxComponent, selector: "d-checkbox", inputs: ["name", "label", "cssClass", "color", "disabled", "isShowTitle", "title", "labelTemplate", "halfchecked", "showAnimation", "showGlowStyle", "beforeChange"], outputs: ["change"] }] }); } } __decorate([ WithConfig(), __metadata("design:type", Object) ], CheckBoxGroupComponent.prototype, "showAnimation", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CheckBoxGroupComponent, decorators: [{ type: Component, args: [{ selector: 'd-checkbox-group', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckBoxGroupComponent), multi: true, }, ], preserveWhitespaces: false, template: "<div class=\"devui-checkbox-group\">\n <ul [class.devui-checkbox-list-inline]=\"direction === 'row'\">\n <li\n *ngFor=\"let item of options_display; let i = index\"\n [class.devui-checkbox-column-margin]=\"direction === 'column'\"\n [ngStyle]=\"{ 'width.px': itemWidth }\"\n [ngClass]=\"{ 'devui-checkbox-wrap': itemWidth !== undefined }\"\n >\n <span>\n <d-checkbox\n [name]=\"name\"\n [label]=\"item['value'][filterKey] ? item['value'][filterKey] : item['value']\"\n [(ngModel)]=\"item['isChecked']\"\n [isShowTitle]=\"isShowTitle\"\n [color]=\"color\"\n [disabled]=\"this.disabled ? true : item['value']['disabled']\"\n [labelTemplate]=\"labelTemplate\"\n [showAnimation]=\"showAnimation\"\n (ngModelChange)=\"toggle($event, i)\"\n [beforeChange]=\"beforeChange\"\n >\n </d-checkbox>\n </span>\n </li>\n </ul>\n</div>\n", styles: [":host{display:block}.devui-checkbox-list-inline{min-height:28px;line-height:28px;display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;margin:-8px 0 0}.devui-checkbox-list-inline>*{margin-top:8px}.devui-checkbox-list-inline ::ng-deep li{display:inline-block}.devui-checkbox-list-inline ::ng-deep li:not(:last-child){margin-right:20px}.devui-checkbox-wrap ::ng-deep .devui-checkbox label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.devui-checkbox-column-margin{height:28px;line-height:28px}\n"] }] }], ctorParameters: () => [{ type: i1.DevConfigService }], propDecorators: { name: [{ type: Input }], itemWidth: [{ type: Input }], color: [{ type: Input }], direction: [{ type: Input }], isShowTitle: [{ type: Input }], disabled: [{ type: Input }], options: [{ type: Input }], filterKey: [{ type: Input }], labelTemplate: [{ type: Input }], showAnimation: [{ type: Input }], beforeChange: [{ type: Input }], change: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvY2hlY2tib3gvY2hlY2tib3gtZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvY2hlY2tib3gvY2hlY2tib3gtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFnQnBDLE1BQU0sT0FBTyxzQkFBc0I7YUFDMUIsWUFBTyxHQUFHLENBQUMsQUFBSixDQUFLO0lBa0JuQixZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWQ3QyxjQUFTLEdBQXFCLFFBQVEsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFHQyxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVsQyxXQUFNLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFDdEUsV0FBTSxHQUFVLEVBQUUsQ0FBQztRQUNuQixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNiLGFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFFNEIsQ0FBQztJQUUxRCxXQUFXLENBQUMsT0FB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O1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7K0dBcEZVLHNCQUFzQjttR0FBdEIsc0JBQXNCLGdXQVR0QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwrQ0NoQkgsZzlCQTBCQTs7QURJeUI7SUFBYixVQUFVLEVBQUU7OzZEQUFzQjs0RkFYakMsc0JBQXNCO2tCQWJsQyxTQUFTOytCQUNFLGtCQUFrQixhQUdqQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsdUJBQ29CLEtBQUs7cUZBSWpCLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNpQixhQUFhO3NCQUFuQyxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEZXZDb25maWdTZXJ2aWNlLCBXaXRoQ29uZmlnIH0gZnJvbSAnbmctZGV2dWkvdXRpbHMnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLWNoZWNrYm94LWdyb3VwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3gtZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NoZWNrYm94LWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja0JveEdyb3VwQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGVja0JveEdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgc3RhdGljIElEX1NFRUQgPSAwO1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBpdGVtV2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBjb2xvcjtcclxuICBASW5wdXQoKSBkaXJlY3Rpb246ICdyb3cnIHwgJ2NvbHVtbicgPSAnY29sdW1uJztcclxuICBASW5wdXQoKSBpc1Nob3dUaXRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBvcHRpb25zID0gW107XHJcbiAgQElucHV0KCkgZmlsdGVyS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIHNob3dBbmltYXRpb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGJlZm9yZUNoYW5nZTogKHZhbHVlKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHZhbHVlczogYW55W10gPSBbXTtcclxuICBvcHRpb25zX2Rpc3BsYXkgPSBbXTtcclxuICBwcml2YXRlIG9uQ2hhbmdlID0gKF86IGFueSkgPT4gbnVsbDtcclxuICBwcml2YXRlIG9uVG91Y2ggPSAoKSA9PiBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRldkNvbmZpZ1NlcnZpY2U6IERldkNvbmZpZ1NlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcclxuICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcyA/PyBbXTtcclxuICAgICAgdGhpcy5jaGVja1R5cGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrVHlwZSgpIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucyA/PyBbXTtcclxuICAgIHRoaXMub3B0aW9uc19kaXNwbGF5ID0gW107XHJcbiAgICBjb25zdCBjaGVja2VkQXJyYXkgPSBbXTtcclxuICAgIHRoaXMudmFsdWVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyS2V5ICYmIGl0ZW1bdGhpcy5maWx0ZXJLZXldKSB7XHJcbiAgICAgICAgY2hlY2tlZEFycmF5W2l0ZW1bdGhpcy5maWx0ZXJLZXldXSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2hlY2tlZEFycmF5W2l0ZW1dID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBvcHRpb246IGFueSA9IHsgaXNDaGVja2VkOiBmYWxzZSB9O1xyXG4gICAgICBvcHRpb24udmFsdWUgPSBpdGVtO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJLZXkgJiYgaXRlbVt0aGlzLmZpbHRlcktleV0pIHtcclxuICAgICAgICBpZiAoY2hlY2tlZEFycmF5W2l0ZW1bdGhpcy5maWx0ZXJLZXldXSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgb3B0aW9uLmlzQ2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChjaGVja2VkQXJyYXlbaXRlbV0gPT09IHRydWUpIHtcclxuICAgICAgICAgIG9wdGlvbi5pc0NoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9wdGlvbnNfZGlzcGxheS5wdXNoKG9wdGlvbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoaW5wdXRBcnJheTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoaW5wdXRBcnJheSAmJiBpc0FycmF5KGlucHV0QXJyYXkpKSB7XHJcbiAgICAgIHRoaXMudmFsdWVzID0gaW5wdXRBcnJheTtcclxuICAgICAgdGhpcy5jaGVja1R5cGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICB0b2dnbGUoJGV2ZW50LCBpKSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0Q2hlY2tlZEFycmF5KCkpO1xyXG4gICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICB0aGlzLmNoYW5nZS5uZXh0KHRoaXMub3B0aW9uc19kaXNwbGF5W2ldKTtcclxuICB9XHJcblxyXG4gIGdldENoZWNrZWRBcnJheSgpIHtcclxuICAgIGNvbnN0IGNoZWNrZWRBcnJheSA9IFtdO1xyXG4gICAgdGhpcy5vcHRpb25zX2Rpc3BsYXkuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5pc0NoZWNrZWQpIHtcclxuICAgICAgICBjaGVja2VkQXJyYXkucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2hlY2tlZEFycmF5O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGV2dWktY2hlY2tib3gtZ3JvdXBcIj5cbiAgPHVsIFtjbGFzcy5kZXZ1aS1jaGVja2JveC1saXN0LWlubGluZV09XCJkaXJlY3Rpb24gPT09ICdyb3cnXCI+XG4gICAgPGxpXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zX2Rpc3BsYXk7IGxldCBpID0gaW5kZXhcIlxuICAgICAgW2NsYXNzLmRldnVpLWNoZWNrYm94LWNvbHVtbi1tYXJnaW5dPVwiZGlyZWN0aW9uID09PSAnY29sdW1uJ1wiXG4gICAgICBbbmdTdHlsZV09XCJ7ICd3aWR0aC5weCc6IGl0ZW1XaWR0aCB9XCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2RldnVpLWNoZWNrYm94LXdyYXAnOiBpdGVtV2lkdGggIT09IHVuZGVmaW5lZCB9XCJcbiAgICA+XG4gICAgICA8c3Bhbj5cbiAgICAgICAgPGQtY2hlY2tib3hcbiAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICBbbGFiZWxdPVwiaXRlbVsndmFsdWUnXVtmaWx0ZXJLZXldID8gaXRlbVsndmFsdWUnXVtmaWx0ZXJLZXldIDogaXRlbVsndmFsdWUnXVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtWydpc0NoZWNrZWQnXVwiXG4gICAgICAgICAgW2lzU2hvd1RpdGxlXT1cImlzU2hvd1RpdGxlXCJcbiAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLmRpc2FibGVkID8gdHJ1ZSA6IGl0ZW1bJ3ZhbHVlJ11bJ2Rpc2FibGVkJ11cIlxuICAgICAgICAgIFtsYWJlbFRlbXBsYXRlXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgIFtzaG93QW5pbWF0aW9uXT1cInNob3dBbmltYXRpb25cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICBbYmVmb3JlQ2hhbmdlXT1cImJlZm9yZUNoYW5nZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9kLWNoZWNrYm94PlxuICAgICAgPC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==