@netwin/angular-datetime-picker 18.1.0 → 19.0.0-rc.1
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 +1 -27
- package/assets/style/picker.min.css +1 -1
- package/esm2022/lib/date-time/adapter/date-time-adapter.class.mjs +7 -13
- package/esm2022/lib/date-time/adapter/date-time-format.class.mjs +1 -4
- package/esm2022/lib/date-time/adapter/native-date-time-adapter.class.mjs +21 -36
- package/esm2022/lib/date-time/adapter/native-date-time-format.class.mjs +1 -2
- package/esm2022/lib/date-time/adapter/native-date-time.module.mjs +9 -12
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.mjs +12 -25
- package/esm2022/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.mjs +1 -2
- package/esm2022/lib/date-time/calendar-body.component.mjs +22 -31
- package/esm2022/lib/date-time/calendar-month-view.component.mjs +13 -29
- package/esm2022/lib/date-time/calendar-multi-year-view.component.mjs +11 -17
- package/esm2022/lib/date-time/calendar-year-view.component.mjs +11 -19
- package/esm2022/lib/date-time/calendar.component.mjs +16 -27
- package/esm2022/lib/date-time/date-time-inline.component.mjs +262 -108
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +4 -11
- package/esm2022/lib/date-time/date-time.module.mjs +12 -36
- package/esm2022/lib/date-time/options-provider.mjs +1 -1
- package/esm2022/lib/date-time/timer-box.component.mjs +6 -16
- package/esm2022/lib/date-time/timer.component.mjs +18 -17
- package/esm2022/lib/types/date-view.mjs +19 -0
- package/esm2022/lib/types/index.mjs +4 -0
- package/esm2022/lib/types/picker-type.mjs +2 -0
- package/esm2022/lib/types/select-mode.mjs +2 -0
- package/esm2022/lib/utils/array.utils.mjs +2 -9
- package/esm2022/lib/utils/constants.mjs +1 -4
- package/esm2022/lib/utils/date.utils.mjs +1 -4
- package/esm2022/public_api.mjs +13 -20
- package/fesm2022/netwin-angular-datetime-picker.mjs +2653 -5112
- package/fesm2022/netwin-angular-datetime-picker.mjs.map +1 -1
- package/lib/date-time/adapter/date-time-adapter.class.d.ts +16 -26
- package/lib/date-time/adapter/date-time-format.class.d.ts +8 -12
- package/lib/date-time/adapter/native-date-time-adapter.class.d.ts +7 -18
- package/lib/date-time/adapter/native-date-time-format.class.d.ts +0 -3
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.d.ts +6 -17
- package/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.d.ts +0 -3
- package/lib/date-time/calendar-body.component.d.ts +21 -26
- package/lib/date-time/calendar-month-view.component.d.ts +19 -24
- package/lib/date-time/calendar-multi-year-view.component.d.ts +7 -8
- package/lib/date-time/calendar-year-view.component.d.ts +8 -9
- package/lib/date-time/calendar.component.d.ts +15 -21
- package/lib/date-time/date-time-inline.component.d.ts +164 -74
- package/lib/date-time/date-time-picker-intl.service.d.ts +0 -4
- package/lib/date-time/date-time.module.d.ts +11 -18
- package/lib/date-time/timer-box.component.d.ts +4 -5
- package/lib/date-time/timer.component.d.ts +6 -9
- package/lib/types/date-view.d.ts +17 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/picker-type.d.ts +7 -0
- package/lib/types/select-mode.d.ts +8 -0
- package/lib/utils/array.utils.d.ts +0 -3
- package/lib/utils/constants.d.ts +0 -3
- package/lib/utils/date.utils.d.ts +0 -3
- package/package.json +1 -1
- package/public_api.d.ts +12 -19
- package/esm2022/lib/date-time/date-time-picker-container.component.mjs +0 -405
- package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +0 -598
- package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +0 -64
- package/esm2022/lib/date-time/date-time-picker.animations.mjs +0 -21
- package/esm2022/lib/date-time/date-time-picker.component.mjs +0 -564
- package/esm2022/lib/date-time/date-time.class.mjs +0 -176
- package/esm2022/lib/date-time/numberedFixLen.pipe.mjs +0 -28
- package/esm2022/lib/dialog/dialog-config.class.mjs +0 -59
- package/esm2022/lib/dialog/dialog-container.component.mjs +0 -232
- package/esm2022/lib/dialog/dialog-ref.class.mjs +0 -134
- package/esm2022/lib/dialog/dialog.module.mjs +0 -26
- package/esm2022/lib/dialog/dialog.service.mjs +0 -228
- package/esm2022/lib/utils/index.mjs +0 -5
- package/esm2022/lib/utils/object.utils.mjs +0 -26
- package/lib/date-time/date-time-picker-container.component.d.ts +0 -130
- package/lib/date-time/date-time-picker-input.directive.d.ts +0 -164
- package/lib/date-time/date-time-picker-trigger.directive.d.ts +0 -23
- package/lib/date-time/date-time-picker.animations.d.ts +0 -8
- package/lib/date-time/date-time-picker.component.d.ts +0 -173
- package/lib/date-time/date-time.class.d.ts +0 -103
- package/lib/date-time/numberedFixLen.pipe.d.ts +0 -10
- package/lib/dialog/dialog-config.class.d.ts +0 -169
- package/lib/dialog/dialog-container.component.d.ts +0 -58
- package/lib/dialog/dialog-ref.class.d.ts +0 -51
- package/lib/dialog/dialog.module.d.ts +0 -11
- package/lib/dialog/dialog.service.d.ts +0 -76
- package/lib/utils/index.d.ts +0 -4
- package/lib/utils/object.utils.d.ts +0 -11
|
@@ -1,43 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
* date-time-inline.component
|
|
3
|
-
*/
|
|
4
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
1
|
+
import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, numberAttribute, Output } from '@angular/core';
|
|
6
2
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { DateView } from '../types';
|
|
4
|
+
import { DateTimeAdapter } from './adapter/date-time-adapter.class';
|
|
7
5
|
import { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';
|
|
8
|
-
import {
|
|
9
|
-
import { OwlDateTime } from './date-time.class';
|
|
6
|
+
import { OwlDateTimeIntl } from './date-time-picker-intl.service';
|
|
10
7
|
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "./
|
|
12
|
-
import * as i2 from "./
|
|
13
|
-
|
|
8
|
+
import * as i1 from "./timer.component";
|
|
9
|
+
import * as i2 from "./calendar.component";
|
|
10
|
+
const OWL_DATETIME_VALUE_ACCESSOR = {
|
|
14
11
|
provide: NG_VALUE_ACCESSOR,
|
|
15
12
|
useExisting: forwardRef(() => OwlDateTimeInlineComponent),
|
|
16
13
|
multi: true
|
|
17
14
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
let nextUniqueComponentId = 0;
|
|
16
|
+
export class OwlDateTimeInlineComponent {
|
|
17
|
+
#changeDetector;
|
|
18
|
+
#pickerIntl;
|
|
19
|
+
#dateTimeFormats;
|
|
20
|
+
#dateTimeAdapter;
|
|
21
|
+
get firstDayOfWeek() {
|
|
22
|
+
return this._firstDayOfWeek;
|
|
23
|
+
}
|
|
24
|
+
set firstDayOfWeek(value) {
|
|
25
|
+
value = numberAttribute(value, undefined);
|
|
26
|
+
if (value > 6 || value < 0) {
|
|
27
|
+
this._firstDayOfWeek = undefined;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this._firstDayOfWeek = value;
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
|
-
get
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
get selectMode() {
|
|
34
|
-
return this._selectMode;
|
|
35
|
-
}
|
|
36
|
-
set selectMode(mode) {
|
|
37
|
-
if (mode !== 'single' && mode !== 'range' && mode !== 'rangeFrom' && mode !== 'rangeTo') {
|
|
38
|
-
throw Error('OwlDateTime Error: invalid selectMode value!');
|
|
33
|
+
get formatOptions() {
|
|
34
|
+
if (this.pickerType === 'both') {
|
|
35
|
+
return this.#dateTimeFormats.fullPickerInput;
|
|
36
|
+
}
|
|
37
|
+
if (this.pickerType === 'calendar') {
|
|
38
|
+
return this.#dateTimeFormats.datePickerInput;
|
|
39
39
|
}
|
|
40
|
-
this.
|
|
40
|
+
return this.#dateTimeFormats.timePickerInput;
|
|
41
|
+
}
|
|
42
|
+
getValidDate(obj) {
|
|
43
|
+
return this.#dateTimeAdapter.isDateInstance(obj) && this.#dateTimeAdapter.isValid(obj) ? obj : null;
|
|
41
44
|
}
|
|
42
45
|
get startAt() {
|
|
43
46
|
if (this._startAt) {
|
|
@@ -57,7 +60,7 @@ export class OwlDateTimeInlineComponent extends OwlDateTime {
|
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
set startAt(date) {
|
|
60
|
-
this._startAt = this.getValidDate(this
|
|
63
|
+
this._startAt = this.getValidDate(this.#dateTimeAdapter.deserialize(date));
|
|
61
64
|
}
|
|
62
65
|
get endAt() {
|
|
63
66
|
if (this._endAt) {
|
|
@@ -74,33 +77,37 @@ export class OwlDateTimeInlineComponent extends OwlDateTime {
|
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
set endAt(date) {
|
|
77
|
-
this._endAt = this.getValidDate(this
|
|
80
|
+
this._endAt = this.getValidDate(this.#dateTimeAdapter.deserialize(date));
|
|
78
81
|
}
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
// TODO: remove this getter when `owlDateTimeFilter` is removed
|
|
83
|
+
get dateTimeFilterGetter() {
|
|
84
|
+
return this.dateTimeFilter || this.owlDateTimeFilter;
|
|
81
85
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
get
|
|
86
|
+
/**
|
|
87
|
+
* The minimum valid date.
|
|
88
|
+
*/
|
|
89
|
+
get min() {
|
|
86
90
|
return this._min || null;
|
|
87
91
|
}
|
|
88
|
-
set
|
|
89
|
-
this._min = this.getValidDate(this
|
|
90
|
-
this
|
|
92
|
+
set min(value) {
|
|
93
|
+
this._min = this.getValidDate(this.#dateTimeAdapter.deserialize(value));
|
|
94
|
+
this.#changeDetector.markForCheck();
|
|
91
95
|
}
|
|
92
|
-
|
|
96
|
+
/**
|
|
97
|
+
* The maximum valid date.
|
|
98
|
+
*/
|
|
99
|
+
get max() {
|
|
93
100
|
return this._max || null;
|
|
94
101
|
}
|
|
95
|
-
set
|
|
96
|
-
this._max = this.getValidDate(this
|
|
97
|
-
this
|
|
102
|
+
set max(value) {
|
|
103
|
+
this._max = this.getValidDate(this.#dateTimeAdapter.deserialize(value));
|
|
104
|
+
this.#changeDetector.markForCheck();
|
|
98
105
|
}
|
|
99
106
|
get value() {
|
|
100
107
|
return this._value;
|
|
101
108
|
}
|
|
102
109
|
set value(value) {
|
|
103
|
-
value = this
|
|
110
|
+
value = this.#dateTimeAdapter.deserialize(value);
|
|
104
111
|
value = this.getValidDate(value);
|
|
105
112
|
this._value = value;
|
|
106
113
|
this.selected = value;
|
|
@@ -111,9 +118,9 @@ export class OwlDateTimeInlineComponent extends OwlDateTime {
|
|
|
111
118
|
set values(values) {
|
|
112
119
|
if (values && values.length > 0) {
|
|
113
120
|
values = values.map((v) => {
|
|
114
|
-
v = this
|
|
121
|
+
v = this.#dateTimeAdapter.deserialize(v);
|
|
115
122
|
v = this.getValidDate(v);
|
|
116
|
-
return v ? this
|
|
123
|
+
return v ? this.#dateTimeAdapter.clone(v) : null;
|
|
117
124
|
});
|
|
118
125
|
this._values = [...values];
|
|
119
126
|
this.selecteds = [...values];
|
|
@@ -128,59 +135,140 @@ export class OwlDateTimeInlineComponent extends OwlDateTime {
|
|
|
128
135
|
}
|
|
129
136
|
set selected(value) {
|
|
130
137
|
this._selected = value;
|
|
131
|
-
this
|
|
138
|
+
this.#changeDetector.markForCheck();
|
|
132
139
|
}
|
|
133
140
|
get selecteds() {
|
|
134
141
|
return this._selecteds;
|
|
135
142
|
}
|
|
136
143
|
set selecteds(values) {
|
|
137
144
|
this._selecteds = values;
|
|
138
|
-
this
|
|
139
|
-
}
|
|
140
|
-
get opened() {
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
143
|
-
get pickerMode() {
|
|
144
|
-
return 'inline';
|
|
145
|
+
this.#changeDetector.markForCheck();
|
|
145
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Returns whether the picker is in single mode
|
|
149
|
+
*/
|
|
146
150
|
get isInSingleMode() {
|
|
147
|
-
return this.
|
|
151
|
+
return this.selectMode === 'single';
|
|
148
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Returns whether the picker is in range mode (range, rangeFrom, rangeTo)
|
|
155
|
+
*/
|
|
149
156
|
get isInRangeMode() {
|
|
150
|
-
return this.
|
|
157
|
+
return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
|
|
151
158
|
}
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
/**
|
|
160
|
+
* The range 'from' label
|
|
161
|
+
*/
|
|
162
|
+
get fromLabel() {
|
|
163
|
+
return this.#pickerIntl.rangeFromLabel;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The range 'to' label
|
|
167
|
+
*/
|
|
168
|
+
get toLabel() {
|
|
169
|
+
return this.#pickerIntl.rangeToLabel;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* The range 'from' formatted value
|
|
173
|
+
*/
|
|
174
|
+
get fromFormattedValue() {
|
|
175
|
+
const value = this.selecteds[0];
|
|
176
|
+
return value ? this.#dateTimeAdapter.format(value, this.formatOptions) : '';
|
|
154
177
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
178
|
+
/**
|
|
179
|
+
* The range 'to' formatted value
|
|
180
|
+
*/
|
|
181
|
+
get toFormattedValue() {
|
|
182
|
+
const value = this.selecteds[1];
|
|
183
|
+
return value ? this.#dateTimeAdapter.format(value, this.formatOptions) : '';
|
|
184
|
+
}
|
|
185
|
+
constructor() {
|
|
186
|
+
this.#changeDetector = inject(ChangeDetectorRef);
|
|
187
|
+
this.#pickerIntl = inject(OwlDateTimeIntl);
|
|
188
|
+
this.#dateTimeFormats = inject(OWL_DATE_TIME_FORMATS, { optional: true });
|
|
189
|
+
this.#dateTimeAdapter = inject(DateTimeAdapter, { optional: true });
|
|
190
|
+
/**
|
|
191
|
+
* Whether the timer is in hour12 format
|
|
192
|
+
*/
|
|
193
|
+
this.hour12Timer = false;
|
|
194
|
+
/**
|
|
195
|
+
* The view that the calendar should start in.
|
|
196
|
+
*/
|
|
197
|
+
this.startView = DateView.MONTH;
|
|
198
|
+
/**
|
|
199
|
+
* Whether to should only the year and multi-year views.
|
|
200
|
+
*/
|
|
201
|
+
this.yearOnly = false;
|
|
202
|
+
/**
|
|
203
|
+
* Whether to should only the multi-year view.
|
|
204
|
+
*/
|
|
205
|
+
this.multiyearOnly = false;
|
|
206
|
+
/**
|
|
207
|
+
* Hours to change per step
|
|
208
|
+
*/
|
|
209
|
+
this.stepHour = 1;
|
|
210
|
+
/**
|
|
211
|
+
* Minutes to change per step
|
|
212
|
+
*/
|
|
213
|
+
this.stepMinute = 1;
|
|
214
|
+
/**
|
|
215
|
+
* Seconds to change per step
|
|
216
|
+
*/
|
|
217
|
+
this.stepSecond = 1;
|
|
218
|
+
/**
|
|
219
|
+
* Whether to hide dates in other months at the start or end of the current month.
|
|
220
|
+
*/
|
|
221
|
+
this.hideOtherMonths = false;
|
|
222
|
+
/**
|
|
223
|
+
* Date Time Checker to check if the give dateTime is selectable
|
|
224
|
+
*/
|
|
225
|
+
this.dateTimeChecker = (dateTime) => {
|
|
226
|
+
return (!!dateTime &&
|
|
227
|
+
(!this.dateTimeFilter || this.dateTimeFilter(dateTime)) &&
|
|
228
|
+
(!this.min || this.#dateTimeAdapter.compare(dateTime, this.min) >= 0) &&
|
|
229
|
+
(!this.max || this.#dateTimeAdapter.compare(dateTime, this.max) <= 0));
|
|
230
|
+
};
|
|
160
231
|
/**
|
|
161
|
-
* Set the
|
|
162
|
-
* 'both' -- show both calendar and timer
|
|
163
|
-
* 'calendar' -- show only calendar
|
|
164
|
-
* 'timer' -- show only timer
|
|
232
|
+
* Set the {@link PickerType} of the dateTime picker
|
|
165
233
|
*/
|
|
166
|
-
this.
|
|
167
|
-
|
|
168
|
-
|
|
234
|
+
this.pickerType = 'both';
|
|
235
|
+
/**
|
|
236
|
+
* Whether the picker is disabled or not
|
|
237
|
+
*/
|
|
238
|
+
this.disabled = false;
|
|
239
|
+
/**
|
|
240
|
+
* Whether to show the second's timer
|
|
241
|
+
*/
|
|
242
|
+
this.showSecondsTimer = false;
|
|
243
|
+
/**
|
|
244
|
+
* Which select mode to use:
|
|
245
|
+
* - 'single'
|
|
246
|
+
* - 'range'
|
|
247
|
+
* - 'rangeFrom'
|
|
248
|
+
* - 'rangeTo'
|
|
249
|
+
*/
|
|
250
|
+
this.selectMode = 'single';
|
|
251
|
+
/**
|
|
252
|
+
* @deprecated use `dateTimeFilter` instead!
|
|
253
|
+
*/
|
|
254
|
+
this.owlDateTimeFilter = null;
|
|
255
|
+
this.dateTimeFilter = null;
|
|
169
256
|
this._values = [];
|
|
170
257
|
/**
|
|
171
258
|
* Emits selected year in multi-year view
|
|
172
259
|
* This doesn't imply a change on the selected date.
|
|
173
|
-
|
|
260
|
+
*/
|
|
174
261
|
this.yearSelected = new EventEmitter();
|
|
175
262
|
/**
|
|
176
263
|
* Emits selected month in year view
|
|
177
264
|
* This doesn't imply a change on the selected date.
|
|
178
|
-
|
|
265
|
+
*/
|
|
179
266
|
this.monthSelected = new EventEmitter();
|
|
180
267
|
/**
|
|
181
268
|
* Emits selected date
|
|
182
|
-
|
|
269
|
+
*/
|
|
183
270
|
this.dateSelected = new EventEmitter();
|
|
271
|
+
this.activeSelectedIndex = 0; // The current active SelectedIndex in range select mode (0: 'from', 1: 'to')
|
|
184
272
|
this._selecteds = [];
|
|
185
273
|
this.onModelChange = () => {
|
|
186
274
|
/* noop */
|
|
@@ -188,18 +276,25 @@ export class OwlDateTimeInlineComponent extends OwlDateTime {
|
|
|
188
276
|
this.onModelTouched = () => {
|
|
189
277
|
/* noop */
|
|
190
278
|
};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
279
|
+
if (!this.#dateTimeAdapter) {
|
|
280
|
+
throw Error(`OwlDateTimePicker: No provider found for DateTimeAdapter. You must import one of the following ` +
|
|
281
|
+
`modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +
|
|
282
|
+
`custom implementation.`);
|
|
283
|
+
}
|
|
284
|
+
if (!this.#dateTimeFormats) {
|
|
285
|
+
throw Error(`OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following ` +
|
|
286
|
+
`modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a ` +
|
|
287
|
+
`custom implementation.`);
|
|
288
|
+
}
|
|
289
|
+
this.id = `owl-dt-picker-${nextUniqueComponentId++}`;
|
|
194
290
|
}
|
|
195
291
|
writeValue(value) {
|
|
196
292
|
if (this.isInSingleMode) {
|
|
197
293
|
this.value = value;
|
|
198
|
-
this.container.pickerMoment = value;
|
|
199
294
|
}
|
|
200
295
|
else {
|
|
201
296
|
this.values = value;
|
|
202
|
-
this.
|
|
297
|
+
this.value = this.values[this.activeSelectedIndex];
|
|
203
298
|
}
|
|
204
299
|
}
|
|
205
300
|
registerOnChange(fn) {
|
|
@@ -226,59 +321,118 @@ export class OwlDateTimeInlineComponent extends OwlDateTime {
|
|
|
226
321
|
}
|
|
227
322
|
/**
|
|
228
323
|
* Emits the selected year in multi-year view
|
|
229
|
-
|
|
324
|
+
*/
|
|
230
325
|
selectYear(normalizedYear) {
|
|
231
326
|
this.yearSelected.emit(normalizedYear);
|
|
232
327
|
}
|
|
233
328
|
/**
|
|
234
329
|
* Emits selected month in year view
|
|
235
|
-
|
|
330
|
+
*/
|
|
236
331
|
selectMonth(normalizedMonth) {
|
|
332
|
+
this.writeValue(normalizedMonth);
|
|
237
333
|
this.monthSelected.emit(normalizedMonth);
|
|
238
334
|
}
|
|
239
335
|
/**
|
|
240
336
|
* Emits the selected date
|
|
241
|
-
|
|
337
|
+
*/
|
|
242
338
|
selectDate(normalizedDate) {
|
|
339
|
+
this.writeValue(normalizedDate);
|
|
243
340
|
this.dateSelected.emit(normalizedDate);
|
|
244
341
|
}
|
|
245
|
-
|
|
246
|
-
|
|
342
|
+
/**
|
|
343
|
+
* Sets the active "selected" index in range mode.
|
|
344
|
+
* - 0 for 'from'
|
|
345
|
+
* - 1 for 'to'
|
|
346
|
+
*/
|
|
347
|
+
setActiveSelectedIndex(index) {
|
|
348
|
+
if (this.selectMode === 'range' && this.activeSelectedIndex !== index) {
|
|
349
|
+
this.activeSelectedIndex = index;
|
|
350
|
+
const selected = this.selecteds[this.activeSelectedIndex];
|
|
351
|
+
if (this.selecteds && selected) {
|
|
352
|
+
this.value = this.#dateTimeAdapter.clone(selected);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Handle click on inform radio group
|
|
359
|
+
*/
|
|
360
|
+
handleKeydownOnInfoGroup(event, next, index) {
|
|
361
|
+
let handled = false;
|
|
362
|
+
switch (event.key) {
|
|
363
|
+
// Navigate between the radio group options with arrow keys
|
|
364
|
+
case 'ArrowDown':
|
|
365
|
+
case 'ArrowRight':
|
|
366
|
+
case 'ArrowUp':
|
|
367
|
+
case 'ArrowLeft':
|
|
368
|
+
next.focus();
|
|
369
|
+
this.setActiveSelectedIndex(index === 0 ? 1 : 0);
|
|
370
|
+
handled = true;
|
|
371
|
+
break;
|
|
372
|
+
// Select the active selected index when space is pressed
|
|
373
|
+
case ' ':
|
|
374
|
+
this.setActiveSelectedIndex(index);
|
|
375
|
+
handled = true;
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
if (handled) {
|
|
379
|
+
event.preventDefault();
|
|
380
|
+
event.stopPropagation();
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: OwlDateTimeInlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
384
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: OwlDateTimeInlineComponent, selector: "owl-date-time-inline", inputs: { hour12Timer: ["hour12Timer", "hour12Timer", booleanAttribute], startView: "startView", yearOnly: ["yearOnly", "yearOnly", booleanAttribute], multiyearOnly: ["multiyearOnly", "multiyearOnly", booleanAttribute], stepHour: "stepHour", stepMinute: "stepMinute", stepSecond: "stepSecond", firstDayOfWeek: "firstDayOfWeek", hideOtherMonths: ["hideOtherMonths", "hideOtherMonths", booleanAttribute], pickerType: "pickerType", disabled: ["disabled", "disabled", booleanAttribute], showSecondsTimer: ["showSecondsTimer", "showSecondsTimer", booleanAttribute], selectMode: "selectMode", startAt: "startAt", endAt: "endAt", owlDateTimeFilter: "owlDateTimeFilter", dateTimeFilter: "dateTimeFilter", min: "min", max: "max", value: "value", values: "values" }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", dateSelected: "dateSelected" }, host: { properties: { "class.owl-dt-container-disabled": "disabled" }, classAttribute: "owl-dt-inline owl-dt-container owl-dt-inline-container" }, providers: [OWL_DATETIME_VALUE_ACCESSOR], ngImport: i0, template: "<div class=\"owl-dt-container-inner\">\n @if (pickerType === 'both' || pickerType === 'calendar') {\n <owl-date-time-calendar\n [dateFilter]=\"dateTimeFilterGetter\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [hideOtherMonths]=\"hideOtherMonths\"\n [maxDate]=\"max\"\n [minDate]=\"min\"\n [multiyearOnly]=\"multiyearOnly\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [startView]=\"startView\"\n [yearOnly]=\"yearOnly\"\n [(pickerMoment)]=\"value\"\n (dateClicked)=\"selectDate($event)\"\n (monthSelected)=\"selectMonth($event)\"\n (selectedChange)=\"select($event)\"\n (yearSelected)=\"selectYear($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-calendar>\n }\n\n @if (pickerType === 'both' || pickerType === 'timer') {\n <owl-date-time-timer\n [hour12Timer]=\"hour12Timer\"\n [maxDateTime]=\"max\"\n [minDateTime]=\"min\"\n [pickerMoment]=\"value\"\n [showSecondsTimer]=\"showSecondsTimer\"\n [stepHour]=\"stepHour\"\n [stepMinute]=\"stepMinute\"\n [stepSecond]=\"stepSecond\"\n (selectedChange)=\"select($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-timer>\n }\n\n @if (isInRangeMode) {\n <div\n class=\"owl-dt-container-info owl-dt-container-row\"\n role=\"radiogroup\">\n <div\n #from\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 0\"\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(0)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ fromLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ fromFormattedValue }}</span>\n </span>\n </div>\n <div\n #to\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 1\"\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(1)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ toLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ toFormattedValue }}</span>\n </span>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.OwlTimerComponent, selector: "owl-date-time-timer", inputs: ["pickerMoment", "minDateTime", "maxDateTime", "showSecondsTimer", "hour12Timer", "stepHour", "stepMinute", "stepSecond"], outputs: ["selectedChange"], exportAs: ["owlDateTimeTimer"] }, { kind: "component", type: i2.OwlCalendarComponent, selector: "owl-date-time-calendar", inputs: ["minDate", "maxDate", "pickerMoment", "selected", "selecteds", "dateFilter", "firstDayOfWeek", "selectMode", "startView", "yearOnly", "multiyearOnly", "hideOtherMonths"], outputs: ["pickerMomentChange", "dateClicked", "selectedChange", "yearSelected", "monthSelected"], exportAs: ["owlDateTimeCalendar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
247
385
|
}
|
|
248
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: OwlDateTimeInlineComponent, decorators: [{
|
|
249
387
|
type: Component,
|
|
250
388
|
args: [{ selector: 'owl-date-time-inline', host: {
|
|
251
|
-
'[class.owl-dt-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
389
|
+
'[class.owl-dt-container-disabled]': 'disabled',
|
|
390
|
+
'class': 'owl-dt-inline owl-dt-container owl-dt-inline-container'
|
|
391
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, providers: [OWL_DATETIME_VALUE_ACCESSOR], template: "<div class=\"owl-dt-container-inner\">\n @if (pickerType === 'both' || pickerType === 'calendar') {\n <owl-date-time-calendar\n [dateFilter]=\"dateTimeFilterGetter\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [hideOtherMonths]=\"hideOtherMonths\"\n [maxDate]=\"max\"\n [minDate]=\"min\"\n [multiyearOnly]=\"multiyearOnly\"\n [selectMode]=\"selectMode\"\n [selected]=\"selected\"\n [selecteds]=\"selecteds\"\n [startView]=\"startView\"\n [yearOnly]=\"yearOnly\"\n [(pickerMoment)]=\"value\"\n (dateClicked)=\"selectDate($event)\"\n (monthSelected)=\"selectMonth($event)\"\n (selectedChange)=\"select($event)\"\n (yearSelected)=\"selectYear($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-calendar>\n }\n\n @if (pickerType === 'both' || pickerType === 'timer') {\n <owl-date-time-timer\n [hour12Timer]=\"hour12Timer\"\n [maxDateTime]=\"max\"\n [minDateTime]=\"min\"\n [pickerMoment]=\"value\"\n [showSecondsTimer]=\"showSecondsTimer\"\n [stepHour]=\"stepHour\"\n [stepMinute]=\"stepMinute\"\n [stepSecond]=\"stepSecond\"\n (selectedChange)=\"select($event)\"\n class=\"owl-dt-container-row\">\n </owl-date-time-timer>\n }\n\n @if (isInRangeMode) {\n <div\n class=\"owl-dt-container-info owl-dt-container-row\"\n role=\"radiogroup\">\n <div\n #from\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 0\"\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(0)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ fromLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ fromFormattedValue }}</span>\n </span>\n </div>\n <div\n #to\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\n [class.owl-dt-container-info-active]=\"activeSelectedIndex === 1\"\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\n (click)=\"setActiveSelectedIndex(1)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\n role=\"radio\">\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"owl-dt-container-info-label\">{{ toLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ toFormattedValue }}</span>\n </span>\n </div>\n </div>\n }\n</div>\n" }]
|
|
392
|
+
}], ctorParameters: () => [], propDecorators: { hour12Timer: [{
|
|
393
|
+
type: Input,
|
|
394
|
+
args: [{ transform: booleanAttribute }]
|
|
395
|
+
}], startView: [{
|
|
396
|
+
type: Input
|
|
397
|
+
}], yearOnly: [{
|
|
398
|
+
type: Input,
|
|
399
|
+
args: [{ transform: booleanAttribute }]
|
|
400
|
+
}], multiyearOnly: [{
|
|
401
|
+
type: Input,
|
|
402
|
+
args: [{ transform: booleanAttribute }]
|
|
403
|
+
}], stepHour: [{
|
|
404
|
+
type: Input
|
|
405
|
+
}], stepMinute: [{
|
|
406
|
+
type: Input
|
|
407
|
+
}], stepSecond: [{
|
|
408
|
+
type: Input
|
|
409
|
+
}], firstDayOfWeek: [{
|
|
410
|
+
type: Input
|
|
411
|
+
}], hideOtherMonths: [{
|
|
412
|
+
type: Input,
|
|
413
|
+
args: [{ transform: booleanAttribute }]
|
|
263
414
|
}], pickerType: [{
|
|
264
415
|
type: Input
|
|
265
416
|
}], disabled: [{
|
|
266
|
-
type: Input
|
|
417
|
+
type: Input,
|
|
418
|
+
args: [{ transform: booleanAttribute }]
|
|
419
|
+
}], showSecondsTimer: [{
|
|
420
|
+
type: Input,
|
|
421
|
+
args: [{ transform: booleanAttribute }]
|
|
267
422
|
}], selectMode: [{
|
|
268
423
|
type: Input
|
|
269
424
|
}], startAt: [{
|
|
270
425
|
type: Input
|
|
271
426
|
}], endAt: [{
|
|
272
427
|
type: Input
|
|
428
|
+
}], owlDateTimeFilter: [{
|
|
429
|
+
type: Input
|
|
273
430
|
}], dateTimeFilter: [{
|
|
274
|
-
type: Input
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
}], maxDateTime: [{
|
|
280
|
-
type: Input,
|
|
281
|
-
args: ['max']
|
|
431
|
+
type: Input
|
|
432
|
+
}], min: [{
|
|
433
|
+
type: Input
|
|
434
|
+
}], max: [{
|
|
435
|
+
type: Input
|
|
282
436
|
}], value: [{
|
|
283
437
|
type: Input
|
|
284
438
|
}], values: [{
|
|
@@ -290,4 +444,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
290
444
|
}], dateSelected: [{
|
|
291
445
|
type: Output
|
|
292
446
|
}] } });
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixNQUFNLGtDQUFrQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQXNDLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFcEYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQVE7SUFDOUMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQWFGLE1BQU0sT0FBTywwQkFBOEIsU0FBUSxXQUFjO0lBVy9ELElBQ0ksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsR0FBZTtRQUM1QixJQUFJLEdBQUcs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Y2VzQ29udGVudCI6WyIvKipcbiAqIGRhdGUtdGltZS1pbmxpbmUuY29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7IE9XTF9EQVRFX1RJTUVfRk9STUFUUywgT3dsRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZSwgUGlja2VyTW9kZSwgUGlja2VyVHlwZSwgU2VsZWN0TW9kZSB9IGZyb20gJy4vZGF0ZS10aW1lLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IE9XTF9EQVRFVElNRV9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS1pbmxpbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1pbmxpbmUuY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Mub3dsLWR0LWlubGluZV0nOiAnb3dsRFRJbmxpbmVDbGFzcydcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBwcm92aWRlcnM6IFtPV0xfREFURVRJTUVfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50PFQ+IGV4dGVuZHMgT3dsRGF0ZVRpbWU8VD4gaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQFZpZXdDaGlsZChPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgY29udGFpbmVyOiBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudDxUPjtcblxuICAvKipcbiAgICogU2V0IHRoZSB0eXBlIG9mIHRoZSBkYXRlVGltZSBwaWNrZXJcbiAgICogICAgICAnYm90aCcgLS0gc2hvdyBib3RoIGNhbGVuZGFyIGFuZCB0aW1lclxuICAgKiAgICAgICdjYWxlbmRhcicgLS0gc2hvdyBvbmx5IGNhbGVuZGFyXG4gICAqICAgICAgJ3RpbWVyJyAtLSBzaG93IG9ubHkgdGltZXJcbiAgICovXG4gIHByaXZhdGUgX3BpY2tlclR5cGU6IFBpY2tlclR5cGUgPSAnYm90aCc7XG4gIEBJbnB1dCgpXG4gIGdldCBwaWNrZXJUeXBlKCk6IFBpY2tlclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waWNrZXJUeXBlO1xuICB9XG5cbiAgc2V0IHBpY2tlclR5cGUodmFsOiBQaWNrZXJUeXBlKSB7XG4gICAgaWYgKHZhbCAhPT0gdGhpcy5fcGlja2VyVHlwZSkge1xuICAgICAgdGhpcy5fcGlja2VyVHlwZSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBvdmVycmlkZSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RNb2RlOiBTZWxlY3RNb2RlID0gJ3NpbmdsZSc7XG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RNb2RlO1xuICB9XG5cbiAgc2V0IHNlbGVjdE1vZGUobW9kZTogU2VsZWN0TW9kZSkge1xuICAgIGlmIChtb2RlICE9PSAnc2luZ2xlJyAmJiBtb2RlICE9PSAncmFuZ2UnICYmIG1vZGUgIT09ICdyYW5nZUZyb20nICYmIG1vZGUgIT09ICdyYW5nZVRvJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ093bERhdGVUaW1lIEVycm9yOiBpbnZhbGlkIHNlbGVjdE1vZGUgdmFsdWUhJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0TW9kZSA9IG1vZGU7XG4gIH1cblxuICAvKiogVGhlIGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LiAqL1xuICBwcml2YXRlIF9zdGFydEF0OiBUIHwgbnVsbDtcbiAgQElucHV0KClcbiAgZ2V0IHN0YXJ0QXQoKTogVCB8IG51bGwge1xuICAgIGlmICh0aGlzLl9zdGFydEF0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRBdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwgbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fCB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF0gfHwgbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV0gfHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgc2V0IHN0YXJ0QXQoZGF0ZTogVCB8IG51bGwpIHtcbiAgICB0aGlzLl9zdGFydEF0ID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkpO1xuICB9XG5cbiAgLyoqIFRoZSBkYXRlIHRvIG9wZW4gZm9yIHJhbmdlIGNhbGVuZGFyLiAqL1xuICBwcml2YXRlIF9lbmRBdDogVCB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIGdldCBlbmRBdCgpOiBUIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuX2VuZEF0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5kQXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdIHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNldCBlbmRBdChkYXRlOiBUIHwgbnVsbCkge1xuICAgIHRoaXMuX2VuZEF0ID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGF0ZVRpbWVGaWx0ZXI6IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbjtcbiAgQElucHV0KCdvd2xEYXRlVGltZUZpbHRlcicpXG4gIGdldCBkYXRlVGltZUZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVGaWx0ZXI7XG4gIH1cblxuICBzZXQgZGF0ZVRpbWVGaWx0ZXIoZmlsdGVyOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRlVGltZUZpbHRlciA9IGZpbHRlcjtcbiAgfVxuXG4gIC8qKiBUaGUgbWluaW11bSB2YWxpZCBkYXRlLiAqL1xuICBwcml2YXRlIF9taW46IFQgfCBudWxsO1xuXG4gIGdldCBtaW5EYXRlVGltZSgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21pbiB8fCBudWxsO1xuICB9XG5cbiAgQElucHV0KCdtaW4nKVxuICBzZXQgbWluRGF0ZVRpbWUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgdGhpcy5fbWluID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFRoZSBtYXhpbXVtIHZhbGlkIGRhdGUuICovXG4gIHByaXZhdGUgX21heDogVCB8IG51bGw7XG5cbiAgZ2V0IG1heERhdGVUaW1lKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4IHx8IG51bGw7XG4gIH1cblxuICBASW5wdXQoJ21heCcpXG4gIHNldCBtYXhEYXRlVGltZSh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICB0aGlzLl9tYXggPSB0aGlzLmdldFZhbGlkRGF0ZSh0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogVCB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgdmFsdWUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZXM6IEFycmF5PFQ+ID0gW107XG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuXG4gIHNldCB2YWx1ZXModmFsdWVzOiBBcnJheTxUPikge1xuICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbHVlcyA9IHZhbHVlcy5tYXAoKHYpID0+IHtcbiAgICAgICAgdiA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHYpO1xuICAgICAgICB2ID0gdGhpcy5nZXRWYWxpZERhdGUodik7XG4gICAgICAgIHJldHVybiB2ID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xvbmUodikgOiBudWxsO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl92YWx1ZXMgPSBbLi4udmFsdWVzXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRzID0gWy4uLnZhbHVlc107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZHMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgc2VsZWN0ZWQgeWVhciBpbiBtdWx0aS15ZWFyIHZpZXdcbiAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgKiAqL1xuICBAT3V0cHV0KClcbiAgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWxlY3RlZCBtb250aCBpbiB5ZWFyIHZpZXdcbiAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgKiAqL1xuICBAT3V0cHV0KClcbiAgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgc2VsZWN0ZWQgZGF0ZVxuICAgKiAqL1xuICBAT3V0cHV0KClcbiAgZGF0ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIHByaXZhdGUgX3NlbGVjdGVkOiBUIHwgbnVsbDtcbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZCh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZHM6IEFycmF5PFQ+ID0gW107XG4gIGdldCBzZWxlY3RlZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkcztcbiAgfVxuXG4gIHNldCBzZWxlY3RlZHModmFsdWVzOiBBcnJheTxUPikge1xuICAgIHRoaXMuX3NlbGVjdGVkcyA9IHZhbHVlcztcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IG9wZW5lZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBwaWNrZXJNb2RlKCk6IFBpY2tlck1vZGUge1xuICAgIHJldHVybiAnaW5saW5lJztcbiAgfVxuXG4gIGdldCBpc0luU2luZ2xlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZSc7XG4gIH1cblxuICBnZXQgaXNJblJhbmdlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fCB0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJyB8fCB0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VUbyc7XG4gIH1cblxuICBnZXQgb3dsRFRJbmxpbmVDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb25Nb2RlbENoYW5nZTogKHY6IFQgfCBBcnJheTxUPikgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAvKiBub29wICovXG4gIH07XG5cbiAgcHJpdmF0ZSBvbk1vZGVsVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAvKiBub29wICovXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8VD4sXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChPV0xfREFURV9USU1FX0ZPUk1BVFMpIHByb3RlY3RlZCBvdmVycmlkZSBkYXRlVGltZUZvcm1hdHM6IE93bERhdGVUaW1lRm9ybWF0c1xuICApIHtcbiAgICBzdXBlcihkYXRlVGltZUFkYXB0ZXIsIGRhdGVUaW1lRm9ybWF0cyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250YWluZXIucGlja2VyID0gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jb250YWluZXIucGlja2VyTW9tZW50ID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzID0gdmFsdWU7XG4gICAgICB0aGlzLmNvbnRhaW5lci5waWNrZXJNb21lbnQgPSB0aGlzLl92YWx1ZXNbdGhpcy5jb250YWluZXIuYWN0aXZlU2VsZWN0ZWRJbmRleF07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0KGRhdGU6IEFycmF5PFQ+IHwgVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0ZSkpIHtcbiAgICAgIHRoaXMudmFsdWVzID0gWy4uLmRhdGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gZGF0ZTtcbiAgICB9XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGRhdGUpO1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgeWVhciBpbiBtdWx0aS15ZWFyIHZpZXdcbiAgICogKi9cbiAgcHVibGljIHNlbGVjdFllYXIobm9ybWFsaXplZFllYXI6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRZZWFyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWxlY3RlZCBtb250aCBpbiB5ZWFyIHZpZXdcbiAgICogKi9cbiAgcHVibGljIHNlbGVjdE1vbnRoKG5vcm1hbGl6ZWRNb250aDogVCk6IHZvaWQge1xuICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRNb250aCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGRhdGVcbiAgICogKi9cbiAgcHVibGljIHNlbGVjdERhdGUobm9ybWFsaXplZERhdGU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWREYXRlKTtcbiAgfVxufVxuIiwiPG93bC1kYXRlLXRpbWUtY29udGFpbmVyPjwvb3dsLWRhdGUtdGltZS1jb250YWluZXI+XG4iXX0=
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waWNrZXIvc3JjL2xpYi9kYXRlLXRpbWUvZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUEwQixNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBRWxFLE1BQU0sMkJBQTJCLEdBQWE7SUFDNUMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBYzlCLE1BQU0sT0FBTywwQkFBMEI7SUFHNUIsZUFBZSxDQUE2QjtJQUU1QyxXQUFXLENBQTJCO0lBRXRDLGdCQUFnQixDQUFxRDtJQUVyRSxnQkFBZ0IsQ0FBc0U7SUFpRC9GLElBQ1csY0FB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RTtnQkFPL0IsUUFBUTtzQkFEZCxLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFTSyxjQUFjO3NCQUR4QixLQUFLO2dCQWtCQyxlQUFlO3NCQURyQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQW1DL0IsVUFBVTtzQkFEaEIsS0FBSztnQkFPQyxRQUFRO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTy9CLGdCQUFnQjtzQkFEdEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFXL0IsVUFBVTtzQkFEaEIsS0FBSztnQkFRSyxPQUFPO3NCQURqQixLQUFLO2dCQXlCSyxLQUFLO3NCQURmLEtBQUs7Z0JBc0JDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQWFLLEdBQUc7c0JBRGIsS0FBSztnQkFjSyxHQUFHO3NCQURiLEtBQUs7Z0JBV0ssS0FBSztzQkFEZixLQUFLO2dCQWNLLE1BQU07c0JBRGhCLEtBQUs7Z0JBd0JVLFlBQVk7c0JBRDNCLE1BQU07Z0JBUVMsYUFBYTtzQkFENUIsTUFBTTtnQkFPUyxZQUFZO3NCQUQzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPdXRwdXQsXG4gIFByb3ZpZGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZVZpZXcsIFBpY2tlclR5cGUsIFNlbGVjdE1vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX0RBVEVfVElNRV9GT1JNQVRTIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWludGwuc2VydmljZSc7XG5cbmNvbnN0IE9XTF9EQVRFVElNRV9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5sZXQgbmV4dFVuaXF1ZUNvbXBvbmVudElkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS1pbmxpbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1pbmxpbmUuY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Mub3dsLWR0LWNvbnRhaW5lci1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdjbGFzcyc6ICdvd2wtZHQtaW5saW5lIG93bC1kdC1jb250YWluZXIgb3dsLWR0LWlubGluZS1jb250YWluZXInXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgcHJvdmlkZXJzOiBbT1dMX0RBVEVUSU1FX1ZBTFVFX0FDQ0VTU09SXVxufSlcbmV4cG9ydCBjbGFzcyBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICByZWFkb25seSAjcGlja2VySW50bCA9IGluamVjdChPd2xEYXRlVGltZUludGwpO1xuXG4gIHJlYWRvbmx5ICNkYXRlVGltZUZvcm1hdHMgPSBpbmplY3QoT1dMX0RBVEVfVElNRV9GT1JNQVRTLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5ICNkYXRlVGltZUFkYXB0ZXIgPSBpbmplY3Q8RGF0ZVRpbWVBZGFwdGVyPERhdGU+PihEYXRlVGltZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRpbWVyIGlzIGluIGhvdXIxMiBmb3JtYXRcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgaG91cjEyVGltZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHZpZXcgdGhhdCB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IGluLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHN0YXJ0VmlldzogRGF0ZVZpZXcgPSBEYXRlVmlldy5NT05USDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG91bGQgb25seSB0aGUgeWVhciBhbmQgbXVsdGkteWVhciB2aWV3cy5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgeWVhck9ubHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG91bGQgb25seSB0aGUgbXVsdGkteWVhciB2aWV3LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBtdWx0aXllYXJPbmx5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhvdXJzIHRvIGNoYW5nZSBwZXIgc3RlcFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHN0ZXBIb3VyOiBudW1iZXIgPSAxO1xuXG4gIC8qKlxuICAgKiBNaW51dGVzIHRvIGNoYW5nZSBwZXIgc3RlcFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHN0ZXBNaW51dGU6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIFNlY29uZHMgdG8gY2hhbmdlIHBlciBzdGVwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RlcFNlY29uZDogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogU2V0IHRoZSBmaXJzdCBkYXkgb2Ygd2Vlay5cbiAgICogSGFzIHRvIGJlIGEgbnVtYmVyIGJldHdlZW4gMCAoU3VuZGF5KSBhbmQgNiAoU2F0dXJkYXkpXG4gICAqL1xuICBwcml2YXRlIF9maXJzdERheU9mV2VlazogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrO1xuICB9XG4gIHB1YmxpYyBzZXQgZmlyc3REYXlPZldlZWsodmFsdWU6IG51bWJlcikge1xuICAgIHZhbHVlID0gbnVtYmVyQXR0cmlidXRlKHZhbHVlLCB1bmRlZmluZWQpO1xuICAgIGlmICh2YWx1ZSA+IDYgfHwgdmFsdWUgPCAwKSB7XG4gICAgICB0aGlzLl9maXJzdERheU9mV2VlayA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmlyc3REYXlPZldlZWsgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBoaWRlIGRhdGVzIGluIG90aGVyIG1vbnRocyBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgKi9cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGhpZGVPdGhlck1vbnRoczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXQgZm9ybWF0T3B0aW9ucygpOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyB7XG4gICAgaWYgKHRoaXMucGlja2VyVHlwZSA9PT0gJ2JvdGgnKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZGF0ZVRpbWVGb3JtYXRzLmZ1bGxQaWNrZXJJbnB1dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZGF0ZVRpbWVGb3JtYXRzLmRhdGVQaWNrZXJJbnB1dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZGF0ZVRpbWVGb3JtYXRzLnRpbWVQaWNrZXJJbnB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRlIFRpbWUgQ2hlY2tlciB0byBjaGVjayBpZiB0aGUgZ2l2ZSBkYXRlVGltZSBpcyBzZWxlY3RhYmxlXG4gICAqL1xuICBwdWJsaWMgZGF0ZVRpbWVDaGVja2VyID0gKGRhdGVUaW1lOiBEYXRlKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhZGF0ZVRpbWUgJiZcbiAgICAgICghdGhpcy5kYXRlVGltZUZpbHRlciB8fCB0aGlzLmRhdGVUaW1lRmlsdGVyKGRhdGVUaW1lKSkgJiZcbiAgICAgICghdGhpcy5taW4gfHwgdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZGF0ZVRpbWUsIHRoaXMubWluKSA+PSAwKSAmJlxuICAgICAgKCF0aGlzLm1heCB8fCB0aGlzLiNkYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlVGltZSwgdGhpcy5tYXgpIDw9IDApXG4gICAgKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0VmFsaWREYXRlKG9iajogdW5rbm93bik6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQob2JqKSA/IG9iaiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB7QGxpbmsgUGlja2VyVHlwZX0gb2YgdGhlIGRhdGVUaW1lIHBpY2tlclxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBpY2tlclR5cGU6IFBpY2tlclR5cGUgPSAnYm90aCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBpY2tlciBpcyBkaXNhYmxlZCBvciBub3RcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSBzZWNvbmQncyB0aW1lclxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzaG93U2Vjb25kc1RpbWVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoaWNoIHNlbGVjdCBtb2RlIHRvIHVzZTpcbiAgICogLSAnc2luZ2xlJ1xuICAgKiAtICdyYW5nZSdcbiAgICogLSAncmFuZ2VGcm9tJ1xuICAgKiAtICdyYW5nZVRvJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlbGVjdE1vZGU6IFNlbGVjdE1vZGUgPSAnc2luZ2xlJztcblxuICAvKipcbiAgICogVGhlIGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc3RhcnRBdDogRGF0ZSB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgc3RhcnRBdCgpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0QXQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXSB8fCBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldCBzdGFydEF0KGRhdGU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fc3RhcnRBdCA9IHRoaXMuZ2V0VmFsaWREYXRlKHRoaXMuI2RhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGUgdG8gb3BlbiBmb3IgcmFuZ2UgY2FsZW5kYXIuXG4gICAqL1xuICBwcml2YXRlIF9lbmRBdDogRGF0ZSB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZW5kQXQoKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLl9lbmRBdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuZEF0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldCBlbmRBdChkYXRlOiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMuX2VuZEF0ID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGRhdGVUaW1lRmlsdGVyYCBpbnN0ZWFkIVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG93bERhdGVUaW1lRmlsdGVyOiAoKGRhdGU6IERhdGUgfCBudWxsKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRlVGltZUZpbHRlcjogKChkYXRlOiBEYXRlIHwgbnVsbCkgPT4gYm9vbGVhbikgfCBudWxsID0gbnVsbDtcblxuICAvLyBUT0RPOiByZW1vdmUgdGhpcyBnZXR0ZXIgd2hlbiBgb3dsRGF0ZVRpbWVGaWx0ZXJgIGlzIHJlbW92ZWRcbiAgcHJvdGVjdGVkIGdldCBkYXRlVGltZUZpbHRlckdldHRlcigpOiAoKGRhdGU6IERhdGUgfCBudWxsKSA9PiBib29sZWFuKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRmlsdGVyIHx8IHRoaXMub3dsRGF0ZVRpbWVGaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIF9taW46IERhdGUgfCBudWxsO1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsaWQgZGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgbWluKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWluIHx8IG51bGw7XG4gIH1cbiAgcHVibGljIHNldCBtaW4odmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbWluID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9tYXg6IERhdGUgfCBudWxsO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gdmFsaWQgZGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgbWF4KCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4IHx8IG51bGw7XG4gIH1cbiAgcHVibGljIHNldCBtYXgodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbWF4ID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogRGF0ZSB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogRGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdmFsdWUgPSB0aGlzLiNkYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIHZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWVzOiBBcnJheTxEYXRlPiA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHZhbHVlcygpOiBBcnJheTxEYXRlPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZXModmFsdWVzOiBBcnJheTxEYXRlPikge1xuICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbHVlcyA9IHZhbHVlcy5tYXAoKHYpID0+IHtcbiAgICAgICAgdiA9IHRoaXMuI2RhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KTtcbiAgICAgICAgdiA9IHRoaXMuZ2V0VmFsaWREYXRlKHYpO1xuICAgICAgICByZXR1cm4gdiA/IHRoaXMuI2RhdGVUaW1lQWRhcHRlci5jbG9uZSh2KSA6IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3ZhbHVlcyA9IFsuLi52YWx1ZXNdO1xuICAgICAgdGhpcy5zZWxlY3RlZHMgPSBbLi4udmFsdWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWxlY3RlZCB5ZWFyIGluIG11bHRpLXllYXIgdmlld1xuICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IHllYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgc2VsZWN0ZWQgbW9udGggaW4geWVhciB2aWV3XG4gICAqIFRoaXMgZG9lc24ndCBpbXBseSBhIGNoYW5nZSBvbiB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgc2VsZWN0ZWQgZGF0ZVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBkYXRlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgcHJvdGVjdGVkIGFjdGl2ZVNlbGVjdGVkSW5kZXggPSAwOyAvLyBUaGUgY3VycmVudCBhY3RpdmUgU2VsZWN0ZWRJbmRleCBpbiByYW5nZSBzZWxlY3QgbW9kZSAoMDogJ2Zyb20nLCAxOiAndG8nKVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkOiBEYXRlIHwgbnVsbDtcbiAgcHJvdGVjdGVkIGdldCBzZWxlY3RlZCgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG4gIHByb3RlY3RlZCBzZXQgc2VsZWN0ZWQodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkczogQXJyYXk8RGF0ZT4gPSBbXTtcbiAgcHJvdGVjdGVkIGdldCBzZWxlY3RlZHMoKTogQXJyYXk8RGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHM7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IHNlbGVjdGVkcyh2YWx1ZXM6IEFycmF5PERhdGU+KSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRzID0gdmFsdWVzO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcGlja2VyIGlzIGluIHNpbmdsZSBtb2RlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzSW5TaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcGlja2VyIGlzIGluIHJhbmdlIG1vZGUgKHJhbmdlLCByYW5nZUZyb20sIHJhbmdlVG8pXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzSW5SYW5nZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fCB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSAnZnJvbScgbGFiZWxcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZnJvbUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI3BpY2tlckludGwucmFuZ2VGcm9tTGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJhbmdlICd0bycgbGFiZWxcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdG9MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNwaWNrZXJJbnRsLnJhbmdlVG9MYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UgJ2Zyb20nIGZvcm1hdHRlZCB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmcm9tRm9ybWF0dGVkVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRzWzBdO1xuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuI2RhdGVUaW1lQWRhcHRlci5mb3JtYXQodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UgJ3RvJyBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdG9Gb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZHNbMV07XG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1vZGVsQ2hhbmdlOiAodjogRGF0ZSB8IEFycmF5PERhdGU+KSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8qIG5vb3AgKi9cbiAgfTtcblxuICBwcml2YXRlIG9uTW9kZWxUb3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8qIG5vb3AgKi9cbiAgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuI2RhdGVUaW1lQWRhcHRlcikge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBPd2xEYXRlVGltZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yIERhdGVUaW1lQWRhcHRlci4gWW91IG11c3QgaW1wb3J0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGAgK1xuICAgICAgICAgIGBtb2R1bGVzIGF0IHlvdXIgYXBwbGljYXRpb24gcm9vdDogT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGUsIE93bE1vbWVudERhdGVUaW1lTW9kdWxlLCBvciBwcm92aWRlIGEgYCArXG4gICAgICAgICAgYGN1c3RvbSBpbXBsZW1lbnRhdGlvbi5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy4jZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYE93bERhdGVUaW1lUGlja2VyOiBObyBwcm92aWRlciBmb3VuZCBmb3IgT1dMX0RBVEVfVElNRV9GT1JNQVRTLiBZb3UgbXVzdCBpbXBvcnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYG1vZHVsZXMgYXQgeW91ciBhcHBsaWNhdGlvbiByb290OiBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZSwgT3dsTW9tZW50RGF0ZVRpbWVNb2R1bGUsIG9yIHByb3ZpZGUgYSBgICtcbiAgICAgICAgICBgY3VzdG9tIGltcGxlbWVudGF0aW9uLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pZCA9IGBvd2wtZHQtcGlja2VyLSR7bmV4dFVuaXF1ZUNvbXBvbmVudElkKyt9YDtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgQXJyYXk8RGF0ZT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlIGFzIERhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzID0gdmFsdWUgYXMgQXJyYXk8RGF0ZT47XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4XTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHY6IERhdGUgfCBBcnJheTxEYXRlPikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChkYXRlOiBBcnJheTxEYXRlPiB8IERhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGUpKSB7XG4gICAgICB0aGlzLnZhbHVlcyA9IFsuLi5kYXRlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgfVxuICAgIHRoaXMub25Nb2RlbENoYW5nZShkYXRlKTtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXIgaW4gbXVsdGkteWVhciB2aWV3XG4gICAqL1xuICBwdWJsaWMgc2VsZWN0WWVhcihub3JtYWxpemVkWWVhcjogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMueWVhclNlbGVjdGVkLmVtaXQobm9ybWFsaXplZFllYXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHNlbGVjdGVkIG1vbnRoIGluIHllYXIgdmlld1xuICAgKi9cbiAgcHVibGljIHNlbGVjdE1vbnRoKG5vcm1hbGl6ZWRNb250aDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVWYWx1ZShub3JtYWxpemVkTW9udGgpO1xuICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRNb250aCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGRhdGVcbiAgICovXG4gIHB1YmxpYyBzZWxlY3REYXRlKG5vcm1hbGl6ZWREYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG5vcm1hbGl6ZWREYXRlKTtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWREYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgXCJzZWxlY3RlZFwiIGluZGV4IGluIHJhbmdlIG1vZGUuXG4gICAqIC0gMCBmb3IgJ2Zyb20nXG4gICAqIC0gMSBmb3IgJ3RvJ1xuICAgKi9cbiAgcHJvdGVjdGVkIHNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgJiYgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gaW5kZXg7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZHNbdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4XTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkcyAmJiBzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy4jZGF0ZVRpbWVBZGFwdGVyLmNsb25lKHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjbGljayBvbiBpbmZvcm0gcmFkaW8gZ3JvdXBcbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVLZXlkb3duT25JbmZvR3JvdXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG5leHQ6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAvLyBOYXZpZ2F0ZSBiZXR3ZWVuIHRoZSByYWRpbyBncm91cCBvcHRpb25zIHdpdGggYXJyb3cga2V5c1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBuZXh0LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleCA9PT0gMCA/IDEgOiAwKTtcbiAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBTZWxlY3QgdGhlIGFjdGl2ZSBzZWxlY3RlZCBpbmRleCB3aGVuIHNwYWNlIGlzIHByZXNzZWRcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXgpO1xuICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLWlubmVyXCI+XG4gIEBpZiAocGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICdjYWxlbmRhcicpIHtcbiAgICA8b3dsLWRhdGUtdGltZS1jYWxlbmRhclxuICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZVRpbWVGaWx0ZXJHZXR0ZXJcIlxuICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgIFtoaWRlT3RoZXJNb250aHNdPVwiaGlkZU90aGVyTW9udGhzXCJcbiAgICAgIFttYXhEYXRlXT1cIm1heFwiXG4gICAgICBbbWluRGF0ZV09XCJtaW5cIlxuICAgICAgW211bHRpeWVhck9ubHldPVwibXVsdGl5ZWFyT25seVwiXG4gICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlXCJcbiAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICBbc2VsZWN0ZWRzXT1cInNlbGVjdGVkc1wiXG4gICAgICBbc3RhcnRWaWV3XT1cInN0YXJ0Vmlld1wiXG4gICAgICBbeWVhck9ubHldPVwieWVhck9ubHlcIlxuICAgICAgWyhwaWNrZXJNb21lbnQpXT1cInZhbHVlXCJcbiAgICAgIChkYXRlQ2xpY2tlZCk9XCJzZWxlY3REYXRlKCRldmVudClcIlxuICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwic2VsZWN0TW9udGgoJGV2ZW50KVwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2VsZWN0KCRldmVudClcIlxuICAgICAgKHllYXJTZWxlY3RlZCk9XCJzZWxlY3RZZWFyKCRldmVudClcIlxuICAgICAgY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLXJvd1wiPlxuICAgIDwvb3dsLWRhdGUtdGltZS1jYWxlbmRhcj5cbiAgfVxuXG4gIEBpZiAocGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICd0aW1lcicpIHtcbiAgICA8b3dsLWRhdGUtdGltZS10aW1lclxuICAgICAgW2hvdXIxMlRpbWVyXT1cImhvdXIxMlRpbWVyXCJcbiAgICAgIFttYXhEYXRlVGltZV09XCJtYXhcIlxuICAgICAgW21pbkRhdGVUaW1lXT1cIm1pblwiXG4gICAgICBbcGlja2VyTW9tZW50XT1cInZhbHVlXCJcbiAgICAgIFtzaG93U2Vjb25kc1RpbWVyXT1cInNob3dTZWNvbmRzVGltZXJcIlxuICAgICAgW3N0ZXBIb3VyXT1cInN0ZXBIb3VyXCJcbiAgICAgIFtzdGVwTWludXRlXT1cInN0ZXBNaW51dGVcIlxuICAgICAgW3N0ZXBTZWNvbmRdPVwic3RlcFNlY29uZFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2VsZWN0KCRldmVudClcIlxuICAgICAgY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLXJvd1wiPlxuICAgIDwvb3dsLWRhdGUtdGltZS10aW1lcj5cbiAgfVxuXG4gIEBpZiAoaXNJblJhbmdlTW9kZSkge1xuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvIG93bC1kdC1jb250YWluZXItcm93XCJcbiAgICAgIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNmcm9tXG4gICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwXCJcbiAgICAgICAgW2NsYXNzLm93bC1kdC1jb250YWluZXItaW5mby1hY3RpdmVdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwID8gMCA6IC0xXCJcbiAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoMClcIlxuICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duT25JbmZvR3JvdXAoJGV2ZW50LCB0bywgMClcIlxuICAgICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250YWluZXItcmFuZ2Ugb3dsLWR0LWNvbnRhaW5lci1mcm9tXCJcbiAgICAgICAgcm9sZT1cInJhZGlvXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250YWluZXItcmFuZ2UtY29udGVudFwiXG4gICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXCI+e3sgZnJvbUxhYmVsIH19Ojwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm93bC1kdC1jb250YWluZXItaW5mby12YWx1ZVwiPnt7IGZyb21Gb3JtYXR0ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICN0b1xuICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMVwiXG4gICAgICAgIFtjbGFzcy5vd2wtZHQtY29udGFpbmVyLWluZm8tYWN0aXZlXT1cImFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDFcIlxuICAgICAgICBbdGFiaW5kZXhdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMSA/IDAgOiAtMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVTZWxlY3RlZEluZGV4KDEpXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5ZG93bk9uSW5mb0dyb3VwKCRldmVudCwgZnJvbSwgMSlcIlxuICAgICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250YWluZXItcmFuZ2Ugb3dsLWR0LWNvbnRhaW5lci10b1wiXG4gICAgICAgIHJvbGU9XCJyYWRpb1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wtY29udGVudCBvd2wtZHQtY29udGFpbmVyLXJhbmdlLWNvbnRlbnRcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm93bC1kdC1jb250YWluZXItaW5mby1sYWJlbFwiPnt7IHRvTGFiZWwgfX06PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvLXZhbHVlXCI+e3sgdG9Gb3JtYXR0ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|