@quadrel-enterprise-ui/framework 18.25.0 → 18.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/forms/datepicker/calendar/calendar.component.mjs +11 -6
- package/esm2022/lib/forms/input/input.component.mjs +18 -9
- package/fesm2022/quadrel-enterprise-ui-framework.mjs +27 -13
- package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
- package/lib/forms/datepicker/calendar/calendar.component.d.ts +1 -0
- package/lib/forms/input/input.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -43,7 +43,7 @@ export class QdCalendarComponent {
|
|
|
43
43
|
QdCalendarMode = QdCalendarMode;
|
|
44
44
|
ngOnInit() {
|
|
45
45
|
moment.locale(this.language);
|
|
46
|
-
this.
|
|
46
|
+
this.setWeekdays();
|
|
47
47
|
this.todayDate = moment();
|
|
48
48
|
this.months = moment.months();
|
|
49
49
|
this.years = this.getYears((QdDateAdapter.parseToMoment(this.selectedDate)?.isValid()
|
|
@@ -53,8 +53,10 @@ export class QdCalendarComponent {
|
|
|
53
53
|
this.generateCalendar(this.currentDate);
|
|
54
54
|
}
|
|
55
55
|
ngOnChanges(changes) {
|
|
56
|
-
if (changes['language'])
|
|
56
|
+
if (changes['language']) {
|
|
57
57
|
moment.locale(this.language);
|
|
58
|
+
this.setWeekdays();
|
|
59
|
+
}
|
|
58
60
|
if (changes['disabledDates'] && !changes['disabledDates'].isFirstChange())
|
|
59
61
|
this.generateCalendar(this.currentDate);
|
|
60
62
|
}
|
|
@@ -118,9 +120,8 @@ export class QdCalendarComponent {
|
|
|
118
120
|
this.weeks = Array.from({ length: Math.ceil(dates.length / 7) }, () => dates.splice(0, 7));
|
|
119
121
|
}
|
|
120
122
|
fillDates(momentObj) {
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
const lastDayOfGrid = moment(momentObj).endOf('month').subtract(lastOfMonth, 'days').add(7, 'days');
|
|
123
|
+
const firstDayOfGrid = moment(momentObj).locale(this.language).startOf('month').startOf('isoWeek');
|
|
124
|
+
const lastDayOfGrid = moment(momentObj).endOf('month').endOf('isoWeek').add(1, 'day');
|
|
124
125
|
const startCalendar = firstDayOfGrid.date();
|
|
125
126
|
return range(startCalendar, startCalendar + lastDayOfGrid.diff(firstDayOfGrid, 'days')).map(date => {
|
|
126
127
|
const newDate = moment(firstDayOfGrid).date(date);
|
|
@@ -165,6 +166,10 @@ export class QdCalendarComponent {
|
|
|
165
166
|
return date.isAfter(fromDate, 'day') && date.isBefore(toDate, 'day');
|
|
166
167
|
});
|
|
167
168
|
}
|
|
169
|
+
setWeekdays() {
|
|
170
|
+
const w = moment.localeData(this.language).weekdaysMin();
|
|
171
|
+
this.weekdays = w.slice(1).concat(w[0]);
|
|
172
|
+
}
|
|
168
173
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
169
174
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdCalendarComponent, selector: "qd-calendar", inputs: { selectedDate: "selectedDate", language: "language", disabledDates: "disabledDates" }, outputs: { selectedChange: "selectedChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav\">\n <button (click)=\"prev()\">\n <qd-icon icon=\"arrowLeft\"></qd-icon>\n </button>\n\n <ng-container>\n <span\n *ngIf=\"mode === QdCalendarMode.Default\"\n class=\"current-month-year\"\n (click)=\"changeMode(QdCalendarMode.YearPicker)\"\n >\n {{ currentDate.locale(language).format(\"MMMM\") }} {{ currentDate?.format(\"YYYY\") }}\n </span>\n <span\n *ngIf=\"mode === QdCalendarMode.YearPicker\"\n class=\"current-years-list\"\n (click)=\"changeMode(QdCalendarMode.MonthPicker)\"\n >\n {{ years[0] }} - {{ years[years.length - 1] }}\n </span>\n <span\n *ngIf=\"mode === QdCalendarMode.MonthPicker\"\n class=\"current-year\"\n (click)=\"changeMode(QdCalendarMode.YearPicker)\"\n >\n {{ currentDate?.format(\"YYYY\") }}\n </span>\n </ng-container>\n\n <button (click)=\"next()\">\n <qd-icon icon=\"arrowRight\"></qd-icon>\n </button>\n</div>\n\n<table *ngIf=\"mode === QdCalendarMode.Default\">\n <thead></thead>\n <tbody>\n <tr>\n <td class=\"weekday\" *ngFor=\"let name of weekdays\">{{ name }}</td>\n </tr>\n <tr *ngFor=\"let week of weeks\">\n <td\n class=\"day {{ day.moment.date() }}\"\n *ngFor=\"let day of week\"\n (click)=\"selectDate(day)\"\n [ngClass]=\"{\n today: day.today,\n selected: day.selected,\n hidden: !isSameYearMonth(day.moment),\n disabled: day.disabled\n }\"\n >\n {{ day.moment.date() }}\n </td>\n </tr>\n </tbody>\n</table>\n\n<div class=\"calendar\" *ngIf=\"mode !== QdCalendarMode.Default\">\n <div class=\"picker\" *ngIf=\"mode === QdCalendarMode.YearPicker\">\n <div class=\"col {{ year }}\" *ngFor=\"let year of years\">\n <div class=\"entry\" (click)=\"selectYear(year)\" [ngClass]=\"{ selected: isSameYear(year) }\">\n {{ year }}\n </div>\n </div>\n </div>\n\n <div class=\"picker\" *ngIf=\"mode === QdCalendarMode.MonthPicker\">\n <div class=\"col {{ month }}\" *ngFor=\"let month of months; let i = index\">\n <div class=\"entry\" (click)=\"selectMonth(i)\" [ngClass]=\"{ selected: isSameMonth(i), month }\">\n {{ month }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".nav{color:#171717;font-size:1rem;font-weight:700;line-height:1.5rem;display:grid;margin:.75rem;grid-template-columns:[next] 2rem [monthyear] auto [prev] 2rem [end];text-transform:capitalize}.nav span{line-height:2.5rem;text-align:center}.nav .current-month-year,.nav .current-years-list,.nav .current-year{cursor:pointer}tbody{display:inherit;margin:.75rem}td{color:#171717;font-size:.875rem;font-weight:400;line-height:1.3125rem;min-width:2.5625rem;padding:.4375rem;text-align:center;text-transform:capitalize}td.disabled{color:#d5d5d5;pointer-events:none}td.hidden{opacity:0;pointer-events:none}td.today{box-shadow:0 0 0 .125rem #d5d5d5 inset}td.selected,td.day:hover{background:#d5d5d5;cursor:pointer}.picker{display:flex;width:100%;flex-wrap:wrap;padding:.75rem}.picker .col{flex:0 0 33.33%;padding:.5rem .25rem}.picker .entry{padding:.4375rem;background:#d5d5d5;cursor:pointer;text-align:center}.picker .entry.selected,.picker .entry:hover{background:gray}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.QdIconComponent, selector: "qd-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
170
175
|
}
|
|
@@ -180,4 +185,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
180
185
|
}], selectedChange: [{
|
|
181
186
|
type: Output
|
|
182
187
|
}] } });
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2RhdGVwaWNrZXIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2RhdGVwaWNrZXIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxNQUFrQixNQUFNLFFBQVEsQ0FBQztBQUN4QyxPQUFPLEVBQWlCLGNBQWMsRUFBbUIsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFFeEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztBQVFyQixNQUFNLE9BQU8sbUJBQW1CO0lBQzlCOzs7O09BSUc7SUFFSCxZQUFZLENBQTZCO0lBRXpDOzs7O09BSUc7SUFFSCxRQUFRLENBQVM7SUFFakI7Ozs7O09BS0c7SUFFSCxhQUFhLENBQW9CO0lBRWpDOztPQUVHO0lBRUgsY0FBYyxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO0lBRWhFLFdBQVcsQ0FBUztJQUNwQixTQUFTLENBQVM7SUFFbEIsUUFBUSxDQUFXO0lBQ25CLEtBQUssR0FBMkIsRUFBRSxDQUFDO0lBQ25DLE1BQU0sQ0FBVztJQUNqQixLQUFLLENBQVc7SUFFaEIsSUFBSSxHQUFtQixjQUFjLENBQUMsT0FBTyxD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LFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNOzhCQVMvQyxZQUFZO3NCQURYLEtBQUs7Z0JBU04sUUFBUTtzQkFEUCxLQUFLO2dCQVVOLGFBQWE7c0JBRFosS0FBSztnQkFPTixjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtc3RyaWN0LWlnbm9yZVxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFFkQ2FsZW5kYXJEYXksIFFkQ2FsZW5kYXJNb2RlLCBRZERpc2FibGVkRGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IFFkRGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi9hZGFwdGVyL2RhdGUtYWRhcHRlcic7XG5cbmNvbnN0IFllYXJzQmVmb3JlID0gOTtcbmNvbnN0IFllYXJzQWZ0ZXIgPSAyO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFFkQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBzZWxlY3RlZCBkYXRlIGluIHRoZSBjYWxlbmRhci4gSXQgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQgZm9yIGV4YW1wbGUgJ0RELk1NLllZWVknIG9yICdNTS9ERC9ZWVlZJyBkZXBlbmRpbmcgb24gdGhlIGxhbmd1YWdlIHVzZWQuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDIyLTEyLTI1J1xuICAgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0ZWREYXRlOiBRZENhbGVuZGFyRGF5Wydmb3JtYXR0ZWQnXTtcblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBkZXRlcm1pbmVzIHRoZSBsYW5ndWFnZSB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSB3ZWVrZGF5cyBhbmQgZm9ybWF0dGluZyB0aGUgZGF0ZXMgaW4gdGhlIGNhbGVuZGFyLiBJdCBzaG91bGQgYmUgYSB2YWxpZCBsYW5ndWFnZSBjb2RlIHN1cHBvcnRlZCBieSB0aGUgbW9tZW50LmpzIGxpYnJhcnkuXG4gICAqXG4gICAqIEBleGFtcGxlICdkZSdcbiAgICovXG4gIEBJbnB1dCgpXG4gIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgZGlzYWJsZXMgdGhlIGdpdmVuIGRhdGUgcmFuZ2VzLlRoZSByYW5nZXMgaGF2ZSBhIFwiZnJvbVwiIGFuZCBcInRvXCIgZGF0ZS5cbiAgICogSWYgXCJmcm9tXCIgaXMgZW1wdHksIGl0IHdpbGwgc2V0IHRoZSBkZWZhdWx0IHZhbHVlIDE5MDBcbiAgICogSWYgXCJ0b1wiIGlzIGVtcHR5LCBpdCB3aWxsIGJlIHNldCB0byB0aGUgZGVmYXVsdCAyMTAwXG4gICAqXG4gICAqL1xuICBASW5wdXQoKVxuICBkaXNhYmxlZERhdGVzOiBRZERpc2FibGVkRGF0ZXNbXTtcblxuICAvKipcbiAgICogT3V0cHV0cyBhIHZhbHVlIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIGRhdGUgaW4gdGhlIGNhbGVuZGFyLiBUaGUgbmV3bHkgc2VsZWN0ZWQgZGF0ZSBpcyBvdXRwdXQgYXMgYSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFFkQ2FsZW5kYXJEYXlbJ2Zvcm1hdHRlZCddPigpO1xuXG4gIGN1cnJlbnREYXRlOiBNb21lbnQ7XG4gIHRvZGF5RGF0ZTogTW9tZW50O1xuXG4gIHdlZWtkYXlzOiBzdHJpbmdbXTtcbiAgd2Vla3M6IEFycmF5PFFkQ2FsZW5kYXJEYXlbXT4gPSBbXTtcbiAgbW9udGhzOiBzdHJpbmdbXTtcbiAgeWVhcnM6IG51bWJlcltdO1xuXG4gIG1vZGU6IFFkQ2FsZW5kYXJNb2RlID0gUWRDYWxlbmRhck1vZGUuRGVmYXVsdDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgUWRDYWxlbmRhck1vZGUgPSBRZENhbGVuZGFyTW9kZTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBtb21lbnQubG9jYWxlKHRoaXMubGFuZ3VhZ2UpO1xuXG4gICAgdGhpcy53ZWVrZGF5cyA9IG1vbWVudC53ZWVrZGF5c01pbih0cnVlKTtcbiAgICB0aGlzLnRvZGF5RGF0ZSA9IG1vbWVudCgpO1xuXG4gICAgdGhpcy5tb250aHMgPSBtb21lbnQubW9udGhzKCk7XG4gICAgdGhpcy55ZWFycyA9IHRoaXMuZ2V0WWVhcnMoXG4gICAgICAoUWREYXRlQWRhcHRlci5wYXJzZVRvTW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlKT8uaXNWYWxpZCgpXG4gICAgICAgID8gbW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlLCAnTCcsIHRoaXMubGFuZ3VhZ2UpXG4gICAgICAgIDogdGhpcy50b2RheURhdGVcbiAgICAgICkueWVhcigpXG4gICAgKTtcblxuICAgIHRoaXMuc2V0Q3VycmVudERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIodGhpcy5jdXJyZW50RGF0ZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2xhbmd1YWdlJ10pIG1vbWVudC5sb2NhbGUodGhpcy5sYW5ndWFnZSk7XG4gICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkRGF0ZXMnXSAmJiAhY2hhbmdlc1snZGlzYWJsZWREYXRlcyddLmlzRmlyc3RDaGFuZ2UoKSkgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKHRoaXMuY3VycmVudERhdGUpO1xuICB9XG5cbiAgaXNTYW1lWWVhck1vbnRoKGRheTogTW9tZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRheS5pc1NhbWUodGhpcy5jdXJyZW50RGF0ZSwgJ21vbnRoJyk7XG4gIH1cblxuICBpc1NhbWVNb250aChtb250aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLm1vbnRoKCkgPT09IG1vbnRoO1xuICB9XG5cbiAgaXNTYW1lWWVhcih5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gUWREYXRlQWRhcHRlci5wYXJzZVRvTW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlKS55ZWFyKCkgPT09IHllYXI7XG4gIH1cblxuICBwcmV2KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLkRlZmF1bHQpIHtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRocycpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKHRoaXMuY3VycmVudERhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCgneWVhcicsIHRoaXMuY3VycmVudERhdGUueWVhcigpIC0gKFllYXJzQmVmb3JlICsgWWVhcnNBZnRlciArIDEpKTtcbiAgICAgIHRoaXMueWVhcnMgPSB0aGlzLmdldFllYXJzKHRoaXMuY3VycmVudERhdGUueWVhcigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoJ3llYXInLCB0aGlzLmN1cnJlbnREYXRlLnllYXIoKSAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gUWRDYWxlbmRhck1vZGUuRGVmYXVsdCkge1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5hZGQoMSwgJ21vbnRocycpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKHRoaXMuY3VycmVudERhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCgneWVhcicsIHRoaXMuY3VycmVudERhdGUueWVhcigpICsgKFllYXJzQmVmb3JlICsgWWVhcnNBZnRlciArIDEpKTtcbiAgICAgIHRoaXMueWVhcnMgPSB0aGlzLmdldFllYXJzKHRoaXMuY3VycmVudERhdGUueWVhcigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoJ3llYXInLCB0aGlzLmN1cnJlbnREYXRlLnllYXIoKSArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGlzU2VsZWN0ZWQobW9tZW50T2JqOiBNb21lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gUWREYXRlQWRhcHRlci5mb3JtYXRUb0xvY2FsaXplZERhdGVTdHJpbmcobW9tZW50T2JqKSA9PT0gdGhpcy5zZWxlY3RlZERhdGU7XG4gIH1cblxuICBzZWxlY3REYXRlKGRhdGU6IFFkQ2FsZW5kYXJEYXkgfCBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZS5mb3JtYXR0ZWQpO1xuICB9XG5cbiAgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlLnNldCgneWVhcicsIHllYXIpO1xuICAgIHRoaXMubW9kZSA9IFFkQ2FsZW5kYXJNb2RlLk1vbnRoUGlja2VyO1xuICB9XG5cbiAgc2VsZWN0TW9udGgobW9udGg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERhdGUuc2V0KCdtb250aCcsIG1vbnRoKTtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIodGhpcy5jdXJyZW50RGF0ZSk7XG4gICAgdGhpcy5tb2RlID0gUWRDYWxlbmRhck1vZGUuRGVmYXVsdDtcbiAgfVxuXG4gIGNoYW5nZU1vZGUobnI6IFFkQ2FsZW5kYXJNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlID0gbnI7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FsZW5kYXIobW9tZW50T2JqOiBNb21lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlcyA9IHRoaXMuZmlsbERhdGVzKG1vbWVudE9iaik7XG4gICAgdGhpcy53ZWVrcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGguY2VpbChkYXRlcy5sZW5ndGggLyA3KSB9LCAoKSA9PiBkYXRlcy5zcGxpY2UoMCwgNykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsRGF0ZXMobW9tZW50T2JqOiBNb21lbnQpOiBRZENhbGVuZGFyRGF5W10ge1xuICAgIGNvbnN0IGxhc3RPZk1vbnRoID0gbW9tZW50KG1vbWVudE9iaikuZW5kT2YoJ21vbnRoJykuZGF5KCk7XG4gICAgY29uc3QgZmlyc3REYXlPZkdyaWQgPSBtb21lbnQobW9tZW50T2JqKS5sb2NhbGUodGhpcy5sYW5ndWFnZSkuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJyk7XG4gICAgY29uc3QgbGFzdERheU9mR3JpZCA9IG1vbWVudChtb21lbnRPYmopLmVuZE9mKCdtb250aCcpLnN1YnRyYWN0KGxhc3RPZk1vbnRoLCAnZGF5cycpLmFkZCg3LCAnZGF5cycpO1xuICAgIGNvbnN0IHN0YXJ0Q2FsZW5kYXIgPSBmaXJzdERheU9mR3JpZC5kYXRlKCk7XG5cbiAgICByZXR1cm4gcmFuZ2Uoc3RhcnRDYWxlbmRhciwgc3RhcnRDYWxlbmRhciArIGxhc3REYXlPZkdyaWQuZGlmZihmaXJzdERheU9mR3JpZCwgJ2RheXMnKSkubWFwKGRhdGUgPT4ge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IG1vbWVudChmaXJzdERheU9mR3JpZCkuZGF0ZShkYXRlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybWF0dGVkOiBRZERhdGVBZGFwdGVyLmZvcm1hdFRvTG9jYWxpemVkRGF0ZVN0cmluZyhuZXdEYXRlKSxcbiAgICAgICAgbW9tZW50OiBuZXdEYXRlLFxuICAgICAgICBzZWxlY3RlZDogdGhpcy5pc1NlbGVjdGVkKG5ld0RhdGUpLFxuICAgICAgICB0b2RheTogdGhpcy5pc1RvZGF5KG5ld0RhdGUpLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkKG5ld0RhdGUpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RvZGF5KG1vbWVudE9iajogTW9tZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9kYXlEYXRlLmlzU2FtZShtb21lbnRPYmosICdkYXknKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3VycmVudERhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudERhdGU6IE1vbWVudCA9ICh0aGlzLmN1cnJlbnREYXRlID0gUWREYXRlQWRhcHRlci5wYXJzZVRvTW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlKT8uaXNWYWxpZCgpXG4gICAgICA/IG1vbWVudCh0aGlzLnNlbGVjdGVkRGF0ZSwgJ0wnLCAnZGUnKVxuICAgICAgOiB0aGlzLnRvZGF5RGF0ZSk7XG5cbiAgICB0aGlzLmN1cnJlbnREYXRlID0gY3VycmVudERhdGU7XG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBRZERhdGVBZGFwdGVyLmZvcm1hdFRvTG9jYWxpemVkRGF0ZVN0cmluZyhjdXJyZW50RGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFllYXJzKHllYXI6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBjb25zdCB5ZWFyc0JlZm9yZSA9IFllYXJzQmVmb3JlO1xuICAgIGNvbnN0IHllYXJzQWZ0ZXIgPSBZZWFyc0FmdGVyO1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSB5ZWFyIC0geWVhcnNCZWZvcmU7IGkgPD0geWVhciArIHllYXJzQWZ0ZXI7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNhYmxlZChkYXRlOiBNb21lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWREYXRlcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZShkaXNhYmxlZERhdGUgPT4ge1xuICAgICAgbGV0IGZyb21EYXRlID0gbW9tZW50KGRpc2FibGVkRGF0ZS5mcm9tKTtcbiAgICAgIGxldCB0b0RhdGUgPSBtb21lbnQoZGlzYWJsZWREYXRlLnRvKTtcbiAgICAgIGlmICghZGlzYWJsZWREYXRlLmZyb20pIGZyb21EYXRlID0gbW9tZW50KCcxOTAwLTAxLTAxVDAwOjAwOjAwLjAwMFonKTtcbiAgICAgIGlmICghZGlzYWJsZWREYXRlLnRvKSB0b0RhdGUgPSBtb21lbnQoJzIxMDAtMDEtMDFUMDA6MDA6MDAuMDAwWicpO1xuXG4gICAgICByZXR1cm4gZGF0ZS5pc0FmdGVyKGZyb21EYXRlLCAnZGF5JykgJiYgZGF0ZS5pc0JlZm9yZSh0b0RhdGUsICdkYXknKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm5hdlwiPlxuICA8YnV0dG9uIChjbGljayk9XCJwcmV2KClcIj5cbiAgICA8cWQtaWNvbiBpY29uPVwiYXJyb3dMZWZ0XCI+PC9xZC1pY29uPlxuICA8L2J1dHRvbj5cblxuICA8bmctY29udGFpbmVyPlxuICAgIDxzcGFuXG4gICAgICAqbmdJZj1cIm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLkRlZmF1bHRcIlxuICAgICAgY2xhc3M9XCJjdXJyZW50LW1vbnRoLXllYXJcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoUWRDYWxlbmRhck1vZGUuWWVhclBpY2tlcilcIlxuICAgID5cbiAgICAgIHt7IGN1cnJlbnREYXRlLmxvY2FsZShsYW5ndWFnZSkuZm9ybWF0KFwiTU1NTVwiKSB9fSB7eyBjdXJyZW50RGF0ZT8uZm9ybWF0KFwiWVlZWVwiKSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgKm5nSWY9XCJtb2RlID09PSBRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyXCJcbiAgICAgIGNsYXNzPVwiY3VycmVudC15ZWFycy1saXN0XCJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKFFkQ2FsZW5kYXJNb2RlLk1vbnRoUGlja2VyKVwiXG4gICAgPlxuICAgICAge3sgeWVhcnNbMF0gfX0gLSB7eyB5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgKm5nSWY9XCJtb2RlID09PSBRZENhbGVuZGFyTW9kZS5Nb250aFBpY2tlclwiXG4gICAgICBjbGFzcz1cImN1cnJlbnQteWVhclwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZShRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyKVwiXG4gICAgPlxuICAgICAge3sgY3VycmVudERhdGU/LmZvcm1hdChcIllZWVlcIikgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxidXR0b24gKGNsaWNrKT1cIm5leHQoKVwiPlxuICAgIDxxZC1pY29uIGljb249XCJhcnJvd1JpZ2h0XCI+PC9xZC1pY29uPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48dGFibGUgKm5nSWY9XCJtb2RlID09PSBRZENhbGVuZGFyTW9kZS5EZWZhdWx0XCI+XG4gIDx0aGVhZD48L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwid2Vla2RheVwiICpuZ0Zvcj1cImxldCBuYW1lIG9mIHdlZWtkYXlzXCI+e3sgbmFtZSB9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3NcIj5cbiAgICAgIDx0ZFxuICAgICAgICBjbGFzcz1cImRheSB7eyBkYXkubW9tZW50LmRhdGUoKSB9fVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3REYXRlKGRheSlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgdG9kYXk6IGRheS50b2RheSxcbiAgICAgICAgICBzZWxlY3RlZDogZGF5LnNlbGVjdGVkLFxuICAgICAgICAgIGhpZGRlbjogIWlzU2FtZVllYXJNb250aChkYXkubW9tZW50KSxcbiAgICAgICAgICBkaXNhYmxlZDogZGF5LmRpc2FibGVkXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICB7eyBkYXkubW9tZW50LmRhdGUoKSB9fVxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPGRpdiBjbGFzcz1cImNhbGVuZGFyXCIgKm5nSWY9XCJtb2RlICE9PSBRZENhbGVuZGFyTW9kZS5EZWZhdWx0XCI+XG4gIDxkaXYgY2xhc3M9XCJwaWNrZXJcIiAqbmdJZj1cIm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLlllYXJQaWNrZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sIHt7IHllYXIgfX1cIiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImVudHJ5XCIgKGNsaWNrKT1cInNlbGVjdFllYXIoeWVhcilcIiBbbmdDbGFzc109XCJ7IHNlbGVjdGVkOiBpc1NhbWVZZWFyKHllYXIpIH1cIj5cbiAgICAgICAge3sgeWVhciB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwaWNrZXJcIiAqbmdJZj1cIm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLk1vbnRoUGlja2VyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbCB7eyBtb250aCB9fVwiICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbnRyeVwiIChjbGljayk9XCJzZWxlY3RNb250aChpKVwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IGlzU2FtZU1vbnRoKGkpLCBtb250aCB9XCI+XG4gICAgICAgIHt7IG1vbnRoIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2RhdGVwaWNrZXIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2RhdGVwaWNrZXIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxNQUFrQixNQUFNLFFBQVEsQ0FBQztBQUN4QyxPQUFPLEVBQWlCLGNBQWMsRUFBbUIsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFFeEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztBQVFyQixNQUFNLE9BQU8sbUJBQW1CO0lBQzlCOzs7O09BSUc7SUFFSCxZQUFZLENBQTZCO0lBRXpDOzs7O09BSUc7SUFFSCxRQUFRLENBQVM7SUFFakI7Ozs7O09BS0c7SUFFSCxhQUFhLENBQW9CO0lBRWpDOztPQUVHO0lBRUgsY0FBYyxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO0lBRWhFLFdBQVcsQ0FBUztJQUNwQixTQUFTLENBQVM7SUFFbEIsUUFBUSxDQUFXO0lBQ25CLEtBQUssR0FBMkIsRUFBRSxDQUFDO0lBQ25DLE1BQU0sQ0FBVztJQUNqQixLQUFLLENBQVc7SUFFaEIsSUFBSSxHQUFtQixjQUFjLENBQUMsT0FBTyxD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QUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO3VHQW5NVSxtQkFBbUI7MkZBQW5CLG1CQUFtQix1TkN6QmhDLHF1RUEyRUE7OzJGRGxEYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNOzhCQVMvQyxZQUFZO3NCQURYLEtBQUs7Z0JBU04sUUFBUTtzQkFEUCxLQUFLO2dCQVVOLGFBQWE7c0JBRFosS0FBSztnQkFPTixjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtc3RyaWN0LWlnbm9yZVxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFFkQ2FsZW5kYXJEYXksIFFkQ2FsZW5kYXJNb2RlLCBRZERpc2FibGVkRGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IFFkRGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi9hZGFwdGVyL2RhdGUtYWRhcHRlcic7XG5cbmNvbnN0IFllYXJzQmVmb3JlID0gOTtcbmNvbnN0IFllYXJzQWZ0ZXIgPSAyO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFFkQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBzZWxlY3RlZCBkYXRlIGluIHRoZSBjYWxlbmRhci4gSXQgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQgZm9yIGV4YW1wbGUgJ0RELk1NLllZWVknIG9yICdNTS9ERC9ZWVlZJyBkZXBlbmRpbmcgb24gdGhlIGxhbmd1YWdlIHVzZWQuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDIyLTEyLTI1J1xuICAgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0ZWREYXRlOiBRZENhbGVuZGFyRGF5Wydmb3JtYXR0ZWQnXTtcblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBkZXRlcm1pbmVzIHRoZSBsYW5ndWFnZSB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSB3ZWVrZGF5cyBhbmQgZm9ybWF0dGluZyB0aGUgZGF0ZXMgaW4gdGhlIGNhbGVuZGFyLiBJdCBzaG91bGQgYmUgYSB2YWxpZCBsYW5ndWFnZSBjb2RlIHN1cHBvcnRlZCBieSB0aGUgbW9tZW50LmpzIGxpYnJhcnkuXG4gICAqXG4gICAqIEBleGFtcGxlICdkZSdcbiAgICovXG4gIEBJbnB1dCgpXG4gIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgZGlzYWJsZXMgdGhlIGdpdmVuIGRhdGUgcmFuZ2VzLlRoZSByYW5nZXMgaGF2ZSBhIFwiZnJvbVwiIGFuZCBcInRvXCIgZGF0ZS5cbiAgICogSWYgXCJmcm9tXCIgaXMgZW1wdHksIGl0IHdpbGwgc2V0IHRoZSBkZWZhdWx0IHZhbHVlIDE5MDBcbiAgICogSWYgXCJ0b1wiIGlzIGVtcHR5LCBpdCB3aWxsIGJlIHNldCB0byB0aGUgZGVmYXVsdCAyMTAwXG4gICAqXG4gICAqL1xuICBASW5wdXQoKVxuICBkaXNhYmxlZERhdGVzOiBRZERpc2FibGVkRGF0ZXNbXTtcblxuICAvKipcbiAgICogT3V0cHV0cyBhIHZhbHVlIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIGRhdGUgaW4gdGhlIGNhbGVuZGFyLiBUaGUgbmV3bHkgc2VsZWN0ZWQgZGF0ZSBpcyBvdXRwdXQgYXMgYSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFFkQ2FsZW5kYXJEYXlbJ2Zvcm1hdHRlZCddPigpO1xuXG4gIGN1cnJlbnREYXRlOiBNb21lbnQ7XG4gIHRvZGF5RGF0ZTogTW9tZW50O1xuXG4gIHdlZWtkYXlzOiBzdHJpbmdbXTtcbiAgd2Vla3M6IEFycmF5PFFkQ2FsZW5kYXJEYXlbXT4gPSBbXTtcbiAgbW9udGhzOiBzdHJpbmdbXTtcbiAgeWVhcnM6IG51bWJlcltdO1xuXG4gIG1vZGU6IFFkQ2FsZW5kYXJNb2RlID0gUWRDYWxlbmRhck1vZGUuRGVmYXVsdDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgUWRDYWxlbmRhck1vZGUgPSBRZENhbGVuZGFyTW9kZTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBtb21lbnQubG9jYWxlKHRoaXMubGFuZ3VhZ2UpO1xuXG4gICAgdGhpcy5zZXRXZWVrZGF5cygpO1xuICAgIHRoaXMudG9kYXlEYXRlID0gbW9tZW50KCk7XG5cbiAgICB0aGlzLm1vbnRocyA9IG1vbWVudC5tb250aHMoKTtcbiAgICB0aGlzLnllYXJzID0gdGhpcy5nZXRZZWFycyhcbiAgICAgIChRZERhdGVBZGFwdGVyLnBhcnNlVG9Nb21lbnQodGhpcy5zZWxlY3RlZERhdGUpPy5pc1ZhbGlkKClcbiAgICAgICAgPyBtb21lbnQodGhpcy5zZWxlY3RlZERhdGUsICdMJywgdGhpcy5sYW5ndWFnZSlcbiAgICAgICAgOiB0aGlzLnRvZGF5RGF0ZVxuICAgICAgKS55ZWFyKClcbiAgICApO1xuXG4gICAgdGhpcy5zZXRDdXJyZW50RGF0ZSgpO1xuICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcih0aGlzLmN1cnJlbnREYXRlKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbGFuZ3VhZ2UnXSkge1xuICAgICAgbW9tZW50LmxvY2FsZSh0aGlzLmxhbmd1YWdlKTtcbiAgICAgIHRoaXMuc2V0V2Vla2RheXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkRGF0ZXMnXSAmJiAhY2hhbmdlc1snZGlzYWJsZWREYXRlcyddLmlzRmlyc3RDaGFuZ2UoKSkgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKHRoaXMuY3VycmVudERhdGUpO1xuICB9XG5cbiAgaXNTYW1lWWVhck1vbnRoKGRheTogTW9tZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRheS5pc1NhbWUodGhpcy5jdXJyZW50RGF0ZSwgJ21vbnRoJyk7XG4gIH1cblxuICBpc1NhbWVNb250aChtb250aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLm1vbnRoKCkgPT09IG1vbnRoO1xuICB9XG5cbiAgaXNTYW1lWWVhcih5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gUWREYXRlQWRhcHRlci5wYXJzZVRvTW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlKS55ZWFyKCkgPT09IHllYXI7XG4gIH1cblxuICBwcmV2KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLkRlZmF1bHQpIHtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRocycpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKHRoaXMuY3VycmVudERhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCgneWVhcicsIHRoaXMuY3VycmVudERhdGUueWVhcigpIC0gKFllYXJzQmVmb3JlICsgWWVhcnNBZnRlciArIDEpKTtcbiAgICAgIHRoaXMueWVhcnMgPSB0aGlzLmdldFllYXJzKHRoaXMuY3VycmVudERhdGUueWVhcigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoJ3llYXInLCB0aGlzLmN1cnJlbnREYXRlLnllYXIoKSAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gUWRDYWxlbmRhck1vZGUuRGVmYXVsdCkge1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5hZGQoMSwgJ21vbnRocycpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKHRoaXMuY3VycmVudERhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCgneWVhcicsIHRoaXMuY3VycmVudERhdGUueWVhcigpICsgKFllYXJzQmVmb3JlICsgWWVhcnNBZnRlciArIDEpKTtcbiAgICAgIHRoaXMueWVhcnMgPSB0aGlzLmdldFllYXJzKHRoaXMuY3VycmVudERhdGUueWVhcigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoJ3llYXInLCB0aGlzLmN1cnJlbnREYXRlLnllYXIoKSArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGlzU2VsZWN0ZWQobW9tZW50T2JqOiBNb21lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gUWREYXRlQWRhcHRlci5mb3JtYXRUb0xvY2FsaXplZERhdGVTdHJpbmcobW9tZW50T2JqKSA9PT0gdGhpcy5zZWxlY3RlZERhdGU7XG4gIH1cblxuICBzZWxlY3REYXRlKGRhdGU6IFFkQ2FsZW5kYXJEYXkgfCBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZS5mb3JtYXR0ZWQpO1xuICB9XG5cbiAgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlLnNldCgneWVhcicsIHllYXIpO1xuICAgIHRoaXMubW9kZSA9IFFkQ2FsZW5kYXJNb2RlLk1vbnRoUGlja2VyO1xuICB9XG5cbiAgc2VsZWN0TW9udGgobW9udGg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERhdGUuc2V0KCdtb250aCcsIG1vbnRoKTtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIodGhpcy5jdXJyZW50RGF0ZSk7XG4gICAgdGhpcy5tb2RlID0gUWRDYWxlbmRhck1vZGUuRGVmYXVsdDtcbiAgfVxuXG4gIGNoYW5nZU1vZGUobnI6IFFkQ2FsZW5kYXJNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlID0gbnI7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FsZW5kYXIobW9tZW50T2JqOiBNb21lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlcyA9IHRoaXMuZmlsbERhdGVzKG1vbWVudE9iaik7XG4gICAgdGhpcy53ZWVrcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGguY2VpbChkYXRlcy5sZW5ndGggLyA3KSB9LCAoKSA9PiBkYXRlcy5zcGxpY2UoMCwgNykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsRGF0ZXMobW9tZW50T2JqOiBNb21lbnQpOiBRZENhbGVuZGFyRGF5W10ge1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZHcmlkID0gbW9tZW50KG1vbWVudE9iaikubG9jYWxlKHRoaXMubGFuZ3VhZ2UpLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignaXNvV2VlaycpO1xuICAgIGNvbnN0IGxhc3REYXlPZkdyaWQgPSBtb21lbnQobW9tZW50T2JqKS5lbmRPZignbW9udGgnKS5lbmRPZignaXNvV2VlaycpLmFkZCgxLCAnZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnRDYWxlbmRhciA9IGZpcnN0RGF5T2ZHcmlkLmRhdGUoKTtcblxuICAgIHJldHVybiByYW5nZShzdGFydENhbGVuZGFyLCBzdGFydENhbGVuZGFyICsgbGFzdERheU9mR3JpZC5kaWZmKGZpcnN0RGF5T2ZHcmlkLCAnZGF5cycpKS5tYXAoZGF0ZSA9PiB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gbW9tZW50KGZpcnN0RGF5T2ZHcmlkKS5kYXRlKGRhdGUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWQ6IFFkRGF0ZUFkYXB0ZXIuZm9ybWF0VG9Mb2NhbGl6ZWREYXRlU3RyaW5nKG5ld0RhdGUpLFxuICAgICAgICBtb21lbnQ6IG5ld0RhdGUsXG4gICAgICAgIHNlbGVjdGVkOiB0aGlzLmlzU2VsZWN0ZWQobmV3RGF0ZSksXG4gICAgICAgIHRvZGF5OiB0aGlzLmlzVG9kYXkobmV3RGF0ZSksXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmlzRGlzYWJsZWQobmV3RGF0ZSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzVG9kYXkobW9tZW50T2JqOiBNb21lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b2RheURhdGUuaXNTYW1lKG1vbWVudE9iaiwgJ2RheScpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJyZW50RGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZTogTW9tZW50ID0gKHRoaXMuY3VycmVudERhdGUgPSBRZERhdGVBZGFwdGVyLnBhcnNlVG9Nb21lbnQodGhpcy5zZWxlY3RlZERhdGUpPy5pc1ZhbGlkKClcbiAgICAgID8gbW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlLCAnTCcsICdkZScpXG4gICAgICA6IHRoaXMudG9kYXlEYXRlKTtcblxuICAgIHRoaXMuY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IFFkRGF0ZUFkYXB0ZXIuZm9ybWF0VG9Mb2NhbGl6ZWREYXRlU3RyaW5nKGN1cnJlbnREYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0WWVhcnMoeWVhcjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHllYXJzQmVmb3JlID0gWWVhcnNCZWZvcmU7XG4gICAgY29uc3QgeWVhcnNBZnRlciA9IFllYXJzQWZ0ZXI7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IHllYXIgLSB5ZWFyc0JlZm9yZTsgaSA8PSB5ZWFyICsgeWVhcnNBZnRlcjsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rpc2FibGVkKGRhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZERhdGVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKGRpc2FibGVkRGF0ZSA9PiB7XG4gICAgICBsZXQgZnJvbURhdGUgPSBtb21lbnQoZGlzYWJsZWREYXRlLmZyb20pO1xuICAgICAgbGV0IHRvRGF0ZSA9IG1vbWVudChkaXNhYmxlZERhdGUudG8pO1xuICAgICAgaWYgKCFkaXNhYmxlZERhdGUuZnJvbSkgZnJvbURhdGUgPSBtb21lbnQoJzE5MDAtMDEtMDFUMDA6MDA6MDAuMDAwWicpO1xuICAgICAgaWYgKCFkaXNhYmxlZERhdGUudG8pIHRvRGF0ZSA9IG1vbWVudCgnMjEwMC0wMS0wMVQwMDowMDowMC4wMDBaJyk7XG5cbiAgICAgIHJldHVybiBkYXRlLmlzQWZ0ZXIoZnJvbURhdGUsICdkYXknKSAmJiBkYXRlLmlzQmVmb3JlKHRvRGF0ZSwgJ2RheScpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRXZWVrZGF5cygpOiB2b2lkIHtcbiAgICBjb25zdCB3ID0gbW9tZW50LmxvY2FsZURhdGEodGhpcy5sYW5ndWFnZSkud2Vla2RheXNNaW4oKTtcblxuICAgIHRoaXMud2Vla2RheXMgPSB3LnNsaWNlKDEpLmNvbmNhdCh3WzBdKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm5hdlwiPlxuICA8YnV0dG9uIChjbGljayk9XCJwcmV2KClcIj5cbiAgICA8cWQtaWNvbiBpY29uPVwiYXJyb3dMZWZ0XCI+PC9xZC1pY29uPlxuICA8L2J1dHRvbj5cblxuICA8bmctY29udGFpbmVyPlxuICAgIDxzcGFuXG4gICAgICAqbmdJZj1cIm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLkRlZmF1bHRcIlxuICAgICAgY2xhc3M9XCJjdXJyZW50LW1vbnRoLXllYXJcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoUWRDYWxlbmRhck1vZGUuWWVhclBpY2tlcilcIlxuICAgID5cbiAgICAgIHt7IGN1cnJlbnREYXRlLmxvY2FsZShsYW5ndWFnZSkuZm9ybWF0KFwiTU1NTVwiKSB9fSB7eyBjdXJyZW50RGF0ZT8uZm9ybWF0KFwiWVlZWVwiKSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgKm5nSWY9XCJtb2RlID09PSBRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyXCJcbiAgICAgIGNsYXNzPVwiY3VycmVudC15ZWFycy1saXN0XCJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKFFkQ2FsZW5kYXJNb2RlLk1vbnRoUGlja2VyKVwiXG4gICAgPlxuICAgICAge3sgeWVhcnNbMF0gfX0gLSB7eyB5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgKm5nSWY9XCJtb2RlID09PSBRZENhbGVuZGFyTW9kZS5Nb250aFBpY2tlclwiXG4gICAgICBjbGFzcz1cImN1cnJlbnQteWVhclwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZShRZENhbGVuZGFyTW9kZS5ZZWFyUGlja2VyKVwiXG4gICAgPlxuICAgICAge3sgY3VycmVudERhdGU/LmZvcm1hdChcIllZWVlcIikgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxidXR0b24gKGNsaWNrKT1cIm5leHQoKVwiPlxuICAgIDxxZC1pY29uIGljb249XCJhcnJvd1JpZ2h0XCI+PC9xZC1pY29uPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48dGFibGUgKm5nSWY9XCJtb2RlID09PSBRZENhbGVuZGFyTW9kZS5EZWZhdWx0XCI+XG4gIDx0aGVhZD48L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwid2Vla2RheVwiICpuZ0Zvcj1cImxldCBuYW1lIG9mIHdlZWtkYXlzXCI+e3sgbmFtZSB9fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3NcIj5cbiAgICAgIDx0ZFxuICAgICAgICBjbGFzcz1cImRheSB7eyBkYXkubW9tZW50LmRhdGUoKSB9fVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3REYXRlKGRheSlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgdG9kYXk6IGRheS50b2RheSxcbiAgICAgICAgICBzZWxlY3RlZDogZGF5LnNlbGVjdGVkLFxuICAgICAgICAgIGhpZGRlbjogIWlzU2FtZVllYXJNb250aChkYXkubW9tZW50KSxcbiAgICAgICAgICBkaXNhYmxlZDogZGF5LmRpc2FibGVkXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICB7eyBkYXkubW9tZW50LmRhdGUoKSB9fVxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPGRpdiBjbGFzcz1cImNhbGVuZGFyXCIgKm5nSWY9XCJtb2RlICE9PSBRZENhbGVuZGFyTW9kZS5EZWZhdWx0XCI+XG4gIDxkaXYgY2xhc3M9XCJwaWNrZXJcIiAqbmdJZj1cIm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLlllYXJQaWNrZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sIHt7IHllYXIgfX1cIiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImVudHJ5XCIgKGNsaWNrKT1cInNlbGVjdFllYXIoeWVhcilcIiBbbmdDbGFzc109XCJ7IHNlbGVjdGVkOiBpc1NhbWVZZWFyKHllYXIpIH1cIj5cbiAgICAgICAge3sgeWVhciB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwaWNrZXJcIiAqbmdJZj1cIm1vZGUgPT09IFFkQ2FsZW5kYXJNb2RlLk1vbnRoUGlja2VyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbCB7eyBtb250aCB9fVwiICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbnRyeVwiIChjbGljayk9XCJzZWxlY3RNb250aChpKVwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IGlzU2FtZU1vbnRoKGkpLCBtb250aCB9XCI+XG4gICAgICAgIHt7IG1vbnRoIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -359,21 +359,23 @@ export class QdInputComponent {
|
|
|
359
359
|
if (this.controlContainer) {
|
|
360
360
|
if (this.formControlName) {
|
|
361
361
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
362
|
-
// TODO remove logic for support of angular FormControl with angular
|
|
363
|
-
if (!(this.control instanceof QdFormControl))
|
|
362
|
+
// TODO remove logic for support of angular FormControl with angular 20 update
|
|
363
|
+
if (!(this.control instanceof QdFormControl))
|
|
364
364
|
console.warn('QD-UI | QdInputComponent - Please use the QdFormControl instead of the Angular FormControl');
|
|
365
|
-
}
|
|
366
365
|
}
|
|
367
366
|
}
|
|
368
367
|
this.writeValue(this.value || getValue(this.config));
|
|
368
|
+
this.normalizeInitialControlValueIfNeeded();
|
|
369
369
|
this._subs.add(this.actionEmitterService.hintEventEmitter$.subscribe(() => this.clickHint.emit()));
|
|
370
370
|
this._subs.add(this.actionEmitterService.readonlyEventEmitter$.subscribe(() => this.clickReadonly.emit()));
|
|
371
371
|
this._subs.add(this.actionEmitterService.viewonlyEventEmitter$.subscribe(() => this.clickViewonly.emit()));
|
|
372
372
|
this._subs.add(this.initOpModeSubscription());
|
|
373
373
|
}
|
|
374
374
|
ngOnChanges(changes) {
|
|
375
|
-
if (changes['config'])
|
|
375
|
+
if (changes['config']) {
|
|
376
376
|
this.updateConfig();
|
|
377
|
+
this.normalizeInitialControlValueIfNeeded();
|
|
378
|
+
}
|
|
377
379
|
if (changes['value'])
|
|
378
380
|
this.writeValue(this.value);
|
|
379
381
|
}
|
|
@@ -382,18 +384,15 @@ export class QdInputComponent {
|
|
|
382
384
|
}
|
|
383
385
|
registerOnChange(fn) {
|
|
384
386
|
const fnString = fn.toString();
|
|
385
|
-
if (fnString.includes('_noControlError') || fnString.includes('validateControlPresenceOnChange'))
|
|
387
|
+
if (fnString.includes('_noControlError') || fnString.includes('validateControlPresenceOnChange'))
|
|
386
388
|
return;
|
|
387
|
-
}
|
|
388
389
|
this._onChange = fn;
|
|
389
|
-
fn(this.hasUnits ? this._value : this._value.value);
|
|
390
390
|
}
|
|
391
391
|
registerOnTouched(fn) {
|
|
392
392
|
this._onTouch = fn;
|
|
393
393
|
}
|
|
394
394
|
writeValue(value) {
|
|
395
395
|
this._value = getValueWithUnit(value, this.config);
|
|
396
|
-
this._onChange(this.hasUnits ? this._value : this._value.value);
|
|
397
396
|
}
|
|
398
397
|
setDisabledState(disabled) {
|
|
399
398
|
this.disabled = disabled;
|
|
@@ -493,6 +492,16 @@ export class QdInputComponent {
|
|
|
493
492
|
this.viewonly = getViewonly(this.config, topic.payload.isViewonly);
|
|
494
493
|
});
|
|
495
494
|
}
|
|
495
|
+
normalizeInitialControlValueIfNeeded() {
|
|
496
|
+
if (!this.control)
|
|
497
|
+
return;
|
|
498
|
+
const modelValue = this.control.value;
|
|
499
|
+
const normalized = getValueWithUnit(modelValue, this.config);
|
|
500
|
+
const target = this.hasUnits ? normalized : normalized.value;
|
|
501
|
+
if (!isEqual(modelValue, target))
|
|
502
|
+
this.control.setValue(target, { emitEvent: false });
|
|
503
|
+
this._value = normalized;
|
|
504
|
+
}
|
|
496
505
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdInputComponent, deps: [{ token: i1.QdFormsActionEmitterService }, { token: i2.QdFormOptionsResolverRegistry }, { token: i3.ControlContainer, host: true, optional: true, skipSelf: true }, { token: i4.QdEventBrokerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
497
506
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdInputComponent, selector: "qd-input", inputs: { formControlName: "formControlName", value: "value", config: "config", isError: "isError", testId: ["data-test-id", "testId"] }, outputs: { valueChange: "valueChange", enterClick: "enterClick", clickClear: "clickClear", clickHint: "clickHint", clickReadonly: "clickReadonly", clickViewonly: "clickViewonly" }, host: { properties: { "class.qd-input-readonly": "this.readonly", "class.qd-input--readonly-action": "this.readonlyAction", "class.qd-input-viewonly": "this.viewonly", "class.qd-input--viewonly-action": "this.viewonlyAction", "class.qd-form-hint-action": "this.hintAction", "class.qd-input-hint-action": "this.hintAction", "class.qd-form-disabled": "this.disabled", "class.qd-input-disabled": "this.disabled", "class.qd-input-focus": "this.isInputFocused", "class.qd-form-error": "this.hasError", "class.qd-input-error": "this.hasError", "class.qd-input-error-from-outside": "this.isErrorFromOutside" } }, providers: [
|
|
498
507
|
{
|
|
@@ -598,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
598
607
|
type: ViewChild,
|
|
599
608
|
args: ['input']
|
|
600
609
|
}] } });
|
|
601
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQVVuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsZUFBZSxFQUNmLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsY0FBYyxFQUNkLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFD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Z0JBSVAsUUFBUTtzQkFEUCxXQUFXO3VCQUFDLHlCQUF5QjtnQkFJdEMsY0FBYztzQkFEYixXQUFXO3VCQUFDLGlDQUFpQztnQkFJOUMsUUFBUTtzQkFEUCxXQUFXO3VCQUFDLHlCQUF5QjtnQkFJdEMsY0FBYztzQkFEYixXQUFXO3VCQUFDLGlDQUFpQztnQkFLOUMsVUFBVTtzQkFGVCxXQUFXO3VCQUFDLDJCQUEyQjs7c0JBQ3ZDLFdBQVc7dUJBQUMsNEJBQTRCO2dCQUt6QyxRQUFRO3NCQUZQLFdBQVc7dUJBQUMsd0JBQXdCOztzQkFDcEMsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBSXRDLGNBQWM7c0JBRGIsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBTS9CLFFBQVE7c0JBRlgsV0FBVzt1QkFBQyxxQkFBcUI7O3NCQUNqQyxXQUFXO3VCQUFDLHNCQUFzQjtnQkFNL0Isa0JBQWtCO3NCQURyQixXQUFXO3VCQUFDLG1DQUFtQztnQkFNaEQsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtc3RyaWN0LWlnbm9yZVxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgU2tpcFNlbGYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUWRGb2N1c2FibGUgfSBmcm9tICcuLi8uLi9jb3JlL2ZvY3VzYWJsZS9mb2N1c2FibGUnO1xuaW1wb3J0IHsgUURfRk9DVVNBQkxFX1RPS0VOIH0gZnJvbSAnLi4vLi4vY29yZS9mb2N1c2FibGUvZm9jdXNhYmxlLnRva2VuJztcbmltcG9ydCB7IFFkRXZlbnRCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9ldmVudC1icm9rZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRWYWx1ZVdpdGhVbml0IH0gZnJvbSAnLi9oZWxwZXJzL2dldC12YWx1ZS13aXRoLXVuaXQnO1xuXG5pbXBvcnQgeyBRZFBvcG92ZXJTaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9wb3BvdmVyL3BvcG92ZXItc2l6aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRGb3JtT3B0aW9uc1Jlc29sdmVyIH0gZnJvbSAnLi4vbW9kZWwvZm9ybS1vcHRpb25zLXJlc29sdmVyJztcbmltcG9ydCB7XG4gIFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbixcbiAgUWRJbnB1dE1vZGUsXG4gIFFkSW5wdXRUeXBlLFxuICBRZElucHV0VmFsdWUsXG4gIFFkSW5wdXRWYWx1ZVdpdGhVbml0XG59IGZyb20gJy4uL21vZGVsL2Zvcm1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvcm1JbnB1dE9wdGlvbiB9IGZyb20gJy4uL21vZGVsL29wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9yZWFjdGl2ZS1mb3Jtcy9jb250cm9scy9mb3JtLWNvbnRyb2wnO1xuaW1wb3J0IHtcbiAgZ2V0Q2xlYXJhYmxlLFxuICBnZXREaXNhYmxlZCxcbiAgZ2V0SGFzQXV0b2ZvY3VzLFxuICBnZXRIaW50LFxuICBnZXRIaW50QWN0aW9uLFxuICBnZXRJbnB1dE1vZGUsXG4gIGdldElucHV0VHlwZSxcbiAgZ2V0TGFiZWwsXG4gIGdldFBsYWNlaG9sZGVyLFxuICBnZXRSZWFkb25seSxcbiAgZ2V0UmVhZG9ubHlBY3Rpb24sXG4gIGdldFZhbHVlLFxuICBnZXRWaWV3b25seSxcbiAgZ2V0Vmlld29ubHlBY3Rpb25cbn0gZnJvbSAnLi4vc2hhcmVkL2hlbHBlcnMvZm9ybXMuaGVscGVycyc7XG5pbXBvcnQgeyBRZEZvcm1zQWN0aW9uRW1pdHRlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvYWN0aW9uLWVtaXR0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRZEZvcm1PcHRpb25zUmVzb2x2ZXJSZWdpc3RyeSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9vcHRpb25zLXJlc29sdmVyLnJlZ2lzdHJ5JztcblxuLyoqXG4gKiBUaGUgKipRZElucHV0KiogY29tcG9uZW50IHByb3ZpZGVzIGEgRm9ybUVsZW1lbnQgZm9yIGVudGVyaW5nIHRleHQgaW50byBhIFVJLjxiciAvPlxuICogSXQgY2FuIGJlIHVzZWQgd2l0aCBRdWFkcmVsIFJlYWN0aXZlIEZvcm1zIG9yIHdpdGggbW9kZWwgYmluZGluZy5cbiAqXG4gKiAjIyMgKipVc2FnZSB3aXRoIFJlYWN0aXZlIEZvcm1zKipcbiAqXG4gKiBgYGB0c1xuICogZm9ybSA9IG5ldyBRZEZvcm1Hcm91cCh7XG4gKiAgIGlucHV0OiBuZXcgUWRGb3JtQ29udHJvbCgpXG4gKiB9KTtcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gKiAgIDxxZC1pbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0XCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWlucHV0PlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogIyMjICoqVXNhZ2Ugd2l0aCBNb2RlbCBCaW5kaW5nKipcbiAqIGBgYHRzXG4gKiB2YWx1ZTtcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLWlucHV0IFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWlucHV0PlxuICogYGBgXG4gKlxuICogIyMgKipTdWdnZXN0ZWQgT3B0aW9ucyoqXG4gKlxuICogIyMjICoqU3RhdGljIG9wdGlvbnMgYnkgY29uZmlnKipcbiAqXG4gKiBTdGF0aWMgb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgY29uZmlnIGBvcHRpb25zYCBmaWVsZDpcbiAqXG4gKiBgYGB0c1xuICogY29uZmlnOiBRZEZvcm1JbnB1dENvbmZpZ3VyYXRpb24gPSB7XG4gKiAgIC4uLlxuICogICBvcHRpb25zOiBbXG4gKiAgICAgeyBpMThuOiAnaTE4bi5xZC5leGFtcGxlRm9ybUZpZWxkLmdvb2RzRGVjbGFyYXRpb24uaW1wb3J0JywgdmFsdWU6ICdpbXBvcnQnIH0sXG4gKiAgICAgeyBpMThuOiAnaTE4bi5xZC5leGFtcGxlRm9ybUZpZWxkLmdvb2RzRGVjbGFyYXRpb24uZXhwb3J0JywgdmFsdWU6ICdleHBvcnQnIH0sXG4gKiAgICAgeyBpMThuOiAnaTE4bi5xZC5leGFtcGxlRm9ybUZpZWxkLmdvb2RzRGVjbGFyYXRpb24udHJhbnNpdCcsIHZhbHVlOiAndHJhbnNpdCcsIGRpc2FibGVkOiB0cnVlIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8cWQtaW5wdXQgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWlucHV0PlxuICogYGBgXG4gKlxuICogPFN0b3J5IGlkPVwiY29tcG9uZW50cy1ncmlkLXN5c3RlbS1jb250YWluZXItLWNvbHVtbnMtNlwiIC8+XG4gKlxuICogIyMjICoqRHluYW1pYyBvcHRpb25zIGJ5IHJlc29sdmVyKipcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBkZWZpbmUgdGhlIG9wdGlvbnMgZHluYW1pY2FsbHksIHlvdSBjYW4gaW5qZWN0IGEgYFFkRm9ybU9wdGlvbnNSZXNvbHZlcmBcbiAqIHdpdGggdGhlIGBRRF9GT1JNX09QVElPTlNfUkVTT0xWRVJgIGluamVjdGlvbiB0b2tlbi4gVGhlIHJlc29sdmVyIGp1c3QgaGFzIHRvIGltcGxlbWVudCB0aGUgYHJlc29sdmVyYFxuICogbWV0aG9kLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgWW91ckZvcm1PcHRpb25zUmVzb2x2ZXIgaW1wbGVtZW50cyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIge1xuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHt9XG4gKlxuICogICByZXNvbHZlKHZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFFkRm9ybUlucHV0W10+IHtcbiAqICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gKiAgICAgICAuZ2V0KHlvdXJCYWNrZW5kVXJsKVxuICogICAgICAgLnBpcGUoXG4gKiAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICogICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3lvdXIgZXJyb3IgbWVzc2FnZScpO1xuICpcbiAqICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gKiAgICAgICAgIH0pXG4gKiAgICAgICApO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqIFRoZSBvcHRpb25zIHJlc29sdmVyIGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIGBRZElucHV0YCBvciBhbHNvIGludG8gYSBwYXJlbnRcbiAqIGNvbXBvbmVudC4gSWYgeW91IG5lZWQgZHluYW1pYyBvcHRpb25zIGZvciB0aGUgc2VhcmNoIGluIHRoZSBzZWN0aW9uIHRvb2xiYXIsIHlvdSBjYW4gaW5qZWN0XG4gKiB0aGUgcmVzb2x2ZXIgb24gYSBoaWdoZXIgbGV2ZWwsIGUuZy4gaW4gdGhlIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBzZWN0aW9uLlxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgLi4uXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIC4uLlxuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IFFEX0ZPUk1fT1BUSU9OU19SRVNPTFZFUixcbiAqICAgICAgIHVzZUNsYXNzOiBZb3VyRm9ybU9wdGlvbnNSZXNvbHZlclxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGBgYFxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoZSByZXNvbHZlciBpcyBhcHBsaWVkIHRvIGV2ZXJ5IGlucHV0IHRoYXQgaXMgaW5zaWRlIHRoZSBjb21wb25lbnQgdGhhdCBpbmplY3RzIHRoZSByZXNvbHZlci5cbiAqIFRvIGRpc2FibGUgdGhlIHJlc29sdmVyIGZvciBhbiBpbnB1dCwgeW91IGhhdmUgdG8gc2V0IHRoZSBgb3B0aW9uc1Jlc29sdmVyTmFtZWAgcHJvcGVydHkgaW4gdGhlXG4gKiBpbnB1dCBjb25maWcgdG8gYG51bGxgLiBJdCdzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGEgYG5hbWVgIGZvciB0aGUgcmVzb2x2ZXIgYnkgc2V0dGluZyB0aGUgYG5hbWVgIHByb3BlcnR5XG4gKiBpbiB0aGUgcmVzb2x2ZXIgY2xhc3MuIFRodXMsIHlvdSBjYW4gY29ubmVjdCB0aGUgaW5wdXQgdG8gYSBzcGVjaWZpYyByZXNvbHZlci4gQmVsb3cgdGhlcmUgaXMgYWxzbyBhXG4gKiBkZXNjcmlwdGlvbiBvZiBob3cgdG8gdXNlIG11bHRpcGxlIGlucHV0cyB3aXRoIGRpZmZlcmVudCByZXNvbHZlcnMgaW4gb25lIGNvbXBvbmVudC5cbiAqIDxicj48YnI+XG4gKlxuICogIyMjIyAqKk11bHRpcGxlIGlucHV0cyB3aXRoIHN1Z2dlc3RlZCBvcHRpb25zKipcbiAqXG4gKiBGb3IgbXVsdGlwbGUgaW5wdXRzIHdpdGggdmFyaW91cyByZXNvbHZlcnMgaW4gb25lIGNvbXBvbmVudCB5b3UgY2FuIGRpc3Rpbmd1aXNoIHRoZSByZXNvbHZlcnMgYnkgc2V0dGluZyB0aGVcbiAqIGBuYW1lYCBhcyBhIHByb3BlcnR5IGluIHRoZSByZXNvbHZlciBjbGFzcy5cbiAqXG4gKiBgYGB0c1xuICogQEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIEZydWl0c0Zvcm1PcHRpb25zUmVzb2x2ZXIgaW1wbGVtZW50cyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIge1xuICogICBuYW1lID0gJ2ZydWl0cyc7XG4gKiAgIC8vIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBDb3VudHJpZXNGb3JtT3B0aW9uc1Jlc29sdmVyIGltcGxlbWVudHMgUWRGb3JtT3B0aW9uc1Jlc29sdmVyIHtcbiAqICAgbmFtZSA9ICdjb3VudHJpZXMnO1xuICogICAvLyAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZW4gdGhlIGlucHV0IGNhbiBiZSBhc3NpZ25lZCB0byBhIHJlc29sdmVyIGJ5IHNldHRpbmcgdGhlIGBvcHRpb25zUmVzb2x2ZXJOYW1lYCBwcm9wZXJ0eVxuICogaW4gdGhlIGlucHV0IGNvbmZpZy5cbiAqXG4gKiBgYGB0c1xuICogY29uZmlnOiBRZEZvcm1JbnB1dENvbmZpZ3VyYXRpb24gPSB7XG4gKiAgIC4uLlxuICogICBvcHRpb25zUmVzb2x2ZXJOYW1lOiAnZnJ1aXRzJ1xuICogfVxuICpcbiAqIGNvbmZpZzI6IFFkRm9ybUlucHV0Q29uZmlndXJhdGlvbiA9IHtcbiAqICAgLi4uXG4gKiAgIG9wdGlvbnNSZXNvbHZlck5hbWU6ICdjb3VudHJpZXMnXG4gKiB9XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDxxZC1pbnB1dCBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gKiA8cWQtaW5wdXQgW2NvbmZpZ109XCJjb25maWcyXCI+PC9xZC1pbnB1dD5cbiAqIGBgYFxuICogVG8gaW5qZWN0IG11bHRpcGxlIHJlc29sdmVycyBpbiBhIGNvbXBvbmVudCB5b3UgY2FuIHVzZSB0aGUgcHJvdmlkZXIgc2V0dGluZyBgbXVsdGk6IHRydWVgLlxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgLi4uXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIC4uLlxuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IFFEX0ZPUk1fT1BUSU9OU19SRVNPTFZFUixcbiAqICAgICAgIHVzZUNsYXNzOiBGcnVpdHNGb3JtT3B0aW9uc1Jlc29sdmVyLFxuICogICAgICAgbXVsdGk6IHRydWVcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IFFEX0ZPUk1fT1BUSU9OU19SRVNPTFZFUixcbiAqICAgICAgIHVzZUNsYXNzOiBDb3VudHJpZXNGb3JtT3B0aW9uc1Jlc29sdmVyLFxuICogICAgICAgbXVsdGk6IHRydWVcbiAqICAgICB9XG4gKiAgIF1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMjICoqQ3VzdG9tIGxvYWRpbmcgYW5kIGVycm9yIGhpbnRzKipcbiAqXG4gKiBJbiB0aGUgcmVzb2x2ZXIgeW91IGFsc28gY2FuIGRlZmluZSBjdXN0b20gbG9hZGluZyBhbmQgZXJyb3IgaGludHMgd2l0aCB0aGUgcHJvcGVydGllcyBgcmVxdWVzdExvYWRpbmdIaW50YFxuICogYW5kIGByZXF1ZXN0RXJyb3JIaW50YC5cbiAqXG4gKiBgYGB0c1xuICogQEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIFlvdXJGb3JtT3B0aW9uc1Jlc29sdmVyIGltcGxlbWVudHMgUWRGb3JtT3B0aW9uc1Jlc29sdmVyIHtcbiAqICAgcmVxdWVzdExvYWRpbmdIaW50ID0geyBpMThuOiAnaTE4bi5jdXN0b20ub3B0aW9ucy5sb2FkaW5nJyB9O1xuICogICByZXF1ZXN0RXJyb3JIaW50ID0geyBpMThuOiAnaTE4bi5jdXN0b20ub3B0aW9ucy5lcnJvcicgfTtcbiAqXG4gKiAgIC8vIC4uLlxuICpcbiAqICAgcmVzb2x2ZSh2YWx1ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxRZEZvcm1JbnB1dFtdPiB7XG4gKiAgICAgLy8gLi4uXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICogWW91IGFsc28gY2FuIHVwZGF0ZSB0aGUgZXJyb3IgaGludCBkaXJlY3RseSBpbiB0aGUgcmVzb2x2ZSBtZXRob2QgdG8gZGlzcGxheSBhIG1vcmUgc3BlY2lmaWMgZXJyb3JcbiAqIG1lc3NhZ2Ugd2hlbiBhbiBlcnJvciBvY2N1cnMuXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBZb3VyRm9ybU9wdGlvbnNSZXNvbHZlciBpbXBsZW1lbnRzIFFkRm9ybU9wdGlvbnNSZXNvbHZlciB7XG4gKiAgIC8vIC4uLlxuICpcbiAqICAgY29uc3RydWN0b3IoXG4gKiAgICAgQE9wdGlvbmFsKCkgQEluamVjdChCQUNLRU5EX0VSUk9SX0NPREVTKSBwcml2YXRlIHJlYWRvbmx5IGJhY2tlbmRFcnJvckNvZGVzXG4gKiAgICkge1xuICogICAgIHRoaXMuYmFja2VuZEVycm9yQ29kZXMgPSB0aGlzLmJhY2tlbmRFcnJvckNvZGVzIHx8IHt9O1xuICogICB9XG4gKlxuICogICAvLyAuLi5cbiAqXG4gKiAgIHJlc29sdmUodmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8UWRGb3JtSW5wdXRbXT4ge1xuICogICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAqICAgICAgIC5nZXQoeW91ckJhY2tlbmRVcmwpXG4gKiAgICAgICAucGlwZShcbiAqICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gKiAgICAgICAgICAgaWYgKGVycm9yLmVycm9yPy5lcnJvckNvZGUgJiYgZXJyb3IuZXJyb3IuZXJyb3JDb2RlIGluIHRoaXMuYmFja2VuZEVycm9yQ29kZXMpXG4gKiAgICAgICAgICAgICB0aGlzLnJlcXVlc3RFcnJvckhpbnQgPSB7IGkxOG46ICdFUlJPUi4nICsgZXJyb3IuZXJyb3IuZXJyb3JDb2RlIH07XG4gKiAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICogICAgICAgICB9KVxuICogICAgICAgKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3FkLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogUWRJbnB1dENvbXBvbmVudCxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICBRZEZvcm1zQWN0aW9uRW1pdHRlclNlcnZpY2UsXG4gICAgUWRGb3JtT3B0aW9uc1Jlc29sdmVyUmVnaXN0cnksXG4gICAgLy8gVE9ETzogUmVtb3ZlIHdoZW4gcmVtb3ZpbmcgZGVyaXZlZCBkaXJlY3RpdmVcbiAgICBRZFBvcG92ZXJTaXppbmdTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFFEX0ZPQ1VTQUJMRV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBRZElucHV0Q29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFFkSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgUWRGb2N1c2FibGUge1xuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBuYW1lIGNhbiBiZSBhc3NpZ25lZCBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBSZWFjdGl2ZSBGb3Jtcy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmb3JtIGl0ZW0gdmFsdWUsIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoIE1vZGVsIEJpbmRpbmcuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIDxxZC1pbnB1dCBbKHZhbHVlKV09XCJ2YWx1ZVwiIFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1pbnB1dD5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHZhbHVlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBmb3JtIGl0ZW1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGxhYmVsOiB7IGkxOG46ICdsYWJlbCcgfSxcbiAgICogICBwbGFjZWhvbGRlcjogeyBpMThuOiAncGxhY2Vob2xkZXInIH0sXG4gICAqICAgaGludDogeyBpMThuOiAnaGludCcgfVxuICAgKiB9O1xuICAgKi9cbiAgQElucHV0KClcbiAgY29uZmlnOiBRZEZvcm1JbnB1dENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNldCBjb21wb25lbnQgdG8gXCJlcnJvclwiIGV4dGVybmFsbHkuIE5vIHJlYWN0aXZlIGZvcm1zIHJlcXVpcmVkLiBVc2VkIGZvciBjb21wb25lbnRzIHdpdGhpbiB0aGUgUXVhZHJlbCBVSSBmcmFtZXdvcmsuIFRoaXMgaXMgZG9uZSBieSBhIENTUyBjbGFzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIGlzRXJyb3IgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBzdGF0aWMgdGVzdCBJRCBmb3IgaW50ZWdyYXRpb24gdGVzdHMgY2FuIGJlIHNldC4gPGJyIC8+XG4gICAqIFRoZSB2YWx1ZSBmb3IgdGhlIEhUTUwgYXR0cmlidXRlIFtkYXRhLXRlc3QtaWRdLlxuICAgKi9cbiAgQElucHV0KCdkYXRhLXRlc3QtaWQnKVxuICB0ZXN0SWQgPSAndGV4dC1pbnB1dCc7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICAgKiBPcHRpb25hbGx5IGVtaXRzIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlLCBpbmNsdWRpbmcgdW5pdCAoaWYgY29uZmlndXJlZCkuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFFkSW5wdXRWYWx1ZSB8IFFkSW5wdXRWYWx1ZVdpdGhVbml0IHwgdW5kZWZpbmVkPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC4gTm90ZTogRW1pdHMgb24ga2V5dXAgKG5vIGxvbmdlciBvbiBjbGljaywgYXMgYmVmb3JlKSFcbiAgICogT3B0aW9uYWxseSBlbWl0cyB0aGUgY3VycmVudCBpbnB1dCB2YWx1ZSwgaW5jbHVkaW5nIHVuaXQgKGlmIGNvbmZpZ3VyZWQpLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGVudGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFFkSW5wdXRWYWx1ZSB8IFFkSW5wdXRWYWx1ZVdpdGhVbml0IHwgdW5kZWZpbmVkPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSBpbnB1dCBmaWVsZCB3YXMgbGFwcGVkIG9uIGNsaWNrL3RhcCBvbiB0aGUgeCBpY29uLiA8YnIgLz5cbiAgICogYFFkRm9ybUlucHV0Q29uZmlndXJhdGlvblsnY2xlYXJhYmxlJ11gIG11c3QgYmUgc2V0IHRvIHRydWUgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY2xpY2tDbGVhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgaGludCBpcyBjbGlja2VkL3RhcHBlZC4gYGhpbnRBY3Rpb25gIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja0hpbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHJlYWRvbmx5IHZhbHVlIGlzIGNsaWNrZWQvdGFwcGVkLiBgY2xpY2tSZWFkb25seSBgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbGlja1JlYWRvbmx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSB2aWV3b25seSB2YWx1ZSBpcyBjbGlja2VkL3RhcHBlZC4gYGNsaWNrVmlld29ubHkgYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY2xpY2tWaWV3b25seSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LXJlYWRvbmx5JylcbiAgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC0tcmVhZG9ubHktYWN0aW9uJylcbiAgcmVhZG9ubHlBY3Rpb24gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LXZpZXdvbmx5JylcbiAgdmlld29ubHk6IGJvb2xlYW47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC0tdmlld29ubHktYWN0aW9uJylcbiAgdmlld29ubHlBY3Rpb24gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWZvcm0taGludC1hY3Rpb24nKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LWhpbnQtYWN0aW9uJylcbiAgaGludEFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1kaXNhYmxlZCcpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtZGlzYWJsZWQnKVxuICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LWZvY3VzJylcbiAgaXNJbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgYXJlVW5pdHNPcGVuZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWZvcm0tZXJyb3InKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LWVycm9yJylcbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wudG91Y2hlZCAmJiB0aGlzLmNvbnRyb2wuaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC1lcnJvci1mcm9tLW91dHNpZGUnKVxuICBnZXQgaXNFcnJvckZyb21PdXRzaWRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRXJyb3I7XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbnB1dCcpXG4gIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICBpbnB1dFR5cGU6IFFkSW5wdXRUeXBlO1xuICBpbnB1dE1vZGU6IFFkSW5wdXRNb2RlO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBoaW50OiBzdHJpbmc7XG4gIGNsZWFyYWJsZTogYm9vbGVhbjtcbiAgaGFzQXV0b2ZvY3VzOiBib29sZWFuO1xuICBoYXNPcHRpb25zID0gZmFsc2U7XG4gIF92YWx1ZTogUWRJbnB1dFZhbHVlV2l0aFVuaXQgPSB7IHZhbHVlOiAnJyB9O1xuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBRZEZvcm1Db250cm9sPGFueT47XG5cbiAgcHJpdmF0ZSBfb3B0aW9uc1Jlc29sdmVyITogUWRGb3JtT3B0aW9uc1Jlc29sdmVyIHwgbnVsbDtcbiAgcHJpdmF0ZSBfc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcml2YXRlIF9vbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2g6IGFueSA9ICgpID0+IHt9O1xuXG4gIGdldCBoYXNPbmx5VW5pdHNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNFcXVhbChPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2wuZXJyb3JzKSwgWydyZXF1aXJlZCddKSAmJiB0aGlzLl92YWx1ZS52YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBnZXQgaGFzVW5pdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy51bml0cz8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBudW1iZXJPZkNoYXJhY3RlcnMoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuX3ZhbHVlLnZhbHVlKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBTdHJpbmcodGhpcy5fdmFsdWUudmFsdWUpLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBoYXNNYXhMZW5ndGgoKTogYm9vbGVhbiB7XG4gICAgaWYgKCEodGhpcy5jb250cm9sIGluc3RhbmNlb2YgUWRGb3JtQ29udHJvbCkpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0aGlzLmNvbnRyb2wuaGFzTWF4TGVuZ3RoKCk7XG4gIH1cblxuICBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgaWYgKCEodGhpcy5jb250cm9sIGluc3RhbmNlb2YgUWRGb3JtQ29udHJvbCkpIHJldHVybjtcblxuICAgIHJldHVybiB0aGlzLmNvbnRyb2wuZ2V0TWF4TGVuZ3RoT3JVbmRlZmluZWQoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZUFzTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtgJHt0aGlzLl92YWx1ZS52YWx1ZX0ke3RoaXMuX3ZhbHVlLnVuaXQgPyAnICcgKyB0aGlzLl92YWx1ZS51bml0IDogJyd9YF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbkVtaXR0ZXJTZXJ2aWNlOiBRZEZvcm1zQWN0aW9uRW1pdHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlclJlZ2lzdHJ5OiBRZEZvcm1PcHRpb25zUmVzb2x2ZXJSZWdpc3RyeSxcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50QnJva2VyU2VydmljZTogUWRFdmVudEJyb2tlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnNSZXNvbHZlcigpO1xuICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sQ29udGFpbmVyKSB7XG4gICAgICBpZiAodGhpcy5mb3JtQ29udHJvbE5hbWUpIHtcbiAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgICAvLyBUT0RPIHJlbW92ZSBsb2dpYyBmb3Igc3VwcG9ydCBvZiBhbmd1bGFyIEZvcm1Db250cm9sIHdpdGggYW5ndWxhciAxOCB1cGRhdGVcbiAgICAgICAgaWYgKCEodGhpcy5jb250cm9sIGluc3RhbmNlb2YgUWRGb3JtQ29udHJvbCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1FELVVJIHwgUWRJbnB1dENvbXBvbmVudCAtIFBsZWFzZSB1c2UgdGhlIFFkRm9ybUNvbnRyb2wgaW5zdGVhZCBvZiB0aGUgQW5ndWxhciBGb3JtQ29udHJvbCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUgfHwgZ2V0VmFsdWUodGhpcy5jb25maWcpKTtcblxuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYWN0aW9uRW1pdHRlclNlcnZpY2UuaGludEV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tIaW50LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYWN0aW9uRW1pdHRlclNlcnZpY2UucmVhZG9ubHlFdmVudEVtaXR0ZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsaWNrUmVhZG9ubHkuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS52aWV3b25seUV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tWaWV3b25seS5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmluaXRPcE1vZGVTdWJzY3JpcHRpb24oKSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddKSB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgZm5TdHJpbmcgPSBmbi50b1N0cmluZygpO1xuXG4gICAgaWYgKGZuU3RyaW5nLmluY2x1ZGVzKCdfbm9Db250cm9sRXJyb3InKSB8fCBmblN0cmluZy5pbmNsdWRlcygndmFsaWRhdGVDb250cm9sUHJlc2VuY2VPbkNoYW5nZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcblxuICAgIGZuKHRoaXMuaGFzVW5pdHMgPyB0aGlzLl92YWx1ZSA6IHRoaXMuX3ZhbHVlLnZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoID0gZm47XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBRZElucHV0VmFsdWVXaXRoVW5pdCB8IFFkSW5wdXRWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gZ2V0VmFsdWVXaXRoVW5pdCh2YWx1ZSwgdGhpcy5jb25maWcpO1xuXG4gICAgdGhpcy5fb25DaGFuZ2UodGhpcy5oYXNVbml0cyA/IHRoaXMuX3ZhbHVlIDogdGhpcy5fdmFsdWUudmFsdWUpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLmNsZWFyYWJsZSA9IGdldENsZWFyYWJsZSh0aGlzLmNvbmZpZykgJiYgIXRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICBoYW5kbGVJbnB1dChldmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0geyAuLi50aGlzLl92YWx1ZSwgdmFsdWUgfTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICAgIHRoaXMuX29uVG91Y2goKTtcbiAgfVxuXG4gIGhhbmRsZU9wdGlvblNlbGVjdGVkKG9wdGlvbjogUWRGb3JtSW5wdXRPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHsgLi4udGhpcy5fdmFsdWUsIHZhbHVlOiBvcHRpb24uaTE4biB9O1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChvcHRpb24udmFsdWUpO1xuICAgIHRoaXMuX29uQ2hhbmdlKG9wdGlvbi52YWx1ZSk7XG4gICAgdGhpcy5fb25Ub3VjaCgpO1xuICB9XG5cbiAgaGFuZGxlVW5pdENoYW5nZSh1bml0KTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB7IC4uLnRoaXMuX3ZhbHVlLCB1bml0IH07XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgfVxuXG4gIGhhbmRsZUlucHV0Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVJbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXJlVW5pdHNPcGVuZWQpIHRoaXMuX29uVG91Y2goKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgaGFuZGxlVW5pdHNPcGVuZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcmVVbml0c09wZW5lZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVVbml0c0Nsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFyZVVuaXRzT3BlbmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fdmFsdWUudW5pdCAmJiB0aGlzLl92YWx1ZS52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb25Ub3VjaCgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFySW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB7IC4uLnRoaXMuX3ZhbHVlLCB2YWx1ZTogJycgfTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICAgIHRoaXMuY2xpY2tDbGVhci5lbWl0KCk7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBlbWl0RW50ZXJDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNVbml0cykge1xuICAgICAgdGhpcy5lbnRlckNsaWNrLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudGVyQ2xpY2suZW1pdCh0aGlzLl92YWx1ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFR5cGUgPSBnZXRJbnB1dFR5cGUodGhpcy5jb25maWcpO1xuICAgIHRoaXMuaW5wdXRNb2RlID0gZ2V0SW5wdXRNb2RlKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gZ2V0UGxhY2Vob2xkZXIodGhpcy5jb25maWcpO1xuICAgIHRoaXMubGFiZWwgPSBnZXRMYWJlbCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5oaW50ID0gZ2V0SGludCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5yZWFkb25seSA9IGdldFJlYWRvbmx5KHRoaXMuY29uZmlnLCB0aGlzLnJlYWRvbmx5KTtcbiAgICB0aGlzLnZpZXdvbmx5ID0gZ2V0Vmlld29ubHkodGhpcy5jb25maWcsIHRoaXMudmlld29ubHkpO1xuICAgIHRoaXMuaGludEFjdGlvbiA9IGdldEhpbnRBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMucmVhZG9ubHlBY3Rpb24gPSBnZXRSZWFkb25seUFjdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy52aWV3b25seUFjdGlvbiA9IGdldFZpZXdvbmx5QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRpc2FibGVkID0gZ2V0RGlzYWJsZWQodGhpcy5jb25maWcpIHx8ICEhdGhpcy5jb250cm9sPy5kaXNhYmxlZDtcbiAgICB0aGlzLmNsZWFyYWJsZSA9ICF0aGlzLmRpc2FibGVkICYmIGdldENsZWFyYWJsZSh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5oYXNBdXRvZm9jdXMgPSBnZXRIYXNBdXRvZm9jdXModGhpcy5jb25maWcpO1xuICAgIHRoaXMuaGFzT3B0aW9ucyA9ICh0aGlzLmNvbmZpZy5vcHRpb25zICYmIHRoaXMuY29uZmlnLm9wdGlvbnMubGVuZ3RoID4gMCkgfHwgISF0aGlzLl9vcHRpb25zUmVzb2x2ZXI7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVPcHRpb25zUmVzb2x2ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNvbHZlclJlZ2lzdHJ5LmluaXRpYWxpemUodGhpcy5jb25maWc/Lm9wdGlvbnNSZXNvbHZlck5hbWUpO1xuICAgIHRoaXMuX29wdGlvbnNSZXNvbHZlciA9IHRoaXMucmVzb2x2ZXJSZWdpc3RyeS5maW5kUmVzb2x2ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1VuaXRzKSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUudmFsdWUpO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24gfCB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZXZlbnRCcm9rZXJTZXJ2aWNlKSByZXR1cm47XG5cbiAgICByZXR1cm4gdGhpcy5ldmVudEJyb2tlclNlcnZpY2UuY29uc3VtZTx7IGlzVmlld29ubHk6IGJvb2xlYW4gfT4oJ29wZXJhdGlvbl9tb2RlX2NoYW5nZWQnKS5zdWJzY3JpYmUodG9waWMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy52aWV3b25seSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm47XG5cbiAgICAgIHRoaXMudmlld29ubHkgPSBnZXRWaWV3b25seSh0aGlzLmNvbmZpZywgdG9waWMucGF5bG9hZC5pc1ZpZXdvbmx5KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cInZpZXdvbmx5XCJcbiAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmICFoYXNPcHRpb25zXCI+XG4gIDxkaXYgY2xhc3M9XCJxZC1pbnB1dC1pbnB1dFwiIChrZXlkb3duLmVudGVyKT1cImVtaXRFbnRlckNsaWNrKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRCb3hcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJxZC1pbnB1dC1jaGFyYWN0ZXItY291bnRlclwiICpuZ0lmPVwiaGFzTWF4TGVuZ3RoXCI+e3sgbnVtYmVyT2ZDaGFyYWN0ZXJzIH19IC8ge3sgbWF4TGVuZ3RoIH19PC9zcGFuPlxuXG4gIDxxZC1mb3JtLWhpbnRcbiAgICBbaGludF09XCJoaW50XCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmIGhhc09wdGlvbnNcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicWQtaW5wdXQtaW5wdXRcIlxuICAgIHFkSW5wdXRPcHRpb25zXG4gICAgW3FkUG9wb3Zlck1pbldpZHRoXT1cIjIwMFwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFt2YWx1ZV09XCJfdmFsdWUudmFsdWVcIlxuICAgIChvcHRpb25TZWxlY3RlZCk9XCJoYW5kbGVPcHRpb25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAoZW50ZXJDbGljayk9XCJlbWl0RW50ZXJDbGljaygpXCJcbiAgPlxuICAgIDwhLS0gaGFuZGxlIChlbnRlckNsaWNrKSBieSBvcHRpb25zIGRpcmVjdGl2ZSBoZXJlIGJlY2F1c2UgZXZlbnQgaGFzIHRvIGJlIGZpcmVkIGFmdGVyIHNlbGVjdGlvbiAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRCb3hcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJxZC1pbnB1dC1jaGFyYWN0ZXItY291bnRlclwiICpuZ0lmPVwiaGFzTWF4TGVuZ3RoXCI+e3sgbnVtYmVyT2ZDaGFyYWN0ZXJzIH19IC8ge3sgbWF4TGVuZ3RoIH19PC9zcGFuPlxuXG4gIDxxZC1mb3JtLWhpbnRcbiAgICBbaGludF09XCJoaW50XCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9kaXY+XG5cbjxxZC1mb3JtLXJlYWRvbmx5XG4gICpuZ0lmPVwicmVhZG9ubHlcIlxuICBbdmFsdWVzXT1cInZhbHVlQXNMaXN0XCJcbiAgW3JlYWRvbmx5QWN0aW9uXT1cInJlYWRvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS1yZWFkb25seT5cblxuPHFkLWZvcm0tdmlld29ubHlcbiAgKm5nSWY9XCJ2aWV3b25seVwiXG4gIFt2YWx1ZXNdPVwidmFsdWVBc0xpc3RcIlxuICBbdmlld29ubHlBY3Rpb25dPVwidmlld29ubHlBY3Rpb25cIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLXZpZXdvbmx5PlxuXG48bmctdGVtcGxhdGUgI2lucHV0Qm94PlxuICA8aW5wdXRcbiAgICAjaW5wdXRcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgIFt2YWx1ZV09XCJoYXNPcHRpb25zID8gKF92YWx1ZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlKSA6IF92YWx1ZS52YWx1ZVwiXG4gICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAgIChmb2N1cyk9XCJoYW5kbGVJbnB1dEZvY3VzKClcIlxuICAgIChibHVyKT1cImhhbmRsZUlucHV0Qmx1cigpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgIFt0eXBlXT1cImlucHV0VHlwZVwiXG4gICAgW2F0dHIuaW5wdXRtb2RlXT1cImlucHV0TW9kZVwiXG4gICAgW3FkQXV0b2ZvY3VzXT1cImhhc0F1dG9mb2N1c1wiXG4gICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctaW5wdXQnXCJcbiAgICBbc3RlcF09XCJjb25maWc/LnN0ZXBcIlxuICAgIHJlcXVpcmVkXG4gIC8+XG4gIDxkaXYgY2xhc3M9XCJxZC1pbnB1dC1zdWZmaXhcIj5cbiAgICA8cWQtaWNvbiAqbmdJZj1cImhhc0Vycm9yICYmICFoYXNPbmx5VW5pdHNFcnJvclwiIGNsYXNzPVwicWQtaW5wdXQtZXJyb3ItaWNvblwiIGljb249XCJleGNsYW1hdGlvbkNpcmNsZVNvbGlkXCI+PC9xZC1pY29uPlxuICAgIDxxZC1pY29uICpuZ0lmPVwiY2xlYXJhYmxlXCIgY2xhc3M9XCJxZC1pbnB1dC1jbGVhcmFibGUtaWNvblwiIGljb249XCJ0aW1lc0xhcmdlXCIgKGNsaWNrKT1cImNsZWFySW5wdXQoKVwiPjwvcWQtaWNvbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRJY29uQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxxZC1pbnB1dC11bml0c1xuICAgICpuZ0lmPVwiaGFzVW5pdHNcIlxuICAgIFt1bml0XT1cIl92YWx1ZS51bml0XCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgKHVuaXRDaGFuZ2UpPVwiaGFuZGxlVW5pdENoYW5nZSgkZXZlbnQpXCJcbiAgICAob3BlbmVkKT1cImhhbmRsZVVuaXRzT3BlbmVkKClcIlxuICAgIChjbG9zZWQpPVwiaGFuZGxlVW5pdHNDbG9zZWQoKVwiXG4gID48L3FkLWlucHV0LXVuaXRzPlxuICA8ZGl2IGNsYXNzPVwicWQtaW5wdXQtc3VmZml4XCIgKm5nSWY9XCJoYXNFcnJvciAmJiBoYXNPbmx5VW5pdHNFcnJvclwiPlxuICAgIDxxZC1pY29uIGNsYXNzPVwicWQtaW5wdXQtZXJyb3ItaWNvblwiIGljb249XCJleGNsYW1hdGlvbkNpcmNsZVNvbGlkXCI+PC9xZC1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
610
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQVVuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsZUFBZSxFQUNmLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsY0FBYyxFQUNkLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFD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ZTtzQkFEZCxLQUFLO2dCQVVOLEtBQUs7c0JBREosS0FBSztnQkFjTixNQUFNO3NCQURMLEtBQUs7Z0JBU04sT0FBTztzQkFETixLQUFLO2dCQVFOLE1BQU07c0JBREwsS0FBSzt1QkFBQyxjQUFjO2dCQVFaLFdBQVc7c0JBRG5CLE1BQU07Z0JBUUUsVUFBVTtzQkFEbEIsTUFBTTtnQkFRRSxVQUFVO3NCQURsQixNQUFNO2dCQU9FLFNBQVM7c0JBRGpCLE1BQU07Z0JBT0UsYUFBYTtzQkFEckIsTUFBTTtnQkFPRSxhQUFhO3NCQURyQixNQUFNO2dCQUlQLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBSXRDLGNBQWM7c0JBRGIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBSTlDLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBSXRDLGNBQWM7c0JBRGIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBSzlDLFVBQVU7c0JBRlQsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUN2QyxXQUFXO3VCQUFDLDRCQUE0QjtnQkFLekMsUUFBUTtzQkFGUCxXQUFXO3VCQUFDLHdCQUF3Qjs7c0JBQ3BDLFdBQVc7dUJBQUMseUJBQXlCO2dCQUl0QyxjQUFjO3NCQURiLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU0vQixRQUFRO3NCQUZYLFdBQVc7dUJBQUMscUJBQXFCOztzQkFDakMsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBTS9CLGtCQUFrQjtzQkFEckIsV0FBVzt1QkFBQyxtQ0FBbUM7Z0JBTWhELFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLXN0cmljdC1pZ25vcmVcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0LFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFFkRm9jdXNhYmxlIH0gZnJvbSAnLi4vLi4vY29yZS9mb2N1c2FibGUvZm9jdXNhYmxlJztcbmltcG9ydCB7IFFEX0ZPQ1VTQUJMRV9UT0tFTiB9IGZyb20gJy4uLy4uL2NvcmUvZm9jdXNhYmxlL2ZvY3VzYWJsZS50b2tlbic7XG5pbXBvcnQgeyBRZEV2ZW50QnJva2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZXZlbnQtYnJva2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VmFsdWVXaXRoVW5pdCB9IGZyb20gJy4vaGVscGVycy9nZXQtdmFsdWUtd2l0aC11bml0JztcblxuaW1wb3J0IHsgUWRQb3BvdmVyU2l6aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvcG9wb3Zlci9wb3BvdmVyLXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFFkRm9ybU9wdGlvbnNSZXNvbHZlciB9IGZyb20gJy4uL21vZGVsL2Zvcm0tb3B0aW9ucy1yZXNvbHZlcic7XG5pbXBvcnQge1xuICBRZEZvcm1JbnB1dENvbmZpZ3VyYXRpb24sXG4gIFFkSW5wdXRNb2RlLFxuICBRZElucHV0VHlwZSxcbiAgUWRJbnB1dFZhbHVlLFxuICBRZElucHV0VmFsdWVXaXRoVW5pdFxufSBmcm9tICcuLi9tb2RlbC9mb3Jtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUWRGb3JtSW5wdXRPcHRpb24gfSBmcm9tICcuLi9tb2RlbC9vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvcm1Db250cm9sIH0gZnJvbSAnLi4vcmVhY3RpdmUtZm9ybXMvY29udHJvbHMvZm9ybS1jb250cm9sJztcbmltcG9ydCB7XG4gIGdldENsZWFyYWJsZSxcbiAgZ2V0RGlzYWJsZWQsXG4gIGdldEhhc0F1dG9mb2N1cyxcbiAgZ2V0SGludCxcbiAgZ2V0SGludEFjdGlvbixcbiAgZ2V0SW5wdXRNb2RlLFxuICBnZXRJbnB1dFR5cGUsXG4gIGdldExhYmVsLFxuICBnZXRQbGFjZWhvbGRlcixcbiAgZ2V0UmVhZG9ubHksXG4gIGdldFJlYWRvbmx5QWN0aW9uLFxuICBnZXRWYWx1ZSxcbiAgZ2V0Vmlld29ubHksXG4gIGdldFZpZXdvbmx5QWN0aW9uXG59IGZyb20gJy4uL3NoYXJlZC9oZWxwZXJzL2Zvcm1zLmhlbHBlcnMnO1xuaW1wb3J0IHsgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL2FjdGlvbi1lbWl0dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRGb3JtT3B0aW9uc1Jlc29sdmVyUmVnaXN0cnkgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvb3B0aW9ucy1yZXNvbHZlci5yZWdpc3RyeSc7XG5cbi8qKlxuICogVGhlICoqUWRJbnB1dCoqIGNvbXBvbmVudCBwcm92aWRlcyBhIEZvcm1FbGVtZW50IGZvciBlbnRlcmluZyB0ZXh0IGludG8gYSBVSS48YnIgLz5cbiAqIEl0IGNhbiBiZSB1c2VkIHdpdGggUXVhZHJlbCBSZWFjdGl2ZSBGb3JtcyBvciB3aXRoIG1vZGVsIGJpbmRpbmcuXG4gKlxuICogIyMjICoqVXNhZ2Ugd2l0aCBSZWFjdGl2ZSBGb3JtcyoqXG4gKlxuICogYGBgdHNcbiAqIGZvcm0gPSBuZXcgUWRGb3JtR3JvdXAoe1xuICogICBpbnB1dDogbmV3IFFkRm9ybUNvbnRyb2woKVxuICogfSk7XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICA8cWQtaW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dFwiIFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1pbnB1dD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqICMjIyAqKlVzYWdlIHdpdGggTW9kZWwgQmluZGluZyoqXG4gKiBgYGB0c1xuICogdmFsdWU7XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDxxZC1pbnB1dCBbKHZhbHVlKV09XCJ2YWx1ZVwiIFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1pbnB1dD5cbiAqIGBgYFxuICpcbiAqICMjICoqU3VnZ2VzdGVkIE9wdGlvbnMqKlxuICpcbiAqICMjIyAqKlN0YXRpYyBvcHRpb25zIGJ5IGNvbmZpZyoqXG4gKlxuICogU3RhdGljIG9wdGlvbnMgY2FuIGJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZyBgb3B0aW9uc2AgZmllbGQ6XG4gKlxuICogYGBgdHNcbiAqIGNvbmZpZzogUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uID0ge1xuICogICAuLi5cbiAqICAgb3B0aW9uczogW1xuICogICAgIHsgaTE4bjogJ2kxOG4ucWQuZXhhbXBsZUZvcm1GaWVsZC5nb29kc0RlY2xhcmF0aW9uLmltcG9ydCcsIHZhbHVlOiAnaW1wb3J0JyB9LFxuICogICAgIHsgaTE4bjogJ2kxOG4ucWQuZXhhbXBsZUZvcm1GaWVsZC5nb29kc0RlY2xhcmF0aW9uLmV4cG9ydCcsIHZhbHVlOiAnZXhwb3J0JyB9LFxuICogICAgIHsgaTE4bjogJ2kxOG4ucWQuZXhhbXBsZUZvcm1GaWVsZC5nb29kc0RlY2xhcmF0aW9uLnRyYW5zaXQnLCB2YWx1ZTogJ3RyYW5zaXQnLCBkaXNhYmxlZDogdHJ1ZSB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLWlucHV0IFtjb25maWddPVwiY29uZmlnXCI+PC9xZC1pbnB1dD5cbiAqIGBgYFxuICpcbiAqIDxTdG9yeSBpZD1cImNvbXBvbmVudHMtZ3JpZC1zeXN0ZW0tY29udGFpbmVyLS1jb2x1bW5zLTZcIiAvPlxuICpcbiAqICMjIyAqKkR5bmFtaWMgb3B0aW9ucyBieSByZXNvbHZlcioqXG4gKlxuICogSWYgeW91IHdhbnQgdG8gZGVmaW5lIHRoZSBvcHRpb25zIGR5bmFtaWNhbGx5LCB5b3UgY2FuIGluamVjdCBhIGBRZEZvcm1PcHRpb25zUmVzb2x2ZXJgXG4gKiB3aXRoIHRoZSBgUURfRk9STV9PUFRJT05TX1JFU09MVkVSYCBpbmplY3Rpb24gdG9rZW4uIFRoZSByZXNvbHZlciBqdXN0IGhhcyB0byBpbXBsZW1lbnQgdGhlIGByZXNvbHZlcmBcbiAqIG1ldGhvZC5cbiAqXG4gKiBgYGB0c1xuICogQEluamVjdGFibGUoKVxuICogZXhwb3J0IGNsYXNzIFlvdXJGb3JtT3B0aW9uc1Jlc29sdmVyIGltcGxlbWVudHMgUWRGb3JtT3B0aW9uc1Jlc29sdmVyIHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxuICpcbiAqICAgcmVzb2x2ZSh2YWx1ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxRZEZvcm1JbnB1dFtdPiB7XG4gKiAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICogICAgICAgLmdldCh5b3VyQmFja2VuZFVybClcbiAqICAgICAgIC5waXBlKFxuICogICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAqICAgICAgICAgICBjb25zb2xlLmVycm9yKCd5b3VyIGVycm9yIG1lc3NhZ2UnKTtcbiAqXG4gKiAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICogICAgICAgICB9KVxuICogICAgICAgKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKiBUaGUgb3B0aW9ucyByZXNvbHZlciBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBgUWRJbnB1dGAgb3IgYWxzbyBpbnRvIGEgcGFyZW50XG4gKiBjb21wb25lbnQuIElmIHlvdSBuZWVkIGR5bmFtaWMgb3B0aW9ucyBmb3IgdGhlIHNlYXJjaCBpbiB0aGUgc2VjdGlvbiB0b29sYmFyLCB5b3UgY2FuIGluamVjdFxuICogdGhlIHJlc29sdmVyIG9uIGEgaGlnaGVyIGxldmVsLCBlLmcuIGluIHRoZSBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgc2VjdGlvbi5cbiAqXG4gKiBgYGB0c1xuICogQENvbXBvbmVudCh7XG4gKiAgIC4uLlxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICAuLi5cbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9GT1JNX09QVElPTlNfUkVTT0xWRVIsXG4gKiAgICAgICB1c2VDbGFzczogWW91ckZvcm1PcHRpb25zUmVzb2x2ZXJcbiAqICAgICB9XG4gKiAgIF1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgcmVzb2x2ZXIgaXMgYXBwbGllZCB0byBldmVyeSBpbnB1dCB0aGF0IGlzIGluc2lkZSB0aGUgY29tcG9uZW50IHRoYXQgaW5qZWN0cyB0aGUgcmVzb2x2ZXIuXG4gKiBUbyBkaXNhYmxlIHRoZSByZXNvbHZlciBmb3IgYW4gaW5wdXQsIHlvdSBoYXZlIHRvIHNldCB0aGUgYG9wdGlvbnNSZXNvbHZlck5hbWVgIHByb3BlcnR5IGluIHRoZVxuICogaW5wdXQgY29uZmlnIHRvIGBudWxsYC4gSXQncyBhbHNvIHBvc3NpYmxlIHRvIGRlZmluZSBhIGBuYW1lYCBmb3IgdGhlIHJlc29sdmVyIGJ5IHNldHRpbmcgdGhlIGBuYW1lYCBwcm9wZXJ0eVxuICogaW4gdGhlIHJlc29sdmVyIGNsYXNzLiBUaHVzLCB5b3UgY2FuIGNvbm5lY3QgdGhlIGlucHV0IHRvIGEgc3BlY2lmaWMgcmVzb2x2ZXIuIEJlbG93IHRoZXJlIGlzIGFsc28gYVxuICogZGVzY3JpcHRpb24gb2YgaG93IHRvIHVzZSBtdWx0aXBsZSBpbnB1dHMgd2l0aCBkaWZmZXJlbnQgcmVzb2x2ZXJzIGluIG9uZSBjb21wb25lbnQuXG4gKiA8YnI+PGJyPlxuICpcbiAqICMjIyMgKipNdWx0aXBsZSBpbnB1dHMgd2l0aCBzdWdnZXN0ZWQgb3B0aW9ucyoqXG4gKlxuICogRm9yIG11bHRpcGxlIGlucHV0cyB3aXRoIHZhcmlvdXMgcmVzb2x2ZXJzIGluIG9uZSBjb21wb25lbnQgeW91IGNhbiBkaXN0aW5ndWlzaCB0aGUgcmVzb2x2ZXJzIGJ5IHNldHRpbmcgdGhlXG4gKiBgbmFtZWAgYXMgYSBwcm9wZXJ0eSBpbiB0aGUgcmVzb2x2ZXIgY2xhc3MuXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBGcnVpdHNGb3JtT3B0aW9uc1Jlc29sdmVyIGltcGxlbWVudHMgUWRGb3JtT3B0aW9uc1Jlc29sdmVyIHtcbiAqICAgbmFtZSA9ICdmcnVpdHMnO1xuICogICAvLyAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgQ291bnRyaWVzRm9ybU9wdGlvbnNSZXNvbHZlciBpbXBsZW1lbnRzIFFkRm9ybU9wdGlvbnNSZXNvbHZlciB7XG4gKiAgIG5hbWUgPSAnY291bnRyaWVzJztcbiAqICAgLy8gLi4uXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGVuIHRoZSBpbnB1dCBjYW4gYmUgYXNzaWduZWQgdG8gYSByZXNvbHZlciBieSBzZXR0aW5nIHRoZSBgb3B0aW9uc1Jlc29sdmVyTmFtZWAgcHJvcGVydHlcbiAqIGluIHRoZSBpbnB1dCBjb25maWcuXG4gKlxuICogYGBgdHNcbiAqIGNvbmZpZzogUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uID0ge1xuICogICAuLi5cbiAqICAgb3B0aW9uc1Jlc29sdmVyTmFtZTogJ2ZydWl0cydcbiAqIH1cbiAqXG4gKiBjb25maWcyOiBRZEZvcm1JbnB1dENvbmZpZ3VyYXRpb24gPSB7XG4gKiAgIC4uLlxuICogICBvcHRpb25zUmVzb2x2ZXJOYW1lOiAnY291bnRyaWVzJ1xuICogfVxuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8cWQtaW5wdXQgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLWlucHV0PlxuICogPHFkLWlucHV0IFtjb25maWddPVwiY29uZmlnMlwiPjwvcWQtaW5wdXQ+XG4gKiBgYGBcbiAqIFRvIGluamVjdCBtdWx0aXBsZSByZXNvbHZlcnMgaW4gYSBjb21wb25lbnQgeW91IGNhbiB1c2UgdGhlIHByb3ZpZGVyIHNldHRpbmcgYG11bHRpOiB0cnVlYC5cbiAqXG4gKiBgYGB0c1xuICogQENvbXBvbmVudCh7XG4gKiAgIC4uLlxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICAuLi5cbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9GT1JNX09QVElPTlNfUkVTT0xWRVIsXG4gKiAgICAgICB1c2VDbGFzczogRnJ1aXRzRm9ybU9wdGlvbnNSZXNvbHZlcixcbiAqICAgICAgIG11bHRpOiB0cnVlXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9GT1JNX09QVElPTlNfUkVTT0xWRVIsXG4gKiAgICAgICB1c2VDbGFzczogQ291bnRyaWVzRm9ybU9wdGlvbnNSZXNvbHZlcixcbiAqICAgICAgIG11bHRpOiB0cnVlXG4gKiAgICAgfVxuICogICBdXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIyAqKkN1c3RvbSBsb2FkaW5nIGFuZCBlcnJvciBoaW50cyoqXG4gKlxuICogSW4gdGhlIHJlc29sdmVyIHlvdSBhbHNvIGNhbiBkZWZpbmUgY3VzdG9tIGxvYWRpbmcgYW5kIGVycm9yIGhpbnRzIHdpdGggdGhlIHByb3BlcnRpZXMgYHJlcXVlc3RMb2FkaW5nSGludGBcbiAqIGFuZCBgcmVxdWVzdEVycm9ySGludGAuXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBZb3VyRm9ybU9wdGlvbnNSZXNvbHZlciBpbXBsZW1lbnRzIFFkRm9ybU9wdGlvbnNSZXNvbHZlciB7XG4gKiAgIHJlcXVlc3RMb2FkaW5nSGludCA9IHsgaTE4bjogJ2kxOG4uY3VzdG9tLm9wdGlvbnMubG9hZGluZycgfTtcbiAqICAgcmVxdWVzdEVycm9ySGludCA9IHsgaTE4bjogJ2kxOG4uY3VzdG9tLm9wdGlvbnMuZXJyb3InIH07XG4gKlxuICogICAvLyAuLi5cbiAqXG4gKiAgIHJlc29sdmUodmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8UWRGb3JtSW5wdXRbXT4ge1xuICogICAgIC8vIC4uLlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqIFlvdSBhbHNvIGNhbiB1cGRhdGUgdGhlIGVycm9yIGhpbnQgZGlyZWN0bHkgaW4gdGhlIHJlc29sdmUgbWV0aG9kIHRvIGRpc3BsYXkgYSBtb3JlIHNwZWNpZmljIGVycm9yXG4gKiBtZXNzYWdlIHdoZW4gYW4gZXJyb3Igb2NjdXJzLlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBleHBvcnQgY2xhc3MgWW91ckZvcm1PcHRpb25zUmVzb2x2ZXIgaW1wbGVtZW50cyBRZEZvcm1PcHRpb25zUmVzb2x2ZXIge1xuICogICAvLyAuLi5cbiAqXG4gKiAgIGNvbnN0cnVjdG9yKFxuICogICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQkFDS0VORF9FUlJPUl9DT0RFUykgcHJpdmF0ZSByZWFkb25seSBiYWNrZW5kRXJyb3JDb2Rlc1xuICogICApIHtcbiAqICAgICB0aGlzLmJhY2tlbmRFcnJvckNvZGVzID0gdGhpcy5iYWNrZW5kRXJyb3JDb2RlcyB8fCB7fTtcbiAqICAgfVxuICpcbiAqICAgLy8gLi4uXG4gKlxuICogICByZXNvbHZlKHZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFFkRm9ybUlucHV0W10+IHtcbiAqICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gKiAgICAgICAuZ2V0KHlvdXJCYWNrZW5kVXJsKVxuICogICAgICAgLnBpcGUoXG4gKiAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICogICAgICAgICAgIGlmIChlcnJvci5lcnJvcj8uZXJyb3JDb2RlICYmIGVycm9yLmVycm9yLmVycm9yQ29kZSBpbiB0aGlzLmJhY2tlbmRFcnJvckNvZGVzKVxuICogICAgICAgICAgICAgdGhpcy5yZXF1ZXN0RXJyb3JIaW50ID0geyBpMThuOiAnRVJST1IuJyArIGVycm9yLmVycm9yLmVycm9yQ29kZSB9O1xuICogICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAqICAgICAgICAgfSlcbiAqICAgICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IFFkSW5wdXRDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlLFxuICAgIFFkRm9ybU9wdGlvbnNSZXNvbHZlclJlZ2lzdHJ5LFxuICAgIC8vIFRPRE86IFJlbW92ZSB3aGVuIHJlbW92aW5nIGRlcml2ZWQgZGlyZWN0aXZlXG4gICAgUWRQb3BvdmVyU2l6aW5nU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBRRF9GT0NVU0FCTEVfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogUWRJbnB1dENvbXBvbmVudFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBRZElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFFkRm9jdXNhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgbmFtZSBjYW4gYmUgYXNzaWduZWQgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgUmVhY3RpdmUgRm9ybXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZm9ybSBpdGVtIHZhbHVlLCBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBNb2RlbCBCaW5kaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiA8cWQtaW5wdXQgWyh2YWx1ZSldPVwidmFsdWVcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtaW5wdXQ+XG4gICAqL1xuICBASW5wdXQoKVxuICB2YWx1ZTtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZm9ybSBpdGVtXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICBsYWJlbDogeyBpMThuOiAnbGFiZWwnIH0sXG4gICAqICAgcGxhY2Vob2xkZXI6IHsgaTE4bjogJ3BsYWNlaG9sZGVyJyB9LFxuICAgKiAgIGhpbnQ6IHsgaTE4bjogJ2hpbnQnIH1cbiAgICogfTtcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogUWRGb3JtSW5wdXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTZXQgY29tcG9uZW50IHRvIFwiZXJyb3JcIiBleHRlcm5hbGx5LiBObyByZWFjdGl2ZSBmb3JtcyByZXF1aXJlZC4gVXNlZCBmb3IgY29tcG9uZW50cyB3aXRoaW4gdGhlIFF1YWRyZWwgVUkgZnJhbWV3b3JrLiBUaGlzIGlzIGRvbmUgYnkgYSBDU1MgY2xhc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBpc0Vycm9yID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgc3RhdGljIHRlc3QgSUQgZm9yIGludGVncmF0aW9uIHRlc3RzIGNhbiBiZSBzZXQuIDxiciAvPlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBIVE1MIGF0dHJpYnV0ZSBbZGF0YS10ZXN0LWlkXS5cbiAgICovXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJylcbiAgdGVzdElkID0gJ3RleHQtaW5wdXQnO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAgICogT3B0aW9uYWxseSBlbWl0cyB0aGUgY3VycmVudCBpbnB1dCB2YWx1ZSwgaW5jbHVkaW5nIHVuaXQgKGlmIGNvbmZpZ3VyZWQpLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxRZElucHV0VmFsdWUgfCBRZElucHV0VmFsdWVXaXRoVW5pdCB8IHVuZGVmaW5lZD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQuIE5vdGU6IEVtaXRzIG9uIGtleXVwIChubyBsb25nZXIgb24gY2xpY2ssIGFzIGJlZm9yZSkhXG4gICAqIE9wdGlvbmFsbHkgZW1pdHMgdGhlIGN1cnJlbnQgaW5wdXQgdmFsdWUsIGluY2x1ZGluZyB1bml0IChpZiBjb25maWd1cmVkKS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBlbnRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxRZElucHV0VmFsdWUgfCBRZElucHV0VmFsdWVXaXRoVW5pdCB8IHVuZGVmaW5lZD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgaW5wdXQgZmllbGQgd2FzIGxhcHBlZCBvbiBjbGljay90YXAgb24gdGhlIHggaWNvbi4gPGJyIC8+XG4gICAqIGBRZEZvcm1JbnB1dENvbmZpZ3VyYXRpb25bJ2NsZWFyYWJsZSddYCBtdXN0IGJlIHNldCB0byB0cnVlIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrQ2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGhpbnQgaXMgY2xpY2tlZC90YXBwZWQuIGBoaW50QWN0aW9uYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY2xpY2tIaW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSByZWFkb25seSB2YWx1ZSBpcyBjbGlja2VkL3RhcHBlZC4gYGNsaWNrUmVhZG9ubHkgYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY2xpY2tSZWFkb25seSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgdmlld29ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGBjbGlja1ZpZXdvbmx5IGAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsaWNrVmlld29ubHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC1yZWFkb25seScpXG4gIHJlYWRvbmx5OiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtLXJlYWRvbmx5LWFjdGlvbicpXG4gIHJlYWRvbmx5QWN0aW9uID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC12aWV3b25seScpXG4gIHZpZXdvbmx5OiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtLXZpZXdvbmx5LWFjdGlvbicpXG4gIHZpZXdvbmx5QWN0aW9uID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1mb3JtLWhpbnQtYWN0aW9uJylcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC1oaW50LWFjdGlvbicpXG4gIGhpbnRBY3Rpb24gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWZvcm0tZGlzYWJsZWQnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWlucHV0LWRpc2FibGVkJylcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC1mb2N1cycpXG4gIGlzSW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gIGFyZVVuaXRzT3BlbmVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1mb3JtLWVycm9yJylcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1pbnB1dC1lcnJvcicpXG4gIGdldCBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLnRvdWNoZWQgJiYgdGhpcy5jb250cm9sLmludmFsaWQgOiBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtaW5wdXQtZXJyb3ItZnJvbS1vdXRzaWRlJylcbiAgZ2V0IGlzRXJyb3JGcm9tT3V0c2lkZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Vycm9yO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKVxuICBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgaW5wdXRUeXBlOiBRZElucHV0VHlwZTtcbiAgaW5wdXRNb2RlOiBRZElucHV0TW9kZTtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaGludDogc3RyaW5nO1xuICBjbGVhcmFibGU6IGJvb2xlYW47XG4gIGhhc0F1dG9mb2N1czogYm9vbGVhbjtcbiAgaGFzT3B0aW9ucyA9IGZhbHNlO1xuICBfdmFsdWU6IFFkSW5wdXRWYWx1ZVdpdGhVbml0ID0geyB2YWx1ZTogJycgfTtcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgUWRGb3JtQ29udHJvbDxhbnk+O1xuXG4gIHByaXZhdGUgX29wdGlvbnNSZXNvbHZlciE6IFFkRm9ybU9wdGlvbnNSZXNvbHZlciB8IG51bGw7XG4gIHByaXZhdGUgX3N1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBwcml2YXRlIF9vblRvdWNoOiBhbnkgPSAoKSA9PiB7fTtcblxuICBnZXQgaGFzT25seVVuaXRzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRXF1YWwoT2JqZWN0LmtleXModGhpcy5jb250cm9sLmVycm9ycyksIFsncmVxdWlyZWQnXSkgJiYgdGhpcy5fdmFsdWUudmFsdWUgIT09ICcnO1xuICB9XG5cbiAgZ2V0IGhhc1VuaXRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8udW5pdHM/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgbnVtYmVyT2ZDaGFyYWN0ZXJzKCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLl92YWx1ZS52YWx1ZSkgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3ZhbHVlLnZhbHVlKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgaGFzTWF4TGVuZ3RoKCk6IGJvb2xlYW4ge1xuICAgIGlmICghKHRoaXMuY29udHJvbCBpbnN0YW5jZW9mIFFkRm9ybUNvbnRyb2wpKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5jb250cm9sLmhhc01heExlbmd0aCgpO1xuICB9XG5cbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIGlmICghKHRoaXMuY29udHJvbCBpbnN0YW5jZW9mIFFkRm9ybUNvbnRyb2wpKSByZXR1cm47XG5cbiAgICByZXR1cm4gdGhpcy5jb250cm9sLmdldE1heExlbmd0aE9yVW5kZWZpbmVkKCk7XG4gIH1cblxuICBnZXQgdmFsdWVBc0xpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbYCR7dGhpcy5fdmFsdWUudmFsdWV9JHt0aGlzLl92YWx1ZS51bml0ID8gJyAnICsgdGhpcy5fdmFsdWUudW5pdCA6ICcnfWBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25FbWl0dGVyU2VydmljZTogUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXJSZWdpc3RyeTogUWRGb3JtT3B0aW9uc1Jlc29sdmVyUmVnaXN0cnksXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBldmVudEJyb2tlclNlcnZpY2U6IFFkRXZlbnRCcm9rZXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zUmVzb2x2ZXIoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lcikge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgICAgLy8gVE9ETyByZW1vdmUgbG9naWMgZm9yIHN1cHBvcnQgb2YgYW5ndWxhciBGb3JtQ29udHJvbCB3aXRoIGFuZ3VsYXIgMjAgdXBkYXRlXG4gICAgICAgIGlmICghKHRoaXMuY29udHJvbCBpbnN0YW5jZW9mIFFkRm9ybUNvbnRyb2wpKVxuICAgICAgICAgIGNvbnNvbGUud2FybignUUQtVUkgfCBRZElucHV0Q29tcG9uZW50IC0gUGxlYXNlIHVzZSB0aGUgUWRGb3JtQ29udHJvbCBpbnN0ZWFkIG9mIHRoZSBBbmd1bGFyIEZvcm1Db250cm9sJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUgfHwgZ2V0VmFsdWUodGhpcy5jb25maWcpKTtcblxuICAgIHRoaXMubm9ybWFsaXplSW5pdGlhbENvbnRyb2xWYWx1ZUlmTmVlZGVkKCk7XG5cbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLmhpbnRFdmVudEVtaXR0ZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsaWNrSGludC5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnJlYWRvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1JlYWRvbmx5LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYWN0aW9uRW1pdHRlclNlcnZpY2Uudmlld29ubHlFdmVudEVtaXR0ZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsaWNrVmlld29ubHkuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5pbml0T3BNb2RlU3Vic2NyaXB0aW9uKCkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgdGhpcy51cGRhdGVDb25maWcoKTtcbiAgICAgIHRoaXMubm9ybWFsaXplSW5pdGlhbENvbnRyb2xWYWx1ZUlmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBmblN0cmluZyA9IGZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoZm5TdHJpbmcuaW5jbHVkZXMoJ19ub0NvbnRyb2xFcnJvcicpIHx8IGZuU3RyaW5nLmluY2x1ZGVzKCd2YWxpZGF0ZUNvbnRyb2xQcmVzZW5jZU9uQ2hhbmdlJykpIHJldHVybjtcblxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogUWRJbnB1dFZhbHVlV2l0aFVuaXQgfCBRZElucHV0VmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IGdldFZhbHVlV2l0aFVuaXQodmFsdWUsIHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy5jbGVhcmFibGUgPSBnZXRDbGVhcmFibGUodGhpcy5jb25maWcpICYmICF0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgaGFuZGxlSW5wdXQoZXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHsgLi4udGhpcy5fdmFsdWUsIHZhbHVlIH07XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB0aGlzLl9vblRvdWNoKCk7XG4gIH1cblxuICBoYW5kbGVPcHRpb25TZWxlY3RlZChvcHRpb246IFFkRm9ybUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB7IC4uLnRoaXMuX3ZhbHVlLCB2YWx1ZTogb3B0aW9uLmkxOG4gfTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQob3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLl9vbkNoYW5nZShvcHRpb24udmFsdWUpO1xuICAgIHRoaXMuX29uVG91Y2goKTtcbiAgfVxuXG4gIGhhbmRsZVVuaXRDaGFuZ2UodW5pdCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0geyAuLi50aGlzLl92YWx1ZSwgdW5pdCB9O1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICBoYW5kbGVJbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSB0cnVlO1xuICB9XG5cbiAgaGFuZGxlSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSBmYWxzZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZVVuaXRzT3BlbmVkKSB0aGlzLl9vblRvdWNoKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZVVuaXRzT3BlbmVkKCk6IHZvaWQge1xuICAgIHRoaXMuYXJlVW5pdHNPcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgaGFuZGxlVW5pdHNDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcmVVbml0c09wZW5lZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX3ZhbHVlLnVuaXQgJiYgdGhpcy5fdmFsdWUudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uVG91Y2goKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcklucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0geyAuLi50aGlzLl92YWx1ZSwgdmFsdWU6ICcnIH07XG4gICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB0aGlzLmNsaWNrQ2xlYXIuZW1pdCgpO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgZW1pdEVudGVyQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzVW5pdHMpIHtcbiAgICAgIHRoaXMuZW50ZXJDbGljay5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnRlckNsaWNrLmVtaXQodGhpcy5fdmFsdWUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRUeXBlID0gZ2V0SW5wdXRUeXBlKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmlucHV0TW9kZSA9IGdldElucHV0TW9kZSh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IGdldFBsYWNlaG9sZGVyKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmxhYmVsID0gZ2V0TGFiZWwodGhpcy5jb25maWcpO1xuICAgIHRoaXMuaGludCA9IGdldEhpbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMucmVhZG9ubHkgPSBnZXRSZWFkb25seSh0aGlzLmNvbmZpZywgdGhpcy5yZWFkb25seSk7XG4gICAgdGhpcy52aWV3b25seSA9IGdldFZpZXdvbmx5KHRoaXMuY29uZmlnLCB0aGlzLnZpZXdvbmx5KTtcbiAgICB0aGlzLmhpbnRBY3Rpb24gPSBnZXRIaW50QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnJlYWRvbmx5QWN0aW9uID0gZ2V0UmVhZG9ubHlBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMudmlld29ubHlBY3Rpb24gPSBnZXRWaWV3b25seUFjdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGdldERpc2FibGVkKHRoaXMuY29uZmlnKSB8fCAhIXRoaXMuY29udHJvbD8uZGlzYWJsZWQ7XG4gICAgdGhpcy5jbGVhcmFibGUgPSAhdGhpcy5kaXNhYmxlZCAmJiBnZXRDbGVhcmFibGUodGhpcy5jb25maWcpO1xuICAgIHRoaXMuaGFzQXV0b2ZvY3VzID0gZ2V0SGFzQXV0b2ZvY3VzKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmhhc09wdGlvbnMgPSAodGhpcy5jb25maWcub3B0aW9ucyAmJiB0aGlzLmNvbmZpZy5vcHRpb25zLmxlbmd0aCA+IDApIHx8ICEhdGhpcy5fb3B0aW9uc1Jlc29sdmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplT3B0aW9uc1Jlc29sdmVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVzb2x2ZXJSZWdpc3RyeS5pbml0aWFsaXplKHRoaXMuY29uZmlnPy5vcHRpb25zUmVzb2x2ZXJOYW1lKTtcbiAgICB0aGlzLl9vcHRpb25zUmVzb2x2ZXIgPSB0aGlzLnJlc29sdmVyUmVnaXN0cnkuZmluZFJlc29sdmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNVbml0cykge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlLnZhbHVlKTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRPcE1vZGVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHwgdm9pZCB7XG4gICAgaWYgKCF0aGlzLmV2ZW50QnJva2VyU2VydmljZSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRCcm9rZXJTZXJ2aWNlLmNvbnN1bWU8eyBpc1ZpZXdvbmx5OiBib29sZWFuIH0+KCdvcGVyYXRpb25fbW9kZV9jaGFuZ2VkJykuc3Vic2NyaWJlKHRvcGljID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcudmlld29ubHkgPT09ICdib29sZWFuJykgcmV0dXJuO1xuXG4gICAgICB0aGlzLnZpZXdvbmx5ID0gZ2V0Vmlld29ubHkodGhpcy5jb25maWcsIHRvcGljLnBheWxvYWQuaXNWaWV3b25seSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUluaXRpYWxDb250cm9sVmFsdWVJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udHJvbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9kZWxWYWx1ZSA9ICh0aGlzLmNvbnRyb2wgYXMgYW55KS52YWx1ZTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gZ2V0VmFsdWVXaXRoVW5pdChtb2RlbFZhbHVlLCB0aGlzLmNvbmZpZyk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5oYXNVbml0cyA/IG5vcm1hbGl6ZWQgOiBub3JtYWxpemVkLnZhbHVlO1xuXG4gICAgaWYgKCFpc0VxdWFsKG1vZGVsVmFsdWUsIHRhcmdldCkpICh0aGlzLmNvbnRyb2wgYXMgYW55KS5zZXRWYWx1ZSh0YXJnZXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIHRoaXMuX3ZhbHVlID0gbm9ybWFsaXplZDtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cInZpZXdvbmx5XCJcbiAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmICFoYXNPcHRpb25zXCI+XG4gIDxkaXYgY2xhc3M9XCJxZC1pbnB1dC1pbnB1dFwiIChrZXlkb3duLmVudGVyKT1cImVtaXRFbnRlckNsaWNrKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRCb3hcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJxZC1pbnB1dC1jaGFyYWN0ZXItY291bnRlclwiICpuZ0lmPVwiaGFzTWF4TGVuZ3RoXCI+e3sgbnVtYmVyT2ZDaGFyYWN0ZXJzIH19IC8ge3sgbWF4TGVuZ3RoIH19PC9zcGFuPlxuXG4gIDxxZC1mb3JtLWhpbnRcbiAgICBbaGludF09XCJoaW50XCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmIGhhc09wdGlvbnNcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicWQtaW5wdXQtaW5wdXRcIlxuICAgIHFkSW5wdXRPcHRpb25zXG4gICAgW3FkUG9wb3Zlck1pbldpZHRoXT1cIjIwMFwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFt2YWx1ZV09XCJfdmFsdWUudmFsdWVcIlxuICAgIChvcHRpb25TZWxlY3RlZCk9XCJoYW5kbGVPcHRpb25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAoZW50ZXJDbGljayk9XCJlbWl0RW50ZXJDbGljaygpXCJcbiAgPlxuICAgIDwhLS0gaGFuZGxlIChlbnRlckNsaWNrKSBieSBvcHRpb25zIGRpcmVjdGl2ZSBoZXJlIGJlY2F1c2UgZXZlbnQgaGFzIHRvIGJlIGZpcmVkIGFmdGVyIHNlbGVjdGlvbiAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRCb3hcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJxZC1pbnB1dC1jaGFyYWN0ZXItY291bnRlclwiICpuZ0lmPVwiaGFzTWF4TGVuZ3RoXCI+e3sgbnVtYmVyT2ZDaGFyYWN0ZXJzIH19IC8ge3sgbWF4TGVuZ3RoIH19PC9zcGFuPlxuXG4gIDxxZC1mb3JtLWhpbnRcbiAgICBbaGludF09XCJoaW50XCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9kaXY+XG5cbjxxZC1mb3JtLXJlYWRvbmx5XG4gICpuZ0lmPVwicmVhZG9ubHlcIlxuICBbdmFsdWVzXT1cInZhbHVlQXNMaXN0XCJcbiAgW3JlYWRvbmx5QWN0aW9uXT1cInJlYWRvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS1yZWFkb25seT5cblxuPHFkLWZvcm0tdmlld29ubHlcbiAgKm5nSWY9XCJ2aWV3b25seVwiXG4gIFt2YWx1ZXNdPVwidmFsdWVBc0xpc3RcIlxuICBbdmlld29ubHlBY3Rpb25dPVwidmlld29ubHlBY3Rpb25cIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLXZpZXdvbmx5PlxuXG48bmctdGVtcGxhdGUgI2lucHV0Qm94PlxuICA8aW5wdXRcbiAgICAjaW5wdXRcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgIFt2YWx1ZV09XCJoYXNPcHRpb25zID8gKF92YWx1ZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlKSA6IF92YWx1ZS52YWx1ZVwiXG4gICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAgIChmb2N1cyk9XCJoYW5kbGVJbnB1dEZvY3VzKClcIlxuICAgIChibHVyKT1cImhhbmRsZUlucHV0Qmx1cigpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgIFt0eXBlXT1cImlucHV0VHlwZVwiXG4gICAgW2F0dHIuaW5wdXRtb2RlXT1cImlucHV0TW9kZVwiXG4gICAgW3FkQXV0b2ZvY3VzXT1cImhhc0F1dG9mb2N1c1wiXG4gICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctaW5wdXQnXCJcbiAgICBbc3RlcF09XCJjb25maWc/LnN0ZXBcIlxuICAgIHJlcXVpcmVkXG4gIC8+XG4gIDxkaXYgY2xhc3M9XCJxZC1pbnB1dC1zdWZmaXhcIj5cbiAgICA8cWQtaWNvbiAqbmdJZj1cImhhc0Vycm9yICYmICFoYXNPbmx5VW5pdHNFcnJvclwiIGNsYXNzPVwicWQtaW5wdXQtZXJyb3ItaWNvblwiIGljb249XCJleGNsYW1hdGlvbkNpcmNsZVNvbGlkXCI+PC9xZC1pY29uPlxuICAgIDxxZC1pY29uICpuZ0lmPVwiY2xlYXJhYmxlXCIgY2xhc3M9XCJxZC1pbnB1dC1jbGVhcmFibGUtaWNvblwiIGljb249XCJ0aW1lc0xhcmdlXCIgKGNsaWNrKT1cImNsZWFySW5wdXQoKVwiPjwvcWQtaWNvbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRJY29uQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxxZC1pbnB1dC11bml0c1xuICAgICpuZ0lmPVwiaGFzVW5pdHNcIlxuICAgIFt1bml0XT1cIl92YWx1ZS51bml0XCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgKHVuaXRDaGFuZ2UpPVwiaGFuZGxlVW5pdENoYW5nZSgkZXZlbnQpXCJcbiAgICAob3BlbmVkKT1cImhhbmRsZVVuaXRzT3BlbmVkKClcIlxuICAgIChjbG9zZWQpPVwiaGFuZGxlVW5pdHNDbG9zZWQoKVwiXG4gID48L3FkLWlucHV0LXVuaXRzPlxuICA8ZGl2IGNsYXNzPVwicWQtaW5wdXQtc3VmZml4XCIgKm5nSWY9XCJoYXNFcnJvciAmJiBoYXNPbmx5VW5pdHNFcnJvclwiPlxuICAgIDxxZC1pY29uIGNsYXNzPVwicWQtaW5wdXQtZXJyb3ItaWNvblwiIGljb249XCJleGNsYW1hdGlvbkNpcmNsZVNvbGlkXCI+PC9xZC1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -10564,7 +10564,7 @@ class QdCalendarComponent {
|
|
|
10564
10564
|
QdCalendarMode = QdCalendarMode;
|
|
10565
10565
|
ngOnInit() {
|
|
10566
10566
|
moment.locale(this.language);
|
|
10567
|
-
this.
|
|
10567
|
+
this.setWeekdays();
|
|
10568
10568
|
this.todayDate = moment();
|
|
10569
10569
|
this.months = moment.months();
|
|
10570
10570
|
this.years = this.getYears((QdDateAdapter.parseToMoment(this.selectedDate)?.isValid()
|
|
@@ -10574,8 +10574,10 @@ class QdCalendarComponent {
|
|
|
10574
10574
|
this.generateCalendar(this.currentDate);
|
|
10575
10575
|
}
|
|
10576
10576
|
ngOnChanges(changes) {
|
|
10577
|
-
if (changes['language'])
|
|
10577
|
+
if (changes['language']) {
|
|
10578
10578
|
moment.locale(this.language);
|
|
10579
|
+
this.setWeekdays();
|
|
10580
|
+
}
|
|
10579
10581
|
if (changes['disabledDates'] && !changes['disabledDates'].isFirstChange())
|
|
10580
10582
|
this.generateCalendar(this.currentDate);
|
|
10581
10583
|
}
|
|
@@ -10639,9 +10641,8 @@ class QdCalendarComponent {
|
|
|
10639
10641
|
this.weeks = Array.from({ length: Math.ceil(dates.length / 7) }, () => dates.splice(0, 7));
|
|
10640
10642
|
}
|
|
10641
10643
|
fillDates(momentObj) {
|
|
10642
|
-
const
|
|
10643
|
-
const
|
|
10644
|
-
const lastDayOfGrid = moment(momentObj).endOf('month').subtract(lastOfMonth, 'days').add(7, 'days');
|
|
10644
|
+
const firstDayOfGrid = moment(momentObj).locale(this.language).startOf('month').startOf('isoWeek');
|
|
10645
|
+
const lastDayOfGrid = moment(momentObj).endOf('month').endOf('isoWeek').add(1, 'day');
|
|
10645
10646
|
const startCalendar = firstDayOfGrid.date();
|
|
10646
10647
|
return range(startCalendar, startCalendar + lastDayOfGrid.diff(firstDayOfGrid, 'days')).map(date => {
|
|
10647
10648
|
const newDate = moment(firstDayOfGrid).date(date);
|
|
@@ -10686,6 +10687,10 @@ class QdCalendarComponent {
|
|
|
10686
10687
|
return date.isAfter(fromDate, 'day') && date.isBefore(toDate, 'day');
|
|
10687
10688
|
});
|
|
10688
10689
|
}
|
|
10690
|
+
setWeekdays() {
|
|
10691
|
+
const w = moment.localeData(this.language).weekdaysMin();
|
|
10692
|
+
this.weekdays = w.slice(1).concat(w[0]);
|
|
10693
|
+
}
|
|
10689
10694
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10690
10695
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdCalendarComponent, selector: "qd-calendar", inputs: { selectedDate: "selectedDate", language: "language", disabledDates: "disabledDates" }, outputs: { selectedChange: "selectedChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav\">\n <button (click)=\"prev()\">\n <qd-icon icon=\"arrowLeft\"></qd-icon>\n </button>\n\n <ng-container>\n <span\n *ngIf=\"mode === QdCalendarMode.Default\"\n class=\"current-month-year\"\n (click)=\"changeMode(QdCalendarMode.YearPicker)\"\n >\n {{ currentDate.locale(language).format(\"MMMM\") }} {{ currentDate?.format(\"YYYY\") }}\n </span>\n <span\n *ngIf=\"mode === QdCalendarMode.YearPicker\"\n class=\"current-years-list\"\n (click)=\"changeMode(QdCalendarMode.MonthPicker)\"\n >\n {{ years[0] }} - {{ years[years.length - 1] }}\n </span>\n <span\n *ngIf=\"mode === QdCalendarMode.MonthPicker\"\n class=\"current-year\"\n (click)=\"changeMode(QdCalendarMode.YearPicker)\"\n >\n {{ currentDate?.format(\"YYYY\") }}\n </span>\n </ng-container>\n\n <button (click)=\"next()\">\n <qd-icon icon=\"arrowRight\"></qd-icon>\n </button>\n</div>\n\n<table *ngIf=\"mode === QdCalendarMode.Default\">\n <thead></thead>\n <tbody>\n <tr>\n <td class=\"weekday\" *ngFor=\"let name of weekdays\">{{ name }}</td>\n </tr>\n <tr *ngFor=\"let week of weeks\">\n <td\n class=\"day {{ day.moment.date() }}\"\n *ngFor=\"let day of week\"\n (click)=\"selectDate(day)\"\n [ngClass]=\"{\n today: day.today,\n selected: day.selected,\n hidden: !isSameYearMonth(day.moment),\n disabled: day.disabled\n }\"\n >\n {{ day.moment.date() }}\n </td>\n </tr>\n </tbody>\n</table>\n\n<div class=\"calendar\" *ngIf=\"mode !== QdCalendarMode.Default\">\n <div class=\"picker\" *ngIf=\"mode === QdCalendarMode.YearPicker\">\n <div class=\"col {{ year }}\" *ngFor=\"let year of years\">\n <div class=\"entry\" (click)=\"selectYear(year)\" [ngClass]=\"{ selected: isSameYear(year) }\">\n {{ year }}\n </div>\n </div>\n </div>\n\n <div class=\"picker\" *ngIf=\"mode === QdCalendarMode.MonthPicker\">\n <div class=\"col {{ month }}\" *ngFor=\"let month of months; let i = index\">\n <div class=\"entry\" (click)=\"selectMonth(i)\" [ngClass]=\"{ selected: isSameMonth(i), month }\">\n {{ month }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".nav{color:#171717;font-size:1rem;font-weight:700;line-height:1.5rem;display:grid;margin:.75rem;grid-template-columns:[next] 2rem [monthyear] auto [prev] 2rem [end];text-transform:capitalize}.nav span{line-height:2.5rem;text-align:center}.nav .current-month-year,.nav .current-years-list,.nav .current-year{cursor:pointer}tbody{display:inherit;margin:.75rem}td{color:#171717;font-size:.875rem;font-weight:400;line-height:1.3125rem;min-width:2.5625rem;padding:.4375rem;text-align:center;text-transform:capitalize}td.disabled{color:#d5d5d5;pointer-events:none}td.hidden{opacity:0;pointer-events:none}td.today{box-shadow:0 0 0 .125rem #d5d5d5 inset}td.selected,td.day:hover{background:#d5d5d5;cursor:pointer}.picker{display:flex;width:100%;flex-wrap:wrap;padding:.75rem}.picker .col{flex:0 0 33.33%;padding:.5rem .25rem}.picker .entry{padding:.4375rem;background:#d5d5d5;cursor:pointer;text-align:center}.picker .entry.selected,.picker .entry:hover{background:gray}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10691
10696
|
}
|
|
@@ -12314,21 +12319,23 @@ class QdInputComponent {
|
|
|
12314
12319
|
if (this.controlContainer) {
|
|
12315
12320
|
if (this.formControlName) {
|
|
12316
12321
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
12317
|
-
// TODO remove logic for support of angular FormControl with angular
|
|
12318
|
-
if (!(this.control instanceof QdFormControl))
|
|
12322
|
+
// TODO remove logic for support of angular FormControl with angular 20 update
|
|
12323
|
+
if (!(this.control instanceof QdFormControl))
|
|
12319
12324
|
console.warn('QD-UI | QdInputComponent - Please use the QdFormControl instead of the Angular FormControl');
|
|
12320
|
-
}
|
|
12321
12325
|
}
|
|
12322
12326
|
}
|
|
12323
12327
|
this.writeValue(this.value || getValue(this.config));
|
|
12328
|
+
this.normalizeInitialControlValueIfNeeded();
|
|
12324
12329
|
this._subs.add(this.actionEmitterService.hintEventEmitter$.subscribe(() => this.clickHint.emit()));
|
|
12325
12330
|
this._subs.add(this.actionEmitterService.readonlyEventEmitter$.subscribe(() => this.clickReadonly.emit()));
|
|
12326
12331
|
this._subs.add(this.actionEmitterService.viewonlyEventEmitter$.subscribe(() => this.clickViewonly.emit()));
|
|
12327
12332
|
this._subs.add(this.initOpModeSubscription());
|
|
12328
12333
|
}
|
|
12329
12334
|
ngOnChanges(changes) {
|
|
12330
|
-
if (changes['config'])
|
|
12335
|
+
if (changes['config']) {
|
|
12331
12336
|
this.updateConfig();
|
|
12337
|
+
this.normalizeInitialControlValueIfNeeded();
|
|
12338
|
+
}
|
|
12332
12339
|
if (changes['value'])
|
|
12333
12340
|
this.writeValue(this.value);
|
|
12334
12341
|
}
|
|
@@ -12337,18 +12344,15 @@ class QdInputComponent {
|
|
|
12337
12344
|
}
|
|
12338
12345
|
registerOnChange(fn) {
|
|
12339
12346
|
const fnString = fn.toString();
|
|
12340
|
-
if (fnString.includes('_noControlError') || fnString.includes('validateControlPresenceOnChange'))
|
|
12347
|
+
if (fnString.includes('_noControlError') || fnString.includes('validateControlPresenceOnChange'))
|
|
12341
12348
|
return;
|
|
12342
|
-
}
|
|
12343
12349
|
this._onChange = fn;
|
|
12344
|
-
fn(this.hasUnits ? this._value : this._value.value);
|
|
12345
12350
|
}
|
|
12346
12351
|
registerOnTouched(fn) {
|
|
12347
12352
|
this._onTouch = fn;
|
|
12348
12353
|
}
|
|
12349
12354
|
writeValue(value) {
|
|
12350
12355
|
this._value = getValueWithUnit(value, this.config);
|
|
12351
|
-
this._onChange(this.hasUnits ? this._value : this._value.value);
|
|
12352
12356
|
}
|
|
12353
12357
|
setDisabledState(disabled) {
|
|
12354
12358
|
this.disabled = disabled;
|
|
@@ -12448,6 +12452,16 @@ class QdInputComponent {
|
|
|
12448
12452
|
this.viewonly = getViewonly(this.config, topic.payload.isViewonly);
|
|
12449
12453
|
});
|
|
12450
12454
|
}
|
|
12455
|
+
normalizeInitialControlValueIfNeeded() {
|
|
12456
|
+
if (!this.control)
|
|
12457
|
+
return;
|
|
12458
|
+
const modelValue = this.control.value;
|
|
12459
|
+
const normalized = getValueWithUnit(modelValue, this.config);
|
|
12460
|
+
const target = this.hasUnits ? normalized : normalized.value;
|
|
12461
|
+
if (!isEqual(modelValue, target))
|
|
12462
|
+
this.control.setValue(target, { emitEvent: false });
|
|
12463
|
+
this._value = normalized;
|
|
12464
|
+
}
|
|
12451
12465
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdInputComponent, deps: [{ token: QdFormsActionEmitterService }, { token: QdFormOptionsResolverRegistry }, { token: i1$4.ControlContainer, host: true, optional: true, skipSelf: true }, { token: QdEventBrokerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
12452
12466
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdInputComponent, selector: "qd-input", inputs: { formControlName: "formControlName", value: "value", config: "config", isError: "isError", testId: ["data-test-id", "testId"] }, outputs: { valueChange: "valueChange", enterClick: "enterClick", clickClear: "clickClear", clickHint: "clickHint", clickReadonly: "clickReadonly", clickViewonly: "clickViewonly" }, host: { properties: { "class.qd-input-readonly": "this.readonly", "class.qd-input--readonly-action": "this.readonlyAction", "class.qd-input-viewonly": "this.viewonly", "class.qd-input--viewonly-action": "this.viewonlyAction", "class.qd-form-hint-action": "this.hintAction", "class.qd-input-hint-action": "this.hintAction", "class.qd-form-disabled": "this.disabled", "class.qd-input-disabled": "this.disabled", "class.qd-input-focus": "this.isInputFocused", "class.qd-form-error": "this.hasError", "class.qd-input-error": "this.hasError", "class.qd-input-error-from-outside": "this.isErrorFromOutside" } }, providers: [
|
|
12453
12467
|
{
|