nxt-pick-datetime 17.0.1 → 19.0.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.
- package/README.md +53 -53
- package/assets/picker.scss +673 -673
- package/fesm2022/nxt-pick-datetime-moment-adapter.mjs +23 -26
- package/fesm2022/nxt-pick-datetime-moment-adapter.mjs.map +1 -1
- package/fesm2022/nxt-pick-datetime-native-adapter.mjs +22 -24
- package/fesm2022/nxt-pick-datetime-native-adapter.mjs.map +1 -1
- package/fesm2022/nxt-pick-datetime.mjs +77 -75
- package/fesm2022/nxt-pick-datetime.mjs.map +1 -1
- package/lib/class/date-time.class.d.ts +1 -1
- package/moment-adapter/moment-adapter.module.d.ts +2 -0
- package/moment-adapter/public-api.d.ts +1 -1
- package/native-adapter/native-adapter.module.d.ts +2 -0
- package/native-adapter/public-api.d.ts +1 -1
- package/package.json +10 -15
- package/esm2022/lib/class/date-time-adapter.class.mjs +0 -97
- package/esm2022/lib/class/date-time-format.class.mjs +0 -4
- package/esm2022/lib/class/date-time.class.mjs +0 -95
- package/esm2022/lib/class/dialog-config.class.mjs +0 -47
- package/esm2022/lib/class/dialog-ref.class.mjs +0 -119
- package/esm2022/lib/date-time/calendar/calendar.component.mjs +0 -346
- package/esm2022/lib/date-time/calendar-body/calendar-body.component.mjs +0 -151
- package/esm2022/lib/date-time/calendar-month-view/calendar-month-view.component.mjs +0 -429
- package/esm2022/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.mjs +0 -358
- package/esm2022/lib/date-time/calendar-year-view/calendar-year-view.component.mjs +0 -362
- package/esm2022/lib/date-time/date-time-inline/date-time-inline.component.mjs +0 -275
- package/esm2022/lib/date-time/date-time-picker/date-time-picker.component.mjs +0 -541
- package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.animations.mjs +0 -19
- package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.component.mjs +0 -389
- package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +0 -618
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +0 -61
- package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +0 -70
- package/esm2022/lib/date-time/date-time.module.mjs +0 -96
- package/esm2022/lib/date-time/number-fixed-len.pipe.mjs +0 -22
- package/esm2022/lib/date-time/timer/timer.component.mjs +0 -299
- package/esm2022/lib/date-time/timer-box/timer-box.component.mjs +0 -95
- package/esm2022/lib/dialog/dialog-container/dialog-container.component.mjs +0 -248
- package/esm2022/lib/dialog/dialog.module.mjs +0 -42
- package/esm2022/lib/dialog/dialog.service.mjs +0 -251
- package/esm2022/lib/utils/object.mjs +0 -24
- package/esm2022/moment-adapter/date-time-adapter.class.mjs +0 -220
- package/esm2022/moment-adapter/date-time-format.class.mjs +0 -13
- package/esm2022/moment-adapter/moment-adapter.module.mjs +0 -37
- package/esm2022/moment-adapter/nxt-pick-datetime-moment-adapter.mjs +0 -5
- package/esm2022/moment-adapter/public-api.mjs +0 -3
- package/esm2022/native-adapter/date-time-adapter.class.mjs +0 -366
- package/esm2022/native-adapter/date-time-format.class.mjs +0 -13
- package/esm2022/native-adapter/native-adapter.module.mjs +0 -37
- package/esm2022/native-adapter/nxt-pick-datetime-native-adapter.mjs +0 -5
- package/esm2022/native-adapter/public-api.mjs +0 -2
- package/esm2022/nxt-pick-datetime.mjs +0 -5
- package/esm2022/public-api.mjs +0 -14
|
@@ -1,541 +0,0 @@
|
|
|
1
|
-
import { coerceArray } from '@angular/cdk/coercion';
|
|
2
|
-
import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
|
|
3
|
-
import { ComponentPortal } from '@angular/cdk/portal';
|
|
4
|
-
import { DOCUMENT } from '@angular/common';
|
|
5
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, InjectionToken, Input, Optional, Output } from '@angular/core';
|
|
6
|
-
import { merge } from 'rxjs';
|
|
7
|
-
import { filter, take } from 'rxjs/operators';
|
|
8
|
-
import { NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class';
|
|
9
|
-
import { DateTimeDirective } from '../../class/date-time.class';
|
|
10
|
-
import { DateTimeContainerComponent } from '../date-time-picker-container/date-time-picker-container.component';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/cdk/overlay";
|
|
13
|
-
import * as i2 from "../../dialog/dialog.service";
|
|
14
|
-
import * as i3 from "../../class/date-time-adapter.class";
|
|
15
|
-
/**
|
|
16
|
-
* Injection token that determines the scroll handling while the dtPicker is open.
|
|
17
|
-
*
|
|
18
|
-
* @internal
|
|
19
|
-
*/
|
|
20
|
-
export const NXT_DTPICKER_SCROLL_STRATEGY = new InjectionToken('NXT_DTPICKER_SCROLL_STRATEGY');
|
|
21
|
-
/** @internal */
|
|
22
|
-
export function NXT_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
|
|
23
|
-
const fn = () => overlay.scrollStrategies.block();
|
|
24
|
-
return fn;
|
|
25
|
-
}
|
|
26
|
-
/** @internal */
|
|
27
|
-
export const NXT_DTPICKER_SCROLL_STRATEGY_PROVIDER = {
|
|
28
|
-
provide: NXT_DTPICKER_SCROLL_STRATEGY,
|
|
29
|
-
deps: [Overlay],
|
|
30
|
-
useFactory: NXT_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY
|
|
31
|
-
};
|
|
32
|
-
export class DateTimeComponent extends DateTimeDirective {
|
|
33
|
-
/**
|
|
34
|
-
* The date to show when picker opens
|
|
35
|
-
*
|
|
36
|
-
* Defaults to selected date (if available) or current date.
|
|
37
|
-
*/
|
|
38
|
-
get startAt() {
|
|
39
|
-
// If an explicit startAt is set we start there, otherwise we start at whatever the currently
|
|
40
|
-
// selected value is.
|
|
41
|
-
if (this._startAt) {
|
|
42
|
-
return this._startAt;
|
|
43
|
-
}
|
|
44
|
-
if (this._dtInput) {
|
|
45
|
-
if (this._dtInput.selectMode === 'single') {
|
|
46
|
-
return this._dtInput.value;
|
|
47
|
-
}
|
|
48
|
-
else if (this._dtInput.selectMode === 'range' ||
|
|
49
|
-
this._dtInput.selectMode === 'rangeFrom') {
|
|
50
|
-
return this._dtInput.values[0];
|
|
51
|
-
}
|
|
52
|
-
else if (this._dtInput.selectMode === 'rangeTo') {
|
|
53
|
-
return this._dtInput.values[1];
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
set startAt(date) {
|
|
59
|
-
this._startAt = this.getValidDate(this.dateTimeAdapter.deserialize(date));
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Set the type of the dateTime picker
|
|
63
|
-
*
|
|
64
|
-
* - `'both'` - show both calendar and timer
|
|
65
|
-
* - `'calendar'` - show only calendar
|
|
66
|
-
* - `'timer'` - show only timer
|
|
67
|
-
*/
|
|
68
|
-
get pickerType() {
|
|
69
|
-
return this._pickerType;
|
|
70
|
-
}
|
|
71
|
-
set pickerType(val) {
|
|
72
|
-
if (val !== this._pickerType) {
|
|
73
|
-
this._pickerType = val;
|
|
74
|
-
if (this._dtInput) {
|
|
75
|
-
this._dtInput.formatNativeInputValue();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* The style the picker would open as
|
|
81
|
-
*
|
|
82
|
-
* - `'popup'` - display picker attached to the trigger element
|
|
83
|
-
* - `'dialog'` - display picker as a dialog
|
|
84
|
-
*/
|
|
85
|
-
get pickerMode() {
|
|
86
|
-
return this._pickerMode;
|
|
87
|
-
}
|
|
88
|
-
set pickerMode(mode) {
|
|
89
|
-
if (mode === 'popup') {
|
|
90
|
-
this._pickerMode = mode;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this._pickerMode = 'dialog';
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/** Whether the date time picker should be disabled */
|
|
97
|
-
get disabled() {
|
|
98
|
-
return this._disabled ?? !!this._dtInput?.disabled;
|
|
99
|
-
}
|
|
100
|
-
set disabled(value) {
|
|
101
|
-
value = !!value;
|
|
102
|
-
if (value !== this._disabled) {
|
|
103
|
-
this._disabled = value;
|
|
104
|
-
this.disabledChange.next(value);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/** Whether the calendar is open */
|
|
108
|
-
get isOpen() {
|
|
109
|
-
return this._isOpen;
|
|
110
|
-
}
|
|
111
|
-
set isOpen(val) {
|
|
112
|
-
if (val)
|
|
113
|
-
this.open();
|
|
114
|
-
else
|
|
115
|
-
this.close();
|
|
116
|
-
}
|
|
117
|
-
get dtInput() {
|
|
118
|
-
return this._dtInput;
|
|
119
|
-
}
|
|
120
|
-
get selected() {
|
|
121
|
-
return this._selected;
|
|
122
|
-
}
|
|
123
|
-
set selected(value) {
|
|
124
|
-
this._selected = value;
|
|
125
|
-
this.changeDetector.markForCheck();
|
|
126
|
-
}
|
|
127
|
-
get selecteds() {
|
|
128
|
-
return this._selecteds || [];
|
|
129
|
-
}
|
|
130
|
-
set selecteds(values) {
|
|
131
|
-
this._selecteds = values;
|
|
132
|
-
this.changeDetector.markForCheck();
|
|
133
|
-
}
|
|
134
|
-
/** The minimum selectable date */
|
|
135
|
-
get min() {
|
|
136
|
-
return (this._dtInput && this._dtInput.min);
|
|
137
|
-
}
|
|
138
|
-
/** The maximum selectable date */
|
|
139
|
-
get max() {
|
|
140
|
-
return (this._dtInput && this._dtInput.max);
|
|
141
|
-
}
|
|
142
|
-
get dateTimeFilter() {
|
|
143
|
-
return this._dtInput?.dateTimeFilter;
|
|
144
|
-
}
|
|
145
|
-
get selectMode() {
|
|
146
|
-
return this._dtInput?.selectMode;
|
|
147
|
-
}
|
|
148
|
-
get isInSingleMode() {
|
|
149
|
-
return !!this._dtInput?.isInSingleMode;
|
|
150
|
-
}
|
|
151
|
-
get isInRangeMode() {
|
|
152
|
-
return !!this._dtInput?.isInRangeMode;
|
|
153
|
-
}
|
|
154
|
-
constructor(overlay, viewContainerRef, dialogService, ngZone, changeDetector, dateTimeAdapter, defaultScrollStrategy, dateTimeFormats, document) {
|
|
155
|
-
super(dateTimeAdapter, dateTimeFormats);
|
|
156
|
-
this.overlay = overlay;
|
|
157
|
-
this.viewContainerRef = viewContainerRef;
|
|
158
|
-
this.dialogService = dialogService;
|
|
159
|
-
this.ngZone = ngZone;
|
|
160
|
-
this.changeDetector = changeDetector;
|
|
161
|
-
this.defaultScrollStrategy = defaultScrollStrategy;
|
|
162
|
-
this.document = document;
|
|
163
|
-
this._pickerType = 'both';
|
|
164
|
-
this._pickerMode = 'popup';
|
|
165
|
-
this._isOpen = false;
|
|
166
|
-
/**
|
|
167
|
-
* Callback when the picker is opened
|
|
168
|
-
*/
|
|
169
|
-
// eslint-disable-next-line @angular-eslint/no-output-rename
|
|
170
|
-
this.afterPickerOpened = new EventEmitter();
|
|
171
|
-
/**
|
|
172
|
-
* Callback when the picker is closed
|
|
173
|
-
*/
|
|
174
|
-
// eslint-disable-next-line @angular-eslint/no-output-rename
|
|
175
|
-
this.afterPickerClosed = new EventEmitter();
|
|
176
|
-
/**
|
|
177
|
-
* Emits selected year in multi-year view
|
|
178
|
-
*
|
|
179
|
-
* This doesn't imply a change on the selected date.
|
|
180
|
-
*/
|
|
181
|
-
this.yearSelected = new EventEmitter();
|
|
182
|
-
/**
|
|
183
|
-
* Emits selected month in year view
|
|
184
|
-
*
|
|
185
|
-
* This doesn't imply a change on the selected date.
|
|
186
|
-
*/
|
|
187
|
-
this.monthSelected = new EventEmitter();
|
|
188
|
-
/**
|
|
189
|
-
* Emits when picker open state changes
|
|
190
|
-
*/
|
|
191
|
-
this.isOpenChange = new EventEmitter();
|
|
192
|
-
/**
|
|
193
|
-
* Emit when the selected value has been confirmed
|
|
194
|
-
*/
|
|
195
|
-
this.confirmSelectedChange = new EventEmitter();
|
|
196
|
-
/**
|
|
197
|
-
* Emits when the date time picker is disabled
|
|
198
|
-
*/
|
|
199
|
-
this.disabledChange = new EventEmitter();
|
|
200
|
-
this._selecteds = new Array();
|
|
201
|
-
}
|
|
202
|
-
ngOnInit() { }
|
|
203
|
-
ngOnDestroy() {
|
|
204
|
-
this.close();
|
|
205
|
-
this.dtInputSub?.unsubscribe();
|
|
206
|
-
this.dtInputSub = undefined;
|
|
207
|
-
this.disabledChange.complete();
|
|
208
|
-
if (this.popupRef) {
|
|
209
|
-
this.popupRef.dispose();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
registerInput(input) {
|
|
213
|
-
if (this._dtInput) {
|
|
214
|
-
throw Error('A Nxt DateTimePicker can only be associated with a single input.');
|
|
215
|
-
}
|
|
216
|
-
this._dtInput = input;
|
|
217
|
-
this.dtInputSub = this._dtInput.valueChange.subscribe((value) => {
|
|
218
|
-
if (Array.isArray(value)) {
|
|
219
|
-
this.selecteds = value;
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
this.selected = value;
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
open() {
|
|
227
|
-
if (this._isOpen || this.disabled) {
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
if (!this._dtInput) {
|
|
231
|
-
throw Error('Attempted to open an DateTimePicker with no associated input.');
|
|
232
|
-
}
|
|
233
|
-
if (this.document) {
|
|
234
|
-
this.focusedElementBeforeOpen = this.document.activeElement;
|
|
235
|
-
}
|
|
236
|
-
// reset the picker selected value
|
|
237
|
-
if (this.isInSingleMode) {
|
|
238
|
-
this.selected = this._dtInput.value;
|
|
239
|
-
}
|
|
240
|
-
else if (this.isInRangeMode) {
|
|
241
|
-
this.selecteds = this._dtInput.values;
|
|
242
|
-
}
|
|
243
|
-
// when the picker is open , we make sure the picker's current selected time value
|
|
244
|
-
// is the same as the _startAt time value.
|
|
245
|
-
if (this.selected && this.pickerType !== 'calendar' && this._startAt) {
|
|
246
|
-
this.selected = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.selected), this.dateTimeAdapter.getMonth(this.selected), this.dateTimeAdapter.getDate(this.selected), this.dateTimeAdapter.getHours(this._startAt), this.dateTimeAdapter.getMinutes(this._startAt), this.dateTimeAdapter.getSeconds(this._startAt));
|
|
247
|
-
}
|
|
248
|
-
if (this.pickerMode === 'dialog')
|
|
249
|
-
this.openAsDialog();
|
|
250
|
-
else
|
|
251
|
-
this.openAsPopup();
|
|
252
|
-
if (this.pickerContainer)
|
|
253
|
-
this.pickerContainer.picker = this;
|
|
254
|
-
// Listen to picker container's hidePickerStream
|
|
255
|
-
this.hidePickerStreamSub = this.pickerContainer?.hidePickerStream.subscribe(() => {
|
|
256
|
-
this.close();
|
|
257
|
-
});
|
|
258
|
-
// Listen to picker container's confirmSelectedStream
|
|
259
|
-
this.confirmSelectedStreamSub = this.pickerContainer?.confirmSelectedStream.subscribe((event) => {
|
|
260
|
-
this.confirmSelect(event);
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Selects the given date
|
|
265
|
-
*/
|
|
266
|
-
select(date) {
|
|
267
|
-
if (Array.isArray(date)) {
|
|
268
|
-
this.selecteds = [...date];
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
this.selected = date;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Cases in which automatically confirm the select when date or dates are selected:
|
|
275
|
-
* 1) picker mode is NOT 'dialog'
|
|
276
|
-
* 2) picker type is 'calendar' and selectMode is 'single'.
|
|
277
|
-
* 3) picker type is 'calendar' and selectMode is 'range' and
|
|
278
|
-
* the 'selecteds' has 'from'(selecteds[0]) and 'to'(selecteds[1]) values.
|
|
279
|
-
* 4) selectMode is 'rangeFrom' and selecteds[0] has value.
|
|
280
|
-
* 5) selectMode is 'rangeTo' and selecteds[1] has value.
|
|
281
|
-
*/
|
|
282
|
-
if (this.pickerMode !== 'dialog' &&
|
|
283
|
-
this.pickerType === 'calendar' &&
|
|
284
|
-
((this.selectMode === 'single' && this.selected) ||
|
|
285
|
-
(this.selectMode === 'rangeFrom' && this.selecteds[0]) ||
|
|
286
|
-
(this.selectMode === 'rangeTo' && this.selecteds[1]) ||
|
|
287
|
-
(this.selectMode === 'range' &&
|
|
288
|
-
this.selecteds[0] &&
|
|
289
|
-
this.selecteds[1]))) {
|
|
290
|
-
this.confirmSelect();
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Emits the selected year in multi-year view
|
|
295
|
-
*/
|
|
296
|
-
selectYear(normalizedYear) {
|
|
297
|
-
this.yearSelected.emit(normalizedYear);
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Emits selected month in year view
|
|
301
|
-
*/
|
|
302
|
-
selectMonth(normalizedMonth) {
|
|
303
|
-
this.monthSelected.emit(normalizedMonth);
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Hide the picker
|
|
307
|
-
*/
|
|
308
|
-
close() {
|
|
309
|
-
if (!this._isOpen) {
|
|
310
|
-
return;
|
|
311
|
-
}
|
|
312
|
-
if (this.popupRef && this.popupRef.hasAttached()) {
|
|
313
|
-
this.popupRef.detach();
|
|
314
|
-
}
|
|
315
|
-
if (this.pickerContainerPortal &&
|
|
316
|
-
this.pickerContainerPortal.isAttached) {
|
|
317
|
-
this.pickerContainerPortal.detach();
|
|
318
|
-
}
|
|
319
|
-
this.hidePickerStreamSub?.unsubscribe();
|
|
320
|
-
this.hidePickerStreamSub = undefined;
|
|
321
|
-
this.confirmSelectedStreamSub?.unsubscribe();
|
|
322
|
-
this.confirmSelectedStreamSub = undefined;
|
|
323
|
-
this.pickerOpenedStreamSub?.unsubscribe();
|
|
324
|
-
this.pickerOpenedStreamSub = undefined;
|
|
325
|
-
if (this.dialogRef) {
|
|
326
|
-
this.dialogRef.close();
|
|
327
|
-
this.dialogRef = undefined;
|
|
328
|
-
}
|
|
329
|
-
const completeClose = () => {
|
|
330
|
-
if (this._isOpen) {
|
|
331
|
-
this._isOpen = false;
|
|
332
|
-
this.isOpenChange.emit(this._isOpen);
|
|
333
|
-
this.afterPickerClosed.emit();
|
|
334
|
-
this.focusedElementBeforeOpen = undefined;
|
|
335
|
-
}
|
|
336
|
-
};
|
|
337
|
-
if (this.focusedElementBeforeOpen &&
|
|
338
|
-
typeof this.focusedElementBeforeOpen.focus === 'function') {
|
|
339
|
-
// Because IE moves focus asynchronously, we can't count on it being restored before we've
|
|
340
|
-
// marked the datepicker as closed. If the event fires out of sequence and the element that
|
|
341
|
-
// we're refocusing opens the datepicker on focus, the user could be stuck with not being
|
|
342
|
-
// able to close the calendar at all. We work around it by making the logic, that marks
|
|
343
|
-
// the datepicker as closed, async as well.
|
|
344
|
-
this.focusedElementBeforeOpen.focus();
|
|
345
|
-
setTimeout(completeClose);
|
|
346
|
-
}
|
|
347
|
-
else {
|
|
348
|
-
completeClose();
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Confirm the selected value
|
|
353
|
-
*/
|
|
354
|
-
confirmSelect(_event) {
|
|
355
|
-
if (this.isInSingleMode) {
|
|
356
|
-
const selected = this.selected || this.startAt || this.dateTimeAdapter.now();
|
|
357
|
-
this.confirmSelectedChange.emit(selected);
|
|
358
|
-
}
|
|
359
|
-
else if (this.isInRangeMode) {
|
|
360
|
-
this.confirmSelectedChange.emit(this.selecteds);
|
|
361
|
-
}
|
|
362
|
-
this.close();
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* Open the picker as a dialog
|
|
367
|
-
*/
|
|
368
|
-
openAsDialog() {
|
|
369
|
-
this.dialogRef = this.dialogService.open(DateTimeContainerComponent, {
|
|
370
|
-
autoFocus: false,
|
|
371
|
-
backdropClass: [
|
|
372
|
-
'cdk-overlay-dark-backdrop',
|
|
373
|
-
...this.backdropClass ? coerceArray(this.backdropClass) : []
|
|
374
|
-
],
|
|
375
|
-
paneClass: [
|
|
376
|
-
'nxt-dt-dialog',
|
|
377
|
-
...this.panelClass ? coerceArray(this.panelClass) : []
|
|
378
|
-
],
|
|
379
|
-
viewContainerRef: this.viewContainerRef,
|
|
380
|
-
scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy()
|
|
381
|
-
});
|
|
382
|
-
this.pickerContainer = this.dialogRef.componentInstance;
|
|
383
|
-
this.dialogRef.afterOpen().subscribe(() => {
|
|
384
|
-
this._isOpen = true;
|
|
385
|
-
this.isOpenChange.emit(this._isOpen);
|
|
386
|
-
this.afterPickerOpened.emit();
|
|
387
|
-
});
|
|
388
|
-
this.dialogRef.afterClosed().subscribe(() => this.close());
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Open the picker as popup
|
|
392
|
-
*/
|
|
393
|
-
openAsPopup() {
|
|
394
|
-
if (!this.pickerContainerPortal) {
|
|
395
|
-
this.pickerContainerPortal = new ComponentPortal(DateTimeContainerComponent, this.viewContainerRef);
|
|
396
|
-
}
|
|
397
|
-
if (!this.popupRef) {
|
|
398
|
-
this.createPopup();
|
|
399
|
-
}
|
|
400
|
-
if (!this.popupRef?.hasAttached()) {
|
|
401
|
-
const componentRef = this.popupRef?.attach(this.pickerContainerPortal);
|
|
402
|
-
this.pickerContainer = componentRef?.instance;
|
|
403
|
-
// Update the position once the calendar has rendered.
|
|
404
|
-
this.ngZone.onStable
|
|
405
|
-
.asObservable()
|
|
406
|
-
.pipe(take(1))
|
|
407
|
-
.subscribe(() => {
|
|
408
|
-
this.popupRef?.updatePosition();
|
|
409
|
-
});
|
|
410
|
-
// emit open stream
|
|
411
|
-
this.pickerOpenedStreamSub = this.pickerContainer?.pickerOpenedStream
|
|
412
|
-
.pipe(take(1))
|
|
413
|
-
.subscribe(() => {
|
|
414
|
-
this._isOpen = true;
|
|
415
|
-
this.isOpenChange.emit(this._isOpen);
|
|
416
|
-
this.afterPickerOpened.emit();
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
createPopup() {
|
|
421
|
-
const overlayConfig = new OverlayConfig({
|
|
422
|
-
positionStrategy: this.createPopupPositionStrategy(),
|
|
423
|
-
hasBackdrop: true,
|
|
424
|
-
backdropClass: [
|
|
425
|
-
'cdk-overlay-transparent-backdrop',
|
|
426
|
-
...this.backdropClass ? coerceArray(this.backdropClass) : []
|
|
427
|
-
],
|
|
428
|
-
scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy(),
|
|
429
|
-
panelClass: [
|
|
430
|
-
'nxt-dt-popup',
|
|
431
|
-
...this.panelClass ? coerceArray(this.panelClass) : []
|
|
432
|
-
]
|
|
433
|
-
});
|
|
434
|
-
this.popupRef = this.overlay.create(overlayConfig);
|
|
435
|
-
merge(this.popupRef.backdropClick(), this.popupRef.detachments(), this.popupRef
|
|
436
|
-
.keydownEvents()
|
|
437
|
-
.pipe(filter(event => !!(event.code.toLowerCase() === 'escape' ||
|
|
438
|
-
(this._dtInput &&
|
|
439
|
-
event.altKey &&
|
|
440
|
-
event.code.toLowerCase() === 'arrowup'))))).subscribe(() => this.close());
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* Create the popup PositionStrategy.
|
|
444
|
-
*/
|
|
445
|
-
createPopupPositionStrategy() {
|
|
446
|
-
if (this._dtInput)
|
|
447
|
-
return this.overlay
|
|
448
|
-
.position()
|
|
449
|
-
.flexibleConnectedTo(this._dtInput.elementRef)
|
|
450
|
-
.withTransformOriginOn('.nxt-dt-container')
|
|
451
|
-
.withFlexibleDimensions(false)
|
|
452
|
-
.withPush(false)
|
|
453
|
-
.withPositions([
|
|
454
|
-
{
|
|
455
|
-
originX: 'start',
|
|
456
|
-
originY: 'bottom',
|
|
457
|
-
overlayX: 'start',
|
|
458
|
-
overlayY: 'top'
|
|
459
|
-
},
|
|
460
|
-
{
|
|
461
|
-
originX: 'start',
|
|
462
|
-
originY: 'top',
|
|
463
|
-
overlayX: 'start',
|
|
464
|
-
overlayY: 'bottom'
|
|
465
|
-
},
|
|
466
|
-
{
|
|
467
|
-
originX: 'end',
|
|
468
|
-
originY: 'bottom',
|
|
469
|
-
overlayX: 'end',
|
|
470
|
-
overlayY: 'top'
|
|
471
|
-
},
|
|
472
|
-
{
|
|
473
|
-
originX: 'end',
|
|
474
|
-
originY: 'top',
|
|
475
|
-
overlayX: 'end',
|
|
476
|
-
overlayY: 'bottom'
|
|
477
|
-
},
|
|
478
|
-
{
|
|
479
|
-
originX: 'start',
|
|
480
|
-
originY: 'top',
|
|
481
|
-
overlayX: 'start',
|
|
482
|
-
overlayY: 'top',
|
|
483
|
-
offsetY: -176
|
|
484
|
-
},
|
|
485
|
-
{
|
|
486
|
-
originX: 'start',
|
|
487
|
-
originY: 'top',
|
|
488
|
-
overlayX: 'start',
|
|
489
|
-
overlayY: 'top',
|
|
490
|
-
offsetY: -352
|
|
491
|
-
}
|
|
492
|
-
]);
|
|
493
|
-
return;
|
|
494
|
-
}
|
|
495
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: DateTimeComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i2.DialogService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i3.DateTimeAdapter }, { token: NXT_DTPICKER_SCROLL_STRATEGY }, { token: NXT_DATE_TIME_FORMATS }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
496
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: DateTimeComponent, selector: "nxt-date-time", inputs: { backdropClass: "backdropClass", panelClass: "panelClass", startAt: "startAt", pickerType: "pickerType", pickerMode: "pickerMode", disabled: "disabled", isOpen: "isOpen", scrollStrategy: "scrollStrategy" }, outputs: { afterPickerOpened: "open", afterPickerClosed: "close", yearSelected: "yearSelected", monthSelected: "monthSelected", isOpenChange: "isOpenChange" }, usesInheritance: true, ngImport: i0, template: "\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
497
|
-
}
|
|
498
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: DateTimeComponent, decorators: [{
|
|
499
|
-
type: Component,
|
|
500
|
-
args: [{ selector: 'nxt-date-time', changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "\n" }]
|
|
501
|
-
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i2.DialogService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i3.DateTimeAdapter }, { type: undefined, decorators: [{
|
|
502
|
-
type: Inject,
|
|
503
|
-
args: [NXT_DTPICKER_SCROLL_STRATEGY]
|
|
504
|
-
}] }, { type: undefined, decorators: [{
|
|
505
|
-
type: Inject,
|
|
506
|
-
args: [NXT_DATE_TIME_FORMATS]
|
|
507
|
-
}] }, { type: Document, decorators: [{
|
|
508
|
-
type: Optional
|
|
509
|
-
}, {
|
|
510
|
-
type: Inject,
|
|
511
|
-
args: [DOCUMENT]
|
|
512
|
-
}] }], propDecorators: { backdropClass: [{
|
|
513
|
-
type: Input
|
|
514
|
-
}], panelClass: [{
|
|
515
|
-
type: Input
|
|
516
|
-
}], startAt: [{
|
|
517
|
-
type: Input
|
|
518
|
-
}], pickerType: [{
|
|
519
|
-
type: Input
|
|
520
|
-
}], pickerMode: [{
|
|
521
|
-
type: Input
|
|
522
|
-
}], disabled: [{
|
|
523
|
-
type: Input
|
|
524
|
-
}], isOpen: [{
|
|
525
|
-
type: Input
|
|
526
|
-
}], scrollStrategy: [{
|
|
527
|
-
type: Input
|
|
528
|
-
}], afterPickerOpened: [{
|
|
529
|
-
type: Output,
|
|
530
|
-
args: ['open']
|
|
531
|
-
}], afterPickerClosed: [{
|
|
532
|
-
type: Output,
|
|
533
|
-
args: ['close']
|
|
534
|
-
}], yearSelected: [{
|
|
535
|
-
type: Output
|
|
536
|
-
}], monthSelected: [{
|
|
537
|
-
type: Output
|
|
538
|
-
}], isOpenChange: [{
|
|
539
|
-
type: Output
|
|
540
|
-
}] } });
|
|
541
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUF1QixPQUFPLEVBQUUsYUFBYSxFQUFnRCxNQUFNLHNCQUFzQixDQUFBO0FBQ2hJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBNkIsUUFBUSxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUE7QUFDL00sT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxNQUFNLENBQUE7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU3QyxPQUFPLEVBQW1CLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLDZCQUE2QixDQUFBO0FBR3ZGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFBOzs7OztBQUcvRzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxjQUFjLENBRTVELDhCQUE4QixDQUFDLENBQUE7QUFFakMsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSw2Q0FBNkMsQ0FDekQsT0FBZ0I7SUFFaEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2pELE9BQU8sRUFBRSxDQUFBO0FBQ2IsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRztJQUNqRCxPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUNmLFVBQVUsRUFBRSw2Q0FBNkM7Q0FDNUQsQ0FBQTtBQVNELE1BQU0sT0FBTyxpQkFBcUIsU0FBUSxpQkFBb0I7SUFVMUQ7Ozs7T0FJRztJQUNILElBQ0ksT0FBTztRQUNQLDZGQUE2RjtRQUM3RixxQkFBcUI7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO1NBQ3ZCO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUE7YUFDN0I7aUJBQU0sSUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQzFDO2dCQUNFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDakM7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDakM7U0FDSjtRQUNELE9BQU07SUFDVixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsSUFBbUI7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FDekMsQ0FBQTtJQUNMLENBQUM7SUFHRDs7Ozs7O09BTUc7SUFDSCxJQUNJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDM0IsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLEdBQWU7UUFDMUIsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQTtZQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO2FBQ3pDO1NBQ0o7SUFDTCxDQUFDO0lBR0Q7Ozs7O09BS0c7SUFDSCxJQUNJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDM0IsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLElBQWdCO1FBQzNCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtTQUMxQjthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUE7U0FDOUI7SUFDTCxDQUFDO0lBR0Qsc0RBQXNEO0lBQ3RELElBQ2EsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFBO0lBQ3RELENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxLQUFjO1FBQ2hDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ2YsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUNsQztJQUNMLENBQUM7SUFHRCxtQ0FBbUM7SUFDbkMsSUFDSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxHQUFZO1FBQ25CLElBQUksR0FBRztZQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTs7WUFFWCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDcEIsQ0FBQztJQXFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDeEIsQ0FBQztJQUdELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBb0I7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN0QyxDQUFDO0lBR0QsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsTUFBNEI7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLElBQUksR0FBRztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLEdBQUc7UUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFBO0lBQ3hDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUE7SUFDekMsQ0FBQztJQUVELFlBQ3FCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixNQUFjLEVBQ1osY0FBaUMsRUFDcEQsZUFBbUMsRUFFbEIscUJBQTJDLEVBRTVELGVBQWdDLEVBR2YsUUFBbUI7UUFFcEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQWR0QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNaLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUduQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBSzNDLGFBQVEsR0FBUixRQUFRLENBQVc7UUF6TWhDLGdCQUFXLEdBQWUsTUFBTSxDQUFBO1FBc0JoQyxnQkFBVyxHQUFlLE9BQU8sQ0FBQTtRQW1DakMsWUFBTyxHQUFZLEtBQUssQ0FBQTtRQW9CaEM7O1dBRUc7UUFDSCw0REFBNEQ7UUFFbkQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQTtRQUVyRDs7V0FFRztRQUNILDREQUE0RDtRQUVuRCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFBO1FBRXJEOzs7O1dBSUc7UUFFTSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUE7UUFFN0M7Ozs7V0FJRztRQUVNLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQTtRQUU5Qzs7V0FFRztRQUVNLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQTtRQUVuRDs7V0FFRztRQUNNLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFBO1FBRTdFOztXQUVHO1FBQ00sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFBO1FBK0I3QyxlQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWlCLENBQUE7SUFvRC9DLENBQUM7SUFFRCxRQUFRLEtBQUssQ0FBQztJQUVkLFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDWixJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUMxQjtJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBZ0M7UUFDMUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsTUFBTSxLQUFLLENBQ1Asa0VBQWtFLENBQ3JFLENBQUE7U0FDSjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTthQUN6QjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTthQUN4QjtRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMvQixPQUFNO1NBQ1Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixNQUFNLEtBQUssQ0FDUCwrREFBK0QsQ0FDbEUsQ0FBQTtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBNEIsQ0FBQTtTQUM3RTtRQUVELGtDQUFrQztRQUNsQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQTtTQUN0QzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFBO1NBQ3hDO1FBRUQsa0ZBQWtGO1FBQ2xGLDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNqRCxDQUFBO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUTtZQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7O1lBRW5CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUV0QixJQUFJLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUV0QyxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUN2RSxHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDaEIsQ0FBQyxDQUNKLENBQUE7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUscUJBQXFCLENBQUMsU0FBUyxDQUNqRixDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QixDQUFDLENBQ0osQ0FBQTtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFhO1FBQ2hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtTQUM3QjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7U0FDdkI7UUFFRDs7Ozs7Ozs7V0FRRztRQUNILElBQ0ksSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRO1lBQzVCLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDNUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPO29CQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzdCO1lBQ0UsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLGNBQWlCO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxlQUFrQjtRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixPQUFNO1NBQ1Q7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFBO1NBQ3pCO1FBRUQsSUFDSSxJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQ3ZDO1lBQ0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFBO1NBQ3RDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUE7UUFFcEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQzVDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxTQUFTLENBQUE7UUFFekMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUE7UUFFdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7U0FDN0I7UUFFRCxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDN0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQTthQUM1QztRQUNMLENBQUMsQ0FBQTtRQUVELElBQ0ksSUFBSSxDQUFDLHdCQUF3QjtZQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUMzRDtZQUNFLDBGQUEwRjtZQUMxRiwyRkFBMkY7WUFDM0YseUZBQXlGO1lBQ3pGLHVGQUF1RjtZQUN2RiwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3JDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUM1QjthQUFNO1lBQ0gsYUFBYSxFQUFFLENBQUE7U0FDbEI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsTUFBWTtRQUN0QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQ1YsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDL0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUM1QzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtTQUNsRDtRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNaLE9BQU07SUFDVixDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3BDLDBCQUEwQixFQUMxQjtZQUNJLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGFBQWEsRUFBRTtnQkFDWCwyQkFBMkI7Z0JBQzNCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUMvRDtZQUNELFNBQVMsRUFBRTtnQkFDUCxlQUFlO2dCQUNmLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUN6RDtZQUNELGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1NBQ3RFLENBQ0osQ0FBQTtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQTtRQUV2RCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNqQyxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVc7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzdCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFOUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7U0FDdkQ7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7U0FDckI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUMvQixNQUFNLFlBQVksR0FFRixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQTtZQUNqRSxJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksRUFBRSxRQUFRLENBQUE7WUFFN0Msc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtpQkFDZixZQUFZLEVBQUU7aUJBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUE7WUFDbkMsQ0FBQyxDQUFDLENBQUE7WUFFTixtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsa0JBQWtCO2lCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFBO1lBQ2pDLENBQUMsQ0FBQyxDQUFBO1NBQ1Q7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQ3BDLGdCQUFnQixFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwRCxXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUU7Z0JBQ1gsa0NBQWtDO2dCQUNsQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDL0Q7WUFDRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbkUsVUFBVSxFQUFFO2dCQUNSLGNBQWM7Z0JBQ2QsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQ3pEO1NBQ0osQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVsRCxLQUFLLENBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFDM0IsSUFBSSxDQUFDLFFBQVE7YUFDUixhQUFhLEVBQUU7YUFDZixJQUFJLENBQ0QsTUFBTSxDQUNGLEtBQUssQ0FBQyxFQUFFLENBQ0osQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRO1lBQ3BDLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ1YsS0FBSyxDQUFDLE1BQU07Z0JBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUN2RCxDQUNKLENBQ1IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMkJBQTJCO1FBQy9CLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDYixPQUFPLElBQUksQ0FBQyxPQUFPO2lCQUNkLFFBQVEsRUFBRTtpQkFDVixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztpQkFDN0MscUJBQXFCLENBQUMsbUJBQW1CLENBQUM7aUJBQzFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztpQkFDN0IsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDZixhQUFhLENBQUM7Z0JBQ1g7b0JBQ0ksT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLEtBQUs7aUJBQ2xCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7aUJBQ3JCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxLQUFLO29CQUNkLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsS0FBSztvQkFDZixRQUFRLEVBQUUsS0FBSztpQkFDbEI7Z0JBQ0Q7b0JBQ0ksT0FBTyxFQUFFLEtBQUs7b0JBQ2QsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsUUFBUSxFQUFFLFFBQVE7aUJBQ3JCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsT0FBTyxFQUFFLENBQUMsR0FBRztpQkFDaEI7Z0JBQ0Q7b0JBQ0ksT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxPQUFPO29CQUNqQixRQUFRLEVBQUUsS0FBSztvQkFDZixPQUFPLEVBQUUsQ0FBQyxHQUFHO2lCQUNoQjthQUNKLENBQUMsQ0FBQTtRQUNWLE9BQU07SUFDVixDQUFDOzhHQXRtQlEsaUJBQWlCLDRMQStPZCw0QkFBNEIsYUFFNUIscUJBQXFCLGFBR3JCLFFBQVE7a0dBcFBYLGlCQUFpQixvY0M5QzlCLElBQ0E7OzJGRDZDYSxpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0ksZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNLHVCQUMxQixLQUFLOzswQkFpUHJCLE1BQU07MkJBQUMsNEJBQTRCOzswQkFFbkMsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUU1QixRQUFROzswQkFDUixNQUFNOzJCQUFDLFFBQVE7eUNBalBwQixhQUFhO3NCQURaLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFzQ0YsVUFBVTtzQkFEYixLQUFLO2dCQXNCRixVQUFVO3NCQURiLEtBQUs7Z0JBZ0JPLFFBQVE7c0JBRHBCLEtBQUs7Z0JBZ0JGLE1BQU07c0JBRFQsS0FBSztnQkFnQk4sY0FBYztzQkFEYixLQUFLO2dCQVFHLGlCQUFpQjtzQkFEekIsTUFBTTt1QkFBQyxNQUFNO2dCQVFMLGlCQUFpQjtzQkFEekIsTUFBTTt1QkFBQyxPQUFPO2dCQVNOLFlBQVk7c0JBRHBCLE1BQU07Z0JBU0UsYUFBYTtzQkFEckIsTUFBTTtnQkFPRSxZQUFZO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBCbG9ja1Njcm9sbFN0cmF0ZWd5LCBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmLCBQb3NpdGlvblN0cmF0ZWd5LCBTY3JvbGxTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5J1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCdcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi4vLi4vY2xhc3MvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnXG5pbXBvcnQgeyBEYXRlVGltZUZvcm1hdHMsIE5YVF9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnXG5pbXBvcnQgeyBEYXRlVGltZURpcmVjdGl2ZSwgUGlja2VyTW9kZSwgUGlja2VyVHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS5jbGFzcydcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4uLy4uL2NsYXNzL2RpYWxvZy1yZWYuY2xhc3MnXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRlVGltZUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0ZS10aW1lLXBpY2tlci1pbnB1dC5kaXJlY3RpdmUnXG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIGhhbmRsaW5nIHdoaWxlIHRoZSBkdFBpY2tlciBpcyBvcGVuLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTlhUX0RUUElDS0VSX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcbiAgICAoKSA9PiBTY3JvbGxTdHJhdGVneVxuPignTlhUX0RUUElDS0VSX1NDUk9MTF9TVFJBVEVHWScpXG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBOWFRfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSX0ZBQ1RPUlkoXG4gICAgb3ZlcmxheTogT3ZlcmxheVxuKTogKCkgPT4gQmxvY2tTY3JvbGxTdHJhdGVneSB7XG4gICAgY29uc3QgZm4gPSAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKVxuICAgIHJldHVybiBmblxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgTlhUX0RUUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBOWFRfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZLFxuICAgIGRlcHM6IFtPdmVybGF5XSxcbiAgICB1c2VGYWN0b3J5OiBOWFRfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSX0ZBQ1RPUllcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdueHQtZGF0ZS10aW1lJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lQ29tcG9uZW50PFQ+IGV4dGVuZHMgRGF0ZVRpbWVEaXJlY3RpdmU8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIEN1c3RvbSBjbGFzcyBmb3IgdGhlIHBpY2tlciBiYWNrZHJvcCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmFja2Ryb3BDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdXG5cbiAgICAvKiogQ3VzdG9tIGNsYXNzIGZvciB0aGUgcGlja2VyIG92ZXJsYXkgcGFuZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFuZWxDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdXG5cbiAgICBwcml2YXRlIF9zdGFydEF0PzogVFxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRlIHRvIHNob3cgd2hlbiBwaWNrZXIgb3BlbnNcbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIHNlbGVjdGVkIGRhdGUgKGlmIGF2YWlsYWJsZSkgb3IgY3VycmVudCBkYXRlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHN0YXJ0QXQoKSB7XG4gICAgICAgIC8vIElmIGFuIGV4cGxpY2l0IHN0YXJ0QXQgaXMgc2V0IHdlIHN0YXJ0IHRoZXJlLCBvdGhlcndpc2Ugd2Ugc3RhcnQgYXQgd2hhdGV2ZXIgdGhlIGN1cnJlbnRseVxuICAgICAgICAvLyBzZWxlY3RlZCB2YWx1ZSBpcy5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXJ0QXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZHRJbnB1dCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2R0SW5wdXQuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dC52YWx1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9kdElucHV0LnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9kdElucHV0LnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dC52YWx1ZXNbMF1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dC52YWx1ZXNbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXQgc3RhcnRBdChkYXRlOiBUIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0QXQgPSB0aGlzLmdldFZhbGlkRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGUpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIF9waWNrZXJUeXBlOiBQaWNrZXJUeXBlID0gJ2JvdGgnXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB0eXBlIG9mIHRoZSBkYXRlVGltZSBwaWNrZXJcbiAgICAgKlxuICAgICAqIC0gICAgYCdib3RoJ2AgLSBzaG93IGJvdGggY2FsZW5kYXIgYW5kIHRpbWVyXG4gICAgICogLSAgICBgJ2NhbGVuZGFyJ2AgLSBzaG93IG9ubHkgY2FsZW5kYXJcbiAgICAgKiAtICAgIGAndGltZXInYCAtIHNob3cgb25seSB0aW1lclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHBpY2tlclR5cGUoKTogUGlja2VyVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJUeXBlXG4gICAgfVxuXG4gICAgc2V0IHBpY2tlclR5cGUodmFsOiBQaWNrZXJUeXBlKSB7XG4gICAgICAgIGlmICh2YWwgIT09IHRoaXMuX3BpY2tlclR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlclR5cGUgPSB2YWxcbiAgICAgICAgICAgIGlmICh0aGlzLl9kdElucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHRJbnB1dC5mb3JtYXROYXRpdmVJbnB1dFZhbHVlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3BpY2tlck1vZGU6IFBpY2tlck1vZGUgPSAncG9wdXAnXG4gICAgLyoqXG4gICAgICogVGhlIHN0eWxlIHRoZSBwaWNrZXIgd291bGQgb3BlbiBhc1xuICAgICAqXG4gICAgICogLSAgICBgJ3BvcHVwJ2AgLSBkaXNwbGF5IHBpY2tlciBhdHRhY2hlZCB0byB0aGUgdHJpZ2dlciBlbGVtZW50XG4gICAgICogLSAgICBgJ2RpYWxvZydgIC0gZGlzcGxheSBwaWNrZXIgYXMgYSBkaWFsb2dcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBwaWNrZXJNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGlja2VyTW9kZVxuICAgIH1cblxuICAgIHNldCBwaWNrZXJNb2RlKG1vZGU6IFBpY2tlck1vZGUpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdwb3B1cCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlck1vZGUgPSBtb2RlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9waWNrZXJNb2RlID0gJ2RpYWxvZydcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhblxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlIHRpbWUgcGlja2VyIHNob3VsZCBiZSBkaXNhYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3ZlcnJpZGUgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgPz8gISF0aGlzLl9kdElucHV0Py5kaXNhYmxlZFxuICAgIH1cblxuICAgIG92ZXJyaWRlIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB2YWx1ZSA9ICEhdmFsdWVcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5uZXh0KHZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNPcGVuOiBib29sZWFuID0gZmFsc2VcbiAgICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgaXMgb3BlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzT3BlblxuICAgIH1cblxuICAgIHNldCBpc09wZW4odmFsOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWwpXG4gICAgICAgICAgICB0aGlzLm9wZW4oKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2Nyb2xsIHN0cmF0ZWd5IHdoZW4gdGhlIHBpY2tlciBpcyBvcGVuIChzZWUgW0NESyBkb2N1bWVudGF0aW9uXShodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vY2RrL292ZXJsYXkvb3ZlcnZpZXcjc2Nyb2xsLXN0cmF0ZWdpZXMpKVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Nyb2xsU3RyYXRlZ3k/OiBTY3JvbGxTdHJhdGVneVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgd2hlbiB0aGUgcGlja2VyIGlzIG9wZW5lZFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICAgIEBPdXRwdXQoJ29wZW4nKVxuICAgIHJlYWRvbmx5IGFmdGVyUGlja2VyT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB3aGVuIHRoZSBwaWNrZXIgaXMgY2xvc2VkXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gICAgQE91dHB1dCgnY2xvc2UnKVxuICAgIHJlYWRvbmx5IGFmdGVyUGlja2VyQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzZWxlY3RlZCB5ZWFyIGluIG11bHRpLXllYXIgdmlld1xuICAgICAqXG4gICAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHllYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgbW9udGggaW4geWVhciB2aWV3XG4gICAgICpcbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiBwaWNrZXIgb3BlbiBzdGF0ZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXNPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXG5cbiAgICAvKipcbiAgICAgKiBFbWl0IHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGhhcyBiZWVuIGNvbmZpcm1lZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvbmZpcm1TZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8VCB8IHVuZGVmaW5lZD4gfCBUPigpXG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIHRoZSBkYXRlIHRpbWUgcGlja2VyIGlzIGRpc2FibGVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGlzYWJsZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcblxuICAgIHByaXZhdGUgcGlja2VyQ29udGFpbmVyUG9ydGFsPzogQ29tcG9uZW50UG9ydGFsPFxuICAgICAgICBEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudDxUPlxuICAgID5cbiAgICBwcml2YXRlIHBpY2tlckNvbnRhaW5lcj86IERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50PFQ+XG4gICAgcHJpdmF0ZSBwb3B1cFJlZj86IE92ZXJsYXlSZWZcbiAgICBwcml2YXRlIGRpYWxvZ1JlZj86IERpYWxvZ1JlZjxEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudDxUPj5cbiAgICBwcml2YXRlIGR0SW5wdXRTdWI/OiBTdWJzY3JpcHRpb25cbiAgICBwcml2YXRlIGhpZGVQaWNrZXJTdHJlYW1TdWI/OiBTdWJzY3JpcHRpb25cbiAgICBwcml2YXRlIGNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1Yj86IFN1YnNjcmlwdGlvblxuICAgIHByaXZhdGUgcGlja2VyT3BlbmVkU3RyZWFtU3ViPzogU3Vic2NyaXB0aW9uXG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdGhhdCB3YXMgZm9jdXNlZCBiZWZvcmUgdGhlIGRhdGUgdGltZSBwaWNrZXIgd2FzIGlzT3BlbiAqL1xuICAgIHByaXZhdGUgZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuPzogSFRNTEVsZW1lbnRcblxuICAgIHByaXZhdGUgX2R0SW5wdXQ/OiBEYXRlVGltZUlucHV0RGlyZWN0aXZlPFQ+XG4gICAgZ2V0IGR0SW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ/OiBUXG4gICAgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IFQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRzID0gbmV3IEFycmF5PFQgfCB1bmRlZmluZWQ+KClcbiAgICBnZXQgc2VsZWN0ZWRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRzIHx8IFtdXG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkcyh2YWx1ZXM6IEFycmF5PFQgfCB1bmRlZmluZWQ+KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkcyA9IHZhbHVlc1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpXG4gICAgfVxuXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xuICAgIGdldCBtaW4oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fZHRJbnB1dCAmJiB0aGlzLl9kdElucHV0Lm1pbilcbiAgICB9XG5cbiAgICAvKiogVGhlIG1heGltdW0gc2VsZWN0YWJsZSBkYXRlICovXG4gICAgZ2V0IG1heCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9kdElucHV0ICYmIHRoaXMuX2R0SW5wdXQubWF4KVxuICAgIH1cblxuICAgIGdldCBkYXRlVGltZUZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R0SW5wdXQ/LmRhdGVUaW1lRmlsdGVyXG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0Py5zZWxlY3RNb2RlXG4gICAgfVxuXG4gICAgZ2V0IGlzSW5TaW5nbGVNb2RlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kdElucHV0Py5pc0luU2luZ2xlTW9kZVxuICAgIH1cblxuICAgIGdldCBpc0luUmFuZ2VNb2RlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kdElucHV0Py5pc0luUmFuZ2VNb2RlXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGRhdGVUaW1lQWRhcHRlcjogRGF0ZVRpbWVBZGFwdGVyPFQ+LFxuICAgICAgICBASW5qZWN0KE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNjcm9sbFN0cmF0ZWd5OiAoKSA9PiBTY3JvbGxTdHJhdGVneSxcbiAgICAgICAgQEluamVjdChOWFRfREFURV9USU1FX0ZPUk1BVFMpXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50PzogRG9jdW1lbnRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZGF0ZVRpbWVBZGFwdGVyLCBkYXRlVGltZUZvcm1hdHMpXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7IH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgdGhpcy5kdElucHV0U3ViPy51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMuZHRJbnB1dFN1YiA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLmNvbXBsZXRlKClcblxuICAgICAgICBpZiAodGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5kaXNwb3NlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVySW5wdXQoaW5wdXQ6IERhdGVUaW1lSW5wdXREaXJlY3RpdmU8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2R0SW5wdXQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICdBIE54dCBEYXRlVGltZVBpY2tlciBjYW4gb25seSBiZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgaW5wdXQuJ1xuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHRJbnB1dCA9IGlucHV0XG4gICAgICAgIHRoaXMuZHRJbnB1dFN1YiA9IHRoaXMuX2R0SW5wdXQudmFsdWVDaGFuZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZHMgPSB2YWx1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNPcGVuIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kdElucHV0KSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAnQXR0ZW1wdGVkIHRvIG9wZW4gYW4gRGF0ZVRpbWVQaWNrZXIgd2l0aCBubyBhc3NvY2lhdGVkIGlucHV0LidcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIHBpY2tlciBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuX2R0SW5wdXQudmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRzID0gdGhpcy5fZHRJbnB1dC52YWx1ZXNcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoZW4gdGhlIHBpY2tlciBpcyBvcGVuICwgd2UgbWFrZSBzdXJlIHRoZSBwaWNrZXIncyBjdXJyZW50IHNlbGVjdGVkIHRpbWUgdmFsdWVcbiAgICAgICAgLy8gaXMgdGhlIHNhbWUgYXMgdGhlIF9zdGFydEF0IHRpbWUgdmFsdWUuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmIHRoaXMucGlja2VyVHlwZSAhPT0gJ2NhbGVuZGFyJyAmJiB0aGlzLl9zdGFydEF0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuc2VsZWN0ZWQpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMuc2VsZWN0ZWQpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5zZWxlY3RlZCksXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0SG91cnModGhpcy5fc3RhcnRBdCksXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TWludXRlcyh0aGlzLl9zdGFydEF0KSxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRTZWNvbmRzKHRoaXMuX3N0YXJ0QXQpXG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5waWNrZXJNb2RlID09PSAnZGlhbG9nJylcbiAgICAgICAgICAgIHRoaXMub3BlbkFzRGlhbG9nKClcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5vcGVuQXNQb3B1cCgpXG5cbiAgICAgICAgaWYgKHRoaXMucGlja2VyQ29udGFpbmVyKVxuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXIucGlja2VyID0gdGhpc1xuXG4gICAgICAgIC8vIExpc3RlbiB0byBwaWNrZXIgY29udGFpbmVyJ3MgaGlkZVBpY2tlclN0cmVhbVxuICAgICAgICB0aGlzLmhpZGVQaWNrZXJTdHJlYW1TdWIgPSB0aGlzLnBpY2tlckNvbnRhaW5lcj8uaGlkZVBpY2tlclN0cmVhbS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIClcblxuICAgICAgICAvLyBMaXN0ZW4gdG8gcGlja2VyIGNvbnRhaW5lcidzIGNvbmZpcm1TZWxlY3RlZFN0cmVhbVxuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1YiA9IHRoaXMucGlja2VyQ29udGFpbmVyPy5jb25maXJtU2VsZWN0ZWRTdHJlYW0uc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3QoZXZlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIHRoZSBnaXZlbiBkYXRlXG4gICAgICovXG4gICAgc2VsZWN0KGRhdGU6IFRbXSB8IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRzID0gWy4uLmRhdGVdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gZGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhc2VzIGluIHdoaWNoIGF1dG9tYXRpY2FsbHkgY29uZmlybSB0aGUgc2VsZWN0IHdoZW4gZGF0ZSBvciBkYXRlcyBhcmUgc2VsZWN0ZWQ6XG4gICAgICAgICAqIDEpIHBpY2tlciBtb2RlIGlzIE5PVCAnZGlhbG9nJ1xuICAgICAgICAgKiAyKSBwaWNrZXIgdHlwZSBpcyAnY2FsZW5kYXInIGFuZCBzZWxlY3RNb2RlIGlzICdzaW5nbGUnLlxuICAgICAgICAgKiAzKSBwaWNrZXIgdHlwZSBpcyAnY2FsZW5kYXInIGFuZCBzZWxlY3RNb2RlIGlzICdyYW5nZScgYW5kXG4gICAgICAgICAqICAgIHRoZSAnc2VsZWN0ZWRzJyBoYXMgJ2Zyb20nKHNlbGVjdGVkc1swXSkgYW5kICd0bycoc2VsZWN0ZWRzWzFdKSB2YWx1ZXMuXG4gICAgICAgICAqIDQpIHNlbGVjdE1vZGUgaXMgJ3JhbmdlRnJvbScgYW5kIHNlbGVjdGVkc1swXSBoYXMgdmFsdWUuXG4gICAgICAgICAqIDUpIHNlbGVjdE1vZGUgaXMgJ3JhbmdlVG8nIGFuZCBzZWxlY3RlZHNbMV0gaGFzIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5waWNrZXJNb2RlICE9PSAnZGlhbG9nJyAmJlxuICAgICAgICAgICAgdGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgICAoKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZScgJiYgdGhpcy5zZWxlY3RlZCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJyAmJiB0aGlzLnNlbGVjdGVkc1swXSkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycgJiYgdGhpcy5zZWxlY3RlZHNbMV0pIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkc1swXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkc1sxXSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0KClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHRoZSBzZWxlY3RlZCB5ZWFyIGluIG11bHRpLXllYXIgdmlld1xuICAgICAqL1xuICAgIHNlbGVjdFllYXIobm9ybWFsaXplZFllYXI6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdChub3JtYWxpemVkWWVhcilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzZWxlY3RlZCBtb250aCBpbiB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBzZWxlY3RNb250aChub3JtYWxpemVkTW9udGg6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQobm9ybWFsaXplZE1vbnRoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIHBpY2tlclxuICAgICAqL1xuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wb3B1cFJlZiAmJiB0aGlzLnBvcHVwUmVmLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuZGV0YWNoKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyUG9ydGFsICYmXG4gICAgICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbC5pc0F0dGFjaGVkXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwuZGV0YWNoKClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLmhpZGVQaWNrZXJTdHJlYW1TdWIgPSB1bmRlZmluZWRcblxuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1YiA9IHVuZGVmaW5lZFxuXG4gICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViPy51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViID0gdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IHVuZGVmaW5lZFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29tcGxldGVDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5faXNPcGVuKVxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJQaWNrZXJDbG9zZWQuZW1pdCgpXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4uZm9jdXMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIElFIG1vdmVzIGZvY3VzIGFzeW5jaHJvbm91c2x5LCB3ZSBjYW4ndCBjb3VudCBvbiBpdCBiZWluZyByZXN0b3JlZCBiZWZvcmUgd2UndmVcbiAgICAgICAgICAgIC8vIG1hcmtlZCB0aGUgZGF0ZXBpY2tlciBhcyBjbG9zZWQuIElmIHRoZSBldmVudCBmaXJlcyBvdXQgb2Ygc2VxdWVuY2UgYW5kIHRoZSBlbGVtZW50IHRoYXRcbiAgICAgICAgICAgIC8vIHdlJ3JlIHJlZm9jdXNpbmcgb3BlbnMgdGhlIGRhdGVwaWNrZXIgb24gZm9jdXMsIHRoZSB1c2VyIGNvdWxkIGJlIHN0dWNrIHdpdGggbm90IGJlaW5nXG4gICAgICAgICAgICAvLyBhYmxlIHRvIGNsb3NlIHRoZSBjYWxlbmRhciBhdCBhbGwuIFdlIHdvcmsgYXJvdW5kIGl0IGJ5IG1ha2luZyB0aGUgbG9naWMsIHRoYXQgbWFya3NcbiAgICAgICAgICAgIC8vIHRoZSBkYXRlcGlja2VyIGFzIGNsb3NlZCwgYXN5bmMgYXMgd2VsbC5cbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuLmZvY3VzKClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY29tcGxldGVDbG9zZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBsZXRlQ2xvc2UoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlybSB0aGUgc2VsZWN0ZWQgdmFsdWVcbiAgICAgKi9cbiAgICBjb25maXJtU2VsZWN0KF9ldmVudD86IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5zdGFydEF0IHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZENoYW5nZS5lbWl0KHNlbGVjdGVkKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkcylcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHRoZSBwaWNrZXIgYXMgYSBkaWFsb2dcbiAgICAgKi9cbiAgICBwcml2YXRlIG9wZW5Bc0RpYWxvZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgICAgIERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAnY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCcsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuYmFja2Ryb3BDbGFzcyA/IGNvZXJjZUFycmF5KHRoaXMuYmFja2Ryb3BDbGFzcykgOiBbXVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcGFuZUNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICdueHQtZHQtZGlhbG9nJyxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wYW5lbENsYXNzID8gY29lcmNlQXJyYXkodGhpcy5wYW5lbENsYXNzKSA6IFtdXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuc2Nyb2xsU3RyYXRlZ3kgfHwgdGhpcy5kZWZhdWx0U2Nyb2xsU3RyYXRlZ3koKVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyID0gdGhpcy5kaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2VcblxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlck9wZW4oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZVxuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLl9pc09wZW4pXG4gICAgICAgICAgICB0aGlzLmFmdGVyUGlja2VyT3BlbmVkLmVtaXQoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiB0aGUgcGlja2VyIGFzIHBvcHVwXG4gICAgICovXG4gICAgcHJpdmF0ZSBvcGVuQXNQb3B1cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbCkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPFxuICAgICAgICAgICAgICAgIERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50PFQ+XG4gICAgICAgICAgICA+KERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucG9wdXBSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUG9wdXAoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmPy5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxcbiAgICAgICAgICAgICAgICBEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudDxUPlxuICAgICAgICAgICAgPiB8IHVuZGVmaW5lZCA9IHRoaXMucG9wdXBSZWY/LmF0dGFjaCh0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbClcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyID0gY29tcG9uZW50UmVmPy5pbnN0YW5jZVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9uY2UgdGhlIGNhbGVuZGFyIGhhcyByZW5kZXJlZC5cbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3B1cFJlZj8udXBkYXRlUG9zaXRpb24oKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vIGVtaXQgb3BlbiBzdHJlYW1cbiAgICAgICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViID0gdGhpcy5waWNrZXJDb250YWluZXI/LnBpY2tlck9wZW5lZFN0cmVhbVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLl9pc09wZW4pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJQaWNrZXJPcGVuZWQuZW1pdCgpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUG9wdXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlDb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmNyZWF0ZVBvcHVwUG9zaXRpb25TdHJhdGVneSgpLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiBbXG4gICAgICAgICAgICAgICAgJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmJhY2tkcm9wQ2xhc3MgPyBjb2VyY2VBcnJheSh0aGlzLmJhY2tkcm9wQ2xhc3MpIDogW11cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5zY3JvbGxTdHJhdGVneSB8fCB0aGlzLmRlZmF1bHRTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogW1xuICAgICAgICAgICAgICAgICdueHQtZHQtcG9wdXAnLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucGFuZWxDbGFzcyA/IGNvZXJjZUFycmF5KHRoaXMucGFuZWxDbGFzcykgOiBbXVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMucG9wdXBSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKG92ZXJsYXlDb25maWcpXG5cbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmJhY2tkcm9wQ2xpY2soKSxcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuZGV0YWNobWVudHMoKSxcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWZcbiAgICAgICAgICAgICAgICAua2V5ZG93bkV2ZW50cygpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISEoZXZlbnQuY29kZS50b0xvd2VyQ2FzZSgpID09PSAnZXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZHRJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jb2RlLnRvTG93ZXJDYXNlKCkgPT09ICdhcnJvd3VwJykpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIHBvcHVwIFBvc2l0aW9uU3RyYXRlZ3kuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVQb3B1cFBvc2l0aW9uU3RyYXRlZ3koKTogUG9zaXRpb25TdHJhdGVneSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLl9kdElucHV0KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZHRJbnB1dC5lbGVtZW50UmVmKVxuICAgICAgICAgICAgICAgIC53aXRoVHJhbnNmb3JtT3JpZ2luT24oJy5ueHQtZHQtY29udGFpbmVyJylcbiAgICAgICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgICAgICAud2l0aFB1c2goZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiAtMTc2XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogLTM1MlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgcmV0dXJuXG4gICAgfVxufVxuIiwiXG4iXX0=
|
package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.animations.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { animate, animateChild, group, query, state, style, transition, trigger } from '@angular/animations';
|
|
2
|
-
/** @internal */
|
|
3
|
-
export const dateTimePickerAnimations = {
|
|
4
|
-
transformPicker: trigger('transformPicker', [
|
|
5
|
-
state('void', style({ opacity: 0, transform: 'scale(1, 0)' })),
|
|
6
|
-
state('enter', style({ opacity: 1, transform: 'scale(1, 1)' })),
|
|
7
|
-
transition('void => enter', group([
|
|
8
|
-
query('@fadeInPicker', animateChild(), { optional: true }),
|
|
9
|
-
animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')
|
|
10
|
-
])),
|
|
11
|
-
transition('enter => void', animate('100ms linear', style({ opacity: 0 })))
|
|
12
|
-
]),
|
|
13
|
-
fadeInPicker: trigger('fadeInPicker', [
|
|
14
|
-
state('enter', style({ opacity: 1 })),
|
|
15
|
-
state('void', style({ opacity: 0 })),
|
|
16
|
-
transition('void => enter', animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))
|
|
17
|
-
])
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1jb250YWluZXIuYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BpY2stZGF0ZXRpbWUvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLXBpY2tlci1jb250YWluZXIvZGF0ZS10aW1lLXBpY2tlci1jb250YWluZXIuYW5pbWF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBNEIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV0SSxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBR2pDO0lBRUEsZUFBZSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtRQUN4QyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDOUQsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELFVBQVUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1lBQzlCLEtBQUssQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDMUQsT0FBTyxDQUFDLHdDQUF3QyxDQUFDO1NBQ3BELENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzlFLENBQUM7SUFFRixZQUFZLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRTtRQUNsQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsVUFBVSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsOENBQThDLENBQUMsQ0FBQztLQUN2RixDQUFDO0NBQ0wsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIGFuaW1hdGVDaGlsZCwgQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhLCBncm91cCwgcXVlcnksIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBkYXRlVGltZVBpY2tlckFuaW1hdGlvbnM6IHtcbiAgICByZWFkb25seSB0cmFuc2Zvcm1QaWNrZXI6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YVxuICAgIHJlYWRvbmx5IGZhZGVJblBpY2tlcjogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhXG59ID0ge1xuXG4gICAgdHJhbnNmb3JtUGlja2VyOiB0cmlnZ2VyKCd0cmFuc2Zvcm1QaWNrZXInLCBbXG4gICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSgxLCAwKScgfSkpLFxuICAgICAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEsIDEpJyB9KSksXG4gICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gZW50ZXInLCBncm91cChbXG4gICAgICAgICAgICBxdWVyeSgnQGZhZGVJblBpY2tlcicsIGFuaW1hdGVDaGlsZCgpLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuICAgICAgICAgICAgYW5pbWF0ZSgnNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknKVxuICAgICAgICBdKSksXG4gICAgICAgIHRyYW5zaXRpb24oJ2VudGVyID0+IHZvaWQnLCBhbmltYXRlKCcxMDBtcyBsaW5lYXInLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpKVxuICAgIF0pLFxuXG4gICAgZmFkZUluUGlja2VyOiB0cmlnZ2VyKCdmYWRlSW5QaWNrZXInLCBbXG4gICAgICAgIHN0YXRlKCdlbnRlcicsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXG4gICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKSxcbiAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBlbnRlcicsIGFuaW1hdGUoJzQwMG1zIDEwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpJykpXG4gICAgXSlcbn1cbiJdfQ==
|