@ng-matero/extensions 14.5.0 → 14.6.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/core/datetime/datetime-adapter.d.ts +1 -1
- package/datetimepicker/_datetimepicker-theme.scss +40 -12
- package/datetimepicker/calendar.d.ts +28 -17
- package/datetimepicker/calendar.scss +73 -91
- package/datetimepicker/clock.d.ts +27 -14
- package/datetimepicker/clock.scss +2 -1
- package/datetimepicker/datetimepicker-content.scss +21 -6
- package/datetimepicker/datetimepicker-intl.d.ts +51 -0
- package/datetimepicker/datetimepicker-module.d.ts +13 -12
- package/datetimepicker/datetimepicker-toggle.d.ts +6 -4
- package/datetimepicker/datetimepicker-types.d.ts +4 -0
- package/datetimepicker/datetimepicker.d.ts +13 -3
- package/datetimepicker/public-api.d.ts +1 -0
- package/datetimepicker/time.d.ts +130 -0
- package/datetimepicker/time.scss +81 -0
- package/esm2020/core/datetime/datetime-adapter.mjs +1 -1
- package/esm2020/datetimepicker/calendar-body.mjs +3 -3
- package/esm2020/datetimepicker/calendar.mjs +81 -33
- package/esm2020/datetimepicker/clock.mjs +96 -45
- package/esm2020/datetimepicker/datetimepicker-intl.mjs +63 -0
- package/esm2020/datetimepicker/datetimepicker-module.mjs +8 -1
- package/esm2020/datetimepicker/datetimepicker-toggle.mjs +9 -6
- package/esm2020/datetimepicker/datetimepicker-types.mjs +1 -1
- package/esm2020/datetimepicker/datetimepicker.mjs +22 -6
- package/esm2020/datetimepicker/public-api.mjs +2 -1
- package/esm2020/datetimepicker/time.mjs +453 -0
- package/esm2020/grid/grid.interface.mjs +1 -1
- package/fesm2015/mtxCore.mjs.map +1 -1
- package/fesm2015/mtxDatetimepicker.mjs +720 -91
- package/fesm2015/mtxDatetimepicker.mjs.map +1 -1
- package/fesm2020/mtxCore.mjs.map +1 -1
- package/fesm2020/mtxDatetimepicker.mjs +715 -91
- package/fesm2020/mtxDatetimepicker.mjs.map +1 -1
- package/grid/grid.interface.d.ts +0 -1
- package/package.json +1 -1
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
import { coerceBooleanProperty, coerceNumberProperty, } from '@angular/cdk/coercion';
|
|
2
|
+
import { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, Directive, ElementRef, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@ng-matero/extensions/core";
|
|
6
|
+
import * as i2 from "./datetimepicker-intl";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "@angular/material/button";
|
|
9
|
+
import * as i5 from "./clock";
|
|
10
|
+
function pad(num, size) {
|
|
11
|
+
num = String(num);
|
|
12
|
+
while (num.length < size)
|
|
13
|
+
num = '0' + num;
|
|
14
|
+
return num;
|
|
15
|
+
}
|
|
16
|
+
export class MtxTimeInput {
|
|
17
|
+
constructor(element, cdr) {
|
|
18
|
+
this.element = element;
|
|
19
|
+
this.cdr = cdr;
|
|
20
|
+
this._interval = 1;
|
|
21
|
+
this._min = 0;
|
|
22
|
+
this._max = Infinity;
|
|
23
|
+
this.timeValueChanged = new EventEmitter();
|
|
24
|
+
this.keyDownListener = this.keyDownHandler.bind(this);
|
|
25
|
+
this.keyPressListener = this.keyPressHandler.bind(this);
|
|
26
|
+
this.inputEventListener = this.inputChangedHandler.bind(this);
|
|
27
|
+
this.inputElement.addEventListener('keydown', this.keyDownListener, {
|
|
28
|
+
passive: true,
|
|
29
|
+
});
|
|
30
|
+
// Do not passive since we want to be able to preventDefault()
|
|
31
|
+
this.inputElement.addEventListener('keypress', this.keyPressListener);
|
|
32
|
+
this.inputElement.addEventListener('input', this.inputEventListener, {
|
|
33
|
+
passive: true,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
set timeInterval(value) {
|
|
37
|
+
this._interval = coerceNumberProperty(value);
|
|
38
|
+
}
|
|
39
|
+
set timeMin(value) {
|
|
40
|
+
this._min = coerceNumberProperty(value);
|
|
41
|
+
}
|
|
42
|
+
set timeMax(value) {
|
|
43
|
+
this._max = coerceNumberProperty(value);
|
|
44
|
+
}
|
|
45
|
+
set timeValue(value) {
|
|
46
|
+
this._value = coerceNumberProperty(value);
|
|
47
|
+
if (!this.hasFocus) {
|
|
48
|
+
this.writeValue(this._value);
|
|
49
|
+
}
|
|
50
|
+
this.writePlaceholder(this._value);
|
|
51
|
+
}
|
|
52
|
+
get hasFocus() {
|
|
53
|
+
return this.element.nativeElement && this.element?.nativeElement === document?.activeElement;
|
|
54
|
+
}
|
|
55
|
+
get inputElement() {
|
|
56
|
+
return this.element.nativeElement;
|
|
57
|
+
}
|
|
58
|
+
// We look here at the placeholder value, because we write '' into the value on focus
|
|
59
|
+
// placeholder should always be up to date with "currentValue"
|
|
60
|
+
get valid() {
|
|
61
|
+
// At the start _value is undefined therefore this would result in not valid and
|
|
62
|
+
// make a ugly warning border afterwards we can safely check
|
|
63
|
+
if (this._value) {
|
|
64
|
+
const currentValue = String(this.inputElement.value);
|
|
65
|
+
// It can be that currentValue is empty due to we removing the value on focus,
|
|
66
|
+
// if that is the case we should check previous value which should be in the placeholder
|
|
67
|
+
if (currentValue.length) {
|
|
68
|
+
return this._value == this.inputElement.value;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return this._value == this.inputElement.placeholder;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
get invalid() {
|
|
77
|
+
return !this.valid;
|
|
78
|
+
}
|
|
79
|
+
blur() {
|
|
80
|
+
this.writeValue(this._value);
|
|
81
|
+
this.writePlaceholder(this._value);
|
|
82
|
+
this.timeValueChanged.emit(this._value);
|
|
83
|
+
}
|
|
84
|
+
focus() {
|
|
85
|
+
this.writeValue('');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Write value to inputElement
|
|
89
|
+
* @param value NumberInput
|
|
90
|
+
*/
|
|
91
|
+
writeValue(value) {
|
|
92
|
+
if (value !== '') {
|
|
93
|
+
this.inputElement.value = pad(value, 2);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.inputElement.value = '';
|
|
97
|
+
}
|
|
98
|
+
this.cdr.markForCheck();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Writes value to placeholder
|
|
102
|
+
* @param value NumberInput
|
|
103
|
+
*/
|
|
104
|
+
writePlaceholder(value) {
|
|
105
|
+
this.inputElement.placeholder = pad(value, 2);
|
|
106
|
+
this.cdr.markForCheck();
|
|
107
|
+
}
|
|
108
|
+
keyDownHandler(event) {
|
|
109
|
+
if (String(this.inputElement.value).length > 0) {
|
|
110
|
+
let value = null;
|
|
111
|
+
if (event.keyCode === UP_ARROW) {
|
|
112
|
+
value = coerceNumberProperty(this._value);
|
|
113
|
+
value += this._interval;
|
|
114
|
+
event.stopPropagation();
|
|
115
|
+
}
|
|
116
|
+
else if (event.keyCode === DOWN_ARROW) {
|
|
117
|
+
value = coerceNumberProperty(this._value);
|
|
118
|
+
value -= this._interval;
|
|
119
|
+
event.stopPropagation();
|
|
120
|
+
}
|
|
121
|
+
// if value has changed
|
|
122
|
+
if (typeof value === 'number') {
|
|
123
|
+
this.writeValue(value);
|
|
124
|
+
this.writePlaceholder(value);
|
|
125
|
+
this.clampInputValue();
|
|
126
|
+
this.timeValueChanged.emit(this._value);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Prevent non number inputs in the inputElement with the exception of Enter/BackSpace
|
|
132
|
+
* @param event KeyboardEvent
|
|
133
|
+
*/
|
|
134
|
+
keyPressHandler(event) {
|
|
135
|
+
const key = event?.key ?? null;
|
|
136
|
+
if (isNaN(Number(key)) && key !== 'Enter') {
|
|
137
|
+
event.preventDefault();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
inputChangedHandler() {
|
|
141
|
+
this.clampInputValue();
|
|
142
|
+
this.timeValueChanged.emit(this._value);
|
|
143
|
+
}
|
|
144
|
+
clampInputValue() {
|
|
145
|
+
if (this.inputElement?.value === '') {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const value = coerceNumberProperty(this.inputElement?.value ?? null);
|
|
149
|
+
if (value) {
|
|
150
|
+
const clampedValue = Math.min(Math.max(value, this._min), this._max);
|
|
151
|
+
if (clampedValue !== value) {
|
|
152
|
+
this.writeValue(clampedValue);
|
|
153
|
+
this.writePlaceholder(clampedValue);
|
|
154
|
+
}
|
|
155
|
+
this._value = clampedValue;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Remove event listeners on destruction
|
|
160
|
+
*/
|
|
161
|
+
ngOnDestroy() {
|
|
162
|
+
this.inputElement.removeEventListener('keydown', this.keyDownListener);
|
|
163
|
+
this.inputElement.removeEventListener('keypress', this.keyPressListener);
|
|
164
|
+
this.inputElement.removeEventListener('input', this.inputEventListener);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/** @nocollapse */ MtxTimeInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxTimeInput, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
168
|
+
/** @nocollapse */ MtxTimeInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: MtxTimeInput, selector: "input.mtx-time-input", inputs: { timeInterval: "timeInterval", timeMin: "timeMin", timeMax: "timeMax", timeValue: "timeValue" }, outputs: { timeValueChanged: "timeValueChanged" }, host: { listeners: { "blur": "blur($event)", "focus": "focus($event)" } }, exportAs: ["mtxTimeInput"], ngImport: i0 });
|
|
169
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxTimeInput, decorators: [{
|
|
170
|
+
type: Directive,
|
|
171
|
+
args: [{
|
|
172
|
+
selector: 'input.mtx-time-input',
|
|
173
|
+
host: {
|
|
174
|
+
'(blur)': 'blur($event)',
|
|
175
|
+
'(focus)': 'focus($event)',
|
|
176
|
+
},
|
|
177
|
+
exportAs: 'mtxTimeInput',
|
|
178
|
+
}]
|
|
179
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { timeInterval: [{
|
|
180
|
+
type: Input,
|
|
181
|
+
args: ['timeInterval']
|
|
182
|
+
}], timeMin: [{
|
|
183
|
+
type: Input,
|
|
184
|
+
args: ['timeMin']
|
|
185
|
+
}], timeMax: [{
|
|
186
|
+
type: Input,
|
|
187
|
+
args: ['timeMax']
|
|
188
|
+
}], timeValue: [{
|
|
189
|
+
type: Input,
|
|
190
|
+
args: ['timeValue']
|
|
191
|
+
}], timeValueChanged: [{
|
|
192
|
+
type: Output
|
|
193
|
+
}] } });
|
|
194
|
+
export class MtxTime {
|
|
195
|
+
constructor(_adapter, _changeDetectorRef, _datetimepickerIntl) {
|
|
196
|
+
this._adapter = _adapter;
|
|
197
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
198
|
+
this._datetimepickerIntl = _datetimepickerIntl;
|
|
199
|
+
/** Emits when the currently selected date changes. */
|
|
200
|
+
this.selectedChange = new EventEmitter();
|
|
201
|
+
/** Emits when any date changes. */
|
|
202
|
+
this.activeDateChange = new EventEmitter();
|
|
203
|
+
/** Emits when any date is selected. */
|
|
204
|
+
this._userSelection = new EventEmitter();
|
|
205
|
+
/** Emits when AM/PM button are clicked. */
|
|
206
|
+
this.ampmChange = new EventEmitter();
|
|
207
|
+
/** Emits when AM/PM button are clicked. */
|
|
208
|
+
this.clockViewChange = new EventEmitter();
|
|
209
|
+
/** Step over minutes. */
|
|
210
|
+
this.interval = 1;
|
|
211
|
+
this._twelvehour = false;
|
|
212
|
+
/** Whether the time is now in AM or PM. */
|
|
213
|
+
this.AMPM = 'AM';
|
|
214
|
+
/** Whether the clock is in hour view. */
|
|
215
|
+
this._clockView = 'hour';
|
|
216
|
+
this.datetimepickerIntlChangesSubscription = this._datetimepickerIntl.changes.subscribe(() => {
|
|
217
|
+
this._changeDetectorRef.detectChanges();
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
/** Whether the clock uses 12 hour format. */
|
|
221
|
+
get twelvehour() {
|
|
222
|
+
return this._twelvehour;
|
|
223
|
+
}
|
|
224
|
+
set twelvehour(value) {
|
|
225
|
+
this._twelvehour = coerceBooleanProperty(value);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The date to display in this clock view.
|
|
229
|
+
*/
|
|
230
|
+
get activeDate() {
|
|
231
|
+
return this._activeDate;
|
|
232
|
+
}
|
|
233
|
+
set activeDate(value) {
|
|
234
|
+
this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);
|
|
235
|
+
}
|
|
236
|
+
/** The currently selected date. */
|
|
237
|
+
get selected() {
|
|
238
|
+
return this._selected;
|
|
239
|
+
}
|
|
240
|
+
set selected(value) {
|
|
241
|
+
this._selected = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));
|
|
242
|
+
if (this._selected) {
|
|
243
|
+
this.activeDate = this._selected;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/** The minimum selectable date. */
|
|
247
|
+
get minDate() {
|
|
248
|
+
return this._minDate;
|
|
249
|
+
}
|
|
250
|
+
set minDate(value) {
|
|
251
|
+
this._minDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));
|
|
252
|
+
}
|
|
253
|
+
/** The maximum selectable date. */
|
|
254
|
+
get maxDate() {
|
|
255
|
+
return this._maxDate;
|
|
256
|
+
}
|
|
257
|
+
set maxDate(value) {
|
|
258
|
+
this._maxDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));
|
|
259
|
+
}
|
|
260
|
+
/** Whether the clock should be started in hour or minute view. */
|
|
261
|
+
get clockView() {
|
|
262
|
+
return this._clockView;
|
|
263
|
+
}
|
|
264
|
+
set clockView(value) {
|
|
265
|
+
this._clockView = value;
|
|
266
|
+
}
|
|
267
|
+
get isHourView() {
|
|
268
|
+
return this._clockView === 'hour';
|
|
269
|
+
}
|
|
270
|
+
get isMinuteView() {
|
|
271
|
+
return this._clockView === 'hour';
|
|
272
|
+
}
|
|
273
|
+
get hour() {
|
|
274
|
+
if (!this.activeDate) {
|
|
275
|
+
if (this.twelvehour) {
|
|
276
|
+
return '12';
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
return '00';
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
const hour = Number(this._adapter.getHour(this.activeDate));
|
|
283
|
+
if (!this.twelvehour) {
|
|
284
|
+
return this.prefixWithZero(hour);
|
|
285
|
+
}
|
|
286
|
+
if (hour === 0) {
|
|
287
|
+
return '12';
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
return this.prefixWithZero(hour > 12 ? hour - 12 : hour);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
get minute() {
|
|
294
|
+
if (this.activeDate) {
|
|
295
|
+
return this.prefixWithZero(this._adapter.getMinute(this.activeDate));
|
|
296
|
+
}
|
|
297
|
+
return '00';
|
|
298
|
+
}
|
|
299
|
+
prefixWithZero(value) {
|
|
300
|
+
if (value < 10) {
|
|
301
|
+
return '0' + String(value);
|
|
302
|
+
}
|
|
303
|
+
return String(value);
|
|
304
|
+
}
|
|
305
|
+
ngOnChanges(changes) {
|
|
306
|
+
// when clockView changes by input we should focus the correct input
|
|
307
|
+
if (changes.clockView) {
|
|
308
|
+
if (changes.clockView.currentValue !== changes.clockView.previousValue) {
|
|
309
|
+
this.focusInputElement();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
ngAfterViewInit() {
|
|
314
|
+
this.focusInputElement();
|
|
315
|
+
}
|
|
316
|
+
focusInputElement() {
|
|
317
|
+
if (this.clockView === 'hour') {
|
|
318
|
+
if (this.hourInputElement) {
|
|
319
|
+
this.hourInputElement.nativeElement.focus();
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
if (this.minuteInputElement) {
|
|
324
|
+
this.minuteInputElement.nativeElement.focus();
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
handleHourInputChange(value) {
|
|
329
|
+
const hour = coerceNumberProperty(value);
|
|
330
|
+
if (hour || hour === 0) {
|
|
331
|
+
const newValue = this._adapter.createDatetime(this._adapter.getYear(this.activeDate), this._adapter.getMonth(this.activeDate), this._adapter.getDate(this.activeDate), this.updateHourForAmPm(hour), this._adapter.getMinute(this.activeDate));
|
|
332
|
+
this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);
|
|
333
|
+
this.activeDateChange.emit(this.activeDate);
|
|
334
|
+
// If previously we did set [mtxValue]="13" and the input changed to 6, and the clamping will make it "13" again
|
|
335
|
+
// then the hourInputDirective will not have been updated since "13" === "13" same reference so no change detected
|
|
336
|
+
// by directly setting it within this handler, we handle this usecase
|
|
337
|
+
if (this.hourInputDirective) {
|
|
338
|
+
this.hourInputDirective.timeValue = this.hour;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
updateHourForAmPm(value) {
|
|
343
|
+
if (!this.twelvehour) {
|
|
344
|
+
return value;
|
|
345
|
+
}
|
|
346
|
+
// value should be between 1-12
|
|
347
|
+
if (this.AMPM === 'AM') {
|
|
348
|
+
if (value === 0 || value === 12) {
|
|
349
|
+
return 0;
|
|
350
|
+
}
|
|
351
|
+
return value;
|
|
352
|
+
}
|
|
353
|
+
// PM
|
|
354
|
+
else {
|
|
355
|
+
if (value === 0 || value === 12) {
|
|
356
|
+
return 12;
|
|
357
|
+
}
|
|
358
|
+
// other cases, we should add 12 to the value aka 3:00 PM = 3 + 12 = 15:00
|
|
359
|
+
return value + 12;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
handleMinuteInputChange(value) {
|
|
363
|
+
const minute = coerceNumberProperty(value);
|
|
364
|
+
if (minute || minute === 0) {
|
|
365
|
+
const newValue = this._adapter.createDatetime(this._adapter.getYear(this.activeDate), this._adapter.getMonth(this.activeDate), this._adapter.getDate(this.activeDate), this._adapter.getHour(this._activeDate), minute);
|
|
366
|
+
this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);
|
|
367
|
+
this.activeDateChange.emit(this.activeDate);
|
|
368
|
+
// If previously we did set [mtxValue]="40" and the input changed to 30, and the clamping will make it "40" again
|
|
369
|
+
// then the minuteInputDirective will not have been updated since "40" === "40" same reference so no change detected
|
|
370
|
+
// by directly setting it within this handler, we handle this usecase
|
|
371
|
+
if (this.minuteInputDirective) {
|
|
372
|
+
this.minuteInputDirective.timeValue = this.minute;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
handleFocus(clockView) {
|
|
377
|
+
this.clockView = clockView;
|
|
378
|
+
this.clockViewChange.emit(clockView);
|
|
379
|
+
}
|
|
380
|
+
_timeSelected(date) {
|
|
381
|
+
if (this.clockView === 'hour') {
|
|
382
|
+
this.clockView = 'minute';
|
|
383
|
+
}
|
|
384
|
+
this._activeDate = this.selected = date;
|
|
385
|
+
}
|
|
386
|
+
_onActiveDateChange(date) {
|
|
387
|
+
this._activeDate = date;
|
|
388
|
+
this.activeDateChange.emit(date);
|
|
389
|
+
}
|
|
390
|
+
handleOk() {
|
|
391
|
+
if (this._selected) {
|
|
392
|
+
this.selectedChange.emit(this._selected);
|
|
393
|
+
}
|
|
394
|
+
this._userSelection.emit();
|
|
395
|
+
}
|
|
396
|
+
handleCancel() {
|
|
397
|
+
this._userSelection.emit();
|
|
398
|
+
}
|
|
399
|
+
ngOnDestroy() {
|
|
400
|
+
if (this.datetimepickerIntlChangesSubscription) {
|
|
401
|
+
this.datetimepickerIntlChangesSubscription.unsubscribe();
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/** @nocollapse */ MtxTime.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxTime, deps: [{ token: i1.DatetimeAdapter }, { token: i0.ChangeDetectorRef }, { token: i2.MtxDatetimepickerIntl }], target: i0.ɵɵFactoryTarget.Component });
|
|
406
|
+
/** @nocollapse */ MtxTime.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: MtxTime, selector: "mtx-time", inputs: { dateFilter: "dateFilter", interval: "interval", twelvehour: "twelvehour", AMPM: "AMPM", activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", clockView: "clockView" }, outputs: { selectedChange: "selectedChange", activeDateChange: "activeDateChange", _userSelection: "_userSelection", ampmChange: "ampmChange", clockViewChange: "clockViewChange" }, host: { classAttribute: "mtx-time" }, viewQueries: [{ propertyName: "hourInputElement", first: true, predicate: ["hourInput"], descendants: true, read: (ElementRef) }, { propertyName: "hourInputDirective", first: true, predicate: ["hourInput"], descendants: true, read: MtxTimeInput }, { propertyName: "minuteInputElement", first: true, predicate: ["minuteInput"], descendants: true, read: (ElementRef) }, { propertyName: "minuteInputDirective", first: true, predicate: ["minuteInput"], descendants: true, read: MtxTimeInput }], exportAs: ["mtxTime"], usesOnChanges: true, ngImport: i0, template: "<div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"handleHourInputChange($event)\"\n (focus)=\"handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"handleFocus('minute')\" />\n\n <div *ngIf=\"twelvehour\" class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n </div>\n</div>\n\n<mtx-clock (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n<div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n</div>\n", styles: [".mtx-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.mtx-time-input-wrapper{padding:8px 0;text-align:center}.mtx-time-input-inner{display:inline-flex;height:56px}.mtx-time-input{box-sizing:border-box;width:72px;height:100%;padding:0;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;-webkit-appearance:none;appearance:none;outline:none}.mtx-time-seperator{display:inline-flex;justify-content:center;align-items:center;width:24px;font-size:36px}.mtx-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px}[dir=rtl] .mtx-time-ampm{margin-left:auto;margin-right:12px}.mtx-time-ampm .mtx-time-am,.mtx-time-ampm .mtx-time-pm{flex:1;width:40px;min-width:auto;padding:0;line-height:normal;border-width:1px;border-style:solid}.mtx-time-ampm .mtx-time-am{border-radius:8px 8px 0 0}.mtx-time-ampm .mtx-time-pm{border-radius:0 0 8px 8px;border-top:none}.mtx-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MtxClock, selector: "mtx-clock", inputs: ["dateFilter", "interval", "twelvehour", "activeDate", "selected", "minDate", "maxDate", "startView"], outputs: ["selectedChange", "activeDateChange", "_userSelection"], exportAs: ["mtxClock"] }, { kind: "directive", type: MtxTimeInput, selector: "input.mtx-time-input", inputs: ["timeInterval", "timeMin", "timeMax", "timeValue"], outputs: ["timeValueChanged"], exportAs: ["mtxTimeInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
407
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxTime, decorators: [{
|
|
408
|
+
type: Component,
|
|
409
|
+
args: [{ selector: 'mtx-time', exportAs: 'mtxTime', host: {
|
|
410
|
+
class: 'mtx-time',
|
|
411
|
+
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"handleHourInputChange($event)\"\n (focus)=\"handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"handleFocus('minute')\" />\n\n <div *ngIf=\"twelvehour\" class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n </div>\n</div>\n\n<mtx-clock (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n<div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n</div>\n", styles: [".mtx-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.mtx-time-input-wrapper{padding:8px 0;text-align:center}.mtx-time-input-inner{display:inline-flex;height:56px}.mtx-time-input{box-sizing:border-box;width:72px;height:100%;padding:0;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;-webkit-appearance:none;appearance:none;outline:none}.mtx-time-seperator{display:inline-flex;justify-content:center;align-items:center;width:24px;font-size:36px}.mtx-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px}[dir=rtl] .mtx-time-ampm{margin-left:auto;margin-right:12px}.mtx-time-ampm .mtx-time-am,.mtx-time-ampm .mtx-time-pm{flex:1;width:40px;min-width:auto;padding:0;line-height:normal;border-width:1px;border-style:solid}.mtx-time-ampm .mtx-time-am{border-radius:8px 8px 0 0}.mtx-time-ampm .mtx-time-pm{border-radius:0 0 8px 8px;border-top:none}.mtx-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}\n"] }]
|
|
412
|
+
}], ctorParameters: function () { return [{ type: i1.DatetimeAdapter }, { type: i0.ChangeDetectorRef }, { type: i2.MtxDatetimepickerIntl }]; }, propDecorators: { selectedChange: [{
|
|
413
|
+
type: Output
|
|
414
|
+
}], activeDateChange: [{
|
|
415
|
+
type: Output
|
|
416
|
+
}], _userSelection: [{
|
|
417
|
+
type: Output
|
|
418
|
+
}], ampmChange: [{
|
|
419
|
+
type: Output
|
|
420
|
+
}], clockViewChange: [{
|
|
421
|
+
type: Output
|
|
422
|
+
}], dateFilter: [{
|
|
423
|
+
type: Input
|
|
424
|
+
}], interval: [{
|
|
425
|
+
type: Input
|
|
426
|
+
}], hourInputElement: [{
|
|
427
|
+
type: ViewChild,
|
|
428
|
+
args: ['hourInput', { read: (ElementRef) }]
|
|
429
|
+
}], hourInputDirective: [{
|
|
430
|
+
type: ViewChild,
|
|
431
|
+
args: ['hourInput', { read: MtxTimeInput }]
|
|
432
|
+
}], minuteInputElement: [{
|
|
433
|
+
type: ViewChild,
|
|
434
|
+
args: ['minuteInput', { read: (ElementRef) }]
|
|
435
|
+
}], minuteInputDirective: [{
|
|
436
|
+
type: ViewChild,
|
|
437
|
+
args: ['minuteInput', { read: MtxTimeInput }]
|
|
438
|
+
}], twelvehour: [{
|
|
439
|
+
type: Input
|
|
440
|
+
}], AMPM: [{
|
|
441
|
+
type: Input
|
|
442
|
+
}], activeDate: [{
|
|
443
|
+
type: Input
|
|
444
|
+
}], selected: [{
|
|
445
|
+
type: Input
|
|
446
|
+
}], minDate: [{
|
|
447
|
+
type: Input
|
|
448
|
+
}], maxDate: [{
|
|
449
|
+
type: Input
|
|
450
|
+
}], clockView: [{
|
|
451
|
+
type: Input
|
|
452
|
+
}] } });
|
|
453
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZGF0ZXRpbWVwaWNrZXIvdGltZS50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZGF0ZXRpbWVwaWNrZXIvdGltZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsb0JBQW9CLEdBRXJCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFRdkIsU0FBUyxHQUFHLENBQUMsR0FBZ0IsRUFBRSxJQUFZO0lBQ3pDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUk7UUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFVRCxNQUFNLE9BQU8sWUFBWTtJQW9DdkIsWUFBb0IsT0FBbUIsRUFBVSxHQUFzQjtRQUFuRCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQi9ELGNBQVMsR0FBVyxDQUFDLENBQUM7UUFNdEIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQU1ULFNBQUksR0FBRyxRQUFRLENBQUM7UUFXZCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBSXJELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7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QUFJLEVBQUUsQ0FBQSxVQUE0QixDQUFBLEVBQUU7Z0JBSXBELGtCQUFrQjtzQkFEM0IsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUlwQyxrQkFBa0I7c0JBRDNCLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUEsVUFBNEIsQ0FBQSxFQUFFO2dCQUl0RCxvQkFBb0I7c0JBRDdCLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFPNUMsVUFBVTtzQkFEYixLQUFLO2dCQVVHLElBQUk7c0JBQVosS0FBSztnQkFNRixVQUFVO3NCQURiLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSztnQkFZRixPQUFPO3NCQURWLEtBQUs7Z0JBV0YsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQm9vbGVhbklucHV0LFxuICBjb2VyY2VCb29sZWFuUHJvcGVydHksXG4gIGNvZXJjZU51bWJlclByb3BlcnR5LFxuICBOdW1iZXJJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERPV05fQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnQG5nLW1hdGVyby9leHRlbnNpb25zL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTGlrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTXR4Q2xvY2tWaWV3IH0gZnJvbSAnLi9jbG9jayc7XG5pbXBvcnQgeyBNdHhEYXRldGltZXBpY2tlckZpbHRlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWZpbHRlcnR5cGUnO1xuaW1wb3J0IHsgTXR4RGF0ZXRpbWVwaWNrZXJJbnRsIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1pbnRsJztcbmltcG9ydCB7IE10eEFNUE0gfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLXR5cGVzJztcblxuZnVuY3Rpb24gcGFkKG51bTogTnVtYmVySW5wdXQsIHNpemU6IG51bWJlcikge1xuICBudW0gPSBTdHJpbmcobnVtKTtcbiAgd2hpbGUgKG51bS5sZW5ndGggPCBzaXplKSBudW0gPSAnMCcgKyBudW07XG4gIHJldHVybiBudW07XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0Lm10eC10aW1lLWlucHV0JyxcbiAgaG9zdDoge1xuICAgICcoYmx1ciknOiAnYmx1cigkZXZlbnQpJyxcbiAgICAnKGZvY3VzKSc6ICdmb2N1cygkZXZlbnQpJyxcbiAgfSxcbiAgZXhwb3J0QXM6ICdtdHhUaW1lSW5wdXQnLFxufSlcbmV4cG9ydCBjbGFzcyBNdHhUaW1lSW5wdXQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ3RpbWVJbnRlcnZhbCcpXG4gIHNldCB0aW1lSW50ZXJ2YWwodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfaW50ZXJ2YWw6IG51bWJlciA9IDE7XG5cbiAgQElucHV0KCd0aW1lTWluJylcbiAgc2V0IHRpbWVNaW4odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fbWluID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX21pbiA9IDA7XG5cbiAgQElucHV0KCd0aW1lTWF4JylcbiAgc2V0IHRpbWVNYXgodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fbWF4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX21heCA9IEluZmluaXR5O1xuXG4gIEBJbnB1dCgndGltZVZhbHVlJylcbiAgc2V0IHRpbWVWYWx1ZSh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAoIXRoaXMuaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMud3JpdGVQbGFjZWhvbGRlcih0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgdGltZVZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TnVtYmVySW5wdXQ+KCk7XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IE51bWJlcklucHV0O1xuXG4gIHByaXZhdGUga2V5RG93bkxpc3RlbmVyID0gdGhpcy5rZXlEb3duSGFuZGxlci5iaW5kKHRoaXMpO1xuICBwcml2YXRlIGtleVByZXNzTGlzdGVuZXIgPSB0aGlzLmtleVByZXNzSGFuZGxlci5iaW5kKHRoaXMpO1xuICBwcml2YXRlIGlucHV0RXZlbnRMaXN0ZW5lciA9IHRoaXMuaW5wdXRDaGFuZ2VkSGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5RG93bkxpc3RlbmVyLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gRG8gbm90IHBhc3NpdmUgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMua2V5UHJlc3NMaXN0ZW5lcik7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmlucHV0RXZlbnRMaXN0ZW5lciwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBoYXNGb2N1cygpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudD8uYWN0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGdldCBpbnB1dEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIH1cblxuICAvLyBXZSBsb29rIGhlcmUgYXQgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLCBiZWNhdXNlIHdlIHdyaXRlICcnIGludG8gdGhlIHZhbHVlIG9uIGZvY3VzXG4gIC8vIHBsYWNlaG9sZGVyIHNob3VsZCBhbHdheXMgYmUgdXAgdG8gZGF0ZSB3aXRoIFwiY3VycmVudFZhbHVlXCJcbiAgZ2V0IHZhbGlkKCkge1xuICAgIC8vIEF0IHRoZSBzdGFydCBfdmFsdWUgaXMgdW5kZWZpbmVkIHRoZXJlZm9yZSB0aGlzIHdvdWxkIHJlc3VsdCBpbiBub3QgdmFsaWQgYW5kXG4gICAgLy8gbWFrZSBhIHVnbHkgd2FybmluZyBib3JkZXIgYWZ0ZXJ3YXJkcyB3ZSBjYW4gc2FmZWx5IGNoZWNrXG4gICAgaWYgKHRoaXMuX3ZhbHVlKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBTdHJpbmcodGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpO1xuXG4gICAgICAvLyBJdCBjYW4gYmUgdGhhdCBjdXJyZW50VmFsdWUgaXMgZW1wdHkgZHVlIHRvIHdlIHJlbW92aW5nIHRoZSB2YWx1ZSBvbiBmb2N1cyxcbiAgICAgIC8vIGlmIHRoYXQgaXMgdGhlIGNhc2Ugd2Ugc2hvdWxkIGNoZWNrIHByZXZpb3VzIHZhbHVlIHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgcGxhY2Vob2xkZXJcbiAgICAgIGlmIChjdXJyZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZSA9PSB0aGlzLmlucHV0RWxlbWVudC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZSA9PSB0aGlzLmlucHV0RWxlbWVudC5wbGFjZWhvbGRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpIHtcbiAgICByZXR1cm4gIXRoaXMudmFsaWQ7XG4gIH1cblxuICBibHVyKCkge1xuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy53cml0ZVBsYWNlaG9sZGVyKHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLnRpbWVWYWx1ZUNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHZhbHVlIHRvIGlucHV0RWxlbWVudFxuICAgKiBAcGFyYW0gdmFsdWUgTnVtYmVySW5wdXRcbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBwYWQodmFsdWUsIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgdmFsdWUgdG8gcGxhY2Vob2xkZXJcbiAgICogQHBhcmFtIHZhbHVlIE51bWJlcklucHV0XG4gICAqL1xuICB3cml0ZVBsYWNlaG9sZGVyKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LnBsYWNlaG9sZGVyID0gcGFkKHZhbHVlLCAyKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKFN0cmluZyh0aGlzLmlucHV0RWxlbWVudC52YWx1ZSkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVUF9BUlJPVykge1xuICAgICAgICB2YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdmFsdWUgKz0gdGhpcy5faW50ZXJ2YWw7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBET1dOX0FSUk9XKSB7XG4gICAgICAgIHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodGhpcy5fdmFsdWUpO1xuICAgICAgICB2YWx1ZSAtPSB0aGlzLl9pbnRlcnZhbDtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLndyaXRlUGxhY2Vob2xkZXIodmFsdWUpO1xuICAgICAgICB0aGlzLmNsYW1wSW5wdXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnRpbWVWYWx1ZUNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgbm9uIG51bWJlciBpbnB1dHMgaW4gdGhlIGlucHV0RWxlbWVudCB3aXRoIHRoZSBleGNlcHRpb24gb2YgRW50ZXIvQmFja1NwYWNlXG4gICAqIEBwYXJhbSBldmVudCBLZXlib2FyZEV2ZW50XG4gICAqL1xuICBrZXlQcmVzc0hhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudD8ua2V5ID8/IG51bGw7XG4gICAgaWYgKGlzTmFOKE51bWJlcihrZXkpKSAmJiBrZXkgIT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRDaGFuZ2VkSGFuZGxlcigpIHtcbiAgICB0aGlzLmNsYW1wSW5wdXRWYWx1ZSgpO1xuICAgIHRoaXMudGltZVZhbHVlQ2hhbmdlZC5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIGNsYW1wSW5wdXRWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQ/LnZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodGhpcy5pbnB1dEVsZW1lbnQ/LnZhbHVlID8/IG51bGwpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgY2xhbXBlZFZhbHVlID0gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIHRoaXMuX21pbiksIHRoaXMuX21heCk7XG4gICAgICBpZiAoY2xhbXBlZFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUoY2xhbXBlZFZhbHVlKTtcbiAgICAgICAgdGhpcy53cml0ZVBsYWNlaG9sZGVyKGNsYW1wZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl92YWx1ZSA9IGNsYW1wZWRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVycyBvbiBkZXN0cnVjdGlvblxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5RG93bkxpc3RlbmVyKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMua2V5UHJlc3NMaXN0ZW5lcik7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmlucHV0RXZlbnRMaXN0ZW5lcik7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXR4LXRpbWUnLFxuICB0ZW1wbGF0ZVVybDogJ3RpbWUuaHRtbCcsXG4gIHN0eWxlVXJsczogWyd0aW1lLnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdtdHhUaW1lJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbXR4LXRpbWUnLFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTXR4VGltZTxEPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIGNoYW5nZXMuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBjaGFuZ2VzLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBzZWxlY3RlZC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IF91c2VyU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIEFNL1BNIGJ1dHRvbiBhcmUgY2xpY2tlZC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFtcG1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE10eEFNUE0+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gQU0vUE0gYnV0dG9uIGFyZSBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xvY2tWaWV3Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNdHhDbG9ja1ZpZXc+KCk7XG5cbiAgLyoqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGUuICovXG4gIEBJbnB1dCgpIGRhdGVGaWx0ZXIhOiAoZGF0ZTogRCwgdHlwZTogTXR4RGF0ZXRpbWVwaWNrZXJGaWx0ZXJUeXBlKSA9PiBib29sZWFuO1xuXG4gIC8qKiBTdGVwIG92ZXIgbWludXRlcy4gKi9cbiAgQElucHV0KCkgaW50ZXJ2YWw6IG51bWJlciA9IDE7XG5cbiAgQFZpZXdDaGlsZCgnaG91cklucHV0JywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IH0pXG4gIHByb3RlY3RlZCBob3VySW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2hvdXJJbnB1dCcsIHsgcmVhZDogTXR4VGltZUlucHV0IH0pXG4gIHByb3RlY3RlZCBob3VySW5wdXREaXJlY3RpdmU6IE10eFRpbWVJbnB1dCB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdtaW51dGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiB9KVxuICBwcm90ZWN0ZWQgbWludXRlSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ21pbnV0ZUlucHV0JywgeyByZWFkOiBNdHhUaW1lSW5wdXQgfSlcbiAgcHJvdGVjdGVkIG1pbnV0ZUlucHV0RGlyZWN0aXZlOiBNdHhUaW1lSW5wdXQgfCB1bmRlZmluZWQ7XG5cbiAgZGF0ZXRpbWVwaWNrZXJJbnRsQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uTGlrZTtcblxuICAvKiogV2hldGhlciB0aGUgY2xvY2sgdXNlcyAxMiBob3VyIGZvcm1hdC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHR3ZWx2ZWhvdXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3R3ZWx2ZWhvdXI7XG4gIH1cbiAgc2V0IHR3ZWx2ZWhvdXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl90d2VsdmVob3VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF90d2VsdmVob3VyID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHRpbWUgaXMgbm93IGluIEFNIG9yIFBNLiAqL1xuICBASW5wdXQoKSBBTVBNOiBNdHhBTVBNID0gJ0FNJztcblxuICAvKipcbiAgICogVGhlIGRhdGUgdG8gZGlzcGxheSBpbiB0aGlzIGNsb2NrIHZpZXcuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYWN0aXZlRGF0ZSgpOiBEIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZTtcbiAgfVxuICBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRCkge1xuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmNsYW1wRGF0ZSh2YWx1ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICB9XG4gIHByaXZhdGUgX2FjdGl2ZURhdGUhOiBEO1xuXG4gIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZCgpOiBEIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuX2FkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2FkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9zZWxlY3RlZCE6IEQgfCBudWxsO1xuXG4gIC8qKiBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBtaW5EYXRlKCk6IEQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfbWluRGF0ZSE6IEQgfCBudWxsO1xuXG4gIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgfVxuICBzZXQgbWF4RGF0ZSh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5fYWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fYWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHByaXZhdGUgX21heERhdGUhOiBEIHwgbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2xvY2sgc2hvdWxkIGJlIHN0YXJ0ZWQgaW4gaG91ciBvciBtaW51dGUgdmlldy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGNsb2NrVmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xvY2tWaWV3O1xuICB9XG4gIHNldCBjbG9ja1ZpZXcodmFsdWU6IE10eENsb2NrVmlldykge1xuICAgIHRoaXMuX2Nsb2NrVmlldyA9IHZhbHVlO1xuICB9XG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9jayBpcyBpbiBob3VyIHZpZXcuICovXG4gIHByaXZhdGUgX2Nsb2NrVmlldzogTXR4Q2xvY2tWaWV3ID0gJ2hvdXInO1xuXG4gIGdldCBpc0hvdXJWaWV3KCkge1xuICAgIHJldHVybiB0aGlzLl9jbG9ja1ZpZXcgPT09ICdob3VyJztcbiAgfVxuXG4gIGdldCBpc01pbnV0ZVZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb2NrVmlldyA9PT0gJ2hvdXInO1xuICB9XG5cbiAgZ2V0IGhvdXIoKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZURhdGUpIHtcbiAgICAgIGlmICh0aGlzLnR3ZWx2ZWhvdXIpIHtcbiAgICAgICAgcmV0dXJuICcxMic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJzAwJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBob3VyID0gTnVtYmVyKHRoaXMuX2FkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpKTtcbiAgICBpZiAoIXRoaXMudHdlbHZlaG91cikge1xuICAgICAgcmV0dXJuIHRoaXMucHJlZml4V2l0aFplcm8oaG91cik7XG4gICAgfVxuXG4gICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgIHJldHVybiAnMTInO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVmaXhXaXRoWmVybyhob3VyID4gMTIgPyBob3VyIC0gMTIgOiBob3VyKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWludXRlKCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZURhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZWZpeFdpdGhaZXJvKHRoaXMuX2FkYXB0ZXIuZ2V0TWludXRlKHRoaXMuYWN0aXZlRGF0ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiAnMDAnO1xuICB9XG5cbiAgcHJlZml4V2l0aFplcm8odmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSA8IDEwKSB7XG4gICAgICByZXR1cm4gJzAnICsgU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2FkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIF9kYXRldGltZXBpY2tlckludGw6IE10eERhdGV0aW1lcGlja2VySW50bFxuICApIHtcbiAgICB0aGlzLmRhdGV0aW1lcGlja2VySW50bENoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLl9kYXRldGltZXBpY2tlckludGwuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIHdoZW4gY2xvY2tWaWV3IGNoYW5nZXMgYnkgaW5wdXQgd2Ugc2hvdWxkIGZvY3VzIHRoZSBjb3JyZWN0IGlucHV0XG4gICAgaWYgKGNoYW5nZXMuY2xvY2tWaWV3KSB7XG4gICAgICBpZiAoY2hhbmdlcy5jbG9ja1ZpZXcuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmNsb2NrVmlldy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dEVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c0lucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgZm9jdXNJbnB1dEVsZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMuY2xvY2tWaWV3ID09PSAnaG91cicpIHtcbiAgICAgIGlmICh0aGlzLmhvdXJJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgKHRoaXMuaG91cklucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm1pbnV0ZUlucHV0RWxlbWVudCkge1xuICAgICAgICAodGhpcy5taW51dGVJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUhvdXJJbnB1dENoYW5nZSh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICBjb25zdCBob3VyID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIGlmIChob3VyIHx8IGhvdXIgPT09IDApIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fYWRhcHRlci5jcmVhdGVEYXRldGltZShcbiAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgIHRoaXMudXBkYXRlSG91ckZvckFtUG0oaG91ciksXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0TWludXRlKHRoaXMuYWN0aXZlRGF0ZSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmNsYW1wRGF0ZShuZXdWYWx1ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcblxuICAgICAgLy8gSWYgcHJldmlvdXNseSB3ZSBkaWQgc2V0IFttdHhWYWx1ZV09XCIxM1wiIGFuZCB0aGUgaW5wdXQgY2hhbmdlZCB0byA2LCBhbmQgdGhlIGNsYW1waW5nIHdpbGwgbWFrZSBpdCBcIjEzXCIgYWdhaW5cbiAgICAgIC8vIHRoZW4gdGhlIGhvdXJJbnB1dERpcmVjdGl2ZSB3aWxsIG5vdCBoYXZlIGJlZW4gdXBkYXRlZCBzaW5jZSBcIjEzXCIgPT09IFwiMTNcIiBzYW1lIHJlZmVyZW5jZSBzbyBubyBjaGFuZ2UgZGV0ZWN0ZWRcbiAgICAgIC8vIGJ5IGRpcmVjdGx5IHNldHRpbmcgaXQgd2l0aGluIHRoaXMgaGFuZGxlciwgd2UgaGFuZGxlIHRoaXMgdXNlY2FzZVxuICAgICAgaWYgKHRoaXMuaG91cklucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuaG91cklucHV0RGlyZWN0aXZlLnRpbWVWYWx1ZSA9IHRoaXMuaG91cjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVIb3VyRm9yQW1QbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnR3ZWx2ZWhvdXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAxLTEyXG4gICAgaWYgKHRoaXMuQU1QTSA9PT0gJ0FNJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxMikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLy8gUE1cbiAgICBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgfVxuXG4gICAgICAvLyBvdGhlciBjYXNlcywgd2Ugc2hvdWxkIGFkZCAxMiB0byB0aGUgdmFsdWUgYWthIDM6MDAgUE0gPSAzICsgMTIgPSAxNTowMFxuICAgICAgcmV0dXJuIHZhbHVlICsgMTI7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWludXRlSW5wdXRDaGFuZ2UodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgY29uc3QgbWludXRlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIGlmIChtaW51dGUgfHwgbWludXRlID09PSAwKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2FkYXB0ZXIuY3JlYXRlRGF0ZXRpbWUoXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcih0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9hZGFwdGVyLmdldEhvdXIodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICAgIG1pbnV0ZVxuICAgICAgKTtcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmNsYW1wRGF0ZShuZXdWYWx1ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcblxuICAgICAgLy8gSWYgcHJldmlvdXNseSB3ZSBkaWQgc2V0IFttdHhWYWx1ZV09XCI0MFwiIGFuZCB0aGUgaW5wdXQgY2hhbmdlZCB0byAzMCwgYW5kIHRoZSBjbGFtcGluZyB3aWxsIG1ha2UgaXQgXCI0MFwiIGFnYWluXG4gICAgICAvLyB0aGVuIHRoZSBtaW51dGVJbnB1dERpcmVjdGl2ZSB3aWxsIG5vdCBoYXZlIGJlZW4gdXBkYXRlZCBzaW5jZSBcIjQwXCIgPT09IFwiNDBcIiBzYW1lIHJlZmVyZW5jZSBzbyBubyBjaGFuZ2UgZGV0ZWN0ZWRcbiAgICAgIC8vIGJ5IGRpcmVjdGx5IHNldHRpbmcgaXQgd2l0aGluIHRoaXMgaGFuZGxlciwgd2UgaGFuZGxlIHRoaXMgdXNlY2FzZVxuICAgICAgaWYgKHRoaXMubWludXRlSW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5taW51dGVJbnB1dERpcmVjdGl2ZS50aW1lVmFsdWUgPSB0aGlzLm1pbnV0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVGb2N1cyhjbG9ja1ZpZXc6IE10eENsb2NrVmlldykge1xuICAgIHRoaXMuY2xvY2tWaWV3ID0gY2xvY2tWaWV3O1xuICAgIHRoaXMuY2xvY2tWaWV3Q2hhbmdlLmVtaXQoY2xvY2tWaWV3KTtcbiAgfVxuXG4gIF90aW1lU2VsZWN0ZWQoZGF0ZTogRCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb2NrVmlldyA9PT0gJ2hvdXInKSB7XG4gICAgICB0aGlzLmNsb2NrVmlldyA9ICdtaW51dGUnO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZCA9IGRhdGU7XG4gIH1cblxuICBfb25BY3RpdmVEYXRlQ2hhbmdlKGRhdGU6IEQpIHtcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gZGF0ZTtcbiAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgfVxuXG4gIGhhbmRsZU9rKCkge1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcbiAgICB9XG4gICAgdGhpcy5fdXNlclNlbGVjdGlvbi5lbWl0KCk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWwoKSB7XG4gICAgdGhpcy5fdXNlclNlbGVjdGlvbi5lbWl0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRldGltZXBpY2tlckludGxDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRhdGV0aW1lcGlja2VySW50bENoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdHdlbHZlaG91cjogQm9vbGVhbklucHV0O1xufVxuIiwiPGRpdiBjbGFzcz1cIm10eC10aW1lLWlucHV0LXdyYXBwZXJcIj5cbiAgPGRpdiBjbGFzcz1cIm10eC10aW1lLWlucHV0LWlubmVyXCI+XG4gICAgPGlucHV0IGNsYXNzPVwibXR4LXRpbWUtaW5wdXRcIlxuICAgICAgICAgICBbY2xhc3MubXR4LXRpbWUtaW5wdXQtYWN0aXZlXT1cImNsb2NrVmlldyA9PT0gJ2hvdXInXCJcbiAgICAgICAgICAgW2NsYXNzLm10eC10aW1lLWlucHV0LXdhcm5pbmddPVwiIWhvdXJJbnB1dC52YWxpZFwiXG4gICAgICAgICAgICNob3VySW5wdXQ9XCJtdHhUaW1lSW5wdXRcIlxuICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCJcbiAgICAgICAgICAgW3RpbWVNaW5dPVwidHdlbHZlaG91ciA/IDEgOiAwXCJcbiAgICAgICAgICAgW3RpbWVNYXhdPVwidHdlbHZlaG91ciA/IDEyIDogMjNcIlxuICAgICAgICAgICBbdGltZVZhbHVlXT1cImhvdXJcIlxuICAgICAgICAgICAodGltZVZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVIb3VySW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygnaG91cicpXCIgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJtdHgtdGltZS1zZXBlcmF0b3JcIj46PC9kaXY+XG5cbiAgICA8aW5wdXQgY2xhc3M9XCJtdHgtdGltZS1pbnB1dFwiXG4gICAgICAgICAgIFtjbGFzcy5tdHgtdGltZS1pbnB1dC1hY3RpdmVdPVwiY2xvY2tWaWV3ID09PSAnbWludXRlJ1wiXG4gICAgICAgICAgIFtjbGFzcy5tdHgtdGltZS1pbnB1dC13YXJuaW5nXT1cIiFtaW51dGVJbnB1dC52YWxpZFwiXG4gICAgICAgICAgICNtaW51dGVJbnB1dD1cIm10eFRpbWVJbnB1dFwiXG4gICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgICAgIG1heGxlbmd0aD1cIjJcIlxuICAgICAgICAgICBbdGltZU1pbl09XCIwXCJcbiAgICAgICAgICAgW3RpbWVNYXhdPVwiNTlcIlxuICAgICAgICAgICBbdGltZVZhbHVlXT1cIm1pbnV0ZVwiXG4gICAgICAgICAgICh0aW1lVmFsdWVDaGFuZ2VkKT1cImhhbmRsZU1pbnV0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICBbdGltZUludGVydmFsXT1cImludGVydmFsXCJcbiAgICAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzKCdtaW51dGUnKVwiIC8+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidHdlbHZlaG91clwiIGNsYXNzPVwibXR4LXRpbWUtYW1wbVwiPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm10eC10aW1lLWFtXCJcbiAgICAgICAgICAgICAgW2NsYXNzLm10eC10aW1lLWFtcG0tYWN0aXZlXT1cIkFNUE0gPT09ICdBTSdcIiBhcmlhLWxhYmVsPVwiQU1cIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYW1wbUNoYW5nZS5lbWl0KCdBTScpXCI+QU08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtdHgtdGltZS1wbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5tdHgtdGltZS1hbXBtLWFjdGl2ZV09XCJBTVBNID09PSAnUE0nXCIgYXJpYS1sYWJlbD1cIlBNXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFtcG1DaGFuZ2UuZW1pdCgnUE0nKVwiPlBNPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxtdHgtY2xvY2sgKHNlbGVjdGVkQ2hhbmdlKT1cIl90aW1lU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlKT1cIl9vbkFjdGl2ZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICAgICBbaW50ZXJ2YWxdPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgICAgIFtzdGFydFZpZXddPVwiY2xvY2tWaWV3XCJcbiAgICAgICAgICAgW3R3ZWx2ZWhvdXJdPVwidHdlbHZlaG91clwiPlxuPC9tdHgtY2xvY2s+XG5cbjxkaXYgY2xhc3M9XCJtdHgtdGltZS1idXR0b24td3JhcHBlclwiPlxuICA8YnV0dG9uIGNsYXNzPVwibXR4LXRpbWUtY2FuY2VsLWJ1dHRvblwiIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJoYW5kbGVDYW5jZWwoKVwiPlxuICAgIHt7IF9kYXRldGltZXBpY2tlckludGwuY2FuY2VsTGFiZWwgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gY2xhc3M9XCJtdHgtdGltZS1vay1idXR0b25cIiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiaGFuZGxlT2soKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm1pbnV0ZUlucHV0RGlyZWN0aXZlPy5pbnZhbGlkIHx8IGhvdXJJbnB1dERpcmVjdGl2ZT8uaW52YWxpZFwiPlxuICAgIHt7IF9kYXRldGltZXBpY2tlckludGwub2tMYWJlbCB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL2dyaWQvZ3JpZC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdE1lbnUsIE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24sIFRvb2x0aXBUb3VjaEdlc3R1cmVzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKiBDb2x1bW4gZGVmaW5pdGlvbiBvZiBncmlkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdHhHcmlkQ29sdW1uIHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGVhZGVyPzogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBoaWRlPzogYm9vbGVhbjtcbiAgc2hvdz86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcGlubmVkPzogTXR4R3JpZENvbHVtblBpblZhbHVlO1xuICBsZWZ0Pzogc3RyaW5nO1xuICByaWdodD86IHN0cmluZztcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIHJlc2l6YWJsZT86IGJvb2xlYW47XG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICBtYXhXaWR0aD86IG51bWJlcjtcbiAgc29ydGFibGU/OiBib29sZWFuIHwgc3RyaW5nO1xuICBzb3J0UHJvcD86IE10eEdyaWRTb3J0UHJvcDtcbiAgdHlwZT86IE10eEdyaWRDb2x1bW5UeXBlO1xuICB0eXBlUGFyYW1ldGVyPzogTXR4R3JpZENvbHVtblR5cGVQYXJhbWV0ZXI7XG4gIHRhZz86IE10eEdyaWRDb2x1bW5UYWc7XG4gIGJ1dHRvbnM/OiBNdHhHcmlkQ29sdW1uQnV0dG9uW107XG4gIGZvcm1hdHRlcj86IChyb3dEYXRhOiBhbnksIGNvbERlZj86IE10eEdyaWRDb2x1bW4pID0+IGFueTtcbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIHNob3dFeHBhbmQ/OiBib29sZWFuO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3VtbWFyeT86ICgoZGF0YTogYW55W10sIGNvbERlZj86IE10eEdyaWRDb2x1bW4pID0+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL2dyaWQvZ3JpZC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdE1lbnUsIE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24sIFRvb2x0aXBUb3VjaEdlc3R1cmVzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKiBDb2x1bW4gZGVmaW5pdGlvbiBvZiBncmlkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdHhHcmlkQ29sdW1uIHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGVhZGVyPzogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBoaWRlPzogYm9vbGVhbjtcbiAgc2hvdz86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcGlubmVkPzogTXR4R3JpZENvbHVtblBpblZhbHVlO1xuICBsZWZ0Pzogc3RyaW5nO1xuICByaWdodD86IHN0cmluZztcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIHJlc2l6YWJsZT86IGJvb2xlYW47XG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICBtYXhXaWR0aD86IG51bWJlcjtcbiAgc29ydGFibGU/OiBib29sZWFuIHwgc3RyaW5nO1xuICBzb3J0UHJvcD86IE10eEdyaWRTb3J0UHJvcDtcbiAgdHlwZT86IE10eEdyaWRDb2x1bW5UeXBlO1xuICB0eXBlUGFyYW1ldGVyPzogTXR4R3JpZENvbHVtblR5cGVQYXJhbWV0ZXI7XG4gIHRhZz86IE10eEdyaWRDb2x1bW5UYWc7XG4gIGJ1dHRvbnM/OiBNdHhHcmlkQ29sdW1uQnV0dG9uW107XG4gIGZvcm1hdHRlcj86IChyb3dEYXRhOiBhbnksIGNvbERlZj86IE10eEdyaWRDb2x1bW4pID0+IGFueTtcbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIHNob3dFeHBhbmQ/OiBib29sZWFuO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3VtbWFyeT86ICgoZGF0YTogYW55W10sIGNvbERlZj86IE10eEdyaWRDb2x1bW4pID0+IGFueSkgfCBzdHJpbmc7XG4gIGNsYXNzPzogc3RyaW5nO1xufVxuXG4vKiogUG9zc2libGUgY29sdW1uIHBpbiB2YWx1ZXMuICAqL1xuZXhwb3J0IGRlY2xhcmUgdHlwZSBNdHhHcmlkQ29sdW1uUGluVmFsdWUgPSAnbGVmdCcgfCAncmlnaHQnIHwgbnVsbDtcblxuLyoqIENvbHVtbiBwaW4gb3B0aW9uICAqL1xuZXhwb3J0IGludGVyZmFjZSBNdHhHcmlkQ29sdW1uUGluT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgdmFsdWU6IE10eEdyaWRDb2x1bW5QaW5WYWx1ZTtcbn1cblxuLyoqIFBvc3NpYmxlIGNvbHVtbiB0eXBlIHZhbHVlcy4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgTXR4R3JpZENvbHVtblR5cGUgPVxuICB8ICd0YWcnXG4gIHwgJ2J1dHRvbidcbiAgfCAnbGluaydcbiAgfCAnaW1hZ2UnXG4gIHwgJ2Jvb2xlYW4nXG4gIHwgJ251bWJlcidcbiAgfCAnY3VycmVuY3knXG4gIHwgJ3BlcmNlbnQnXG4gIHwgJ2RhdGUnO1xuXG4vKiogQ29sdW1uIHR5cGUgcGFyYW1ldGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdHhHcmlkQ29sdW1uVHlwZVBhcmFtZXRlciB7XG4gIGN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgZGlzcGxheT86IHN0cmluZyB8IGJvb2xlYW47XG4gIGRpZ2l0c0luZm8/OiBzdHJpbmc7XG4gIGZvcm1hdD86IHN0cmluZztcbiAgbG9jYWxlPzogc3RyaW5nO1xuICB0aW1lem9uZT86IHN0cmluZztcbn1cblxuLyoqIFRoZSBwcm9wZXJ0aWVzIG9mIGRhdGEgc29ydC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXR4R3JpZFNvcnRQcm9wIHtcbiAgYXJyb3dQb3NpdGlvbj86ICdiZWZvcmUnIHwgJ2FmdGVyJztcbiAgZGlzYWJsZUNsZWFyPzogYm9vbGVhbjtcbiAgaWQ/OiBzdHJpbmc7XG4gIHN0YXJ0PzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBDb2x1bW4gdGFnIG9mIGdyaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIE10eEdyaWRDb2x1bW5UYWcge1xuICBba2V5OiBudW1iZXJdOiBNdHhHcmlkQ29sdW1uVGFnVmFsdWU7XG4gIFtrZXk6IHN0cmluZ106IE10eEdyaWRDb2x1bW5UYWdWYWx1ZTtcbn1cblxuLyoqIFRoZSBwcm9wZXJ0aWVzIG9mIGNvbHVtbiB0YWcuICovXG5leHBvcnQgaW50ZXJmYWNlIE10eEdyaWRDb2x1bW5UYWdWYWx1ZSB7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xufVxuXG4vKiogVGhlIHByb3BlcnRpZXMgb2YgY29sdW1uIGJ1dHRvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXR4R3JpZENvbHVtbkJ1dHRvbiB7XG4gIHR5cGU/OiAnYmFzaWMnIHwgJ2ljb24nO1xuICB0ZXh0Pzogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBpY29uPzogc3RyaW5nO1xuICBjb2xvcj86IFRoZW1lUGFsZXR0ZTtcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbiB8ICgocm93RGF0YTogYW55KSA9PiBib29sZWFuKTtcbiAgY2xpY2s/OiAocm93RGF0YTogYW55KSA9PiB2b2lkO1xuICBpaWY/OiAocm93RGF0YTogYW55KSA9PiBib29sZWFuO1xuICBwb3A/OiBNdHhHcmlkQ29sdW1uQnV0dG9uUG9wO1xuICB0b29sdGlwPzogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+IHwgTXR4R3JpZENvbHVtbkJ1dHRvblRvb2x0aXA7XG59XG5cbi8qKiBUaGUgcHJvcGVydGllcyBvZiBjb2x1bW4gYnV0dG9uIHBvcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXR4R3JpZENvbHVtbkJ1dHRvblBvcCB7XG4gIHRpdGxlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBva0NvbG9yPzogVGhlbWVQYWxldHRlO1xuICBva1RleHQ/OiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGNsb3NlQ29sb3I/OiBUaGVtZVBhbGV0dGU7XG4gIGNsb3NlVGV4dD86IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPjtcbn1cblxuLyoqIFRoZSBwcm9wZXJ0aWVzIG9mIGNvbHVtbiBidXR0b24gdG9vbHRpcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXR4R3JpZENvbHVtbkJ1dHRvblRvb2x0aXAge1xuICBtZXNzYWdlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHBvc2l0aW9uPzogVG9vbHRpcFBvc2l0aW9uO1xuICBjbGFzcz86IGFueTtcbiAgaGlkZURlbGF5PzogbnVtYmVyO1xuICBzaG93RGVsYXk/OiBudW1iZXI7XG4gIHRvdWNoR2VzdHVyZXM/OiBUb29sdGlwVG91Y2hHZXN0dXJlcztcbn1cblxuLyoqIENlbGwgdGVtcGxhdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIE10eEdyaWRDZWxsVGVtcGxhdGUge1xuICBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG4vKiogUm93IHNlbGVjdGlvbiBmb3JtYXR0ZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIE10eEdyaWRSb3dTZWxlY3Rpb25Gb3JtYXR0ZXIge1xuICBkaXNhYmxlZD86IChyb3dEYXRhOiBhbnksIGluZGV4PzogbnVtYmVyKSA9PiBib29sZWFuO1xuICBoaWRlQ2hlY2tib3g/OiAocm93RGF0YTogYW55LCBpbmRleD86IG51bWJlcikgPT4gYm9vbGVhbjtcbn1cblxuLyoqIFJvdyBjbGFzcyBmb3JtYXR0ZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIE10eEdyaWRSb3dDbGFzc0Zvcm1hdHRlciB7XG4gIFtjbGFzc05hbWU6IHN0cmluZ106IChyb3dEYXRhOiBhbnksIGluZGV4PzogbnVtYmVyKSA9PiBib29sZWFuO1xufVxuXG4vKiogQ29sdW1uIG1lbnUgY29tcG9uZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdHhHcmlkQ29sdW1uTWVudSB7XG4gIG1lbnVQYW5lbDogTWF0TWVudTtcbiAgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xufVxuXG4vKiogUG9zc2libGUgYnV0dG9uIHR5cGUgdmFsdWVzLiAqL1xuZXhwb3J0IHR5cGUgTXR4R3JpZEJ1dHRvblR5cGUgPSAncmFpc2VkJyB8ICdzdHJva2VkJyB8ICdmbGF0JyB8ICdpY29uJyB8ICdmYWInIHwgJ21pbmktZmFiJztcbiJdfQ==
|