UNPKG

ng-cw-v12

Version:

Angular UI component library

93 lines 18.8 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./local.service"; import * as i2 from "@angular/common"; export class TimelineComponent { constructor(ls) { this.ls = ls; this.ncMode = 'horizontal'; this.ncSelected = -1; this.ncSelectedChange = new EventEmitter(); this.ncClick = new EventEmitter(); this.dateArr = []; this.scaleArr = []; this.dateObjectArr = []; this.scaleObjectArr = []; } set ncDate(value) { this.dateArr = value; setTimeout(() => { //加延迟,防止其他传入参数未获取到 this.init(); }); } ; ngOnInit() { } init() { //时间值 this.dateObjectArr = this.setLeftValue(this.dateArr); //刻度值 this.scaleArr = [this.dateArr[0], this.dateArr[this.dateArr.length - 1]]; //['2022-03-01', '2024-05-11'] this.scaleArr = this.scaleArr.map(date => new Date(date)); let minYear = Math.min(...this.scaleArr.map(date => date.getFullYear())); //2022 let maxYear = Math.max(...this.scaleArr.map(date => date.getFullYear())); //2024 //插入year-01-01,'2023-01-01', '2024-01-01' for (let year = minYear + 1; year <= maxYear; year++) { let newYearDate = new Date(`${year}-01-01`); this.scaleArr.push(newYearDate); } //排序 this.scaleArr.sort((a, b) => a - b); //转化为字符串 this.scaleArr = this.scaleArr.map(date => this.ls.formatDate('yyyy-MM-dd', date)); //['2022-03-01','2023-01-01', '2024-01-01', '2024-05-11'] //获取left值 this.scaleObjectArr = this.setLeftValue(this.scaleArr); //截取年份 for (let item of this.scaleObjectArr) { item.date = item.date.substring(0, 4); } //删除用于计算的首尾值 this.scaleObjectArr.splice(0, 1); this.scaleObjectArr.splice(this.scaleObjectArr.length - 1, 1); } //获取定位left值 setLeftValue(arr) { let all = this.ls.getRangeDate(new Date(arr[0]), new Date(arr[arr.length - 1])).length; let leftArr = []; for (let i = 0; i < arr.length; i++) { let value = i == 0 ? 0 : this.ls.getRangeDate(new Date(arr[0]), new Date(arr[i])).length; leftArr.push({ date: arr[i], left: this.ls.retainPercentDecimal(value / all, 2) }); } return leftArr; } itemClick(date, index) { this.ncClick.emit({ date, index }); this.ncSelected = index; this.ncSelectedChange.emit(this.ncSelected); } } TimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: TimelineComponent, deps: [{ token: i1.LocalService }], target: i0.ɵɵFactoryTarget.Component }); TimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: TimelineComponent, selector: "nc-timeline", inputs: { ncDate: "ncDate", ncMode: "ncMode", ncSelected: "ncSelected" }, outputs: { ncSelectedChange: "ncSelectedChange", ncClick: "ncClick" }, ngImport: i0, template: "<div class=\"timeline-container-horizontal\" *ngIf=\"ncMode == 'horizontal'\">\r\n <div class=\"timeline\">\r\n <div class=\"timeline-item\" [class.timeline-item-selected]=\"ncSelected == i\"\r\n *ngFor=\"let item of dateObjectArr;let i = index;\" (click)=\"itemClick(dateArr[i], i)\"\r\n [ngStyle]=\"{'left': i == 0 ? '0' : 'calc(' + item.left + '%' + ' - 2px)'}\" [title]=\"dateArr[i]\">\r\n </div>\r\n <div class=\"scale\" *ngFor=\"let item of scaleObjectArr;let i = index;\"\r\n [ngStyle]=\"{'left': 'calc(' + item.left + '%' + ' - 2px)'}\">\r\n </div>\r\n <div class=\"scale-value\" *ngFor=\"let item of scaleObjectArr;let i = index;\"\r\n [ngStyle]=\"{'left': 'calc(' + item.left + '%' + ' - 16px)'}\">\r\n {{item.date}}\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"timeline-container-vertical\" *ngIf=\"ncMode == 'vertical'\">\r\n <div class=\"timeline\">\r\n <div class=\"timeline-item\" [class.timeline-item-selected]=\"ncSelected == i\"\r\n *ngFor=\"let item of dateObjectArr;let i = index;\" (click)=\"itemClick(dateArr[i], i)\"\r\n [ngStyle]=\"{'top': i == 0 ? '0' : 'calc(' + item.left + '%' + ' - 2px)'}\" [title]=\"dateArr[i]\">\r\n </div>\r\n <div class=\"scale\" *ngFor=\"let item of scaleObjectArr;let i = index;\"\r\n [ngStyle]=\"{'top': 'calc(' + item.left + '%' + ' - 2px)'}\">\r\n </div>\r\n <div class=\"scale-value\" *ngFor=\"let item of scaleObjectArr;let i = index;\"\r\n [ngStyle]=\"{'top': 'calc(' + item.left + '%' + ' - 12px)'}\">\r\n {{item.date}}\r\n </div>\r\n </div>\r\n</div>", styles: [".timeline-container-horizontal{width:100%;height:100%;padding:20px}.timeline-container-horizontal .timeline{width:100%;height:100%;border-bottom:2px solid #969696;display:flex;position:relative}.timeline-container-horizontal .timeline .timeline-item{position:absolute;bottom:0;width:2px;height:100%;background-color:#969696;cursor:pointer}.timeline-container-horizontal .timeline .timeline-item:hover{background-color:#ffbc02}.timeline-container-horizontal .timeline .timeline-item-selected{background-color:#ff3918}.timeline-container-horizontal .timeline .scale{position:absolute;bottom:-6px;width:2px;height:6px;background-color:#969696}.timeline-container-horizontal .timeline .scale-value{position:absolute;bottom:-24px;color:#8e8e8e}.timeline-container-vertical{width:100%;height:100%;padding:20px 20px 20px 40px}.timeline-container-vertical .timeline{width:100%;height:100%;border-left:2px solid #969696;display:flex;position:relative}.timeline-container-vertical .timeline .timeline-item{position:absolute;left:0;height:2px;width:100%;background-color:#969696;cursor:pointer}.timeline-container-vertical .timeline .timeline-item:hover{background-color:#ffbc02}.timeline-container-vertical .timeline .timeline-item-selected{background-color:#ff3918}.timeline-container-vertical .timeline .scale{position:absolute;left:-6px;height:2px;width:6px;background-color:#969696}.timeline-container-vertical .timeline .scale-value{position:absolute;left:-38px;color:#8e8e8e}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: TimelineComponent, decorators: [{ type: Component, args: [{ selector: 'nc-timeline', templateUrl: './timeline.component.html', styleUrls: ['./timeline.component.less'] }] }], ctorParameters: function () { return [{ type: i1.LocalService }]; }, propDecorators: { ncDate: [{ type: Input }], ncMode: [{ type: Input }], ncSelected: [{ type: Input }], ncSelectedChange: [{ type: Output }], ncClick: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy90aW1lbGluZS90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3RpbWVsaW5lL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRL0UsTUFBTSxPQUFPLGlCQUFpQjtJQWlCNUIsWUFBb0IsRUFBZ0I7UUFBaEIsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQVQzQixXQUFNLEdBQThCLFlBQVksQ0FBQztRQUNqRCxlQUFVLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdkIscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxZQUFPLEdBQWUsRUFBRSxDQUFDO1FBQ3pCLGFBQVEsR0FBZSxFQUFFLENBQUM7UUFDMUIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsbUJBQWMsR0FBZSxFQUFFLENBQUM7SUFFUSxDQUFDO0lBaEJ6QyxJQUFhLE1BQU0sQ0FBQyxLQUFZO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQUEsQ0FBQztJQVlGLFFBQVE7SUFFUixDQUFDO0lBRUQsSUFBSTtRQUNGLEtBQUs7UUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FB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QUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDekYsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNuRCxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDOzs4R0F0RVUsaUJBQWlCO2tHQUFqQixpQkFBaUIsb01DUjlCLDZyREE4Qk07MkZEdEJPLGlCQUFpQjtrQkFMN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDJCQUEyQjtvQkFDeEMsU0FBUyxFQUFFLENBQUMsMkJBQTJCLENBQUM7aUJBQ3pDO21HQUVjLE1BQU07c0JBQWxCLEtBQUs7Z0JBT0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2FsU2VydmljZSB9IGZyb20gJy4vbG9jYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25jLXRpbWVsaW5lJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGltZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RpbWVsaW5lLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVsaW5lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBzZXQgbmNEYXRlKHZhbHVlOiBhbnlbXSkgey8vWycyMDIyLTAzLTAxJywgJzIwMjItMDYtMTEnLCAnMjAyMy0wNC0xMCcsICcyMDIzLTEyLTIyJywgJzIwMjQtMDItMjcnLCAnMjAyNC0wNS0xMSddXHJcbiAgICB0aGlzLmRhdGVBcnIgPSB2YWx1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvL+WKoOW7tui/n++8jOmYsuatouWFtuS7luS8oOWFpeWPguaVsOacquiOt+WPluWIsFxyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH0pXHJcbiAgfTtcclxuICBASW5wdXQoKSBuY01vZGU6ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XHJcbiAgQElucHV0KCkgbmNTZWxlY3RlZDogbnVtYmVyID0gLTE7XHJcbiAgQE91dHB1dCgpIG5jU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG5jQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgZGF0ZUFycjogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHNjYWxlQXJyOiBBcnJheTxhbnk+ID0gW107XHJcbiAgZGF0ZU9iamVjdEFycjogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHNjYWxlT2JqZWN0QXJyOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbHM6IExvY2FsU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICAvL+aXtumXtOWAvFxyXG4gICAgdGhpcy5kYXRlT2JqZWN0QXJyID0gdGhpcy5zZXRMZWZ0VmFsdWUodGhpcy5kYXRlQXJyKTtcclxuXHJcbiAgICAvL+WIu+W6puWAvFxyXG4gICAgdGhpcy5zY2FsZUFyciA9IFt0aGlzLmRhdGVBcnJbMF0sIHRoaXMuZGF0ZUFyclt0aGlzLmRhdGVBcnIubGVuZ3RoIC0gMV1dOy8vWycyMDIyLTAzLTAxJywgJzIwMjQtMDUtMTEnXVxyXG4gICAgdGhpcy5zY2FsZUFyciA9IHRoaXMuc2NhbGVBcnIubWFwKGRhdGUgPT4gbmV3IERhdGUoZGF0ZSkpO1xyXG4gICAgbGV0IG1pblllYXIgPSBNYXRoLm1pbiguLi50aGlzLnNjYWxlQXJyLm1hcChkYXRlID0+IGRhdGUuZ2V0RnVsbFllYXIoKSkpOy8vMjAyMlxyXG4gICAgbGV0IG1heFllYXIgPSBNYXRoLm1heCguLi50aGlzLnNjYWxlQXJyLm1hcChkYXRlID0+IGRhdGUuZ2V0RnVsbFllYXIoKSkpOy8vMjAyNFxyXG4gICAgLy/mj5LlhaV5ZWFyLTAxLTAx77yMJzIwMjMtMDEtMDEnLCAnMjAyNC0wMS0wMSdcclxuICAgIGZvciAobGV0IHllYXIgPSBtaW5ZZWFyICsgMTsgeWVhciA8PSBtYXhZZWFyOyB5ZWFyKyspIHtcclxuICAgICAgbGV0IG5ld1llYXJEYXRlID0gbmV3IERhdGUoYCR7eWVhcn0tMDEtMDFgKTtcclxuICAgICAgdGhpcy5zY2FsZUFyci5wdXNoKG5ld1llYXJEYXRlKTtcclxuICAgIH1cclxuICAgIC8v5o6S5bqPXHJcbiAgICB0aGlzLnNjYWxlQXJyLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcclxuICAgIC8v6L2s5YyW5Li65a2X56ym5LiyXHJcbiAgICB0aGlzLnNjYWxlQXJyID0gdGhpcy5zY2FsZUFyci5tYXAoZGF0ZSA9PiB0aGlzLmxzLmZvcm1hdERhdGUoJ3l5eXktTU0tZGQnLCBkYXRlKSk7Ly9bJzIwMjItMDMtMDEnLCcyMDIzLTAxLTAxJywgJzIwMjQtMDEtMDEnLCAnMjAyNC0wNS0xMSddXHJcbiAgICAvL+iOt+WPlmxlZnTlgLxcclxuICAgIHRoaXMuc2NhbGVPYmplY3RBcnIgPSB0aGlzLnNldExlZnRWYWx1ZSh0aGlzLnNjYWxlQXJyKTtcclxuICAgIC8v5oiq5Y+W5bm05Lu9XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuc2NhbGVPYmplY3RBcnIpIHtcclxuICAgICAgaXRlbS5kYXRlID0gaXRlbS5kYXRlLnN1YnN0cmluZygwLCA0KTtcclxuICAgIH1cclxuICAgIC8v5Yig6Zmk55So5LqO6K6h566X55qE6aaW5bC+5YC8XHJcbiAgICB0aGlzLnNjYWxlT2JqZWN0QXJyLnNwbGljZSgwLCAxKTtcclxuICAgIHRoaXMuc2NhbGVPYmplY3RBcnIuc3BsaWNlKHRoaXMuc2NhbGVPYmplY3RBcnIubGVuZ3RoIC0gMSwgMSk7XHJcbiAgfVxyXG5cclxuICAvL+iOt+WPluWumuS9jWxlZnTlgLxcclxuICBzZXRMZWZ0VmFsdWUoYXJyOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgYWxsID0gdGhpcy5scy5nZXRSYW5nZURhdGUobmV3IERhdGUoYXJyWzBdKSwgbmV3IERhdGUoYXJyW2Fyci5sZW5ndGggLSAxXSkpLmxlbmd0aDtcclxuICAgIGxldCBsZWZ0QXJyOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsdWUgPSBpID09IDAgPyAwIDogdGhpcy5scy5nZXRSYW5nZURhdGUobmV3IERhdGUoYXJyWzBdKSwgbmV3IERhdGUoYXJyW2ldKSkubGVuZ3RoO1xyXG4gICAgICBsZWZ0QXJyLnB1c2goe1xyXG4gICAgICAgIGRhdGU6IGFycltpXSxcclxuICAgICAgICBsZWZ0OiB0aGlzLmxzLnJldGFpblBlcmNlbnREZWNpbWFsKHZhbHVlIC8gYWxsLCAyKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWZ0QXJyO1xyXG4gIH1cclxuXHJcbiAgaXRlbUNsaWNrKGRhdGU6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5uY0NsaWNrLmVtaXQoeyBkYXRlLCBpbmRleCB9KTtcclxuICAgIHRoaXMubmNTZWxlY3RlZCA9IGluZGV4O1xyXG4gICAgdGhpcy5uY1NlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy5uY1NlbGVjdGVkKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRpbWVsaW5lLWNvbnRhaW5lci1ob3Jpem9udGFsXCIgKm5nSWY9XCJuY01vZGUgPT0gJ2hvcml6b250YWwnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmUtaXRlbVwiIFtjbGFzcy50aW1lbGluZS1pdGVtLXNlbGVjdGVkXT1cIm5jU2VsZWN0ZWQgPT0gaVwiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGVPYmplY3RBcnI7bGV0IGkgPSBpbmRleDtcIiAoY2xpY2spPVwiaXRlbUNsaWNrKGRhdGVBcnJbaV0sIGkpXCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwieydsZWZ0JzogaSA9PSAwID8gJzAnIDogJ2NhbGMoJyArIGl0ZW0ubGVmdCArICclJyArICcgLSAycHgpJ31cIiBbdGl0bGVdPVwiZGF0ZUFycltpXVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2FsZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNjYWxlT2JqZWN0QXJyO2xldCBpID0gaW5kZXg7XCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwieydsZWZ0JzogJ2NhbGMoJyArIGl0ZW0ubGVmdCArICclJyArICcgLSAycHgpJ31cIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2NhbGUtdmFsdWVcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzY2FsZU9iamVjdEFycjtsZXQgaSA9IGluZGV4O1wiXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbGVmdCc6ICdjYWxjKCcgKyBpdGVtLmxlZnQgKyAnJScgKyAnIC0gMTZweCknfVwiPlxyXG4gICAgICAgICAgICB7e2l0ZW0uZGF0ZX19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwidGltZWxpbmUtY29udGFpbmVyLXZlcnRpY2FsXCIgKm5nSWY9XCJuY01vZGUgPT0gJ3ZlcnRpY2FsJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRpbWVsaW5lXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVsaW5lLWl0ZW1cIiBbY2xhc3MudGltZWxpbmUtaXRlbS1zZWxlY3RlZF09XCJuY1NlbGVjdGVkID09IGlcIlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRlT2JqZWN0QXJyO2xldCBpID0gaW5kZXg7XCIgKGNsaWNrKT1cIml0ZW1DbGljayhkYXRlQXJyW2ldLCBpKVwiXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsndG9wJzogaSA9PSAwID8gJzAnIDogJ2NhbGMoJyArIGl0ZW0ubGVmdCArICclJyArICcgLSAycHgpJ31cIiBbdGl0bGVdPVwiZGF0ZUFycltpXVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2FsZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNjYWxlT2JqZWN0QXJyO2xldCBpID0gaW5kZXg7XCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyd0b3AnOiAnY2FsYygnICsgaXRlbS5sZWZ0ICsgJyUnICsgJyAtIDJweCknfVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2FsZS12YWx1ZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNjYWxlT2JqZWN0QXJyO2xldCBpID0gaW5kZXg7XCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyd0b3AnOiAnY2FsYygnICsgaXRlbS5sZWZ0ICsgJyUnICsgJyAtIDEycHgpJ31cIj5cclxuICAgICAgICAgICAge3tpdGVtLmRhdGV9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==