@dereekb/dbx-form 9.23.27 → 9.24.0

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.
Files changed (48) hide show
  1. package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +2 -2
  2. package/esm2020/calendar/lib/calendar.schedule.selection.days.component.mjs +1 -1
  3. package/esm2020/calendar/lib/calendar.schedule.selection.popover.content.component.mjs +1 -1
  4. package/esm2020/calendar/lib/calendar.schedule.selection.range.component.mjs +1 -1
  5. package/esm2020/calendar/lib/calendar.schedule.selection.store.mjs +8 -8
  6. package/esm2020/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +1 -1
  7. package/esm2020/lib/form/action/form.action.directive.mjs +11 -4
  8. package/esm2020/lib/formly/field/selection/pickable/pickable.field.mjs +1 -1
  9. package/esm2020/lib/formly/field/selection/pickable/pickable.util.mjs +1 -1
  10. package/esm2020/lib/formly/field/selection/selection.mjs +1 -1
  11. package/esm2020/lib/formly/field/value/date/date.field.module.mjs +18 -6
  12. package/esm2020/lib/formly/field/value/date/date.value.mjs +73 -0
  13. package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +61 -107
  14. package/esm2020/lib/formly/field/value/date/datetime.field.mjs +31 -4
  15. package/esm2020/lib/formly/field/value/date/datetime.field.service.mjs +31 -0
  16. package/esm2020/lib/formly/field/value/date/datetime.mjs +26 -0
  17. package/esm2020/lib/formly/field/value/date/datetime.preset.mjs +31 -0
  18. package/esm2020/lib/formly/field/value/date/fixeddaterange.field.component.mjs +451 -0
  19. package/esm2020/lib/formly/field/value/date/index.mjs +5 -1
  20. package/esm2020/lib/formly/template/login.mjs +1 -1
  21. package/esm2020/mapbox/lib/field/latlng/latlng.field.component.mjs +1 -1
  22. package/fesm2015/dereekb-dbx-form-calendar.mjs +8 -8
  23. package/fesm2015/dereekb-dbx-form-calendar.mjs.map +1 -1
  24. package/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
  25. package/fesm2015/dereekb-dbx-form.mjs +648 -67
  26. package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
  27. package/fesm2020/dereekb-dbx-form-calendar.mjs +8 -8
  28. package/fesm2020/dereekb-dbx-form-calendar.mjs.map +1 -1
  29. package/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
  30. package/fesm2020/dereekb-dbx-form.mjs +644 -61
  31. package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
  32. package/lib/form/action/form.action.directive.d.ts +13 -7
  33. package/lib/formly/field/selection/pickable/pickable.util.d.ts +1 -2
  34. package/lib/formly/field/value/date/_date.scss +29 -0
  35. package/lib/formly/field/value/date/date.field.module.d.ts +18 -17
  36. package/lib/formly/field/value/date/date.value.d.ts +20 -0
  37. package/lib/formly/field/value/date/datetime.d.ts +56 -0
  38. package/lib/formly/field/value/date/datetime.field.component.d.ts +31 -27
  39. package/lib/formly/field/value/date/datetime.field.d.ts +8 -4
  40. package/lib/formly/field/value/date/datetime.field.service.d.ts +15 -0
  41. package/lib/formly/field/value/date/datetime.preset.d.ts +2 -0
  42. package/lib/formly/field/value/date/fixeddaterange.field.component.d.ts +154 -0
  43. package/lib/formly/field/value/date/index.d.ts +4 -0
  44. package/mapbox/esm2020/lib/field/latlng/latlng.field.component.mjs +1 -1
  45. package/mapbox/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
  46. package/mapbox/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
  47. package/mapbox/package.json +4 -4
  48. package/package.json +4 -4
@@ -0,0 +1,451 @@
1
+ import { isMonthDaySlashDate, MS_IN_MINUTE } from '@dereekb/util';
2
+ import { guessCurrentTimezone, dateTimeMinuteDecisionFunction, dateTimezoneUtcNormal, isSameDateDayRange, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance } from '@dereekb/date';
3
+ import { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';
4
+ import { Component, ElementRef, Injectable, ViewChild, forwardRef } from '@angular/core';
5
+ import { FormControl, FormGroup } from '@angular/forms';
6
+ import { FieldType } from '@ngx-formly/material';
7
+ import { MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar } from '@angular/material/datepicker';
8
+ import { asObservableFromGetter, filterMaybe, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';
9
+ import { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';
10
+ import { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';
11
+ import { DateAdapter } from '@angular/material/core';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "./datetime.field.service";
14
+ import * as i2 from "@angular/common";
15
+ import * as i3 from "@angular/forms";
16
+ import * as i4 from "@angular/material/form-field";
17
+ import * as i5 from "@angular/material/datepicker";
18
+ import * as i6 from "@angular/flex-layout/extended";
19
+ import * as i7 from "@angular/material/core";
20
+ function dbxFixedDateRangeInputValueFactory(mode, timezoneInstance) {
21
+ const dateInputTransformer = dbxDateTimeInputValueParseFactory(mode, timezoneInstance);
22
+ return (y) => {
23
+ let result;
24
+ if (y) {
25
+ result = {
26
+ start: dateInputTransformer(y.start),
27
+ end: dateInputTransformer(y.end)
28
+ };
29
+ }
30
+ return result;
31
+ };
32
+ }
33
+ function dbxFixedDateRangeOutputValueFactory(mode, timezoneInstance) {
34
+ const dateOutputTransformer = dbxDateTimeOutputValueFactory(mode, timezoneInstance);
35
+ return (y) => {
36
+ let result;
37
+ if (y) {
38
+ result = {
39
+ start: dateOutputTransformer(y.start),
40
+ end: dateOutputTransformer(y.end)
41
+ };
42
+ }
43
+ return result;
44
+ };
45
+ }
46
+ const TIME_OUTPUT_THROTTLE_TIME = 10;
47
+ export class DbxFixedDateRangeFieldComponent extends FieldType {
48
+ constructor(dbxDateTimeFieldConfigService) {
49
+ super();
50
+ this.dbxDateTimeFieldConfigService = dbxDateTimeFieldConfigService;
51
+ this._sub = new SubscriptionObject();
52
+ this._inputRangeFormSub = new SubscriptionObject();
53
+ this._inputRangeFormValueSub = new SubscriptionObject();
54
+ this._dateRangeInputSub = new SubscriptionObject();
55
+ this._currentSelectionModeSub = new SubscriptionObject();
56
+ this._latestBoundarySub = new SubscriptionObject();
57
+ this._disableEndSub = new SubscriptionObject();
58
+ this._activeDateSub = new SubscriptionObject();
59
+ this._currentDateRangeInput = {};
60
+ this._currentSelectionMode = 'single';
61
+ this._latestBoundary = null;
62
+ this._config = new BehaviorSubject(undefined);
63
+ this._selectionMode = new BehaviorSubject(undefined);
64
+ this._dateRangeInput = new BehaviorSubject(undefined);
65
+ this._timezone = new BehaviorSubject(undefined);
66
+ this._presets = new BehaviorSubject(of([]));
67
+ this._selectedDateRange = new Subject();
68
+ this._formControlObs = new BehaviorSubject(undefined);
69
+ this.formControl$ = this._formControlObs.pipe(filterMaybe());
70
+ this.config$ = this._config.pipe(filterMaybe(), switchMap((x) => x), distinctUntilChanged(), shareReplay(1));
71
+ this.limitDateTimeInstance$ = this.config$.pipe(map(limitDateTimeInstance), shareReplay(1));
72
+ this.selectionMode$ = this._selectionMode.pipe(switchMapMaybeDefault('single'), map((x) => x ?? 'single'), distinctUntilChanged(), shareReplay(1));
73
+ this.dateRangeInput$ = this._dateRangeInput.pipe(switchMapMaybeDefault(), shareReplay(1));
74
+ this.timezone$ = this._timezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(map((defaultTimezone) => {
75
+ return defaultTimezone ?? guessCurrentTimezone();
76
+ }), distinctUntilChanged(), shareReplay(1));
77
+ this.timezoneInstance$ = this.timezone$.pipe(map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)), shareReplay(1));
78
+ this.valueInSystemTimezone$ = this.formControl$.pipe(map((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))), combineLatestWith(this.timezoneInstance$), switchMap(([x, timezoneInstance]) => {
79
+ return x.pipe(map(dbxFixedDateRangeInputValueFactory(this.valueMode, timezoneInstance)));
80
+ }), throttleTime(20, undefined, { leading: false, trailing: true }), // throttle incoming values and timezone changes
81
+ distinctUntilChanged(isSameDateDayRange), shareReplay(1));
82
+ this.startDate$ = this.valueInSystemTimezone$.pipe(map((x) => x?.start ?? null), distinctUntilChanged(), filterMaybe(), shareReplay(1));
83
+ this.fullBoundary$ = this.dateRangeSelectionForMode('single').pipe(shareReplay(1));
84
+ this.latestBoundary$ = this.selectionMode$.pipe(switchMap((mode) => {
85
+ if (mode === 'arbitrary_quick') {
86
+ // in arbitrary_quick mode, the latest value is the boundary, since we always set the value immediately.
87
+ return this.valueInSystemTimezone$;
88
+ }
89
+ else {
90
+ return this.fullBoundary$;
91
+ }
92
+ }));
93
+ this.dateRangeSelection$ = this.selectionMode$.pipe(switchMap((mode) => this.dateRangeSelectionForMode(mode)));
94
+ this.calendarSelection$ = this.valueInSystemTimezone$.pipe(map((x) => (x ? new DatePickerDateRange(x.start, x.end) : null)), shareReplay(1));
95
+ this.endDisabled$ = this.selectionMode$.pipe(map((x) => x === 'single'), distinctUntilChanged(), shareReplay(1));
96
+ this.inputRangeForm = new FormGroup({
97
+ start: new FormControl(null),
98
+ end: new FormControl(null)
99
+ });
100
+ this.minMaxRange$ = this.limitDateTimeInstance$.pipe(combineLatestWith(timer(MS_IN_MINUTE)), // refresh every minute
101
+ map(([x]) => x.dateRange()), distinctUntilChanged(isSameDateDayRange), shareReplay(1));
102
+ this.min$ = this.minMaxRange$.pipe(map((x) => x?.start ?? null), distinctUntilChanged(), shareReplay(1));
103
+ this.max$ = this.minMaxRange$.pipe(map((x) => x?.end ?? null), distinctUntilChanged(), shareReplay(1));
104
+ this.pickerFilter$ = this.config$.pipe(distinctUntilChanged(), map((x) => {
105
+ if (x) {
106
+ const filter = dateTimeMinuteDecisionFunction(x);
107
+ return (x) => (x != null ? filter(x) : true);
108
+ }
109
+ else {
110
+ return () => true;
111
+ }
112
+ }), shareReplay(1));
113
+ this.defaultPickerFilter = () => true;
114
+ }
115
+ get currentDateRangeInput() {
116
+ return this._currentDateRangeInput;
117
+ }
118
+ get currentSelectionMode() {
119
+ return this._currentSelectionMode;
120
+ }
121
+ get latestBoundary() {
122
+ return this._latestBoundary;
123
+ }
124
+ dateRangeSelectionForMode(mode) {
125
+ const result = combineLatest([this.dateRangeInput$, this.limitDateTimeInstance$]).pipe(switchMap(([dateRangeInput, limitInstance]) => {
126
+ const minMaxClamp = (dateRange) => limitInstance.clampDateRange(dateRange);
127
+ if (mode === 'single') {
128
+ // only use the start date.
129
+ return this._selectedDateRange.pipe(distinctUntilChanged(isSameDateDayRange), map((inputDateRange) => {
130
+ const date = inputDateRange?.start;
131
+ return date ? minMaxClamp(dateRange({ ...dateRangeInput, date })) : null;
132
+ }));
133
+ }
134
+ else {
135
+ // take the first date, then wait unless the date is outside of the range.
136
+ return this._selectedDateRange.pipe(scan((acc, nextDateRange) => {
137
+ let result;
138
+ if (nextDateRange && nextDateRange.start != null) {
139
+ const { start: startOrNextDate, end } = nextDateRange;
140
+ const potentialBoundary = dateRange({ ...dateRangeInput, date: startOrNextDate });
141
+ // only comes through when passed by the text inputs
142
+ if (startOrNextDate && end) {
143
+ const range = clampDateRangeToDateRange(nextDateRange, potentialBoundary);
144
+ result = {
145
+ lastDateRange: nextDateRange,
146
+ boundary: range,
147
+ range
148
+ };
149
+ }
150
+ else {
151
+ let range = undefined;
152
+ let boundary = potentialBoundary;
153
+ if (acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary)) {
154
+ // if in the date range, uses the pick as the last date.
155
+ range = {
156
+ start: acc.boundary.start,
157
+ end: startOrNextDate
158
+ };
159
+ if (mode === 'arbitrary_quick') {
160
+ // modify boundary to match range
161
+ if (isSameDateRange(acc.range, range) && isSameDateDay(range.end, startOrNextDate)) {
162
+ // if we clicked on the end range, then expand the boundary again to the full range.
163
+ range = dateRange({ ...dateRangeInput, date: range.start });
164
+ boundary = range;
165
+ }
166
+ else {
167
+ boundary = range;
168
+ }
169
+ }
170
+ else {
171
+ boundary = acc.boundary;
172
+ }
173
+ }
174
+ else if (mode === 'arbitrary_quick') {
175
+ range = potentialBoundary;
176
+ }
177
+ result = {
178
+ lastDateRange: nextDateRange,
179
+ boundary,
180
+ range
181
+ };
182
+ }
183
+ }
184
+ else {
185
+ result = {
186
+ lastDateRange: nextDateRange
187
+ };
188
+ }
189
+ if (result) {
190
+ result = {
191
+ lastDateRange: result.lastDateRange,
192
+ boundary: result.boundary ? minMaxClamp(result.boundary) : undefined,
193
+ range: result.range ? minMaxClamp(result.range) : undefined
194
+ };
195
+ }
196
+ return result;
197
+ }, {}), filter((x) => !x.lastDateRange || x.range != null), // pass through null/date clearings or ranges
198
+ map((x) => x.range ?? null) // return the range
199
+ );
200
+ }
201
+ }));
202
+ return result;
203
+ }
204
+ get fixedDateRangeField() {
205
+ return this.field.props;
206
+ }
207
+ get selectionMode() {
208
+ return this.field.props.selectionMode;
209
+ }
210
+ get valueMode() {
211
+ return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;
212
+ }
213
+ get description() {
214
+ return this.field.props.description;
215
+ }
216
+ get timezone() {
217
+ return this.field.props.timezone;
218
+ }
219
+ get showTimezone() {
220
+ return this.field.props.showTimezone ?? true;
221
+ }
222
+ get presets() {
223
+ return this.field.props.presets;
224
+ }
225
+ get showRangeInput() {
226
+ return this.field.props.showRangeInput ?? true;
227
+ }
228
+ ngOnInit() {
229
+ this._formControlObs.next(this.formControl);
230
+ const dateRangeSelection = this.dateRangeSelection$.pipe(shareReplay(1));
231
+ const setInputFormValue = (value) => {
232
+ if (!isSameDateDayRange(value, this.inputRangeForm.value)) {
233
+ this.inputRangeForm.setValue({
234
+ start: value?.start ?? null,
235
+ end: value?.end ?? null
236
+ });
237
+ }
238
+ };
239
+ this._sub.subscription = this.valueInSystemTimezone$
240
+ .pipe(combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxFixedDateRangeOutputValueFactory(this.valueMode, timezoneInstance)))), throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }), switchMap(([currentValue, valueFactory]) => {
241
+ return dateRangeSelection.pipe(skipFirstMaybe(), distinctUntilChanged(isSameDateDayRange), map((x) => [x, currentValue, valueFactory]));
242
+ }))
243
+ .subscribe(([rawValue, currentValue, valueFactory]) => {
244
+ const value = rawValue ? valueFactory(rawValue) : null;
245
+ const isSameRange = dbxDateRangeIsSameDateRangeFieldValue(value, currentValue);
246
+ if (!isSameRange) {
247
+ this.formControl.setValue(value);
248
+ this.formControl.markAsDirty();
249
+ this.formControl.markAsTouched();
250
+ }
251
+ else if (rawValue != null) {
252
+ // update the input text again
253
+ setInputFormValue(rawValue);
254
+ }
255
+ });
256
+ if (this.selectionMode) {
257
+ this._selectionMode.next(asObservableFromGetter(this.selectionMode));
258
+ }
259
+ this._currentSelectionModeSub.subscription = this.selectionMode$.subscribe((x) => (this._currentSelectionMode = x));
260
+ this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => (this._currentDateRangeInput = x));
261
+ this._inputRangeFormSub.subscription = this.valueInSystemTimezone$.subscribe((x) => {
262
+ setInputFormValue(x);
263
+ });
264
+ if (this.showRangeInput) {
265
+ this._inputRangeFormValueSub.subscription = this.valueInSystemTimezone$
266
+ .pipe(throttleTime(100), // throttle to prevent the value from changing too fast
267
+ switchMap(() => {
268
+ return this.inputRangeForm.valueChanges.pipe(debounceTime(500), filter(() => {
269
+ const startString = this.startDateInputElement.nativeElement?.value;
270
+ let valid = isMonthDaySlashDate(startString);
271
+ if (valid && this._currentSelectionMode !== 'single') {
272
+ const endString = this.endDateInputElement.nativeElement?.value;
273
+ valid = isMonthDaySlashDate(endString);
274
+ }
275
+ return valid; // must be a valid text input
276
+ }), map((x) => x));
277
+ }), distinctUntilChanged(isSameDateRange))
278
+ .subscribe((x) => {
279
+ if (this._currentSelectionMode === 'single') {
280
+ this.setDateRange(x?.start ? { start: x.start } : null);
281
+ }
282
+ else {
283
+ let rangeToSet = x;
284
+ if (this._currentSelectionMode === 'arbitrary_quick' && this._latestBoundary && x?.start && x?.end) {
285
+ if (!isDateInDateRange(x.start, this._latestBoundary)) {
286
+ // if the end date it outside of the current range (i.e. a range was typed in only to the start date) then set the end to the boundary end
287
+ const boundary = dateRange({ ...this._currentDateRangeInput, date: x.start });
288
+ rangeToSet = { start: x.start, end: boundary.end };
289
+ }
290
+ }
291
+ this.setDateRange(rangeToSet);
292
+ }
293
+ });
294
+ }
295
+ this._latestBoundarySub.subscription = this.latestBoundary$.subscribe((x) => (this._latestBoundary = x));
296
+ this._dateRangeInput.next(asObservableFromGetter(this.fixedDateRangeField.dateRangeInput));
297
+ this._disableEndSub.subscription = this.endDisabled$.subscribe((disabled) => {
298
+ const end = this.inputRangeForm.get('end');
299
+ if (end) {
300
+ if (disabled) {
301
+ end.disable();
302
+ }
303
+ else {
304
+ end.enable();
305
+ }
306
+ }
307
+ });
308
+ const inputPickerConfig = this.fixedDateRangeField.pickerConfig;
309
+ this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : undefined);
310
+ // Set default timezone if provided.
311
+ if (this.timezone && !this.fixedDateRangeField.fullDayInUTC) {
312
+ this._timezone.next(asObservableFromGetter(this.timezone));
313
+ }
314
+ // Watch for disabled changes so we can propogate them properly.
315
+ this.formControl.registerOnDisabledChange((disabled) => {
316
+ if (disabled) {
317
+ this.inputRangeForm.disable();
318
+ }
319
+ else {
320
+ this.inputRangeForm.enable();
321
+ this.endDisabled$.pipe(first()).subscribe((disabled) => {
322
+ const end = this.inputRangeForm.get('end');
323
+ if (end) {
324
+ if (disabled) {
325
+ end.disable();
326
+ }
327
+ else {
328
+ end.enable();
329
+ }
330
+ }
331
+ });
332
+ }
333
+ });
334
+ if (this.presets != null) {
335
+ this._presets.next(asObservableFromGetter(this.presets));
336
+ }
337
+ else {
338
+ this._presets.next(this.dbxDateTimeFieldConfigService.configurations$);
339
+ }
340
+ this._activeDateSub.subscription = this.startDate$.subscribe((x) => {
341
+ this.calendar.activeDate = x;
342
+ });
343
+ }
344
+ ngOnDestroy() {
345
+ super.ngOnDestroy();
346
+ this._sub.destroy();
347
+ this._inputRangeFormSub.destroy();
348
+ this._inputRangeFormValueSub.destroy();
349
+ this._dateRangeInputSub.destroy();
350
+ this._currentSelectionModeSub.destroy();
351
+ this._latestBoundarySub.destroy();
352
+ this._disableEndSub.destroy();
353
+ this._activeDateSub.destroy();
354
+ this._config.complete();
355
+ this._selectionMode.complete();
356
+ this._dateRangeInput.complete();
357
+ this._timezone.complete();
358
+ this._presets.complete();
359
+ this._selectedDateRange.complete();
360
+ this._formControlObs.complete();
361
+ }
362
+ selectedChange(date) {
363
+ this.setDateRange(date ? { start: date } : null);
364
+ }
365
+ setDateRange(dateRange) {
366
+ this._selectedDateRange.next(dateRange);
367
+ }
368
+ _createDateRange(date) {
369
+ return date ? dateRange({ ...this._currentDateRangeInput, date }) : undefined;
370
+ }
371
+ }
372
+ DbxFixedDateRangeFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFixedDateRangeFieldComponent, deps: [{ token: i1.DbxDateTimeFieldMenuPresetsService }], target: i0.ɵɵFactoryTarget.Component });
373
+ DbxFixedDateRangeFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxFixedDateRangeFieldComponent, selector: "ng-component", providers: [
374
+ {
375
+ provide: MAT_DATE_RANGE_SELECTION_STRATEGY,
376
+ useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)
377
+ }
378
+ ], viewQueries: [{ propertyName: "calendar", first: true, predicate: MatCalendar, descendants: true }, { propertyName: "startDateInputElement", first: true, predicate: ["startDateInput"], descendants: true, read: ElementRef }, { propertyName: "endDateInputElement", first: true, predicate: ["endDateInput"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelection$ | async\" [dateFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" [minDate]=\"min$ | async\" [maxDate]=\"max$ | async\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n <mat-date-range-input *ngIf=\"showRangeInput\" [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"(endDisabled$ | async) ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"(endDisabled$ | async) ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n </mat-form-field>\n <mat-error *ngIf=\"formControl.hasError('required')\">Date range is required</mat-error>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i5.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection"], exportAs: ["matCalendar"] }, { kind: "component", type: i5.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i5.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i5.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFixedDateRangeFieldComponent, decorators: [{
380
+ type: Component,
381
+ args: [{ providers: [
382
+ {
383
+ provide: MAT_DATE_RANGE_SELECTION_STRATEGY,
384
+ useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)
385
+ }
386
+ ], template: "<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelection$ | async\" [dateFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" [minDate]=\"min$ | async\" [maxDate]=\"max$ | async\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n <mat-date-range-input *ngIf=\"showRangeInput\" [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"(endDisabled$ | async) ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"(endDisabled$ | async) ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n </mat-form-field>\n <mat-error *ngIf=\"formControl.hasError('required')\">Date range is required</mat-error>\n</div>\n" }]
387
+ }], ctorParameters: function () { return [{ type: i1.DbxDateTimeFieldMenuPresetsService }]; }, propDecorators: { calendar: [{
388
+ type: ViewChild,
389
+ args: [MatCalendar]
390
+ }], startDateInputElement: [{
391
+ type: ViewChild,
392
+ args: ['startDateInput', { read: ElementRef }]
393
+ }], endDateInputElement: [{
394
+ type: ViewChild,
395
+ args: ['endDateInput', { read: ElementRef }]
396
+ }] } });
397
+ export class DbxFixedDateRangeFieldSelectionStrategy {
398
+ constructor(_dateAdapter, dbxFixedDateRangeFieldComponent) {
399
+ this._dateAdapter = _dateAdapter;
400
+ this.dbxFixedDateRangeFieldComponent = dbxFixedDateRangeFieldComponent;
401
+ }
402
+ selectionFinished(date, currentRange, event) {
403
+ // unused
404
+ return currentRange;
405
+ }
406
+ createPreview(activeDate, currentRange, event) {
407
+ if (activeDate != null && this.dbxFixedDateRangeFieldComponent.currentSelectionMode !== 'single') {
408
+ const latestBoundary = this.dbxFixedDateRangeFieldComponent.latestBoundary;
409
+ const date = this.dateFromAdapterDate(activeDate);
410
+ if (latestBoundary && isDateInDateRange(date, latestBoundary)) {
411
+ const exampleDateRange = this._createDateRange(latestBoundary);
412
+ return exampleDateRange;
413
+ }
414
+ }
415
+ return this._createDateRangeWithDate(activeDate);
416
+ }
417
+ _createDateRangeWithDate(input) {
418
+ let dateRange;
419
+ if (input) {
420
+ const date = this.dateFromAdapterDate(input);
421
+ dateRange = this.dbxFixedDateRangeFieldComponent._createDateRange(date);
422
+ }
423
+ return this._createDateRange(dateRange);
424
+ }
425
+ _createDateRange(input) {
426
+ if (input) {
427
+ return new DatePickerDateRange(this.adapterDateFromDate(input.start), this.adapterDateFromDate(input.end));
428
+ }
429
+ else {
430
+ return new DatePickerDateRange(null, null);
431
+ }
432
+ }
433
+ dateFromAdapterDate(input) {
434
+ const day = this._dateAdapter.getDate(input);
435
+ const monthIndex = this._dateAdapter.getMonth(input);
436
+ const year = this._dateAdapter.getYear(input);
437
+ return new Date(year, monthIndex, day);
438
+ }
439
+ adapterDateFromDate(date) {
440
+ const day = date.getDate();
441
+ const monthIndex = date.getMonth();
442
+ const year = date.getFullYear();
443
+ return this._dateAdapter.createDate(year, monthIndex, day);
444
+ }
445
+ }
446
+ DbxFixedDateRangeFieldSelectionStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFixedDateRangeFieldSelectionStrategy, deps: [{ token: i7.DateAdapter }, { token: DbxFixedDateRangeFieldComponent }], target: i0.ɵɵFactoryTarget.Injectable });
447
+ DbxFixedDateRangeFieldSelectionStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFixedDateRangeFieldSelectionStrategy });
448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFixedDateRangeFieldSelectionStrategy, decorators: [{
449
+ type: Injectable
450
+ }], ctorParameters: function () { return [{ type: i7.DateAdapter }, { type: DbxFixedDateRangeFieldComponent }]; } });
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9maXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEYsbUJBQW1CLEVBQXVCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsb0JBQW9CLEVBQTRELDhCQUE4QixFQUFFLHFCQUFxQixFQUE2QixrQkFBa0IsRUFBd0QsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFjLGVBQWUsRUFBRSxhQUFhLEVBQWlELHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RiLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFjLElBQUksRUFBUSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFPLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0s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RSxNQUFNLElBQUksR0FBZSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVU7UUFDNUIsTUFBTSxHQUFHLEdBQWUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFjLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksR0FBZSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdELENBQUM7O3FJQXREVSx1Q0FBdUM7eUlBQXZDLHVDQUF1Qzs0RkFBdkMsdUNBQXVDO2tCQURuRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF5YmUsIERlY2lzaW9uRnVuY3Rpb24sIE1pbGxpc2Vjb25kcywgVGltZXpvbmVTdHJpbmcsIERhdGVNb250aCwgRGF5T2ZNb250aCwgWWVhck51bWJlciwgaXNNb250aERheVNsYXNoRGF0ZSwgbWFwSWRlbnRpdHlGdW5jdGlvbiwgTVNfSU5fTUlOVVRFIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBndWVzc0N1cnJlbnRUaW1lem9uZSwgaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcywgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsIGRhdGVUaW1lTWludXRlRGVjaXNpb25GdW5jdGlvbiwgZGF0ZVRpbWV6b25lVXRjTm9ybWFsLCBEYXRlUmFuZ2VJbnB1dCwgRGF0ZVJhbmdlLCBpc1NhbWVEYXRlRGF5UmFuZ2UsIERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZSwgRGF0ZVRpbWVNaW51dGVDb25maWcsIGRhdGVSYW5nZSwgaXNEYXRlSW5EYXRlUmFuZ2UsIGNsYW1wRGF0ZVJhbmdlVG9EYXRlUmFuZ2UsIGlzU2FtZURhdGUsIGlzU2FtZURhdGVSYW5nZSwgaXNTYW1lRGF0ZURheSwgY2xhbXBEYXRlUmFuZ2VGdW5jdGlvbiwgTGltaXREYXRlVGltZUluc3RhbmNlLCBsaW1pdERhdGVUaW1lSW5zdGFuY2UgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgc2hhcmVSZXBsYXksIG1hcCwgc3RhcnRXaXRoLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZGVib3VuY2VUaW1lLCB0aHJvdHRsZVRpbWUsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YsIGNvbWJpbmVMYXRlc3RXaXRoLCBmaWx0ZXIsIGNvbWJpbmVMYXRlc3QsIGV4aGF1c3RNYXAsIHNjYW4sIHNraXAsIGZpcnN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5LCBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksIERhdGVSYW5nZSBhcyBEYXRlUGlja2VyRGF0ZVJhbmdlLCBNYXRDYWxlbmRhckNlbGxDbGFzc0Z1bmN0aW9uLCBNYXRDYWxlbmRhckNlbGxDc3NDbGFzc2VzLCBNYXRDYWxlbmRhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgYXNPYnNlcnZhYmxlRnJvbUdldHRlciwgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlR2V0dGVyLCBza2lwRmlyc3RNYXliZSwgU3Vic2NyaXB0aW9uT2JqZWN0LCBzd2l0Y2hNYXBNYXliZURlZmF1bHQsIHRhcExvZyB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIGRieERhdGVSYW5nZUlzU2FtZURhdGVSYW5nZUZpZWxkVmFsdWUsIGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeSwgZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkgfSBmcm9tICcuL2RhdGUudmFsdWUnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9kYXRldGltZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRldGltZS5maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0ID0gT21pdDxEYXRlUmFuZ2VJbnB1dCwgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VQaWNrZXJDb25maWd1cmF0aW9uID0gT21pdDxEYXRlVGltZU1pbnV0ZUNvbmZpZywgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZScgfCAnYXJiaXRyYXJ5JyB8ICdhcmJpdHJhcnlfcXVpY2snO1xuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VQaWNraW5nID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICAvKipcbiAgICogRGF0ZSByYW5nZSBpbnB1dCB0byBidWlsZCB0aGUgZGF0ZSByYW5nZS5cbiAgICovXG4gIGRhdGVSYW5nZUlucHV0OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0PjtcblxuICAvKipcbiAgICogU2VsZWN0aW9uIG1vZGUgdG8gdXNlIHdoZW4gcGlja2luZyBkYXRlcyBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBzZWxlY3Rpb25Nb2RlPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPj47XG5cbiAgLyoqXG4gICAqIFZhbHVlIG1vZGUgZm9yIHRoZSBkYXRlcyBpbiB0aGUgb3V0cHV0IERhdGVSYW5nZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gREFURVxuICAgKi9cbiAgdmFsdWVNb2RlPzogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHBhc3MgdGhlIGRhdGUgdmFsdWUgYXMgYSBVVEMgZGF0ZSwgb3IgYSBkYXRlIGluIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgZnVsbERheUluVVRDPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHBpY2tlciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwaWNrZXJDb25maWc/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBpbnB1dCB0aW1lem9uZSB0byBkZWZhdWx0IHRvLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGZ1bGxEYXlJblVUQyBpcyB0cnVlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxUaW1lem9uZVN0cmluZz4+PjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgdGltZXpvbmUuIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHNob3dUaW1lem9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwcmVzZXRzIHRvIHNob3cgaW4gdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcHJlc2V0cz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgcmFuZ2UgaW5wdXQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBzaG93UmFuZ2VJbnB1dD86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGRieEZpeGVkRGF0ZVJhbmdlSW5wdXRWYWx1ZUZhY3RvcnkobW9kZTogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2U6IE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPik6IChpbnB1dDogTWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPikgPT4gTWF5YmU8RGF0ZVJhbmdlPiB7XG4gIGNvbnN0IGRhdGVJbnB1dFRyYW5zZm9ybWVyID0gZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KG1vZGUsIHRpbWV6b25lSW5zdGFuY2UpO1xuXG4gIHJldHVybiAoeSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGVSYW5nZT47XG5cbiAgICBpZiAoeSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBzdGFydDogZGF0ZUlucHV0VHJhbnNmb3JtZXIoeS5zdGFydCkgYXMgRGF0ZSxcbiAgICAgICAgZW5kOiBkYXRlSW5wdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGRhdGU6IE1heWJlPERhdGVSYW5nZT4pID0+IE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4ge1xuICBjb25zdCBkYXRlT3V0cHV0VHJhbnNmb3JtZXIgPSBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlLCB0aW1lem9uZUluc3RhbmNlKTtcblxuICByZXR1cm4gKHkpID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKHkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgc3RhcnQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LnN0YXJ0KSBhcyBEYXRlLFxuICAgICAgICBlbmQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5jb25zdCBUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FOiBNaWxsaXNlY29uZHMgPSAxMDtcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZERhdGVSYW5nZVNjYW4ge1xuICAvKipcbiAgICogVGhlIGxhdGVzdCBkYXRlIHBhc3NlZCwgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIGxhc3REYXRlUmFuZ2U/OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+O1xuICAvKipcbiAgICogVGhlIGdlbmVyYXRlZCBib3VuZGFyeSByYW5nZS5cbiAgICovXG4gIGJvdW5kYXJ5PzogRGF0ZVJhbmdlO1xuICAvKipcbiAgICogTmV3IERhdGUgUmFuZ2VcbiAgICovXG4gIHJhbmdlPzogRGF0ZVJhbmdlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdmaXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZUNsYXNzOiBmb3J3YXJkUmVmKCgpID0+IERieEZpeGVkRGF0ZVJhbmdlRmllbGRTZWxlY3Rpb25TdHJhdGVneSlcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8RGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9pbnB1dFJhbmdlRm9ybVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfaW5wdXRSYW5nZUZvcm1WYWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfY3VycmVudFNlbGVjdGlvbk1vZGVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2xhdGVzdEJvdW5kYXJ5U3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9kaXNhYmxlRW5kU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9hY3RpdmVEYXRlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnREYXRlUmFuZ2VJbnB1dDogTWF5YmU8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD4gPSB7fTtcbiAgcHJpdmF0ZSBfY3VycmVudFNlbGVjdGlvbk1vZGU6IERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xuICBwcml2YXRlIF9sYXRlc3RCb3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfY29uZmlnID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0Pj4+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfdGltZXpvbmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3ByZXNldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8RGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10+PihvZihbXSkpO1xuXG4gIHByaXZhdGUgX3NlbGVjdGVkRGF0ZVJhbmdlID0gbmV3IFN1YmplY3Q8TWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pj4oKTtcblxuICBwcml2YXRlIF9mb3JtQ29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPE1heWJlPERhdGVSYW5nZT4+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wkID0gdGhpcy5fZm9ybUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBAVmlld0NoaWxkKE1hdENhbGVuZGFyKVxuICBjYWxlbmRhciE6IE1hdENhbGVuZGFyPERhdGU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHN0YXJ0RGF0ZUlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGVuZERhdGVJbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIGdldCBjdXJyZW50RGF0ZVJhbmdlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dDtcbiAgfVxuXG4gIGdldCBjdXJyZW50U2VsZWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGU7XG4gIH1cblxuICBnZXQgbGF0ZXN0Qm91bmRhcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhdGVzdEJvdW5kYXJ5O1xuICB9XG5cbiAgcmVhZG9ubHkgY29uZmlnJDogT2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+ID0gdGhpcy5fY29uZmlnLnBpcGUoXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaW1pdERhdGVUaW1lSW5zdGFuY2UkID0gdGhpcy5jb25maWckLnBpcGUobWFwKGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25Nb2RlJDogT2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+ID0gdGhpcy5fc2VsZWN0aW9uTW9kZS5waXBlKFxuICAgIHN3aXRjaE1hcE1heWJlRGVmYXVsdDxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+KCdzaW5nbGUnKSxcbiAgICBtYXAoKHgpID0+IHggPz8gJ3NpbmdsZScpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2VJbnB1dCQgPSB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLl90aW1lem9uZS5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5waXBlKFxuICAgIG1hcCgoZGVmYXVsdFRpbWV6b25lKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFRpbWV6b25lID8/IGd1ZXNzQ3VycmVudFRpbWV6b25lKCk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lSW5zdGFuY2UkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPj4gPSB0aGlzLnRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgodGltZXpvbmUpID0+ICh0aW1lem9uZSA/IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh7IHRpbWV6b25lIH0pIDogdW5kZWZpbmVkKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB2YWx1ZUluU3lzdGVtVGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5mb3JtQ29udHJvbCQucGlwZShcbiAgICBtYXAoKGNvbnRyb2wpID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoPE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4+KGNvbnRyb2wudmFsdWUpLCBzaGFyZVJlcGxheSgxKSkpLFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQpLFxuICAgIHN3aXRjaE1hcCgoW3gsIHRpbWV6b25lSW5zdGFuY2VdKSA9PiB7XG4gICAgICByZXR1cm4geC5waXBlKG1hcChkYnhGaXhlZERhdGVSYW5nZUlucHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpO1xuICAgIH0pLFxuICAgIHRocm90dGxlVGltZSgyMCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSwgLy8gdGhyb3R0bGUgaW5jb21pbmcgdmFsdWVzIGFuZCB0aW1lem9uZSBjaGFuZ2VzXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8RGF0ZVJhbmdlPj4oaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT4gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0ID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUobW9kZTogRGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlKSB7XG4gICAgY29uc3QgcmVzdWx0OiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlUmFuZ2VJbnB1dCQsIHRoaXMubGltaXREYXRlVGltZUluc3RhbmNlJF0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKFtkYXRlUmFuZ2VJbnB1dCwgbGltaXRJbnN0YW5jZV0pID0+IHtcbiAgICAgICAgY29uc3QgbWluTWF4Q2xhbXAgPSAoZGF0ZVJhbmdlOiBEYXRlUmFuZ2UpID0+IGxpbWl0SW5zdGFuY2UuY2xhbXBEYXRlUmFuZ2UoZGF0ZVJhbmdlKTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAvLyBvbmx5IHVzZSB0aGUgc3RhcnQgZGF0ZS5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXRlUmFuZ2UucGlwZShcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgICAgICAgICBtYXAoKGlucHV0RGF0ZVJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBpbnB1dERhdGVSYW5nZT8uc3RhcnQ7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRlID8gKG1pbk1heENsYW1wKGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpKSBhcyBEYXRlUmFuZ2UpIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0YWtlIHRoZSBmaXJzdCBkYXRlLCB0aGVuIHdhaXQgdW5sZXNzIHRoZSBkYXRlIGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZERhdGVSYW5nZS5waXBlKFxuICAgICAgICAgICAgc2NhbigoYWNjOiBGaXhlZERhdGVSYW5nZVNjYW4sIG5leHREYXRlUmFuZ2U6IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4pID0+IHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdDogRml4ZWREYXRlUmFuZ2VTY2FuO1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0RGF0ZVJhbmdlICYmIG5leHREYXRlUmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQ6IHN0YXJ0T3JOZXh0RGF0ZSwgZW5kIH0gPSBuZXh0RGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvdGVudGlhbEJvdW5kYXJ5ID0gZGF0ZVJhbmdlKHsgLi4uZGF0ZVJhbmdlSW5wdXQsIGRhdGU6IHN0YXJ0T3JOZXh0RGF0ZSB9IGFzIERhdGVSYW5nZUlucHV0KTtcblxuICAgICAgICAgICAgICAgIC8vIG9ubHkgY29tZXMgdGhyb3VnaCB3aGVuIHBhc3NlZCBieSB0aGUgdGV4dCBpbnB1dHNcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRPck5leHREYXRlICYmIGVuZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjbGFtcERhdGVSYW5nZVRvRGF0ZVJhbmdlKG5leHREYXRlUmFuZ2UsIHBvdGVudGlhbEJvdW5kYXJ5KSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3REYXRlUmFuZ2U6IG5leHREYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiByYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxldCByYW5nZTogTWF5YmU8RGF0ZVJhbmdlPiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGxldCBib3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYWNjLmJvdW5kYXJ5ICYmIGlzRGF0ZUluRGF0ZVJhbmdlKHN0YXJ0T3JOZXh0RGF0ZSwgYWNjLmJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBpbiB0aGUgZGF0ZSByYW5nZSwgdXNlcyB0aGUgcGljayBhcyB0aGUgbGFzdCBkYXRlLlxuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydDogYWNjLmJvdW5kYXJ5LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgIGVuZDogc3RhcnRPck5leHREYXRlXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZ5IGJvdW5kYXJ5IHRvIG1hdGNoIHJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZURhdGVSYW5nZShhY2MucmFuZ2UsIHJhbmdlKSAmJiBpc1NhbWVEYXRlRGF5KHJhbmdlLmVuZCwgc3RhcnRPck5leHREYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgY2xpY2tlZCBvbiB0aGUgZW5kIHJhbmdlLCB0aGVuIGV4cGFuZCB0aGUgYm91bmRhcnkgYWdhaW4gdG8gdGhlIGZ1bGwgcmFuZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlOiByYW5nZS5zdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gYWNjLmJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gcG90ZW50aWFsQm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiBuZXh0RGF0ZVJhbmdlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiByZXN1bHQubGFzdERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiByZXN1bHQuYm91bmRhcnkgPyAobWluTWF4Q2xhbXAocmVzdWx0LmJvdW5kYXJ5KSBhcyBEYXRlUmFuZ2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJlc3VsdC5yYW5nZSA/IChtaW5NYXhDbGFtcChyZXN1bHQucmFuZ2UpIGFzIERhdGVSYW5nZSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4gIXgubGFzdERhdGVSYW5nZSB8fCB4LnJhbmdlICE9IG51bGwpLCAvLyBwYXNzIHRocm91Z2ggbnVsbC9kYXRlIGNsZWFyaW5ncyBvciByYW5nZXNcbiAgICAgICAgICAgIG1hcCgoeCkgPT4geC5yYW5nZSA/PyBudWxsKSAvLyByZXR1cm4gdGhlIHJhbmdlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRvbmx5IGZ1bGxCb3VuZGFyeSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUoJ3NpbmdsZScpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICByZWFkb25seSBsYXRlc3RCb3VuZGFyeSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChtb2RlKSA9PiB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2FyYml0cmFyeV9xdWljaycpIHtcbiAgICAgICAgLy8gaW4gYXJiaXRyYXJ5X3F1aWNrIG1vZGUsIHRoZSBsYXRlc3QgdmFsdWUgaXMgdGhlIGJvdW5kYXJ5LCBzaW5jZSB3ZSBhbHdheXMgc2V0IHRoZSB2YWx1ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxCb3VuZGFyeSQ7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2VTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5waXBlKHN3aXRjaE1hcCgobW9kZSkgPT4gdGhpcy5kYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKG1vZGUpKSk7XG5cbiAgcmVhZG9ubHkgY2FsZW5kYXJTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPERhdGVQaWNrZXJEYXRlUmFuZ2U8RGF0ZT4gfCBudWxsPiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHggPyBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEYXRlPih4LnN0YXJ0LCB4LmVuZCkgOiBudWxsKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlbmREaXNhYmxlZCQgPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4ID09PSAnc2luZ2xlJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0UmFuZ2VGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpXG4gIH0pO1xuXG4gIGdldCBmaXhlZERhdGVSYW5nZUZpZWxkKCk6IERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zZWxlY3Rpb25Nb2RlO1xuICB9XG5cbiAgZ2V0IHZhbHVlTW9kZSgpOiBEYnhEYXRlVGltZVZhbHVlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudmFsdWVNb2RlID8/IERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEU7XG4gIH1cblxuICBnZXQgZGVzY3JpcHRpb24oKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgdGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudGltZXpvbmU7XG4gIH1cblxuICBnZXQgc2hvd1RpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNob3dUaW1lem9uZSA/PyB0cnVlO1xuICB9XG5cbiAgZ2V0IHByZXNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMucHJlc2V0cztcbiAgfVxuXG4gIGdldCBzaG93UmFuZ2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93UmFuZ2VJbnB1dCA/PyB0cnVlO1xuICB9XG5cbiAgcmVhZG9ubHkgbWluTWF4UmFuZ2UkID0gdGhpcy5saW1pdERhdGVUaW1lSW5zdGFuY2UkLnBpcGUoXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGltZXIoTVNfSU5fTUlOVVRFKSksIC8vIHJlZnJlc2ggZXZlcnkgbWludXRlXG4gICAgbWFwKChbeF0pID0+IHguZGF0ZVJhbmdlKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW4kID0gdGhpcy5taW5NYXhSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0ID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXgkID0gdGhpcy5taW5NYXhSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmVuZCA/PyBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyRmlsdGVyJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPj4gPSB0aGlzLmNvbmZpZyQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHgpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gZGF0ZVRpbWVNaW51dGVEZWNpc2lvbkZ1bmN0aW9uKHgpO1xuICAgICAgICByZXR1cm4gKHg6IERhdGUgfCBudWxsKSA9PiAoeCAhPSBudWxsID8gZmlsdGVyKHgpIDogdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRQaWNrZXJGaWx0ZXI6IERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+ID0gKCkgPT4gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRieERhdGVUaW1lRmllbGRDb25maWdTZXJ2aWNlOiBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLm5leHQodGhpcy5mb3JtQ29udHJvbCk7XG5cbiAgICBjb25zdCBkYXRlUmFuZ2VTZWxlY3Rpb24gPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbiQucGlwZShzaGFyZVJlcGxheSgxKSk7XG5cbiAgICBjb25zdCBzZXRJbnB1dEZvcm1WYWx1ZSA9ICh2YWx1ZTogTWF5YmU8RGF0ZVJhbmdlPikgPT4ge1xuICAgICAgaWYgKCFpc1NhbWVEYXRlRGF5UmFuZ2UodmFsdWUsIHRoaXMuaW5wdXRSYW5nZUZvcm0udmFsdWUgYXMgUGFydGlhbDxEYXRlUmFuZ2U+KSkge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLnNldFZhbHVlKHtcbiAgICAgICAgICBzdGFydDogdmFsdWU/LnN0YXJ0ID8/IG51bGwsXG4gICAgICAgICAgZW5kOiB2YWx1ZT8uZW5kID8/IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX3N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkLnBpcGUobWFwKCh0aW1lem9uZUluc3RhbmNlKSA9PiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKSksXG4gICAgICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtjdXJyZW50VmFsdWUsIHZhbHVlRmFjdG9yeV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZGF0ZVJhbmdlU2VsZWN0aW9uLnBpcGUoXG4gICAgICAgICAgICBza2lwRmlyc3RNYXliZSgpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8RGF0ZVJhbmdlPj4oaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICAgICAgICAgIG1hcCgoeCkgPT4gW3gsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSBhcyBbdHlwZW9mIHgsIHR5cGVvZiBjdXJyZW50VmFsdWUsIHR5cGVvZiB2YWx1ZUZhY3RvcnldKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcmF3VmFsdWUsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1ZhbHVlID8gdmFsdWVGYWN0b3J5KHJhd1ZhbHVlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGlzU2FtZVJhbmdlID0gZGJ4RGF0ZVJhbmdlSXNTYW1lRGF0ZVJhbmdlRmllbGRWYWx1ZSh2YWx1ZSwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzU2FtZVJhbmdlKSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhd1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGlucHV0IHRleHQgYWdhaW5cbiAgICAgICAgICBzZXRJbnB1dEZvcm1WYWx1ZShyYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5zZWxlY3Rpb25Nb2RlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9IHgpKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRhdGVSYW5nZUlucHV0JC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQgPSB4KSk7XG5cbiAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQuc3Vic2NyaWJlKCh4OiBNYXliZTxEYXRlUmFuZ2U+KSA9PiB7XG4gICAgICBzZXRJbnB1dEZvcm1WYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNob3dSYW5nZUlucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUoMTAwKSwgLy8gdGhyb3R0bGUgdG8gcHJldmVudCB0aGUgdmFsdWUgZnJvbSBjaGFuZ2luZyB0b28gZmFzdFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFJhbmdlRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRTdHJpbmcgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWQgPSBpc01vbnRoRGF5U2xhc2hEYXRlKHN0YXJ0U3RyaW5nKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWxpZCAmJiB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFN0cmluZyA9IHRoaXMuZW5kRGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkID0gaXNNb250aERheVNsYXNoRGF0ZShlbmRTdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZDsgLy8gbXVzdCBiZSBhIHZhbGlkIHRleHQgaW5wdXRcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4geCBhcyBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlUmFuZ2UpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeDogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHg/LnN0YXJ0ID8geyBzdGFydDogeC5zdGFydCB9IDogbnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByYW5nZVRvU2V0OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+ID0geDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJyAmJiB0aGlzLl9sYXRlc3RCb3VuZGFyeSAmJiB4Py5zdGFydCAmJiB4Py5lbmQpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc0RhdGVJbkRhdGVSYW5nZSh4LnN0YXJ0LCB0aGlzLl9sYXRlc3RCb3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZW5kIGRhdGUgaXQgb3V0c2lkZSBvZiB0aGUgY3VycmVudCByYW5nZSAoaS5lLiBhIHJhbmdlIHdhcyB0eXBlZCBpbiBvbmx5IHRvIHRoZSBzdGFydCBkYXRlKSB0aGVuIHNldCB0aGUgZW5kIHRvIHRoZSBib3VuZGFyeSBlbmRcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGFyeSA9IGRhdGVSYW5nZSh7IC4uLnRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dCwgZGF0ZTogeC5zdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICByYW5nZVRvU2V0ID0geyBzdGFydDogeC5zdGFydCwgZW5kOiBib3VuZGFyeS5lbmQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGVSYW5nZShyYW5nZVRvU2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2xhdGVzdEJvdW5kYXJ5U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMubGF0ZXN0Qm91bmRhcnkkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2xhdGVzdEJvdW5kYXJ5ID0geCkpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0Lm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLmZpeGVkRGF0ZVJhbmdlRmllbGQuZGF0ZVJhbmdlSW5wdXQpKTtcblxuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5lbmREaXNhYmxlZCQuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5pbnB1dFJhbmdlRm9ybS5nZXQoJ2VuZCcpO1xuXG4gICAgICBpZiAoZW5kKSB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGVuZC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dFBpY2tlckNvbmZpZyA9IHRoaXMuZml4ZWREYXRlUmFuZ2VGaWVsZC5waWNrZXJDb25maWc7XG4gICAgdGhpcy5fY29uZmlnLm5leHQoaW5wdXRQaWNrZXJDb25maWcgPyBhc09ic2VydmFibGVGcm9tR2V0dGVyKGlucHV0UGlja2VyQ29uZmlnKSA6IHVuZGVmaW5lZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB0aW1lem9uZSBpZiBwcm92aWRlZC5cbiAgICBpZiAodGhpcy50aW1lem9uZSAmJiAhdGhpcy5maXhlZERhdGVSYW5nZUZpZWxkLmZ1bGxEYXlJblVUQykge1xuICAgICAgdGhpcy5fdGltZXpvbmUubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMudGltZXpvbmUpKTtcbiAgICB9XG5cbiAgICAvLyBXYXRjaCBmb3IgZGlzYWJsZWQgY2hhbmdlcyBzbyB3ZSBjYW4gcHJvcG9nYXRlIHRoZW0gcHJvcGVybHkuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoKGRpc2FibGVkKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJhbmdlRm9ybS5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuZW5kRGlzYWJsZWQkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuaW5wdXRSYW5nZUZvcm0uZ2V0KCdlbmQnKTtcblxuICAgICAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICBlbmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcmVzZXRzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMucHJlc2V0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQodGhpcy5kYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZS5jb25maWd1cmF0aW9ucyQpO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5zdGFydERhdGUkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5jYWxlbmRhci5hY3RpdmVEYXRlID0geDtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fc3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5faW5wdXRSYW5nZUZvcm1WYWx1ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fZGF0ZVJhbmdlSW5wdXRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9sYXRlc3RCb3VuZGFyeVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fZGlzYWJsZUVuZFN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fYWN0aXZlRGF0ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fY29uZmlnLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fdGltZXpvbmUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9wcmVzZXRzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWREYXRlUmFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2VsZWN0ZWRDaGFuZ2UoZGF0ZTogTWF5YmU8RGF0ZT4pOiB2b2lkIHtcbiAgICB0aGlzLnNldERhdGVSYW5nZShkYXRlID8geyBzdGFydDogZGF0ZSB9IDogbnVsbCk7XG4gIH1cblxuICBzZXREYXRlUmFuZ2UoZGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSB7XG4gICAgdGhpcy5fc2VsZWN0ZWREYXRlUmFuZ2UubmV4dChkYXRlUmFuZ2UpO1xuICB9XG5cbiAgX2NyZWF0ZURhdGVSYW5nZShkYXRlOiBNYXliZTxEYXRlPik6IE1heWJlPERhdGVSYW5nZT4ge1xuICAgIHJldHVybiBkYXRlID8gZGF0ZVJhbmdlKHsgLi4udGhpcy5fY3VycmVudERhdGVSYW5nZUlucHV0LCBkYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhGaXhlZERhdGVSYW5nZUZpZWxkU2VsZWN0aW9uU3RyYXRlZ3k8RD4gaW1wbGVtZW50cyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneTxEPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEPiwgcmVhZG9ubHkgZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudDogRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCkge31cblxuICBzZWxlY3Rpb25GaW5pc2hlZChkYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICAvLyB1bnVzZWRcbiAgICByZXR1cm4gY3VycmVudFJhbmdlO1xuICB9XG5cbiAgY3JlYXRlUHJldmlldyhhY3RpdmVEYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBpZiAoYWN0aXZlRGF0ZSAhPSBudWxsICYmIHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudC5jdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgIGNvbnN0IGxhdGVzdEJvdW5kYXJ5ID0gdGhpcy5kYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50LmxhdGVzdEJvdW5kYXJ5O1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZyb21BZGFwdGVyRGF0ZShhY3RpdmVEYXRlKTtcblxuICAgICAgaWYgKGxhdGVzdEJvdW5kYXJ5ICYmIGlzRGF0ZUluRGF0ZVJhbmdlKGRhdGUsIGxhdGVzdEJvdW5kYXJ5KSkge1xuICAgICAgICBjb25zdCBleGFtcGxlRGF0ZVJhbmdlID0gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlKGxhdGVzdEJvdW5kYXJ5KTtcbiAgICAgICAgcmV0dXJuIGV4YW1wbGVEYXRlUmFuZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURhdGVSYW5nZVdpdGhEYXRlKGFjdGl2ZURhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRGF0ZVJhbmdlV2l0aERhdGUoaW5wdXQ6IEQgfCBudWxsKTogRGF0ZVBpY2tlckRhdGVSYW5nZTxEPiB7XG4gICAgbGV0IGRhdGVSYW5nZTogTWF5YmU8RGF0ZVJhbmdlPjtcblxuICAgIGlmIChpbnB1dCkge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZyb21BZGFwdGVyRGF0ZShpbnB1dCk7XG4gICAgICBkYXRlUmFuZ2UgPSB0aGlzLmRieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQuX2NyZWF0ZURhdGVSYW5nZShkYXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlKGRhdGVSYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEYXRlUmFuZ2UoaW5wdXQ6IE1heWJlPERhdGVSYW5nZT4pOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEPih0aGlzLmFkYXB0ZXJEYXRlRnJvbURhdGUoaW5wdXQuc3RhcnQpLCB0aGlzLmFkYXB0ZXJEYXRlRnJvbURhdGUoaW5wdXQuZW5kKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEPihudWxsLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBkYXRlRnJvbUFkYXB0ZXJEYXRlKGlucHV0OiBEKSB7XG4gICAgY29uc3QgZGF5OiBEYXlPZk1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShpbnB1dCk7XG4gICAgY29uc3QgbW9udGhJbmRleDogRGF0ZU1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoaW5wdXQpO1xuICAgIGNvbnN0IHllYXI6IFllYXJOdW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGlucHV0KTtcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5KTtcbiAgfVxuXG4gIGFkYXB0ZXJEYXRlRnJvbURhdGUoZGF0ZTogRGF0ZSk6IEQge1xuICAgIGNvbnN0IGRheTogRGF5T2ZNb250aCA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IG1vbnRoSW5kZXg6IERhdGVNb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBjb25zdCB5ZWFyOiBZZWFyTnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRieC1maXhlZGRhdGVyYW5nZS1maWVsZFwiPlxuICA8bWF0LWNhbGVuZGFyICNjYWxlbmRhclZpZXcgW3NlbGVjdGVkXT1cImNhbGVuZGFyU2VsZWN0aW9uJCB8IGFzeW5jXCIgW2RhdGVGaWx0ZXJdPVwiKHBpY2tlckZpbHRlciQgfCBhc3luYykgfHwgZGVmYXVsdFBpY2tlckZpbHRlclwiIFttaW5EYXRlXT1cIm1pbiQgfCBhc3luY1wiIFttYXhEYXRlXT1cIm1heCQgfCBhc3luY1wiIChzZWxlY3RlZENoYW5nZSk9XCJzZWxlY3RlZENoYW5nZSgkZXZlbnQpXCI+PC9tYXQtY2FsZW5kYXI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1maXhlZGRhdGVyYW5nZS1maWVsZC1pbnB1dFwiIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0ICpuZ0lmPVwic2hvd1JhbmdlSW5wdXRcIiBbZm9ybUdyb3VwXT1cImlucHV0UmFuZ2VGb3JtXCI+XG4gICAgICA8aW5wdXQgI3N0YXJ0RGF0ZUlucHV0IG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIHBsYWNlaG9sZGVyPVwiU3RhcnQgZGF0ZVwiIC8+XG4gICAgICA8aW5wdXQgI2VuZERhdGVJbnB1dCBbbmdDbGFzc109XCIoZW5kRGlzYWJsZWQkIHwgYXN5bmMpID8gJ2RieC1maXhlZGRhdGVyYW5nZS1maWVsZC1pbnB1dC1lbmQnIDogJydcIiBbYXR0ci50YWJpbmRleF09XCIoZW5kRGlzYWJsZWQkIHwgYXN5bmMpID8gLTEgOiAwXCIgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCIgLz5cbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5EYXRlIHJhbmdlIGlzIHJlcXVpcmVkPC9tYXQtZXJyb3I+XG48L2Rpdj5cbiJdfQ==
@@ -1,4 +1,8 @@
1
1
  export * from './date.field.module';
2
+ export * from './date.value';
2
3
  export * from './datetime.field';
4
+ export * from './datetime.field.service';
3
5
  export * from './datetime.field.component';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kYXRlLmZpZWxkLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGV0aW1lLmZpZWxkJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50JztcbiJdfQ==
6
+ export * from './datetime.preset';
7
+ export * from './datetime';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0ZS5maWVsZC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlLnZhbHVlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZXRpbWUuZmllbGQnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRldGltZS5maWVsZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZXRpbWUucHJlc2V0JztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZXRpbWUnO1xuIl19